Tobias Gritschacher has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/179113

Change subject: New Wikidata Build - 2014/12/11
......................................................................

New Wikidata Build - 2014/12/11

Change-Id: Ia0a938089b86f92c5242ef01f43e9d41c9830b29
---
M WikibaseClient.settings.php
M WikibaseRepo.settings.php
M composer.lock
M extensions/Wikibase/client/includes/hooks/ParserAfterParseHookHandler.php
M 
extensions/Wikibase/lib/resources/jquery.wikibase-shared/jquery.wikibase.wbtooltip.js
M extensions/Wikibase/lib/resources/jquery.wikibase-shared/resources.php
M 
extensions/Wikibase/lib/resources/jquery.wikibase-shared/themes/default/jquery.wikibase.wbtooltip.css
M 
extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js
M 
extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
M extensions/Wikibase/lib/resources/jquery.wikibase/resources.php
M 
extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js
M extensions/Wikibase/lib/resources/wikibase.css
M extensions/Wikibase/lib/tests/phpunit/EntityRevisionLookupTest.php
M extensions/Wikibase/repo/i18n/ksh.json
M extensions/Wikibase/repo/i18n/mk.json
M extensions/Wikibase/repo/i18n/pl.json
M extensions/Wikibase/repo/i18n/qqq.json
M extensions/Wikibase/repo/i18n/uk.json
M extensions/Wikibase/repo/i18n/zh-hans.json
M extensions/Wikibase/repo/resources/Resources.php
M 
extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.EditableTemplatedWidget.js
A extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.css
A extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.js
M extensions/Wikibase/repo/resources/jquery/jquery.sticknode.js
M extensions/Wikibase/repo/resources/templates.php
M extensions/Wikibase/repo/resources/utilities/resources.php
M extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.css
M extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.js
M extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
A extensions/Wikibase/repo/tests/qunit/jquery.ui/jquery.ui.closeable.tests.js
M extensions/Wikibase/repo/tests/qunit/resources.php
M vendor/autoload.php
M vendor/composer/ClassLoader.php
M vendor/composer/autoload_real.php
M vendor/composer/installed.json
35 files changed, 566 insertions(+), 127 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/13/179113/1

diff --git a/WikibaseClient.settings.php b/WikibaseClient.settings.php
index e4816b6..dc48c4b 100644
--- a/WikibaseClient.settings.php
+++ b/WikibaseClient.settings.php
@@ -1,2 +1,2 @@
 <?php
-$wgWBClientSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1418210722";
\ No newline at end of file
+$wgWBClientSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1418296101";
\ No newline at end of file
diff --git a/WikibaseRepo.settings.php b/WikibaseRepo.settings.php
index 6008a7e..33936fe 100644
--- a/WikibaseRepo.settings.php
+++ b/WikibaseRepo.settings.php
@@ -1,2 +1,2 @@
 <?php
-$wgWBRepoSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1418210722";
\ No newline at end of file
+$wgWBRepoSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1418296101";
\ No newline at end of file
diff --git a/composer.lock b/composer.lock
index 724c188..c9c0c84 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at 
http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file";,
         "This file is @generated automatically"
     ],
-    "hash": "111e40007b6379fcbdb42cccafd57475",
+    "hash": "54fdccac94fa525894d463c6c35d0ba3",
     "packages": [
         {
             "name": "composer/installers",
@@ -776,9 +776,7 @@
                 "psr-4": {
                     "PropertySuggester\\": "src/PropertySuggester/"
                 },
-                "files": [
-
-                ],
+                "files": [],
                 "classmap": [
                     "PropertySuggesterHooks.php",
                     "maintenance/UpdateTable.php"
@@ -1233,12 +1231,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "3a65287aaeb3bf6109c8e7ad557100b04f19c47a"
+                "reference": "f7d1d239ae01493e60f2d73a64a32ea6e5c9e95d"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3a65287aaeb3bf6109c8e7ad557100b04f19c47a";,
-                "reference": "3a65287aaeb3bf6109c8e7ad557100b04f19c47a",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/f7d1d239ae01493e60f2d73a64a32ea6e5c9e95d";,
+                "reference": "f7d1d239ae01493e60f2d73a64a32ea6e5c9e95d",
                 "shasum": ""
             },
             "require": {
@@ -1305,7 +1303,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2014-12-10 10:40:44"
+            "time": "2014-12-10 22:37:18"
         },
         {
             "name": "wikibase/wikimedia-badges",
@@ -1358,12 +1356,8 @@
             "time": "2014-11-25 18:25:26"
         }
     ],
-    "packages-dev": [
-
-    ],
-    "aliases": [
-
-    ],
+    "packages-dev": [],
+    "aliases": [],
     "minimum-stability": "stable",
     "stability-flags": {
         "wikibase/wikibase": 20,
@@ -1374,7 +1368,5 @@
     "platform": {
         "php": ">=5.3.0"
     },
-    "platform-dev": [
-
-    ]
+    "platform-dev": []
 }
diff --git 
a/extensions/Wikibase/client/includes/hooks/ParserAfterParseHookHandler.php 
b/extensions/Wikibase/client/includes/hooks/ParserAfterParseHookHandler.php
index c27bc49..526037d 100644
--- a/extensions/Wikibase/client/includes/hooks/ParserAfterParseHookHandler.php
+++ b/extensions/Wikibase/client/includes/hooks/ParserAfterParseHookHandler.php
@@ -79,6 +79,14 @@
                        return true;
                }
 
+               // Only run this once, for the article content and not 
interface stuff
+
+               // This check needs to be here as this method is being invoked 
a lot,
+               // thus calling self::newFromGlobalState would be quite heavy
+               if ( $parser->getOptions()->getInterfaceMessage() ) {
+                       return true;
+               }
+
                $handler = self::newFromGlobalState();
                return $handler->doParserAfterParse( $parser );
        }
@@ -121,13 +129,6 @@
                wfProfileIn( __METHOD__ );
 
                // @todo split up the multiple responsibilities here and in 
lang link handler
-
-               // only run this once, for the article content and not 
interface stuff
-               //FIXME: this also runs for messages in 
EditPage::showEditTools! Ugh!
-               if ( $parser->getOptions()->getInterfaceMessage() ) {
-                       wfProfileOut( __METHOD__ );
-                       return true;
-               }
 
                $parserOutput = $parser->getOutput();
                $useRepoLinks = $this->langLinkHandler->useRepoLinks( $title, 
$parserOutput );
diff --git 
a/extensions/Wikibase/lib/resources/jquery.wikibase-shared/jquery.wikibase.wbtooltip.js
 
b/extensions/Wikibase/lib/resources/jquery.wikibase-shared/jquery.wikibase.wbtooltip.js
index b51474e..dc1b0f7 100644
--- 
a/extensions/Wikibase/lib/resources/jquery.wikibase-shared/jquery.wikibase.wbtooltip.js
+++ 
b/extensions/Wikibase/lib/resources/jquery.wikibase-shared/jquery.wikibase.wbtooltip.js
@@ -2,7 +2,7 @@
  * @licence GNU GPL v2+
  * @author H. Snater < mediaw...@snater.com >
  */
