summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js')
-rw-r--r--www/wiki/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js178
1 files changed, 178 insertions, 0 deletions
diff --git a/www/wiki/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js b/www/wiki/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js
new file mode 100644
index 00000000..10dba30f
--- /dev/null
+++ b/www/wiki/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js
@@ -0,0 +1,178 @@
+/*!
+ * VisualEditor user interface MWReferencesListDialog class.
+ *
+ * @copyright 2011-2018 VisualEditor Team's Cite sub-team and others; see AUTHORS.txt
+ * @license MIT
+ */
+
+/**
+ * Dialog for editing MediaWiki references lists.
+ *
+ * @class
+ * @extends ve.ui.NodeDialog
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+ve.ui.MWReferencesListDialog = function VeUiMWReferencesListDialog( config ) {
+ // Parent constructor
+ ve.ui.MWReferencesListDialog.super.call( this, config );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWReferencesListDialog, ve.ui.NodeDialog );
+
+/* Static Properties */
+
+ve.ui.MWReferencesListDialog.static.name = 'referencesList';
+
+ve.ui.MWReferencesListDialog.static.title =
+ OO.ui.deferMsg( 'cite-ve-dialog-referenceslist-title' );
+
+ve.ui.MWReferencesListDialog.static.modelClasses = [ ve.dm.MWReferencesListNode ];
+
+ve.ui.MWReferencesListDialog.static.size = 'medium';
+
+ve.ui.MWReferencesListDialog.static.actions = [
+ {
+ action: 'apply',
+ label: OO.ui.deferMsg( 'visualeditor-dialog-action-apply' ),
+ flags: [ 'progressive', 'primary' ],
+ modes: 'edit'
+ },
+ {
+ label: OO.ui.deferMsg( 'visualeditor-dialog-action-cancel' ),
+ flags: [ 'safe', 'back' ],
+ modes: 'edit'
+ }
+];
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferencesListDialog.prototype.getBodyHeight = function () {
+ return Math.max( 150, Math.ceil( this.editPanel.$element[ 0 ].scrollHeight ) );
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferencesListDialog.prototype.initialize = function () {
+ var groupField, responsiveField;
+
+ // Parent method
+ ve.ui.MWReferencesListDialog.super.prototype.initialize.call( this );
+
+ // Properties
+ this.panels = new OO.ui.StackLayout();
+ this.editPanel = new OO.ui.PanelLayout( {
+ scrollable: true, padded: true
+ } );
+ this.optionsFieldset = new OO.ui.FieldsetLayout();
+
+ this.groupInput = new ve.ui.MWReferenceGroupInputWidget( {
+ $overlay: this.$overlay,
+ emptyGroupName: ve.msg( 'cite-ve-dialog-reference-options-group-placeholder' )
+ } );
+ groupField = new OO.ui.FieldLayout( this.groupInput, {
+ align: 'top',
+ label: ve.msg( 'cite-ve-dialog-reference-options-group-label' )
+ } );
+
+ this.responsiveCheckbox = new OO.ui.CheckboxInputWidget();
+ responsiveField = new OO.ui.FieldLayout( this.responsiveCheckbox, {
+ align: 'inline',
+ label: ve.msg( 'cite-ve-dialog-reference-options-responsive-label' )
+ } );
+
+ // Initialization
+ this.optionsFieldset.addItems( [ groupField, responsiveField ] );
+ this.editPanel.$element.append( this.optionsFieldset.$element );
+ this.panels.addItems( [ this.editPanel ] );
+ this.$body.append( this.panels.$element );
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferencesListDialog.prototype.getActionProcess = function ( action ) {
+ if ( action === 'apply' ) {
+ return new OO.ui.Process( function () {
+ var refGroup, listGroup, oldListGroup, isResponsive, oldResponsive, mwData, attrChanges, doc,
+ surfaceModel = this.getFragment().getSurface();
+
+ // Save changes
+ refGroup = this.groupInput.getValue();
+ listGroup = 'mwReference/' + refGroup;
+ isResponsive = this.responsiveCheckbox.isSelected();
+
+ if ( this.selectedNode ) {
+ // Edit existing model
+ doc = surfaceModel.getDocument();
+ oldListGroup = this.selectedNode.getAttribute( 'listGroup' );
+ oldResponsive = this.selectedNode.getAttribute( 'isResponsive' );
+
+ if ( listGroup !== oldListGroup || isResponsive !== oldResponsive ) {
+ // newFromAttributeChanges doesn't do the smart-replacing
+ // for nested attributes, so make a copy of the mw
+ // attribute so we can disable autoGenerated now we've
+ // changed it.
+ mwData = ve.copy( this.selectedNode.getAttribute( 'mw' ) ) || {};
+ delete mwData.autoGenerated;
+
+ attrChanges = {
+ listGroup: listGroup,
+ refGroup: refGroup,
+ isResponsive: isResponsive,
+ mw: mwData
+ };
+ surfaceModel.change(
+ ve.dm.TransactionBuilder.static.newFromAttributeChanges(
+ doc, this.selectedNode.getOuterRange().start, attrChanges
+ )
+ );
+ }
+ }
+
+ this.close( { action: action } );
+ }, this );
+ }
+ // Parent method
+ return ve.ui.MWReferencesListDialog.super.prototype.getActionProcess.call( this, action );
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferencesListDialog.prototype.getSetupProcess = function ( data ) {
+ return ve.ui.MWReferencesListDialog.super.prototype.getSetupProcess.call( this, data )
+ .next( function () {
+ if ( !( this.selectedNode instanceof ve.dm.MWReferencesListNode ) ) {
+ throw new Error( 'Cannot open dialog: references list must be selected' );
+ }
+
+ this.actions.setMode( 'edit' );
+
+ this.groupInput.setValue( this.selectedNode.getAttribute( 'refGroup' ) );
+ this.groupInput.populateMenu( this.getFragment().getDocument().getInternalList() );
+
+ this.responsiveCheckbox.setSelected( this.selectedNode.getAttribute( 'isResponsive' ) );
+ }, this );
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferencesListDialog.prototype.getReadyProcess = function ( data ) {
+ return ve.ui.MWReferencesListDialog.super.prototype.getReadyProcess.call( this, data )
+ .next( function () {
+ this.groupInput.focus();
+ }, this );
+};
+
+/* Registration */
+
+ve.ui.windowFactory.register( ve.ui.MWReferencesListDialog );