Trevor Parscal has uploaded a new change for review.

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

Change subject: Context refactor
......................................................................

Context refactor

* Update ve core
* Add context item support for references, citations, templates and links

Change-Id: I5d488ecbf9768dc63de6e545505dbfd5eb84cc61
---
M VisualEditor.php
M lib/ve
M modules/ve-mw/i18n/en.json
M modules/ve-mw/init/ve.init.mw.Target.js
A modules/ve-mw/ui/contextitems/ve.ui.MWCitationContextItem.js
A modules/ve-mw/ui/contextitems/ve.ui.MWInternalLinkContextItem.js
A modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js
A modules/ve-mw/ui/contextitems/ve.ui.MWReferencesListContextItem.js
A modules/ve-mw/ui/contextitems/ve.ui.MWTransclusionContextItem.js
M modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js
M modules/ve-mw/ui/ve.ui.MWMobileContext.js
11 files changed, 391 insertions(+), 24 deletions(-)


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

diff --git a/VisualEditor.php b/VisualEditor.php
index f2ce216..a7c166d 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -526,6 +526,9 @@
                        'lib/ve/src/ui/ve.ui.Overlay.js',
                        'lib/ve/src/ui/ve.ui.Surface.js',
                        'lib/ve/src/ui/ve.ui.Context.js',
+                       'lib/ve/src/ui/ve.ui.ModeledFactory.js',
+                       'lib/ve/src/ui/ve.ui.ContextItem.js',
+                       'lib/ve/src/ui/ve.ui.ContextItemFactory.js',
                        'lib/ve/src/ui/ve.ui.TableContext.js',
                        'lib/ve/src/ui/ve.ui.Tool.js',
                        'lib/ve/src/ui/ve.ui.Toolbar.js',
@@ -554,6 +557,11 @@
                        'lib/ve/src/ui/actions/ve.ui.TableAction.js',
                        'lib/ve/src/ui/actions/ve.ui.WindowAction.js',
 
+                       
'lib/ve/src/ui/contextitems/ve.ui.CommentContextItem.js',
+                       
'lib/ve/src/ui/contextitems/ve.ui.LanguageContextItem.js',
+                       'lib/ve/src/ui/contextitems/ve.ui.LinkContextItem.js',
+                       'lib/ve/src/ui/contextitems/ve.ui.ToolContextItem.js',
+
                        
'lib/ve/src/ui/commands/ve.ui.ClearAnnotationCommand.js',
                        'lib/ve/src/ui/commands/ve.ui.HistoryCommand.js',
                        'lib/ve/src/ui/commands/ve.ui.IndentationCommand.js',
@@ -578,8 +586,6 @@
                        'lib/ve/src/ui/widgets/ve.ui.AlignWidget.js',
                        'lib/ve/src/ui/widgets/ve.ui.SurfaceWidget.js',
                        'lib/ve/src/ui/widgets/ve.ui.LinkTargetInputWidget.js',
-                       'lib/ve/src/ui/widgets/ve.ui.ContextSelectWidget.js',
-                       'lib/ve/src/ui/widgets/ve.ui.ContextOptionWidget.js',
                        'lib/ve/src/ui/widgets/ve.ui.DimensionsWidget.js',
                        'lib/ve/src/ui/widgets/ve.ui.MediaSizeWidget.js',
                        
'lib/ve/src/ui/widgets/ve.ui.WhitespacePreservingTextInputWidget.js',
@@ -627,8 +633,6 @@
                        
'lib/ve/src/ui/styles/dialogs/ve.ui.FindAndReplaceDialog.css',
                        'lib/ve/src/ui/styles/dialogs/ve.ui.ProgressDialog.css',
                        'lib/ve/src/ui/styles/tools/ve.ui.FormatTool.css',
-                       
'lib/ve/src/ui/styles/widgets/ve.ui.ContextOptionWidget.css',
-                       
'lib/ve/src/ui/styles/widgets/ve.ui.ContextSelectWidget.css',
                        
'lib/ve/src/ui/styles/widgets/ve.ui.DimensionsWidget.css',
                        
'lib/ve/src/ui/styles/widgets/ve.ui.MediaSizeWidget.css',
                        
'lib/ve/src/ui/styles/inspectors/ve.ui.CommentInspector.css',
@@ -636,6 +640,11 @@
                        
'lib/ve/src/ui/styles/inspectors/ve.ui.LinkInspector.css',
                        
'lib/ve/src/ui/styles/inspectors/ve.ui.SpecialCharacterInspector.css',
                        'lib/ve/src/ui/styles/widgets/ve.ui.SurfaceWidget.css',
+                       'lib/ve/src/ui/styles/ve.ui.ContextItem.css',
+                       
'lib/ve/src/ui/styles/contextitems/ve.ui.CommentContextItem.css',
+                       
'lib/ve/src/ui/styles/contextitems/ve.ui.LanguageContextItem.css',
+                       
'lib/ve/src/ui/styles/contextitems/ve.ui.LinkContextItem.css',
+                       
'lib/ve/src/ui/styles/contextitems/ve.ui.ToolContextItem.css',
                        'lib/ve/src/ui/styles/ve.ui.Overlay.css',
                        'lib/ve/src/ui/styles/ve.ui.Surface.css',
                        'lib/ve/src/ui/styles/ve.ui.Toolbar.css',
@@ -783,12 +792,11 @@
                'scripts' => array(
                        'lib/ve/src/ui/ve.ui.MobileSurface.js',
                        'lib/ve/src/ui/ve.ui.MobileContext.js',
-                       
'lib/ve/src/ui/windowmanagers/ve.ui.MobileWindowManager.js',
-                       
'lib/ve/src/ui/widgets/ve.ui.MobileContextOptionWidget.js',
+                       
'lib/ve/src/ui/windowmanagers/ve.ui.MobileWindowManager.js'
                ),
                'styles' => array(
+                       'lib/ve/src/ui/styles/ve.ui.MobileContext.css',
                        'lib/ve/src/ui/styles/ve.ui.MobileSurface.css',
-                       
'lib/ve/src/ui/styles/widgets/ve.ui.MobileContextOptionWidget.css',
                ),
                'dependencies' => array(
                        'ext.visualEditor.core',
@@ -1085,6 +1093,8 @@
                        
'modules/ve-mw/ui/inspectors/ve.ui.MWLinkNodeInspector.js',
 
                        'modules/ve-mw/ui/tools/ve.ui.MWLinkInspectorTool.js',
+
+                       
'modules/ve-mw/ui/contextitems/ve.ui.MWInternalLinkContextItem.js',
                ),
                'styles' => array(
                        
'modules/ve-mw/ui/styles/widgets/ve.ui.MWLinkTargetInputWidget.css'
@@ -1267,6 +1277,10 @@
 
                        'modules/ve-mw/ui/tools/ve.ui.MWReferenceDialogTool.js',
                        'modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js',
+
+                       
'modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js',
+                       
'modules/ve-mw/ui/contextitems/ve.ui.MWReferencesListContextItem.js',
+                       
'modules/ve-mw/ui/contextitems/ve.ui.MWCitationContextItem.js',
                ),
                'styles' => array(
                        
'modules/ve-mw/ui/styles/widgets/ve.ui.MWReferenceGroupInputWidget.css',
@@ -1287,6 +1301,8 @@
                        'visualeditor-dialog-reference-title',
                        'visualeditor-dialog-reference-useexisting-label',
                        'visualeditor-dialog-reference-useexisting-tool',
+                       
'visualeditor-dialog-referenceslist-contextitem-description-general',
+                       
'visualeditor-dialog-referenceslist-contextitem-description-named',
                        'visualeditor-dialog-referenceslist-title',
                        'visualeditor-dialogbutton-reference-tooltip',
                        'visualeditor-dialogbutton-referenceslist-tooltip',
@@ -1335,6 +1351,8 @@
                        
'modules/ve-mw/ui/dialogs/ve.ui.MWTransclusionDialog.js',
 
                        
'modules/ve-mw/ui/tools/ve.ui.MWTransclusionDialogTool.js',
+
+                       
'modules/ve-mw/ui/contextitems/ve.ui.MWTransclusionContextItem.js',
                ),
                'styles' => array(
                        
'modules/ve-mw/ui/styles/widgets/ve.ui.MWParameterResultWidget.css',
@@ -1365,6 +1383,7 @@
                        'visualeditor-dialog-transclusion-add-param',
                        'visualeditor-dialog-transclusion-add-template',
                        'visualeditor-dialog-transclusion-content',
+                       
'visualeditor-dialog-transclusion-contextitem-description',
                        'visualeditor-dialog-transclusion-deprecated-parameter',
                        
'visualeditor-dialog-transclusion-deprecated-parameter-description',
                        'visualeditor-dialog-transclusion-loading',
diff --git a/lib/ve b/lib/ve
index f81b990..3ad5591 160000
--- a/lib/ve
+++ b/lib/ve
-Subproject commit f81b99026c59ba62b0764a402c4fffdc10379223
+Subproject commit 3ad5591a4d68fbcf0bf5f38ef694646f12021370
diff --git a/modules/ve-mw/i18n/en.json b/modules/ve-mw/i18n/en.json
index 399ecfe..7ecbdcc 100644
--- a/modules/ve-mw/i18n/en.json
+++ b/modules/ve-mw/i18n/en.json
@@ -186,12 +186,15 @@
        "visualeditor-dialog-reference-title": "Reference",
        "visualeditor-dialog-reference-useexisting-label": "Use an existing 
reference",
        "visualeditor-dialog-reference-useexisting-tool": "Re-use",
+       "visualeditor-dialog-referenceslist-contextitem-description-general": 
"List of general references",
+       "visualeditor-dialog-referenceslist-contextitem-description-named": 
"List of references for group \"$1\"",
        "visualeditor-dialog-referenceslist-title": "References list",
        "visualeditor-dialog-template-title": "Template",
        "visualeditor-dialog-transclusion-add-content": "Add content",
        "visualeditor-dialog-transclusion-add-param": "Add more information",
        "visualeditor-dialog-transclusion-add-template": "Add template",
        "visualeditor-dialog-transclusion-content": "Content",
+       "visualeditor-dialog-transclusion-contextitem-description": "Generated 
from: $1",
        "visualeditor-dialog-transclusion-deprecated-parameter": "Deprecated 
field",
        "visualeditor-dialog-transclusion-deprecated-parameter-description": 
"Field is deprecated. $1",
        "visualeditor-dialog-transclusion-loading": "Loading...",
diff --git a/modules/ve-mw/init/ve.init.mw.Target.js 
b/modules/ve-mw/init/ve.init.mw.Target.js
index c96cea9..cfbfd67 100644
--- a/modules/ve-mw/init/ve.init.mw.Target.js
+++ b/modules/ve-mw/init/ve.init.mw.Target.js
@@ -785,7 +785,7 @@
  *
  */
 ve.init.mw.Target.prototype.generateCitationFeatures = function () {
-       var i, len, item, name, data, tool, tools, dialog,
+       var i, len, item, name, data, tool, tools, dialog, contextItem,
                limit = this.constructor.static.citationToolsLimit;
 
        if ( !ve.ui.MWCitationDialog ) {
@@ -846,6 +846,30 @@
                                        { args: [name, data], 
supportedSelections: ['linear'] }
                                )
                        );
+                       // Generate transclusion context item
+                       name = 'cite-transclusion-' + item.name;
+                       contextItem = function 
GeneratedMWTransclusionContextItem( toolbar, config ) {
+                               ve.ui.MWTransclusionContextItem.call( this, 
toolbar, config );
+                       };
+                       OO.inheritClass( contextItem, 
ve.ui.MWTransclusionContextItem );
+                       contextItem.static.name = name;
+                       contextItem.static.icon = item.icon;
+                       contextItem.static.label = item.title;
+                       contextItem.static.commandName = name;
+                       contextItem.static.template = item.template;
+                       ve.ui.contextItemFactory.register( contextItem );
+                       // Generate citation context item
+                       name = 'cite-' + item.name;
+                       contextItem = function GeneratedMWCitationContextItem( 
toolbar, config ) {
+                               ve.ui.MWCitationContextItem.call( this, 
toolbar, config );
+                       };
+                       OO.inheritClass( contextItem, 
ve.ui.MWCitationContextItem );
+                       contextItem.static.name = name;
+                       contextItem.static.icon = item.icon;
+                       contextItem.static.label = item.title;
+                       contextItem.static.commandName = name;
+                       contextItem.static.template = item.template;
+                       ve.ui.contextItemFactory.register( contextItem );
                        // Generate dialog
                        dialog = function GeneratedMWCitationDialog( config ) {
                                ve.ui.MWCitationDialog.call( this, config );
diff --git a/modules/ve-mw/ui/contextitems/ve.ui.MWCitationContextItem.js 
b/modules/ve-mw/ui/contextitems/ve.ui.MWCitationContextItem.js
new file mode 100644
index 0000000..d39da00
--- /dev/null
+++ b/modules/ve-mw/ui/contextitems/ve.ui.MWCitationContextItem.js
@@ -0,0 +1,45 @@
+/*!
+ * VisualEditor MWCitationContextItem class.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see 
http://ve.mit-license.org
+ */
+
+/**
+ * Context item for a MWCitation.
+ *
+ * @extends ve.ui.MWReferenceContextItem
+ *
+ * @param {ve.ui.Context} context Context item is in
+ * @param {ve.dm.Model} model Model item is related to
+ * @param {Object} config Configuration options
+ */
+ve.ui.MWCitationContextItem = function VeMWCitationContextItem( context, 
model, config ) {
+       // Parent constructor
+       ve.ui.MWCitationContextItem.super.call( this, context, model, config );
+
+       // Initialization
+       this.$element.addClass( 've-ui-MWCitationContextItem' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWCitationContextItem, ve.ui.MWReferenceContextItem );
+
+/* Static Properties */
+
+/**
+ * Only display item for single-template transclusions of these templates.
+ *
+ * @property {string|string[]|null}
+ * @static
+ * @inheritable
+ */
+ve.ui.MWCitationDialogTool.static.template = null;
+
+/* Static Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWCitationContextItem.static.isCompatibleWith =
+       ve.ui.MWCitationDialogTool.static.isCompatibleWith;
diff --git a/modules/ve-mw/ui/contextitems/ve.ui.MWInternalLinkContextItem.js 
b/modules/ve-mw/ui/contextitems/ve.ui.MWInternalLinkContextItem.js
new file mode 100644
index 0000000..ba0df1d
--- /dev/null
+++ b/modules/ve-mw/ui/contextitems/ve.ui.MWInternalLinkContextItem.js
@@ -0,0 +1,61 @@
+/*!
+ * VisualEditor MWInternalLinkContextItem class.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see 
http://ve.mit-license.org
+ */
+
+/**
+ * Context item for a MWInternalLink.
+ *
+ * @extends ve.ui.LinkContextItem
+ *
+ * @param {ve.ui.Context} context Context item is in
+ * @param {ve.dm.Model} model Model item is related to
+ * @param {Object} config Configuration options
+ */
+ve.ui.MWInternalLinkContextItem = function VeMWInternalLinkContextItem( 
context, model, config ) {
+       // Parent constructor
+       ve.ui.MWInternalLinkContextItem.super.call( this, context, model, 
config );
+
+       // Initialization
+       this.$element.addClass( 've-ui-mwInternalLinkContextItem' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWInternalLinkContextItem, ve.ui.LinkContextItem );
+
+/* Static Properties */
+
+ve.ui.MWInternalLinkContextItem.static.name = 'link/internal';
+
+ve.ui.MWInternalLinkContextItem.static.modelClasses = [ 
ve.dm.MWInternalLinkAnnotation ];
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWInternalLinkContextItem.prototype.getDescription = function () {
+       return this.model.getAttribute( 'normalizedTitle' );
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWInternalLinkContextItem.prototype.renderBody = function () {
+       var $link = $( '<a>' )
+               .text( this.getDescription() )
+               .attr( {
+                       href: this.model.getHref(),
+                       target: '_blank'
+               } );
+       this.$body.empty().append( $link );
+
+       // Style based on link cache information
+       ve.init.platform.linkCache.styleElement( this.model.getAttribute( 
'lookupTitle' ), $link );
+};
+
+/* Registration */
+
+ve.ui.contextItemFactory.register( ve.ui.MWInternalLinkContextItem );
diff --git a/modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js 
b/modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js
new file mode 100644
index 0000000..444b647
--- /dev/null
+++ b/modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js
@@ -0,0 +1,79 @@
+/*!
+ * VisualEditor MWReferenceContextItem class.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see 
http://ve.mit-license.org
+ */
+
+/**
+ * Context item for a MWReference.
+ *
+ * @extends ve.ui.ContextItem
+ *
+ * @param {ve.ui.Context} context Context item is in
+ * @param {ve.dm.Model} model Model item is related to
+ * @param {Object} config Configuration options
+ */
+ve.ui.MWReferenceContextItem = function VeMWReferenceContextItem( context, 
model, config ) {
+       // Parent constructor
+       ve.ui.MWReferenceContextItem.super.call( this, context, model, config );
+
+       // Initialization
+       this.$element.addClass( 've-ui-mwReferenceContextItem' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWReferenceContextItem, ve.ui.ContextItem );
+
+/* Static Properties */
+
+ve.ui.MWReferenceContextItem.static.name = 'reference';
+
+ve.ui.MWReferenceContextItem.static.icon = 'reference';
+
+ve.ui.MWReferenceContextItem.static.label = OO.ui.deferMsg( 
'visualeditor-dialogbutton-reference-tooltip' );
+
+ve.ui.MWReferenceContextItem.static.modelClasses = [ ve.dm.MWReferenceNode ];
+
+ve.ui.MWReferenceContextItem.static.commandName = 'reference';
+
+/* Methods */
+
+/**
+ * Get a DOM rendering of the reference.
+ *
+ * @private
+ * @return {jQuery} DOM rendering of reference
+ */
+ve.ui.MWReferenceContextItem.prototype.getRendering = function () {
+       var ref = ve.dm.MWReferenceModel.static.newFromReferenceNode( 
this.model ),
+               view = new ve.ce.InternalItemNode(
+                       this.model.getDocument().getInternalList().getItemNode( 
ref.getListIndex() )
+               );
+
+       // HACK: PHP parser doesn't wrap single lines in a paragraph
+       if ( view.$element.children().length === 1 && view.$element.children( 
'p' ).length === 1 ) {
+               // unwrap inner
+               view.$element.children().replaceWith( 
view.$element.children().contents() );
+       }
+
+       return view.$element;
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferenceContextItem.prototype.getDescription = function () {
+       return this.getRendering().text();
+};
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferenceContextItem.prototype.renderBody = function () {
+       this.$body.empty().append( this.getRendering() );
+};
+
+/* Registration */
+
+ve.ui.contextItemFactory.register( ve.ui.MWReferenceContextItem );
diff --git a/modules/ve-mw/ui/contextitems/ve.ui.MWReferencesListContextItem.js 
b/modules/ve-mw/ui/contextitems/ve.ui.MWReferencesListContextItem.js
new file mode 100644
index 0000000..db64284
--- /dev/null
+++ b/modules/ve-mw/ui/contextitems/ve.ui.MWReferencesListContextItem.js
@@ -0,0 +1,56 @@
+/*!
+ * VisualEditor MWReferencesListContextItem class.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see 
http://ve.mit-license.org
+ */
+
+/**
+ * Context item for a MWReferencesList.
+ *
+ * @extends ve.ui.ContextItem
+ *
+ * @param {ve.ui.Context} context Context item is in
+ * @param {ve.dm.Model} model Model item is related to
+ * @param {Object} config Configuration options
+ */
+ve.ui.MWReferencesListContextItem = function VeMWReferencesListContextItem( 
context, model, config ) {
+       // Parent constructor
+       ve.ui.MWReferencesListContextItem.super.call( this, context, model, 
config );
+
+       // Initialization
+       this.$element.addClass( 've-ui-mwReferencesListContextItem' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWReferencesListContextItem, ve.ui.ContextItem );
+
+/* Static Properties */
+
+ve.ui.MWReferencesListContextItem.static.name = 'referencesList';
+
+ve.ui.MWReferencesListContextItem.static.icon = 'references';
+
+ve.ui.MWReferencesListContextItem.static.label =
+       OO.ui.deferMsg( 'visualeditor-dialogbutton-referenceslist-tooltip' );
+
+ve.ui.MWReferencesListContextItem.static.modelClasses = [ 
ve.dm.MWReferencesListNode ];
+
+ve.ui.MWReferencesListContextItem.static.commandName = 'referencesList';
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferencesListContextItem.prototype.getDescription = function () {
+       var group = this.model.getAttribute( 'refGroup' );
+
+       return group ?
+               ve.msg( 
'visualeditor-dialog-referenceslist-contextitem-description-named', group ) :
+               ve.msg( 
'visualeditor-dialog-referenceslist-contextitem-description-general' );
+};
+
+/* Registration */
+
+ve.ui.contextItemFactory.register( ve.ui.MWReferencesListContextItem );
diff --git a/modules/ve-mw/ui/contextitems/ve.ui.MWTransclusionContextItem.js 
b/modules/ve-mw/ui/contextitems/ve.ui.MWTransclusionContextItem.js
new file mode 100644
index 0000000..fc66f98
--- /dev/null
+++ b/modules/ve-mw/ui/contextitems/ve.ui.MWTransclusionContextItem.js
@@ -0,0 +1,75 @@
+/*!
+ * VisualEditor MWTransclusionContextItem class.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see 
http://ve.mit-license.org
+ */
+
+/**
+ * Context item for a MWTransclusion.
+ *
+ * @extends ve.ui.ContextItem
+ *
+ * @param {ve.ui.Context} context Context item is in
+ * @param {ve.dm.Model} model Model item is related to
+ * @param {Object} config Configuration options
+ */
+ve.ui.MWTransclusionContextItem = function VeMWTransclusionContextItem( 
context, model, config ) {
+       // Parent constructor
+       ve.ui.MWTransclusionContextItem.super.call( this, context, model, 
config );
+
+       // Initialization
+       this.$element.addClass( 've-ui-mwTransclusionContextItem' );
+       if ( !this.model.isSingleTemplate() ) {
+               this.setLabel( ve.msg( 
'visualeditor-dialogbutton-transclusion-tooltip' ) );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWTransclusionContextItem, ve.ui.ContextItem );
+
+/* Static Properties */
+
+ve.ui.MWTransclusionContextItem.static.name = 'transclusion';
+
+ve.ui.MWTransclusionContextItem.static.icon = 'template';
+
+ve.ui.MWTransclusionContextItem.static.label =
+       OO.ui.deferMsg( 'visualeditor-dialogbutton-template-tooltip' );
+
+ve.ui.MWTransclusionContextItem.static.modelClasses = [ 
ve.dm.MWTransclusionNode ];
+
+ve.ui.MWTransclusionContextItem.static.commandName = 'transclusion';
+
+/**
+ * Only display item for single-template transclusions of these templates.
+ *
+ * @property {string|string[]|null}
+ * @static
+ * @inheritable
+ */
+ve.ui.MWTransclusionContextItem.static.template = null;
+
+/* Static Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWTransclusionContextItem.static.isCompatibleWith =
+       ve.ui.MWTransclusionDialogTool.static.isCompatibleWith;
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.ui.MWTransclusionContextItem.prototype.getDescription = function () {
+       return ve.msg(
+               'visualeditor-dialog-transclusion-contextitem-description',
+               ve.ce.MWTransclusionNode.static.getDescription( this.model )
+       );
+};
+
+/* Registration */
+
+ve.ui.contextItemFactory.register( ve.ui.MWTransclusionContextItem );
diff --git a/modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js 
b/modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js
index 6df415c..144dcae 100644
--- a/modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js
+++ b/modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js
@@ -28,8 +28,6 @@
 
 ve.ui.MWCitationDialogTool.static.group = 'cite';
 
-ve.ui.MWCitationDialogTool.static.modelClasses = [ ve.dm.MWReferenceNode ];
-
 /**
  * Only display tool for single-template transclusions of these templates.
  *
@@ -39,7 +37,7 @@
  */
 ve.ui.MWCitationDialogTool.static.template = null;
 
-/* Methods */
+/* Static Methods */
 
 /**
  * @inheritdoc
diff --git a/modules/ve-mw/ui/ve.ui.MWMobileContext.js 
b/modules/ve-mw/ui/ve.ui.MWMobileContext.js
index b8e654f..8dece58 100644
--- a/modules/ve-mw/ui/ve.ui.MWMobileContext.js
+++ b/modules/ve-mw/ui/ve.ui.MWMobileContext.js
@@ -31,19 +31,26 @@
 /**
  * @inheritdoc
  */
-ve.ui.MWMobileContext.prototype.getAvailableTools = function () {
-       var tools = ve.ui.MobileContext.super.prototype.getAvailableTools.call( 
this );
+ve.ui.MWMobileContext.prototype.getAvailableSources = function () {
+       var sources;
 
-       // Filter out tools not supported in mobile mode
-       // FIXME: This is a temporary hack. Ideally, we don't want to load any 
code
-       // that is not supported on a given platform. However, present 
implementation
-       // of citation dialog forces us to load tools that we don't want on 
mobile.
-       this.availableTools = tools.filter( function ( tool ) {
-               return (
-                       tool.model instanceof ve.dm.LinkAnnotation ||
-                       ( tool.model instanceof ve.dm.MWReferenceNode && 
tool.tool !== ve.ui.MWReferenceDialogTool )
-               );
-       } );
+       if ( !this.relatedSources ) {
+               sources = 
ve.ui.MobileContext.super.prototype.getAvailableSources.call( this );
 
-       return this.availableTools;
+               // Filter out sources not supported in mobile mode
+               // FIXME: This is a temporary hack. Ideally, we don't want to 
load any code
+               // that is not supported on a given platform. However, present 
implementation
+               // of citation dialog forces us to load sources that we don't 
want on mobile.
+               this.availableSources = sources.filter( function ( source ) {
+                       return (
+                               source.model instanceof ve.dm.LinkAnnotation ||
+                               (
+                                       source.model instanceof 
ve.dm.MWReferenceNode &&
+                                       source.tool !== 
ve.ui.MWReferenceDialogTool
+                               )
+                       );
+               } );
+       }
+
+       return this.availableSources;
 };

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

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

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

Reply via email to