From 144103b0293bd6c308d6b2d777cd51f9cc4185bd Mon Sep 17 00:00:00 2001 From: Ed Sanders Date: Tue, 27 Nov 2018 17:25:52 +0000 Subject: [PATCH] Implement Title.wantSignaturesNamespace in JS Change-Id: Ib2faa22c429096d545ddb829a6b4025427ad6071 --- resources/src/mediawiki.Title/Title.js | 16 ++++++++++++++++ .../resources/mediawiki/mediawiki.Title.test.js | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/resources/src/mediawiki.Title/Title.js b/resources/src/mediawiki.Title/Title.js index 0bcb2b654f..44baa8b79b 100644 --- a/resources/src/mediawiki.Title/Title.js +++ b/resources/src/mediawiki.Title/Title.js @@ -664,6 +664,9 @@ /** * Check if a given namespace is a talk namespace + * + * See MWNamespace::isTalk in PHP + * * @param {number} namespaceId Namespace ID * @return {boolean} Namespace is a talk namespace */ @@ -671,6 +674,19 @@ return !!( namespaceId > NS_MAIN && namespaceId % 2 ); }; + /** + * Check if signature buttons should be shown in a given namespace + * + * See MWNamespace::wantSignatures in PHP + * + * @param {number} namespaceId Namespace ID + * @return {boolean} Namespace is a signature namespace + */ + Title.wantSignaturesNamespace = function ( namespaceId ) { + return this.isTalkNamespace( namespaceId ) || + mw.config.get( 'wgExtraSignatureNamespaces' ).indexOf( namespaceId ) !== -1; + }; + /** * Whether this title exists on the wiki. * diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js index acdf2f115b..afeb4a55db 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js @@ -323,6 +323,22 @@ assert.strictEqual( title.getFragment(), null, 'getTalkPage does not copy the fragment' ); } ); + QUnit.test( 'wantSignaturesNamespace', function ( assert ) { + var namespaces = mw.config.values.wgExtraSignatureNamespaces; + + mw.config.values.wgExtraSignatureNamespaces = []; + assert.strictEqual( mw.Title.wantSignaturesNamespace( 0 ), false, 'Main namespace has no signatures' ); + assert.strictEqual( mw.Title.wantSignaturesNamespace( 1 ), true, 'Talk namespace no signatures' ); + assert.strictEqual( mw.Title.wantSignaturesNamespace( 2 ), false, 'NS2 has no signatures' ); + assert.strictEqual( mw.Title.wantSignaturesNamespace( 3 ), true, 'NS3 has signatures' ); + + mw.config.values.wgExtraSignatureNamespaces = [ 0 ]; + assert.strictEqual( mw.Title.wantSignaturesNamespace( 0 ), true, 'Main namespace has signatures when explicitly defined' ); + + // Restore + mw.config.values.wgExtraSignatureNamespaces = namespaces; + } ); + QUnit.test( 'Throw error on invalid title', function ( assert ) { assert.throws( function () { return new mw.Title( '' ); -- 2.20.1