Let users set __NOEDITSECTION__ status

Adds a checkbox to the page settings pane of the meta dialog that lets
users set or unset the __NOEDITSECTION__ flag on the page.

Change-Id: If1eca58e28d214021f5f5582856e595d4d0fbc43
This commit is contained in:
James D. Forrester 2013-11-15 12:02:34 -08:00 committed by Roan Kattouw
parent 0fadc2bc77
commit 707f7c93a5
7 changed files with 95 additions and 12 deletions

View file

@ -524,6 +524,7 @@ $wgResourceModules += array(
'modules/ve-mw/dm/metaitems/ve.dm.MWCategoryMetaItem.js',
'modules/ve-mw/dm/metaitems/ve.dm.MWDefaultSortMetaItem.js',
'modules/ve-mw/dm/metaitems/ve.dm.MWLanguageMetaItem.js',
'modules/ve-mw/dm/metaitems/ve.dm.MWNoEditSectionMetaItem.js',
'modules/ve-mw/dm/metaitems/ve.dm.MWTransclusionMetaItem.js',
'modules/ve-mw/dm/metaitems/ve.dm.MWTOCDisableMetaItem.js',
'modules/ve-mw/dm/metaitems/ve.dm.MWTOCForceMetaItem.js',
@ -646,6 +647,7 @@ $wgResourceModules += array(
'visualeditor-dialog-meta-languages-readonlynote',
'visualeditor-dialog-meta-languages-section',
'visualeditor-dialog-meta-settings-label',
'visualeditor-dialog-meta-settings-noeditsection-label',
'visualeditor-dialog-meta-settings-section',
'visualeditor-dialog-meta-settings-toc-default',
'visualeditor-dialog-meta-settings-toc-disable',

View file

@ -0,0 +1,47 @@
/*!
* VisualEditor DataModel MWNoEditSectionMetaItem class.
*
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* DataModel disable section edit links meta item.
*
* @class
* @extends ve.dm.MetaItem
* @constructor
* @param {Object} element Reference to element in meta-linmod
*/
ve.dm.MWNoEditSectionMetaItem = function VeDmMWNoEditSectionMetaItem( element ) {
// Parent constructor
ve.dm.MetaItem.call( this, element );
};
/* Inheritance */
OO.inheritClass( ve.dm.MWNoEditSectionMetaItem, ve.dm.MetaItem );
/* Static Properties */
ve.dm.MWNoEditSectionMetaItem.static.name = 'mwNoEditSection';
ve.dm.MWNoEditSectionMetaItem.static.group = 'mwNoEditSection';
ve.dm.MWNoEditSectionMetaItem.static.matchTagNames = [ 'meta' ];
ve.dm.MWNoEditSectionMetaItem.static.matchRdfaTypes = [ 'mw:PageProp/noeditsection' ];
ve.dm.MWNoEditSectionMetaItem.static.toDataElement = function () {
return { 'type': this.name };
};
ve.dm.MWNoEditSectionMetaItem.static.toDomElements = function ( dataElement, doc ) {
var meta = doc.createElement( 'meta' );
meta.setAttribute( 'property', 'mw:PageProp/noeditsection' );
return [ meta ];
};
/* Registration */
ve.dm.modelRegistry.register( ve.dm.MWNoEditSectionMetaItem );

View file

@ -32,7 +32,7 @@ ve.dm.MWTOCDisableMetaItem.static.matchTagNames = [ 'meta' ];
ve.dm.MWTOCDisableMetaItem.static.matchRdfaTypes = [ 'mw:PageProp/notoc' ];
ve.dm.MWTOCDisableMetaItem.static.toDataElement = function ( ) {
ve.dm.MWTOCDisableMetaItem.static.toDataElement = function () {
return { 'type': this.name };
};

View file

@ -32,7 +32,7 @@ ve.dm.MWTOCForceMetaItem.static.matchTagNames = [ 'meta' ];
ve.dm.MWTOCForceMetaItem.static.matchRdfaTypes = [ 'mw:PageProp/forcetoc' ];
ve.dm.MWTOCForceMetaItem.static.toDataElement = function ( ) {
ve.dm.MWTOCForceMetaItem.static.toDataElement = function () {
return { 'type': this.name };
};

View file

@ -58,6 +58,7 @@
"visualeditor-dialog-meta-languages-readonlynote": "This is a list of pages in other languages that are linked to this one; for now, it can only be edited in source mode or on Wikidata.",
"visualeditor-dialog-meta-languages-section": "Languages",
"visualeditor-dialog-meta-settings-label": "Page settings",
"visualeditor-dialog-meta-settings-noeditsection-label": "Disable the edit links next to each heading on this page.",
"visualeditor-dialog-meta-settings-section": "Page settings",
"visualeditor-dialog-meta-settings-toc-default": "Show if needed",
"visualeditor-dialog-meta-settings-toc-disable": "Never show",
@ -174,4 +175,4 @@
"visualeditor-wikitext-warning": "You are using VisualEditor - [[{{MediaWiki:visualeditor-wikitext-warning-link}}|wikitext]] does not work here. Click \"{{int:visualeditor-ca-editsource}}\" to edit the page in wikitext mode unsaved changes will be lost.",
"visualeditor-wikitext-warning-link": "Help:Wiki markup",
"visualeditor-wikitext-warning-title": "Wikitext markup detected"
}
}

View file

@ -61,6 +61,7 @@
"visualeditor-dialog-meta-languages-readonlynote": "Text of a note informing users that the language links cannot yet be edited.\n\nSee also:\n* {{msg-mw|Visualeditor-referencelist-missingref}}",
"visualeditor-dialog-meta-languages-section": "Label for the language links dialog section.\n{{Identical|Language}}",
"visualeditor-dialog-meta-settings-label": "Title for the page settings dialog section",
"visualeditor-dialog-meta-settings-noeditsection-label": "Prompt for the checkbox to let the user disable section edit links on the page.",
"visualeditor-dialog-meta-settings-section": "Label for the page settings dialog section.",
"visualeditor-dialog-meta-settings-toc-default": "Label for the default TOC behaviour option.",
"visualeditor-dialog-meta-settings-toc-disable": "Label for the TOC behaviour option to never show.",

View file

@ -33,6 +33,10 @@ ve.ui.MWSettingsPage = function VeUiMWSettingsPage( surface, name, config ) {
'label': ve.msg( 'visualeditor-dialog-meta-settings-label' ),
'icon': 'settings'
} );
// Initialization
// Table of Contents items
this.tocOptionSelector = new OO.ui.SelectWidget( { '$': this.$ } );
this.tocOptionWidgets = {
'default': new OO.ui.OptionWidget(
@ -49,18 +53,20 @@ ve.ui.MWSettingsPage = function VeUiMWSettingsPage( surface, name, config ) {
)
};
this.tocOptionSelector.addItems( ve.getObjectValues( this.tocOptionWidgets ) );
// Events
this.tocOptionSelector.connect( this, {
'select': 'onTOCOptionChange'
} );
// Initialization
this.settingsFieldset.$element.append(
this.$( '<span>' )
.text( ve.msg( 'visualeditor-dialog-meta-settings-toc-label' ) ),
this.tocOptionSelector.$element
);
this.tocOptionSelector.connect( this, { 'select': 'onTOCOptionChange' } );
// Disable section edit links items
this.disableSectionEditLinksInput = new OO.ui.CheckboxWidget( {
'$': this.$,
'label': ve.msg( 'visualeditor-dialog-meta-settings-noeditsection-label' )
} );
this.settingsFieldset.$element.append( this.disableSectionEditLinksInput.$element );
this.$element.append( this.settingsFieldset.$element );
};
@ -88,6 +94,15 @@ ve.ui.MWSettingsPage.prototype.getTOCOptionItem = function () {
return this.metaList.getItemsInGroup( 'mwTOC' )[0] || null;
};
/**
* Get the section edit link disabling item
*
* @returns {Object|null} Section edit link disabling meta item, if any
*/
ve.ui.MWSettingsPage.prototype.getDisableSectionEditLinksItem = function () {
return this.metaList.getItemsInGroup( 'mwNoEditSection' )[0] || null;
};
/**
* Setup settings page.
*
@ -97,8 +112,12 @@ ve.ui.MWSettingsPage.prototype.setup = function () {
var tocOption = this.getTOCOptionItem(),
tocType = tocOption && tocOption.element.type || 'default';
// Table of Contents items
this.tocOptionSelector.selectItem( this.tocOptionWidgets[tocType] );
this.tocOptionTouched = false;
// Disable section edit links items
this.disableSectionEditLinksInput.setValue( !!this.getDisableSectionEditLinksItem() );
};
/**
@ -110,8 +129,13 @@ ve.ui.MWSettingsPage.prototype.teardown = function ( data ) {
// Data initialisation
data = data || {};
var currentTOCItem = this.getTOCOptionItem(),
newTOCData = this.tocOptionSelector.getSelectedItem();
var // Table of Contents items
currentTOCItem = this.getTOCOptionItem(),
newTOCData = this.tocOptionSelector.getSelectedItem(),
// Disable section edit links items
currentDisableSectionEditLinksItem = this.getDisableSectionEditLinksItem(),
newDisableSectionEditState = this.disableSectionEditLinksInput.getValue();
// Alter the TOC option flag iff it's been touched & is actually different
if ( this.tocOptionTouched ) {
@ -132,4 +156,12 @@ ve.ui.MWSettingsPage.prototype.teardown = function ( data ) {
}
}
}
// Disable section edit links items
if ( currentDisableSectionEditLinksItem && !newDisableSectionEditState ) {
currentDisableSectionEditLinksItem.remove();
}
if ( !currentDisableSectionEditLinksItem && newDisableSectionEditState ) {
this.metaList.insertMeta( { 'type': 'mwNoEditSection' } );
}
};