jenkins-bot has submitted this change and it was merged.

Change subject: VE integration: Provide a combobox for language input
......................................................................


VE integration: Provide a combobox for language input

Bug: T103756
Change-Id: Ic84c5afb1cf83cce6fa521a99f5fee242bc610b1
---
M extension.json
M i18n/en.json
M i18n/qqq.json
M modules/VisualEditor/ve.dm.MWSyntaxHighlightNode.js
M modules/VisualEditor/ve.ui.MWSyntaxHighlightInspector.js
5 files changed, 60 insertions(+), 24 deletions(-)

Approvals:
  Esanders: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/extension.json b/extension.json
index ed0d936..4aec63a 100644
--- a/extension.json
+++ b/extension.json
@@ -60,6 +60,7 @@
                        "messages": [
                                
"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code",
                                
"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language",
+                               
"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none",
                                
"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines",
                                
"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title"
                        ],
diff --git a/i18n/en.json b/i18n/en.json
index 81c7dab..170cb6c 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -10,6 +10,7 @@
     "syntaxhighlight-error-category-desc": "There was an error when attempting 
to highlight code included on the page.",
     "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Code",
     "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": 
"Language",
+    "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(None)",
     "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Show 
line numbers",
     "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Code 
block",
     "syntaxhighlight-error-pygments-invocation-failure": "Failed to invoke 
Pygments",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 11cede6..e5c5ada 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -15,6 +15,7 @@
        "syntaxhighlight-error-category-desc": "Description on 
[[Special:TrackingCategories]] for the 
{{msg-mw|syntaxhighlight-error-category}} tracking category.",
        "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Label 
for the code input field\n{{Identical|Code}}",
        "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": 
"Label for the language field\n{{Identical|Language}}",
+       "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "Label 
of the 'None' option in the language dropdown field",
        "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": 
"Label for the checkbox to show line numbers",
        "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Title 
for the VisualEditor syntax highlighter inspector, above the text area for the 
code",
        "syntaxhighlight-error-pygments-invocation-failure": "Error message 
shown when the syntax highlighting library failed with an unspecified error",
diff --git a/modules/VisualEditor/ve.dm.MWSyntaxHighlightNode.js 
b/modules/VisualEditor/ve.dm.MWSyntaxHighlightNode.js
index 81a6b2a..e8abb0d 100644
--- a/modules/VisualEditor/ve.dm.MWSyntaxHighlightNode.js
+++ b/modules/VisualEditor/ve.dm.MWSyntaxHighlightNode.js
@@ -58,6 +58,15 @@
        ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported = function ( 
language ) {
                return supportedLanguages.indexOf( language ) !== -1;
        };
+
+       /**
+        * Get an array of all languages
+        *
+        * @return {Array} All currently supported languages
+        */
+       ve.dm.MWSyntaxHighlightNode.static.getLanguages = function () {
+               return supportedLanguages.slice();
+       };
 }() );
 
 /* Methods */