-( function( mw, $ ) {
+( function( mw, wb, $ ) {
 
 'use strict';
 
@@ -12,7 +12,7 @@
  * Tooltip widget enhancing jQuery.tipsy.
  * @since 0.4
  *
- * @option content {string|jQuery|wb.Error} The tooltip balloon's content.
+ * @option content {string|jQuery|Error} The tooltip balloon's content.
  *         (REQUIRED)
  *
  * @option permanent {boolean} Whether the tooltip shall be visible 
permanently (only closing with a
@@ -283,29 +283,8 @@
         * @TODO: Error tooltip should be a separate tooltip derivative.
         */
        _buildErrorTooltip: function() {
-               var $message = $( '<div/>' ).addClass( 'wb-error ' + 
this.widgetFullName + '-error' ),
-                       $mainMessage = $( '<div/>' ).text( 
this.options.content.message ).appendTo( $message );
-
-               // Append detailed error message if given; hide it behind 
toggle:
-               if( this.options.content.detailedMessage ) {
-                       $mainMessage.addClass( this.widgetFullName + 
'-error-top-message' );
-
-                       var $detailedMessage = $( '<div/>', {
-                               'class': this.widgetFullName + '-error-details',
-                               html: this.options.content.detailedMessage
-                       } )
-                       .hide();
-
-                       var $toggler = $( '<a/>' )
-                               .addClass( this.widgetFullName + 
'-error-details-link' )
-                               .text( mw.msg( 'wikibase-tooltip-error-details' 
) )
-                               .toggler( { $subject: $detailedMessage, 
duration: 'fast' } );
-
-                       $toggler.appendTo( $message );
-                       $detailedMessage.appendTo( $message );
-               }
-
-               return $message;
+               return wb.utilities.ui.buildErrorOutput( this.options.content )
+                       .addClass( this.widgetFullName + '-error' );
        },
 
        /**
@@ -321,4 +300,4 @@
 
 } );
 
-} )( mediaWiki, jQuery );
+} )( mediaWiki, wikibase, jQuery );
diff --git 
a/extensions/Wikibase/lib/resources/jquery.wikibase-shared/resources.php 
b/extensions/Wikibase/lib/resources/jquery.wikibase-shared/resources.php
index 3501eff..43be3b0 100644
--- a/extensions/Wikibase/lib/resources/jquery.wikibase-shared/resources.php
+++ b/extensions/Wikibase/lib/resources/jquery.wikibase-shared/resources.php
@@ -37,11 +37,8 @@
                        ),
                        'dependencies' => array(
                                'jquery.tipsy',
-                               'jquery.ui.toggler',
                                'jquery.ui.widget',
-                       ),
-                       'messages' => array(
-                               'wikibase-tooltip-error-details',
+                               'wikibase.utilities',
                        ),
                ),
 
diff --git 
a/extensions/Wikibase/lib/resources/jquery.wikibase-shared/themes/default/jquery.wikibase.wbtooltip.css
 
b/extensions/Wikibase/lib/resources/jquery.wikibase-shared/themes/default/jquery.wikibase.wbtooltip.css
index 429aef1..47bee02 100644
--- 
a/extensions/Wikibase/lib/resources/jquery.wikibase-shared/themes/default/jquery.wikibase.wbtooltip.css
+++ 
b/extensions/Wikibase/lib/resources/jquery.wikibase-shared/themes/default/jquery.wikibase.wbtooltip.css
@@ -33,19 +33,4 @@
        border-color: #B27631;
 }
 
-.wikibase-wbtooltip-tip .wikibase-wbtooltip-error-top-message {
-       border-bottom:1px dotted #B27631;
-       padding-bottom:1em;
-}
-
-.wikibase-wbtooltip-tip .wikibase-wbtooltip-error-details {
-       margin-top: .2em;
-       margin-bottom: .5em;
-       font-family: 'Courier New', Courier, 'Andale Mono', serif;
-       background-color: #FFF2E4;
-       padding: .2em;
-       border-radius: 5px;
-       font-size: .9em;
-}
-
 /***** /ERROR TOOLTIP *****/
diff --git 
a/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js
 
b/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js
index e5c9058..55ef3fb 100644
--- 
a/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js
+++ 
b/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js
@@ -43,6 +43,7 @@
                        '' // toolbar
                ],
                templateShortCuts: {
+                       '$headingSection': 
'.wikibase-sitelinkgroupview-heading-section',
                        '$headingContainer': 
'.wikibase-sitelinkgroupview-heading-container',
                        '$h': 'h2',
                        '$counter': '.wikibase-sitelinkgroupview-counter'
@@ -106,7 +107,8 @@
         * @see jQuery.ui.EditableTemplatedWidget.draw
         */
        draw: function() {
-               var deferred = $.Deferred();
+               var self = this,
+                       deferred = $.Deferred();
 
                this.element.data( 'group', this.options.value.group );
 
@@ -116,9 +118,20 @@
                .text( this.__headingText )
                .append( this.$counter );
 
-               if( !this.$headingContainer.data( 'sticknode' ) ) {
-                       this.$headingContainer.sticknode( {
+               if( !this.$headingSection.data( 'sticknode' ) ) {
+                       this.$headingSection.sticknode( {
                                $container: this.element
+                       } );
+               }
+
+               if( !this._$notification ) {
+                       this.notification()
+                       .appendTo( this.$headingSection )
+                       .on( 'closeableupdate.' + this.widgetName, function() {
+                               var sticknode = self.element.data( 'sticknode' 
);
+                               if( sticknode ) {
+                                       sticknode.refresh();
+                               }
                        } );
                }
 
@@ -251,6 +264,7 @@
                        function( event, dropValue ) {
                                self._afterStopEditing( dropValue );
                                self.$sitelinklistview.off( 
'.sitelinkgroupviewstopediting' );
+                               self.notification();
                                deferred.resolve();
                        }
                )
@@ -327,6 +341,30 @@
                }
 
                return response;
+       },
+
+       /**
+        * @see jQuery.ui.EditableTemplatedWidget.setError
+        */
+       setError: function( error ) {
+               if( error ) {
+                       var self = this;
+
+                       var $error = wb.utilities.ui.buildErrorOutput( error, {
+                               progress: function() {
+                                       self.$headingSection.data( 'sticknode' 
).refresh();
+                               }
+                       } );
+
+                       this.element.addClass( 'wb-error' );
+                       this.notification( $error, 'wb-error' );
+               } else {
+                       if( this.$notification && this.$notification.hasClass( 
'wb-error' ) ) {
+                               this.notification();
+                       }
+               }
+
+               PARENT.prototype.setError.call( this, error );
        }
 } );
 
diff --git 
a/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
 
b/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
index ede4ee2..34e1cb1 100644
--- 
a/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
+++ 
b/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
@@ -148,7 +148,6 @@
                } )
                .on( prefix + 'toggleerror.' + this.widgetName, function( 
event, error ) {
                        event.stopPropagation();
-                       self.setError( error );
                } )
                .on( 'keydown.' + this.widgetName, function( event ) {
                        if( event.keyCode === $.ui.keyCode.BACKSPACE ) {
diff --git a/extensions/Wikibase/lib/resources/jquery.wikibase/resources.php 
b/extensions/Wikibase/lib/resources/jquery.wikibase/resources.php
index be5fd06..65087cb 100644
--- a/extensions/Wikibase/lib/resources/jquery.wikibase/resources.php
+++ b/extensions/Wikibase/lib/resources/jquery.wikibase/resources.php
@@ -352,6 +352,7 @@
                                'jquery.wikibase.sitelinklistview',
                                'mediawiki.jqueryMsg', // for {{plural}} and 
{{gender}} support in messages
                                'wikibase.sites',
+                               'wikibase.utilities',
                        ),
                ),
 
diff --git 
a/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js
 
b/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js
index c455a0e..0602b8a 100644
--- 
a/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js
+++ 
b/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js
@@ -254,7 +254,10 @@
 
                                self.enable();
                                self.toggleActionMessage( function() {
-                                       self.displayError( error, $anchor );
+                                       // FIXME Move responsibility of 
displaying error out of here completely.
+                                       if( $( event.target ).data( 
'sitelinkgroupview' ) === undefined ) {
+                                               self.displayError( error, 
$anchor );
+                                       }
                                } );
                        }
                } );
diff --git a/extensions/Wikibase/lib/resources/wikibase.css 
b/extensions/Wikibase/lib/resources/wikibase.css
index 8b72521..b0aa623 100644
--- a/extensions/Wikibase/lib/resources/wikibase.css
+++ b/extensions/Wikibase/lib/resources/wikibase.css
@@ -50,6 +50,22 @@
        font-style: italic;
 }
 
+.ui-closeable {
+       background-color: #FFFFFF;
+       border-bottom: 1px solid #C9C9C9;
+       border-top: 1px solid #C9C9C9;
+       padding: 0.2em 10px;
+       font-size: 0.9em;
+}
+
+.ui-closeable.wb-edit {
+       background-color: #D6F3FF;
+}
+
+.ui-closeable.wb-error {
+       background-color: #FFDFC9;
+}
+
 
 /********** BASIC LAYOUT **********/
 
diff --git a/extensions/Wikibase/lib/tests/phpunit/EntityRevisionLookupTest.php 
b/extensions/Wikibase/lib/tests/phpunit/EntityRevisionLookupTest.php
index 08a1d0c..999872d 100644
--- a/extensions/Wikibase/lib/tests/phpunit/EntityRevisionLookupTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/EntityRevisionLookupTest.php
@@ -21,7 +21,7 @@
  * @licence GNU GPL v2+
  * @author Daniel Kinzler
  */
