2 * VisualEditor UserInterface MWSyntaxHighlightWindow class.
4 * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
5 * @license The MIT License (MIT); see LICENSE.txt
9 * MediaWiki syntax highlight window.
16 ve.ui.MWSyntaxHighlightWindow = function VeUiMWSyntaxHighlightWindow() {
21 OO.initClass( ve.ui.MWSyntaxHighlightWindow );
23 /* Static properties */
25 ve.ui.MWSyntaxHighlightWindow.static.icon = 'alienextension';
27 ve.ui.MWSyntaxHighlightWindow.static.title = OO.ui.deferMsg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title' );
29 ve.ui.MWSyntaxHighlightWindow.static.dir = 'ltr';
36 ve.ui.MWSyntaxHighlightWindow.prototype.initialize = function () {
37 var noneMsg = ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none' );
39 this.language = new OO.ui.ComboBoxInputWidget( {
40 $overlay: this.$overlay,
42 filterFromInput: true,
43 items: $.map( ve.dm.MWSyntaxHighlightNode.static.getLanguages(), function ( lang ) {
44 return new OO.ui.MenuOptionWidget( { data: lang, label: lang || noneMsg } );
47 validate: function ( input ) {
48 return ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported( input );
52 this.showLinesCheckbox = new OO.ui.CheckboxInputWidget();
54 this.startLineNumber = new OO.ui.NumberInputWidget( {
60 this.language.connect( this, { change: 'onLanguageInputChange' } );
61 this.showLinesCheckbox.connect( this, { change: 'onShowLinesCheckboxChange' } );
62 this.startLineNumber.connect( this, { change: 'onStartLineNumberChange' } );
64 this.languageField = new OO.ui.FieldLayout( this.language, {
65 classes: [ 've-ui-mwSyntaxHighlightWindow-languageField' ],
67 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language' )
69 this.codeField = new OO.ui.FieldLayout( this.input, {
71 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code' )
73 this.showLinesField = new OO.ui.FieldLayout( this.showLinesCheckbox, {
75 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines' )
77 this.startLineField = new OO.ui.FieldLayout( this.startLineNumber, {
78 classes: [ 've-ui-mwSyntaxHighlightWindow-startLineField' ],
80 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-startingline' )
85 * Handle input change events
87 * @param {string} value New value
89 ve.ui.MWSyntaxHighlightWindow.prototype.onLanguageInputChange = function () {
90 var validity, inspector = this;
91 validity = this.language.getValidity();
92 validity.always( function () {
93 inspector.getActions().setAbilities( { done: validity.state() === 'resolved' } );
98 * Handle change events from the show lines chechbox
100 * @param {boolean} value Widget value
102 ve.ui.MWSyntaxHighlightWindow.prototype.onShowLinesCheckboxChange = function () {
103 var showLines = this.showLinesCheckbox.isSelected();
104 this.input.toggleLineNumbers( showLines );
105 this.startLineNumber.setDisabled( !showLines );
109 * Handle change events from the start line input
111 * @param {string} value Widget value
113 ve.ui.MWSyntaxHighlightWindow.prototype.onStartLineNumberChange = function ( value ) {
114 var input = this.input;
116 input.loadingPromise.done( function () {
117 input.editor.setOption( 'firstLineNumber', value !== '' ? +value : 1 );
122 * @inheritdoc OO.ui.Window
124 ve.ui.MWSyntaxHighlightWindow.prototype.getReadyProcess = function ( data, process ) {
125 return process.next( function () {
126 this.language.getMenu().toggle( false );
127 if ( !this.language.getValue() ) {
128 this.language.focus();
136 * @inheritdoc OO.ui.Window
138 ve.ui.MWSyntaxHighlightWindow.prototype.getSetupProcess = function ( data, process ) {
139 return process.next( function () {
140 var attrs = this.selectedNode ? this.selectedNode.getAttribute( 'mw' ).attrs : {},
141 language = attrs.lang || '',
142 showLines = attrs.line !== undefined,
143 startLine = attrs.start;
145 this.language.setValue( language );
147 this.showLinesCheckbox.setSelected( showLines );
148 this.startLineNumber.setValue( startLine );
153 * @inheritdoc OO.ui.Window
155 ve.ui.MWSyntaxHighlightWindow.prototype.getTeardownProcess = function ( data, process ) {
160 * @inheritdoc ve.ui.MWExtensionWindow
162 ve.ui.MWSyntaxHighlightWindow.prototype.updateMwData = function ( mwData ) {
163 var language = this.language.getValue(),
164 showLines = this.showLinesCheckbox.isSelected(),
165 startLine = this.startLineNumber.getValue();
167 mwData.attrs.lang = language || undefined;
168 mwData.attrs.line = showLines ? '1' : undefined;
169 mwData.attrs.start = startLine !== '' ? startLine : undefined;