From a0071643d33d2026323b5d526d9971e787b98626 Mon Sep 17 00:00:00 2001 From: Jan Drewniak Date: Mon, 13 Aug 2018 16:29:05 +0200 Subject: [PATCH] Disable edit icon in read-only mode When a wiki is in read-only mode, the edit icon on articles should not open an editor. Instead, it should be in a "disabled" state and inform the user that the wiki is in read-only mode ( i.e. show the "apierror-readonly" message). Bug: T197497 Change-Id: Iee1414c20bea3ca936fb807820e58e5ed566d008 --- includes/MinervaHooks.php | 16 ++++++++++++++++ resources/skins.minerva.editor/init.js | 8 +++++--- skin.json | 7 ++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/includes/MinervaHooks.php b/includes/MinervaHooks.php index 561580e..2df6164 100644 --- a/includes/MinervaHooks.php +++ b/includes/MinervaHooks.php @@ -177,4 +177,20 @@ class MinervaHooks { ] ); } } + /** + * ResourceLoaderGetConfigVars hook handler. + * Used for setting JS variables which are pulled in dynamically with RL + * instead of embedded directly on the page with a script tag. + * These vars have a shorter cache-life than those in `getSkinConfigVariables`. + * + * @param array &$vars Array of variables to be added into the output of the RL startup module. + * @return bool + */ + public static function onResourceLoaderGetConfigVars( &$vars ) { + $vars += [ + 'wgMinervaReadOnly' => wfReadOnly() + ]; + + return true; + } } diff --git a/resources/skins.minerva.editor/init.js b/resources/skins.minerva.editor/init.js index 8442a92..efc27ee 100644 --- a/resources/skins.minerva.editor/init.js +++ b/resources/skins.minerva.editor/init.js @@ -2,7 +2,8 @@ var // see: https://www.mediawiki.org/wiki/Manual:Interface/JavaScript#Page-specific - isEditable = mw.config.get( 'wgIsProbablyEditable' ), + isReadOnly = mw.config.get( 'wgMinervaReadOnly' ), + isEditable = !isReadOnly && mw.config.get( 'wgIsProbablyEditable' ), blockInfo = mw.config.get( 'wgMinervaUserBlockInfo', false ), router = require( 'mediawiki.router' ), issues = M.require( 'skins.minerva.scripts/cleanuptemplates' ), @@ -25,6 +26,7 @@ name: 'edit-enabled', glyphPrefix: 'minerva' } ), + editErrorMessage = isReadOnly ? mw.msg( 'apierror-readonly' ) : mw.msg( 'mobile-frontend-editor-disabled' ), // TODO: move enabledClass, $caEdit, and disabledClass to locals within // updateEditPageButton(). enabledClass = enabledEditIcon.getGlyphClassName(), @@ -347,7 +349,7 @@ setupEditor( currentPage ); } else { updateEditPageButton( false ); - showSorryToast( mw.msg( 'mobile-frontend-editor-disabled' ) ); + showSorryToast( editErrorMessage ); } } @@ -376,7 +378,7 @@ } ); } else { updateEditPageButton( false ); - showSorryToast( mw.msg( 'mobile-frontend-editor-disabled' ) ); + showSorryToast( editErrorMessage ); } } diff --git a/skin.json b/skin.json index 773ef90..e06e5d6 100644 --- a/skin.json +++ b/skin.json @@ -75,7 +75,11 @@ ], "SpecialPageBeforeExecute": [ "MinervaHooks::onSpecialPageBeforeExecute" + ], + "ResourceLoaderGetConfigVars": [ + "MinervaHooks::onResourceLoaderGetConfigVars" ] + }, "MessagesDirs": { "MinervaNeue": [ @@ -529,7 +533,8 @@ "mobile-frontend-editor-edit", "mobile-frontend-editor-redlink-create", "mobile-frontend-editor-redlink-leave", - "mobile-frontend-editor-redlink-explain" + "mobile-frontend-editor-redlink-explain", + "apierror-readonly" ], "scripts": [ "resources/skins.minerva.editor/init.js"