Mooeypoo has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/203459

Change subject: Show template description in the template search
......................................................................

Show template description in the template search

For each template result, ask for the templatedata description. If
that description exists, show it under the template result.

Bug: T53436
Change-Id: If28d1eb082edca6f50c6c15c933a0b7d014eaeaf
---
M VisualEditor.php
M extension.json
M modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
A modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css
A modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js
A modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
6 files changed, 175 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/59/203459/1

diff --git a/VisualEditor.php b/VisualEditor.php
index 86a536c..249c5af 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -1379,6 +1379,8 @@
                        
'modules/ve-mw/ui/widgets/ve.ui.MWParameterResultWidget.js',
                        
'modules/ve-mw/ui/widgets/ve.ui.MWMoreParametersResultWidget.js',
                        
'modules/ve-mw/ui/widgets/ve.ui.MWNoParametersResultWidget.js',
+                       
'modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js',
+                       
'modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js',
 
                        'modules/ve-mw/ui/pages/ve.ui.MWTemplatePage.js',
                        'modules/ve-mw/ui/pages/ve.ui.MWParameterPage.js',
@@ -1399,6 +1401,7 @@
                        
'modules/ve-mw/ui/styles/widgets/ve.ui.MWMoreParametersResultWidget.css',
                        
'modules/ve-mw/ui/styles/widgets/ve.ui.MWNoParametersResultWidget.css',
                        
'modules/ve-mw/ui/styles/widgets/ve.ui.MWParameterSearchWidget.css',
+                       
'modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css',
                        
'modules/ve-mw/ui/styles/pages/ve.ui.MWTransclusionContentPage.css',
                        
'modules/ve-mw/ui/styles/dialogs/ve.ui.MWTransclusionDialog.css',
                ),
diff --git a/extension.json b/extension.json
index 531a1b7..6ba0321 100644
--- a/extension.json
+++ b/extension.json
@@ -1399,6 +1399,8 @@
                                
"modules/ve-mw/ui/widgets/ve.ui.MWParameterResultWidget.js",
                                
"modules/ve-mw/ui/widgets/ve.ui.MWMoreParametersResultWidget.js",
                                
"modules/ve-mw/ui/widgets/ve.ui.MWNoParametersResultWidget.js",
+                               
"modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget",
+                               
"modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js",
                                
"modules/ve-mw/ui/pages/ve.ui.MWTemplatePage.js",
                                
"modules/ve-mw/ui/pages/ve.ui.MWParameterPage.js",
                                
"modules/ve-mw/ui/pages/ve.ui.MWParameterPlaceholderPage.js",
@@ -1415,6 +1417,7 @@
                                
"modules/ve-mw/ui/styles/widgets/ve.ui.MWMoreParametersResultWidget.css",
                                
"modules/ve-mw/ui/styles/widgets/ve.ui.MWNoParametersResultWidget.css",
                                
"modules/ve-mw/ui/styles/widgets/ve.ui.MWParameterSearchWidget.css",
+                               
"modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css",
                                
"modules/ve-mw/ui/styles/pages/ve.ui.MWTransclusionContentPage.css",
                                
"modules/ve-mw/ui/styles/dialogs/ve.ui.MWTransclusionDialog.css"
                        ],
diff --git a/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js 
b/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
index 4b843f0..4519a23 100644
--- a/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
+++ b/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
@@ -30,7 +30,7 @@
        // Properties
        this.placeholder = placeholder;
 
-       this.addTemplateInput = new ve.ui.MWTitleInputWidget( {
+       this.addTemplateInput = new ve.ui.MWTemplateTitleInputWidget( {
                $: this.$, $overlay: config.$overlay, namespace: 10
        } )
                .connect( this, {
diff --git 
a/modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css 
b/modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css
new file mode 100644
index 0000000..ae8120b
--- /dev/null
+++ b/modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css
@@ -0,0 +1,13 @@
+/*!
+ * VisualEditor MediaWiki UserInterface MWTemplateMenuOptionWidget styles.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.ve-ui-mwTemplateMenuOptionWidget-description {
+       font-size: 0.8em;
+       color: #666;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js
new file mode 100644
index 0000000..7b7dc76
--- /dev/null
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js
@@ -0,0 +1,34 @@
+/*!
+ * VisualEditor UserInterface MWTemplateMenuOptionWidget class
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see 
http://ve.mit-license.org
+ */
+
+/**
+ * Creates a ve.ui.MWTemplateMenuOptionWidget object.
+ *
+ * @class
+ * @extends OO.ui.MenuOptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [href] href to point to pages from link suggestions
+ */
+ve.ui.MWTemplateMenuOptionWidget = function VeUiMWTemplateMenuOptionWidget( 
config ) {
+       // Configuration initialization
+       config = $.extend( { icon: 'check' }, config );
+
+       // Parent constructor
+       ve.ui.MWTemplateMenuOptionWidget.super.call( this, $.extend( { data: 
config.templateName }, config ) );
+
+       if ( config.templateDescription ) {
+               this.$description = $( '<span>' )
+                       .addClass( 
've-ui-mwTemplateMenuOptionWidget-description' )
+                       .text( config.templateDescription );
+               this.$element.append( this.$description );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWTemplateMenuOptionWidget, OO.ui.MenuOptionWidget );
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
new file mode 100644
index 0000000..6999dbd
--- /dev/null
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
@@ -0,0 +1,121 @@
+/*!
+ * VisualEditor UserInterface MWTemplateTitleInputWidget class.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * Creates an ve.ui.MWTemplateTitleInputWidget object.
+ *
+ * @class
+ * @extends OO.ui.MWTitleInputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number} [namespace] Namespace to prepend to queries
+ */
+ve.ui.MWTemplateTitleInputWidget = function VeUiMWTemplateTitleInputWidget( 
config ) {
+       // Parent constructor
+       ve.ui.MWTitleInputWidget.call( this, config );
+
+       // Properties
+       this.namespace = config.namespace || 10;
+       this.descriptions = {};
+
+       // Initialization
+       this.$element.addClass( 've-ui-mwTemplateTitleInputWidget' );
+};
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWTemplateTitleInputWidget, ve.ui.MWTitleInputWidget );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWTemplateTitleInputWidget.prototype.getLookupRequest = function () {
+       var xhr, pageId,
+               value = this.value;
+
+       // Prefix with default namespace name
+       if ( this.namespace !== null && mw.Title.newFromText( value, 
this.namespace ) ) {
+               value = mw.Title.newFromText( value, this.namespace 
).getPrefixedText();
+       }
+
+       // Dont send leading ':' to open search
+       if ( value.charAt( 0 ) === ':' ) {
+               value = value.slice( 1 );
+       }
+
+       xhr = new mw.Api().get( {
+               action: 'opensearch',
+               search: value,
+               suggest: ''
+       } );
+
+       return xhr
+               // Also get descriptions
+               .then( $.proxy( function ( response ) {
+                       var templates = response[1];
+
+                       this.originalResponse = response;
+
+                       if ( templates.length > 0 ) {
+                               return new mw.Api().get( {
+                                       action: 'templatedata',
+                                       titles: templates.join( '|' ),
+                                       lang: mw.config.get( 'wgUserLanguage' ),
+                                       redirects: '1'
+                               } );
+                       } else {
+                               return $.Deferred().resolved();
+                       }
+               }, this ) )
+               .then( $.proxy( function ( templateDataResponse ) {
+                       // Look for descriptions and cache them
+                       for ( pageId in templateDataResponse.pages ) {
+                               if ( templateDataResponse.pages[pageId].title 
&& !this.descriptions[templateDataResponse.pages[pageId].title] ) {
+                                       // Cache descriptions
+                                       
this.descriptions[templateDataResponse.pages[pageId].title] = 
templateDataResponse.pages[pageId].description;
+                               }
+                       }
+                       // Return the original response
+                       return this.originalResponse;
+               }, this ) )
+               .promise( { abort: xhr.abort } );
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWTemplateTitleInputWidget.prototype.getLookupMenuOptionsFromData = 
function ( data ) {
+       var i, len, title, value,
+               menu$ = this.lookupMenu.$,
+               items = [],
+               matchingPages = data,
+               linkCacheUpdate = {};
+
+       // Matching pages
+       if ( matchingPages && matchingPages.length ) {
+               for ( i = 0, len = matchingPages.length; i < len; i++ ) {
+                       title = new mw.Title( matchingPages[i] );
+                       linkCacheUpdate[matchingPages[i]] = { missing: false };
+                       if ( this.namespace !== null ) {
+                               value = title.getRelativeText( this.namespace );
+                       } else {
+                               value = title.getPrefixedText();
+                       }
+                       items.push( new ve.ui.MWTemplateMenuOptionWidget( {
+                               $: menu$,
+                               templateName: value,
+                               templateDescription: 
this.descriptions[matchingPages[i]],
+                               label: value
+                       } ) );
+               }
+               ve.init.platform.linkCache.set( linkCacheUpdate );
+       }
+
+       return items;
+};

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If28d1eb082edca6f50c6c15c933a0b7d014eaeaf
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Mooeypoo <[email protected]>

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

Reply via email to