-abstract class EntityRevisionLookupTest extends \PHPUnit_Framework_TestCase {
+abstract class EntityRevisionLookupTest extends \MediaWikiTestCase {
 
        /**
         * @return EntityRevision[]
diff --git a/extensions/Wikibase/repo/i18n/ksh.json 
b/extensions/Wikibase/repo/i18n/ksh.json
index 05298b2..86fa11c 100644
--- a/extensions/Wikibase/repo/i18n/ksh.json
+++ b/extensions/Wikibase/repo/i18n/ksh.json
@@ -85,6 +85,7 @@
        "wikibase-item-summary-wbsetsitelink-add": "Hät ene Lengk obb_et [$2] 
derbeijedonn:",
        "wikibase-item-summary-wbsetsitelink-remove": "Hät ene Lengk obb_et 
[$2] erußjenumme:",
        "wikibase-item-summary-wblinktitles-connect": 
"{{PLURAL:$1|Sigg|Sigge|kein Sigge}} verbonge",
+       "wikibase-property-summary-wbcreateclaim-create": "Behouptong 
opjeschtalld.",
        "wikibase-property-summary-wbeditentity-create": "En neu Eijeschaff 
aanjelaat",
        "wikibase-property-summary-wbeditentity-update": "En Eijeschaff obb ene 
neue Schtand jebraat",
        "wikibase-property-summary-wbeditentity-override": "En Eijeschaff 
ußjetuusch",
diff --git a/extensions/Wikibase/repo/i18n/mk.json 
b/extensions/Wikibase/repo/i18n/mk.json
index 28b456b..81d4415 100644
--- a/extensions/Wikibase/repo/i18n/mk.json
+++ b/extensions/Wikibase/repo/i18n/mk.json
@@ -366,5 +366,27 @@
        "right-property-term": "Менување на условите за својствата (натписи, 
описи, алијаси)",
        "right-property-create": "Создавање на својства",
        "wikibase-entity-not-viewable-title": "Несовпаѓање во типот на 
содржината. Не можам да ја прикажам.",
-       "wikibase-entity-not-viewable": "Дадениот тип на содржина „$1“ не 
претставува Единица и затоа  Викибазата не може да го прикаже."
+       "wikibase-entity-not-viewable": "Дадениот тип на содржина „$1“ не 
претставува Единица и затоа  Викибазата не може да го прикаже.",
+       "apihelp-wbcreateclaim-description": "Создава тврдења во Викибазата.",
+       "apihelp-wbcreateclaim-param-entity": "Назнака на предметот на кој му 
го додавате тврдењето",
+       "apihelp-wbcreateclaim-param-property": "Назнака на својството на 
спојницата",
+       "apihelp-wbcreateclaim-param-value": "Вредност на спојницата при 
создавање на тврдење со спојница што има вердност",
+       "apihelp-wbcreateclaim-param-snaktype": "Типот на спојницата",
+       "apihelp-wbcreateclaim-example-1": "Создава тврдење за предметот Q42 на 
својството P9001 со спојница „без вредност“.",
+       "apihelp-wbcreateclaim-example-2": "Создава тврдење за предметот Q42 на 
својството P9002 со низна вредност „ениза“ (itsastring).",
+       "apihelp-wbcreateclaim-example-3": "Создава тврдење за предметот Q42 на 
својството P9003 со вредност на предметот Q1",
+       "apihelp-wbcreateclaim-example-4": "Создава тврдење за предметот Q42 со 
својство P9004 со координатна вредност на спојницата",
+       "apihelp-wbcreateredirect-description": "Создава пренасочувања на 
единици.",
+       "apihelp-wbcreateredirect-param-from": "Назнака на единицата што треба 
да се пренасочи",
+       "apihelp-wbcreateredirect-param-to": "Назнака на единицата кон која се 
пренасочува",
+       "apihelp-wbcreateredirect-param-bot": "Означи го уредувањево како 
бот\nОваа URL-ознака ќе се почитува само ако корисникот пирпаѓа на групата 
„бот“.",
+       "apihelp-wbcreateredirect-example-1": "Направи го Q11 да биде 
пренасочување кон Q12",
+       "apihelp-wbeditentity-description": "Создава единечна нова единица во 
Викибазата и ја менува со серијализирани информации.",
+       "apihelp-wbeditentity-param-id": "Назнаката на единицата, вклучувајќи 
ја претставката.\nКористете ги „id“ или „site“ заедно со „title“.",
+       "apihelp-wbeditentity-example-4": "Исчисти ги сите податоци од 
единицата со назнака Q42",
+       "apihelp-wbeditentity-example-5": "Исчисти ги сите податоци од 
единицата со назнака Q42 и задај натпис за mk",
+       "apihelp-wbmergeitems-example-1": "Ги спојува податоците од Q42 во 
Q222",
+       "apihelp-wbmergeitems-example-2": "Ги спојува податоците од Q555 во Q3",
+       "apihelp-wbmergeitems-example-3": "Ги спојува податоците од Q66 во Q99, 
занемарувајќи ги можните спротиставени натписи",
+       "apihelp-wbsetsitelink-example-5": "Додај ја викиврската „Wodór“ за 
полската страница кон предмет со врската за македонската страница „Водород“ со 
една значка што води кон истата страница со назнака „Q149“"
 }
diff --git a/extensions/Wikibase/repo/i18n/pl.json 
b/extensions/Wikibase/repo/i18n/pl.json
index d266b26..281d260 100644
--- a/extensions/Wikibase/repo/i18n/pl.json
+++ b/extensions/Wikibase/repo/i18n/pl.json
@@ -347,6 +347,7 @@
        "right-item-redirect": "Tworzenie przekierowań elementu",
        "right-property-term": "Zmiana określeń właściwości (etykiet, opisów, 
aliasów)",
        "right-property-create": "Tworzenie właściwości",
+       "apihelp-wbsetdescription-param-language": "Język opisu",
        "apihelp-wbsetlabel-param-language": "Język etykiety",
        "apihelp-wbsetlabel-param-value": "Wartość etykiety"
 }
diff --git a/extensions/Wikibase/repo/i18n/qqq.json 
b/extensions/Wikibase/repo/i18n/qqq.json
index 640fc04..89542b3 100644
--- a/extensions/Wikibase/repo/i18n/qqq.json
+++ b/extensions/Wikibase/repo/i18n/qqq.json
@@ -382,7 +382,7 @@
        "wikibase-item-summary-wbmergeitems-from": "Automatic edit summary when 
merging items. This summary is for the edit made to the item being merged 
TO.\n\nParameters:\n* $1 - (Unused)\n* $2 - (Unused)\n* $3 - the item id of the 
item being merged from",
        "wikibase-item-summary-wbmergeitems-to": "Automatic edit summary when 
merging items. This summary is for the edit made to the item being merged 
FROM.\n\nParameters:\n* $1 - (Unused)\n* $2 - (Unused)\n* $3 - the item id of 
the item being merged to",
        "wikibase-property-summary-wbcreate-new": "{{wikibase summary 
messages|item|Automatic edit summary generated when creating a new item. This 
is for backwards compatibility for edits already made and in the database with 
this message.}}",
-       "wikibase-property-summary-wbcreateclaim-create": "Automatic edit 
summary generated when creating a new claim.\n{{identical|Created claim}}",
+       "wikibase-property-summary-wbcreateclaim-create": "Automatic edit 
summary generated when creating a new 
[http://www.wikidata.org/wiki/Wikidata:Glossary/en#Claims_and_statements 
claim].\n{{identical|Created claim}}",
        "wikibase-property-summary-wbcreateclaim": "{{wikibase summary 
messages|property-claims|Automatic edit summary when a claim is created.}}",
        "wikibase-property-summary-wbsetclaimvalue": "{{wikibase summary 
messages|property-claims|Automatic edit summary when the main value of one or 
more claim is changed.}}\n\n{{related|Wikibase-property-summary-wbsetclaim}}",
        "wikibase-property-summary-wbsetreference": "{{wikibase summary 
messages|property|Automatic edit summary generated when creating a reference or 
setting the value of an existing one.}} 
{{identical|wikibase-item-summary-wbsetreference}}",
diff --git a/extensions/Wikibase/repo/i18n/uk.json 
b/extensions/Wikibase/repo/i18n/uk.json
index 0795d83..6c8e462 100644
--- a/extensions/Wikibase/repo/i18n/uk.json
+++ b/extensions/Wikibase/repo/i18n/uk.json
@@ -11,11 +11,15 @@
                        "Steve.rusyn",
                        "SteveR",
                        "Zolo",
-                       "Ата"
+                       "Ата",
+                       "Ypryima"
                ]
        },
        "wikibase-desc": "Сховище структурованих даних",
        "specialpages-group-wikibaserepo": "Сховище вікібази",
+       "wikibase-entity-item": "елемент",
+       "wikibase-entity-property": "властивість",
+       "wikibase-entity-query": "запит",
        "wikibase-edit": "редагувати",
        "wikibase-save": "зберегти",
        "wikibase-cancel": "скасувати",
@@ -30,14 +34,22 @@
        "wikibase-description-empty": "Жодного опису ще не визначено.",
        "wikibase-description-edit-placeholder": "введіть опис",
        "wikibase-description-edit-placeholder-language-aware": "введіть опис в 
$1",
+       "wikibase-diffview-reference": "джерело",
+       "wikibase-diffview-rank": "ранг",
+       "wikibase-diffview-rank-preferred": "Пріоритетний ранг",
+       "wikibase-diffview-rank-normal": "Звичайний ранг",
+       "wikibase-diffview-rank-deprecated": "Застарілий ранг",
+       "wikibase-diffview-qualifier": "кваліфікатор",
+       "wikibase-diffview-label": "позначка",
+       "wikibase-diffview-alias": "псевдоніми",
+       "wikibase-diffview-description": "опис",
+       "wikibase-diffview-link": "посилання",
        "wikibase-sitelink-site-edit-placeholder": "сайт",
        "wikibase-sitelink-page-edit-placeholder": "сторінка",
        "wikibase-alias-edit-placeholder": "введіть синонім",
        "wikibase-label-input-help-message": "Введіть мітку цієї сутності 
мовою: $1.",
        "wikibase-description-input-help-message": "Уведіть короткий опис цієї 
сутності такою мовою: $1.",
-       "wikibase-claims": "Твердження",
        "wikibase-statements": "Твердження",
-       "wikibase-attributes": "Атрибути",
        "wikibase-terms": "Іншими мовами",
        "wikibase-sitelinks-empty": "Жодна сторінка ще не зв'язана з цим 
елементом.",
        "wikibase-sitelinks-input-help-message": "Вкажіть посилання на 
сторінку, що відноситься до цього пункту.",
@@ -56,7 +68,6 @@
        "wikibase-undo-nocontent": "Неможливо завантажити вміст версії $2 
сторінки $1",
        "wikibase-propertyedittool-counter-pending-tooltip": "{{PLURAL:$1|Одне 
значення|$1 значення|$1 значень}} іще не збережено",
        "wikibase-propertyedittool-counter-entrieslabel": 
"{{PLURAL:$1|запис|записи|записів}}",
-       "wikibase-sitelinksedittool-full": "Посилання на сторінки вже 
встановлено для всіх відомих сайтів.",
        "wikibase-disambiguation-title": "Значення для «$1»",
        "wb-special-newitem-new-item-notification": "Новий елемент $1 створено. 
Вас перенаправлено на його сторінку. Назад до «$2».",
        "wikibase-aliases-label": "Додаткові назви:",
@@ -327,5 +338,15 @@
        "right-item-merge": "Об'єднати елементи",
        "right-item-redirect": "Створити елемент перенаправлення",
        "right-property-term": "Змінювати терміни властивостей (мітки, опису, 
псевдоніми)",
-       "right-property-create": "Створення властивостей"
+       "right-property-create": "Створення властивостей",
+       "apihelp-wbsetclaimvalue-param-snaktype": "Тип посилання.",
+       "apihelp-wbsetclaimvalue-example-1": "Встановлює позов з GUID 
Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F значення Q1",
+       "apihelp-wbsetdescription-param-baserevid": "Числовий ідентифікатор для 
перегляду базової модифікації.\nЦе використовується для виявлення конфліктів 
при збереженні.",
+       "apihelp-wbsetdescription-param-bot": "Залиште відгук редагувати як 
бот\nЦей URL прапор буде поважати, якщо користувач належить групі \"бот\".",
+       "apihelp-wbsetlabel-description": "Встановлює мітку для одного Wikibase 
особи.",
+       "apihelp-wbsetqualifier-param-snakhash": "Хеш snak змінити.\nПовинно 
бути передбачено тільки для існуючих класифікаторів",
+       "apihelp-wbsetreference-param-index": "Індекс в межах інструкції список 
посилань, куди рухатися посилання. Необов'язковим. Якщо не передбачено, 
існуючий посилання буде залишатися на місці, а нові посилання будуть 
додаватися.",
+       "apihelp-wbsetsitelink-param-id": "Ідентифікатор особи, включаючи 
префікс.\nВикористовувати 'id' або 'сайту' і 'title' разом.",
+       "apihelp-wbsetsitelink-param-baserevid": "Числовий ідентифікатор для 
перегляду базової модифікації.\nЦе використовується для виявлення конфліктів 
при збереженні.",
+       "apihelp-wbsetsitelink-example-4": "Видаляє німецький sitelink від 
елемента"
 }
diff --git a/extensions/Wikibase/repo/i18n/zh-hans.json 
b/extensions/Wikibase/repo/i18n/zh-hans.json
index b59a098..def10a4 100644
--- a/extensions/Wikibase/repo/i18n/zh-hans.json
+++ b/extensions/Wikibase/repo/i18n/zh-hans.json
@@ -395,11 +395,18 @@
        "apihelp-wbcreateclaim-description": "创建Wikibase声称。",
        "apihelp-wbcreateclaim-param-property": "snaks属性的ID",
        "apihelp-wbcreateclaim-param-snaktype": "snak类型",
+       "apihelp-wbcreateredirect-description": "创建实体重定向。",
        "apihelp-wbcreateredirect-example-1": "改变Q11为重定向至Q12",
        "apihelp-wbformatvalue-description": "格式数据值。",
+       "apihelp-wbformatvalue-example-1": "格式化简单字符串值。",
        "apihelp-wbgetclaims-description": "获取Wikibase声称。",
+       "apihelp-wbmergeitems-description": "合并重复项。",
        "apihelp-wbmergeitems-param-fromid": "要合并自的ID",
        "apihelp-wbmergeitems-param-toid": "要合并到的ID",
        "apihelp-wbparsevalue-description": "使用ValueParser的解析值。",
-       "apihelp-wbparsevalue-param-parser": "要使用的ValueParser的ID"
+       "apihelp-wbparsevalue-param-parser": "要使用的ValueParser的ID",
+       "apihelp-wbremoveclaims-description": "移除Wikibase声称。",
+       "apihelp-wbsetclaim-param-claim": "声称序列化",
+       "apihelp-wbsetlabel-param-language": "标签语言",
+       "apihelp-wbsetlabel-param-value": "标签值"
 }
diff --git a/extensions/Wikibase/repo/resources/Resources.php 
b/extensions/Wikibase/repo/resources/Resources.php
index 19d3ade..40f9c93 100644
--- a/extensions/Wikibase/repo/resources/Resources.php
+++ b/extensions/Wikibase/repo/resources/Resources.php
@@ -49,6 +49,18 @@
                        ),
                ),
 
+               'jquery.ui.closeable' => $moduleTemplate + array(
+                       'scripts' => array(
+                               'jquery.ui/jquery.ui.closeable.js',
+                       ),
+                       'styles' => array(
+                               'jquery.ui/jquery.ui.closeable.css',
+                       ),
+                       'dependencies' => array(
+                               'jquery.ui.TemplatedWidget',
+                       ),
+               ),
+
                'jquery.ui.tagadata' => $moduleTemplate + array(
                        'scripts' => array(
                                'jquery.ui/jquery.ui.tagadata.js',
@@ -69,9 +81,9 @@
                                
'jquery.ui/jquery.ui.EditableTemplatedWidget.js',
                        ),
                        'dependencies' => array(
+                               'jquery.ui.closeable',
                                'jquery.ui.TemplatedWidget',
                                'util.inherit',
-                               'wikibase.templates',
                        ),
                ),
 
diff --git 
a/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.EditableTemplatedWidget.js
 
b/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.EditableTemplatedWidget.js
index a994f12..39cf045 100644
--- 
a/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.EditableTemplatedWidget.js
+++ 
b/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.EditableTemplatedWidget.js
@@ -53,6 +53,7 @@
         * @see jQuery.ui.TemplatedWidget._create
         */
        _create: function() {
+               this.element.data( 'EditableTemplatedWidget', this );
                PARENT.prototype._create.call( this );
        },
 
@@ -251,6 +252,21 @@
         */
        removeError: function() {
                this.element.removeClass( 'wb-error' );
+       },
+
+       /**
+        * Sets or removes notification.
+        *
+        * @param {jQuery} [$content]
+        * @param {string} [additionalCssClasses]
+        * @return {jQuery|null}
+        */
+       notification: function( $content, additionalCssClasses ) {
+               if( !this._$notification ) {
+                       this._$notification = $( '<div/>' ).closeable();
+               }
+               this._$notification.data( 'closeable' ).setContent( $content, 
additionalCssClasses );
+               return this._$notification;
        }
 } );
 
diff --git 
a/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.css 
b/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.css
new file mode 100644
index 0000000..cf2fc93
--- /dev/null
+++ b/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.css
@@ -0,0 +1,9 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+
+.ui-closeable-close {
+       cursor: pointer;
+       float: right;
+}
diff --git 
a/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.js 
b/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.js
new file mode 100644
index 0000000..e852e2f
--- /dev/null
+++ b/extensions/Wikibase/repo/resources/jquery.ui/jquery.ui.closeable.js
@@ -0,0 +1,94 @@
+( function( $ ) {
+       'use strict';
+
+       var PARENT = $.ui.TemplatedWidget;
+
+/**
+ * Content container that can be closed/hidden.
+ * @class jQuery.ui.closeable
+ * @extends jQuery.ui.TemplatedWidget
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ *
+ * @constructor
+ *
+ * @param {Object} [options]
+ * @param {jQuery|null} [options.$content=null]
+ * @param {string} [options.cssClass='']
+ *        Single css class name or space-separated list of multiple class 
names.
+ */
+/**
+ * @event update
+ * Triggered whenever the widget's content is updated using the setContent() 
function.
+ * @param {jQuery.Event} event
+ */
+$.widget( 'ui.closeable', PARENT, {
+       /**
+        * @inheritdoc
+        */
+       options: {
+               template: 'ui-closeable',
+               templateParams: [
+                       '' // content
+               ],
+               templateShortCuts: {
+                       $content: '.ui-closeable-content',
+                       $close: '.ui-closeable-close'
+               },
+               $content: null,
+               cssClass: ''
+       },
+
+       /**
+        * @inheritdoc
+        */
+       _create: function() {
+               var self = this;
+
+               PARENT.prototype._create.call( this );
+
+               this.option( '$content', this.options.$content );
+               this.option( 'cssClass', this.options.cssClass );
+
+               this.$close.on( 'click.' + this.widgetName, function() {
+                       self.option( '$content', null );
+               } );
+       },
+
+       /**
+        * Updates the widget's content.
+        *
+        * @param {jQuery|null} [$content=null]
+        * @param {string|null} [cssClasses=null]
+        */
+       setContent: function( $content, cssClasses ) {
+               this.option( '$content', $content || null );
+               this.option( 'cssClass', cssClasses || null );
+               this._trigger( 'update' );
+       },
+
+       /**
+        * @inheritdoc
+        */
+       _setOption: function( key, value ) {
+               if( key === '$content' ) {
+                       this.$content.empty();
+
+                       if( !value ) {
+                               this.element.hide();
+                       } else {
+                               this.$content.append( value );
+                               this.element.show();
+                       }
+               } else if( key === 'cssClass' ) {
+                       value = value || '';
+                       this.element.removeClass( this.options.cssClass );
+                       this.element.addClass( value );
+               }
+
+               return PARENT.prototype._setOption.apply( this, arguments );
+       }
+} );
+
+
+}( jQuery ) );
diff --git a/extensions/Wikibase/repo/resources/jquery/jquery.sticknode.js 
b/extensions/Wikibase/repo/resources/jquery/jquery.sticknode.js
index 5265f4b..0256a2b 100644
--- a/extensions/Wikibase/repo/resources/jquery/jquery.sticknode.js
+++ b/extensions/Wikibase/repo/resources/jquery/jquery.sticknode.js
@@ -12,6 +12,11 @@
 /**
  * jQuery sticknode plugin.
  * Sticks a node with "position: fixed" when vertically scrolling it out of 
the viewport.
+ * Be aware that plugin does not handle dynamic height changes (e.g. if the 
node contains
+ * interactive elements that wipe out additional content). The code applying 
the widget needs to be
+ * aware of dynamic height changes. Consequently, whenever the height of the 
node the plugin is
+ * initialized on changes, a call to the refresh() function should be made to 
avoid undesired
+ * clipping.
  *
  * @param {Object} [options]
  *        - {jQuery} $container
@@ -92,6 +97,11 @@
        $node: null,
 
        /**
+        * @type {jQuery|null}
+        */
+       _$clone: null,
+
+       /**
         * @type {Object}
         */
        _options: null,
