]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightWindow.js
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / extensions / SyntaxHighlight_GeSHi / modules / ve-syntaxhighlight / ve.ui.MWSyntaxHighlightWindow.js
1 /*!
2  * VisualEditor UserInterface MWSyntaxHighlightWindow class.
3  *
4  * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
5  * @license The MIT License (MIT); see LICENSE.txt
6  */
7
8 /**
9  * MediaWiki syntax highlight window.
10  *
11  * @class
12  * @abstract
13  *
14  * @constructor
15  */
16 ve.ui.MWSyntaxHighlightWindow = function VeUiMWSyntaxHighlightWindow() {
17 };
18
19 /* Inheritance */
20
21 OO.initClass( ve.ui.MWSyntaxHighlightWindow );
22
23 /* Static properties */
24
25 ve.ui.MWSyntaxHighlightWindow.static.icon = 'alienextension';
26
27 ve.ui.MWSyntaxHighlightWindow.static.title = OO.ui.deferMsg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title' );
28
29 ve.ui.MWSyntaxHighlightWindow.static.dir = 'ltr';
30
31 /* Methods */
32
33 /**
34  * @inheritdoc
35  */
36 ve.ui.MWSyntaxHighlightWindow.prototype.initialize = function () {
37         var noneMsg = ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none' );
38
39         this.language = new OO.ui.ComboBoxInputWidget( {
40                 $overlay: this.$overlay,
41                 menu: {
42                         filterFromInput: true,
43                         items: $.map( ve.dm.MWSyntaxHighlightNode.static.getLanguages(), function ( lang ) {
44                                 return new OO.ui.MenuOptionWidget( { data: lang, label: lang || noneMsg } );
45                         } )
46                 },
47                 validate: function ( input ) {
48                         return ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported( input );
49                 }
50         } );
51
52         this.showLinesCheckbox = new OO.ui.CheckboxInputWidget();
53
54         this.startLineNumber = new OO.ui.NumberInputWidget( {
55                 min: 0,
56                 isInteger: true
57         } );
58
59         // Events
60         this.language.connect( this, { change: 'onLanguageInputChange' } );
61         this.showLinesCheckbox.connect( this, { change: 'onShowLinesCheckboxChange' } );
62         this.startLineNumber.connect( this, { change: 'onStartLineNumberChange' } );
63
64         this.languageField = new OO.ui.FieldLayout( this.language, {
65                 classes: [ 've-ui-mwSyntaxHighlightWindow-languageField' ],
66                 align: 'top',
67                 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language' )
68         } );
69         this.codeField = new OO.ui.FieldLayout( this.input, {
70                 align: 'top',
71                 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code' )
72         } );
73         this.showLinesField = new OO.ui.FieldLayout( this.showLinesCheckbox, {
74                 align: 'inline',
75                 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines' )
76         } );
77         this.startLineField = new OO.ui.FieldLayout( this.startLineNumber, {
78                 classes: [ 've-ui-mwSyntaxHighlightWindow-startLineField' ],
79                 align: 'left',
80                 label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-startingline' )
81         } );
82 };
83
84 /**
85  * Handle input change events
86  *
87  * @param {string} value New value
88  */
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' } );
94         } );
95 };
96
97 /**
98  * Handle change events from the show lines chechbox
99  *
100  * @param {boolean} value Widget value
101  */
102 ve.ui.MWSyntaxHighlightWindow.prototype.onShowLinesCheckboxChange = function () {
103         var showLines = this.showLinesCheckbox.isSelected();
104         this.input.toggleLineNumbers( showLines );
105         this.startLineNumber.setDisabled( !showLines );
106 };
107
108 /**
109  * Handle change events from the start line input
110  *
111  * @param {string} value Widget value
112  */
113 ve.ui.MWSyntaxHighlightWindow.prototype.onStartLineNumberChange = function ( value ) {
114         var input = this.input;
115
116         input.loadingPromise.done( function () {
117                 input.editor.setOption( 'firstLineNumber', value !== '' ? +value : 1 );
118         } );
119 };
120
121 /**
122  * @inheritdoc OO.ui.Window
123  */
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();
129                 } else {
130                         this.input.focus();
131                 }
132         }, this );
133 };
134
135 /**
136  * @inheritdoc OO.ui.Window
137  */
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;
144
145                 this.language.setValue( language );
146
147                 this.showLinesCheckbox.setSelected( showLines );
148                 this.startLineNumber.setValue( startLine );
149         }, this );
150 };
151
152 /**
153  * @inheritdoc OO.ui.Window
154  */
155 ve.ui.MWSyntaxHighlightWindow.prototype.getTeardownProcess = function ( data, process ) {
156         return process;
157 };
158
159 /**
160  * @inheritdoc ve.ui.MWExtensionWindow
161  */
162 ve.ui.MWSyntaxHighlightWindow.prototype.updateMwData = function ( mwData ) {
163         var language = this.language.getValue(),
164                 showLines = this.showLinesCheckbox.isSelected(),
165                 startLine = this.startLineNumber.getValue();
166
167         mwData.attrs.lang = language || undefined;
168         mwData.attrs.line = showLines ? '1' : undefined;
169         mwData.attrs.start = startLine !== '' ? startLine : undefined;
170 };