X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js diff --git a/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js b/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js new file mode 100644 index 00000000..bfaf0024 --- /dev/null +++ b/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js @@ -0,0 +1,160 @@ +/*! + * VisualEditor user interface MWReferencesListDialog class. + * + * @copyright 2011-2017 Cite VisualEditor Team and others; see AUTHORS.txt + * @license The MIT License (MIT); see LICENSE.txt + */ + +/** + * 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, 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 ) { + attrChanges = { + listGroup: listGroup, + refGroup: refGroup, + isResponsive: isResponsive + }; + 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 ); +}; + +/* Registration */ + +ve.ui.windowFactory.register( ve.ui.MWReferencesListDialog );