@@ -116,6 +126,11 @@
                        '.' + PLUGIN_NAME
                );
                this.$node.removeData( PLUGIN_NAME );
+
+               if( this._$clone ) {
+                       this._$clone.remove();
+                       this._$clone = null;
+               }
        },
 
        /**
@@ -176,6 +191,12 @@
                        width: this.$node.css( 'width' )
                };
 
+               // Cannot fix the clone instead of the original node since the 
clone does not feature event
+               // bindings.
+               this._$clone = this.$node.clone()
+                       .css( 'visibility', 'hidden' )
+                       .insertBefore( this.$node );
+
                this.$node
                .css( 'left', this._initialAttributes.offset.left + 'px' )
                .css( 'top', this.$node.outerHeight() - this.$node.outerHeight( 
true ) )
@@ -184,6 +205,15 @@
        },
 
        _unfix: function() {
+               if( !this.isFixed() ) {
+                       return;
+               }
+
+               if( this._$clone ) {
+                       this._$clone.remove();
+                       this._$clone = null;
+               }
+
                this.$node
                .css( 'left', this._initialAttributes.left )
                .css( 'top', this._initialAttributes.top )
@@ -210,10 +240,7 @@
         * @return {boolean}
         */
        update: function( scrollTop, force ) {
-               var changedState = false,
-                       $document = $( document ),
-                       initialDocumentHeight = $document.height(),
-                       newDocumentHeight;
+               var changedState = false;
 
                if( force && this.isFixed() ) {
                        this._unfix();
@@ -225,14 +252,6 @@
                        && !this._isScrolledAfterContainer()
                ) {
                        this._fix();
-
-                       newDocumentHeight = $document.height();
-                       if( newDocumentHeight < initialDocumentHeight ) {
-                               $window.scrollTop( scrollTop - ( 
initialDocumentHeight - newDocumentHeight ) );
-                               initialDocumentHeight = newDocumentHeight;
-                               this._changesDocumentHeight = true;
-                       }
-
                        changedState = true;
                }
 
@@ -241,17 +260,21 @@
                        || this._clipsContainer()
                ) {
                        this._unfix();
-
-                       newDocumentHeight = $document.height();
-                       if( newDocumentHeight > initialDocumentHeight ) {
-                               $window.scrollTop( scrollTop + ( 
newDocumentHeight - initialDocumentHeight ) );
-                               this._changesDocumentHeight = true;
-                       }
-
                        changedState = !changedState;
                }
 
                return changedState;
+       },
+
+       /**
+        * Re-fixes the node if it is fixed, properly updating scroll position. 
Should be called
+        * whenever the node's content has been updated.
+        */
+       refresh: function() {
+               if( this.isFixed() ) {
+                       this._unfix();
+                       this._fix();
+               }
        }
 } );
 
diff --git a/extensions/Wikibase/repo/resources/templates.php 
b/extensions/Wikibase/repo/resources/templates.php
index 7ef1fba..a945fdb 100644
--- a/extensions/Wikibase/repo/resources/templates.php
+++ b/extensions/Wikibase/repo/resources/templates.php
@@ -248,9 +248,11 @@
        $templates['wikibase-sitelinkgroupview'] =
 <<<HTML
 <div class="wikibase-sitelinkgroupview" data-wb-sitelinks-group="$5">
-       <div class="wikibase-sitelinkgroupview-heading-container">
-               <h2 class="wb-section-heading 
wikibase-sitelinkgroupview-heading" dir="auto" id="$1">$2<span 
class="wikibase-sitelinkgroupview-counter">$3</span></h2>
-               <!-- wikibase-toolbar -->$6
+       <div class="wikibase-sitelinkgroupview-heading-section">
+               <div class="wikibase-sitelinkgroupview-heading-container">
+                       <h2 class="wb-section-heading" dir="auto" 
id="$1">$2<span class="wikibase-sitelinkgroupview-counter">$3</span></h2>
+                       <!-- wikibase-toolbar -->$6
+               </div>
        </div>
        <!-- wikibase-sitelinklistview -->$4
 </div>
@@ -333,5 +335,13 @@
 [$1]
 HTML;
 
+       $templates['ui-closeable'] =
+<<<HTML
+<div class="ui-closeable">
+       <div class="ui-closeable-close">✕</div>
+       <div class="ui-closeable-content">$1</div>
+</div>
+HTML;
+
        return $templates;
 } );
diff --git a/extensions/Wikibase/repo/resources/utilities/resources.php 
b/extensions/Wikibase/repo/resources/utilities/resources.php
index dc18625..61d5663 100644
--- a/extensions/Wikibase/repo/resources/utilities/resources.php
+++ b/extensions/Wikibase/repo/resources/utilities/resources.php
@@ -46,6 +46,7 @@
                        'dependencies' => array(
                                'wikibase',
                                'jquery.tipsy',
+                               'jquery.ui.toggler',
                                'util.inherit',
                                'mediawiki.language',
                        ),
@@ -57,6 +58,7 @@
                                'wikibase-deletedentity-item',
                                'wikibase-deletedentity-property',
                                'wikibase-deletedentity-query',
+                               'wikibase-tooltip-error-details',
                                'word-separator',
                                'parentheses',
                        ),
diff --git 
a/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.css 
b/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.css
index 9a1ad26..d1d963c 100644
--- a/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.css
+++ b/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.css
@@ -62,3 +62,27 @@
 }
 
 /****** /PENDING-COUNTER ******/
+
+
+/***** ERROR OUTPUT *****/
+
+.wb-error .wb-error-message {
+       border-bottom: 1px dotted #B27631;
+       padding-bottom: .5em;
+}
+
+.wb-error .wb-error-details-link {
+       margin-top: .2em;
+}
+
+.wb-error .wb-error-details {
+       margin-top: .2em;
+       margin-bottom: .5em;
+       font-family: 'Courier New', Courier, 'Andale Mono', serif;
+       background-color: #FFF2E4;
+       padding: .2em;
+       border-radius: 5px;
+       font-size: .9em;
+}
+
+/***** /ERROR OUTPUT *****/
diff --git 
a/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.js 
b/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.js
index aed9964..c31ca2d 100644
--- a/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.js
+++ b/extensions/Wikibase/repo/resources/utilities/wikibase.utilities.ui.js
@@ -179,4 +179,40 @@
                return $msg;
        };
 
+       /**
+        * Generates standardized output for errors.
+        *
+        * @param {Error} error
+        * @param {Object} [animationOptions={ duration: 'fast' }] jQuery 
animation options.
+        * @return {jQuery}
+        */
+       wb.utilities.ui.buildErrorOutput = function( error, animationOptions ) {
+               var $message = $( '<div/>' ).addClass( 'wb-error' );
+
+               $message.append( $( '<div/>' ).addClass( 'wb-error-message' 
).text( error.message ) );
+
+               // Append detailed error message if given; hide it behind 
toggle:
+               if( error.detailedMessage ) {
+                       var $detailedMessage = $( '<div/>', {
+                               'class': 'wb-error-details',
+                               html: error.detailedMessage
+                       } )
+                       .hide();
+
+                       var $toggler = $( '<a/>' )
+                               .addClass( 'wb-error-details-link' )
+                               .text( mw.msg( 'wikibase-tooltip-error-details' 
) )
+                               .toggler( $.extend( {
+                                       $subject: $detailedMessage,
+                                       duration: 'fast'
+                               }, animationOptions || {} ) );
+
+                       $message
+                       .append( $toggler )
+                       .append( $detailedMessage );
+               }
+
+               return $message;
+       };
+
 }( mediaWiki, wikibase, jQuery ) );
diff --git a/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js 
b/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
index fbf55f0..2aa0f75 100644
--- a/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
+++ b/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
@@ -258,15 +258,37 @@
                }
 
                var $message = $( '<span><p>' + copyRightMessageHtml + 
'</p></span>' ),
-                       edittoolbar = $origin.data( 'edittoolbar' );
+                       $hideMessage = $( '<a/>', {
+                               text: mw.msg( 
'wikibase-copyrighttooltip-acknowledge' )
+                       } ).appendTo( $message ),
+                       editableTemplatedWidget = $origin.data( 
'EditableTemplatedWidget' );
+
+               // TODO: Use notification system for copyright messages on all 
widgets.
+               if( editableTemplatedWidget ) {
+                       editableTemplatedWidget.notification( $message, 
'wb-edit' );
+
+                       $hideMessage.on( 'click', function( event ) {
+                               event.preventDefault();
+                               editableTemplatedWidget.notification();
+                               if( mw.user.isAnon() ) {
+                                       $.cookie( cookieKey, copyRightVersion, 
{ 'expires': 365 * 3, 'path': '/' } );
+                               } else {
+                                       var api = new mw.Api();
+                                       api.postWithToken( 'options', {
+                                               'action': 'options',
+                                               'optionname': optionsKey,
+                                               'optionvalue': copyRightVersion
+                                       } );
+                               }
+                       } );
+                       return;
+               }
+
+               var edittoolbar = $origin.data( 'edittoolbar' );
 
                if( !edittoolbar ) {
                        return;
                }
-
-               var $hideMessage = $( '<a/>', {
-                       text: mw.msg( 'wikibase-copyrighttooltip-acknowledge' )
-               } ).appendTo( $message );
 
                // Tooltip gets its own anchor since other elements might have 
their own tooltip.
                // we don't even have to add this new toolbar element to the 
