jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/388459 )
Change subject: Use mw.cookie instead of $.cookie
......................................................................
Use mw.cookie instead of $.cookie
Change-Id: Ic45f5b5aae3385f3fba9f6b7e3c0d3917bf074da
---
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
M repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
M repo/resources/Resources.php
M repo/resources/wikibase.ui.entityViewInit.js
M repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php
M repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
M tests/browser/features/support/modules/entity_module.rb
M view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
M view/resources/jquery/wikibase/resources.php
M view/resources/wikibase/view/ControllerViewFactory.js
M view/resources/wikibase/view/resources.php
11 files changed, 118 insertions(+), 33 deletions(-)
Approvals:
Ladsgroup: Looks good to me, approved
jenkins-bot: Verified
Thiemo Kreuz (WMDE): Looks good to me, but someone else must approve
diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index 9a3b192..49a99e6 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -63,6 +63,11 @@
*/
private $entityFactory;
+ /**
+ * @var string
+ */
+ private $cookiePrefix;
+
public function __construct(
TemplateFactory $templateFactory,
UserLanguageLookup $userLanguageLookup,
@@ -70,7 +75,8 @@
EntityRevisionLookup $entityRevisionLookup,
LanguageNameLookup $languageNameLookup,
OutputPageEntityIdReader $outputPageEntityIdReader,
- EntityFactory $entityFactory
+ EntityFactory $entityFactory,
+ $cookiePrefix
) {
$this->templateFactory = $templateFactory;
$this->userLanguageLookup = $userLanguageLookup;
@@ -79,13 +85,14 @@
$this->languageNameLookup = $languageNameLookup;
$this->outputPageEntityIdReader = $outputPageEntityIdReader;
$this->entityFactory = $entityFactory;
+ $this->cookiePrefix = $cookiePrefix;
}
/**
* @return self
*/
public static function newFromGlobalState() {
- global $wgLang;
+ global $wgLang, $wgCookiePrefix;
$wikibaseRepo = WikibaseRepo::getDefaultInstance();
@@ -99,7 +106,8 @@
$wikibaseRepo->getEntityContentFactory(),
$wikibaseRepo->getEntityIdParser()
),
- $wikibaseRepo->getEntityFactory()
+ $wikibaseRepo->getEntityFactory(),
+ $wgCookiePrefix
);
}
@@ -233,6 +241,7 @@
new MediaWikiLanguageDirectionalityLookup(),
$this->languageNameLookup,
new MediaWikiLocalizedTextProvider( $languageCode ),
+ $this->cookiePrefix,
$termsListItemsHtml ?: []
);
}
diff --git a/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
index a6b5c6a..4bd0054 100644
--- a/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
+++ b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
@@ -65,6 +65,11 @@
private $textProvider;
/**
+ * @var string
+ */
+ private $cookiePrefix;
+
+ /**
* @var string[]
*/
private $termsListItems;
@@ -77,6 +82,7 @@
* @param LanguageDirectionalityLookup $languageDirectionalityLookup
* @param LanguageNameLookup $languageNameLookup
* @param LocalizedTextProvider $textProvider
+ * @param string $cookiePrefix
* @param string[] $termsListItems
*/
public function __construct(
@@ -87,6 +93,7 @@
LanguageDirectionalityLookup $languageDirectionalityLookup,
LanguageNameLookup $languageNameLookup,
LocalizedTextProvider $textProvider,
+ $cookiePrefix,
array $termsListItems = []
) {
$this->user = $user;
@@ -96,6 +103,7 @@
$this->languageDirectionalityLookup =
$languageDirectionalityLookup;
$this->languageNameLookup = $languageNameLookup;
$this->textProvider = $textProvider;
+ $this->cookiePrefix = $cookiePrefix;
$this->termsListItems = $termsListItems;
}
@@ -151,6 +159,12 @@
$name = 'wikibase-entitytermsview-showEntitytermslistview';
if ( $this->user->isAnon() ) {
+ $cookieName = $this->cookiePrefix . $name;
+ if ( isset( $_COOKIE[$cookieName] ) ) {
+ return $_COOKIE[$cookieName] === 'false';
+ }
+ // B/C: cookie set before 2017-11-06 are not prefixed.
B/C code to be removed after 2018-11-14
+ // once all old cookies have expired.
return isset( $_COOKIE[$name] ) && $_COOKIE[$name] ===
'false';
} else {
return !$this->user->getOption( $name, true );
diff --git a/repo/resources/Resources.php b/repo/resources/Resources.php
index ea2d155..d18f371 100644
--- a/repo/resources/Resources.php
+++ b/repo/resources/Resources.php
@@ -121,13 +121,13 @@
],
'dependencies' => [
'mediawiki.api.options',
+ 'mediawiki.cookie',
'mediawiki.page.watch.ajax',
'mediawiki.user',
'mw.config.values.wbEntityTypes',
'mw.config.values.wbRepo',
'mw.config.values.wbGeoShapeStorageApiEndpoint',
'jquery.wikibase.wbtooltip',
- 'jquery.cookie',
'wikibase',
'wikibase.api.getLocationAgnosticMwApi',
'wikibase.datamodel.Entity',
diff --git a/repo/resources/wikibase.ui.entityViewInit.js
b/repo/resources/wikibase.ui.entityViewInit.js
index b6c1382..d0ebda3 100644
--- a/repo/resources/wikibase.ui.entityViewInit.js
+++ b/repo/resources/wikibase.ui.entityViewInit.js
@@ -152,7 +152,7 @@
$entityview.on( viewName + 'afterstartediting', function () {
if ( !$.find( '.mw-notification-content' ).length
- && !$.cookie(
'wikibase-no-anonymouseditwarning' )
+ && !mw.cookie.get(
'wikibase-no-anonymouseditwarning' )
) {
var message = mw.msg(
'wikibase-anonymouseditwarning',
@@ -230,7 +230,7 @@
cookieKey = 'wikibase.acknowledgedcopyrightversion',
optionsKey = 'wb-acknowledgedcopyrightversion';
- if ( $.cookie( cookieKey ) === copyRightVersion
+ if ( mw.cookie.get( cookieKey ) === copyRightVersion
|| mw.user.options.get( optionsKey ) ===
copyRightVersion
) {
return;
@@ -254,7 +254,7 @@
event.preventDefault();
editableTemplatedWidget.notification();
if ( mw.user.isAnon() ) {
- $.cookie( cookieKey, copyRightVersion,
{ expires: 365 * 3, path: '/' } );
+ mw.cookie.set( cookieKey,
copyRightVersion, { expires: 3 * 365 * 24 * 60 * 60, path: '/' } );
} else {
var api = new mw.Api();
api.saveOption( optionsKey,
copyRightVersion );
@@ -288,7 +288,7 @@
$messageAnchor.data( 'wbtooltip' ).degrade( true );
$( window ).off( '.wbCopyrightTooltip' );
if ( mw.user.isAnon() ) {
- $.cookie( cookieKey, copyRightVersion, {
expires: 365 * 3, path: '/' } );
+ mw.cookie.set( cookieKey, copyRightVersion, {
expires: 3 * 365 * 24 * 60 * 60, path: '/' } );
} else {
var api = new mw.Api();
api.saveOption( optionsKey, copyRightVersion );
diff --git
a/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php
b/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php
index b113ff5..d6b5267 100644
--- a/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php
+++ b/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php
@@ -75,7 +75,8 @@
$entityRevisionLookup,
$languageNameLookup,
$outputPageEntityIdReader,
- new EntityFactory( [] )
+ new EntityFactory( [] ),
+ ''
);
return $outputPageBeforeHTMLHookHandler;
@@ -127,7 +128,8 @@
$this->getMock( EntityRevisionLookup::class ),
$this->getMock( LanguageNameLookup::class ),
$outputPageEntityIdReader,
- new EntityFactory( [] )
+ new EntityFactory( [] ),
+ ''
);
$out = $this->newOutputPage();
diff --git
a/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
index 6625c74..ad32bdb 100644
---
a/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
@@ -27,13 +27,16 @@
*/
class EntityViewPlaceholderExpanderTest extends PHPUnit_Framework_TestCase {
+ const COOKIE_NAME = 'wikibase-entitytermsview-showEntitytermslistview';
+
/**
* @param User $user
* @param Item $item
+ * @param string $cookiePrefix
*
* @return EntityViewPlaceholderExpander
*/
- private function newExpander( User $user, Item $item ) {
+ private function newExpander( User $user, Item $item, $cookiePrefix =
'' ) {
$templateFactory = TemplateFactory::getDefaultInstance();
$termsLanguages = [ 'de', 'en', 'ru' ];
@@ -47,19 +50,18 @@
$termsLanguages,
$this->getMock( LanguageDirectionalityLookup::class ),
$languageNameLookup,
- new DummyLocalizedTextProvider()
+ new DummyLocalizedTextProvider(),
+ $cookiePrefix
);
}
- public function provideEntity() {
+ private function newItem() {
$item = new Item( new ItemId( 'Q23' ) );
$item->setLabel( 'en', 'Moskow' );
$item->setLabel( 'de', 'Moskau' );
$item->setDescription( 'de', 'Hauptstadt Russlands' );
- return [
- [ $item ],
- ];
+ return $item;
}
/**
@@ -81,21 +83,15 @@
return $user;
}
- /**
- * @dataProvider provideEntity
- */
- public function testGetHtmlForPlaceholder( Item $item ) {
- $expander = $this->newExpander( $this->newUser(), $item );
+ public function testGetHtmlForPlaceholder() {
+ $expander = $this->newExpander( $this->newUser(),
$this->newItem() );
$html = $expander->getHtmlForPlaceholder( 'termbox' );
$this->assertInternalType( 'string', $html );
}
- /**
- * @dataProvider provideEntity
- */
- public function testRenderTermBox( Item $item ) {
- $expander = $this->newExpander( $this->newUser(), $item );
+ public function testRenderTermBox() {
+ $expander = $this->newExpander( $this->newUser(),
$this->newItem() );
// According to the mock objects, this should generate a term
box for
// 'de' and 'ru', since 'en' is already covered by the
interface language.
@@ -111,4 +107,68 @@
$this->assertContains(
'wikibase-entitytermsforlanguageview-ru', $html );
}
+ public function
testGivenCookieSetToTrue_placeholderIsInitiallyExpanded() {
+ $expander = $this->newExpander( $this->newUser( true ),
$this->newItem(), 'testwiki-' );
+
+ $_COOKIE['testwiki-' . self::COOKIE_NAME] = 'true';
+
+ $html = $expander->getHtmlForPlaceholder(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' );
+
+ $this->assertEquals( '', $html );
+ }
+
+ public function
testGivenCookieSetToFalse_placeholderIsInitiallyCollapsed() {
+ $expander = $this->newExpander( $this->newUser( true ),
$this->newItem(), 'testwiki-' );
+
+ $_COOKIE['testwiki-' . self::COOKIE_NAME] = 'false';
+
+ $html = $expander->getHtmlForPlaceholder(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' );
+
+ $this->assertEquals( 'wikibase-initially-collapsed', $html );
+ }
+
+ public function
testGivenOldCookieSetToTrue_placeholderIsInitiallyExpanded() {
+ $expander = $this->newExpander( $this->newUser( true ),
$this->newItem(), 'testwiki-' );
+
+ unset( $_COOKIE['testwiki-' . self::COOKIE_NAME] );
+ $_COOKIE[self::COOKIE_NAME] = 'true';
+
+ $html = $expander->getHtmlForPlaceholder(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' );
+
+ $this->assertEquals( '', $html );
+ }
+
+ public function
testGivenOldCookieSetToFalse_placeholderIsInitiallyCollapsed() {
+ $expander = $this->newExpander( $this->newUser( true ),
$this->newItem(), 'testwiki-' );
+
+ unset( $_COOKIE['testwiki-' . self::COOKIE_NAME] );
+ $_COOKIE[self::COOKIE_NAME] = 'false';
+
+ $html = $expander->getHtmlForPlaceholder(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' );
+
+ $this->assertEquals( 'wikibase-initially-collapsed', $html );
+ }
+
+ public function testPrefixedCookieHasPrecedenceOverOldCookie() {
+ $expander = $this->newExpander( $this->newUser( true ),
$this->newItem(), 'testwiki-' );
+
+ $_COOKIE['testwiki-' . self::COOKIE_NAME] = 'true';
+ $_COOKIE[self::COOKIE_NAME] = 'false';
+
+ $html = $expander->getHtmlForPlaceholder(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' );
+
+ $this->assertEquals( '', $html );
+ }
+
+ public function testGivenNoCookie_placeholderIsInitiallyExpanded() {
+ $expander = $this->newExpander( $this->newUser( true ),
$this->newItem(), 'testwiki-' );
+
+ unset( $_COOKIE['testwiki-' . self::COOKIE_NAME] );
+ unset( $_COOKIE[self::COOKIE_NAME] );
+
+ $html = $expander->getHtmlForPlaceholder(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' );
+
+ $this->assertEquals( '', $html );
+ }
+
}
diff --git a/tests/browser/features/support/modules/entity_module.rb
b/tests/browser/features/support/modules/entity_module.rb
index 0efa3ca..eb56bb6 100644
--- a/tests/browser/features/support/modules/entity_module.rb
+++ b/tests/browser/features/support/modules/entity_module.rb
@@ -140,13 +140,13 @@
def set_copyright_ack_cookie
wait_until_cookie_loaded
- cookie = "$.cookie( 'wikibase.acknowledgedcopyrightversion', 'wikibase-1',
{ 'expires': null, 'path': '/' } );"
+ cookie = "mw.cookie.set( 'wikibase.acknowledgedcopyrightversion',
'wikibase-1', { 'expires': null, 'path': '/' } );"
execute_script(cookie)
end
def set_noanonymouseditwarning_cookie
wait_until_cookie_loaded
- cookie = "$.cookie( 'wikibase-no-anonymouseditwarning', '1', { 'expires':
null, 'path': '/' } );"
+ cookie = "mw.cookie.set( 'wikibase-no-anonymouseditwarning', '1', {
'expires': null, 'path': '/' } );"
execute_script(cookie)
end
diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
index 1b8e93d..fb62778 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
@@ -220,10 +220,10 @@
} )
.on( 'toggleranimation.' + this.widgetName,
function ( event, params ) {
if ( mw.user.isAnon() ) {
- $.cookie(
+ mw.cookie.set(
'wikibase-entitytermsview-showEntitytermslistview',
params.visible,
- { expires: 365, path:
'/' }
+ { expires: 365 * 24 *
60 * 60, path: '/' }
);
} else {
api.saveOption(
diff --git a/view/resources/jquery/wikibase/resources.php
b/view/resources/jquery/wikibase/resources.php
index 05a3893..cbb7caf 100644
--- a/view/resources/jquery/wikibase/resources.php
+++ b/view/resources/jquery/wikibase/resources.php
@@ -167,13 +167,13 @@
'themes/default/jquery.wikibase.entitytermsview.css',
],
'dependencies' => [
- 'jquery.cookie',
'jquery.ui.closeable',
'jquery.ui.EditableTemplatedWidget',
'jquery.ui.toggler',
'jquery.wikibase.entitytermsforlanguagelistview',
'mediawiki.api',
'mediawiki.api.options',
+ 'mediawiki.cookie',
'mediawiki.user',
],
'messages' => [
diff --git a/view/resources/wikibase/view/ControllerViewFactory.js
b/view/resources/wikibase/view/ControllerViewFactory.js
index b32ffd7..2d32261 100644
--- a/view/resources/wikibase/view/ControllerViewFactory.js
+++ b/view/resources/wikibase/view/ControllerViewFactory.js
@@ -85,7 +85,7 @@
view.element.on( 'entitytermsviewafterstopediting', function ()
{
var showEntitytermslistviewValue = mw.user.isAnon()
- ? $.cookie(
'wikibase-entitytermsview-showEntitytermslistview' )
+ ? mw.cookie.get(
'wikibase-entitytermsview-showEntitytermslistview' )
: mw.user.options.get(
'wikibase-entitytermsview-showEntitytermslistview' );
var showEntitytermslistview = (
showEntitytermslistviewValue === 'true'
|| showEntitytermslistviewValue === '1'
diff --git a/view/resources/wikibase/view/resources.php
b/view/resources/wikibase/view/resources.php
index 6c76c1e..c2dbf07 100644
--- a/view/resources/wikibase/view/resources.php
+++ b/view/resources/wikibase/view/resources.php
@@ -64,7 +64,7 @@
'wikibase.view.ControllerViewFactory' => $moduleTemplate + [
'scripts' => 'ControllerViewFactory.js',
'dependencies' => [
- 'jquery.cookie',
+ 'mediawiki.cookie',
'mediawiki.user',
'wikibase.view.__namespace',
'wikibase.view.ToolbarViewController',
--
To view, visit https://gerrit.wikimedia.org/r/388459
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic45f5b5aae3385f3fba9f6b7e3c0d3917bf074da
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
Gerrit-Reviewer: Fomafix <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Lydia Pintscher (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Kreuz (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits