From 0165a53044eeea3251ff376b736a7d121710e87e Mon Sep 17 00:00:00 2001 From: suchetag Date: Thu, 30 Oct 2014 21:54:04 +0530 Subject: [PATCH] Replacing MWTitleInputWidget.getValue() with MWTitleInputWidget.getTitle() Now that we have .getTitle() as a method in MWTitleInputWidget, replacing the callers of MWTitleInputWidget.getValue() with .getTitle(). This fixes a bug in the .getTitle() method in MWTitleInputWidget which was not taking the namespaces into account before. Also fixes: the error when entering "Talk:" as a template title. The button to add template remains disabled when "Talk:" is given as an input to the title here. Bug: 71998 Change-Id: I1e629a61ec8b035d93a4b7acfecab81934019166 --- .../ve-mw/dm/models/ve.dm.MWTemplateModel.js | 20 ++++++++++++------- .../pages/ve.ui.MWTemplatePlaceholderPage.js | 6 +++--- .../ui/widgets/ve.ui.MWTitleInputWidget.js | 3 ++- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js b/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js index b7fbb20608..e8805e9c64 100644 --- a/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js +++ b/modules/ve-mw/dm/models/ve.dm.MWTemplateModel.js @@ -81,16 +81,22 @@ ve.dm.MWTemplateModel.newFromData = function ( transclusion, data ) { * namespace, using a leading colon to access other namespaces. * * @param {ve.dm.MWTransclusionModel} transclusion Transclusion template is in - * @param {string} name Template name - * @returns {ve.dm.MWTemplateModel} New template model + * @param {string|mw.Title} name Template name + * @returns {ve.dm.MWTemplateModel|null} New template model */ ve.dm.MWTemplateModel.newFromName = function ( transclusion, name ) { - var href = name; + var href, title; + if ( name instanceof mw.Title ) { + title = name; + } else { + title = mw.Title.newFromText( href, mw.config.get( 'wgNamespaceIds' ).template ); + } + if ( title !== null ) { + href = title.getPrefixedText(); + return new ve.dm.MWTemplateModel( transclusion, { href: href, wt: name }, 'user' ); + } - // TODO: Do we need to account for the title being invalid? - href = new mw.Title( href, mw.config.get( 'wgNamespaceIds' ).template ).getPrefixedText(); - - return new ve.dm.MWTemplateModel( transclusion, { href: href, wt: name }, 'user' ); + return null; }; /* Methods */ diff --git a/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js b/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js index d888ef33e8..7e929c38a7 100644 --- a/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js +++ b/modules/ve-mw/ui/pages/ve.ui.MWTemplatePlaceholderPage.js @@ -100,15 +100,15 @@ ve.ui.MWTemplatePlaceholderPage.prototype.onAddTemplate = function () { if ( menu.isVisible() ) { menu.chooseItem( menu.getSelectedItem() ); } - part = ve.dm.MWTemplateModel.newFromName( transclusion, this.addTemplateInput.getValue() ); + part = ve.dm.MWTemplateModel.newFromName( transclusion, this.addTemplateInput.getTitle() ); transclusion.replacePart( this.placeholder, part ); this.addTemplateInput.pushPending(); this.addTemplateButton.setDisabled( true ); this.removeButton.setDisabled( true ); }; -ve.ui.MWTemplatePlaceholderPage.prototype.onTemplateInputChange = function ( value ) { - this.addTemplateButton.setDisabled( value.trim() === '' ); +ve.ui.MWTemplatePlaceholderPage.prototype.onTemplateInputChange = function () { + this.addTemplateButton.setDisabled( this.addTemplateInput.getTitle() === null ); }; ve.ui.MWTemplatePlaceholderPage.prototype.onRemoveButtonClick = function () { diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js b/modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js index 45ff00817f..6ddaeea308 100644 --- a/modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js +++ b/modules/ve-mw/ui/widgets/ve.ui.MWTitleInputWidget.js @@ -133,7 +133,8 @@ ve.ui.MWTitleInputWidget.prototype.getLookupMenuItemsFromData = function ( data */ ve.ui.MWTitleInputWidget.prototype.getTitle = function () { var title = this.getValue(), - titleObj = mw.Title.newFromText( title ); + //mw.Title doesn't handle null well + titleObj = mw.Title.newFromText( title, this.namespace !== null ? this.namespace : undefined ); return titleObj; };