Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/218317
Change subject: Use new core TitleInputWidget
......................................................................
Use new core TitleInputWidget
All link input/title input functionality has been moved to core, so
we can replace the link widget, redirect widget and template search
widget with it.
Depends on Ib463e60cad96 in core.
Change-Id: I452f3b86ead403307072cf904f0553c9771f4300
---
M VisualEditor.php
M extension.json
M modules/ve-mw/i18n/en.json
M modules/ve-mw/i18n/qqq.json
M modules/ve-mw/tests/browser/features/support/pages/visual_editor_page.rb
M modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
M modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
M modules/ve-mw/ui/styles/dialogs/ve.ui.MWTransclusionDialog.css
D modules/ve-mw/ui/styles/widgets/ve.ui.MWInternalLinkMenuOptionWidget.css
D modules/ve-mw/ui/styles/widgets/ve.ui.MWLinkTargetInputWidget.css
D modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css
D modules/ve-mw/ui/themes/apex/ve.ui.MWLinkTargetInputWidget.css
M modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js
D modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkMenuOptionWidget.js
D modules/ve-mw/ui/widgets/ve.ui.MWLinkMenuOptionWidget.js
D modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
D modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js
M modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
D modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js
19 files changed, 72 insertions(+), 638 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/17/218317/1
diff --git a/VisualEditor.php b/VisualEditor.php
index 77295d7..726ed4f 100755
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -865,7 +865,6 @@
'modules/ve-mw/ui/commands/ve.ui.MWWikitextWarningCommand.js',
'modules/ve-mw/ui/widgets/ve.ui.MWSurfaceWidget.js',
- 'modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js',
'modules/ve-mw/ui/widgets/ve.ui.MWTocItemWidget.js',
'modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js',
@@ -1120,9 +1119,6 @@
'modules/ve-mw/ce/annotations/ve.ce.MWExternalLinkAnnotation.js',
'modules/ve-mw/ce/annotations/ve.ce.MWInternalLinkAnnotation.js',
-
'modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js',
-
'modules/ve-mw/ui/widgets/ve.ui.MWLinkMenuOptionWidget.js',
-
'modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkMenuOptionWidget.js',
'modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js',
'modules/ve-mw/ui/widgets/ve.ui.MWExternalLinkAnnotationWidget.js',
@@ -1135,14 +1131,7 @@
),
'styles' => array(
'modules/ve-mw/ui/styles/contextitems/ve.ui.MWInternalLinkContextItem.css',
-
'modules/ve-mw/ui/styles/widgets/ve.ui.MWLinkTargetInputWidget.css',
-
'modules/ve-mw/ui/styles/widgets/ve.ui.MWInternalLinkMenuOptionWidget.css',
'modules/ve-mw/ui/styles/inspectors/ve.ui.MWLinkAnnotationInspector.css',
- ),
- 'skinStyles' => array(
- 'apex' => array(
-
'modules/ve-mw/ui/themes/apex/ve.ui.MWLinkTargetInputWidget.css'
- ),
),
'dependencies' => array(
'ext.visualEditor.mwcore',
@@ -1151,8 +1140,6 @@
'visualeditor-annotationbutton-linknode-tooltip',
'visualeditor-linkinspector-button-link-external',
'visualeditor-linkinspector-button-link-internal',
- 'visualeditor-linkinspector-description-new-page',
- 'visualeditor-linkinspector-description-redirect',
'visualeditor-linkinspector-illegal-title',
'visualeditor-linknodeinspector-add-label',
'visualeditor-linknodeinspector-title',
@@ -1386,7 +1373,6 @@
'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',
@@ -1408,7 +1394,6 @@
'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 e9e40c2..b017d56 100644
--- a/extension.json
+++ b/extension.json
@@ -909,7 +909,6 @@
"modules/ve-mw/ui/ve.ui.MWSequenceRegistry.js",
"modules/ve-mw/ui/commands/ve.ui.MWWikitextWarningCommand.js",
"modules/ve-mw/ui/widgets/ve.ui.MWSurfaceWidget.js",
-
"modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js",
"modules/ve-mw/ui/widgets/ve.ui.MWTocItemWidget.js",
"modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js",
"modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js",
@@ -1149,9 +1148,6 @@
"modules/ve-mw/ce/nodes/ve.ce.MWNumberedExternalLinkNode.js",
"modules/ve-mw/ce/annotations/ve.ce.MWExternalLinkAnnotation.js",
"modules/ve-mw/ce/annotations/ve.ce.MWInternalLinkAnnotation.js",
-
"modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js",
-
"modules/ve-mw/ui/widgets/ve.ui.MWLinkMenuOptionWidget.js",
-
"modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkMenuOptionWidget.js",
"modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js",
"modules/ve-mw/ui/widgets/ve.ui.MWExternalLinkAnnotationWidget.js",
"modules/ve-mw/ui/inspectors/ve.ui.MWLinkAnnotationInspector.js",
@@ -1161,15 +1157,8 @@
],
"styles": [
"modules/ve-mw/ui/styles/contextitems/ve.ui.MWInternalLinkContextItem.css",
-
"modules/ve-mw/ui/styles/widgets/ve.ui.MWLinkTargetInputWidget.css",
-
"modules/ve-mw/ui/styles/widgets/ve.ui.MWInternalLinkMenuOptionWidget.css",
"modules/ve-mw/ui/styles/inspectors/ve.ui.MWLinkAnnotationInspector.css"
],
- "skinStyles": {
- "apex": [
-
"modules/ve-mw/ui/themes/apex/ve.ui.MWLinkTargetInputWidget.css"
- ]
- },
"dependencies": [
"ext.visualEditor.mwcore"
],
@@ -1177,8 +1166,6 @@
"visualeditor-annotationbutton-linknode-tooltip",
"visualeditor-linkinspector-button-link-external",
"visualeditor-linkinspector-button-link-internal",
-
"visualeditor-linkinspector-description-new-page",
-
"visualeditor-linkinspector-description-redirect",
"visualeditor-linkinspector-illegal-title",
"visualeditor-linknodeinspector-add-label",
"visualeditor-linknodeinspector-title"
@@ -1407,7 +1394,6 @@
"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",
@@ -1425,7 +1411,6 @@
"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/i18n/en.json b/modules/ve-mw/i18n/en.json
index 6a60d38..56d178a 100644
--- a/modules/ve-mw/i18n/en.json
+++ b/modules/ve-mw/i18n/en.json
@@ -241,8 +241,6 @@
"visualeditor-languages-tool": "Languages",
"visualeditor-linkinspector-button-link-external": "External link",
"visualeditor-linkinspector-button-link-internal": "Search pages",
- "visualeditor-linkinspector-description-new-page": "page does not exist
yet",
- "visualeditor-linkinspector-description-redirect": "redirect to $1",
"visualeditor-linkinspector-illegal-title": "Invalid page title",
"visualeditor-linknodeinspector-add-label": "Add label",
"visualeditor-linknodeinspector-title": "Simple link",
diff --git a/modules/ve-mw/i18n/qqq.json b/modules/ve-mw/i18n/qqq.json
index 96001a6..85d7a60 100644
--- a/modules/ve-mw/i18n/qqq.json
+++ b/modules/ve-mw/i18n/qqq.json
@@ -250,8 +250,6 @@
"visualeditor-languages-tool": "Tool for opening the languages links
section of the meta dialog.\n{{Identical|Language}}",
"visualeditor-linkinspector-button-link-external": "Button label for
entering an external link.\n{{Identical|External link}}",
"visualeditor-linkinspector-button-link-internal": "Button label for
entering an internal link.",
- "visualeditor-linkinspector-description-new-page": "Description label
for a new page in the link inspector.",
- "visualeditor-linkinspector-description-redirect": "Description label
for a redirect in the link inspector.",
"visualeditor-linkinspector-illegal-title": "Warning that the entered
text is not a valid page title.",
"visualeditor-linknodeinspector-add-label": "Label of button that
converts an auto-numbered, external, labelless link into a labeled external
link",
"visualeditor-linknodeinspector-title": "Title of inspector for editing
auto-numbered, external, labelless links.\n\nSee also:\n*
{{msg-mw|Visualeditor-annotationbutton-linknode-tooltip}}",
diff --git
a/modules/ve-mw/tests/browser/features/support/pages/visual_editor_page.rb
b/modules/ve-mw/tests/browser/features/support/pages/visual_editor_page.rb
index 69e97f7..9a04a40 100644
--- a/modules/ve-mw/tests/browser/features/support/pages/visual_editor_page.rb
+++ b/modules/ve-mw/tests/browser/features/support/pages/visual_editor_page.rb
@@ -152,7 +152,7 @@
a(:subheading2, text: /Sub-heading 2/)
a(:subheading3, text: /Sub-heading 3/)
a(:subheading4, text: /Sub-heading 4/)
- div(:suggestion_list, class: 've-ui-mwTitleInputWidget-menu')
+ div(:suggestion_list, class: 'mw-widget-titleInputWidget-menu')
span(:switch_to_source_editing, class: 'oo-ui-iconElement-icon
oo-ui-icon-source')
table(:table, class: 've-ce-tableNode')
div(:table_of_contents, class: 've-test-page-settings-table-of-contents')
diff --git a/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
b/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
index d70f3d1..371a695 100644
--- a/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
+++ b/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
@@ -74,7 +74,7 @@
help: ve.msg(
'visualeditor-dialog-meta-settings-redirect-help' )
}
);
- this.redirectTargetInput = new ve.ui.MWTitleInputWidget( {
+ this.redirectTargetInput = new mw.widgets.TitleInputWidget( {
placeholder: ve.msg(
'visualeditor-dialog-meta-settings-redirect-placeholder' ),
$overlay: config.$overlay
} );
diff --git a/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
b/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
index d7d8991..2fb16df 100644
--- a/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
+++ b/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js
@@ -31,7 +31,8 @@
this.placeholder = placeholder;
this.addTemplateInput = new ve.ui.MWTemplateTitleInputWidget( {
- $overlay: config.$overlay, namespace: 10
+ $overlay: config.$overlay,
+ showDescriptions: true
} )
.connect( this, {
change: 'onTemplateInputChange',
diff --git a/modules/ve-mw/ui/styles/dialogs/ve.ui.MWTransclusionDialog.css
b/modules/ve-mw/ui/styles/dialogs/ve.ui.MWTransclusionDialog.css
index 310e7c8..118d714 100644
--- a/modules/ve-mw/ui/styles/dialogs/ve.ui.MWTransclusionDialog.css
+++ b/modules/ve-mw/ui/styles/dialogs/ve.ui.MWTransclusionDialog.css
@@ -17,7 +17,7 @@
margin-left: 0.5em;
}
-.ve-ui-mwTransclusionDialog-addTemplateFieldset .ve-ui-mwTitleInputWidget {
+.ve-ui-mwTransclusionDialog-addTemplateFieldset .mw-widget-titleInputWidget {
width: 20em;
}
diff --git
a/modules/ve-mw/ui/styles/widgets/ve.ui.MWInternalLinkMenuOptionWidget.css
b/modules/ve-mw/ui/styles/widgets/ve.ui.MWInternalLinkMenuOptionWidget.css
deleted file mode 100644
index 3dfa5d5..0000000
--- a/modules/ve-mw/ui/styles/widgets/ve.ui.MWInternalLinkMenuOptionWidget.css
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
- * VisualEditor MediaWiki UserInterface MWInternalLinkMenuOptionWidget styles.
- *
- * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-.ve-ui-mwLinkTargetInputWidget-menu-withImages
.ve-ui-mwInternalLinkMenuOptionWidget {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- min-height: 3.75em;
- margin-left: 3.75em;
-}
-
-.ve-ui-mwLinkTargetInputWidget-menu-withImages
.ve-ui-mwInternalLinkMenuOptionWidget:not(:last-child) {
- margin-bottom: 1px;
-}
-
-.ve-ui-mwLinkTargetInputWidget-menu-withImages .oo-ui-iconElement
.oo-ui-iconElement-icon {
- display: block;
- width: 3.75em;
- height: 3.75em;
- left: -3.75em;
- background-color: #ccc;
- opacity: 0.4;
-}
-
-.ve-ui-mwLinkTargetInputWidget-menu-withImages .oo-ui-iconElement
.ve-ui-mwInternalLinkMenuOptionWidget-hasImage {
- border: 0;
- background-size: cover;
- opacity: 1;
-}
-
-.ve-ui-mwLinkTargetInputWidget-menu-withImages
.ve-ui-mwInternalLinkMenuOptionWidget .oo-ui-labelElement-label {
- line-height: 2.8em;
-}
-
-.ve-ui-mwInternalLinkMenuOptionWidget-description {
- display: none;
-}
-
-.ve-ui-mwLinkTargetInputWidget-menu-withDescriptions
.ve-ui-mwInternalLinkMenuOptionWidget .oo-ui-labelElement-label {
- line-height: 1.5em;
-}
-
-.ve-ui-mwLinkTargetInputWidget-menu-withDescriptions
.ve-ui-mwInternalLinkMenuOptionWidget-description {
- display: block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.oo-ui-menuOptionWidget:not(.oo-ui-optionWidget-selected)
.ve-ui-mwInternalLinkMenuOptionWidget-description,
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted
.ve-ui-mwInternalLinkMenuOptionWidget-description {
- color: #888;
-}
diff --git a/modules/ve-mw/ui/styles/widgets/ve.ui.MWLinkTargetInputWidget.css
b/modules/ve-mw/ui/styles/widgets/ve.ui.MWLinkTargetInputWidget.css
deleted file mode 100644
index be5e39c..0000000
--- a/modules/ve-mw/ui/styles/widgets/ve.ui.MWLinkTargetInputWidget.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/*!
- * VisualEditor MediaWiki UserInterface MWLinkTargetInputWidget styles.
- *
- * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-/* Warning text for invalid titles (bug 62761) */
-
-.ve-ui-mwLinkTargetInputWidget-warning {
- color: #d45353;
- font-weight: bold;
-}
diff --git
a/modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css
b/modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css
deleted file mode 100644
index d3e117d..0000000
--- a/modules/ve-mw/ui/styles/widgets/ve.ui.MWTemplateMenuOptionWidget.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
- * 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 {
- color: #666;
- display: inline-block;
- width: 100%;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
diff --git a/modules/ve-mw/ui/themes/apex/ve.ui.MWLinkTargetInputWidget.css
b/modules/ve-mw/ui/themes/apex/ve.ui.MWLinkTargetInputWidget.css
deleted file mode 100644
index 7d91604..0000000
--- a/modules/ve-mw/ui/themes/apex/ve.ui.MWLinkTargetInputWidget.css
+++ /dev/null
@@ -1,20 +0,0 @@
-/*!
- * VisualEditor MediaWiki UserInterface MWLinkTargetInputWidget styles.
- *
- * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-.ve-ui-mwLinkTargetInputWidget-menu {
- width: 20em;
- margin-top: -7px;
-}
-
-.ve-ui-mwLinkTargetInputWidget-menu .oo-ui-menuSelectWidget-item {
- padding: 0.33em 1.25em;
- color: #0645AD;
-}
-
-.ve-ui-mwLinkTargetInputWidget-extlink {
- color: #36b;
-}
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js
index 72b69fc..3e236b9 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js
@@ -75,8 +75,11 @@
* @return {OO.ui.TextInputWidget} Text input widget
*/
ve.ui.MWInternalLinkAnnotationWidget.prototype.createInputWidget = function (
config ) {
- return new ve.ui.MWLinkTargetInputWidget( {
+ return new mw.widgets.TitleInputWidget( {
+ $overlay: config.$overlay,
icon: 'search',
- $overlay: config.$overlay
+ showImages: mw.config.get( 'wgVisualEditor' ).usePageImages,
+ showDescriptions: mw.config.get( 'wgVisualEditor'
).usePageDescriptions,
+ cache: ve.init.platform.linkCache
} );
};
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkMenuOptionWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkMenuOptionWidget.js
deleted file mode 100644
index 82e8c66..0000000
--- a/modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkMenuOptionWidget.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
- * VisualEditor UserInterface MWInternalLinkMenuOptionWidget class.
- *
- * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-/**
- * Creates a ve.ui.MWInternalLinkMenuOptionWidget object.
- *
- * @class
- * @extends ve.ui.MWLinkMenuOptionWidget
- *
- * @constructor
- * @param {Object} [config] Configuration options
- * @cfg {string} [data] Page title
- * @cfg {string} [imageUrl] Thumbnail image URL with URL encoding
- * @cfg {string} [description] Page description
- * @cfg {string} [query] Matching query string
- */
-ve.ui.MWInternalLinkMenuOptionWidget = function
VeUiMWInternalLinkMenuOptionWidget( config ) {
- var title = config.data;
-
- // Config initialization
- config = ve.extendObject( {
- icon: 'page-existing',
- label: title,
- href: mw.util.getUrl( title ),
- autoFitLabel: false
- }, config );
-
- // Parent constructor
- ve.ui.MWInternalLinkMenuOptionWidget.super.call( this, config );
-
- // Highlight matching parts of link suggestion
- this.$label.autoEllipsis( { hasSpan: false, tooltip: true, matchText:
config.query } );
-
- // Style based on link cache information
- ve.init.platform.linkCache.styleElement( title, this.$link );
-
- // Intialization
- this.$element.addClass( 've-ui-mwInternalLinkMenuOptionWidget' );
-
- if ( config.imageUrl ) {
- this.$icon
- .addClass(
've-ui-mwInternalLinkMenuOptionWidget-hasImage' )
- .css( 'background-image', 'url(' + config.imageUrl +
')' );
- }
-
- if ( config.description ) {
- this.$element.append(
- $( '<span>' )
- .addClass(
've-ui-mwInternalLinkMenuOptionWidget-description' )
- .text( config.description )
- );
- }
-};
-
-/* Inheritance */
-
-OO.inheritClass( ve.ui.MWInternalLinkMenuOptionWidget,
ve.ui.MWLinkMenuOptionWidget );
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWLinkMenuOptionWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWLinkMenuOptionWidget.js
deleted file mode 100644
index f480dfe..0000000
--- a/modules/ve-mw/ui/widgets/ve.ui.MWLinkMenuOptionWidget.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
- * VisualEditor UserInterface MWLinkMenuOptionWidget class.
- *
- * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-/**
- * Creates a ve.ui.MWLinkMenuOptionWidget 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.MWLinkMenuOptionWidget = function VeUiMWLinkMenuOptionWidget( config ) {
- // Config initialization
- config = $.extend( { icon: null }, config );
-
- // Parent constructor
- ve.ui.MWLinkMenuOptionWidget.super.call( this, config );
-
- // initialization
- this.$label.wrap( '<a>' );
- this.$link = this.$label.parent();
- this.$link.attr( 'href', config.href );
-};
-
-/* Inheritance */
-
-OO.inheritClass( ve.ui.MWLinkMenuOptionWidget, OO.ui.MenuOptionWidget );
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
deleted file mode 100644
index 85f2886..0000000
--- a/modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
+++ /dev/null
@@ -1,230 +0,0 @@
-/*!
- * VisualEditor UserInterface MWLinkTargetInputWidget class.
- *
- * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-/**
- * Creates an ve.ui.MWLinkTargetInputWidget object.
- *
- * @class
- * @extends OO.ui.TextInputWidget
- * @mixins OO.ui.mixin.LookupElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-ve.ui.MWLinkTargetInputWidget = function VeUiMWLinkTargetInputWidget( config )
{
- var widget = this;
-
- // Config initialization
- config = config || {};
-
- // Parent constructor
- ve.ui.MWLinkTargetInputWidget.super.call( this, config );
-
- // Mixin constructors
- OO.ui.mixin.LookupElement.call( this, config );
-
- // Initialization
- this.$element.addClass( 've-ui-mwLinkTargetInputWidget' );
- this.lookupMenu.$element.addClass( 've-ui-mwLinkTargetInputWidget-menu'
);
- if ( mw.config.get( 'wgVisualEditor' ).usePageImages ) {
- this.lookupMenu.$element.addClass(
've-ui-mwLinkTargetInputWidget-menu-withImages' );
- }
- if ( mw.config.get( 'wgVisualEditor' ).usePageDescriptions ) {
- this.lookupMenu.$element.addClass(
've-ui-mwLinkTargetInputWidget-menu-withDescriptions' );
- }
-
- this.interwikiPrefixes = [];
- this.interwikiPrefixesPromise = new mw.Api().get( {
- action: 'query',
- meta: 'siteinfo',
- siprop: 'interwikimap'
- } ).done( function ( data ) {
- $.each( data.query.interwikimap, function ( index, interwiki ) {
- widget.interwikiPrefixes.push( interwiki.prefix );
- } );
- } );
-};
-
-/* Inheritance */
-
-OO.inheritClass( ve.ui.MWLinkTargetInputWidget, OO.ui.TextInputWidget );
-
-OO.mixinClass( ve.ui.MWLinkTargetInputWidget, OO.ui.mixin.LookupElement );
-
-/* Methods */
-
-/**
- * @inheritdoc
- */
-ve.ui.MWLinkTargetInputWidget.prototype.onLookupMenuItemChoose = function (
item ) {
- this.closeLookupMenu();
- this.setLookupsDisabled( true );
- this.setValue( item.getData() );
- this.setLookupsDisabled( false );
-};
-
-/**
- * @inheritdoc
- */
-ve.ui.MWLinkTargetInputWidget.prototype.focus = function () {
- var retval;
- // Prevent programmatic focus from opening the menu
- this.setLookupsDisabled( true );
-
- // Parent method
- retval = ve.ui.MWLinkTargetInputWidget.super.prototype.focus.apply(
this, arguments );
-
- this.setLookupsDisabled( false );
- return retval;
-};
-
-/**
- * @inheritdoc
- */
-ve.ui.MWLinkTargetInputWidget.prototype.isValid = function () {
- var valid = !!mw.Title.newFromText( this.getValue() );
- return $.Deferred().resolve( valid ).promise();
-};
-
-/**
- * Gets a new request object of the current lookup query value.
- *
- * @method
- * @returns {jQuery.Promise} Promise without success or fail handlers attached
- */
-ve.ui.MWLinkTargetInputWidget.prototype.getLookupRequest = function () {
- var req,
- widget = this,
- promiseAbortObject = { abort: function () {
- // Do nothing. This is just so OOUI doesn't break due
to abort being undefined.
- } };
-
- if ( mw.Title.newFromText( this.value ) ) {
- return this.interwikiPrefixesPromise.then( function () {
- var interwiki = widget.value.substring( 0,
widget.value.indexOf( ':' ) );
- if (
- interwiki && interwiki !== '' &&
- widget.interwikiPrefixes.indexOf( interwiki )
!== -1
- ) {
- return $.Deferred().resolve( { query: {
- pages: [{
- title: widget.value
- }]
- } } ).promise( promiseAbortObject );
- } else {
- req = new mw.Api().get( {
- action: 'query',
- generator: 'prefixsearch',
- gpssearch: widget.value,
- gpsnamespace: 0,
- gpslimit: 5,
- prop:
'info|pageprops|pageimages|pageterms',
- pithumbsize: 80,
- pilimit: 5,
- redirects: '',
- wbptterms: 'description',
- ppprop: 'disambiguation'
- } );
- promiseAbortObject.abort = req.abort.bind( req
); // todo: ew
- return req;
- }
- } ).promise( promiseAbortObject );
- } else {
- // Don't send invalid titles to the API.
- // Just pretend it returned nothing so we can show the 'invalid
title' section
- return $.Deferred().resolve( {} ).promise( promiseAbortObject );
- }
-};
-
-/**
- * Get lookup cache item from server response data.
- *
- * @method
- * @param {Mixed} data Response from server
- */
-ve.ui.MWLinkTargetInputWidget.prototype.getLookupCacheDataFromResponse =
function ( data ) {
- return data.query || {};
-};
-
-/**
- * Get list of menu items from a server response.
- *
- * @param {Object} data Query result
- * @returns {OO.ui.MenuOptionWidget[]} Menu items
- */
-ve.ui.MWLinkTargetInputWidget.prototype.getLookupMenuOptionsFromData =
function ( data ) {
- var i, len, index, pageExists, pageExistsExact, suggestionPage,
linkData, redirect, redirects,
- items = [],
- suggestionPages = [],
- titleObj = mw.Title.newFromText( this.value ),
- redirectsTo = {},
- links = {};
-
- if ( data.redirects ) {
- for ( i = 0, len = data.redirects.length; i < len; i++ ) {
- redirect = data.redirects[i];
- redirectsTo[redirect.to] = redirectsTo[redirect.to] ||
[];
- redirectsTo[redirect.to].push( redirect.from );
- }
- }
-
- for ( index in data.pages ) {
- suggestionPage = data.pages[index];
- links[suggestionPage.title] =
ve.init.platform.linkCache.constructor.static.processPage( suggestionPage );
- suggestionPages.push( suggestionPage.title );
-
- redirects = redirectsTo[suggestionPage.title] || [];
- for ( i = 0, len = redirects.length; i < len; i++ ) {
- links[redirects[i]] = {
- missing: false,
- redirect: true,
- disambiguation: false,
- description: ve.msg(
'visualeditor-linkinspector-description-redirect', suggestionPage.title )
- };
- suggestionPages.push( redirects[i] );
- }
- }
-
- // If not found, run value through mw.Title to avoid treating a match
as a
- // mismatch where normalisation would make them matching (bug 48476)
-
- pageExistsExact = suggestionPages.indexOf( this.value ) !== -1;
- pageExists = pageExistsExact || (
- titleObj && suggestionPages.indexOf( titleObj.getPrefixedText()
) !== -1
- );
-
- if ( !pageExists ) {
- links[this.value] = {
- missing: true, redirect: false, disambiguation: false,
- description: ve.msg(
'visualeditor-linkinspector-description-new-page' )
- };
- }
-
- ve.init.platform.linkCache.set( links );
-
- // Internal Link
- // Offer the exact text as a suggestion if the page exists
- if ( pageExists && !pageExistsExact ) {
- suggestionPages.unshift( this.value );
- }
- // Offer the exact text as a new page if the title is valid
- if ( !pageExists && titleObj ) {
- suggestionPages.push( this.value );
- }
- for ( i = 0, len = suggestionPages.length; i < len; i++ ) {
- linkData = links[suggestionPages[i]] || {};
- items.push( new ve.ui.MWInternalLinkMenuOptionWidget( {
- data: suggestionPages[i],
- imageUrl: linkData.imageUrl,
- description: linkData.description,
- icon:
ve.init.platform.linkCache.constructor.static.getIconForLink( linkData ),
- query: this.value
- } ) );
- }
-
- return items;
-};
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js
deleted file mode 100644
index 55f845c..0000000
--- a/modules/ve-mw/ui/widgets/ve.ui.MWTemplateMenuOptionWidget.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * 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} [templateName] Template name
- * @cfg {string} [templateDescription] Template description
- */
-ve.ui.MWTemplateMenuOptionWidget = function VeUiMWTemplateMenuOptionWidget(
config ) {
- // Configuration initialization
- config = $.extend( { icon: 'check', data: config.templateName }, config
);
-
- // Parent constructor
- ve.ui.MWTemplateMenuOptionWidget.super.call( this, config );
-
- if ( config.templateDescription ) {
- $( '<div>' )
- .addClass(
've-ui-mwTemplateMenuOptionWidget-description' )
- .text( config.templateDescription )
- .appendTo( this.$element );
- }
-};
-
-/* 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
index f3188a8..7fa021e 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
@@ -9,18 +9,26 @@
* Creates an ve.ui.MWTemplateTitleInputWidget object.
*
* @class
- * @extends ve.ui.MWTitleInputWidget
+ * @extends mw.widgets.TitleInputWidget
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {number} [namespace] Namespace to prepend to queries. Defaults to
template namespace.
*/
ve.ui.MWTemplateTitleInputWidget = function VeUiMWTemplateTitleInputWidget(
config ) {
+ config = ve.extendObject( {}, {
+ namespace: mw.config.get( 'wgNamespaceIds' ).template
+ }, config );
+
// Parent constructor
- ve.ui.MWTitleInputWidget.call( this, config );
+ ve.ui.MWTemplateTitleInputWidget.super.call( this, config );
+
+ this.showTemplateDescriptions = this.showDescriptions;
+ // Clear the showDescriptions flag for subsequent requests as we
implement
+ // description fetch ourselves
+ this.showDescriptions = false;
// Properties
- this.namespace = config.namespace || mw.config.get( 'wgNamespaceIds'
).template;
this.descriptions = {};
// Initialization
@@ -29,7 +37,7 @@
/* Inheritance */
-OO.inheritClass( ve.ui.MWTemplateTitleInputWidget, ve.ui.MWTitleInputWidget );
+OO.inheritClass( ve.ui.MWTemplateTitleInputWidget, mw.widgets.TitleInputWidget
);
/* Methods */
@@ -41,90 +49,62 @@
* @return {jQuery.Promise} jQuery AJAX object, or promise object with an
.abort() method
*/
ve.ui.MWTemplateTitleInputWidget.prototype.getLookupRequest = function () {
- var xhr,
- widget = this,
- value = this.value;
+ var widget = this,
+ originalResponse,
+ promise =
ve.ui.MWTemplateTitleInputWidget.super.prototype.getLookupRequest.call( this );
- // Prefix with default namespace name
- if ( this.namespace !== null && mw.Title.newFromText( value,
this.namespace ) ) {
- value = mw.Title.newFromText( value, this.namespace
).getPrefixedText();
- }
+ if ( this.showTemplateDescriptions ) {
+ return promise
+ // Also get descriptions
+ .then( function ( response ) {
+ var xhr, index, params,
+ pages = ( response.query &&
response.query.pages ) || {},
+ titles = [];
- // Dont send leading ':' to open search
- if ( value.slice( 0, 1 ) === ':' ) {
- value = value.slice( 1 );
- }
-
- xhr = new mw.Api().get( {
- action: 'opensearch',
- search: value,
- suggest: ''
- } );
-
- return xhr
- // Also get descriptions
- .then( function ( response ) {
- var xhr,
- templates = response[1];
-
- widget.originalResponse = response;
-
- if ( templates.length > 0 ) {
- xhr = new mw.Api().get( {
- action: 'templatedata',
- titles: templates.join( '|' ),
- lang: mw.config.get( 'wgUserLanguage' ),
- redirects: '1'
- } );
- return xhr.promise( { abort: xhr.abort } );
- } else {
- return $.Deferred().resolve();
- }
- } )
- .then( function ( templateDataResponse ) {
- var pageId;
- // Look for descriptions and cache them
- if ( templateDataResponse ) {
- for ( pageId in templateDataResponse.pages ) {
- if (
templateDataResponse.pages[pageId].title &&
!widget.descriptions[templateDataResponse.pages[pageId].title] ) {
- // Cache descriptions
-
widget.descriptions[templateDataResponse.pages[pageId].title] =
templateDataResponse.pages[pageId].description;
- }
+ for ( index in pages ) {
+ titles.push( pages[index].title );
}
- }
- // Return the original response
- return widget.originalResponse;
- } )
- .promise( { abort: xhr.abort } );
+
+ originalResponse = response;
+
+ if ( titles.length > 0 ) {
+ params = {
+ action: 'templatedata',
+ titles: titles.join( '|' ),
+ lang: mw.config.get(
'wgUserLanguage' )
+ };
+ if ( widget.showRedirects ) {
+ params.redirects = '1';
+ }
+ xhr = new mw.Api().get( params );
+ return xhr.promise( { abort: xhr.abort
} );
+ }
+ } )
+ .then( function ( templateDataResponse ) {
+ var index, page,
+ pages = ( templateDataResponse &&
templateDataResponse.pages ) || {};
+ // Look for descriptions and cache them
+ for ( index in pages ) {
+ page = pages[index];
+ // Cache descriptions
+ widget.descriptions[page.title] =
page.description;
+ }
+ // Return the original response
+ return originalResponse;
+ } )
+ .promise( { abort: function () {} } );
+
+ }
+
+ return promise;
};
/**
* @inheritdoc
*/
-ve.ui.MWTemplateTitleInputWidget.prototype.getLookupMenuOptionsFromData =
function ( data ) {
- var i, len, title, value,
- 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( {
- templateName: value,
- templateDescription:
this.descriptions[matchingPages[i]],
- label: value
- } ) );
- }
- ve.init.platform.linkCache.set( linkCacheUpdate );
- }
-
- return items;
+ve.ui.MWTemplateTitleInputWidget.prototype.getOptionWidgetData = function (
title ) {
+ return ve.extendObject(
+
ve.ui.MWTemplateTitleInputWidget.super.prototype.getOptionWidgetData.apply(
this, arguments ),
+ { description: this.descriptions[title] }
+ );
};
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js
deleted file mode 100644
index 95e519c..0000000
--- a/modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
- * VisualEditor UserInterface MWTitleInputWidget class.
- *
- * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-/**
- * Thin wrapper around mw.widgets.TitleInputWidget
- *
- * @class
- * @extends mw.widgets.TitleInputWidget
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-ve.ui.MWTitleInputWidget = function VeUiMWTitleInputWidget( config ) {
- // Parent constructor
- ve.ui.MWTitleInputWidget.super.call( this, config );
-
- // Initialization
- this.$element.addClass( 've-ui-mwTitleInputWidget' );
- this.lookupMenu.$element.addClass( 've-ui-mwTitleInputWidget-menu' );
-};
-
-/* Inheritance */
-
-OO.inheritClass( ve.ui.MWTitleInputWidget, mw.widgets.TitleInputWidget );
-
-/* Methods */
-
-/**
- * Get a list of menu option widgets from the (possibly cached) data returned
by
- * #getLookupCacheDataFromResponse.
- *
- * See the parent documentation at
<https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.widgets.TitleInputWidget>
- *
- * @param {Mixed} data Cached result data, usually an array
- * @return {OO.ui.MenuOptionWidget[]} Menu items
- */
-ve.ui.MWTitleInputWidget.prototype.getLookupMenuOptionsFromData = function (
data ) {
- var i, len,
- linkCacheUpdate = {};
- if ( data && data.length ) {
- for ( i = 0, len = data.length; i < len; i++ ) {
- linkCacheUpdate[data[i]] = { missing: false };
- }
- ve.init.platform.linkCache.set( linkCacheUpdate );
- }
-
- return
ve.ui.MWTitleInputWidget.super.prototype.getLookupMenuOptionsFromData.apply(
this, arguments );
-};
--
To view, visit https://gerrit.wikimedia.org/r/218317
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I452f3b86ead403307072cf904f0553c9771f4300
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits