diff options
author | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
commit | fc7369835258467bf97eb64f184b93691f9a9fd5 (patch) | |
tree | daabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/extensions/Cite/modules/ve-cite/ve.ui.MWReferencesListDialog.js |
first commit
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.js | 178 |
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 ); |