toolbar, we only use it
diff --git 
a/extensions/Wikibase/repo/tests/qunit/jquery.ui/jquery.ui.closeable.tests.js 
b/extensions/Wikibase/repo/tests/qunit/jquery.ui/jquery.ui.closeable.tests.js
new file mode 100644
index 0000000..91ff319
--- /dev/null
+++ 
b/extensions/Wikibase/repo/tests/qunit/jquery.ui/jquery.ui.closeable.tests.js
@@ -0,0 +1,117 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < mediaw...@snater.com >
+ */
+( function( $, QUnit ) {
+'use strict';
+
+/**
+ * @param {Object} [options]
+ * @return {jQuery}
+ */
+function createCloseable( options ) {
+       return $( '<div/>' )
+               .addClass( 'test_closeable' )
+               .closeable( options || {} );
+}
+
+QUnit.module( 'jquery.ui.tagadata', QUnit.newMwEnvironment( {
+       teardown: function() {
+               $( '.test_closeable' ).each( function() {
+                       var $closeable = $( this ),
+                               closeable = $( this ).data( 'closeable' );
+
+                       if( closeable ) {
+                               closeable.destroy();
+                       }
+
+                       $closeable.remove();
+               } );
+       }
+} ) );
+
+QUnit.test( 'Create & destroy', function( assert ) {
+       var $closeable = createCloseable(),
+               closeable = $closeable.data( 'closeable' );
+
+       assert.ok(
+               closeable instanceof $.ui.closeable,
+               'Initialized widget.'
+       );
+
+       closeable.destroy();
+
+       assert.ok(
+               $closeable.data( 'closeable' ) === undefined,
+               'Destroyed widget.'
+       );
+} );
+
+QUnit.test( 'Close when clicking "close" anchor', function( assert ) {
+       var $closeable = createCloseable( {
+                       $content: $( '<span>test</span>' )
+               } ),
+               closeable = $closeable.data( 'closeable' );
+
+       assert.ok(
+               $closeable.option( '$content' ) instanceof $,
+               'Instantiated widget with initial content.'
+       );
+
+       closeable.$close.trigger( 'click' );
+
+       assert.strictEqual(
+               $closeable.option( '$content' ),
+               null,
+               'Removed content after clicking "close" anchor.'
+       );
+} );
+
+QUnit.test( 'setContent()', 7, function( assert ) {
+       var $closeable = createCloseable(),
+               closeable = $closeable.data( 'closeable' ),
+               $content = $( '<span>test</span>' );
+
+       $closeable.on( 'closeableupdate', function() {
+               assert.ok(
+                       true,
+                       'Triggered "update" event.'
+               );
+       } );
+
+       assert.strictEqual(
+               closeable.option( '$content' ),
+               null,
+               'Instantiated empty widget.'
+       );
+
+       closeable.setContent( $content, 'cssClass' );
+
+       assert.equal(
+               closeable.option( '$content' ).get( 0 ),
+               $content.get( 0 ),
+               'Set content.'
+       );
+
+       assert.equal(
+               closeable.option( 'cssClass' ),
+               'cssClass',
+               'Set CSS class.'
+       );
+
+       closeable.setContent( $content, 'cssClass' );
+
+       assert.strictEqual(
+               closeable.option( '$content' ),
+               null,
+               'Removed content.'
+       );
+
+       assert.equal(
+               closeable.option( 'cssClass' ),
+               '',
+               'Removed CSS class.'
+       );
+} );
+
+}( jQuery, QUnit ) );
diff --git a/extensions/Wikibase/repo/tests/qunit/resources.php 
b/extensions/Wikibase/repo/tests/qunit/resources.php
index 903193c..9240cc8 100644
--- a/extensions/Wikibase/repo/tests/qunit/resources.php
+++ b/extensions/Wikibase/repo/tests/qunit/resources.php
@@ -44,6 +44,15 @@
                        ),
                ),
 
+               'jquery.ui.closeable.tests' => $moduleBase + array(
+                       'scripts' => array(
+                               'jquery.ui/jquery.ui.closeable.tests.js',
+                       ),
+                       'dependencies' => array(
+                               'jquery.ui.closeable',
+                       ),
+               ),
+
                'jquery.ui.tagadata.tests' => $moduleBase + array(
                        'scripts' => array(
                                'jquery.ui/jquery.ui.tagadata.tests.js',
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 6fe0f8b..b6e142e 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInite0e55127c70bef3d04fe8e6e1d95e445::getLoader();
+return ComposerAutoloaderInitce23031c8aa013cf5b57a39a61e7a721::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 4433649..70d78bc 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -56,7 +56,11 @@
 
     public function getPrefixes()
     {
-        return call_user_func_array('array_merge', $this->prefixesPsr0);
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
     }
 
     public function getPrefixesPsr4()
diff --git a/vendor/composer/autoload_real.php 
b/vendor/composer/autoload_real.php
index f538a9c..5b3cabc 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInite0e55127c70bef3d04fe8e6e1d95e445
+class ComposerAutoloaderInitce23031c8aa013cf5b57a39a61e7a721
 {
     private static $loader;
 
@@ -19,9 +19,9 @@
             return self::$loader;
         }
 
-        
spl_autoload_register(array('ComposerAutoloaderInite0e55127c70bef3d04fe8e6e1d95e445',
 'loadClassLoader'), true, true);
+        
spl_autoload_register(array('ComposerAutoloaderInitce23031c8aa013cf5b57a39a61e7a721',
 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        
spl_autoload_unregister(array('ComposerAutoloaderInite0e55127c70bef3d04fe8e6e1d95e445',
 'loadClassLoader'));
+        
spl_autoload_unregister(array('ComposerAutoloaderInitce23031c8aa013cf5b57a39a61e7a721',
 'loadClassLoader'));
 
         $map = require __DIR__ . '/autoload_namespaces.php';
         foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            composerRequiree0e55127c70bef3d04fe8e6e1d95e445($file);
+            composerRequirece23031c8aa013cf5b57a39a61e7a721($file);
         }
 
         return $loader;
     }
 }
 
-function composerRequiree0e55127c70bef3d04fe8e6e1d95e445($file)
+function composerRequirece23031c8aa013cf5b57a39a61e7a721($file)
 {
     require $file;
 }
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index dc0a73f..30257c9 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -123,9 +123,7 @@
             "psr-4": {
                 "PropertySuggester\\": "src/PropertySuggester/"
             },
-            "files": [
-
-            ],
+            "files": [],
             "classmap": [
                 "PropertySuggesterHooks.php",
                 "maintenance/UpdateTable.php"
@@ -1224,12 +1222,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "3a65287aaeb3bf6109c8e7ad557100b04f19c47a"
+            "reference": "f7d1d239ae01493e60f2d73a64a32ea6e5c9e95d"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3a65287aaeb3bf6109c8e7ad557100b04f19c47a";,
-            "reference": "3a65287aaeb3bf6109c8e7ad557100b04f19c47a",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/f7d1d239ae01493e60f2d73a64a32ea6e5c9e95d";,
+            "reference": "f7d1d239ae01493e60f2d73a64a32ea6e5c9e95d",
             "shasum": ""
         },
         "require": {
@@ -1257,7 +1255,7 @@
         "conflict": {
             "mediawiki/mediawiki": "<1.23"
         },
-        "time": "2014-12-10 10:40:44",
+        "time": "2014-12-10 22:37:18",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {

-- 
To view, visit https://gerrit.wikimedia.org/r/179113
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia0a938089b86f92c5242ef01f43e9d41c9830b29
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to