diff --git a/modules/VisualEditor/ve.ui.MWSyntaxHighlightInspector.js 
b/modules/VisualEditor/ve.ui.MWSyntaxHighlightInspector.js
index ae9da16..e9cca19 100644
--- a/modules/VisualEditor/ve.ui.MWSyntaxHighlightInspector.js
+++ b/modules/VisualEditor/ve.ui.MWSyntaxHighlightInspector.js
@@ -43,29 +43,42 @@
  * @inheritdoc
  */
 ve.ui.MWSyntaxHighlightInspector.prototype.initialize = function () {
+       var languageField, codeField, showLinesField,
+               noneMsg = ve.msg( 
'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none' );
        // Parent method
        ve.ui.MWSyntaxHighlightInspector.super.prototype.initialize.call( this 
);
 
-       this.language = new OO.ui.TextInputWidget( {
-               validate: function ( value ) {
-                       return 
ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported( value );
-               }
+       this.language = new OO.ui.ComboBoxWidget( {
+               menu: { filterFromInput: true },
+               input: { validate: function ( input ) {
+                       return input === '' || 
ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported( input );
+               } }
        } );
+       this.language.getInput().connect( this, { change: 
'onLanguageInputChange' } );
+       this.language.getMenu()
+               .clearItems()
+               .addItems(
+                       [ new OO.ui.MenuOptionWidget( { data: '', label: 
noneMsg } ) ].concat(
+                               $.map( 
ve.dm.MWSyntaxHighlightNode.static.getLanguages(), function ( lang ) {
+                                       return new OO.ui.MenuOptionWidget( { 
data: lang, label: lang } );
+                               } )
+                       )
+               );
 
        this.showLinesCheckbox = new OO.ui.CheckboxInputWidget();
 
-       var languageField = new OO.ui.FieldLayout( this.language, {
-                       align: 'top',
-                       label: ve.msg( 
'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language' )
-               } ),
-               codeField = new OO.ui.FieldLayout( this.input, {
-                       align: 'top',
-                       label: ve.msg( 
'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code' )
-               } ),
-               showLinesField = new OO.ui.FieldLayout( this.showLinesCheckbox, 
{
-                       align: 'inline',
-                       label: ve.msg( 
'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines' )
-               } );
+       languageField = new OO.ui.FieldLayout( this.language, {
+               align: 'top',
+               label: ve.msg( 
'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language' )
+       } );
+       codeField = new OO.ui.FieldLayout( this.input, {
+               align: 'top',
+               label: ve.msg( 
'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code' )
+       } );
+       showLinesField = new OO.ui.FieldLayout( this.showLinesCheckbox, {
+               align: 'inline',
+               label: ve.msg( 
'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines' )
+       } );
 
        // Initialization
        this.$content.addClass( 've-ui-mwSyntaxHighlightInspector-content' );
@@ -77,15 +90,27 @@
 };
 
 /**
+ * Handle input change events
+ *
+ * @param {string} value New value
+ */
+ve.ui.MWSyntaxHighlightInspector.prototype.onLanguageInputChange = function () 
{
+       var inspector = this;
+       this.language.getInput().isValid().done( function ( valid ) {
+               inspector.getActions().setAbilities( { done: valid } );
+       } );
+};
+
+/**
  * @inheritdoc
  */
 ve.ui.MWSyntaxHighlightInspector.prototype.getReadyProcess = function ( data ) 
{
        return 
ve.ui.MWSyntaxHighlightInspector.super.prototype.getReadyProcess.call( this, 
data )
                .next( function () {
-                       if ( this.language.getValue() ) {
+                       if ( this.language.input.getValue() ) {
                                this.input.focus();
                        } else {
-                               this.language.focus();
+                               this.language.getMenu().toggle( true );
                        }
                }, this );
 };
@@ -100,11 +125,10 @@
                                language = attrs.lang || '',
                                showLines = attrs.line !== undefined;
 
-                       this.language.setValue( language );
-                       if ( !language ) {
-                               this.language.setValidityFlag( true );
+                       if ( 
ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported( language ) ) {
+                               this.language.input.setValue( language );
                        }
-                       this.language.on( 'change', this.onChangeHandler );
+                       this.language.input.on( 'change', this.onChangeHandler 
);
 
                        this.showLinesCheckbox.setSelected( showLines );
                        this.showLinesCheckbox.on( 'change', 
this.onChangeHandler );
@@ -117,7 +141,7 @@
 ve.ui.MWSyntaxHighlightInspector.prototype.getTeardownProcess = function ( 
data ) {
        return 
ve.ui.MWSyntaxHighlightInspector.super.prototype.getTeardownProcess.call( this, 
data )
                .first( function () {
-                       this.language.off( 'change', this.onChangeHandler );
+                       this.language.input.off( 'change', this.onChangeHandler 
);
                        this.showLinesCheckbox.off( 'change', 
this.onChangeHandler );
                }, this );
 };
@@ -129,7 +153,7 @@
        // Parent method
        ve.ui.MWSyntaxHighlightInspector.super.prototype.updateMwData.call( 
this, mwData );
 
-       var language = this.language.getValue(),
+       var language = this.language.input.getValue(),
                showLines = this.showLinesCheckbox.isSelected();
 
        mwData.attrs.lang = language || undefined;

-- 
To view, visit https://gerrit.wikimedia.org/r/220977
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic84c5afb1cf83cce6fa521a99f5fee242bc610b1
Gerrit-PatchSet: 14
Gerrit-Project: mediawiki/extensions/SyntaxHighlight_GeSHi
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <[email protected]>
Gerrit-Reviewer: Alex Monk <[email protected]>
Gerrit-Reviewer: Bartosz DziewoƄski <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to