mediawiki/extensions/Wikibase (main)

sourcepatches
$ date
Mon Jun 14 10:11:52 UTC 2021

$ git clone file:///srv/git/mediawiki-extensions-Wikibase.git repo --depth=1 -b master
Cloning into 'repo'...

$ git config user.name libraryupgrader

$ git config user.email tools.libraryupgrader@tools.wmflabs.org

$ git submodule update --init
Submodule 'lib/resources/wikibase-api' (https://gerrit.wikimedia.org/r/wikibase/javascript-api) registered for path 'lib/resources/wikibase-api'
Submodule 'view/lib/wikibase-data-model' (https://phabricator.wikimedia.org/source/wikibase-data-model.git) registered for path 'view/lib/wikibase-data-model'
Submodule 'view/lib/wikibase-data-values' (https://phabricator.wikimedia.org/source/datavalues-javascript.git) registered for path 'view/lib/wikibase-data-values'
Submodule 'view/lib/wikibase-data-values-value-view' (https://gerrit.wikimedia.org/r/data-values/value-view) registered for path 'view/lib/wikibase-data-values-value-view'
Submodule 'view/lib/wikibase-serialization' (https://phabricator.wikimedia.org/source/wikibase-serialization.git) registered for path 'view/lib/wikibase-serialization'
Submodule 'view/lib/wikibase-termbox' (https://gerrit.wikimedia.org/r/wikibase/termbox) registered for path 'view/lib/wikibase-termbox'
Cloning into '/src/repo/lib/resources/wikibase-api'...
Cloning into '/src/repo/view/lib/wikibase-data-model'...
Cloning into '/src/repo/view/lib/wikibase-data-values-value-view'...
Cloning into '/src/repo/view/lib/wikibase-data-values'...
Cloning into '/src/repo/view/lib/wikibase-termbox'...
Cloning into '/src/repo/view/lib/wikibase-serialization'...
Submodule path 'lib/resources/wikibase-api': checked out '2bdd34cbe4c31cf67f0bf72d968c289209ff6cc8'
Submodule path 'view/lib/wikibase-data-model': checked out 'b284d2e8d204d86515ebadd9b3fbe1b26e786099'
Submodule path 'view/lib/wikibase-data-values': checked out '59086c58bdb1b95a1c653b9cc4b7c1ebf69f117c'
Submodule path 'view/lib/wikibase-data-values-value-view': checked out '34cd7f757f2581b2c4407e0c137924cb22dfe8a4'
Submodule path 'view/lib/wikibase-serialization': checked out '6b97c0fea57a217f95cea3f18cee80d9ce30f69d'
Submodule path 'view/lib/wikibase-termbox': checked out '054162075210e18553a5716a0905eca498fa9f0c'

$ grr init
Installed commit-msg hook.

$ git show-ref refs/heads/master
0866c9bdf2a705fb9d45e3bcc49d119684227852 refs/heads/master

$ composer install
Loading composer repositories with package information
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Updating dependencies (including require-dev)
Package operations: 57 installs, 0 updates, 0 removals
  - Installing composer/installers (v1.11.0): Loading from cache
  - Installing squizlabs/php_codesniffer (3.6.0): Loading from cache
  - Installing dealerdirect/phpcodesniffer-composer-installer (v0.7.1): Loading from cache
  - Installing wikimedia/assert (v0.5.0): Loading from cache
  - Installing diff/diff (3.2.0): Loading from cache
  - Installing data-values/data-values (3.0.0): Loading from cache
  - Installing wikibase/data-model (9.6.1): Loading from cache
  - Installing wikibase/data-model-services (5.4.0): Loading from cache
  - Installing wikimedia/purtle (v1.0.7): Loading from cache
  - Installing wikimedia/timestamp (v3.0.0): Loading from cache
  - Installing psr/simple-cache (1.0.1): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing composer/spdx-licenses (1.5.5): Loading from cache
  - Installing composer/semver (3.2.5): Loading from cache
  - Installing mediawiki/mediawiki-codesniffer (v36.0.0): Loading from cache
  - Installing symfony/polyfill-php80 (v1.23.0): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.23.0): Loading from cache
  - Installing symfony/polyfill-intl-normalizer (v1.23.0): Loading from cache
  - Installing symfony/polyfill-intl-grapheme (v1.23.0): Loading from cache
  - Installing symfony/polyfill-ctype (v1.23.0): Loading from cache
  - Installing symfony/string (v5.3.0): Loading from cache
  - Installing psr/container (1.1.1): Loading from cache
  - Installing symfony/service-contracts (v2.4.0): Loading from cache
  - Installing symfony/polyfill-php73 (v1.23.0): Loading from cache
  - Installing symfony/deprecation-contracts (v2.4.0): Loading from cache
  - Installing symfony/console (v5.3.0): Loading from cache
  - Installing psr/log (1.1.4): Loading from cache
  - Installing sabre/event (5.1.2): Loading from cache
  - Installing netresearch/jsonmapper (v3.1.1): Loading from cache
  - Installing microsoft/tolerant-php-parser (v0.0.23): Loading from cache
  - Installing phpdocumentor/reflection-common (2.2.0): Loading from cache
  - Installing webmozart/assert (1.10.0): Loading from cache
  - Installing phpdocumentor/type-resolver (1.4.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (5.2.2): Loading from cache
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Loading from cache
  - Installing composer/xdebug-handler (1.4.6): Loading from cache
  - Installing phan/phan (3.2.6): Loading from cache
  - Installing mediawiki/phan-taint-check-plugin (3.2.1): Loading from cache
  - Installing mediawiki/mediawiki-phan-config (0.10.6): Loading from cache
  - Installing mediawiki/minus-x (1.1.1): Loading from cache
  - Installing php-parallel-lint/php-console-color (v0.3): Loading from cache
  - Installing php-parallel-lint/php-console-highlighter (v0.5): Loading from cache
  - Installing php-parallel-lint/php-parallel-lint (v1.3.0): Loading from cache
  - Installing serialization/serialization (4.0.0): Loading from cache
  - Installing data-values/serialization (1.2.4): Loading from cache
  - Installing data-values/interfaces (1.0.0): Loading from cache
  - Installing data-values/common (1.0.0): Loading from cache
  - Installing data-values/time (1.0.3): Loading from cache
  - Installing data-values/geo (4.3.0): Loading from cache
  - Installing data-values/number (0.11.1): Loading from cache
  - Installing monolog/monolog (2.2.0): Loading from cache
  - Installing wikibase/data-model-serialization (2.9.1): Loading from cache
  - Installing wikibase/internal-serialization (2.10.0): Loading from cache
  - Installing wikimedia/at-ease (v2.1.0): Loading from cache
  - Installing onoi/message-reporter (1.4.2): Loading from cache
  - Installing phpstan/phpdoc-parser (0.4.9): Loading from cache
  - Installing slevomat/coding-standard (6.4.1): Loading from cache
symfony/service-contracts suggests installing symfony/service-implementation
symfony/console suggests installing symfony/event-dispatcher
symfony/console suggests installing symfony/lock
symfony/console suggests installing symfony/process
phan/phan suggests installing ext-ast (Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.8+ is recommended.)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing elasticsearch/elasticsearch (Allow sending log messages to an Elasticsearch server via official client)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongodb (Allow sending log messages to a MongoDB server (via driver))
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server (via library))
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
Writing lock file
Generating autoload files
19 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../slevomat/coding-standard

$ npm install
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported

> fibers@4.0.3 install /src/repo/node_modules/fibers
> node build.js || nodejs build.js

`linux-x64-64-glibc` exists; testing
Binary is fine; exiting

> Wikibase@0.1.0 postinstall /src/repo
> npm-run-all -p install:*


> Wikibase@0.1.0 install:tainted-ref /src/repo
> npm --prefix view/lib/wikibase-tainted-ref ci


> Wikibase@0.1.0 install:bridge /src/repo
> npm --prefix client/data-bridge ci


> core-js@3.6.5 postinstall /src/repo/client/data-bridge/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon: 
> https://opencollective.com/core-js 
> https://www.patreon.com/zloirock 

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> node-sass@4.14.1 install /src/repo/client/data-bridge/node_modules/node-sass
> node scripts/install.js

Cached binary found at /cache/_cacache/node-sass/4.14.1/linux-x64-64_binding.node

> node-sass@4.14.1 postinstall /src/repo/client/data-bridge/node_modules/node-sass
> node scripts/build.js

Binary found at /src/repo/client/data-bridge/node_modules/node-sass/vendor/linux-x64-64/binding.node
Testing binary
Binary is fine

> fibers@4.0.3 install /src/repo/client/data-bridge/node_modules/fibers
> node build.js || nodejs build.js

`linux-x64-64-glibc` exists; testing
Binary is fine; exiting

> core-js@3.10.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js@3.8.3 postinstall /src/repo/client/data-bridge/node_modules/@wdio/devtools-service/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js@2.6.12 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> fsevents@1.2.13 install /src/repo/client/data-bridge/node_modules/fsevents
> node install.js


Skipping 'fsevents' build as platform linux is not supported

> ejs@2.7.4 postinstall /src/repo/client/data-bridge/node_modules/ejs
> node ./postinstall.js


> highlight.js@9.18.5 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/highlight.js
> node deprecated.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

  Verion 9 of Highlight.js has reached EOL.  It will no longer
  be supported or receive security updates in the future.
  Please upgrade to version 10 or encourage your indirect
  dependencies to do so.

  For more info:
  
  https://github.com/highlightjs/highlight.js/issues/2877
  https://github.com/highlightjs/highlight.js/blob/master/VERSION_10_UPGRADE.md
 
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

> node-sass@4.14.1 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/node-sass
> node scripts/install.js


> core-js@2.6.11 postinstall /src/repo/client/data-bridge/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> deasync@0.1.20 install /src/repo/client/data-bridge/node_modules/deasync
> node ./build.js

Cached binary found at /cache/_cacache/node-sass/4.14.1/linux-x64-64_binding.node

> node-sass@4.14.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/node-sass
> node scripts/build.js

`linux-x64-node-10` exists; testing
Binary found at /src/repo/view/lib/wikibase-tainted-ref/node_modules/node-sass/vendor/linux-x64-64/binding.node
Testing binary
Binary is fine
Binary is fine; exiting

> fsevents@1.2.9 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/fsevents
> node install


> yorkie@2.0.0 install /src/repo/client/data-bridge/node_modules/yorkie
> node bin/install.js

setting up Git hooks
can't find .git directory, skipping Git hooks installation

> fibers@4.0.3 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/fibers
> node build.js || nodejs build.js

`linux-x64-64-glibc` exists; testing

> core-js-pure@3.9.1 postinstall /src/repo/client/data-bridge/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"

Binary is fine; exiting

> fibers_node_v8@3.1.5 preinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/fibers_node_v8
> node preinstall.js


> data-bridge@0.1.0 prepare /src/repo/client/data-bridge
> node build/wikimedia-ui-base.js


> fibers_node_v8@3.1.5 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/fibers_node_v8
> node build.js

ignore install
added 3864 packages in 82.235s

> ejs@3.1.3 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/@wdio/cli/node_modules/ejs
> node --harmony ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)


> ejs@2.7.4 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/ejs
> node ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)


> deasync@0.1.21 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/deasync
> node ./build.js

`linux-x64-node-10` exists; testing
Binary is fine; exiting

> yorkie@2.0.0 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/yorkie
> node bin/install.js

setting up Git hooks
can't find .git directory, skipping Git hooks installation

> core-js@3.10.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/@vue/babel-preset-app/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js-pure@3.10.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"


> tainted-ref@0.1.0 prepare /src/repo/view/lib/wikibase-tainted-ref
> node build/wikimedia-ui-base.js

added 4163 packages in 90.423s
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.1 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN wdio-wikibase@5.0.1 requires a peer of mwbot@^1.0.10 but none is installed. You must install peer dependencies yourself.
npm WARN eslint-plugin-vue@6.2.2 requires a peer of eslint@^5.0.0 || ^6.0.0 but none is installed. You must install peer dependencies yourself.

added 1374 packages from 860 contributors and audited 1377 packages in 906.376s

129 packages are looking for funding
  run `npm fund` for details

found 7 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

$ package-lock-lint package-lock.json
0 issues found in: package-lock.json

Upgrading n:eslint-config-wikimedia from 0.17.0 -> 0.20.0
Upgrading n:grunt from 1.3.0 -> 1.4.0
$ npm install

> core-js@3.14.0 postinstall /src/repo/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon: 
> https://opencollective.com/core-js 
> https://www.patreon.com/zloirock 

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> Wikibase@0.1.0 postinstall /src/repo
> npm-run-all -p install:*


> Wikibase@0.1.0 install:bridge /src/repo
> npm --prefix client/data-bridge ci


> Wikibase@0.1.0 install:tainted-ref /src/repo
> npm --prefix view/lib/wikibase-tainted-ref ci

npm WARN prepare removing existing node_modules/ before installation
npm WARN prepare removing existing node_modules/ before installation

> core-js@3.6.5 postinstall /src/repo/client/data-bridge/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon: 
> https://opencollective.com/core-js 
> https://www.patreon.com/zloirock 

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> node-sass@4.14.1 install /src/repo/client/data-bridge/node_modules/node-sass
> node scripts/install.js

Cached binary found at /cache/_cacache/node-sass/4.14.1/linux-x64-64_binding.node

> node-sass@4.14.1 postinstall /src/repo/client/data-bridge/node_modules/node-sass
> node scripts/build.js

Binary found at /src/repo/client/data-bridge/node_modules/node-sass/vendor/linux-x64-64/binding.node
Testing binary
Binary is fine

> fibers@4.0.3 install /src/repo/client/data-bridge/node_modules/fibers
> node build.js || nodejs build.js


> core-js@3.10.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

`linux-x64-64-glibc` exists; testing
Binary is fine; exiting

> core-js@3.8.3 postinstall /src/repo/client/data-bridge/node_modules/@wdio/devtools-service/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js@2.6.12 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> highlight.js@9.18.5 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/highlight.js
> node deprecated.js


> fsevents@1.2.13 install /src/repo/client/data-bridge/node_modules/fsevents
> node install.js

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

  Verion 9 of Highlight.js has reached EOL.  It will no longer
  be supported or receive security updates in the future.
  Please upgrade to version 10 or encourage your indirect
  dependencies to do so.

  For more info:
  
  https://github.com/highlightjs/highlight.js/issues/2877
  https://github.com/highlightjs/highlight.js/blob/master/VERSION_10_UPGRADE.md
 
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Skipping 'fsevents' build as platform linux is not supported

> ejs@2.7.4 postinstall /src/repo/client/data-bridge/node_modules/ejs
> node ./postinstall.js


> node-sass@4.14.1 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/node-sass
> node scripts/install.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)

Cached binary found at /cache/_cacache/node-sass/4.14.1/linux-x64-64_binding.node

> node-sass@4.14.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/node-sass
> node scripts/build.js


> core-js@2.6.11 postinstall /src/repo/client/data-bridge/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

Binary found at /src/repo/view/lib/wikibase-tainted-ref/node_modules/node-sass/vendor/linux-x64-64/binding.node
Testing binary

> deasync@0.1.20 install /src/repo/client/data-bridge/node_modules/deasync
> node ./build.js

Binary is fine

> fsevents@1.2.9 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/fsevents
> node install

`linux-x64-node-10` exists; testing

> fibers@4.0.3 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/fibers
> node build.js || nodejs build.js

Binary is fine; exiting
`linux-x64-64-glibc` exists; testing

> yorkie@2.0.0 install /src/repo/client/data-bridge/node_modules/yorkie
> node bin/install.js

Binary is fine; exiting

> fibers_node_v8@3.1.5 preinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/fibers_node_v8
> node preinstall.js

setting up Git hooks
can't find .git directory, skipping Git hooks installation

> fibers_node_v8@3.1.5 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/fibers_node_v8
> node build.js


> core-js-pure@3.9.1 postinstall /src/repo/client/data-bridge/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"

ignore install

> ejs@3.1.3 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/@wdio/cli/node_modules/ejs
> node --harmony ./postinstall.js


> data-bridge@0.1.0 prepare /src/repo/client/data-bridge
> node build/wikimedia-ui-base.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)


> ejs@2.7.4 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/ejs
> node ./postinstall.js

added 3864 packages in 217.813s
Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)


> deasync@0.1.21 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/deasync
> node ./build.js

`linux-x64-node-10` exists; testing
Binary is fine; exiting

> yorkie@2.0.0 install /src/repo/view/lib/wikibase-tainted-ref/node_modules/yorkie
> node bin/install.js

setting up Git hooks
can't find .git directory, skipping Git hooks installation

> core-js@3.10.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/@vue/babel-preset-app/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js-pure@3.10.1 postinstall /src/repo/view/lib/wikibase-tainted-ref/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"


> tainted-ref@0.1.0 prepare /src/repo/view/lib/wikibase-tainted-ref
> node build/wikimedia-ui-base.js

added 4163 packages in 224.354s
npm WARN notsup Unsupported engine for eslint-plugin-wdio@7.4.2: wanted: {"node":">=12.0.0"} (current: {"node":"10.24.0","npm":"6.14.5"})
npm WARN notsup Not compatible with your version of node/npm: eslint-plugin-wdio@7.4.2
npm WARN wdio-wikibase@5.0.1 requires a peer of mwbot@^1.0.10 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.2 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

added 13 packages from 18 contributors, removed 105 packages, updated 11 packages, moved 3 packages and audited 1285 packages in 461.943s

131 packages are looking for funding
  run `npm fund` for details

found 7 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

$ package-lock-lint package-lock.json
0 issues found in: package-lock.json

$ npm update eslint -depth 10

$ npm install grunt-eslint@23.0.0 --save-exact
npm WARN wdio-wikibase@5.0.1 requires a peer of mwbot@^1.0.10 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.2 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ grunt-eslint@23.0.0
updated 1 package and audited 1285 packages in 9.655s

132 packages are looking for funding
  run `npm fund` for details

found 7 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

$ package-lock-lint package-lock.json
0 issues found in: package-lock.json

$ ./node_modules/.bin/eslint repo/i18n/lki.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbaritem.js extension-client.json client/i18n/gor.json repo/i18n/api/fi.json view/tests/qunit/wikibase/view/testViewController.js view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js client/i18n/api/ca.json lib/i18n/shi.json lib/i18n/pap.json client/i18n/gl.json lib/i18n/lb.json lib/i18n/btm.json lib/i18n/lld.json view/resources/jquery/wikibase/jquery.wikibase.statementgroupview.js lib/i18n/sms.json client/i18n/api/cs.json lib/tests/phpunit/Units/testunits.json client/i18n/qqq.json client/i18n/api/fa.json client/i18n/diq.json repo/resources/experts/getStore.js lib/i18n/trv.json repo/i18n/api/is.json client/i18n/azb.json client/i18n/lrc.json repo/resources/wikibase.special/wikibase.special.languageLabelDescriptionAliases.js client/i18n/bn.json client/i18n/cdo.json client/i18n/be.json repo/i18n/api/roa-tara.json client/i18n/crh-cyrl.json client/i18n/ug-arab.json lib/i18n/id.json view/tests/qunit/jquery/jquery.util.EventSingletonManager.tests.js repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-de.json repo/resources/experts/Entity.js view/resources/wikibase/entityChangers/SiteLinkSetsChanger.js client/i18n/sd.json repo/i18n/api/ksh.json repo/i18n/kum.json client/i18n/ar.json view/tests/qunit/wikibase/wikibase.ValueViewBuilder.tests.js repo/i18n/pa.json client/i18n/bbc-latn.json client/i18n/dag.json repo/i18n/api/diq.json lib/i18n/pms.json view/tests/qunit/jquery/wikibase/snakview/snakview.tests.js lib/i18n/gu.json repo/i18n/krl.json client/i18n/eu.json repo/i18n/bho.json repo/i18n/api/sco.json repo/i18n/kbp.json repo/i18n/api/zh-hans.json repo/i18n/ace.json repo/i18n/jut.json client/resources/jquery.event.special.eachchange.js view/resources/wikibase/utilities/wikibase.utilities.ClaimGuidGenerator.js repo/i18n/kn.json lib/i18n/su.json view/tests/qunit/wikibase/wikibase.tests.js lib/i18n/sty.json repo/i18n/bg.json lib/i18n/bqi.json repo/tests/phpunit/data/rdf/entities/Q7_no_prefixed_ids.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.toolbarbutton.tests.js repo/i18n/shy-latn.json repo/i18n/fr.json repo/tests/phpunit/data/rdf/entities/Q9.json lib/i18n/sdc.json client/i18n/api/hu.json lib/i18n/mg.json repo/i18n/lag.json repo/i18n/mr.json lib/i18n/ceb.json client/i18n/bci.json repo/i18n/ml.json lib/i18n/szy.json client/i18n/bto.json repo/i18n/nn.json view/tests/qunit/wikibase/entityChangers/AliasesChanger.tests.js view/resources/jquery/wikibase/jquery.wikibase.itemview.js client/i18n/lv.json repo/i18n/zh-hans.json repo/tests/phpunit/data/api/setlabel-removed.json client/i18n/api/lv.json repo/i18n/pt.json view/tests/qunit/wikibase/utilities/ClaimGuidGenerator.tests.js repo/i18n/cjy-hant.json repo/i18n/war.json repo/i18n/he.json repo/i18n/nan.json repo/i18n/gn.json repo/i18n/brx.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.removetoolbar.js repo/i18n/ca.json client/i18n/ms-arab.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementlistview.tests.js repo/resources/wikibase.sites.js repo/sql/abstract/wb_property_info.json client/i18n/ga.json lib/i18n/yo.json lib/i18n/wo.json client/i18n/ee.json client/i18n/lzz.json client/i18n/hif-latn.json lib/i18n/pag.json repo/i18n/kw.json client/i18n/sah.json client/i18n/ta.json lib/i18n/ban.json lib/i18n/fi.json view/resources/wikibase/wikibase.getLanguageNameByCode.js repo/i18n/an.json lib/i18n/ann.json client/i18n/pt.json repo/i18n/jv.json view/resources/wikibase/store/store.CombiningEntityStore.js repo/i18n/de.json client/i18n/nys.json repo/i18n/gom-deva.json view/resources/wikibase/store/store.EntityStore.js repo/i18n/api/fr.json repo/i18n/api/uk.json repo/tests/phpunit/data/rdf/entities/Q8.json client/i18n/uz.json client/i18n/om.json client/i18n/anp.json client/i18n/an.json client/i18n/ang.json repo/i18n/ff.json view/resources/jquery/wikibase/jquery.wikibase.entityselector.js repo/i18n/bbc-latn.json client/i18n/smn.json build/dist-size/web/lib/main.js client/resources/wikibase.buildErrorOutput.js repo/i18n/bcl.json lib/i18n/cv.json repo/i18n/ilo.json lib/i18n/li.json repo/i18n/ta.json lib/i18n/bto.json repo/i18n/api/et.json lib/i18n/lmo.json view/tests/qunit/wikibase/entityChangers/StatementsChangerState.tests.js repo/i18n/api/es.json repo/i18n/ase.json repo/i18n/mni.json view/resources/wikibase/entityChangers/SiteLinksChanger.js client/i18n/ff.json repo/i18n/shi.json lib/i18n/kjp.json lib/i18n/din.json client/i18n/fr.json client/i18n/ady-cyrl.json client/i18n/hoc.json view/resources/wikibase/view/ViewController.js repo/i18n/la.json repo/i18n/gcf.json repo/i18n/api/tcy.json lib/i18n/fr.json client/i18n/roa-tara.json client/i18n/lmo.json lib/i18n/lki.json repo/i18n/ceb.json repo/i18n/bar.json client/i18n/ary.json client/i18n/zu.json client/i18n/cak.json client/i18n/api/scn.json client/i18n/grc.json client/resources/jquery.ui/jquery.ui.ooMenu.js repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-errorResponse.json client/i18n/ur.json lib/i18n/dsb.json view/resources/jquery/wikibase/jquery.wikibase.listview.js client/i18n/dar.json lib/i18n/sk.json client/i18n/api/de.json client/i18n/fon.json lib/i18n/co.json repo/i18n/api/ru.json client/resources/wikibase.client.action.edit.collapsibleFooter.js client/i18n/trv.json client/i18n/frp.json client/i18n/sty.json view/resources/jquery/wikibase/snakview/snakview.variations.Variation.js lib/i18n/shn.json lib/resources/wikibase.Site.js lib/i18n/vec.json client/i18n/tet.json view/resources/jquery/wikibase/jquery.wikibase.entityview.js client/i18n/api/pt-br.json lib/i18n/an.json client/i18n/xal.json client/i18n/mt.json repo/i18n/et.json client/i18n/pt-br.json lib/i18n/th.json repo/tests/selenium/specs/blocked.js repo/i18n/wuu.json view/resources/wikibase/utilities/wikibase.utilities.ui.js view/resources/jquery/jquery.util.getDirectionality.js lib/i18n/ar.json client/i18n/li.json lib/i18n/tt-cyrl.json client/i18n/sco.json client/i18n/kn.json client/i18n/pa.json lib/i18n/lt.json repo/tests/qunit/jquery.wikibase/jquery.wikibase.entitysearch.tests.js lib/i18n/zea.json lib/i18n/pfl.json repo/i18n/api/bg.json client/i18n/abs.json repo/tests/phpunit/data/api/editentity.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-q42-en.json repo/i18n/avk.json client/i18n/bo.json repo/tests/qunit/wikibase.EntityInitializer.tests.js client/i18n/ksh.json lib/i18n/qu.json repo/i18n/api/sr-el.json client/i18n/bho.json repo/i18n/kjp.json lib/i18n/it.json build/ci-scripts/composer.local.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entityselector.tests.js view/resources/wikibase/wikibase.ValueViewBuilder.js repo/tests/selenium/wdio.conf.js client/i18n/krc.json repo/i18n/vec.json lib/i18n/nb.json repo/i18n/got.json client/i18n/ksw.json repo/i18n/tr.json client/i18n/awa.json lib/i18n/br.json repo/i18n/wo.json repo/resources/dataTypes/wikibase.dataTypeStore.js repo/i18n/yi.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-en-de.json client/i18n/mai.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-unexpectedResponse.json client/i18n/csb.json repo/i18n/nah.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbar.js client/i18n/lkt.json repo/i18n/api/sv.json client/i18n/km.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.addtoolbar.tests.js client/i18n/es-formal.json repo/i18n/api/sq.json repo/i18n/cu.json lib/i18n/rm.json view/tests/qunit/wikibase/wikibase.WikibaseContentLanguages.tests.js repo/i18n/szy.json repo/i18n/api/scn.json client/i18n/gld.json lib/i18n/aeb-latn.json lib/i18n/sgs.json client/i18n/tly.json lib/i18n/hr.json client/i18n/nqo.json repo/i18n/pl.json view/resources/wikibase/entityIdFormatter/EntityIdPlainFormatter.js client/i18n/wo.json lib/i18n/hi.json client/i18n/api/be-tarask.json client/i18n/aeb-latn.json client/i18n/my.json client/i18n/jbo.json client/i18n/lag.json repo/i18n/ko.json lib/i18n/arq.json lib/i18n/my.json lib/i18n/mn.json repo/i18n/bdr.json client/i18n/wuu.json lib/i18n/nap.json repo/i18n/rej.json client/i18n/th.json repo/i18n/ang.json repo/i18n/ami.json client/i18n/wa.json repo/i18n/km.json client/i18n/olo.json client/i18n/tcy.json lib/i18n/tay.json lib/i18n/glk.json repo/tests/phpunit/data/rdf/entities/P2.json lib/i18n/se.json repo/i18n/ps.json client/i18n/kip.json repo/i18n/sdh.json client/resources/jquery.wikibase/jquery.wikibase.linkitem.js repo/i18n/api/nb.json lib/i18n/so.json client/i18n/sc.json repo/i18n/tyv.json client/i18n/hyw.json repo/i18n/gld.json lib/i18n/vep.json lib/i18n/sco.json repo/i18n/ka.json lib/i18n/he.json repo/i18n/nqo.json lib/i18n/sr-el.json view/resources/wikibase/view/namespace.js repo/i18n/cak.json client/i18n/kea.json lib/i18n/tl.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-filteredResult.json lib/i18n/hu.json repo/i18n/api/bn.json repo/i18n/api/zh-hant.json lib/i18n/kn.json repo/i18n/kea.json client/i18n/pap.json client/i18n/mad.json client/i18n/fy.json client/i18n/tay.json repo/i18n/api/ku-latn.json view/resources/wikibase/store/store.ApiEntityStore.js client/i18n/api/lki.json view/resources/wikibase/wikibase.RevisionStore.js lib/i18n/la.json client/i18n/ami.json client/resources/util.highlightSubstring.js client/i18n/mn.json repo/i18n/ro.json client/i18n/api/ast.json view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js package-lock.json repo/i18n/sms.json client/i18n/mo.json client/i18n/mui.json repo/i18n/ja.json client/i18n/nds-nl.json client/i18n/api/ta.json repo/i18n/api/da.json lib/i18n/kw.json client/i18n/api/en.json repo/tests/selenium/specs/item.js repo/i18n/sk.json lib/i18n/ka.json client/i18n/wls.json client/i18n/ps.json repo/i18n/api/tay.json client/i18n/sq.json repo/i18n/af.json client/i18n/lfn.json lib/i18n/frc.json lib/i18n/cy.json view/resources/jquery/jquery.sticknode.js repo/i18n/hy.json client/i18n/avk.json repo/resources/dataTypes/DataType.js view/tests/qunit/wikibase/view/ViewFactory.tests.js client/i18n/arz.json repo/i18n/wa.json client/i18n/sdc.json view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js repo/i18n/fi.json repo/i18n/xsy.json client/i18n/hrx.json repo/tests/phpunit/data/api/getentities.json client/i18n/zea.json view/resources/jquery/wikibase/jquery.wikibase.sitelinkview.js repo/i18n/so.json repo/tests/phpunit/data/api/setclaim.json lib/i18n/sr-ec.json lib/i18n/mad.json repo/i18n/bto.json repo/sql/abstract/wb_items_per_site.json repo/i18n/vo.json client/i18n/bs.json repo/i18n/api/lki.json build/federated-properties/files/composer.local.json client/i18n/api/tr.json view/resources/jquery/wikibase/jquery.wikibase.listview.ListItemAdapter.js repo/i18n/api/pt.json client/i18n/ca.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js view/resources/wikibase/entityIdFormatter/CachingEntityIdPlainFormatter.js repo/i18n/api/hu.json repo/i18n/gu.json repo/i18n/api/kk-cyrl.json repo/tests/phpunit/data/rdf/entities/Q1.json repo/i18n/hr.json client/i18n/ba.json client/i18n/lad.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-entityIdResponse.json repo/i18n/api/ka.json lib/i18n/xsy.json client/i18n/sr-el.json client/i18n/api/id.json lib/i18n/blc.json lib/i18n/is.json lib/i18n/war.json repo/i18n/kab.json lib/i18n/ang.json view/resources/jquery/wikibase/jquery.wikibase.siteselector.js repo/i18n/aeb-arab.json lib/i18n/nia.json lib/i18n/nan.json lib/i18n/bn.json client/i18n/fo.json repo/i18n/api/ast.json lib/i18n/gd.json repo/i18n/lij.json client/i18n/be-tarask.json lib/i18n/or.json client/i18n/api/th.json lib/i18n/sl.json client/i18n/api/zh-hant.json repo/i18n/api/ja.json client/i18n/bxr.json repo/i18n/ckb.json client/i18n/pwn.json repo/i18n/mnw.json client/i18n/cnr-latn.json lib/i18n/bg.json lib/i18n/mo.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.removetoolbar.tests.js repo/i18n/lt.json repo/sql/abstract/wb_changes_subscription.json view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js client/i18n/api/jv.json repo/i18n/ky.json client/i18n/la.json repo/i18n/kip.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.addtoolbar.js repo/i18n/ie.json repo/tests/phpunit/data/rdf/entities/Q3.json client/i18n/api/io.json client/i18n/rm.json extension-repo.json lib/i18n/en.json client/i18n/bpy.json lib/i18n/tr.json view/tests/qunit/jquery/jquery.util.getDirectionality.tests.js lib/i18n/sv.json view/tests/qunit/jquery/wikibase/jquery.wikibase.siteselector.tests.js lib/i18n/pl.json client/i18n/gu.json client/i18n/api/nb.json lib/i18n/kum.json lib/i18n/roa-tara.json client/i18n/bg.json build/dist-size/analyze/getHistoryForFile.js view/tests/qunit/jquery/jquery.removeClassByRegex.tests.js client/i18n/lij.json client/i18n/api/nap.json client/i18n/kum.json repo/i18n/kiu.json repo/i18n/api/hr.json client/i18n/shy-latn.json lib/i18n/liv.json repo/resources/wikibase.federatedPropertiesEditRequestFailureNotice.js view/tests/qunit/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.tests.js repo/i18n/bgn.json client/i18n/ka.json lib/i18n/mwl.json lib/i18n/ps.json repo/i18n/tet.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-oneResponse.json lib/i18n/be-tarask.json client/i18n/de-ch.json client/i18n/nan.json repo/i18n/bpy.json repo/i18n/vep.json client/i18n/myv.json repo/i18n/eml.json client/i18n/api/sq.json repo/i18n/id.json lib/i18n/kbp.json repo/i18n/ann.json client/i18n/api/nl.json client/i18n/gcf.json view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js view/resources/wikibase/entityChangers/namespace.js client/i18n/gaa.json lib/i18n/io.json client/i18n/zgh.json client/i18n/is.json client/i18n/sa.json build/dist-size/analyze/queries/getCommits.js client/i18n/btm.json lib/i18n/sah.json client/i18n/kjh.json lib/i18n/vro.json repo/i18n/api/id.json lib/i18n/ku-latn.json repo/i18n/ne.json view/tests/qunit/wikibase/store/store.CachingEntityStore.tests.js repo/i18n/eu.json repo/i18n/az.json client/i18n/kk-cyrl.json repo/i18n/zu.json view/tests/qunit/wikibase/entityChangers/EntityTermsChanger.tests.js lib/i18n/wuu.json repo/i18n/dty.json client/i18n/mk.json lib/i18n/ru.json repo/i18n/anp.json repo/i18n/api/pl.json client/i18n/zh-hk.json repo/i18n/lo.json client/i18n/kcg.json view/tests/qunit/getMockListItemAdapter.js client/i18n/sw.json lib/i18n/bci.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-en.json repo/i18n/api/en.json client/i18n/cs.json lib/i18n/os.json repo/i18n/zgh.json client/resources/wikibase.client.getMwApiForRepo.js lib/i18n/tt-latn.json client/i18n/vi.json lib/i18n/pam.json repo/resources/wikibase.getUserLanguages.js lib/packages/wikibase/changes/composer.json client/i18n/si.json client/resources/jquery.ui/jquery.ui.suggester.js tests/api-testing/LuaWikibaseIntegrationTest.js repo/i18n/om.json client/resources/util.inherit.js client/i18n/lt.json lib/i18n/fur.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-en.json lib/i18n/ml.json repo/i18n/zh-hk.json lib/i18n/mni.json repo/i18n/ha.json repo/i18n/ce.json repo/i18n/api/lv.json repo/i18n/ur.json client/i18n/api/sah.json view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js lib/tests/qunit/wikibase.Site.tests.js view/tests/qunit/jquery/wikibase/jquery.wikibase.statementgroupview.tests.js lib/i18n/lkt.json lib/i18n/smn.json view/tests/qunit/jquery/wikibase/jquery.wikibase.badgeselector.tests.js repo/i18n/ig.json repo/i18n/lez.json client/i18n/blc.json client/i18n/api/ru.json repo/i18n/mwl.json repo/resources/wikibase.PropertyDataTypeStore.js repo/i18n/api/cs.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-de.json lib/i18n/gcr.json repo/sql/abstract/wb_changes.json lib/i18n/nah.json view/tests/qunit/wikibase/wikibase.getLanguageNameByCode.tests.js repo/i18n/qqq.json lib/i18n/ace.json repo/i18n/bn.json view/resources/wikibase/view/ToolbarViewController.js repo/i18n/tly.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js view/resources/jquery/wikibase/snakview/snakview.variations.Value.js repo/i18n/sdc.json lib/i18n/gom-deva.json view/tests/qunit/wikibase/entityIdFormatter/testEntityIdHtmlFormatter.js client/i18n/gn.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-en-de.json lib/i18n/rej.json view/resources/wikibase/view/ViewFactoryFactory.js lib/i18n/uk.json client/i18n/zh-hant.json repo/i18n/en-ca.json client/i18n/api/pt.json lib/i18n/abs.json lib/i18n/krc.json lib/i18n/az.json client/i18n/pl.json repo/i18n/zh-hant.json lib/i18n/fa.json repo/tests/phpunit/data/rdf/entities/Q10.json client/i18n/pfl.json repo/i18n/cdo.json client/i18n/mzn.json repo/i18n/mzn.json client/i18n/ru.json repo/i18n/api/ca.json client/i18n/yi.json repo/i18n/mo.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.tests.js repo/i18n/sgs.json lib/i18n/qqq.json repo/i18n/ses.json repo/i18n/pam.json client/i18n/api/qqq.json repo/i18n/my.json repo/i18n/khw.json repo/i18n/bci.json view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js lib/i18n/ojb.json lib/i18n/ms.json repo/i18n/syl.json client/i18n/api/sco.json lib/i18n/lbe.json repo/i18n/it.json repo/tests/phpunit/data/rdf/entities/Q4.json repo/i18n/ru.json lib/i18n/rmc.json client/i18n/es.json repo/i18n/cop.json repo/i18n/dag.json repo/i18n/dv.json client/i18n/api/es.json client/i18n/bar.json client/i18n/nn.json repo/i18n/chr.json view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js client/i18n/min.json client/i18n/brx.json client/i18n/rmc.json repo/i18n/hak.json lib/i18n/pt-br.json client/i18n/ig.json repo/i18n/csb.json repo/i18n/sjd.json repo/resources/parsers/getStore.js lib/i18n/hrx.json repo/i18n/pag.json repo/i18n/hsb.json client/i18n/ase.json repo/sql/abstract/wb_id_counters.json client/i18n/tg-cyrl.json repo/i18n/lad.json lib/i18n/sdh.json client/i18n/da.json lib/i18n/si.json repo/i18n/br.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-multipleEntityIdResponse.json client/i18n/api/br.json client/i18n/yo.json client/i18n/alt.json client/i18n/rej.json client/i18n/udm.json lib/i18n/mai.json lib/i18n/oc.json repo/i18n/api/lt.json repo/i18n/rue.json lib/i18n/cnr-latn.json client/i18n/hi.json view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js client/i18n/lld.json view/tests/qunit/jquery/jquery.sticknode.tests.js repo/tests/selenium/specs/tainted-ref.js client/i18n/lo.json repo/sql/abstract/wb_changes_dispatch.json repo/i18n/api/br.json repo/i18n/api/nl.json lib/i18n/pt.json repo/i18n/sq.json repo/i18n/ga.json client/i18n/hy.json repo/i18n/pcd.json repo/tests/phpunit/data/api/setlabel.json repo/i18n/smn.json repo/i18n/api/qqq.json client/resources/wikibase.client.linkitem.init.js repo/tests/phpunit/data/rdf/entities/Q5.json lib/i18n/lez.json client/i18n/ti.json repo/i18n/nys.json lib/i18n/ig.json client/i18n/api/pl.json lib/i18n/avk.json client/resources/wikibase.sites.js view/resources/wikibase/entityChangers/AliasesChanger.js client/i18n/nso.json view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js repo/resources/wikibase.ui.entityViewInit.js repo/i18n/sd.json repo/i18n/mad.json repo/i18n/kcg.json client/i18n/szy.json lib/i18n/sc.json lib/i18n/wa.json repo/i18n/be-tarask.json view/tests/qunit/experts/wikibase.experts.modules.tests.js repo/i18n/atj.json repo/i18n/api/lb.json repo/resources/wikibase.WikibaseContentLanguages.js repo/i18n/frp.json repo/i18n/sc.json repo/resources/parsers/getApiBasedValueParserConstructor.js lib/i18n/ksw.json repo/i18n/nb.json repo/i18n/se.json client/i18n/mwl.json repo/i18n/cnr-latn.json client/i18n/api/roa-tara.json repo/i18n/ti.json client/i18n/api/gcr.json client/i18n/sv.json repo/i18n/liv.json client/i18n/api/et.json repo/i18n/osi.json package.json client/sql/abstract/entity_usage.json client/i18n/sl.json lib/i18n/mrh.json lib/i18n/en-gb.json lib/i18n/pnb.json client/i18n/ojb.json client/i18n/en.json repo/i18n/rm.json repo/i18n/fit.json client/i18n/api/uk.json repo/i18n/btm.json client/resources/jquery.wikibase/jquery.wikibase.siteselector.js lib/i18n/crh-latn.json repo/i18n/be.json repo/i18n/ug-arab.json repo/i18n/crh-cyrl.json repo/sql/abstractSchemaChanges/patch-wb_changes_dispatch-make-chd_seen-unsigned.json client/i18n/ms.json client/i18n/qu.json repo/tests/qunit/experts/Property.tests.js lib/i18n/tzm.json repo/i18n/lzz.json repo/i18n/bs.json view/resources/wikibase/wikibase.buildErrorOutput.js lib/i18n/sa.json client/i18n/khw.json repo/i18n/awa.json repo/resources/experts/Property.js lib/i18n/wls.json repo/i18n/luz.json lib/i18n/ti.json client/i18n/guc.json repo/i18n/frc.json client/resources/jquery.util.getscrollbarwidth.js client/i18n/os.json lib/i18n/hak.json repo/sql/abstract/term_store.json repo/i18n/diq.json client/i18n/oc.json client/i18n/sjd.json lib/i18n/ug-arab.json client/i18n/api/mk.json client/i18n/fi.json client/i18n/af.json lib/i18n/mui.json repo/i18n/sxu.json repo/i18n/api/he.json client/i18n/vep.json lib/i18n/ba.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-emptyResponse.json view/resources/wikibase/view/ReadModeViewFactory.js client/i18n/as.json repo/tests/qunit/index.js repo/i18n/te.json client/i18n/sat.json client/i18n/nds.json client/i18n/kw.json client/i18n/gsw.json client/i18n/dty.json repo/i18n/gsw.json lib/i18n/te.json lib/i18n/lzz.json lib/i18n/gld.json lib/i18n/ie.json client/i18n/te.json lib/i18n/as.json lib/i18n/cu.json view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js client/i18n/se.json client/i18n/mhr.json repo/i18n/fo.json repo/i18n/oc.json client/i18n/az.json lib/i18n/alt.json client/i18n/lez.json repo/resources/wikibase.entityPage.entityLoaded.js view/tests/qunit/jquery/wikibase/jquery.wikibase.wbtooltip.tests.js lib/i18n/lv.json view/resources/jquery/wikibase/jquery.wikibase.statementview.js repo/i18n/sr-ec.json repo/tests/phpunit/data/federatedProperties/query-siteinfo-namespaces-wikibase.json repo/i18n/pwn.json lib/i18n/pcd.json lib/i18n/frr.json repo/i18n/cy.json client/i18n/mr.json repo/i18n/api/ro.json client/i18n/cop.json repo/i18n/api/de.json lib/i18n/bbc-latn.json client/i18n/ext.json client/i18n/api/krc.json view/tests/qunit/jquery/ui/jquery.ui.tagadata.tests.js repo/i18n/glk.json client/i18n/id.json repo/i18n/ku-latn.json client/i18n/prs.json repo/i18n/nso.json client/i18n/ann.json client/i18n/tzm.json lib/i18n/fit.json repo/i18n/lmo.json repo/i18n/nap.json client/i18n/xh.json client/i18n/vo.json lib/i18n/hyw.json repo/i18n/skr-arab.json lib/i18n/ady-cyrl.json repo/i18n/api/pt-br.json client/i18n/ku-latn.json repo/i18n/fy.json lib/i18n/av.json client/i18n/bdr.json repo/i18n/mg.json client/i18n/de.json repo/i18n/lfn.json repo/tests/phpunit/data/federatedProperties/wbgetentities-property-datatype.json view/tests/qunit/wikibase/entityChangers/SiteLinksChanger.tests.js repo/resources/experts/__namespace.js repo/i18n/api/si.json repo/i18n/api/skr-arab.json repo/i18n/uz.json repo/i18n/hyw.json repo/i18n/si.json view/tests/qunit/jquery/wikibase/jquery.wikibase.labelview.tests.js view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js repo/i18n/api/ms.json client/i18n/pam.json repo/i18n/api/nap.json client/i18n/mg.json repo/i18n/api/sr-ec.json repo/i18n/eo.json client/i18n/ckb.json client/i18n/fit.json client/i18n/ht.json repo/i18n/lld.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgroupview.tests.js view/tests/qunit/wikibase/entityChangers/SiteLinkSetsChanger.tests.js repo/i18n/hil.json repo/tests/qunit/experts/Item.tests.js lib/i18n/rif.json repo/i18n/gl.json lib/i18n/nn.json repo/i18n/lzh.json client/i18n/api/lt.json client/i18n/api/vi.json client/i18n/sms.json lib/i18n/shy-latn.json lib/i18n/lrc.json repo/i18n/da.json repo/i18n/ban.json repo/i18n/api/pam.json lib/i18n/ca.json repo/i18n/api/sl.json client/i18n/av.json client/i18n/hak.json lib/i18n/gom-latn.json client/i18n/arq.json repo/i18n/inh.json repo/i18n/api/ar.json client/i18n/cu.json view/tests/qunit/jquery/wikibase/jquery.wikibase.descriptionview.tests.js view/resources/jquery/wikibase/snakview/snakview.variations.js repo/i18n/vi.json repo/i18n/xh.json repo/i18n/myv.json repo/i18n/api/gl.json client/i18n/atj.json client/i18n/kbp.json view/resources/wikibase/entityChangers/EntityTermsChanger.js lib/i18n/yi.json repo/i18n/sah.json client/i18n/api/ce.json repo/i18n/pt-br.json client/i18n/lzh.json repo/resources/formatters/ApiValueFormatter.js client/i18n/so.json repo/i18n/nl.json lib/i18n/lfn.json repo/i18n/th.json lib/i18n/nds.json view/tests/qunit/jquery/wikibase/jquery.wikibase.pagesuggester.tests.js repo/tests/phpunit/data/rdf/entities/Q7.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js lib/i18n/jut.json lib/i18n/ia.json client/i18n/api/yi.json client/i18n/ky.json view/resources/wikibase/view/ToolbarFactory.js lib/i18n/kcg.json repo/i18n/ms.json client/i18n/arn.json lib/i18n/es.json lib/i18n/ms-arab.json repo/i18n/api/ko.json lib/i18n/ary.json repo/resources/experts/Item.js client/i18n/krl.json repo/i18n/pnb.json repo/i18n/ia.json client/i18n/lbe.json client/i18n/et.json view/resources/jquery/jquery.util.EventSingletonManager.js lib/i18n/ckb.json view/resources/wikibase/entityIdFormatter/EntityIdHtmlFormatter.js client/i18n/szl.json repo/i18n/ba.json view/tests/qunit/jquery/wikibase/jquery.wikibase.itemview.tests.js view/resources/wikibase/entityChangers/DescriptionsChanger.js repo/i18n/mhr.json lib/i18n/vi.json lib/i18n/gl.json client/i18n/fur.json Gruntfile.js lib/i18n/sw.json repo/i18n/min.json repo/i18n/api/ug-arab.json client/i18n/api/lb.json view/tests/qunit/wikibase/view/ToolbarViewController.tests.js lib/i18n/myv.json lib/i18n/lij.json lib/i18n/sli.json lib/i18n/zh-hant.json client/i18n/inh.json repo/i18n/sr-el.json lib/i18n/mr.json repo/i18n/hu.json client/i18n/dv.json repo/tests/phpunit/data/rdf/entities/Q4_no_prefixed_ids.json repo/i18n/cs.json repo/i18n/kri.json client/i18n/pcd.json client/resources/wikibase.client.PageConnector.js view/resources/wikibase/utilities/wikibase.utilities.GuidGenerator.js view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbarbutton.js client/i18n/skr-arab.json client/i18n/kri.json repo/i18n/aeb-latn.json client/i18n/glk.json lib/i18n/el.json lib/i18n/gaa.json repo/i18n/lrc.json view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js view/resources/jquery/wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js repo/i18n/ady-cyrl.json lib/i18n/ast.json repo/i18n/api/it.json client/i18n/nia.json client/i18n/ln.json lib/i18n/dty.json client/i18n/tt-latn.json repo/i18n/xmf.json repo/i18n/api/tl.json lib/i18n/ff.json lib/i18n/pwn.json jsduck.json view/resources/jquery/wikibase/snakview/snakview.ViewState.js repo/i18n/co.json lib/i18n/sh.json repo/i18n/api/jv.json client/i18n/ja.json repo/i18n/api/my.json client/i18n/ml.json repo/i18n/su.json repo/i18n/api/tr.json view/tests/qunit/wikibase/entityChangers/StatementsChanger.tests.js repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-de.json repo/resources/wikibase.EntityInitializer.js repo/i18n/sl.json lib/i18n/tk.json client/i18n/co.json lib/i18n/bpy.json client/resources/jquery.wikibase/jquery.wikibase.wbtooltip.js repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-twoResponse.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.toolbar.tests.js repo/i18n/hrx.json client/i18n/pms.json repo/i18n/tt-cyrl.json repo/i18n/guc.json repo/i18n/uk.json lib/i18n/da.json repo/i18n/tcy.json client/i18n/war.json view/tests/qunit/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.tests.js client/i18n/vec.json repo/i18n/grc.json client/i18n/en-gb.json repo/i18n/vro.json lib/i18n/gor.json client/i18n/api/ml.json repo/i18n/mt.json client/i18n/sr-ec.json client/i18n/hu.json client/i18n/lki.json client/i18n/luz.json view/resources/wikibase/view/ControllerViewFactory.js client/i18n/jut.json client/i18n/nb.json client/i18n/tk.json client/i18n/liv.json repo/i18n/frr.json client/i18n/lb.json client/i18n/crh-latn.json repo/i18n/sv.json client/i18n/gcr.json client/i18n/mni.json lib/i18n/jam.json client/i18n/api/diq.json repo/i18n/nia.json repo/i18n/api/nn.json client/i18n/api/ko.json client/i18n/kiu.json lib/i18n/pa.json repo/i18n/qu.json lib/i18n/hy.json lib/i18n/guc.json client/i18n/or.json repo/i18n/gv.json repo/i18n/yo.json client/i18n/shi.json lib/i18n/eo.json client/i18n/ro.json repo/i18n/tl.json lib/i18n/dag.json repo/i18n/sw.json client/i18n/sk.json repo/i18n/alt.json client/i18n/ha.json lib/i18n/nqo.json client/i18n/api/fr.json client/i18n/sdh.json repo/i18n/ary.json lib/i18n/mzn.json repo/i18n/kjh.json client/i18n/scn.json client/i18n/io.json lib/i18n/lzh.json client/i18n/jv.json lib/i18n/de.json lib/i18n/eu.json view/tests/qunit/wikibase/view/ToolbarFactory.tests.js repo/i18n/hi.json repo/i18n/es.json repo/i18n/el.json client/i18n/hil.json lib/i18n/nds-nl.json client/i18n/fa.json view/resources/jquery/jquery.removeClassByRegex.js client/i18n/eml.json repo/i18n/ms-arab.json repo/tests/phpunit/data/federatedProperties/wbgetentities-p1-missing.json repo/resources/wikibase.federatedPropertiesLeavingSiteNotice.js repo/i18n/nds-nl.json repo/i18n/ext.json repo/i18n/tk.json lib/i18n/scn.json lib/i18n/be.json lib/i18n/ne.json view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tabsenabled.tests.js view/resources/wikibase/view/ViewFactory.js repo/i18n/xal.json repo/i18n/de-formal.json repo/tests/phpunit/data/federatedProperties/query-siteinfo-namespaces-wikidata.json lib/i18n/tly.json client/i18n/cy.json client/i18n/uk.json client/i18n/ilo.json repo/i18n/cv.json lib/i18n/bjn.json lib/i18n/diq.json repo/i18n/blc.json client/i18n/gom-deva.json lib/i18n/bcl.json repo/i18n/wls.json repo/i18n/api/hi.json client/i18n/rue.json repo/tests/phpunit/data/rdf/entities/Q6.json repo/tests/phpunit/data/rdf/entities/Q2.json repo/i18n/ar.json view/resources/jquery/wikibase/snakview/snakview.js lib/i18n/ksh.json lib/i18n/af.json client/i18n/api/gl.json client/i18n/kjp.json view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js client/i18n/he.json client/i18n/ace.json repo/i18n/api/mr.json repo/i18n/api/eo.json lib/i18n/nys.json client/i18n/qwh.json client/i18n/hr.json lib/i18n/om.json view/resources/wikibase/entityChangers/StatementsChangerState.js build/dist-size/analyze/index.js repo/i18n/mn.json repo/i18n/abs.json repo/i18n/api/th.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.tests.js repo/i18n/map-bms.json view/tests/qunit/wikibase/view/ViewFactoryFactory.tests.js repo/tests/selenium/specs/nonexisting.item.js view/resources/jquery/wikibase/snakview/snakview.SnakTypeSelector.js lib/i18n/khw.json lib/i18n/kab.json lib/i18n/crh-cyrl.json view/resources/wikibase/view/StructureEditorFactory.js lib/i18n/min.json repo/tests/phpunit/data/rdf/entities/Q6_no_prefixed_ids.json client/i18n/gom-latn.json client/i18n/yue.json repo/i18n/api/su.json repo/tests/qunit/dataTypes/DataTypeStore.tests.js repo/i18n/ln.json lib/i18n/cs.json lib/i18n/tg-cyrl.json client/i18n/api/sv.json repo/i18n/os.json lib/i18n/cop.json repo/i18n/gaa.json repo/i18n/bjn.json client/i18n/cv.json client/resources/wikibase.client.data-bridge.app.js repo/resources/dataTypes/DataTypeStore.js client/i18n/din.json repo/i18n/api/fa.json client/i18n/sgs.json repo/i18n/lbe.json view/tests/qunit/wikibase/utilities/GuidGenerator.tests.js view/resources/wikibase/templates.js repo/i18n/lkt.json lib/i18n/udm.json lib/i18n/szl.json client/i18n/api/it.json client/i18n/bcl.json client/i18n/sli.json lib/i18n/mk.json repo/i18n/api/te.json lib/i18n/krl.json client/i18n/syl.json client/i18n/sxu.json client/i18n/pag.json view/tests/qunit/wikibase/store/store.CombiningEntityStore.tests.js repo/i18n/mk.json view/tests/qunit/jquery/ui/jquery.ui.EditableTemplatedWidget.tests.js repo/i18n/or.json view/tests/qunit/jquery/wikibase/jquery.wikibase.snaklistview.tests.js repo/i18n/mui.json view/resources/wikibase/store/store.CachingEntityStore.js client/i18n/hsb.json repo/i18n/udm.json repo/i18n/api/mk.json lib/i18n/frp.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js lib/i18n/hil.json client/i18n/xsy.json client/i18n/tt-cyrl.json lib/i18n/ta.json lib/i18n/sd.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entityview.tests.js repo/i18n/ee.json client/i18n/ceb.json repo/i18n/pms.json lib/i18n/ses.json repo/i18n/arz.json client/i18n/nap.json repo/i18n/mdf.json lib/i18n/ja.json repo/i18n/bqi.json lib/i18n/csb.json repo/i18n/en.json repo/resources/jquery.wikibase/jquery.wikibase.entitysearch.js lib/i18n/jv.json lib/i18n/skr-arab.json repo/i18n/api/sw.json view/resources/wikibase/entityChangers/EntityChangersFactory.js repo/i18n/api/be-tarask.json client/i18n/ne.json lib/i18n/ce.json repo/i18n/shn.json client/i18n/kab.json client/i18n/frr.json repo/i18n/pap.json client/i18n/api/bn.json client/i18n/ia.json client/i18n/tr.json lib/i18n/fy.json repo/resources/formatters/ApiValueFormatterFactory.js repo/tests/phpunit/data/api/setreference.json client/i18n/api/he.json repo/i18n/api/yi.json client/i18n/el.json client/i18n/tl.json repo/i18n/gom-latn.json build/dist-size/analyze/queries/getSizes.js repo/i18n/gcr.json repo/i18n/gd.json view/resources/jquery/wikibase/jquery.wikibase.pagesuggester.js lib/i18n/yue.json lib/i18n/olo.json lib/i18n/mnc.json repo/i18n/api/ia.json repo/i18n/is.json view/resources/wikibase/entityChangers/LabelsChanger.js view/resources/wikibase/wikibase.ValueFormatterFactory.js repo/i18n/qwh.json repo/tests/phpunit/data/rdf/entities/Q9_no_prefixed_ids.json client/i18n/br.json repo/i18n/api/szy.json repo/resources/wikibase.special/wikibase.special.newEntity.js view/resources/jquery/wikibase/jquery.wikibase.wbtooltip.js repo/i18n/olo.json client/i18n/nl.json lib/i18n/km.json repo/i18n/roa-tara.json repo/i18n/krc.json repo/i18n/tg-cyrl.json lib/i18n/hsb.json lib/i18n/bgn.json client/i18n/ie.json client/i18n/it.json lib/i18n/zh-hans.json repo/i18n/lv.json client/i18n/xmf.json view/resources/jquery/wikibase/snakview/snakview.variations.SomeValue.js repo/i18n/sa.json view/tests/qunit/wikibase/templates.tests.js lib/i18n/gsw.json client/i18n/bjn.json repo/i18n/lb.json client/i18n/tyv.json repo/i18n/gor.json view/tests/qunit/jquery/ui/jquery.ui.closeable.tests.js client/i18n/api/ar.json client/i18n/vro.json lib/i18n/atj.json lib/i18n/inh.json client/i18n/pnb.json lib/i18n/vo.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.RankSelector.tests.js repo/i18n/av.json lib/i18n/cdo.json repo/i18n/szl.json lib/i18n/bho.json lib/i18n/uz.json lib/i18n/ht.json client/i18n/nah.json client/i18n/gd.json client/i18n/zh-hans.json client/i18n/eo.json client/i18n/mrh.json repo/i18n/ksh.json view/tests/qunit/wikibase/wikibase.getUserLanguages.tests.js repo/i18n/ht.json lib/i18n/sq.json lib/i18n/ky.json lib/i18n/mnw.json lib/i18n/nl.json view/resources/jquery/wikibase/jquery.wikibase.statementgrouplistview.js client/i18n/aeb-arab.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.tests.js client/i18n/dsb.json lib/i18n/zgh.json lib/i18n/mt.json view/resources/jquery/wikibase/jquery.wikibase.propertyview.js repo/i18n/api/eu.json lib/i18n/azb.json client/i18n/kl.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.toolbaritem.tests.js repo/i18n/tay.json repo/resources/wikibase.special/wikibase.special.mergeItems.js repo/i18n/api/oc.json repo/i18n/arc.json lib/i18n/got.json repo/i18n/mnc.json repo/i18n/sli.json repo/i18n/api/ps.json view/tests/qunit/jquery/wikibase/jquery.wikibase.propertyview.tests.js client/i18n/got.json lib/i18n/kk-cyrl.json repo/i18n/yue.json repo/i18n/dsb.json lib/i18n/brx.json lib/i18n/sat.json repo/tests/qunit/wikibase.PropertyDataTypeStore.tests.js lib/i18n/sjd.json repo/i18n/en-gb.json client/i18n/rif.json repo/i18n/scn.json client/i18n/frc.json repo/tests/qunit/dataTypes/DataType.tests.js repo/i18n/sco.json repo/i18n/azb.json repo/i18n/nds.json client/i18n/arc.json repo/i18n/li.json repo/i18n/fon.json client/i18n/api/zh-hans.json lib/i18n/ro.json view/resources/wikibase.js lib/i18n/anp.json repo/i18n/tt-latn.json client/i18n/ko.json repo/i18n/sat.json view/resources/jquery/wikibase/jquery.wikibase.referenceview.js client/i18n/ses.json lib/i18n/ga.json repo/i18n/hoc.json client/i18n/jam.json repo/i18n/arq.json client/i18n/api/ms.json repo/i18n/prs.json repo/i18n/rif.json client/i18n/mnc.json repo/i18n/sty.json view/resources/jquery/wikibase/snakview/snakview.variations.NoValue.js lib/i18n/arz.json repo/i18n/api/ceb.json repo/i18n/din.json view/resources/wikibase/entityChangers/StatementsChanger.js repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-en.json view/tests/qunit/jquery/wikibase/jquery.wikibase.listview.tests.js lib/i18n/qwh.json client/i18n/su.json client/i18n/sh.json view/tests/qunit/jquery/ui/jquery.ui.TemplatedWidget.tests.js lib/i18n/ur.json lib/i18n/tcy.json lib/i18n/fo.json repo/resources/wikibase.ui.entitysearch.js view/resources/jquery/wikibase/jquery.wikibase.labelview.js repo/i18n/mrh.json composer.json lib/i18n/et.json repo/i18n/ksw.json view/tests/qunit/wikibase/entityChangers/LabelsChanger.tests.js repo/tests/qunit/wikibase.sites.tests.js repo/i18n/fur.json repo/i18n/pfl.json view/resources/wikibase/entityIdFormatter/CachingEntityIdHtmlFormatter.js lib/i18n/ase.json repo/i18n/jam.json lib/i18n/hoc.json client/i18n/ast.json lib/i18n/ami.json view/resources/jquery/wikibase/jquery.wikibase.badgeselector.js repo/i18n/tzm.json repo/i18n/ast.json repo/i18n/mai.json client/i18n/ce.json lib/i18n/awa.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js repo/i18n/kk-cyrl.json lib/i18n/xmf.json repo/i18n/crh-latn.json lib/i18n/grc.json lib/i18n/ilo.json repo/i18n/sh.json lib/i18n/de-formal.json repo/i18n/ojb.json client/i18n/mnw.json repo/tests/selenium/specs/readmode.references.js view/tests/qunit/wikibase/entityChangers/DescriptionsChanger.tests.js client/i18n/api/az.json lib/i18n/bs.json client/i18n/bqi.json repo/i18n/hif-latn.json repo/i18n/api/ce.json repo/i18n/fa.json view/tests/phpunit/Termbox/data/resources.json repo/i18n/api/bcl.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-en-de.json repo/i18n/rmc.json repo/i18n/api/sa.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkview.tests.js client/i18n/shn.json repo/i18n/io.json view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js repo/i18n/as.json client/i18n/bgn.json client/i18n/ban.json lib/i18n/luz.json lib/i18n/ko.json repo/i18n/trv.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementgrouplistview.tests.js view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js --fix

/src/repo/build/dist-size/web/lib/main.js
  33:1  warning  This line has a length of 107. Maximum allowed is 100  max-len

/src/repo/client/resources/jquery.event.special.eachchange.js
   14:2   warning  Missing JSDoc @return declaration                                        jsdoc/require-returns
  168:49  warning  'eventData' is already declared in the upper scope on line 159 column 9  no-shadow

/src/repo/client/resources/jquery.ui/jquery.ui.ooMenu.js
   85:0  warning  Missing JSDoc @param "key" type    jsdoc/require-param-type
   86:0  warning  Missing JSDoc @param "value" type  jsdoc/require-param-type
  382:0  warning  Missing JSDoc @param "event" type  jsdoc/require-param-type
  540:0  warning  Missing JSDoc @param "menu" type   jsdoc/require-param-type

/src/repo/client/resources/jquery.ui/jquery.ui.suggester.js
  241:3  warning  Missing JSDoc @return declaration        jsdoc/require-returns
  242:0  warning  Missing JSDoc @param "key" type          jsdoc/require-param-type
  243:0  warning  Missing JSDoc @param "value" type        jsdoc/require-param-type
  526:3  warning  Found more than one @return declaration  jsdoc/require-returns
  526:3  warning  Found more than one @return declaration  jsdoc/require-returns-check
  644:3  warning  Found more than one @return declaration  jsdoc/require-returns
  644:3  warning  Found more than one @return declaration  jsdoc/require-returns-check
  665:3  warning  Found more than one @return declaration  jsdoc/require-returns
  665:3  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/client/resources/jquery.wikibase/jquery.wikibase.linkitem.js
   26:0  warning  Invalid JSDoc tag name "option"         jsdoc/check-tag-names
   28:0  warning  Invalid JSDoc tag name "option"         jsdoc/check-tag-names
   30:0  warning  Invalid JSDoc tag name "option"         jsdoc/check-tag-names
   32:0  warning  Invalid JSDoc tag name "option"         jsdoc/check-tag-names
   35:0  warning  Invalid JSDoc tag name "option"         jsdoc/check-tag-names
   37:0  warning  Invalid JSDoc tag name "option"         jsdoc/check-tag-names
   39:0  warning  Syntax error in namepath: dialogclose:  jsdoc/valid-types
   42:0  warning  Syntax error in namepath: success:      jsdoc/valid-types
   49:0  warning  Tag @type must have a type              jsdoc/valid-types
   56:0  warning  Tag @type must have a type              jsdoc/valid-types
   63:0  warning  Tag @type must have a type              jsdoc/valid-types
  537:0  warning  The type 'wb' is undefined              jsdoc/no-undefined-types

/src/repo/client/resources/jquery.wikibase/jquery.wikibase.siteselector.js
   17:0   warning  Invalid JSDoc tag name "option"                                      jsdoc/check-tag-names
   21:0   warning  Invalid JSDoc tag name "option"                                      jsdoc/check-tag-names
   54:35  warning  'event' is already declared in the upper scope on line 51 column 50  no-shadow
  135:3   warning  Missing JSDoc @return declaration                                    jsdoc/require-returns
  200:3   warning  Missing JSDoc @return declaration                                    jsdoc/require-returns
  211:3   warning  Missing JSDoc @return declaration                                    jsdoc/require-returns

/src/repo/client/resources/jquery.wikibase/jquery.wikibase.wbtooltip.js
   14:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   17:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   21:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   27:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   31:0  warning  Syntax error in namepath: afterhide:  jsdoc/valid-types
  164:3  warning  Missing JSDoc @return declaration     jsdoc/require-returns
  262:0  warning  Invalid JSDoc tag name "triggers"     jsdoc/check-tag-names
  283:0  warning  Invalid JSDoc tag name "TODO:"        jsdoc/check-tag-names
  291:3  warning  Missing JSDoc @return declaration     jsdoc/require-returns

/src/repo/client/resources/wikibase.client.PageConnector.js
  36:0  warning  Tag @type must have a type  jsdoc/valid-types
  41:0  warning  Tag @type must have a type  jsdoc/valid-types
  46:0  warning  Tag @type must have a type  jsdoc/valid-types
  51:0  warning  Tag @type must have a type  jsdoc/valid-types
  56:0  warning  Tag @type must have a type  jsdoc/valid-types

/src/repo/client/resources/wikibase.client.getMwApiForRepo.js
  9:0  warning  The type 'mediaWiki' is undefined  jsdoc/no-undefined-types

/src/repo/lib/resources/wikibase.Site.js
  67:0  warning  Invalid JSDoc tag name "note:"  jsdoc/check-tag-names

/src/repo/repo/resources/experts/getStore.js
  52:33  warning  'registeredExperts' is already declared in the upper scope on line 11 column 6  no-shadow

/src/repo/repo/resources/jquery.wikibase/jquery.wikibase.entitysearch.js
   15:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
   66:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
   84:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  122:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/repo/resources/wikibase.EntityInitializer.js
   20:0  warning  The type 'Thenable' is undefined           jsdoc/no-undefined-types
  115:0  warning  Missing JSDoc @param "configVarName" type  jsdoc/require-param-type

/src/repo/repo/resources/wikibase.PropertyDataTypeStore.js
   8:0  warning  The type 'EntityStore' is undefined  jsdoc/no-undefined-types
  28:0  warning  The type 'EntityStore' is undefined  jsdoc/no-undefined-types

/src/repo/repo/resources/wikibase.ui.entityViewInit.js
   40:0   warning  The type 'CachingEntityStore' is undefined                             jsdoc/no-undefined-types
   53:0   warning  The type 'datamodel' is undefined                                      jsdoc/no-undefined-types
  359:45  error    performance.mark() is not supported in Safari 9.1, iOS Safari 9.0-9.2  compat/compat

/src/repo/repo/resources/wikibase.ui.entitysearch.js
  21:21  warning  '$form' is already declared in the upper scope on line 12 column 7  no-shadow

/src/repo/repo/tests/qunit/wikibase.PropertyDataTypeStore.tests.js
  159:72  warning  'dataType' is already declared in the upper scope on line 156 column 71  no-shadow
  184:72  warning  'dataType' is already declared in the upper scope on line 181 column 71  no-shadow

/src/repo/repo/tests/qunit/wikibase.sites.tests.js
  12:0  warning  Tag @type must have a type  jsdoc/valid-types
  19:0  warning  Tag @type must have a type  jsdoc/valid-types

/src/repo/repo/tests/selenium/specs/blocked.js
  61:28  warning  Unexpected member expression in describe block. Member expressions may call functions via getters  mocha/no-setup-in-describe

/src/repo/repo/tests/selenium/specs/item.js
  13:1  warning  This line has a length of 103. Maximum allowed is 100  max-len
  48:1  warning  This line has a length of 113. Maximum allowed is 100  max-len

/src/repo/view/resources/jquery/jquery.sticknode.js
  274:23  warning  'stickyNode' is already declared in the upper scope on line 268 column 8  no-shadow
  288:23  warning  'stickyNode' is already declared in the upper scope on line 268 column 8  no-shadow

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js
   19:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  196:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  197:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.badgeselector.js
   22:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   26:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   31:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   33:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   37:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
  216:5  warning  '$menu' is already declared in the upper scope on line 15 column 6  no-shadow
  378:3  warning  Missing JSDoc @return declaration                                   jsdoc/require-returns
  419:3  warning  Missing JSDoc @return declaration                                   jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js
   16:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
   16:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   18:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
   95:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  175:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  195:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  196:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entityselector.js
  339:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  360:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  412:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
   17:0  warning  Invalid JSDoc tag name "option"      jsdoc/check-tag-names
   17:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types
   19:0  warning  Invalid JSDoc tag name "option"      jsdoc/check-tag-names
  237:3  warning  Missing JSDoc @return declaration    jsdoc/require-returns
  388:3  warning  Missing JSDoc @return declaration    jsdoc/require-returns
  451:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types
  452:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types
  496:3  warning  Missing JSDoc @return declaration    jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js
   15:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  177:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  187:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  216:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
   16:0  warning  Invalid JSDoc tag name "option"      jsdoc/check-tag-names
   16:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types
   18:0  warning  Invalid JSDoc tag name "option"      jsdoc/check-tag-names
   21:0  warning  Invalid JSDoc tag name "option"      jsdoc/check-tag-names
  369:3  warning  Missing JSDoc @return declaration    jsdoc/require-returns
  398:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types
  399:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.labelview.js
   18:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  209:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  210:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.listview.js
  288:3  warning  Found more than one @return declaration  jsdoc/require-returns
  288:3  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.pagesuggester.js
  11:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  13:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  65:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
   21:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  180:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  196:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  197:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  228:3  warning  Missing JSDoc @return declaration        jsdoc/require-returns
  246:3  warning  Missing JSDoc @return declaration        jsdoc/require-returns
  287:3  warning  Found more than one @return declaration  jsdoc/require-returns
  287:3  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js
   18:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   59:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  100:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  101:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  101:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  168:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js
   29:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
   30:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   30:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
   31:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
   33:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  112:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  173:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  192:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  194:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  221:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  222:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  248:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
   26:0   warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   29:0   warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   32:0   warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   34:0   warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   34:0   warning  The type 'EventSingletonManager' is undefined                       jsdoc/no-undefined-types
   38:0   warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   41:0   warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   64:0   warning  The type 'EventSingletonManager' is undefined                       jsdoc/no-undefined-types
   97:3   warning  Missing JSDoc @return declaration                                   jsdoc/require-returns
  312:23  warning  'self' is already declared in the upper scope on line 306 column 8  no-shadow
  360:3   warning  Missing JSDoc @return declaration                                   jsdoc/require-returns
  467:3   warning  Missing JSDoc @return declaration                                   jsdoc/require-returns
  483:3   warning  Found more than one @return declaration                             jsdoc/require-returns
  483:3   warning  Found more than one @return declaration                             jsdoc/require-returns-check

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinkview.js
   18:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   18:0  warning  The type 'datamodel' is undefined                                   jsdoc/no-undefined-types
   21:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
   25:0  warning  Invalid JSDoc tag name "option"                                     jsdoc/check-tag-names
  272:9  warning  'site' is already declared in the upper scope on line 213 column 9  no-shadow
  358:3  warning  Missing JSDoc @return declaration                                   jsdoc/require-returns
  400:0  warning  The type 'datamodel' is undefined                                   jsdoc/no-undefined-types
  401:0  warning  The type 'datamodel' is undefined                                   jsdoc/no-undefined-types
  437:3  warning  Missing JSDoc @return declaration                                   jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.siteselector.js
   14:0   warning  Invalid JSDoc tag name "option"                                      jsdoc/check-tag-names
   18:0   warning  Invalid JSDoc tag name "option"                                      jsdoc/check-tag-names
   51:35  warning  'event' is already declared in the upper scope on line 48 column 50  no-shadow
  132:3   warning  Missing JSDoc @return declaration                                    jsdoc/require-returns
  197:3   warning  Missing JSDoc @return declaration                                    jsdoc/require-returns
  208:3   warning  Missing JSDoc @return declaration                                    jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
   21:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  184:3  warning  Missing JSDoc @return declaration        jsdoc/require-returns
  213:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  214:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  234:3  warning  Found more than one @return declaration  jsdoc/require-returns
  234:3  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementgrouplistview.js
   22:0   warning  The type 'jquery' is undefined                                                      jsdoc/no-undefined-types
   23:0   warning  The type 'datamodel' is undefined                                                   jsdoc/no-undefined-types
   94:3   warning  Missing JSDoc @return declaration                                                   jsdoc/require-returns
  115:0   warning  The type 'datamodel' is undefined                                                   jsdoc/no-undefined-types
  116:0   warning  The type 'datamodel' is undefined                                                   jsdoc/no-undefined-types
  124:3   warning  Found more than one @return declaration                                             jsdoc/require-returns
  124:3   warning  Found more than one @return declaration                                             jsdoc/require-returns-check
  147:12  warning  '$statementgroupview' is already declared in the upper scope on line 141 column 23  no-shadow
  169:0   warning  The type 'datamodel' is undefined                                                   jsdoc/no-undefined-types

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementgroupview.js
   20:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  173:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  174:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  225:3  warning  Found more than one @return declaration  jsdoc/require-returns
  225:3  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js
   24:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  166:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  167:0  warning  The type 'datamodel' is undefined        jsdoc/no-undefined-types
  188:3  warning  Found more than one @return declaration  jsdoc/require-returns
  188:3  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js
  138:30  warning  'event' is already declared in the upper scope on line 121 column 48  no-shadow
  149:17  warning  'event' is already declared in the upper scope on line 121 column 48  no-shadow
  209:5   warning  '$menu' is already declared in the upper scope on line 13 column 6    no-shadow

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
   34:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  257:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  297:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  478:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  523:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  549:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  569:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  680:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/jquery.wikibase.wbtooltip.js
   14:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   17:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   21:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   27:0  warning  Invalid JSDoc tag name "option"       jsdoc/check-tag-names
   31:0  warning  Syntax error in namepath: afterhide:  jsdoc/valid-types
  164:3  warning  Missing JSDoc @return declaration     jsdoc/require-returns
  262:0  warning  Invalid JSDoc tag name "triggers"     jsdoc/check-tag-names
  283:0  warning  Invalid JSDoc tag name "TODO:"        jsdoc/check-tag-names
  290:3  warning  Missing JSDoc @return declaration     jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/snakview/snakview.SnakTypeSelector.js
  83:30  warning  'event' is already declared in the upper scope on line 66 column 43  no-shadow
  90:37  warning  'event' is already declared in the upper scope on line 66 column 43  no-shadow

/src/repo/view/resources/jquery/wikibase/snakview/snakview.js
   30:0  warning  The type 'datamodel' is undefined              jsdoc/no-undefined-types
   46:0  warning  The type 'PropertyDataTypeStore' is undefined  jsdoc/no-undefined-types
  108:0  warning  The type 'Variation' is undefined              jsdoc/no-undefined-types
  341:3  warning  Missing JSDoc @return declaration              jsdoc/require-returns
  415:0  warning  The type 'datamodel' is undefined              jsdoc/no-undefined-types
  416:0  warning  The type 'datamodel' is undefined              jsdoc/no-undefined-types
  468:0  warning  The type 'datamodel' is undefined              jsdoc/no-undefined-types
  469:0  warning  The type 'datamodel' is undefined              jsdoc/no-undefined-types
  555:0  warning  The type 'Variation' is undefined              jsdoc/no-undefined-types
  646:3  warning  Found more than one @return declaration        jsdoc/require-returns
  646:3  warning  Found more than one @return declaration        jsdoc/require-returns-check
  679:3  warning  Found more than one @return declaration        jsdoc/require-returns
  679:3  warning  Found more than one @return declaration        jsdoc/require-returns-check

/src/repo/view/resources/jquery/wikibase/snakview/snakview.variations.Variation.js
   18:0  warning  The type 'ViewState' is undefined              jsdoc/no-undefined-types
   24:0  warning  The type 'PropertyDataTypeStore' is undefined  jsdoc/no-undefined-types
   76:0  warning  The type 'datamodel' is undefined              jsdoc/no-undefined-types
   92:0  warning  The type 'PropertyDataTypeStore' is undefined  jsdoc/no-undefined-types
  102:0  warning  The type 'ViewState' is undefined              jsdoc/no-undefined-types
  142:0  warning  The type 'ViewState' is undefined              jsdoc/no-undefined-types

/src/repo/view/resources/jquery/wikibase/snakview/snakview.variations.js
  26:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  34:0  warning  The type 'Variation' is undefined  jsdoc/no-undefined-types
  86:0  warning  The type 'Variation' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.addtoolbar.js
  17:0  warning  Invalid JSDoc tag name "option"  jsdoc/check-tag-names
  20:0  warning  Invalid JSDoc tag name "option"  jsdoc/check-tag-names

/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js
   24:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
   26:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  407:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js
  17:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  20:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  23:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  26:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  29:0  warning  Syntax error in namepath: <custom  jsdoc/valid-types

/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbar.js
   18:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  122:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbarbutton.js
  17:0  warning  Invalid JSDoc tag name "option"    jsdoc/check-tag-names
  86:3  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/wikibase/entityChangers/AliasesChanger.js
   16:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   26:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   41:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   82:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   90:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   91:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  109:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  110:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityChangers/DescriptionsChanger.js
  14:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  24:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  39:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityChangers/EntityTermsChanger.js
   20:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   31:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   51:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
   52:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  125:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  125:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  126:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  126:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityChangers/LabelsChanger.js
  14:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  24:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  39:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityChangers/SiteLinkSetsChanger.js
  20:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  29:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  39:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  40:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityChangers/SiteLinksChanger.js
  13:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  23:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  38:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityChangers/StatementsChanger.js
   70:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  133:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types
  192:0  warning  The type 'datamodel' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityIdFormatter/CachingEntityIdHtmlFormatter.js
  7:0  warning  The type 'EntityIdHtmlFormatter' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/entityIdFormatter/CachingEntityIdPlainFormatter.js
  7:0  warning  The type 'EntityIdPlainFormatter' is undefined  jsdoc/no-undefined-types

/src/repo/view/resources/wikibase/store/store.ApiEntityStore.js
  45:4  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/wikibase/store/store.CachingEntityStore.js
  16:0  warning  The type 'EntityStore' is undefined  jsdoc/no-undefined-types
  32:0  warning  The type 'EntityStore' is undefined  jsdoc/no-undefined-types
  36:4  warning  Missing JSDoc @return declaration    jsdoc/require-returns

/src/repo/view/resources/wikibase/store/store.CombiningEntityStore.js
  10:2   warning  Missing JSDoc @return declaration                                       jsdoc/require-returns
  52:4   warning  Missing JSDoc @return declaration                                       jsdoc/require-returns
  57:24  warning  'entityId' is already declared in the upper scope on line 55 column 20  no-shadow

/src/repo/view/resources/wikibase/templates.js
   77:0   warning  The type 'mediaWiki' is undefined                                jsdoc/no-undefined-types
  229:61  warning  'i' is already declared in the upper scope on line 179 column 7  no-shadow

/src/repo/view/resources/wikibase/utilities/wikibase.utilities.GuidGenerator.js
  46:4  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/wikibase/view/ToolbarViewController.js
  161:2  warning  Missing JSDoc @return declaration  jsdoc/require-returns
  211:2  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/view/resources/wikibase/view/ViewFactory.js
   69:0   warning  The type 'PropertyDataTypeStore' is undefined                        jsdoc/no-undefined-types
  157:0   warning  The type 'PropertyDataTypeStore' is undefined                        jsdoc/no-undefined-types
  214:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  237:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  257:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  284:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  304:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  380:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  380:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  453:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  565:37  warning  '$dom' is already declared in the upper scope on line 552 column 92  no-shadow
  646:0   warning  The type 'datamodel' is undefined                                    jsdoc/no-undefined-types
  681:0   warning  The type 'ValueViewBuilder' is undefined                             jsdoc/no-undefined-types

/src/repo/view/tests/qunit/jquery/jquery.util.EventSingletonManager.tests.js
  22:15  warning  'event' is already declared in the upper scope on line 16 column 4  no-shadow
  49:25  warning  'event' is already declared in the upper scope on line 48 column 4  no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js
  139:24  warning  '$queue' is already declared in the upper scope on line 132 column 7  no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
  11:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js
  135:24  warning  '$queue' is already declared in the upper scope on line 128 column 7  no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js
  11:0  warning  The type 'Fingerprint' is undefined  jsdoc/no-undefined-types

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.listview.tests.js
  21:34  warning  'value' is already declared in the upper scope on line 15 column 27   no-shadow
  71:32  warning  'assert' is already declared in the upper scope on line 63 column 51  no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgroupview.tests.js
  193:24  warning  '$queue' is already declared in the upper scope on line 186 column 7  no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js
  241:24  warning  '$queue' is already declared in the upper scope on line 234 column 7  no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.siteselector.tests.js
   77:13  warning  'i' is already declared in the upper scope on line 66 column 12       no-shadow
   99:47  warning  'i' is already declared in the upper scope on line 66 column 12       no-shadow
  201:33  warning  '$queue' is already declared in the upper scope on line 194 column 7  no-shadow
  208:13  warning  'i' is already declared in the upper scope on line 66 column 12       no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.snaklistview.tests.js
   46:0   warning  The type 'datamodel' is undefined                                           jsdoc/no-undefined-types
   68:0   warning  The type 'datamodel' is undefined                                           jsdoc/no-undefined-types
  543:31  warning  'snaklistview' is already declared in the upper scope on line 535 column 4  no-shadow
  612:41  warning  'assert' is already declared in the upper scope on line 603 column 50       no-shadow
  612:49  warning  'snaklistview' is already declared in the upper scope on line 605 column 4  no-shadow

/src/repo/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
  55:30  warning  'options' is already declared in the upper scope on line 30 column 39  no-shadow

/src/repo/view/tests/qunit/wikibase/entityChangers/EntityTermsChanger.tests.js
   19:0   warning  The type 'createFingerprint' is undefined                                  jsdoc/no-undefined-types
  473:25  warning  'revisionId' is already declared in the upper scope on line 472 column 35  no-shadow
  550:0   warning  Missing JSDoc @param "revisionId" type                                     jsdoc/require-param-type

/src/repo/view/tests/qunit/wikibase/entityChangers/StatementsChanger.tests.js
  149:7  warning  'statementsChangerState' is already declared in the upper scope on line 14 column 6  no-shadow
  324:7  warning  'statementsChangerState' is already declared in the upper scope on line 14 column 6  no-shadow

/src/repo/view/tests/qunit/wikibase/store/store.CachingEntityStore.tests.js
  54:8   warning  'promise' is already declared in the upper scope on line 51 column 7  no-shadow
  56:36  warning  'entity' is already declared in the upper scope on line 53 column 35  no-shadow

/src/repo/view/tests/qunit/wikibase/templates.tests.js
  160:35  warning  'params' is already declared in the upper scope on line 27 column 7  no-shadow
  215:50  warning  'params' is already declared in the upper scope on line 27 column 7  no-shadow

/src/repo/view/tests/qunit/wikibase/wikibase.tests.js
  16:0  warning  Tag @type must have a type  jsdoc/valid-types

✖ 347 problems (1 error, 346 warnings)


$ ./node_modules/.bin/eslint repo/i18n/lki.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbaritem.js extension-client.json client/i18n/gor.json repo/i18n/api/fi.json view/tests/qunit/wikibase/view/testViewController.js view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js client/i18n/api/ca.json lib/i18n/shi.json lib/i18n/pap.json client/i18n/gl.json lib/i18n/lb.json lib/i18n/btm.json lib/i18n/lld.json view/resources/jquery/wikibase/jquery.wikibase.statementgroupview.js lib/i18n/sms.json client/i18n/api/cs.json lib/tests/phpunit/Units/testunits.json client/i18n/qqq.json client/i18n/api/fa.json client/i18n/diq.json repo/resources/experts/getStore.js lib/i18n/trv.json repo/i18n/api/is.json client/i18n/azb.json client/i18n/lrc.json repo/resources/wikibase.special/wikibase.special.languageLabelDescriptionAliases.js client/i18n/bn.json client/i18n/cdo.json client/i18n/be.json repo/i18n/api/roa-tara.json client/i18n/crh-cyrl.json client/i18n/ug-arab.json lib/i18n/id.json view/tests/qunit/jquery/jquery.util.EventSingletonManager.tests.js repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-de.json repo/resources/experts/Entity.js view/resources/wikibase/entityChangers/SiteLinkSetsChanger.js client/i18n/sd.json repo/i18n/api/ksh.json repo/i18n/kum.json client/i18n/ar.json view/tests/qunit/wikibase/wikibase.ValueViewBuilder.tests.js repo/i18n/pa.json client/i18n/bbc-latn.json client/i18n/dag.json repo/i18n/api/diq.json lib/i18n/pms.json view/tests/qunit/jquery/wikibase/snakview/snakview.tests.js lib/i18n/gu.json repo/i18n/krl.json client/i18n/eu.json repo/i18n/bho.json repo/i18n/api/sco.json repo/i18n/kbp.json repo/i18n/api/zh-hans.json repo/i18n/ace.json repo/i18n/jut.json client/resources/jquery.event.special.eachchange.js view/resources/wikibase/utilities/wikibase.utilities.ClaimGuidGenerator.js repo/i18n/kn.json lib/i18n/su.json view/tests/qunit/wikibase/wikibase.tests.js lib/i18n/sty.json repo/i18n/bg.json lib/i18n/bqi.json repo/tests/phpunit/data/rdf/entities/Q7_no_prefixed_ids.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.toolbarbutton.tests.js repo/i18n/shy-latn.json repo/i18n/fr.json repo/tests/phpunit/data/rdf/entities/Q9.json lib/i18n/sdc.json client/i18n/api/hu.json lib/i18n/mg.json repo/i18n/lag.json repo/i18n/mr.json lib/i18n/ceb.json client/i18n/bci.json repo/i18n/ml.json lib/i18n/szy.json client/i18n/bto.json repo/i18n/nn.json view/tests/qunit/wikibase/entityChangers/AliasesChanger.tests.js view/resources/jquery/wikibase/jquery.wikibase.itemview.js client/i18n/lv.json repo/i18n/zh-hans.json repo/tests/phpunit/data/api/setlabel-removed.json client/i18n/api/lv.json repo/i18n/pt.json view/tests/qunit/wikibase/utilities/ClaimGuidGenerator.tests.js repo/i18n/cjy-hant.json repo/i18n/war.json repo/i18n/he.json repo/i18n/nan.json repo/i18n/gn.json repo/i18n/brx.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.removetoolbar.js repo/i18n/ca.json client/i18n/ms-arab.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementlistview.tests.js repo/resources/wikibase.sites.js repo/sql/abstract/wb_property_info.json client/i18n/ga.json lib/i18n/yo.json lib/i18n/wo.json client/i18n/ee.json client/i18n/lzz.json client/i18n/hif-latn.json lib/i18n/pag.json repo/i18n/kw.json client/i18n/sah.json client/i18n/ta.json lib/i18n/ban.json lib/i18n/fi.json view/resources/wikibase/wikibase.getLanguageNameByCode.js repo/i18n/an.json lib/i18n/ann.json client/i18n/pt.json repo/i18n/jv.json view/resources/wikibase/store/store.CombiningEntityStore.js repo/i18n/de.json client/i18n/nys.json repo/i18n/gom-deva.json view/resources/wikibase/store/store.EntityStore.js repo/i18n/api/fr.json repo/i18n/api/uk.json repo/tests/phpunit/data/rdf/entities/Q8.json client/i18n/uz.json client/i18n/om.json client/i18n/anp.json client/i18n/an.json client/i18n/ang.json repo/i18n/ff.json view/resources/jquery/wikibase/jquery.wikibase.entityselector.js repo/i18n/bbc-latn.json client/i18n/smn.json build/dist-size/web/lib/main.js client/resources/wikibase.buildErrorOutput.js repo/i18n/bcl.json lib/i18n/cv.json repo/i18n/ilo.json lib/i18n/li.json repo/i18n/ta.json lib/i18n/bto.json repo/i18n/api/et.json lib/i18n/lmo.json view/tests/qunit/wikibase/entityChangers/StatementsChangerState.tests.js repo/i18n/api/es.json repo/i18n/ase.json repo/i18n/mni.json view/resources/wikibase/entityChangers/SiteLinksChanger.js client/i18n/ff.json repo/i18n/shi.json lib/i18n/kjp.json lib/i18n/din.json client/i18n/fr.json client/i18n/ady-cyrl.json client/i18n/hoc.json view/resources/wikibase/view/ViewController.js repo/i18n/la.json repo/i18n/gcf.json repo/i18n/api/tcy.json lib/i18n/fr.json client/i18n/roa-tara.json client/i18n/lmo.json lib/i18n/lki.json repo/i18n/ceb.json repo/i18n/bar.json client/i18n/ary.json client/i18n/zu.json client/i18n/cak.json client/i18n/api/scn.json client/i18n/grc.json client/resources/jquery.ui/jquery.ui.ooMenu.js repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-errorResponse.json client/i18n/ur.json lib/i18n/dsb.json view/resources/jquery/wikibase/jquery.wikibase.listview.js client/i18n/dar.json lib/i18n/sk.json client/i18n/api/de.json client/i18n/fon.json lib/i18n/co.json repo/i18n/api/ru.json client/resources/wikibase.client.action.edit.collapsibleFooter.js client/i18n/trv.json client/i18n/frp.json client/i18n/sty.json view/resources/jquery/wikibase/snakview/snakview.variations.Variation.js lib/i18n/shn.json lib/resources/wikibase.Site.js lib/i18n/vec.json client/i18n/tet.json view/resources/jquery/wikibase/jquery.wikibase.entityview.js client/i18n/api/pt-br.json lib/i18n/an.json client/i18n/xal.json client/i18n/mt.json repo/i18n/et.json client/i18n/pt-br.json lib/i18n/th.json repo/tests/selenium/specs/blocked.js repo/i18n/wuu.json view/resources/wikibase/utilities/wikibase.utilities.ui.js view/resources/jquery/jquery.util.getDirectionality.js lib/i18n/ar.json client/i18n/li.json lib/i18n/tt-cyrl.json client/i18n/sco.json client/i18n/kn.json client/i18n/pa.json lib/i18n/lt.json repo/tests/qunit/jquery.wikibase/jquery.wikibase.entitysearch.tests.js lib/i18n/zea.json lib/i18n/pfl.json repo/i18n/api/bg.json client/i18n/abs.json repo/tests/phpunit/data/api/editentity.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-q42-en.json repo/i18n/avk.json client/i18n/bo.json repo/tests/qunit/wikibase.EntityInitializer.tests.js client/i18n/ksh.json lib/i18n/qu.json repo/i18n/api/sr-el.json client/i18n/bho.json repo/i18n/kjp.json lib/i18n/it.json build/ci-scripts/composer.local.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entityselector.tests.js view/resources/wikibase/wikibase.ValueViewBuilder.js repo/tests/selenium/wdio.conf.js client/i18n/krc.json repo/i18n/vec.json lib/i18n/nb.json repo/i18n/got.json client/i18n/ksw.json repo/i18n/tr.json client/i18n/awa.json lib/i18n/br.json repo/i18n/wo.json repo/resources/dataTypes/wikibase.dataTypeStore.js repo/i18n/yi.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-en-de.json client/i18n/mai.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-unexpectedResponse.json client/i18n/csb.json repo/i18n/nah.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbar.js client/i18n/lkt.json repo/i18n/api/sv.json client/i18n/km.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.addtoolbar.tests.js client/i18n/es-formal.json repo/i18n/api/sq.json repo/i18n/cu.json lib/i18n/rm.json view/tests/qunit/wikibase/wikibase.WikibaseContentLanguages.tests.js repo/i18n/szy.json repo/i18n/api/scn.json client/i18n/gld.json lib/i18n/aeb-latn.json lib/i18n/sgs.json client/i18n/tly.json lib/i18n/hr.json client/i18n/nqo.json repo/i18n/pl.json view/resources/wikibase/entityIdFormatter/EntityIdPlainFormatter.js client/i18n/wo.json lib/i18n/hi.json client/i18n/api/be-tarask.json client/i18n/aeb-latn.json client/i18n/my.json client/i18n/jbo.json client/i18n/lag.json repo/i18n/ko.json lib/i18n/arq.json lib/i18n/my.json lib/i18n/mn.json repo/i18n/bdr.json client/i18n/wuu.json lib/i18n/nap.json repo/i18n/rej.json client/i18n/th.json repo/i18n/ang.json repo/i18n/ami.json client/i18n/wa.json repo/i18n/km.json client/i18n/olo.json client/i18n/tcy.json lib/i18n/tay.json lib/i18n/glk.json repo/tests/phpunit/data/rdf/entities/P2.json lib/i18n/se.json repo/i18n/ps.json client/i18n/kip.json repo/i18n/sdh.json client/resources/jquery.wikibase/jquery.wikibase.linkitem.js repo/i18n/api/nb.json lib/i18n/so.json client/i18n/sc.json repo/i18n/tyv.json client/i18n/hyw.json repo/i18n/gld.json lib/i18n/vep.json lib/i18n/sco.json repo/i18n/ka.json lib/i18n/he.json repo/i18n/nqo.json lib/i18n/sr-el.json view/resources/wikibase/view/namespace.js repo/i18n/cak.json client/i18n/kea.json lib/i18n/tl.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-filteredResult.json lib/i18n/hu.json repo/i18n/api/bn.json repo/i18n/api/zh-hant.json lib/i18n/kn.json repo/i18n/kea.json client/i18n/pap.json client/i18n/mad.json client/i18n/fy.json client/i18n/tay.json repo/i18n/api/ku-latn.json view/resources/wikibase/store/store.ApiEntityStore.js client/i18n/api/lki.json view/resources/wikibase/wikibase.RevisionStore.js lib/i18n/la.json client/i18n/ami.json client/resources/util.highlightSubstring.js client/i18n/mn.json repo/i18n/ro.json client/i18n/api/ast.json view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js package-lock.json repo/i18n/sms.json client/i18n/mo.json client/i18n/mui.json repo/i18n/ja.json client/i18n/nds-nl.json client/i18n/api/ta.json repo/i18n/api/da.json lib/i18n/kw.json client/i18n/api/en.json repo/tests/selenium/specs/item.js repo/i18n/sk.json lib/i18n/ka.json client/i18n/wls.json client/i18n/ps.json repo/i18n/api/tay.json client/i18n/sq.json repo/i18n/af.json client/i18n/lfn.json lib/i18n/frc.json lib/i18n/cy.json view/resources/jquery/jquery.sticknode.js repo/i18n/hy.json client/i18n/avk.json repo/resources/dataTypes/DataType.js view/tests/qunit/wikibase/view/ViewFactory.tests.js client/i18n/arz.json repo/i18n/wa.json client/i18n/sdc.json view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js repo/i18n/fi.json repo/i18n/xsy.json client/i18n/hrx.json repo/tests/phpunit/data/api/getentities.json client/i18n/zea.json view/resources/jquery/wikibase/jquery.wikibase.sitelinkview.js repo/i18n/so.json repo/tests/phpunit/data/api/setclaim.json lib/i18n/sr-ec.json lib/i18n/mad.json repo/i18n/bto.json repo/sql/abstract/wb_items_per_site.json repo/i18n/vo.json client/i18n/bs.json repo/i18n/api/lki.json build/federated-properties/files/composer.local.json client/i18n/api/tr.json view/resources/jquery/wikibase/jquery.wikibase.listview.ListItemAdapter.js repo/i18n/api/pt.json client/i18n/ca.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js view/resources/wikibase/entityIdFormatter/CachingEntityIdPlainFormatter.js repo/i18n/api/hu.json repo/i18n/gu.json repo/i18n/api/kk-cyrl.json repo/tests/phpunit/data/rdf/entities/Q1.json repo/i18n/hr.json client/i18n/ba.json client/i18n/lad.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-entityIdResponse.json repo/i18n/api/ka.json lib/i18n/xsy.json client/i18n/sr-el.json client/i18n/api/id.json lib/i18n/blc.json lib/i18n/is.json lib/i18n/war.json repo/i18n/kab.json lib/i18n/ang.json view/resources/jquery/wikibase/jquery.wikibase.siteselector.js repo/i18n/aeb-arab.json lib/i18n/nia.json lib/i18n/nan.json lib/i18n/bn.json client/i18n/fo.json repo/i18n/api/ast.json lib/i18n/gd.json repo/i18n/lij.json client/i18n/be-tarask.json lib/i18n/or.json client/i18n/api/th.json lib/i18n/sl.json client/i18n/api/zh-hant.json repo/i18n/api/ja.json client/i18n/bxr.json repo/i18n/ckb.json client/i18n/pwn.json repo/i18n/mnw.json client/i18n/cnr-latn.json lib/i18n/bg.json lib/i18n/mo.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.removetoolbar.tests.js repo/i18n/lt.json repo/sql/abstract/wb_changes_subscription.json view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js client/i18n/api/jv.json repo/i18n/ky.json client/i18n/la.json repo/i18n/kip.json view/resources/jquery/wikibase/toolbar/jquery.wikibase.addtoolbar.js repo/i18n/ie.json repo/tests/phpunit/data/rdf/entities/Q3.json client/i18n/api/io.json client/i18n/rm.json extension-repo.json lib/i18n/en.json client/i18n/bpy.json lib/i18n/tr.json view/tests/qunit/jquery/jquery.util.getDirectionality.tests.js lib/i18n/sv.json view/tests/qunit/jquery/wikibase/jquery.wikibase.siteselector.tests.js lib/i18n/pl.json client/i18n/gu.json client/i18n/api/nb.json lib/i18n/kum.json lib/i18n/roa-tara.json client/i18n/bg.json build/dist-size/analyze/getHistoryForFile.js view/tests/qunit/jquery/jquery.removeClassByRegex.tests.js client/i18n/lij.json client/i18n/api/nap.json client/i18n/kum.json repo/i18n/kiu.json repo/i18n/api/hr.json client/i18n/shy-latn.json lib/i18n/liv.json repo/resources/wikibase.federatedPropertiesEditRequestFailureNotice.js view/tests/qunit/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.tests.js repo/i18n/bgn.json client/i18n/ka.json lib/i18n/mwl.json lib/i18n/ps.json repo/i18n/tet.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-oneResponse.json lib/i18n/be-tarask.json client/i18n/de-ch.json client/i18n/nan.json repo/i18n/bpy.json repo/i18n/vep.json client/i18n/myv.json repo/i18n/eml.json client/i18n/api/sq.json repo/i18n/id.json lib/i18n/kbp.json repo/i18n/ann.json client/i18n/api/nl.json client/i18n/gcf.json view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js view/resources/wikibase/entityChangers/namespace.js client/i18n/gaa.json lib/i18n/io.json client/i18n/zgh.json client/i18n/is.json client/i18n/sa.json build/dist-size/analyze/queries/getCommits.js client/i18n/btm.json lib/i18n/sah.json client/i18n/kjh.json lib/i18n/vro.json repo/i18n/api/id.json lib/i18n/ku-latn.json repo/i18n/ne.json view/tests/qunit/wikibase/store/store.CachingEntityStore.tests.js repo/i18n/eu.json repo/i18n/az.json client/i18n/kk-cyrl.json repo/i18n/zu.json view/tests/qunit/wikibase/entityChangers/EntityTermsChanger.tests.js lib/i18n/wuu.json repo/i18n/dty.json client/i18n/mk.json lib/i18n/ru.json repo/i18n/anp.json repo/i18n/api/pl.json client/i18n/zh-hk.json repo/i18n/lo.json client/i18n/kcg.json view/tests/qunit/getMockListItemAdapter.js client/i18n/sw.json lib/i18n/bci.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-en.json repo/i18n/api/en.json client/i18n/cs.json lib/i18n/os.json repo/i18n/zgh.json client/resources/wikibase.client.getMwApiForRepo.js lib/i18n/tt-latn.json client/i18n/vi.json lib/i18n/pam.json repo/resources/wikibase.getUserLanguages.js lib/packages/wikibase/changes/composer.json client/i18n/si.json client/resources/jquery.ui/jquery.ui.suggester.js tests/api-testing/LuaWikibaseIntegrationTest.js repo/i18n/om.json client/resources/util.inherit.js client/i18n/lt.json lib/i18n/fur.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-en.json lib/i18n/ml.json repo/i18n/zh-hk.json lib/i18n/mni.json repo/i18n/ha.json repo/i18n/ce.json repo/i18n/api/lv.json repo/i18n/ur.json client/i18n/api/sah.json view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js lib/tests/qunit/wikibase.Site.tests.js view/tests/qunit/jquery/wikibase/jquery.wikibase.statementgroupview.tests.js lib/i18n/lkt.json lib/i18n/smn.json view/tests/qunit/jquery/wikibase/jquery.wikibase.badgeselector.tests.js repo/i18n/ig.json repo/i18n/lez.json client/i18n/blc.json client/i18n/api/ru.json repo/i18n/mwl.json repo/resources/wikibase.PropertyDataTypeStore.js repo/i18n/api/cs.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-de.json lib/i18n/gcr.json repo/sql/abstract/wb_changes.json lib/i18n/nah.json view/tests/qunit/wikibase/wikibase.getLanguageNameByCode.tests.js repo/i18n/qqq.json lib/i18n/ace.json repo/i18n/bn.json view/resources/wikibase/view/ToolbarViewController.js repo/i18n/tly.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js view/resources/jquery/wikibase/snakview/snakview.variations.Value.js repo/i18n/sdc.json lib/i18n/gom-deva.json view/tests/qunit/wikibase/entityIdFormatter/testEntityIdHtmlFormatter.js client/i18n/gn.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-en-de.json lib/i18n/rej.json view/resources/wikibase/view/ViewFactoryFactory.js lib/i18n/uk.json client/i18n/zh-hant.json repo/i18n/en-ca.json client/i18n/api/pt.json lib/i18n/abs.json lib/i18n/krc.json lib/i18n/az.json client/i18n/pl.json repo/i18n/zh-hant.json lib/i18n/fa.json repo/tests/phpunit/data/rdf/entities/Q10.json client/i18n/pfl.json repo/i18n/cdo.json client/i18n/mzn.json repo/i18n/mzn.json client/i18n/ru.json repo/i18n/api/ca.json client/i18n/yi.json repo/i18n/mo.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.tests.js repo/i18n/sgs.json lib/i18n/qqq.json repo/i18n/ses.json repo/i18n/pam.json client/i18n/api/qqq.json repo/i18n/my.json repo/i18n/khw.json repo/i18n/bci.json view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js lib/i18n/ojb.json lib/i18n/ms.json repo/i18n/syl.json client/i18n/api/sco.json lib/i18n/lbe.json repo/i18n/it.json repo/tests/phpunit/data/rdf/entities/Q4.json repo/i18n/ru.json lib/i18n/rmc.json client/i18n/es.json repo/i18n/cop.json repo/i18n/dag.json repo/i18n/dv.json client/i18n/api/es.json client/i18n/bar.json client/i18n/nn.json repo/i18n/chr.json view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js client/i18n/min.json client/i18n/brx.json client/i18n/rmc.json repo/i18n/hak.json lib/i18n/pt-br.json client/i18n/ig.json repo/i18n/csb.json repo/i18n/sjd.json repo/resources/parsers/getStore.js lib/i18n/hrx.json repo/i18n/pag.json repo/i18n/hsb.json client/i18n/ase.json repo/sql/abstract/wb_id_counters.json client/i18n/tg-cyrl.json repo/i18n/lad.json lib/i18n/sdh.json client/i18n/da.json lib/i18n/si.json repo/i18n/br.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-multipleEntityIdResponse.json client/i18n/api/br.json client/i18n/yo.json client/i18n/alt.json client/i18n/rej.json client/i18n/udm.json lib/i18n/mai.json lib/i18n/oc.json repo/i18n/api/lt.json repo/i18n/rue.json lib/i18n/cnr-latn.json client/i18n/hi.json view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js client/i18n/lld.json view/tests/qunit/jquery/jquery.sticknode.tests.js repo/tests/selenium/specs/tainted-ref.js client/i18n/lo.json repo/sql/abstract/wb_changes_dispatch.json repo/i18n/api/br.json repo/i18n/api/nl.json lib/i18n/pt.json repo/i18n/sq.json repo/i18n/ga.json client/i18n/hy.json repo/i18n/pcd.json repo/tests/phpunit/data/api/setlabel.json repo/i18n/smn.json repo/i18n/api/qqq.json client/resources/wikibase.client.linkitem.init.js repo/tests/phpunit/data/rdf/entities/Q5.json lib/i18n/lez.json client/i18n/ti.json repo/i18n/nys.json lib/i18n/ig.json client/i18n/api/pl.json lib/i18n/avk.json client/resources/wikibase.sites.js view/resources/wikibase/entityChangers/AliasesChanger.js client/i18n/nso.json view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js repo/resources/wikibase.ui.entityViewInit.js repo/i18n/sd.json repo/i18n/mad.json repo/i18n/kcg.json client/i18n/szy.json lib/i18n/sc.json lib/i18n/wa.json repo/i18n/be-tarask.json view/tests/qunit/experts/wikibase.experts.modules.tests.js repo/i18n/atj.json repo/i18n/api/lb.json repo/resources/wikibase.WikibaseContentLanguages.js repo/i18n/frp.json repo/i18n/sc.json repo/resources/parsers/getApiBasedValueParserConstructor.js lib/i18n/ksw.json repo/i18n/nb.json repo/i18n/se.json client/i18n/mwl.json repo/i18n/cnr-latn.json client/i18n/api/roa-tara.json repo/i18n/ti.json client/i18n/api/gcr.json client/i18n/sv.json repo/i18n/liv.json client/i18n/api/et.json repo/i18n/osi.json package.json client/sql/abstract/entity_usage.json client/i18n/sl.json lib/i18n/mrh.json lib/i18n/en-gb.json lib/i18n/pnb.json client/i18n/ojb.json client/i18n/en.json repo/i18n/rm.json repo/i18n/fit.json client/i18n/api/uk.json repo/i18n/btm.json client/resources/jquery.wikibase/jquery.wikibase.siteselector.js lib/i18n/crh-latn.json repo/i18n/be.json repo/i18n/ug-arab.json repo/i18n/crh-cyrl.json repo/sql/abstractSchemaChanges/patch-wb_changes_dispatch-make-chd_seen-unsigned.json client/i18n/ms.json client/i18n/qu.json repo/tests/qunit/experts/Property.tests.js lib/i18n/tzm.json repo/i18n/lzz.json repo/i18n/bs.json view/resources/wikibase/wikibase.buildErrorOutput.js lib/i18n/sa.json client/i18n/khw.json repo/i18n/awa.json repo/resources/experts/Property.js lib/i18n/wls.json repo/i18n/luz.json lib/i18n/ti.json client/i18n/guc.json repo/i18n/frc.json client/resources/jquery.util.getscrollbarwidth.js client/i18n/os.json lib/i18n/hak.json repo/sql/abstract/term_store.json repo/i18n/diq.json client/i18n/oc.json client/i18n/sjd.json lib/i18n/ug-arab.json client/i18n/api/mk.json client/i18n/fi.json client/i18n/af.json lib/i18n/mui.json repo/i18n/sxu.json repo/i18n/api/he.json client/i18n/vep.json lib/i18n/ba.json repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-emptyResponse.json view/resources/wikibase/view/ReadModeViewFactory.js client/i18n/as.json repo/tests/qunit/index.js repo/i18n/te.json client/i18n/sat.json client/i18n/nds.json client/i18n/kw.json client/i18n/gsw.json client/i18n/dty.json repo/i18n/gsw.json lib/i18n/te.json lib/i18n/lzz.json lib/i18n/gld.json lib/i18n/ie.json client/i18n/te.json lib/i18n/as.json lib/i18n/cu.json view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js client/i18n/se.json client/i18n/mhr.json repo/i18n/fo.json repo/i18n/oc.json client/i18n/az.json lib/i18n/alt.json client/i18n/lez.json repo/resources/wikibase.entityPage.entityLoaded.js view/tests/qunit/jquery/wikibase/jquery.wikibase.wbtooltip.tests.js lib/i18n/lv.json view/resources/jquery/wikibase/jquery.wikibase.statementview.js repo/i18n/sr-ec.json repo/tests/phpunit/data/federatedProperties/query-siteinfo-namespaces-wikibase.json repo/i18n/pwn.json lib/i18n/pcd.json lib/i18n/frr.json repo/i18n/cy.json client/i18n/mr.json repo/i18n/api/ro.json client/i18n/cop.json repo/i18n/api/de.json lib/i18n/bbc-latn.json client/i18n/ext.json client/i18n/api/krc.json view/tests/qunit/jquery/ui/jquery.ui.tagadata.tests.js repo/i18n/glk.json client/i18n/id.json repo/i18n/ku-latn.json client/i18n/prs.json repo/i18n/nso.json client/i18n/ann.json client/i18n/tzm.json lib/i18n/fit.json repo/i18n/lmo.json repo/i18n/nap.json client/i18n/xh.json client/i18n/vo.json lib/i18n/hyw.json repo/i18n/skr-arab.json lib/i18n/ady-cyrl.json repo/i18n/api/pt-br.json client/i18n/ku-latn.json repo/i18n/fy.json lib/i18n/av.json client/i18n/bdr.json repo/i18n/mg.json client/i18n/de.json repo/i18n/lfn.json repo/tests/phpunit/data/federatedProperties/wbgetentities-property-datatype.json view/tests/qunit/wikibase/entityChangers/SiteLinksChanger.tests.js repo/resources/experts/__namespace.js repo/i18n/api/si.json repo/i18n/api/skr-arab.json repo/i18n/uz.json repo/i18n/hyw.json repo/i18n/si.json view/tests/qunit/jquery/wikibase/jquery.wikibase.labelview.tests.js view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js repo/i18n/api/ms.json client/i18n/pam.json repo/i18n/api/nap.json client/i18n/mg.json repo/i18n/api/sr-ec.json repo/i18n/eo.json client/i18n/ckb.json client/i18n/fit.json client/i18n/ht.json repo/i18n/lld.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgroupview.tests.js view/tests/qunit/wikibase/entityChangers/SiteLinkSetsChanger.tests.js repo/i18n/hil.json repo/tests/qunit/experts/Item.tests.js lib/i18n/rif.json repo/i18n/gl.json lib/i18n/nn.json repo/i18n/lzh.json client/i18n/api/lt.json client/i18n/api/vi.json client/i18n/sms.json lib/i18n/shy-latn.json lib/i18n/lrc.json repo/i18n/da.json repo/i18n/ban.json repo/i18n/api/pam.json lib/i18n/ca.json repo/i18n/api/sl.json client/i18n/av.json client/i18n/hak.json lib/i18n/gom-latn.json client/i18n/arq.json repo/i18n/inh.json repo/i18n/api/ar.json client/i18n/cu.json view/tests/qunit/jquery/wikibase/jquery.wikibase.descriptionview.tests.js view/resources/jquery/wikibase/snakview/snakview.variations.js repo/i18n/vi.json repo/i18n/xh.json repo/i18n/myv.json repo/i18n/api/gl.json client/i18n/atj.json client/i18n/kbp.json view/resources/wikibase/entityChangers/EntityTermsChanger.js lib/i18n/yi.json repo/i18n/sah.json client/i18n/api/ce.json repo/i18n/pt-br.json client/i18n/lzh.json repo/resources/formatters/ApiValueFormatter.js client/i18n/so.json repo/i18n/nl.json lib/i18n/lfn.json repo/i18n/th.json lib/i18n/nds.json view/tests/qunit/jquery/wikibase/jquery.wikibase.pagesuggester.tests.js repo/tests/phpunit/data/rdf/entities/Q7.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js lib/i18n/jut.json lib/i18n/ia.json client/i18n/api/yi.json client/i18n/ky.json view/resources/wikibase/view/ToolbarFactory.js lib/i18n/kcg.json repo/i18n/ms.json client/i18n/arn.json lib/i18n/es.json lib/i18n/ms-arab.json repo/i18n/api/ko.json lib/i18n/ary.json repo/resources/experts/Item.js client/i18n/krl.json repo/i18n/pnb.json repo/i18n/ia.json client/i18n/lbe.json client/i18n/et.json view/resources/jquery/jquery.util.EventSingletonManager.js lib/i18n/ckb.json view/resources/wikibase/entityIdFormatter/EntityIdHtmlFormatter.js client/i18n/szl.json repo/i18n/ba.json view/tests/qunit/jquery/wikibase/jquery.wikibase.itemview.tests.js view/resources/wikibase/entityChangers/DescriptionsChanger.js repo/i18n/mhr.json lib/i18n/vi.json lib/i18n/gl.json client/i18n/fur.json Gruntfile.js lib/i18n/sw.json repo/i18n/min.json repo/i18n/api/ug-arab.json client/i18n/api/lb.json view/tests/qunit/wikibase/view/ToolbarViewController.tests.js lib/i18n/myv.json lib/i18n/lij.json lib/i18n/sli.json lib/i18n/zh-hant.json client/i18n/inh.json repo/i18n/sr-el.json lib/i18n/mr.json repo/i18n/hu.json client/i18n/dv.json repo/tests/phpunit/data/rdf/entities/Q4_no_prefixed_ids.json repo/i18n/cs.json repo/i18n/kri.json client/i18n/pcd.json client/resources/wikibase.client.PageConnector.js view/resources/wikibase/utilities/wikibase.utilities.GuidGenerator.js view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbarbutton.js client/i18n/skr-arab.json client/i18n/kri.json repo/i18n/aeb-latn.json client/i18n/glk.json lib/i18n/el.json lib/i18n/gaa.json repo/i18n/lrc.json view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js view/resources/jquery/wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js repo/i18n/ady-cyrl.json lib/i18n/ast.json repo/i18n/api/it.json client/i18n/nia.json client/i18n/ln.json lib/i18n/dty.json client/i18n/tt-latn.json repo/i18n/xmf.json repo/i18n/api/tl.json lib/i18n/ff.json lib/i18n/pwn.json jsduck.json view/resources/jquery/wikibase/snakview/snakview.ViewState.js repo/i18n/co.json lib/i18n/sh.json repo/i18n/api/jv.json client/i18n/ja.json repo/i18n/api/my.json client/i18n/ml.json repo/i18n/su.json repo/i18n/api/tr.json view/tests/qunit/wikibase/entityChangers/StatementsChanger.tests.js repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-de.json repo/resources/wikibase.EntityInitializer.js repo/i18n/sl.json lib/i18n/tk.json client/i18n/co.json lib/i18n/bpy.json client/resources/jquery.wikibase/jquery.wikibase.wbtooltip.js repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-twoResponse.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.toolbar.tests.js repo/i18n/hrx.json client/i18n/pms.json repo/i18n/tt-cyrl.json repo/i18n/guc.json repo/i18n/uk.json lib/i18n/da.json repo/i18n/tcy.json client/i18n/war.json view/tests/qunit/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.tests.js client/i18n/vec.json repo/i18n/grc.json client/i18n/en-gb.json repo/i18n/vro.json lib/i18n/gor.json client/i18n/api/ml.json repo/i18n/mt.json client/i18n/sr-ec.json client/i18n/hu.json client/i18n/lki.json client/i18n/luz.json view/resources/wikibase/view/ControllerViewFactory.js client/i18n/jut.json client/i18n/nb.json client/i18n/tk.json client/i18n/liv.json repo/i18n/frr.json client/i18n/lb.json client/i18n/crh-latn.json repo/i18n/sv.json client/i18n/gcr.json client/i18n/mni.json lib/i18n/jam.json client/i18n/api/diq.json repo/i18n/nia.json repo/i18n/api/nn.json client/i18n/api/ko.json client/i18n/kiu.json lib/i18n/pa.json repo/i18n/qu.json lib/i18n/hy.json lib/i18n/guc.json client/i18n/or.json repo/i18n/gv.json repo/i18n/yo.json client/i18n/shi.json lib/i18n/eo.json client/i18n/ro.json repo/i18n/tl.json lib/i18n/dag.json repo/i18n/sw.json client/i18n/sk.json repo/i18n/alt.json client/i18n/ha.json lib/i18n/nqo.json client/i18n/api/fr.json client/i18n/sdh.json repo/i18n/ary.json lib/i18n/mzn.json repo/i18n/kjh.json client/i18n/scn.json client/i18n/io.json lib/i18n/lzh.json client/i18n/jv.json lib/i18n/de.json lib/i18n/eu.json view/tests/qunit/wikibase/view/ToolbarFactory.tests.js repo/i18n/hi.json repo/i18n/es.json repo/i18n/el.json client/i18n/hil.json lib/i18n/nds-nl.json client/i18n/fa.json view/resources/jquery/jquery.removeClassByRegex.js client/i18n/eml.json repo/i18n/ms-arab.json repo/tests/phpunit/data/federatedProperties/wbgetentities-p1-missing.json repo/resources/wikibase.federatedPropertiesLeavingSiteNotice.js repo/i18n/nds-nl.json repo/i18n/ext.json repo/i18n/tk.json lib/i18n/scn.json lib/i18n/be.json lib/i18n/ne.json view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tabsenabled.tests.js view/resources/wikibase/view/ViewFactory.js repo/i18n/xal.json repo/i18n/de-formal.json repo/tests/phpunit/data/federatedProperties/query-siteinfo-namespaces-wikidata.json lib/i18n/tly.json client/i18n/cy.json client/i18n/uk.json client/i18n/ilo.json repo/i18n/cv.json lib/i18n/bjn.json lib/i18n/diq.json repo/i18n/blc.json client/i18n/gom-deva.json lib/i18n/bcl.json repo/i18n/wls.json repo/i18n/api/hi.json client/i18n/rue.json repo/tests/phpunit/data/rdf/entities/Q6.json repo/tests/phpunit/data/rdf/entities/Q2.json repo/i18n/ar.json view/resources/jquery/wikibase/snakview/snakview.js lib/i18n/ksh.json lib/i18n/af.json client/i18n/api/gl.json client/i18n/kjp.json view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js client/i18n/he.json client/i18n/ace.json repo/i18n/api/mr.json repo/i18n/api/eo.json lib/i18n/nys.json client/i18n/qwh.json client/i18n/hr.json lib/i18n/om.json view/resources/wikibase/entityChangers/StatementsChangerState.js build/dist-size/analyze/index.js repo/i18n/mn.json repo/i18n/abs.json repo/i18n/api/th.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.tests.js repo/i18n/map-bms.json view/tests/qunit/wikibase/view/ViewFactoryFactory.tests.js repo/tests/selenium/specs/nonexisting.item.js view/resources/jquery/wikibase/snakview/snakview.SnakTypeSelector.js lib/i18n/khw.json lib/i18n/kab.json lib/i18n/crh-cyrl.json view/resources/wikibase/view/StructureEditorFactory.js lib/i18n/min.json repo/tests/phpunit/data/rdf/entities/Q6_no_prefixed_ids.json client/i18n/gom-latn.json client/i18n/yue.json repo/i18n/api/su.json repo/tests/qunit/dataTypes/DataTypeStore.tests.js repo/i18n/ln.json lib/i18n/cs.json lib/i18n/tg-cyrl.json client/i18n/api/sv.json repo/i18n/os.json lib/i18n/cop.json repo/i18n/gaa.json repo/i18n/bjn.json client/i18n/cv.json client/resources/wikibase.client.data-bridge.app.js repo/resources/dataTypes/DataTypeStore.js client/i18n/din.json repo/i18n/api/fa.json client/i18n/sgs.json repo/i18n/lbe.json view/tests/qunit/wikibase/utilities/GuidGenerator.tests.js view/resources/wikibase/templates.js repo/i18n/lkt.json lib/i18n/udm.json lib/i18n/szl.json client/i18n/api/it.json client/i18n/bcl.json client/i18n/sli.json lib/i18n/mk.json repo/i18n/api/te.json lib/i18n/krl.json client/i18n/syl.json client/i18n/sxu.json client/i18n/pag.json view/tests/qunit/wikibase/store/store.CombiningEntityStore.tests.js repo/i18n/mk.json view/tests/qunit/jquery/ui/jquery.ui.EditableTemplatedWidget.tests.js repo/i18n/or.json view/tests/qunit/jquery/wikibase/jquery.wikibase.snaklistview.tests.js repo/i18n/mui.json view/resources/wikibase/store/store.CachingEntityStore.js client/i18n/hsb.json repo/i18n/udm.json repo/i18n/api/mk.json lib/i18n/frp.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js lib/i18n/hil.json client/i18n/xsy.json client/i18n/tt-cyrl.json lib/i18n/ta.json lib/i18n/sd.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entityview.tests.js repo/i18n/ee.json client/i18n/ceb.json repo/i18n/pms.json lib/i18n/ses.json repo/i18n/arz.json client/i18n/nap.json repo/i18n/mdf.json lib/i18n/ja.json repo/i18n/bqi.json lib/i18n/csb.json repo/i18n/en.json repo/resources/jquery.wikibase/jquery.wikibase.entitysearch.js lib/i18n/jv.json lib/i18n/skr-arab.json repo/i18n/api/sw.json view/resources/wikibase/entityChangers/EntityChangersFactory.js repo/i18n/api/be-tarask.json client/i18n/ne.json lib/i18n/ce.json repo/i18n/shn.json client/i18n/kab.json client/i18n/frr.json repo/i18n/pap.json client/i18n/api/bn.json client/i18n/ia.json client/i18n/tr.json lib/i18n/fy.json repo/resources/formatters/ApiValueFormatterFactory.js repo/tests/phpunit/data/api/setreference.json client/i18n/api/he.json repo/i18n/api/yi.json client/i18n/el.json client/i18n/tl.json repo/i18n/gom-latn.json build/dist-size/analyze/queries/getSizes.js repo/i18n/gcr.json repo/i18n/gd.json view/resources/jquery/wikibase/jquery.wikibase.pagesuggester.js lib/i18n/yue.json lib/i18n/olo.json lib/i18n/mnc.json repo/i18n/api/ia.json repo/i18n/is.json view/resources/wikibase/entityChangers/LabelsChanger.js view/resources/wikibase/wikibase.ValueFormatterFactory.js repo/i18n/qwh.json repo/tests/phpunit/data/rdf/entities/Q9_no_prefixed_ids.json client/i18n/br.json repo/i18n/api/szy.json repo/resources/wikibase.special/wikibase.special.newEntity.js view/resources/jquery/wikibase/jquery.wikibase.wbtooltip.js repo/i18n/olo.json client/i18n/nl.json lib/i18n/km.json repo/i18n/roa-tara.json repo/i18n/krc.json repo/i18n/tg-cyrl.json lib/i18n/hsb.json lib/i18n/bgn.json client/i18n/ie.json client/i18n/it.json lib/i18n/zh-hans.json repo/i18n/lv.json client/i18n/xmf.json view/resources/jquery/wikibase/snakview/snakview.variations.SomeValue.js repo/i18n/sa.json view/tests/qunit/wikibase/templates.tests.js lib/i18n/gsw.json client/i18n/bjn.json repo/i18n/lb.json client/i18n/tyv.json repo/i18n/gor.json view/tests/qunit/jquery/ui/jquery.ui.closeable.tests.js client/i18n/api/ar.json client/i18n/vro.json lib/i18n/atj.json lib/i18n/inh.json client/i18n/pnb.json lib/i18n/vo.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.RankSelector.tests.js repo/i18n/av.json lib/i18n/cdo.json repo/i18n/szl.json lib/i18n/bho.json lib/i18n/uz.json lib/i18n/ht.json client/i18n/nah.json client/i18n/gd.json client/i18n/zh-hans.json client/i18n/eo.json client/i18n/mrh.json repo/i18n/ksh.json view/tests/qunit/wikibase/wikibase.getUserLanguages.tests.js repo/i18n/ht.json lib/i18n/sq.json lib/i18n/ky.json lib/i18n/mnw.json lib/i18n/nl.json view/resources/jquery/wikibase/jquery.wikibase.statementgrouplistview.js client/i18n/aeb-arab.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.tests.js client/i18n/dsb.json lib/i18n/zgh.json lib/i18n/mt.json view/resources/jquery/wikibase/jquery.wikibase.propertyview.js repo/i18n/api/eu.json lib/i18n/azb.json client/i18n/kl.json view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.toolbaritem.tests.js repo/i18n/tay.json repo/resources/wikibase.special/wikibase.special.mergeItems.js repo/i18n/api/oc.json repo/i18n/arc.json lib/i18n/got.json repo/i18n/mnc.json repo/i18n/sli.json repo/i18n/api/ps.json view/tests/qunit/jquery/wikibase/jquery.wikibase.propertyview.tests.js client/i18n/got.json lib/i18n/kk-cyrl.json repo/i18n/yue.json repo/i18n/dsb.json lib/i18n/brx.json lib/i18n/sat.json repo/tests/qunit/wikibase.PropertyDataTypeStore.tests.js lib/i18n/sjd.json repo/i18n/en-gb.json client/i18n/rif.json repo/i18n/scn.json client/i18n/frc.json repo/tests/qunit/dataTypes/DataType.tests.js repo/i18n/sco.json repo/i18n/azb.json repo/i18n/nds.json client/i18n/arc.json repo/i18n/li.json repo/i18n/fon.json client/i18n/api/zh-hans.json lib/i18n/ro.json view/resources/wikibase.js lib/i18n/anp.json repo/i18n/tt-latn.json client/i18n/ko.json repo/i18n/sat.json view/resources/jquery/wikibase/jquery.wikibase.referenceview.js client/i18n/ses.json lib/i18n/ga.json repo/i18n/hoc.json client/i18n/jam.json repo/i18n/arq.json client/i18n/api/ms.json repo/i18n/prs.json repo/i18n/rif.json client/i18n/mnc.json repo/i18n/sty.json view/resources/jquery/wikibase/snakview/snakview.variations.NoValue.js lib/i18n/arz.json repo/i18n/api/ceb.json repo/i18n/din.json view/resources/wikibase/entityChangers/StatementsChanger.js repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-en.json view/tests/qunit/jquery/wikibase/jquery.wikibase.listview.tests.js lib/i18n/qwh.json client/i18n/su.json client/i18n/sh.json view/tests/qunit/jquery/ui/jquery.ui.TemplatedWidget.tests.js lib/i18n/ur.json lib/i18n/tcy.json lib/i18n/fo.json repo/resources/wikibase.ui.entitysearch.js view/resources/jquery/wikibase/jquery.wikibase.labelview.js repo/i18n/mrh.json composer.json lib/i18n/et.json repo/i18n/ksw.json view/tests/qunit/wikibase/entityChangers/LabelsChanger.tests.js repo/tests/qunit/wikibase.sites.tests.js repo/i18n/fur.json repo/i18n/pfl.json view/resources/wikibase/entityIdFormatter/CachingEntityIdHtmlFormatter.js lib/i18n/ase.json repo/i18n/jam.json lib/i18n/hoc.json client/i18n/ast.json lib/i18n/ami.json view/resources/jquery/wikibase/jquery.wikibase.badgeselector.js repo/i18n/tzm.json repo/i18n/ast.json repo/i18n/mai.json client/i18n/ce.json lib/i18n/awa.json view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js repo/i18n/kk-cyrl.json lib/i18n/xmf.json repo/i18n/crh-latn.json lib/i18n/grc.json lib/i18n/ilo.json repo/i18n/sh.json lib/i18n/de-formal.json repo/i18n/ojb.json client/i18n/mnw.json repo/tests/selenium/specs/readmode.references.js view/tests/qunit/wikibase/entityChangers/DescriptionsChanger.tests.js client/i18n/api/az.json lib/i18n/bs.json client/i18n/bqi.json repo/i18n/hif-latn.json repo/i18n/api/ce.json repo/i18n/fa.json view/tests/phpunit/Termbox/data/resources.json repo/i18n/api/bcl.json repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-en-de.json repo/i18n/rmc.json repo/i18n/api/sa.json view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkview.tests.js client/i18n/shn.json repo/i18n/io.json view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js repo/i18n/as.json client/i18n/bgn.json client/i18n/ban.json lib/i18n/luz.json lib/i18n/ko.json repo/i18n/trv.json view/tests/qunit/jquery/wikibase/jquery.wikibase.statementgrouplistview.tests.js view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js -f json
[{"filePath":"/src/repo/Gruntfile.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/build/ci-scripts/composer.local.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/build/dist-size/analyze/getHistoryForFile.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/build/dist-size/analyze/index.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/build/dist-size/analyze/queries/getCommits.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/build/dist-size/analyze/queries/getSizes.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/build/dist-size/web/lib/main.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 107. Maximum allowed is 100.","line":33,"column":1,"nodeType":"Program","messageId":"max","endLine":33,"endColumn":102}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* global Plotly */\n\nconst FIELDS = {\n\tDATE: 'date',\n\tSIZE: 'size',\n\tSHA: 'sha',\n\tSUBJECT: 'subject',\n};\nconst CUSTOM_FIELDS = {\n\tPREVIOUS_SIZE: 'previousSize',\n\tSIZE_DELTA_PERCENT: 'sizeDeltaPercent',\n};\n\nconst ANNOTATION_THRESHOLD_PERCENT = 8;\n\nfunction unpack( rows, key ) {\n\treturn rows.map( ( row ) => row[ key ] );\n}\n\nfunction sortByDate( first, second ) {\n\tconst a = new Date( first[ FIELDS.DATE ] ),\n\t\tb = new Date( second[ FIELDS.DATE ] );\n\treturn a > b ? 1 : a < b ? -1 : 0;\n}\n\nfunction augmentFileHistoryBySizeDelta( fileHistory ) {\n\tconst newHistory = JSON.parse( JSON.stringify( fileHistory ) );\n\tnewHistory.sort( sortByDate );\n\n\tlet previousRevision = null;\n\tnewHistory.forEach( ( revision ) => {\n\t\tconst previousSize = previousRevision ? previousRevision[ FIELDS.SIZE ] : null;\n\t\tconst deltaPercent = Math.round( ( revision[ FIELDS.SIZE ] - previousSize ) / previousSize * 100 );\n\t\trevision[ CUSTOM_FIELDS.PREVIOUS_SIZE ] = previousSize;\n\t\trevision[ CUSTOM_FIELDS.SIZE_DELTA_PERCENT ] = deltaPercent;\n\t\tpreviousRevision = revision;\n\t} );\n\n\treturn newHistory;\n}\n\nfunction showRevisionInformation( revision ) {\n\twindow.open(\n\t\t'https://github.com/wikimedia/mediawiki-extensions-Wikibase/commit/' + revision[ FIELDS.SHA ],\n\t\t'_blank',\n\t);\n}\n\n/**\n * Build an annotation if the size delta exceeds the configured threshold\n * Requires the revision to be augmented by `deltaPercent` and `previousSize` properties\n *\n * @param {Object} revision\n * @return {?Object}\n */\nfunction buildSizeDeltaAnnotation( revision ) {\n\tif ( revision[ CUSTOM_FIELDS.PREVIOUS_SIZE ] === null || revision[ FIELDS.SIZE ] === null ) {\n\t\t// inception & removal may be a notable but not with respect to size\n\t\treturn null;\n\t}\n\tconst sizeDeltaPercent = revision[ CUSTOM_FIELDS.SIZE_DELTA_PERCENT ];\n\tif ( Math.abs( sizeDeltaPercent ) <= ANNOTATION_THRESHOLD_PERCENT ) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tx: revision[ FIELDS.DATE ],\n\t\ty: revision[ FIELDS.SIZE ],\n\t\txref: 'x',\n\t\tyref: 'y',\n\t\ttext: `∆${sizeDeltaPercent}%`,\n\t\thovertext: `<sub>${revision[ FIELDS.SHA ]}</sub><br>${revision[ FIELDS.SUBJECT ]}`,\n\t\tfont: {\n\t\t\tcolor: sizeDeltaPercent > 0 ? 'red' : 'green',\n\t\t\tsize: Math.max( 5, // minimum size\n\t\t\t\tMath.min( 18, // maximum size\n\t\t\t\t\tMath.round(\n\t\t\t\t\t\tMath.log( Math.abs( sizeDeltaPercent ) ) * 4, // derive size from delta\n\t\t\t\t\t) ) ),\n\t\t},\n\t\tshowarrow: true,\n\t\tarrowhead: 7,\n\t\tax: 0,\n\t\tay: -40,\n\t\tcaptureevents: true,\n\t\tcustomdata: revision,\n\t};\n}\n\nfunction buildScatterTrace( fileName, fileHistory ) {\n\treturn {\n\t\ttype: 'scatter',\n\t\tmode: 'lines+markers',\n\t\tname: fileName,\n\t\tx: unpack( fileHistory, FIELDS.DATE ),\n\t\ty: unpack( fileHistory, FIELDS.SIZE ),\n\t\tcustomdata: fileHistory,\n\t\thovertemplate:\n\t\t\t`%{y} = ∆%{customdata.${CUSTOM_FIELDS.SIZE_DELTA_PERCENT}}%<br>` +\n\t\t\t`<sup>%{customdata.${FIELDS.SHA}}</sup><br>` +\n\t\t\t`%{customdata.${FIELDS.SUBJECT}}`,\n\t\tmarker: { size: 4 },\n\t};\n}\n\nfunction plot( el, historyData ) {\n\tconst traces = [];\n\tconst annotations = [];\n\n\tfor ( const fileName in historyData ) {\n\t\tconst fileHistory = augmentFileHistoryBySizeDelta( historyData[ fileName ] );\n\n\t\ttraces.push( buildScatterTrace( fileName, fileHistory ) );\n\n\t\tfileHistory.forEach( ( revision ) => {\n\t\t\tconst annotation = buildSizeDeltaAnnotation( revision );\n\t\t\tif ( annotation ) {\n\t\t\t\tannotations.push( annotation );\n\t\t\t}\n\t\t} );\n\t}\n\n\tPlotly.newPlot(\n\t\tel,\n\t\ttraces,\n\t\t{\n\t\t\ttitle: 'File size over time',\n\t\t\tyaxis: {\n\t\t\t\ttitle: 'file size (bytes)',\n\t\t\t\tfixedrange: true,\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\ttitle: 'date (ctrl+click to go to revision)',\n\t\t\t},\n\t\t\tannotations,\n\t\t},\n\t\t{\n\t\t\tscrollZoom: true,\n\t\t},\n\t);\n\n\tel.on( 'plotly_click', function ( data ) {\n\t\tif ( !data.event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tshowRevisionInformation( data.points[ 0 ].customdata );\n\t} );\n\tel.on( 'plotly_clickannotation', function ( data ) {\n\t\tshowRevisionInformation( data.annotation.customdata );\n\t} );\n}\n\nfunction DistHist( el, historyDataFile ) {\n\tPlotly.d3.json( historyDataFile, ( error, historyData ) => {\n\t\tif ( error !== null ) {\n\t\t\tel.innerText = 'Data not found. Make sure to generate data.json by running the analyze script';\n\t\t\treturn;\n\t\t}\n\n\t\tplot( el, historyData );\n\t} );\n}\n\nexport {\n\tDistHist,\n};\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/build/federated-properties/files/composer.local.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/abs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ace.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ady-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/aeb-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/aeb-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/af.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/alt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ami.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/an.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ang.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ann.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/anp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ast.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/az.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/be-tarask.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/bn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ca.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ce.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/cs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/diq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/es.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/et.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/fa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/fr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/gcr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/gl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/he.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/hu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/id.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/io.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/it.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/jv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ko.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/krc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/lb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/lki.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/lt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/lv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/mk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ml.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/nap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/nb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/pl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/pt-br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/pt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/qqq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/roa-tara.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ru.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/sah.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/scn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/sco.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/sq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/sv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/ta.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/th.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/tr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/uk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/vi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/yi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/zh-hans.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/api/zh-hant.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/arc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/arn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/arq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ary.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/arz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/as.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ase.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ast.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/atj.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/av.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/avk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/awa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/az.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/azb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ba.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ban.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bbc-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bci.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bcl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bdr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/be-tarask.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/be.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bgn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bho.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bjn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/blc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bpy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bqi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/brx.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/btm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bto.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/bxr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ca.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cak.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cdo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ce.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ceb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ckb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cnr-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/co.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cop.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/crh-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/crh-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/csb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/cy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/da.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/dag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/dar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/de-ch.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/din.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/diq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/dsb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/dty.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/dv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ee.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/el.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/eml.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/en-gb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/eo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/es-formal.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/es.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/et.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/eu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ext.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ff.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fit.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fon.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/frc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/frp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/frr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fur.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/fy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ga.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gaa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gcf.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gcr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gld.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/glk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gom-deva.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gom-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gor.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/got.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/grc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gsw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/gu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/guc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ha.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hak.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/he.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hif-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hil.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hoc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hrx.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hsb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ht.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/hyw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ia.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/id.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ie.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ig.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ilo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/inh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/io.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/is.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/it.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ja.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/jam.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/jbo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/jut.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/jv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ka.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kbp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kcg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kea.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/khw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kip.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kiu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kjh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kjp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kk-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/km.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ko.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/krc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kri.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/krl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ksh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ksw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ku-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kum.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/kw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ky.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/la.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lad.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lbe.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lez.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lfn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/li.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lij.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/liv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lki.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lkt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lld.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lmo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ln.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lrc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/luz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lzh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/lzz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mad.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mai.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mhr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/min.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ml.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mnc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mni.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mnw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mrh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ms-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mui.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mwl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/my.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/myv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/mzn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nah.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nan.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nds-nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nds.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ne.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nia.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nqo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nso.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/nys.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/oc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ojb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/olo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/om.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/or.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/os.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pam.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pcd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pfl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pnb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/prs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ps.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pt-br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/pwn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/qqq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/qu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/qwh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/rej.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/rif.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/rm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/rmc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ro.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/roa-tara.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ru.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/rue.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sah.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sat.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/scn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sco.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sdc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sdh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/se.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ses.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sgs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/shi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/shn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/shy-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/si.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sjd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/skr-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sli.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/smn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/so.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sr-ec.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sr-el.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sty.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/su.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/sxu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/syl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/szl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/szy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ta.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tay.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tcy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/te.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tet.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tg-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/th.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ti.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tly.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/trv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tt-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tt-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tyv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/tzm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/udm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ug-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/uk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/ur.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/uz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/vec.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/vep.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/vi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/vo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/vro.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/wa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/war.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/wls.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/wo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/wuu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/xal.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/xh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/xmf.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/xsy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/yi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/yo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/yue.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/zea.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/zgh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/zh-hans.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/zh-hant.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/zh-hk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/i18n/zu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/jquery.event.special.eachchange.js","messages":[{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":14,"column":2,"nodeType":"Block","endLine":22,"endColumn":5},{"ruleId":"no-shadow","severity":1,"message":"'eventData' is already declared in the upper scope on line 159 column 9.","line":168,"column":49,"nodeType":"Identifier","messageId":"noShadow","endLine":168,"endColumn":58}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\t/**\n\t * Event id used for data binding and as namespace.\n\t *\n\t * @property {string}\n\t * @ignore\n\t */\n\tvar EVENT_ID = 'jqueryEventSpecialEachchange';\n\n\tvar triggeredHandlers = [];\n\n\t/**\n\t * Checks whether a handler with a given event id has already been triggered.\n\t *\n\t * @ignore\n\t *\n\t * @param {string} eventId\n\t * @param {number} index Numeric index within the list of handlers attached with the same\n\t *        event id.\n\t */\n\tfunction alreadyTriggered( eventId, index ) {\n\t\tfor ( var i = 0; i < triggeredHandlers.length; i++ ) {\n\t\t\tif ( eventId === triggeredHandlers[ i ].id && index === triggeredHandlers[ i ].index ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the value of a jQuery element or null if the element does not feature retrieving its\n\t * value via .val().\n\t *\n\t * @ignore\n\t *\n\t * @param {jQuery} $elem\n\t * @return {*}\n\t */\n\tfunction getValue( $elem ) {\n\t\t// If the native element does not feature getting its value, an error is caused in the\n\t\t// jQuery mechanism trying to retrieve the value.\n\t\ttry {\n\t\t\treturn $elem.val();\n\t\t} catch ( e ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Assigns a namespace to a string of one or more event names separated by a space character.\n\t *\n\t * @ignore\n\t *\n\t * @param {string} eventNames\n\t * @param {string} namespace\n\t * @return {string}\n\t */\n\tfunction assignNamespace( eventNames, namespace ) {\n\t\tvar names = eventNames.split( ' ' ),\n\t\t\tnamespacedNames = [];\n\n\t\tfor ( var i = 0; i < names.length; i++ ) {\n\t\t\tnamespacedNames.push( names[ i ] + '.' + namespace );\n\t\t}\n\n\t\treturn namespacedNames.join( ' ' );\n\t}\n\n\t/**\n\t * eachchange jQuery event\n\t *\n\t * The `eachchange` event catches all designated input events. In recent browsers, it basically\n\t * delegates to the `input` event. Older browsers are supported by fallback events to achieve\n\t * some kind of simulation of the `input` event.\n\t *\n\t *     @example\n\t *     $( 'input' ).on( 'eachchange', function( event, previousValue ) {\n\t *         console.log( 'previous value: ' + previousValue );\n\t *         console.log( 'new value: ' + $( event.target ).val() );\n\t *     } );\n\t *\n\t * @see jQuery.event.special\n\t *\n\t * @class jQuery.event.special.eachchange\n\t * @extends jQuery.Event\n\t * @license GNU GPL v2+\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @param {jQuery.Event} event\n\t * @param {string} previousValue\n\t */\n\t$.event.special.eachchange = {\n\t\tadd: function ( handleObj ) {\n\t\t\tvar eventData = $.data( this, EVENT_ID + handleObj.namespace ),\n\t\t\t\t$elem = $( this ),\n\t\t\t\teventId = EVENT_ID + handleObj.namespace,\n\t\t\t\teventNameString = assignNamespace( 'input', eventId );\n\n\t\t\tif ( !eventData ) {\n\t\t\t\teventData = { handlers: [], prevVal: getValue( $elem ) };\n\t\t\t\t$( document ).on( eventNameString, function ( event ) {\n\t\t\t\t\teventData = $.data( $elem[ 0 ], eventId );\n\t\t\t\t\teventData.prevVal = getValue( $elem );\n\t\t\t\t\t$.data( $elem[ 0 ], eventId, eventData );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Store the handler to be able to determine whether handler has been triggered already\n\t\t\t// when issuing a .trigger(Handler)():\n\t\t\teventData.handlers.push( handleObj.handler );\n\t\t\t$.data( this, eventId, eventData );\n\n\t\t\t// Delegate the \"eachchange\" event to the supported input event(s):\n\t\t\t$elem.on( eventNameString, function ( event ) {\n\t\t\t\teventData = $.data( this, eventId );\n\n\t\t\t\tif ( !eventData ) {\n\t\t\t\t\t// Event has been removed but event handler is in the loop.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.origType = event.type;\n\t\t\t\tevent.type = 'eachchange';\n\n\t\t\t\thandleObj.handler.call( this, event, eventData.prevVal );\n\t\t\t} );\n\t\t},\n\n\t\tremove: function ( handleObj ) {\n\t\t\tvar eventId = EVENT_ID + handleObj.namespace;\n\t\t\t$( this ).off( '.' + eventId );\n\t\t\t$( document ).off( '.' + eventId );\n\t\t\t$.removeData( this, eventId );\n\t\t},\n\n\t\ttrigger: function ( event, data ) {\n\t\t\t// Since the value might have changed multiple times programmatically before calling\n\t\t\t// .trigger(Handlers)(), the previous value will be set to the current value and\n\t\t\t// forwarded to the handler(s) when issuing .trigger(Handler)().\n\t\t\tvar self = this,\n\t\t\t\tprevVal = getValue( $( this ) );\n\n\t\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t\t$.each( $.data( this ), function ( eventId, eventData ) {\n\t\t\t\tif ( eventId.indexOf( EVENT_ID ) === 0 ) {\n\t\t\t\t\teventData.prevVal = prevVal;\n\t\t\t\t\t$.data( self, eventId, eventData );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Reset cache of already triggered handlers:\n\t\t\ttriggeredHandlers = [];\n\t\t},\n\n\t\thandle: function ( event, data ) {\n\t\t\tif ( event.namespace !== '' ) {\n\t\t\t\tvar eventData = $.data( this, EVENT_ID + event.namespace );\n\t\t\t\tif ( eventData ) {\n\t\t\t\t\tevent.handleObj.handler.call( this, event, eventData.prevVal );\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tvar self = this;\n\n\t\t\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t\t\t$.each( $.data( this ), function ( eventId, eventData ) {\n\t\t\t\t\tif ( eventId.indexOf( EVENT_ID ) !== 0 ) {\n\t\t\t\t\t\t// Event is not an eachchange event.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar handlers = $.data( self, eventId ).handlers;\n\n\t\t\t\t\tfor ( var i = 0; i < handlers.length; i++ ) {\n\t\t\t\t\t\tif ( !alreadyTriggered( eventId, i ) ) {\n\t\t\t\t\t\t\thandlers[ i ].call( self, event, eventData.prevVal );\n\n\t\t\t\t\t\t\ttriggeredHandlers.push( {\n\t\t\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t};\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/jquery.ui/jquery.ui.ooMenu.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"key\" type.","line":85,"column":null,"nodeType":"Block","endLine":85,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"value\" type.","line":86,"column":null,"nodeType":"Block","endLine":86,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"event\" type.","line":382,"column":null,"nodeType":"Block","endLine":382,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"menu\" type.","line":540,"column":null,"nodeType":"Block","endLine":540,"endColumn":null}],"errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\t/**\n\t * jQuery.ui.ooMenu provides an object-oriented menu structure. Menu items are managed using\n\t * specific objects instead of DOM elements.\n\t *\n\t * @class jQuery.ui.ooMenu\n\t * @extends jQuery.Widget\n\t * @license GNU GPL v2+\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} [options]\n\t * @param {jQuery.ui.ooMenu.Item[]} [options.items=[]]\n\t *        List of items to display.\n\t * @param {jQuery.ui.ooMenu.CustomItem[]} [options.customItems=[]]\n\t *        List of custom items.\n\t * @param {Function|null} [options.manipulateLabel=null]\n\t *        Function applied to each label before rendering, expects {string} to be returned.\n\t *        Function parameter:\n\t *\n\t * - {string} options.manipulateLabel.label\n\t *\n\t * @param {number|null} [options.maxItems=10]\n\t *        Maximum number of visible items. If there are more items, scrollbars will be shown. Set\n\t *        to \"null\" to never have scrollbars on the menu.\n\t */\n\t/**\n\t * @event focus\n\t * Triggered when focusing/activating an item.\n\t * @param {jQuery.Event} event\n\t * @param {jQuery.ui.ooMenu.Item} item\n\t */\n\t/**\n\t * @event blur\n\t * Triggered when blurring/deactivating an item.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event selected\n\t * Triggered when selecting an item.\n\t * @param {jQuery.Event} event\n\t * @param {jQuery.ui.ooMenu.Item|null} item\n\t */\n\t$.widget( 'ui.ooMenu', {\n\n\t\t/**\n\t\t * @see jQuery.Widget.options\n\t\t * @protected\n\t\t * @readonly\n\t\t */\n\t\toptions: {\n\t\t\titems: [],\n\t\t\tcustomItems: null,\n\t\t\tmanipulateLabel: null,\n\t\t\tmaxItems: 10\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget._create\n\t\t * @protected\n\t\t */\n\t\t_create: function () {\n\t\t\tthis.options.customItems = this.options.customItems || [];\n\n\t\t\tthis.element.addClass( 'ui-ooMenu ui-widget ui-widget-content' );\n\n\t\t\tthis._refresh();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis.element\n\t\t.removeClass( 'ui-ooMenu ui-widget ui-widget-content' )\n\t\t.empty();\n\n\t\t\t$.Widget.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @param key\n\t\t * @param value\n\t\t * @see jQuery.Widget._setOption\n\t\t * @protected\n\t\t * @throws {Error} when trying to set `items` or `customItems` option with improper values.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'items' || key === 'customItems' ) {\n\t\t\t\tif ( !Array.isArray( value ) ) {\n\t\t\t\t\tthrow new Error( key + ' needs to be an array' );\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0; i < value.length; i++ ) {\n\t\t\t\t\tif ( key === 'items' && !( value[ i ] instanceof $.ui.ooMenu.Item )\n\t\t\t\t\t|| key === 'customItems' && !( value[ i ] instanceof $.ui.ooMenu.CustomItem )\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error( key + ' may only feature specific instances' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.Widget.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'items' || key === 'customItems' ) {\n\t\t\t\tthis._refresh();\n\t\t\t} else if ( key === 'maxItems' ) {\n\t\t\t\tthis.scale();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Updates the menu content.\n\t\t *\n\t\t * @protected\n\t\t */\n\t\t_refresh: function () {\n\t\t\tthis.element.empty();\n\t\t\tthis.element.scrollTop( 0 );\n\t\t\tfor ( var i = 0; i < this.options.items.length; i++ ) {\n\t\t\t\tthis._appendItem( this.options.items[ i ] );\n\t\t\t}\n\n\t\t\tfor ( var j = 0; j < this.options.customItems.length; j++ ) {\n\t\t\t\tif ( this._evaluateVisibility( this.options.customItems[ j ] ) ) {\n\t\t\t\t\tthis._appendItem( this.options.customItems[ j ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.scale();\n\t\t},\n\n\t\t/**\n\t\t * Evaluates whether a custom item is supposed to be visible or not.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {jQuery.ui.ooMenu.CustomItem} customItem\n\t\t * @return {boolean}\n\t\t */\n\t\t_evaluateVisibility: function ( customItem ) {\n\t\t\treturn customItem.getVisibility( this );\n\t\t},\n\n\t\t/**\n\t\t * Appends an item to the menu.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {jQuery.ui.ooMenu.Item} item\n\t\t */\n\t\t_appendItem: function ( item ) {\n\t\t\tvar self = this;\n\n\t\t\tvar label = this.options.manipulateLabel\n\t\t\t\t? this.options.manipulateLabel( item.getLabel() )\n\t\t\t\t: item.getLabel();\n\n\t\t\tvar $a = $( '<a>' )\n\t\t\t.attr( 'tabindex', -1 )\n\t\t\t.html( label );\n\n\t\t\tif ( item.getLink() ) {\n\t\t\t\t$a.attr( 'href', item.getLink() );\n\t\t\t}\n\n\t\t\tvar $item = $( '<li>' )\n\t\t\t.addClass( 'ui-ooMenu-item' )\n\t\t\t.attr( 'dir', 'auto' )\n\t\t\t.data( 'ui-ooMenu-item', item )\n\t\t\t.append( $a );\n\n\t\t\tif ( item instanceof $.ui.ooMenu.CustomItem ) {\n\t\t\t\t$item.addClass( 'ui-ooMenu-customItem' );\n\n\t\t\t\tif ( typeof item.getAction() === 'function' ) {\n\t\t\t\t\t$item.addClass( 'ui-ooMenu-customItem-action' );\n\t\t\t\t}\n\n\t\t\t\tif ( item.getCssClass() ) {\n\t\t\t\t\t$item.addClass( item.getCssClass() );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$item\n\t\t.on( 'mouseenter.ooMenu', function () {\n\t\t\tself.activate( item );\n\t\t} )\n\t\t.on( 'mouseleave.ooMenu', function () {\n\t\t\tself.deactivate();\n\t\t} )\n\t\t.on( 'mousedown.ooMenu', function ( e ) {\n\t\t\tif ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {\n\t\t\t\tself.select( e );\n\t\t\t}\n\t\t} );\n\n\t\t\t$item.appendTo( this.element );\n\t\t},\n\n\t\t/**\n\t\t * Returns whether the menu currently features visible items.\n\t\t *\n\t\t * @param {boolean} [includeCustomItems]\n\t\t * @return {boolean}\n\t\t */\n\t\thasVisibleItems: function ( includeCustomItems ) {\n\t\t\tif ( this.options.items.length ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ( !includeCustomItems ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < this.options.customItems.length; i++ ) {\n\t\t\t\tif ( this._evaluateVisibility( this.options.customItems[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Scales the menu's height to the height of maximum list items and takes care of the menu width\n\t\t * not reaching out of the browser viewport.\n\t\t */\n\t\tscale: function () {\n\t\t\tvar getscrollbarwidth = require( '../jquery.util.getscrollbarwidth.js' );\n\t\t\tthis.element\n\t\t.width( 'auto' )\n\t\t.height( 'auto' )\n\t\t.css( 'overflowY', 'visible' );\n\n\t\t\t// Constrain height:\n\t\t\tif ( this.options.maxItems ) {\n\t\t\t\tvar $children = this.element.children();\n\n\t\t\t\tif ( $children.length > this.options.maxItems ) {\n\t\t\t\t\tvar fixedHeight = 0;\n\n\t\t\t\t\tfor ( var i = 0; i < this.options.maxItems; i++ ) {\n\t\t\t\t\t\tfixedHeight += $children.eq( i ).outerHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.element.width( this.element.outerWidth() + getscrollbarwidth() );\n\t\t\t\t\tthis.element.height( fixedHeight );\n\t\t\t\t\tthis.element.css( 'overflowY', 'scroll' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Constrain width if menu reaches out of the browser viewport:\n\t\t\tif ( this.element.offset().left + this.element.outerWidth( true ) > $( window ).width() ) {\n\t\t\t\tthis.element.width(\n\t\t\t\t\t$( window ).width()\n\t\t\t\t\t- this.element.offset().left\n\t\t\t\t\t- ( this.element.outerWidth( true ) - this.element.width() )\n\t\t\t\t\t- 20 // safe space\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the currently active item.\n\t\t *\n\t\t * @return {jQuery.ui.ooMenu.Item|null}\n\t\t */\n\t\tgetActiveItem: function () {\n\t\t\tvar $item = this.element.children( '.ui-state-hover' );\n\t\t\treturn !$item.length ? null : $item.data( 'ui-ooMenu-item' );\n\t\t},\n\n\t\t/**\n\t\t * Activates/focuses a specific item.\n\t\t *\n\t\t * @param {jQuery.ui.ooMenu.Item|jQuery} item\n\t\t *\n\t\t * @throws {Error} if the item is not specified correctly.\n\t\t */\n\t\tactivate: function ( item ) {\n\t\t\tvar $item;\n\n\t\t\tif ( item instanceof $.ui.ooMenu.Item ) {\n\t\t\t\t$item = this.element.children( '.ui-ooMenu-item' ).filter( function () {\n\t\t\t\t\treturn $( this ).data( 'ui-ooMenu-item' ) === item;\n\t\t\t\t} );\n\t\t\t} else if ( item instanceof $ && item.data( 'ui-ooMenu-item' ) ) {\n\t\t\t\t$item = item;\n\t\t\t} else {\n\t\t\t\tthrow new Error( 'Need $.ui.ooMenu.Item instance or menu item jQuery object to '\n\t\t\t\t+ 'activate' );\n\t\t\t}\n\n\t\t\tthis.element.children( '.ui-state-hover' ).removeClass( 'ui-state-hover' );\n\n\t\t\tvar offset = $item.offset().top - this.element.offset().top,\n\t\t\t\tscroll = this.element.scrollTop(),\n\t\t\t\telementHeight = this.element.height();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.element.scrollTop( scroll + offset );\n\t\t\t} else if ( offset >= elementHeight ) {\n\t\t\t\tthis.element.scrollTop( scroll + offset - elementHeight + $item.height() );\n\t\t\t}\n\n\t\t\t$item.addClass( 'ui-state-hover' );\n\n\t\t\t$( this ).trigger( 'focus', [ $item.data( 'ui-ooMenu-item' ) ] );\n\t\t},\n\n\t\t/**\n\t\t * Deactivates the menu (resets activated item).\n\t\t */\n\t\tdeactivate: function () {\n\t\t\tif ( this._isActive() ) {\n\t\t\t\tthis.element.children( '.ui-state-hover' ).removeClass( 'ui-state-hover' );\n\t\t\t\t$( this ).trigger( 'blur' );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns whether there is an active menu item.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\t_isActive: function () {\n\t\t\treturn !!this.element.children( '.ui-state-hover' ).length;\n\t\t},\n\n\t\t/**\n\t\t * Moves focus to the next item.\n\t\t */\n\t\tnext: function () {\n\t\t\tthis._move( 'next', this.element.children( '.ui-ooMenu-item' ).first() );\n\t\t},\n\n\t\t/**\n\t\t * Moves focus to the previous item.\n\t\t */\n\t\tprevious: function () {\n\t\t\tthis._move( 'prev', this.element.children( '.ui-ooMenu-item' ).last() );\n\t\t},\n\n\t\t/**\n\t\t * Moves focus in a specific direction.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} direction Either \"next\" or \"prev\".\n\t\t * @param {jQuery} $edge\n\t\t */\n\t\t_move: function ( direction, $edge ) {\n\t\t\tif ( !this.element.children().length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $active = this.element.children( '.ui-state-hover' );\n\n\t\t\tif ( !$active.length ) {\n\t\t\t\tthis.activate( $edge );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $nextItem = $active[ direction + 'All' ]( '.ui-ooMenu-item' ).eq( 0 );\n\n\t\t\tif ( $nextItem.length ) {\n\t\t\t\tthis.activate( $nextItem );\n\t\t\t} else {\n\t\t\t\tthis.activate( $edge );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Selects an item.\n\t\t *\n\t\t * @param event\n\t\t */\n\t\tselect: function ( event ) {\n\t\t\tvar $item = this.element.children( '.ui-state-hover' );\n\n\t\t\tvar item = !$item.length ? null : $item.data( 'ui-ooMenu-item' );\n\n\t\t\tif ( item instanceof $.ui.ooMenu.CustomItem ) {\n\t\t\t\tvar action = item.getAction();\n\t\t\t\tif ( typeof action === 'function' ) {\n\t\t\t\t\taction();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar selectedEvent = $.Event( 'selected', {\n\t\t\t\toriginalEvent: event || null\n\t\t\t} );\n\n\t\t\t$( this ).trigger( selectedEvent, [ item ] );\n\t\t}\n\t} );\n\n\t/**\n\t * Default menu item.\n\t *\n\t * @class jQuery.ui.ooMenu.Item\n\t * @license GNU GPL v2+\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {string|jQuery} label The label to display in the menu.\n\t * @param {string|null} [value] The value to display in the input element if the item is selected.\n\t *        If no value is specified, the label text will be used.\n\t * @param {string|null} [link=null] Optional URL the item shall link to.\n\t *\n\t * @throws {Error} if any required parameter is not specified properly.\n\t */\n\tvar Item = function ( label, value, link ) {\n\t\tif ( !label ) {\n\t\t\tthrow new Error( 'Label needs to be specified' );\n\t\t}\n\n\t\tthis._label = label;\n\t\tthis._value = value || ( label instanceof $ ? label.text() : label );\n\t\tthis._link = link || null;\n\t};\n\n\t$.extend( Item.prototype, {\n\t/**\n\t * @property {jQuery|string}\n\t * @protected\n\t */\n\t\t_label: null,\n\n\t\t/**\n\t\t * @property {string}\n\t\t * @protected\n\t\t */\n\t\t_value: null,\n\n\t\t/**\n\t\t * @property {string|null}\n\t\t * @protected\n\t\t */\n\t\t_link: null,\n\n\t\t/**\n\t\t * @return {jQuery}\n\t\t */\n\t\tgetLabel: function () {\n\t\t\treturn this._label instanceof String\n\t\t\t\t? $( document.createTextNode( this._label ) )\n\t\t\t\t: this._label;\n\t\t},\n\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\tgetValue: function () {\n\t\t\treturn this._value;\n\t\t},\n\n\t\t/**\n\t\t * @return {string|null}\n\t\t */\n\t\tgetLink: function () {\n\t\t\treturn this._link;\n\t\t}\n\t} );\n\n\t/**\n\t * Customizable menu item.\n\t *\n\t * @class jQuery.ui.ooMenu.CustomItem\n\t * @extends jQuery.ui.ooMenu.Item\n\t * @license GNU GPL v2+\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {string|jQuery} label\n\t * @param {Function|boolean|null} [visibility=null]\n\t *        Function to determine the item's visibility or boolean defining static visibility. If\n\t *        \"null\" or omitted, the item will always be visible. Function expects {boolean} to be\n\t *        returned. Function parameter:\n\t *\n\t * - {jQuery.ui.ooMenu} [visibility.menu]\n\t *\n\t * @param {Function|null} [action=null]\n\t * @param {string|null} [cssClass=null]\n\t * @param {string|null} [link=null]\n\t *\n\t * @throws {Error} if any required parameter is not specified properly.\n\t */\n\tvar CustomItem = function ( label, visibility, action, cssClass, link ) {\n\t\t\tif ( !label ) {\n\t\t\t\tthrow new Error( 'Label needs to be specified' );\n\t\t\t}\n\n\t\t\tthis._label = label;\n\t\t\tthis.setVisibility( visibility );\n\t\t\tthis.setAction( action );\n\t\t\tthis.setCssClass( cssClass );\n\t\t\tthis._link = link || null;\n\t\t},\n\t\tinherit = require( '../util.inherit.js' );\n\n\tCustomItem = inherit(\n\t\tItem,\n\t\tCustomItem,\n\t\t{\n\t\t/**\n\t\t * @property {Function|boolean|null}\n\t\t * @protected\n\t\t */\n\t\t\t_visibility: null,\n\n\t\t\t/**\n\t\t\t * @property {Function|null}\n\t\t\t * @protected\n\t\t\t */\n\t\t\t_action: null,\n\n\t\t\t/**\n\t\t\t * @property {string}\n\t\t\t * @protected\n\t\t\t */\n\t\t\t_cssClass: null,\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tgetValue: function () {\n\t\t\t\treturn '';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @param menu\n\t\t\t * @return {Function|boolean}\n\t\t\t */\n\t\t\tgetVisibility: function ( menu ) {\n\t\t\t\tif ( typeof this._visibility === 'function' ) {\n\t\t\t\t\treturn this._visibility( menu );\n\t\t\t\t}\n\t\t\t\treturn this._visibility !== false;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @param {Function|boolean|null} [visibility]\n\t\t\t */\n\t\t\tsetVisibility: function ( visibility ) {\n\t\t\t\tthis._visibility = typeof visibility === 'function' || typeof visibility === 'boolean'\n\t\t\t\t\t? visibility\n\t\t\t\t\t: null;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @return {Function|null}\n\t\t\t */\n\t\t\tgetAction: function () {\n\t\t\t\treturn this._action;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @param {Function|null} [action]\n\t\t\t */\n\t\t\tsetAction: function ( action ) {\n\t\t\t\tthis._action = typeof action === 'function' ? action : null;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @return {string}\n\t\t\t */\n\t\t\tgetCssClass: function () {\n\t\t\t\treturn this._cssClass;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @param {string|null} [cssClass]\n\t\t\t */\n\t\t\tsetCssClass: function ( cssClass ) {\n\t\t\t\tthis._cssClass = typeof cssClass === 'string' ? cssClass : '';\n\t\t\t}\n\t\t}\n\t);\n\n\t$.extend( $.ui.ooMenu, {\n\t\tItem: Item,\n\t\tCustomItem: CustomItem\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/jquery.ui/jquery.ui.suggester.js","messages":[{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":241,"column":3,"nodeType":"Block","endLine":246,"endColumn":6},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"key\" type.","line":242,"column":null,"nodeType":"Block","endLine":242,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"value\" type.","line":243,"column":null,"nodeType":"Block","endLine":243,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":526,"column":3,"nodeType":"Block","endLine":534,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":526,"column":3,"nodeType":"Block","endLine":534,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":644,"column":3,"nodeType":"Block","endLine":656,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":644,"column":3,"nodeType":"Block","endLine":656,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":665,"column":3,"nodeType":"Block","endLine":678,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":665,"column":3,"nodeType":"Block","endLine":678,"endColumn":6}],"errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\trequire( './jquery.ui.ooMenu.js' );\n\n\t/**\n\t * Flips a complete position specification to be used by jQuery.ui.position (1.8).\n\t *\n\t * @ignore\n\t *\n\t * @param {Object} position\n\t * @return {Object}\n\t */\n\tfunction flipPosition( position ) {\n\t\tfunction flipOrientation( orientation ) {\n\t\t\tif ( /right/i.test( orientation ) ) {\n\t\t\t\treturn orientation.replace( /right/i, 'left' );\n\t\t\t} else {\n\t\t\t\treturn orientation.replace( /left/i, 'right' );\n\t\t\t}\n\t\t}\n\n\t\tfunction flipHorizontalOffset( offset ) {\n\t\t\tvar offsets = offset.split( ' ' ),\n\t\t\t\thOffset = parseInt( offsets[ 0 ], 10 );\n\n\t\t\thOffset = ( hOffset <= 0 ) ? Math.abs( hOffset ) : hOffset * -1;\n\t\t\treturn hOffset + ' ' + offsets[ 1 ];\n\t\t}\n\n\t\tposition.my = flipOrientation( position.my );\n\t\tposition.at = flipOrientation( position.at );\n\n\t\tif ( position.offset ) {\n\t\t\tposition.offset = flipHorizontalOffset( position.offset );\n\t\t}\n\n\t\treturn position;\n\t}\n\n\t/**\n\t * Enhances an input box by retrieving a list of suggestions that are displayed in a list below the\n\t * input box.\n\t * (uses `jQuery.ui.ooMenu`, `jQuery.ui.position`)\n\t *\n\t *     @example\n\t *     // Creates a simple suggester using an array as result set.\n\t *     $( 'input' ).suggester( { source: ['a', 'b', 'c'] } );\n\t *\n\t *     // Creates an auto-completion input element fetching suggestions via AJAX.\n\t *     $( 'input' ).suggester( {\n\t *         source: function( term ) {\n\t *             var deferred = $.Deferred();\n\t *\n\t *             $.ajax( {\n\t *                 url: 'https://commons.wikimedia.org/w/api.php',\n\t *                 dataType: 'jsonp',\n\t *                 data: {\n\t *                 search: term,\n\t *                 action: 'opensearch',\n\t *                 namespace: 6\n\t *             }, timeout: 8000 } )\n\t *             .done( function( response ) {\n\t *                 deferred.resolve( response[1], response[0] );\n\t *             } )\n\t *             .fail( function( jqXHR, textStatus ) {\n\t *                 deferred.reject( textStatus );\n\t *             } );\n\t *\n\t *             return deferred.promise();\n\t *         }\n\t *     } );\n\t *\n\t * @class jQuery.ui.suggester\n\t * @extends jQuery.Widget\n\t * @uses jQuery.ui\n\t * @license GNU GPL v2+\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {string[]|Function} options.source\n\t *        An array of strings that shall be used to provide suggestions. Alternatively, a function\n\t *        may be provided\n\t *        Parameters:\n\t *\n\t * - {string} Search term\n\t *\n\t * Expected return values:\n\t *\n\t * - {Object} jQuery promise\n\t *\n\t * Resolved parameters:\n\t *\n\t * - {string[]} Suggestions\n\t *\n\t * - {string} (optional) Search term corresponding to the suggestions. This allows checking whether\n\t *   the response belongs to the most current request.\n\t *\n\t * Rejected parameters:\n\t *\n\t * - {string} Plain text or HTML error message.\n\t *\n\t * @param {number} [options.minTermLength=1]\n\t *        Minimum number of characters to trigger a search with.\n\t * @param {number} [options.delay=300]\n\t *        Delay in milliseconds of the request querying for suggestions.\n\t * @param {jQuery.ui.ooMenu|null} [menu=null]\n\t *        A pre-initialized menu instance featuring one or more custom list item may be provided.\n\t *        This should be the preferred way to define custom items.\n\t * @param {Object} [position=Object]\n\t *        Object to be evaluated by `jQuery.ui.position` to set the suggestion list's position.\n\t *        In RTL context, the specified value is flipped automatically.\n\t *        Default: (position suggestion list's top left corner at input box's bottom left corner)\n\t * @param {jQuery|null} [confineMinWidthTo]\n\t *        The suggestion list's width shall not be smaller than the width of the referenced\n\t *        element. If `undefined`, the minimum width will be the width of the element the suggester\n\t *        is initialized on. Specifying `null` or `undefined` will prevent applying a minimum\n\t *        width.\n\t */\n\t/**\n\t * @event open\n\t * Triggered when the list of suggestions is opened.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event close\n\t * Triggered when the list of suggestions is closed.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event change\n\t * Triggered when the suggester's value has changed.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event error\n\t * Triggered whenever an error occurred while gathering suggestions. This may happen only when using\n\t * a function as source. The {string} parameter is forwarded from the rejected promise returned by\n\t * the source function.\n\t * @param {jQuery.Event} event\n\t * @param {string} message\n\t */\n\t$.widget( 'ui.suggester', {\n\n\t\t/**\n\t\t * @see jQuery.Widget.options\n\t\t * @protected\n\t\t * @readonly\n\t\t */\n\t\toptions: {\n\t\t\tsource: null,\n\t\t\tminTermLength: 1,\n\t\t\tdelay: 300,\n\t\t\tmenu: null,\n\t\t\tposition: {\n\t\t\t\tmy: 'left top',\n\t\t\t\tat: 'left bottom',\n\t\t\t\tcollision: 'none'\n\t\t\t},\n\t\t\tconfineMinWidthTo: undefined\n\t\t},\n\n\t\t/**\n\t\t * Counter for the number of pending requests.\n\t\t *\n\t\t * @property {number}\n\t\t * @protected\n\t\t */\n\t\t_pending: null,\n\n\t\t/**\n\t\t * Current search term.\n\t\t *\n\t\t * @property {string}\n\t\t * @protected\n\t\t */\n\t\t_term: null,\n\n\t\t/**\n\t\t * Caches whether searching is in progress by either storing the ID of the timer used to delay\n\t\t * the actual search request or by storing a boolean \"true\" while the actual search request is\n\t\t * in progress.\n\t\t *\n\t\t * @property {number|boolean} [_searching=false]\n\t\t * @protected\n\t\t */\n\t\t_searching: false,\n\n\t\t/**\n\t\t * @see jQuery.Widget._create\n\t\t * @protected\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis._pending = 0;\n\t\t\tthis._term = this.element.val();\n\n\t\t\tthis.element\n\t\t.addClass( 'ui-suggester-input' )\n\t\t.on( 'blur.' + this.widgetName, function () {\n\t\t\tif ( !self.options.menu.element.is( ':focus' ) ) {\n\t\t\t\tself._close();\n\t\t\t}\n\t\t} );\n\n\t\t\tif ( !( this.options.menu instanceof $.ui.ooMenu ) ) {\n\t\t\t\tvar $menu = $( '<ul>' ).ooMenu();\n\t\t\t\tthis.options.menu = $menu.data( 'ooMenu' );\n\t\t\t}\n\n\t\t\tthis.options.menu = this._initMenu( this.options.menu );\n\n\t\t\tthis._attachInputEventHandlers();\n\t\t\tthis._attachWindowEventHandlers();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis._clearTimeout();\n\n\t\t\tvar menu = this.option( 'menu' );\n\t\t\tmenu.destroy();\n\t\t\tmenu.element.remove();\n\t\t\tthis.option( 'menu', null );\n\n\t\t\t// About to remove the last suggester instance on the page:\n\t\t\tif ( $( ':' + this.widgetBaseClass ).length === 1 ) {\n\t\t\t\t$( window ).off( '.' + this.widgetBaseClass );\n\t\t\t}\n\n\t\t\tthis.element.removeClass( 'ui-suggester-input ui-suggester-loading ui-suggester-error' );\n\n\t\t\t$.Widget.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @param key\n\t\t * @param value\n\t\t * @see jQuery.Widget._setOption\n\t\t * @protected\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'menu' ) {\n\t\t\t\tthis.options.menu.destroy();\n\t\t\t\tthis.options.menu.element.remove();\n\t\t\t}\n\n\t\t\tvar response = $.Widget.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'menu' && value instanceof $.ui.ooMenu ) {\n\t\t\t\tthis.options.menu = this._initMenu( value );\n\t\t\t}\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tif ( value ) {\n\t\t\t\t\tthis._close();\n\t\t\t\t}\n\t\t\t\tthis.element.prop( 'disabled', value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * Renders the menu and attaches the menu's event handlers.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {jQuery.ui.ooMenu} ooMenu\n\t\t * @return {jQuery.ui.ooMenu}\n\t\t */\n\t\t_initMenu: function ( ooMenu ) {\n\t\t\tvar self = this;\n\n\t\t\tooMenu.element\n\t\t.addClass( 'ui-suggester-list' )\n\t\t.hide()\n\t\t.appendTo( 'body' );\n\n\t\t\t$( ooMenu )\n\t\t.on( 'selected.suggester', function ( event, item ) {\n\t\t\tif ( item instanceof $.ui.ooMenu.Item && !( item instanceof $.ui.ooMenu.CustomItem ) ) {\n\t\t\t\tself._term = item.getValue();\n\t\t\t\tself.element.val( item.getValue() );\n\t\t\t\tself._close();\n\t\t\t\tself._trigger( 'change' );\n\n\t\t\t\tif ( !event.originalEvent || !/^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\t// Run refocusing out of the execution chain to allow redrawing in IE.\n\t\t\t\t\t\tself.element.trigger( 'focus' );\n\t\t\t\t\t}, 0 );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t\treturn ooMenu;\n\t\t},\n\n\t\t/**\n\t\t * Attaches input event handlers to the input element.\n\t\t *\n\t\t * @protected\n\t\t */\n\t\t_attachInputEventHandlers: function () {\n\t\t\tvar self = this,\n\t\t\t\tsuppressKeyPress = false;\n\n\t\t\tthis.element\n\t\t.on( 'click.suggester', function ( event ) {\n\t\t\tif ( !self.isSearching() ) {\n\t\t\t\tself._updateMenuVisibility();\n\t\t\t}\n\t\t} )\n\t\t.on( 'keydown.suggester', function ( event ) {\n\t\t\tvar isDisabled = self.element.hasClass( 'ui-state-disabled' );\n\n\t\t\tif ( isDisabled || self.element.prop( 'readOnly' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.element.removeClass( 'ui-suggester-error' );\n\n\t\t\tsuppressKeyPress = false;\n\n\t\t\tvar keyCode = $.ui.keyCode;\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tself._keyMove( 'previous', event );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tself._keyMove( 'next', event );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase keyCode.ENTER:\n\t\t\t\tcase keyCode.NUMPAD_ENTER:\n\t\t\t\t\tif ( self.options.menu.getActiveItem() ) {\n\t\t\t\t\t\t// Prevent form submission and select currently active item.\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tself.options.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( !self.options.menu.getActiveItem() ) {\n\t\t\t\t\t\tself._close();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tself.options.menu.select( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tself.element.val( self._term );\n\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\tif ( self.options.menu.element.is( ':visible' ) ) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tself._close();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif ( self.element.val() === ''\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\tevent.keyCode === keyCode.BACKSPACE\n\t\t\t\t\t\t\t|| event.keyCode === keyCode.DELETE\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tself._triggerSearch();\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tself._trigger( 'change' );\n\t\t} )\n\t\t.on( 'keypress.suggester', function ( event ) {\n\t\t\tif ( suppressKeyPress ) {\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Attaches event listeners to the `window` object.\n\t\t *\n\t\t * @protected\n\t\t */\n\t\t_attachWindowEventHandlers: function () {\n\t\t\tvar self = this;\n\n\t\t\t$( window )\n\t\t.off( '.' + this.widgetBaseClass )\n\t\t.on( 'resize.' + this.widgetBaseClass, function () {\n\t\t\t$( ':' + self.widgetBaseClass ).each( function ( i, node ) {\n\t\t\t\tvar suggester = $( node ).data( self.widgetName );\n\t\t\t\tsuggester.repositionMenu();\n\t\t\t\tsuggester.options.menu.scale();\n\t\t\t} );\n\t\t} )\n\t\t.on( 'click.' + this.widgetBaseClass, function ( event ) {\n\t\t\tvar $target = $( event.target );\n\t\t\t$( ':' + self.widgetBaseClass ).each( function ( i, node ) {\n\t\t\t\tvar suggester = $( node ).data( self.widgetName );\n\t\t\t\t// Close suggester if not clicked on suggester or corresponding list:\n\t\t\t\tif ( $target.closest( suggester.element ).length === 0\n\t\t\t\t\t&& $target.closest( suggester.options.menu.element ).length === 0\n\t\t\t\t) {\n\t\t\t\t\tsuggester._close();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_triggerSearch: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis._clearTimeout();\n\n\t\t\tthis._searching = setTimeout( function () {\n\t\t\t// Only search if the value has changed:\n\t\t\t\tif ( self._term !== self.element.val() ) {\n\t\t\t\t\tself.search()\n\t\t\t\t.done( function () {\n\t\t\t\t\t// Widget might have been destroyed in the meantime.\n\t\t\t\t\tif ( self.element.data( self.widgetName ) ) {\n\t\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}, this.options.delay );\n\t\t},\n\n\t\t/**\n\t\t * Returns whether searching is in progress.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisSearching: function () {\n\t\t\treturn this._searching !== false;\n\t\t},\n\n\t\t/**\n\t\t * Handles moving through the list of suggestions using arrow keys.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} direction (either \"previous\" or \"next\")\n\t\t * @param {jQuery.Event} event\n\t\t */\n\t\t_keyMove: function ( direction, event ) {\n\t\t// Prevent moving cursor to beginning/end of the text field in some browsers:\n\t\t\tevent.preventDefault();\n\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( !this.options.menu.element.is( ':visible' ) ) {\n\t\t\t\tthis.search();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar allItems = $.merge( [], this.options.menu.option( 'items' ) );\n\t\t\t$.merge( allItems, this.options.menu.option( 'customItems' ) );\n\n\t\t\tif ( allItems.length > 0 ) {\n\t\t\t\tthis._move( direction, this.options.menu.getActiveItem(), allItems );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Shifts the suggestions menu focus by one item.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} direction\n\t\t * @param {jQuery.ui.ooMenu.Item} activeItem\n\t\t * @param {jQuery.ui.ooMenu.Item[]} allItems\n\t\t */\n\t\t_move: function ( direction, activeItem, allItems ) {\n\t\t\tvar self = this,\n\t\t\t\tisFirst = activeItem === allItems[ 0 ],\n\t\t\t\tisLast = activeItem === allItems[ allItems.length - 1 ];\n\n\t\t\tif ( isFirst && direction === 'previous' || isLast && direction === 'next' ) {\n\t\t\t\tthis._moveOffEdge( direction );\n\t\t\t} else {\n\t\t\t\t$( this.options.menu ).one( 'focus.suggester', function ( event, item ) {\n\t\t\t\t\tvar isCustomMenuItem = item instanceof $.ui.ooMenu.CustomItem;\n\n\t\t\t\t\tif ( item instanceof $.ui.ooMenu.Item && !isCustomMenuItem ) {\n\t\t\t\t\t\tself.element.val( item.getValue() );\n\t\t\t\t\t} else if ( isCustomMenuItem ) {\n\t\t\t\t\t\tself.element.val( self._term );\n\t\t\t\t\t}\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t} );\n\t\t\t\tthis.options.menu[ direction ]();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handler called when the suggestion menu focus is to be shifted off the end of the list.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} direction\n\t\t */\n\t\t_moveOffEdge: function ( direction ) {\n\t\t\tthis.element.val( this._term );\n\t\t\tthis.options.menu.deactivate();\n\t\t},\n\n\t\t/**\n\t\t * Performs a search on the current input.\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {string[]} return.done.suggestions\n\t\t * @return {Function} return.fail\n\t\t * @return {string} return.fail.message\n\t\t */\n\t\tsearch: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred();\n\n\t\t\tthis._clearTimeout();\n\t\t\tthis._searching = true;\n\n\t\t\tthis._term = this.element.val();\n\n\t\t\tif ( this._term.length < this.options.minTermLength ) {\n\t\t\t\tthis._close();\n\t\t\t\treturn deferred.resolve( [], this._term ).promise();\n\t\t\t}\n\n\t\t\tthis.element.addClass( 'ui-suggester-loading' );\n\t\t\tthis._pending++;\n\n\t\t\treturn this._getSuggestions( this._term )\n\t\t.done( function ( suggestions, requestTerm ) {\n\t\t\tself._searching = false;\n\n\t\t\tif ( typeof requestTerm === 'string' && requestTerm !== self._term ) {\n\t\t\t\t// Skip request since it does not correspond to the current search term.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( self.options.menu ) {\n\t\t\t\t// Suggester (including the menu) might have been destroyed in the meantime.\n\t\t\t\tself._updateMenu( suggestions, requestTerm );\n\t\t\t}\n\t\t} )\n\t\t.fail( function ( message ) {\n\t\t\tself.element.addClass( 'ui-suggester-error' );\n\t\t\tself._trigger( 'error', null, [ message ] );\n\t\t} )\n\t\t.always( function () {\n\t\t\tif ( --self._pending === 0 ) {\n\t\t\t\tself.element.removeClass( 'ui-suggester-loading' );\n\t\t\t}\n\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Clears the timeout used to delay searching if there is an active timer.\n\t\t *\n\t\t * @protected\n\t\t */\n\t\t_clearTimeout: function () {\n\t\t\tif ( typeof this._searching !== 'boolean' ) {\n\t\t\t\tclearTimeout( this._searching );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Updates the menu.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string[]} suggestions\n\t\t * @param {string} requestTerm\n\t\t */\n\t\t_updateMenu: function ( suggestions, requestTerm ) {\n\t\t\tthis._updateMenuItems( suggestions, requestTerm );\n\t\t\tthis._updateMenuVisibility();\n\t\t},\n\n\t\t/**\n\t\t * Updates the suggestion menu with the received suggestions.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string[]} suggestions\n\t\t * @param {string} requestTerm\n\t\t */\n\t\t_updateMenuItems: function ( suggestions, requestTerm ) {\n\t\t\tvar menuItems = [];\n\n\t\t\tfor ( var i = 0; i < suggestions.length; i++ ) {\n\t\t\t\tmenuItems.push( this._createMenuItemFromSuggestion( suggestions[ i ], requestTerm ) );\n\t\t\t}\n\n\t\t\tthis.options.menu.option( 'items', menuItems );\n\t\t},\n\n\t\t/**\n\t\t * Updates the menu's visibility.\n\t\t *\n\t\t * @protected\n\t\t */\n\t\t_updateMenuVisibility: function () {\n\t\t\tif ( !this.options.menu.hasVisibleItems( true ) ) {\n\t\t\t\tthis._close();\n\t\t\t} else {\n\t\t\t\tthis._open();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Instantiates a menu item instance from a suggestion.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} suggestion\n\t\t * @param {string} requestTerm\n\t\t * @return {jQuery.ui.ooMenu.Item}\n\t\t */\n\t\t_createMenuItemFromSuggestion: function ( suggestion, requestTerm ) {\n\t\t\treturn new $.ui.ooMenu.Item( suggestion );\n\t\t},\n\n\t\t/**\n\t\t * Retrieves the suggestions for a specific search term.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} term\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {string[]} return.done.suggestions\n\t\t * @return {string} return.done.requestTerm\n\t\t * @return {Function} return.fail\n\t\t * @return {string} return.fail.message\n\t\t */\n\t\t_getSuggestions: function ( term ) {\n\t\t\tif ( typeof this.options.source === 'function' ) {\n\t\t\t\treturn this.options.source( term );\n\t\t\t}\n\n\t\t\treturn this._getSuggestionsFromArray( term, this.options.source );\n\t\t},\n\n\t\t/**\n\t\t * Filters an array using a specific search term.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} term\n\t\t * @param {string[]} source\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {string[]} return.done.suggestions\n\t\t * @return {string} return.done.requestTerm\n\t\t * @return {Function} return.fail\n\t\t * @return {string} return.fail.message\n\t\t */\n\t\t_getSuggestionsFromArray: function ( term, source ) {\n\t\t\tvar deferred = $.Deferred();\n\n\t\t\tvar matcher = new RegExp( this._escapeRegex( term ), 'i' );\n\n\t\t\t// eslint-disable-next-line no-jquery/no-grep\n\t\t\tdeferred.resolve( $.grep( source, function ( item ) {\n\t\t\t\treturn matcher.test( item );\n\t\t\t} ), term );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Escapes a string to be used in a regular expression.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {string} value\n\t\t * @return {string}\n\t\t */\n\t\t_escapeRegex: function ( value ) {\n\t\t\treturn value.replace( /[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&' );\n\t\t},\n\n\t\t/**\n\t\t * Shows the suggester menu.\n\t\t *\n\t\t * @protected\n\t\t */\n\t\t_open: function () {\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( this.options.menu.element.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.options.menu.element.show();\n\t\t\tthis.repositionMenu();\n\n\t\t\tthis._trigger( 'open' );\n\t\t},\n\n\t\t/**\n\t\t * Hides the suggester menu.\n\t\t *\n\t\t * @protected\n\t\t */\n\t\t_close: function () {\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( !this.options.menu.element.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.options.menu.deactivate();\n\t\t\tthis.options.menu.element.hide();\n\n\t\t\tthis._trigger( 'close' );\n\t\t},\n\n\t\t/**\n\t\t * Aligns the menu to the input element.\n\t\t */\n\t\trepositionMenu: function () {\n\t\t\tvar dir = this.element.attr( 'dir' )\n\t\t\t|| $( document.documentElement ).css( 'direction' )\n\t\t\t|| 'auto';\n\n\t\t\tvar position = $.extend( {}, this.options.position ),\n\t\t\t\t$menu = this.options.menu.element;\n\n\t\t\tif ( dir === 'rtl' ) {\n\t\t\t\tposition = flipPosition( position );\n\t\t\t}\n\n\t\t\t$menu.position( $.extend( {\n\t\t\t\tof: this.element\n\t\t\t}, position ) );\n\n\t\t\t$menu.zIndex( this.element.zIndex() + 1 );\n\n\t\t\tif ( this.element.attr( 'lang' ) ) {\n\t\t\t\t$menu.attr( 'lang', this.element.attr( 'lang' ) );\n\t\t\t}\n\t\t\t$menu.attr( 'dir', dir );\n\n\t\t\tthis.options.menu.scale();\n\n\t\t\tif ( this.options.confineMinWidthTo !== null ) {\n\t\t\t\tvar $minWidthConfinement = this.options.confineMinWidthTo || this.element;\n\n\t\t\t\t$menu.css(\n\t\t\t\t\t'min-width',\n\t\t\t\t\t$minWidthConfinement.outerWidth() - ( $menu.outerWidth() - $menu.width() )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/jquery.util.getscrollbarwidth.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/jquery.wikibase/jquery.wikibase.linkitem.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":26,"column":null,"nodeType":"Block","endLine":26,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":28,"column":null,"nodeType":"Block","endLine":28,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":30,"column":null,"nodeType":"Block","endLine":30,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":32,"column":null,"nodeType":"Block","endLine":32,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":35,"column":null,"nodeType":"Block","endLine":35,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":37,"column":null,"nodeType":"Block","endLine":37,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in namepath: dialogclose:","line":39,"column":null,"nodeType":"Block","endLine":39,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in namepath: success:","line":42,"column":null,"nodeType":"Block","endLine":42,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":49,"column":null,"nodeType":"Block","endLine":49,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":56,"column":null,"nodeType":"Block","endLine":56,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":63,"column":null,"nodeType":"Block","endLine":63,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'wb' is undefined.","line":537,"column":null,"nodeType":"Block","endLine":537,"endColumn":null}],"errorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Marius Hoch < hoo@online.de >\n */\n( function ( wb ) {\n\t'use strict';\n\tvar PageConnector = require( '../wikibase.client.PageConnector.js' ),\n\t\tgetMwApiForRepo = require( '../wikibase.client.getMwApiForRepo.js' );\n\n\trequire( './jquery.wikibase.siteselector.js' );\n\trequire( './jquery.wikibase.wbtooltip.js' );\n\trequire( '../jquery.event.special.eachchange.js' );\n\n\t// wikibase.api module\n\trequire( '../../../lib/resources/wikibase-api/src/namespace.js' );\n\trequire( '../../../lib/resources/wikibase-api/src/RepoApi.js' );\n\trequire( '../../../lib/resources/wikibase-api/src/getLocationAgnosticMwApi.js' );\n\trequire( '../../../lib/resources/wikibase-api/src/RepoApiError.js' );\n\n\t/**\n\t * This widget allows linking articles with Wikibase items or creating new wikibase items directly\n\t * in client wikis.\n\t * The widget can take a couple of arguments to make it work on pages and sites other than the\n\t * current one. All these options default to global state / the current page's attributes.\n\t *\n\t * @option mwApiForRep {mediaWiki.Api} A mw.Api instance configured to use the repo's API.\n\t *\n\t * @option pageTitle {string} Title of the page to link.\n\t *\n\t * @option globalSiteId {string} Id of the site the given page is on.\n\t *\n\t * @option namespaceNumber {number} Number of the namespace the given title is in.\n\t *         This is used to determine the linkable pages on the target wiki.\n\t *\n\t * @option repoArticlePath {string} Article path (like wgArticlePath) for the repo.\n\t *\n\t * @option langLinkSiteGroup {string} Group of sites we allow the user to link the given page with.\n\t *\n\t * @event dialogclose: Triggered when the interaction dialog is closed.\n\t *        (1) {jQuery.Event}\n\t *\n\t * @event success: Triggered when pages have been linked successfully.\n\t *        (1) {jQuery.Event}\n\t */\n\t$.widget( 'wikibase.linkitem', {\n\t\t_pageConnector: null,\n\n\t\t/**\n\t\t * @type jQuery\n\t\t */\n\t\t$dialog: null,\n\n\t\t/**\n\t\t * Spinner (set if there's something ongoing)\n\t\t *\n\t\t * @type jQuery\n\t\t */\n\t\t$spinner: null,\n\n\t\t/**\n\t\t * Button to go on (next step)\n\t\t *\n\t\t * @type jQuery\n\t\t */\n\t\t$goButton: null,\n\n\t\t/**\n\t\t * Global ID of the site to link with\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\ttargetSite: null,\n\n\t\t/**\n\t\t * Name of the page title to link with\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\ttargetArticle: null,\n\n\t\tmwApiForRepo: getMwApiForRepo(),\n\n\t\t/**\n\t\t * Options\n\t\t *\n\t\t * @see jQuery.Widget.options\n\t\t */\n\t\toptions: {\n\t\t\tpageTitle: null,\n\t\t\tglobalSiteId: null,\n\t\t\tnamespaceNumber: null,\n\t\t\trepoArticlePath: null,\n\t\t\tlangLinkSiteGroup: null\n\t\t},\n\n\t\t/**\n\t\t * Check whether the user is logged in on both the client and the repo\n\t\t * show the dialog if he is, error if not\n\t\t *\n\t\t * @see jQuery.Widget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this,\n\t\t\t\t$dialogSpinner = $.createSpinner();\n\n\t\t\tthis.element\n\t\t\t.hide()\n\t\t\t.after( $dialogSpinner );\n\n\t\t\tthis.mwApiForRepo.get( {\n\t\t\t\taction: 'query',\n\t\t\t\tmeta: 'userinfo'\n\t\t\t} )\n\t\t\t.done( function ( data ) {\n\t\t\t\t$dialogSpinner.remove();\n\n\t\t\t\tif ( data.query.userinfo.anon !== undefined ) {\n\t\t\t\t\t// User isn't logged into the repo\n\t\t\t\t\tself._notLoggedIn();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tself._createDialog();\n\t\t\t\t$( '#wbclient-linkItem-site' ).trigger( 'focus' );\n\t\t\t} )\n\t\t\t.fail( function ( errorCode, errorInfo ) {\n\t\t\t\t$dialogSpinner.remove();\n\t\t\t\tself.element.show();\n\n\t\t\t\tself.element.wbtooltip( {\n\t\t\t\t\tcontent: mw.msg( 'wikibase-error-unexpected',\n\t\t\t\t\t\t( errorInfo.error && errorInfo.error.info ) || errorInfo.exception ),\n\t\t\t\t\tgravity: 'w'\n\t\t\t\t} );\n\n\t\t\t\tself.element.data( 'wbtooltip' ).show();\n\t\t\t\tself.element.one( 'click.' + self.widgetName, function () {\n\t\t\t\t\t// Remove the tooltip by the time the user clicks the link again.\n\t\t\t\t\tself.element.data( 'wbtooltip' ).destroy();\n\t\t\t\t} );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Show an error to the user in case he isn't logged in on both the client and the repo\n\t\t */\n\t\t_notLoggedIn: function () {\n\t\t\tvar self = this;\n\n\t\t\tvar userLogin = this._linkRepoTitle( 'Special:UserLogin' );\n\t\t\t$( '<div>' )\n\t\t\t.dialog( {\n\t\t\t\ttitle: mw.message( 'wikibase-linkitem-not-loggedin-title' ).escaped(),\n\t\t\t\twidth: 400,\n\t\t\t\theight: 200,\n\t\t\t\tresizable: true\n\t\t\t} )\n\t\t\t.on( 'dialogclose', function () {\n\t\t\t\tself._trigger( 'dialogclose' );\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$( '<p>' )\n\t\t\t\t.addClass( 'wbclient-linkItem-not-loggedin-message' )\n\t\t\t\t.html( mw.message( 'wikibase-linkitem-not-loggedin', userLogin ).parse() )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Create the dialog asking for a page the user wants to link with the current one\n\t\t */\n\t\t_createDialog: function () {\n\t\t\tthis.$dialog = $( '<div>' )\n\t\t\t\t.attr( 'id', 'wbclient-linkItem-dialog' )\n\t\t\t\t.dialog( {\n\t\t\t\t\ttitle: mw.message( 'wikibase-linkitem-title' ).escaped(),\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tresizable: false,\n\t\t\t\t\tposition: { my: 'top', at: 'top+50', of: window },\n\t\t\t\t\tbuttons: [ {\n\t\t\t\t\t\ttext: mw.msg( 'wikibase-linkitem-linkpage' ),\n\t\t\t\t\t\tid: 'wbclient-linkItem-goButton',\n\t\t\t\t\t\tdisabled: 'disabled',\n\t\t\t\t\t\tclick: this._secondStep.bind( this )\n\t\t\t\t\t} ],\n\t\t\t\t\tmodal: true\n\t\t\t\t} )\n\t\t\t\t// Use .on instead of passing this to dialog() as close as we want to be able to remove\n\t\t\t\t// it later:\n\t\t\t\t.on( 'dialogclose', function () {\n\t\t\t\t\tthis.element.show();\n\t\t\t\t\tthis._trigger( 'dialogclose' );\n\t\t\t\t}.bind( this ) )\n\t\t\t\t.append( $( '<p>' ).text( mw.msg( 'wikibase-linkitem-selectlink' ) ) )\n\t\t\t\t.append( this._createSiteLinkForm() );\n\n\t\t\tthis.$goButton = $( '#wbclient-linkItem-goButton' );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this.$dialog && this.$dialog.length ) {\n\t\t\t\tthis.$dialog.remove();\n\t\t\t}\n\t\t\tif ( this.$spinner && this.$spinner.length ) {\n\t\t\t\tthis.$spinner.remove();\n\t\t\t}\n\t\t\tif ( this.$goButton && this.$goButton.length ) {\n\t\t\t\tthis.$goButton.remove();\n\t\t\t}\n\n\t\t\t$.Widget.prototype.destroy.call( this );\n\n\t\t\t// FIXME: The destroy() method should be final. Re-showing the element should be done\n\t\t\t// outside the scope of destroy().\n\t\t\tthis.element.show();\n\t\t},\n\n\t\t/**\n\t\t * Creates a form for selecting the site and the page to link in a user-friendly manner (with\n\t\t * auto-completion).\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_createSiteLinkForm: function () {\n\t\t\treturn $( '<form>' )\n\t\t\t.attr( 'name', 'wikibase-linkItem-form' )\n\t\t\t.append( this._createSiteInput() )\n\t\t\t.append( $( '<br>' ) )\n\t\t\t.append( this._createPageInput() );\n\t\t},\n\n\t\t/**\n\t\t * Creates a labeled input box for selecting client sites.\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_createSiteInput: function () {\n\t\t\treturn $( '<label>' )\n\t\t\t.attr( 'for', 'wbclient-linkItem-site' )\n\t\t\t.text( mw.msg( 'wikibase-linkitem-input-site' ) )\n\t\t\t.add(\n\t\t\t\t$( '<input>' )\n\t\t\t\t.attr( {\n\t\t\t\t\tname: 'wbclient-linkItem-site',\n\t\t\t\t\tid: 'wbclient-linkItem-site',\n\t\t\t\t\tclass: 'wbclient-linkItem-input'\n\t\t\t\t} )\n\t\t\t\t.siteselector( {\n\t\t\t\t\tsource: this._getLinkableSites()\n\t\t\t\t} )\n\t\t\t\t.on(\n\t\t\t\t\t'siteselectoropen siteselectorclose siteselectorautocomplete blur',\n\t\t\t\t\tthis._onSiteSelectorChangeHandler.bind( this )\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Gets an object with all linkable sites despite the current one (as pages on the same wiki\n\t\t * cannot be linked).\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\t_getLinkableSites: function () {\n\t\t\tvar sites,\n\t\t\t\tlinkableSites = [],\n\t\t\t\tsite,\n\t\t\t\tcurrentSiteId,\n\t\t\t\tsitesModule = require( '../wikibase.sites.js' );\n\n\t\t\tcurrentSiteId = this.options.globalSiteId;\n\t\t\tsites = sitesModule.getSitesOfGroup( this.options.langLinkSiteGroup );\n\n\t\t\tfor ( site in sites ) {\n\t\t\t\tif ( sites[ site ].getId() !== currentSiteId ) {\n\t\t\t\t\tlinkableSites.push( sites[ site ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn linkableSites;\n\t\t},\n\n\t\t/**\n\t\t * Handles changes to the siteselector\n\t\t */\n\t\t_onSiteSelectorChangeHandler: function () {\n\t\t\tvar apiUrl,\n\t\t\t\t$page = $( '#wbclient-linkItem-page' );\n\n\t\t\t$page.val( '' );\n\n\t\t\ttry {\n\t\t\t\tapiUrl = $( '#wbclient-linkItem-site' ).siteselector( 'getSelectedSite' ).getApi();\n\t\t\t} catch ( e ) {\n\t\t\t\t// Invalid input (likely incomplete). Disable the page input an re-disable to button\n\t\t\t\t$page.prop( 'disabled', true );\n\t\t\t\tthis.$goButton.button( 'disable' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the language gets changed the yet selected page is no longer available so we clear the\n\t\t\t// input element. Furthermore, we remove the old suggestor (if there's one) and create a new\n\t\t\t// one working on the right wiki.\n\t\t\t$page\n\t\t\t.prop( 'disabled', false )\n\t\t\t.suggester( {\n\t\t\t\tsource: function ( term ) {\n\t\t\t\t\tvar deferred = $.Deferred();\n\n\t\t\t\t\t$.ajax( {\n\t\t\t\t\t\turl: apiUrl,\n\t\t\t\t\t\tdataType: 'jsonp',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tsearch: term,\n\t\t\t\t\t\t\taction: 'opensearch'\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttimeout: 8000\n\t\t\t\t\t} )\n\t\t\t\t\t.done( function ( response ) {\n\t\t\t\t\t\tdeferred.resolve( response[ 1 ], response[ 0 ] );\n\t\t\t\t\t} )\n\t\t\t\t\t.fail( function ( jqXHR, textStatus ) {\n\t\t\t\t\t\tdeferred.reject( textStatus );\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn deferred.promise();\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Creates a labeled input box for selecting pages on a client site.\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_createPageInput: function () {\n\t\t\tvar self = this;\n\n\t\t\treturn $( '<label>' )\n\t\t\t.attr( 'for', 'wbclient-linkItem-page' )\n\t\t\t.text( mw.msg( 'wikibase-linkitem-input-page' ) )\n\t\t\t.add(\n\t\t\t\t$( '<input>' )\n\t\t\t\t.attr( {\n\t\t\t\t\tname: 'wbclient-linkItem-page',\n\t\t\t\t\tid: 'wbclient-linkItem-page',\n\t\t\t\t\tclass: 'wbclient-linkItem-input'\n\t\t\t\t} )\n\t\t\t\t.prop( 'disabled', true )\n\t\t\t\t.on( 'eachchange', function () {\n\t\t\t\t\t// Enable the button if the field has a value\n\t\t\t\t\tself.$goButton.button( $( this ).val() === '' ? 'disable' : 'enable' );\n\t\t\t\t} )\n\t\t\t\t.on( 'keydown', function ( e ) {\n\t\t\t\t\tif ( !self.$goButton.prop( 'disabled' ) && e.which === 13 ) {\n\t\t\t\t\t\t// Enter should submit\n\t\t\t\t\t\tself.$goButton.trigger( 'click' );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Called after the user specified site and a page name. Looks up any existing items or tries to\n\t\t * link the currently viewed page with an existing item.\n\t\t */\n\t\t_secondStep: function () {\n\t\t\tthis.targetSite = $( '#wbclient-linkItem-site' ).siteselector( 'getSelectedSite' ).getId();\n\t\t\tthis.targetArticle = $( '#wbclient-linkItem-page' ).val();\n\n\t\t\tthis._pageConnector = new PageConnector(\n\t\t\t\tnew wb.api.RepoApi( this.mwApiForRepo, mw.config.get( 'wgUserLanguage' ) ),\n\t\t\t\tthis.options.globalSiteId,\n\t\t\t\tthis.options.pageTitle,\n\t\t\t\tthis.targetSite,\n\t\t\t\tthis.targetArticle\n\t\t\t);\n\n\t\t\t// Show a spinning animation and do an API request\n\t\t\tthis._showSpinner();\n\n\t\t\tthis._pageConnector.getNewlyLinkedPages()\n\t\t\t.done( this._onConfirmationDataLoad.bind( this ) )\n\t\t\t// This will (as a side effect) also catch errors where the target page doesn't exist:\n\t\t\t.fail( this._onError.bind( this ) );\n\t\t},\n\n\t\t/**\n\t\t * Replaces the $goButton button with a loading spinner.\n\t\t */\n\t\t_showSpinner: function () {\n\t\t\tthis.$spinner = $.createSpinner();\n\t\t\tthis.$goButton\n\t\t\t\t.hide()\n\t\t\t\t.after( this.$spinner );\n\t\t},\n\n\t\t/**\n\t\t * Removes the spinner created with _showSpinner and shows the original button again.\n\t\t */\n\t\t_removeSpinner: function () {\n\t\t\tif ( !this.$spinner || !this.$spinner.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$spinner.remove();\n\t\t\tthis.$goButton.show();\n\t\t},\n\n\t\t/**\n\t\t * Handles the data from getNewlyLinkedPages and either creates a new item or shows the user a\n\t\t * confirmation form in case an item exists already.\n\t\t *\n\t\t * @param {Object} entity\n\t\t */\n\t\t_onConfirmationDataLoad: function ( entity ) {\n\t\t\tvar i, itemLink;\n\n\t\t\tif ( entity && entity.sitelinks ) {\n\t\t\t\tvar siteLinkCount = 0;\n\n\t\t\t\t// Show a table with links to the user and ask for confirmation\n\t\t\t\titemLink = this._linkRepoTitle( entity.title );\n\n\t\t\t\t// Count site links and abort in case the entity already is linked with a page on this\n\t\t\t\t// wiki:\n\t\t\t\tfor ( i in entity.sitelinks ) {\n\t\t\t\t\tif ( entity.sitelinks[ i ].site ) {\n\t\t\t\t\t\tsiteLinkCount += 1;\n\t\t\t\t\t\tif ( entity.sitelinks[ i ].site === this.options.globalSiteId ) {\n\t\t\t\t\t\t\t// Abort as the entity already is linked with a page on this wiki\n\t\t\t\t\t\t\tthis._onError( mw.message(\n\t\t\t\t\t\t\t\t'wikibase-linkitem-alreadylinked',\n\t\t\t\t\t\t\t\titemLink,\n\t\t\t\t\t\t\t\tentity.sitelinks[ i ].title\n\t\t\t\t\t\t\t).parse() );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( siteLinkCount === 1 ) {\n\t\t\t\t\t// The item we want to link with only has a single sitelink so we don't have to ask\n\t\t\t\t\t// for confirmation:\n\t\t\t\t\tthis._pageConnector.linkPages()\n\t\t\t\t\t.done( this._onSuccess.bind( this ) )\n\t\t\t\t\t.fail( this._onError.bind( this ) );\n\t\t\t\t} else {\n\t\t\t\t\t// Let the user verify this is indeed the entity to link with and link it after.\n\t\t\t\t\tthis._removeSpinner();\n\t\t\t\t\tthis._userConfirmEntity( entity, siteLinkCount, itemLink );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._pageConnector.linkPages()\n\t\t\t\t.done( this._onSuccess.bind( this ) )\n\t\t\t\t.fail( this._onError.bind( this ) );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Let the user verify this is indeed the entity to link with and link it after.\n\t\t *\n\t\t * @param {Object} entity\n\t\t * @param {number} siteLinkCount Number of sitelinks attached to the entity\n\t\t * @param {string} itemLink Link to the entity on the repo\n\t\t */\n\t\t_userConfirmEntity: function ( entity, siteLinkCount, itemLink ) {\n\t\t\tvar self = this,\n\t\t\t\tconfirmationMsg = mw.message(\n\t\t\t\t\t'wikibase-linkitem-confirmitem-text',\n\t\t\t\t\titemLink,\n\t\t\t\t\tsiteLinkCount\n\t\t\t\t).parse();\n\n\t\t\tthis.$dialog\n\t\t\t\t.empty()\n\t\t\t\t.append( $( '<div>' ).html( confirmationMsg ) )\n\t\t\t\t.append( $( '<br>' ) )\n\t\t\t\t.append( this._createSiteLinkTable( entity ) );\n\n\t\t\tthis.$goButton\n\t\t\t\t.off( 'click' )\n\t\t\t\t.button( 'option', 'label', mw.msg( 'wikibase-linkitem-confirmitem-button' ) )\n\t\t\t\t.on( 'click', function () {\n\t\t\t\t\t// The user confirmed that this is the right item...\n\t\t\t\t\tself._showSpinner();\n\t\t\t\t\tself._pageConnector.linkPages()\n\t\t\t\t\t.done( self._onSuccess.bind( self ) )\n\t\t\t\t\t.fail( self._onError.bind( self ) );\n\t\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Creates a table with all sitelinks linked to an entity.\n\t\t *\n\t\t * @param {Object} entity\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_createSiteLinkTable: function ( entity ) {\n\t\t\tvar i, $siteLinks, sites = require( '../wikibase.sites.js' );\n\n\t\t\t$siteLinks = $( '<div>' )\n\t\t\t\t.attr( 'id', 'wbclient-linkItem-siteLinks' )\n\t\t\t\t.append( $( '<table>' ) );\n\n\t\t\t// Table head\n\t\t\t$( '<thead>' )\n\t\t\t.append(\n\t\t\t\t$( '<tr>' )\n\t\t\t\t.append( $( '<th>' ).text( mw.msg( 'wikibase-sitelinks-sitename-columnheading' ) ) )\n\t\t\t\t.append( $( '<th>' ).text( mw.msg( 'wikibase-sitelinks-link-columnheading' ) ) )\n\t\t\t)\n\t\t\t.appendTo( $siteLinks.find( 'table' ) );\n\n\t\t\t// Table body\n\t\t\tfor ( i in entity.sitelinks ) {\n\t\t\t\tif ( entity.sitelinks[ i ].site ) {\n\t\t\t\t\t// Show a row for each page that is linked with the current entity\n\t\t\t\t\t$siteLinks\n\t\t\t\t\t.find( 'table' )\n\t\t\t\t\t.append(\n\t\t\t\t\t\tthis._createSiteLinkRow(\n\t\t\t\t\t\t\tsites.getSite( entity.sitelinks[ i ].site ),\n\t\t\t\t\t\t\tentity.sitelinks[ i ]\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $siteLinks;\n\t\t},\n\n\t\t/**\n\t\t * Creates a table row for a site link.\n\t\t *\n\t\t * @param {wb.Site} site\n\t\t * @param {Object} entitySitelinks\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_createSiteLinkRow: function ( site, entitySitelinks ) {\n\t\t\treturn $( '<tr>' )\n\t\t\t\t.append(\n\t\t\t\t\t$( '<td>' )\n\t\t\t\t\t.addClass( 'wbclient-linkItem-column-site' )\n\t\t\t\t\t.text( site.getName() )\n\t\t\t\t\t.css( 'direction', site.getLanguageDirection() )\n\t\t\t\t)\n\t\t\t\t.append(\n\t\t\t\t\t$( '<td>' )\n\t\t\t\t\t.addClass( 'wbclient-linkItem-column-page' )\n\t\t\t\t\t.append( site.getLinkTo( entitySitelinks.title ) )\n\t\t\t\t\t.css( 'direction', site.getLanguageDirection() )\n\t\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Called after an entity has successfully been linked or created. Replaces the dialog content\n\t\t * with a useful message linking the (new) item.\n\t\t */\n\t\t_onSuccess: function () {\n\t\t\tvar mwApi = new mw.Api(),\n\t\t\t\titemUri = this._linkRepoTitle(\n\t\t\t\t\t'Special:ItemByTitle/' + this.options.globalSiteId + '/' + this.options.pageTitle\n\t\t\t\t);\n\n\t\t\tthis.$dialog\n\t\t\t\t.empty()\n\t\t\t\t.append(\n\t\t\t\t\t$( '<p>' )\n\t\t\t\t\t.addClass( 'wbclient-linkItem-success-message' )\n\t\t\t\t\t.html( mw.message( 'wikibase-linkitem-success-link', itemUri ).parse() )\n\t\t\t\t)\n\t\t\t\t.append( $( '<p>' ).text( mw.msg( 'wikibase-replicationnote' ) ) );\n\n\t\t\tthis._removeSpinner();\n\n\t\t\t// Replace the button with one asking to close the dialog and reload the current page\n\t\t\tthis.$goButton\n\t\t\t\t.off( 'click' )\n\t\t\t\t.on( 'click', function () {\n\t\t\t\t\tthis._showSpinner();\n\t\t\t\t\twindow.location.reload( true );\n\t\t\t\t}.bind( this ) )\n\t\t\t\t.button( 'option', 'label', mw.msg( 'wikibase-linkitem-close' ) );\n\n\t\t\t// Purge this page in the background... we shouldn't confuse the user with the newly added\n\t\t\t// link(s) not being there:\n\t\t\tmwApi.post( {\n\t\t\t\tformatversion: 2,\n\t\t\t\taction: 'purge',\n\t\t\t\ttitles: this.options.pageTitle\n\t\t\t} );\n\n\t\t\tthis._trigger( 'success' );\n\t\t},\n\n\t\t/**\n\t\t * Called in case an error occurs and displays an error message.\n\t\t *\n\t\t * Can either show a given errorCode (as html) or use data from an\n\t\t * API failure (pass two parameters in this case).\n\t\t *\n\t\t * @param {string} errorCode\n\t\t * @param {Object} [errorInfo]\n\t\t */\n\t\t_onError: function ( errorCode, errorInfo ) {\n\t\t\tvar error = errorInfo\n\t\t\t\t? wb.api.RepoApiError.newFromApiResponse( errorInfo )\n\t\t\t\t: errorCode;\n\n\t\t\tvar $elem = $( '#wbclient-linkItem-page' );\n\n\t\t\tif ( $elem.length === 0 ) {\n\t\t\t\t$elem = $( '#wbclient-linkItem-siteLinks' );\n\t\t\t}\n\n\t\t\t$elem.wbtooltip( {\n\t\t\t\tcontent: error,\n\t\t\t\tpermanent: true\n\t\t\t} );\n\n\t\t\tthis._removeSpinner();\n\t\t\t$elem.data( 'wbtooltip' ).show();\n\n\t\t\t// Remove the tooltip if the user clicks onto the dialog trying to correct the input\n\t\t\t// Also remove the tooltip in case the dialog is getting closed\n\t\t\tthis.$dialog.one( 'dialogclose click', function () {\n\t\t\t\tif ( $elem.data( 'wbtooltip' ) ) {\n\t\t\t\t\t$elem.data( 'wbtooltip' ).destroy();\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Returns a link to the given title on the repo.\n\t\t *\n\t\t * @param {string} title\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\t_linkRepoTitle: function ( title ) {\n\t\t\treturn this.options.repoArticlePath.replace( /\\$1/g, mw.util.wikiUrlencode( title ) );\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/jquery.wikibase/jquery.wikibase.siteselector.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":21,"column":null,"nodeType":"Block","endLine":21,"endColumn":null},{"ruleId":"no-shadow","severity":1,"message":"'event' is already declared in the upper scope on line 51 column 50.","line":54,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":54,"endColumn":40},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":135,"column":3,"nodeType":"Block","endLine":137,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":200,"column":3,"nodeType":"Block","endLine":202,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":211,"column":3,"nodeType":"Block","endLine":213,"endColumn":6}],"errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki at snater.com >\n */\n( function () {\n\t'use strict';\n\n\trequire( '../jquery.ui/jquery.ui.suggester.js' );\n\trequire( '../jquery.ui/jquery.ui.ooMenu.js' );\n\n\t/**\n\t * Site selector\n\t * Enhances an input box with auto-complete and auto-suggestion functionality for site ids.\n\t *\n\t * @example $( 'input' ).siteselector( { source: <{wikibase.Site[]}> } );\n\t *\n\t * @option {wikibase.Site[]|Function} source\n\t *         An array of Site objects that shall be used to provide suggestions. Alternatively, a\n\t *         function dynamically retrieving an array of Site objects may be provided.\n\t *\n\t * @option {number} [delay=150]\n\t *         Delay in milliseconds of the request querying for suggestions.\n\t *\n\t * @event selected\n\t *        Triggered whenever a site is selected or de-selected.\n\t *        (1) {jQuery.Event}\n\t *        (2) {string|null}\n\t */\n\t$.widget( 'wikibase.siteselector', $.ui.suggester, {\n\t\t/**\n\t\t * @see jQuery.ui.suggester.options\n\t\t */\n\t\toptions: {\n\t\t\tdelay: 150\n\t\t},\n\n\t\t/**\n\t\t * @type {wikibase.Site}\n\t\t */\n\t\t_selectedSite: null,\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._create\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\t$.ui.suggester.prototype._create.apply( this, arguments );\n\n\t\t\tthis.element\n\t\t\t.on( 'keydown.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.TAB ) {\n\t\t\t\t\t$( self.options.menu )\n\t\t\t\t\t.one( 'selected', function ( event, item ) {\n\t\t\t\t\t\tself.element.val( item.getValue() );\n\t\t\t\t\t} );\n\t\t\t\t} else if ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar degrade = true,\n\t\t\t\t\t\tfirstItem = self.options.menu.option( 'items' )[ 0 ];\n\n\t\t\t\t\tif ( firstItem ) {\n\t\t\t\t\t\tvar site = firstItem.getSite(),\n\t\t\t\t\t\t\tlabel = self._createItemLabel( site, '' ),\n\t\t\t\t\t\t\tvalue = self._createItemValue( site );\n\n\t\t\t\t\t\tif ( self._term === label || self._term === value ) {\n\t\t\t\t\t\t\tdegrade = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( degrade ) {\n\t\t\t\t\t\tself.options.menu.deactivate();\n\t\t\t\t\t\tself.element.val( self._term );\n\t\t\t\t\t\tself._selectedSite = null;\n\t\t\t\t\t\tself._trigger( 'selected', null, [ null ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'eachchange.' + this.widgetName, function ( event, previousValue ) {\n\t\t\t\tself._selectedSite = null;\n\t\t\t\tself._term = self.element.val();\n\n\t\t\t\tclearTimeout( self._searching );\n\t\t\t\tself._searching = setTimeout( function () {\n\t\t\t\t\tself.search()\n\t\t\t\t\t.done( function ( suggestions ) {\n\t\t\t\t\t\t// TODO: Store visibility in model\n\t\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\t\tif ( self.options.menu.element.is( ':visible' ) ) {\n\t\t\t\t\t\t\tself._selectFirstSite();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._trigger( 'selected', null, [ null ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}, self.options.delay );\n\t\t\t} )\n\t\t\t.on( 'siteselectoropen.' + this.widgetName, function () {\n\t\t\t\tself._selectFirstSite();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\t$( this.options.menu ).off( 'siteselector' );\n\t\t\t$.ui.suggester.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * Implicitly selects the first site from the suggested sites.\n\t\t */\n\t\t_selectFirstSite: function () {\n\t\t\tvar menu = this.options.menu,\n\t\t\t\tmenuItems = menu.option( 'items' ),\n\t\t\t\tsite = null;\n\n\t\t\t// TODO: Store visibility in model\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( menuItems.length > 0 && menu.element.is( ':visible' ) ) {\n\t\t\t\tthis.options.menu.activate( menuItems[ 0 ] );\n\t\t\t\tsite = menuItems[ 0 ].getSite();\n\t\t\t}\n\n\t\t\tif ( this._selectedSite !== site ) {\n\t\t\t\tthis._selectedSite = site;\n\t\t\t\tthis._trigger(\n\t\t\t\t\t'selected',\n\t\t\t\t\tnull,\n\t\t\t\t\tsite ? [ site.getId() ] : [ null ]\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._initMenu\n\t\t */\n\t\t_initMenu: function ( ooMenu ) {\n\t\t\tvar self = this;\n\n\t\t\t$.ui.suggester.prototype._initMenu.apply( this, arguments );\n\n\t\t\tthis.options.menu.element.addClass( 'wikibase-siteselector-list' );\n\n\t\t\t$( this.options.menu )\n\t\t\t.on( 'selected.siteselector', function ( event, item ) {\n\t\t\t\tif ( item instanceof $.wikibase.siteselector.Item ) {\n\t\t\t\t\tself._selectedSite = item.getSite();\n\t\t\t\t\tself.element.val( self._createItemValue( self._selectedSite ) );\n\t\t\t\t\tself._trigger( 'selected', null, [ self._selectedSite.getId() ] );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'blur.siteselector', function () {\n\t\t\t\tif ( self._selectedSite ) {\n\t\t\t\t\tself.element.val( self._createItemValue( self._selectedSite ) );\n\t\t\t\t} else if ( self.element.val() !== '' ) {\n\t\t\t\t\tself._selectFirstSite();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.options.menu.element\n\t\t\t.on( 'mouseleave', function () {\n\t\t\t\t// TODO: Store visibility in model\n\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\tif ( self.options.menu.element.is( ':visible' ) ) {\n\t\t\t\t\tself._selectedSite = null;\n\t\t\t\t\tself._selectFirstSite();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn ooMenu;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._move\n\t\t */\n\t\t_move: function ( direction, activeItem, allItems ) {\n\t\t\t$.ui.suggester.prototype._move.apply( this, arguments );\n\t\t\tif ( this._selectedSite === this.options.menu.getActiveItem().getSite() ) {\n\t\t\t\tthis.element.val( this._term );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._moveOffEdge\n\t\t */\n\t\t_moveOffEdge: function ( direction ) {\n\t\t\tif ( direction === 'previous' ) {\n\t\t\t\tvar menu = this.options.menu,\n\t\t\t\t\titems = menu.option( 'items' );\n\t\t\t\tmenu.activate( items[ items.length - 1 ] );\n\t\t\t\tthis.element.val( items[ items.length - 1 ].getValue() );\n\t\t\t} else {\n\t\t\t\t$.ui.suggester.prototype._moveOffEdge.apply( this, arguments );\n\t\t\t\tthis._selectedSite = null;\n\t\t\t\tthis._selectFirstSite();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._getSuggestions\n\t\t */\n\t\t_getSuggestions: function ( term ) {\n\t\t\tvar source = typeof this.options.source === 'function'\n\t\t\t\t? this.options.source()\n\t\t\t\t: this.options.source;\n\n\t\t\treturn this._getSuggestionsFromArray( term, source );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._getSuggestionsFromArray\n\t\t */\n\t\t_getSuggestionsFromArray: function ( term, source ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred();\n\n\t\t\tif ( term === '' ) {\n\t\t\t\treturn deferred.resolve( [], term ).promise();\n\t\t\t}\n\n\t\t\tvar suggestedSites = source.filter( function ( site ) {\n\t\t\t\treturn self._considerSuggestion( site );\n\t\t\t} );\n\n\t\t\tif ( suggestedSites.length === 0 ) {\n\t\t\t\tvar subDomain = this._grepSubDomainFromTerm();\n\n\t\t\t\tif ( subDomain ) {\n\t\t\t\t\tsuggestedSites = source.filter( function ( site ) {\n\t\t\t\t\t\tvar url = site.getUrlTo( '' ),\n\t\t\t\t\t\t\tindex = url.indexOf( '//' ) + 2;\n\n\t\t\t\t\t\treturn url.indexOf( subDomain, index ) === index;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn deferred.resolve( suggestedSites, term ).promise();\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @return {boolean}\n\t\t */\n\t\t_considerSuggestion: function ( site ) {\n\t\t\tvar check = [\n\t\t\t\tsite.getId(),\n\t\t\t\tsite.getShortName(),\n\t\t\t\tsite.getName(),\n\t\t\t\tsite.getShortName() + ' (' + site.getId() + ')'\n\t\t\t];\n\n\t\t\tfor ( var i = 0; i < check.length; i++ ) {\n\t\t\t\tif ( check[ i ].toLowerCase().indexOf( this._term.toLowerCase() ) === 0 ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * @return {string|null}\n\t\t * @private\n\t\t */\n\t\t_grepSubDomainFromTerm: function () {\n\t\t\t// Extract either a subdomain (the word after \"//\") or simply the first word.\n\t\t\tvar matches = /\\/\\/(\\w[\\w-]+)/.exec( this._term )\n\t\t\t\t|| /(\\w[\\w-]+)/.exec( this._term );\n\n\t\t\treturn matches ? matches[ 1 ].toLowerCase().replace( /[\\W_]+/g, '-' ) : null;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._createMenuItemFromSuggestion\n\t\t * @protected\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @param {string} requestTerm\n\t\t * @return {jQuery.wikibase.siteselector.Item}\n\t\t */\n\t\t_createMenuItemFromSuggestion: function ( site, requestTerm ) {\n\t\t\treturn new $.wikibase.siteselector.Item(\n\t\t\t\tthis._createItemLabel( site, requestTerm ),\n\t\t\t\tthis._createItemValue( site ),\n\t\t\t\tsite\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Creates the label of a suggestion item.\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @param {string} requestTerm\n\t\t * @return {string}\n\t\t */\n\t\t_createItemLabel: function ( site, requestTerm ) {\n\t\t\tvar highlightSubstring = require( '../util.highlightSubstring.js' );\n\t\t\treturn highlightSubstring( requestTerm, site.getShortName() )\n\t\t\t+ ' (' + highlightSubstring( requestTerm, site.getId() ) + ')';\n\t\t},\n\n\t\t/**\n\t\t * Creates the value of a suggestion item.\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @return {string}\n\t\t */\n\t\t_createItemValue: function ( site ) {\n\t\t\treturn site.getId();\n\t\t},\n\n\t\t/**\n\t\t * Returns the currently selected site.\n\t\t *\n\t\t * @return {wikibase.Site|null}\n\t\t */\n\t\tgetSelectedSite: function () {\n\t\t\treturn this._selectedSite;\n\t\t}\n\t} );\n\n\t/**\n\t * Default siteselector suggestion menu item.\n\t *\n\t * @constructor\n\t * @extends jQuery.ui.ooMenu.Item\n\t *\n\t * @param {string|jQuery} label\n\t * @param {string} value\n\t * @param {wikibase.Site} site\n\t *\n\t * @throws {Error} if a required parameter is not specified.\n\t */\n\tvar Item = function ( label, value, site ) {\n\t\t\tif ( !label || !value || !site ) {\n\t\t\t\tthrow new Error( 'Required parameter(s) not specified' );\n\t\t\t}\n\n\t\t\tthis._label = label;\n\t\t\tthis._value = value;\n\t\t\tthis._site = site;\n\t\t},\n\t\tinherit = require( '../util.inherit.js' );\n\n\tItem = inherit(\n\t\t$.ui.ooMenu.Item,\n\t\tItem,\n\t\t{\n\t\t\t/**\n\t\t\t * @type {wikibase.Site}\n\t\t\t */\n\t\t\t_site: null,\n\n\t\t\t/**\n\t\t\t * @return {wikibase.Site}\n\t\t\t */\n\t\t\tgetSite: function () {\n\t\t\t\treturn this._site;\n\t\t\t}\n\t\t}\n\t);\n\n\t$.extend( $.wikibase.siteselector, {\n\t\tItem: Item\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/jquery.wikibase/jquery.wikibase.wbtooltip.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":14,"column":null,"nodeType":"Block","endLine":14,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":21,"column":null,"nodeType":"Block","endLine":21,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":27,"column":null,"nodeType":"Block","endLine":27,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in namepath: afterhide:","line":31,"column":null,"nodeType":"Block","endLine":31,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":164,"column":3,"nodeType":"Block","endLine":169,"endColumn":6},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"triggers\".","line":262,"column":null,"nodeType":"Block","endLine":262,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"TODO:\".","line":283,"column":null,"nodeType":"Block","endLine":283,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":291,"column":3,"nodeType":"Block","endLine":293,"endColumn":6}],"errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\n\t'use strict';\n\n\tvar PARENT = $.Widget;\n\n\t/**\n\t * Tooltip widget enhancing jQuery.tipsy.\n\t *\n\t * @option content {string|jQuery|Error} The tooltip balloon's content.\n\t *         (REQUIRED)\n\t *\n\t * @option permanent {boolean} Whether the tooltip shall be visible permanently (only closing with a\n\t *         click outside of it) or when hovering.\n\t *         Default: false\n\t *\n\t * @option gravity {string} Two-letter string consisting out of a combination of the letter 'n', 's'\n\t *         and 'e', 'w'. This specifies the direction the tooltip balloon will be anchored to. The\n\t *         direction is to be specified assuming an left-to-right context and is mirrored when\n\t *         detecting an RTL context.\n\t *         Default: 'nw'\n\t *\n\t * @option $anchor {jQuery} An anchor where the tooltip's tip shall point on. By default (null), it\n\t *         is the node the tooltip widget is initialized on.\n\t *         Default: null\n\t *\n\t * @event afterhide: Triggered after the tooltip has been hidden.\n\t *        (1) jQuery.Event\n\t */\n\t$.widget( 'wikibase.wbtooltip', PARENT, {\n\t\t/**\n\t\t * Options.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\toptions: {\n\t\t\tcontent: null,\n\t\t\tpermanent: false,\n\t\t\tgravity: 'nw',\n\t\t\t$anchor: null\n\t\t},\n\n\t\t/**\n\t\t * Tipsy tooltip plugin object.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t_tipsy: null,\n\n\t\t/**\n\t\t * @see jQuery.Widget._create\n\t\t * @throws {Error} when no content has been specified in the options.\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( typeof this.options.content === 'string' ) {\n\t\t\t\t// Tipsy, in general, makes use of the \"title\" attribute. Therefore, when setting a\n\t\t\t\t// plain string as content, just assign it to the \"title\" attribute:\n\t\t\t\tthis.element.attr( 'title', this.options.content );\n\t\t\t} else {\n\t\t\t\t// Init Tipsy with some placeholder since the tooltip message would not show without the\n\t\t\t\t// title attribute being set. However, setting a complex HTML structure cannot be done\n\t\t\t\t// via the title tag, so, the content is stored in a custom variable that will be\n\t\t\t\t// injected when the message is about to get displayed.\n\t\t\t\tthis.element.attr( 'title', '.' );\n\t\t\t}\n\n\t\t\t// Flip horizontal gravity when in RTL context:\n\t\t\tvar gravity = this._evaluateGravity( this.options.gravity );\n\n\t\t\t// Init tipsy:\n\t\t\tif ( !this.element.data( 'tipsy' ) ) {\n\t\t\t\tthis.element.tipsy( {\n\t\t\t\t\tgravity: gravity,\n\t\t\t\t\ttrigger: 'manual', // Prevent Tipsy's native hover handling.\n\t\t\t\t\thtml: true\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\t// If Tipsy is initialised already, just overwrite the gravity:\n\t\t\t\tthis.element.data( 'tipsy' ).options.gravity = gravity;\n\t\t\t}\n\n\t\t\tthis._tipsy = this.element.data( 'tipsy' );\n\n\t\t\tthis.element.addClass( this.widgetFullName );\n\n\t\t\tif ( !this.options.permanent ) {\n\t\t\t\tthis.element\n\t\t\t\t.off( '.' + this.widgetName )\n\t\t\t\t.on( 'mouseenter.' + this.widgetName, function ( event ) {\n\t\t\t\t\tself.show();\n\t\t\t\t} )\n\t\t\t\t.on( 'mouseleave.' + this.widgetName, function ( event ) {\n\t\t\t\t\tself.hide();\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Reposition tooltip when resizing the browser window:\n\t\t\t$( window )\n\t\t\t.off( '.' + this.widgetName ) // Never need that event more than once.\n\t\t\t.on( 'resize.' + this.widgetName, function ( event ) {\n\t\t\t\t$( ':' + self.widgetFullName ).each( function ( i, node ) {\n\t\t\t\t\tvar tooltip = $( node ).data( self.widgetName );\n\n\t\t\t\t\tif ( tooltip\n\t\t\t\t\t\t&& tooltip._tipsy.$tip\n\t\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\t\t&& tooltip._tipsy.$tip.is( ':visible' )\n\t\t\t\t\t\t&& tooltip.option( 'permanent' )\n\t\t\t\t\t) {\n\t\t\t\t\t\ttooltip._tipsy.$tip.hide();\n\t\t\t\t\t\t// Trigger show() to reposition:\n\t\t\t\t\t\t// TODO: Implement option to show tooltip without a fade animation to prevent\n\t\t\t\t\t\t//  flickering.\n\t\t\t\t\t\ttooltip.show( tooltip._permanent );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis._tipsy.tip().remove();\n\t\t\tthis.element.off( 'mouseenter.' + this.widgetName + ' mouseleave.' + this.widgetName );\n\t\t\tthis.element.removeData( 'tipsy' );\n\t\t\tthis._tipsy = null;\n\n\t\t\t// Detach window event handler if no widget instances are left:\n\t\t\tif ( $( ':' + this.widgetFullName ).length === 0 ) {\n\t\t\t\t$( window ).off( '.' + this.widgetName );\n\t\t\t}\n\n\t\t\tPARENT.prototype.destroy.apply( this, arguments );\n\t\t},\n\n\t\t/**\n\t\t * Hides the tooltip balloon and destroys the tooltip object afterwards.\n\t\t *\n\t\t * @param {boolean} [remove] Whether to remove the tooltip's node from the DOM.\n\t\t */\n\t\tdegrade: function ( remove ) {\n\t\t\tvar self = this;\n\n\t\t\tthis.element.one( 'wbtooltipafterhide', function ( event ) {\n\t\t\t\tself.destroy();\n\t\t\t\tif ( remove ) {\n\t\t\t\t\tself.element.remove();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.hide();\n\t\t},\n\n\t\t/**\n\t\t * Evaluates a given gravity string according to the language direction flipping the horizontal\n\t\t * gravity in RTL context.\n\t\t *\n\t\t * @param {string} gravity\n\t\t */\n\t\t_evaluateGravity: function ( gravity ) {\n\t\t\tif ( document.documentElement.dir === 'rtl' ) {\n\t\t\t\tif ( gravity.search( /e/ ) !== -1 ) {\n\t\t\t\t\tgravity = gravity.replace( /e/g, 'w' );\n\t\t\t\t} else {\n\t\t\t\t\tgravity = gravity.replace( /w/g, 'e' );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn gravity;\n\t\t},\n\n\t\t/**\n\t\t * Shows the tooltip balloon.\n\t\t */\n\t\tshow: function () {\n\t\t\tvar self = this;\n\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( this._tipsy.$tip && this._tipsy.$tip.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// The native Tipsy tooltip does not allow jQuery nodes to be set as content and when\n\t\t\t// triggering Tipsy's show() method, the $tip is removed from the DOM while the $tips\n\t\t\t// position is also set within the show() method. To work around that, we trigger showing\n\t\t\t// the tooltip before filling it with content and cache the initial position.\n\t\t\t// TODO: This is not the most elegant solution since the $tip might reach out of the\n\t\t\t// viewport.\n\t\t\t// The DOM content needs to be cloned since IE8 will lose the reference to the DOM content\n\t\t\t// when the inner HTML is removed within tipsy's native show() method.\n\t\t\tvar content = null;\n\n\t\t\tif ( this.options.content instanceof $ ) {\n\t\t\t\tcontent = this.options.content.clone( true, true );\n\t\t\t}\n\n\t\t\t// If a tooltip anchor is specified, use that for positioning the tip by overwriting the\n\t\t\t// element referenced by Tipsy. In order for Tipsy's show() method to not abort, the anchor\n\t\t\t// node needs to have the \"title\" attribute set.\n\t\t\tif ( this.options.$anchor ) {\n\t\t\t\tthis._tipsy.$element = this.options.$anchor;\n\t\t\t\tif ( !this._tipsy.$element.attr( 'title' ) ) {\n\t\t\t\t\tthis._tipsy.$element.attr( 'title', '.' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._tipsy.show();\n\n\t\t\tthis._tipsy.$tip.addClass( this.widgetFullName + '-tip' );\n\n\t\t\tvar offset = this._tipsy.$tip.offset(),\n\t\t\t\theight = this._tipsy.$tip.height();\n\n\t\t\tif ( this.options.content.code ) {\n\t\t\t\t// Content is an error object.\n\t\t\t\tthis._tipsy.tip().addClass( 'wb-error' );\n\n\t\t\t\t// If not re-constructed on showing, click event on inner element (e.g. Details link)\n\t\t\t\t// will be lost.\n\t\t\t\tcontent = this._buildErrorTooltip();\n\t\t\t}\n\n\t\t\tif ( this.options.permanent ) {\n\t\t\t\t// Hide error tooltip when clicking outside of it by suppressing clicks on the $tip from\n\t\t\t\t// bubbling:\n\t\t\t\tthis._tipsy.tip().on( 'mousedown.' + this.widgetName, function ( event ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t} );\n\n\t\t\t\t$( window ).one( 'mousedown.' + this.widgetName, function ( event ) {\n\t\t\t\t\t// Tipsy might be destroyed already.\n\t\t\t\t\tif ( self._tipsy ) {\n\t\t\t\t\t\tself.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( typeof this.options.content !== 'string' ) {\n\t\t\t\tthis._tipsy.tip().find( '.tipsy-inner' ).empty().append( content );\n\t\t\t}\n\n\t\t\t// Reposition $tip since Tipsy evaluated the position before we filled it with DOM content:\n\t\t\tif ( this._tipsy.options.gravity.charAt( 0 ) === 's' ) {\n\t\t\t\tthis._tipsy.$tip.offset(\n\t\t\t\t\t{ top: offset.top - this._tipsy.$tip.height() + height, left: offset.left }\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Hides the tooltip balloon.\n\t\t *\n\t\t * @triggers afterhide\n\t\t */\n\t\thide: function () {\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( !this._tipsy || !this._tipsy.$tip || !this._tipsy.$tip.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._tipsy.tip().off( '.' + this.widgetName );\n\t\t\tthis._tipsy.hide();\n\n\t\t\t// TODO: Implement afterHide properly to be called within some callback of tipsy.hide() or\n\t\t\t// (probably) overwrite tipsy's hide().\n\t\t\tthis._trigger( 'afterhide' );\n\t\t},\n\n\t\t/**\n\t\t * Constructs the DOM structure displayed within an error tooltip.\n\t\t *\n\t\t * @return {jQuery}\n\t\t *\n\t\t * @TODO: Error tooltip should be a separate tooltip derivative.\n\t\t */\n\t\t_buildErrorTooltip: function () {\n\t\t\tvar buildErrorOutput = require( '../wikibase.buildErrorOutput.js' );\n\t\t\treturn buildErrorOutput( this.options.content )\n\t\t\t\t.addClass( this.widgetFullName + '-error' );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.option\n\t\t */\n\t\toption: function ( key, value ) {\n\t\t\tif ( key === 'gravity' ) {\n\t\t\t\t// Consider language direction:\n\t\t\t\tvalue = this._evaluateGravity( value );\n\t\t\t}\n\t\t\treturn PARENT.prototype.option.call( this, key, value );\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/util.highlightSubstring.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/util.inherit.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/wikibase.buildErrorOutput.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/wikibase.client.PageConnector.js","messages":[{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":36,"column":null,"nodeType":"Block","endLine":36,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":41,"column":null,"nodeType":"Block","endLine":41,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":46,"column":null,"nodeType":"Block","endLine":46,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":51,"column":null,"nodeType":"Block","endLine":51,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":56,"column":null,"nodeType":"Block","endLine":56,"endColumn":null}],"errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Marius Hoch < hoo@online.de >\n */\n( function ( wb ) {\n\t'use strict';\n\n\t/**\n\t * PageConnector connects two articles easily.\n\t *\n\t * @constructor\n\t *\n\t * @param {wikibase.api.RepoApi} repoApi\n\t * @param {string} firstSiteId\n\t * @param {string} firstPageName\n\t * @param {string} secondSiteId\n\t * @param {string} secondPageName\n\t */\n\tvar PageConnector = function PageConnector(\n\t\trepoApi,\n\t\tfirstSiteId,\n\t\tfirstPageName,\n\t\tsecondSiteId,\n\t\tsecondPageName\n\t) {\n\t\tthis._repoApi = repoApi;\n\n\t\tthis._firstSiteId = firstSiteId;\n\t\tthis._firstPageName = firstPageName;\n\t\tthis._secondSiteId = secondSiteId;\n\t\tthis._secondPageName = secondPageName;\n\t};\n\n\t$.extend( PageConnector.prototype, {\n\t\t/**\n\t\t * @type wikibase.api.RepoApi\n\t\t */\n\t\t_repoApi: null,\n\n\t\t/**\n\t\t * @type string\n\t\t */\n\t\t_firstSiteId: null,\n\n\t\t/**\n\t\t * @type string\n\t\t */\n\t\t_firstPageName: null,\n\n\t\t/**\n\t\t * @type string\n\t\t */\n\t\t_secondSiteId: null,\n\n\t\t/**\n\t\t * @type string\n\t\t */\n\t\t_secondPageName: null,\n\n\t\t/**\n\t\t * Gets a list of pages that will also be linked with the first page. This may visualize\n\t\t * potential side effects of a merge to users.\n\t\t *\n\t\t * @return {jQuery.promise}\n\t\t */\n\t\tgetNewlyLinkedPages: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = new $.Deferred();\n\n\t\t\tthis._getEntityForPage( this._secondSiteId, this._secondPageName )\n\t\t\t.fail( deferred.reject )\n\t\t\t.done( function ( data ) {\n\t\t\t\tvar entity, siteLinkCount;\n\n\t\t\t\tif ( data.entities[ '-1' ] ) {\n\t\t\t\t\tdeferred.resolve( {} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tentity = self._extractEntity( data );\n\n\t\t\t\t// Count site links\n\t\t\t\tsiteLinkCount = self._countSiteLinks( entity );\n\n\t\t\t\tdeferred.resolve( siteLinkCount ? entity : {} );\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Get the entity for a given page in case there is one\n\t\t *\n\t\t * @param {string} siteId\n\t\t * @param {string} pageName\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\t_getEntityForPage: function ( siteId, pageName ) {\n\t\t\treturn this._repoApi.getEntitiesByPage(\n\t\t\t\tsiteId,\n\t\t\t\tpageName,\n\t\t\t\t[ 'info', 'sitelinks' ],\n\t\t\t\t'',\n\t\t\t\ttrue\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Get the (first) entity object from an API response.\n\t\t *\n\t\t * @param {Object} apiResult\n\t\t *\n\t\t * @return {Object|undefined} Entity as returned by the API\n\t\t */\n\t\t_extractEntity: function ( apiResult ) {\n\t\t\tfor ( var i in apiResult.entities ) {\n\t\t\t\tif ( apiResult.entities[ i ].sitelinks ) {\n\t\t\t\t\treturn apiResult.entities[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Counts the number of sites attached to a given entity.\n\t\t *\n\t\t * @param {Object} entity\n\t\t *\n\t\t * @return {number}\n\t\t */\n\t\t_countSiteLinks: function ( entity ) {\n\t\t\tvar siteLinkCount = 0,\n\t\t\t\ti;\n\n\t\t\tfor ( i in entity.sitelinks ) {\n\t\t\t\tif ( entity.sitelinks[ i ].site ) {\n\t\t\t\t\tsiteLinkCount += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn siteLinkCount;\n\t\t},\n\n\t\t/**\n\t\t * Links the two articles by either creating a new item, updating an existing one or merging two\n\t\t * existing ones.\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tlinkPages: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = new $.Deferred();\n\n\t\t\tthis._getEntityForPage( self._firstSiteId, self._firstPageName )\n\t\t\t.done( function ( data ) {\n\t\t\t\t// Use the normalized title from now on (e.g. for creating a new item with proper\n\t\t\t\t// titles).\n\t\t\t\tif ( data.normalized ) {\n\t\t\t\t\tself._firstPageName = data.normalized.n.to;\n\t\t\t\t}\n\n\t\t\t\tif ( !data.entities[ '-1' ] ) {\n\t\t\t\t\tvar entity = self._extractEntity( data );\n\n\t\t\t\t\t// The first page has an entity attached, so link/ merge the second page with it\n\t\t\t\t\tself._linkOrMergeSecondPage( entity )\n\t\t\t\t\t.done( deferred.resolve )\n\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t// There is no item for the first page ... maybe there's one for the second\n\t\t\t\t\tself._linkFirstPageOrCreateItem()\n\t\t\t\t\t.done( deferred.resolve )\n\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( deferred.reject );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Links the second page with the given entity. If page is linked to an item already, a merge is\n\t\t * performed.\n\t\t *\n\t\t * @param {Object} entity\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\t_linkOrMergeSecondPage: function ( entity ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = new $.Deferred();\n\n\t\t\tthis._getEntityForPage( self._secondSiteId, self._secondPageName )\n\t\t\t.done( function ( data ) {\n\t\t\t\tif ( data.normalized ) {\n\t\t\t\t\t// Use the normalized title from now on (e.g. for creating a new item with proper\n\t\t\t\t\t// titles).\n\t\t\t\t\tself._secondPageName = data.normalized.n.to;\n\t\t\t\t}\n\n\t\t\t\tif ( data.entities[ '-1' ] ) {\n\t\t\t\t\t// The second page has no item yet, so just link it with the given entity\n\t\t\t\t\tself._setSiteLink( entity, self._secondSiteId, self._secondPageName )\n\t\t\t\t\t.done( deferred.resolve )\n\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t// The page already has an item... this means we have to perform a merge\n\t\t\t\t\tself._mergeEntities( entity, self._extractEntity( data ) )\n\t\t\t\t\t.done( deferred.resolve )\n\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( deferred.reject );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * If the second page has an item, it links the first page with the item of the second page. If\n\t\t * not, a new item is created.\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\t_linkFirstPageOrCreateItem: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = new $.Deferred();\n\n\t\t\tthis._getEntityForPage( self._secondSiteId, self._secondPageName )\n\t\t\t.fail( deferred.reject )\n\t\t\t.done( function ( data ) {\n\t\t\t\t// Use the normalized title from now on (e.g. for creating a new item with proper\n\t\t\t\t// titles).\n\t\t\t\tif ( data.normalized ) {\n\t\t\t\t\tself._secondPageName = data.normalized.n.to;\n\t\t\t\t}\n\n\t\t\t\tif ( data.entities[ '-1' ] ) {\n\t\t\t\t\t// Neither the first nor the second page have an item yet, create one\n\t\t\t\t\tself._createItem(\n\t\t\t\t\t\tself._firstSiteId,\n\t\t\t\t\t\tself._firstPageName,\n\t\t\t\t\t\tself._secondSiteId,\n\t\t\t\t\t\tself._secondPageName\n\t\t\t\t\t)\n\t\t\t\t\t.done( deferred.resolve )\n\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t// There already is an entity with the second page linked, so just link the first\n\t\t\t\t\t// one\n\t\t\t\t\tvar entity = self._extractEntity( data );\n\n\t\t\t\t\tself._setSiteLink( entity, self._firstSiteId, self._firstPageName )\n\t\t\t\t\t.done( deferred.resolve )\n\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Links an item with a page.\n\t\t *\n\t\t * @param {Object} entity\n\t\t * @param {string} siteId\n\t\t * @param {string} pageName\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\t_setSiteLink: function ( entity, siteId, pageName ) {\n\t\t\treturn this._repoApi.setSitelink(\n\t\t\t\tentity.id,\n\t\t\t\tentity.lastrevid,\n\t\t\t\tsiteId,\n\t\t\t\tpageName\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Merges two entities.\n\t\t *\n\t\t * @param {Object} firstEntity\n\t\t * @param {Object} secondEntity\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\t_mergeEntities: function ( firstEntity, secondEntity ) {\n\t\t\tvar firstSiteLinkCount = this._countSiteLinks( firstEntity ),\n\t\t\t\tsecondSiteLinkCount = this._countSiteLinks( secondEntity ),\n\t\t\t\tfromId,\n\t\t\t\ttoId;\n\n\t\t\t// XXX: We could get all properties above and then use a more complete\n\t\t\t// comparison, maybe by abusing JSON.stringify to get real item sizes. That\n\t\t\t// *might* be a better estimate?!\n\t\t\tif ( firstSiteLinkCount <= secondSiteLinkCount ) {\n\t\t\t\tfromId = firstEntity.id;\n\t\t\t\ttoId = secondEntity.id;\n\t\t\t} else {\n\t\t\t\ttoId = firstEntity.id;\n\t\t\t\tfromId = secondEntity.id;\n\t\t\t}\n\n\t\t\treturn this._repoApi.mergeItems(\n\t\t\t\tfromId,\n\t\t\t\ttoId,\n\t\t\t\t// Ignore label and description conflicts, but fail on link conflicts\n\t\t\t\t[ 'label', 'description' ]\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Creates an item in the repository.\n\t\t *\n\t\t * @param {string} firstSiteId\n\t\t * @param {string} firstPageName\n\t\t * @param {string} secondSiteId\n\t\t * @param {string} secondPageName\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\t_createItem: function ( firstSiteId, firstPageName, secondSiteId, secondPageName ) {\n\t\t\t// JSON data for the new entity\n\t\t\tvar entityData = {\n\t\t\t\t\tlabels: {},\n\t\t\t\t\tsitelinks: {}\n\t\t\t\t},\n\t\t\t\twbSites = require( './wikibase.sites.js' ),\n\t\t\t\tfirstSite = wbSites.getSite( firstSiteId ),\n\t\t\t\tsecondSite = wbSites.getSite( secondSiteId );\n\n\t\t\t// Labels (page titles)\n\t\t\tentityData.labels[ firstSite.getLanguageCode() ] = {\n\t\t\t\tlanguage: firstSite.getLanguageCode(),\n\t\t\t\tvalue: firstPageName\n\t\t\t};\n\t\t\tentityData.labels[ secondSite.getLanguageCode() ] = {\n\t\t\t\tlanguage: secondSite.getLanguageCode(),\n\t\t\t\tvalue: secondPageName\n\t\t\t};\n\n\t\t\t// Sitelinks\n\t\t\tentityData.sitelinks[ firstSite.getId() ] = {\n\t\t\t\tsite: firstSite.getId(),\n\t\t\t\ttitle: firstPageName\n\t\t\t};\n\t\t\tentityData.sitelinks[ secondSite.getId() ] = {\n\t\t\t\tsite: secondSite.getId(),\n\t\t\t\ttitle: secondPageName\n\t\t\t};\n\n\t\t\treturn this._repoApi.createEntity( 'item', entityData );\n\t\t}\n\n\t} );\n\n\tmodule.exports = wb.PageConnector = PageConnector;\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/wikibase.client.action.edit.collapsibleFooter.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/wikibase.client.data-bridge.app.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/wikibase.client.getMwApiForRepo.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'mediaWiki' is undefined.","line":9,"column":null,"nodeType":"Block","endLine":9,"endColumn":null}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function () {\n\t'use strict';\n\n\t/**\n\t * @return {mediaWiki.Api}\n\t */\n\tvar getMwApiForRepo = function () {\n\t\tvar repoConfig = mw.config.get( 'wbRepo' ),\n\t\t\trepoApiEndpoint = repoConfig.url + repoConfig.scriptPath + '/api.php';\n\n\t\treturn wikibase.api.getLocationAgnosticMwApi( repoApiEndpoint );\n\t};\n\n\tmodule.exports = getMwApiForRepo;\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/wikibase.client.linkitem.init.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/resources/wikibase.sites.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/client/sql/abstract/entity_usage.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/composer.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/extension-client.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/extension-repo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/jsduck.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/abs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ace.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ady-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/aeb-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/af.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/alt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ami.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/an.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ang.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ann.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/anp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/arq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ary.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/arz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/as.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ase.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ast.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/atj.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/av.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/avk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/awa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/az.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/azb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ba.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ban.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bbc-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bci.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bcl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/be-tarask.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/be.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bgn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bho.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bjn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/blc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bpy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bqi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/brx.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/btm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/bto.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ca.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/cdo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ce.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ceb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ckb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/cnr-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/co.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/cop.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/crh-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/crh-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/cs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/csb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/cu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/cv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/cy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/da.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/dag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/de-formal.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/din.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/diq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/dsb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/dty.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/el.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/en-gb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/eo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/es.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/et.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/eu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/fa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ff.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/fi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/fit.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/fo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/fr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/frc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/frp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/frr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/fur.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/fy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ga.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gaa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gcr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gld.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/glk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gom-deva.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gom-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gor.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/got.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/grc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gsw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/gu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/guc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hak.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/he.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hil.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hoc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hrx.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hsb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ht.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/hyw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ia.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/id.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ie.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ig.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ilo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/inh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/io.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/is.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/it.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ja.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/jam.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/jut.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/jv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ka.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kbp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kcg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/khw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kjp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kk-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/km.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ko.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/krc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/krl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ksh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ksw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ku-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kum.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/kw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ky.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/la.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lbe.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lez.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lfn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/li.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lij.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/liv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lki.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lkt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lld.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lmo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lrc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/luz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lzh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/lzz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mad.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mai.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/min.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ml.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mnc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mni.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mnw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mrh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ms-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mui.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mwl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/my.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/myv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/mzn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nah.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nan.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nds-nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nds.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ne.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nia.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nqo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/nys.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/oc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ojb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/olo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/om.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/or.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/os.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pam.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pcd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pfl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pnb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ps.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pt-br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/pwn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/qqq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/qu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/qwh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/rej.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/rif.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/rm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/rmc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ro.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/roa-tara.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ru.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sah.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sat.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/scn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sco.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sdc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sdh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/se.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ses.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sgs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/shi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/shn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/shy-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/si.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sjd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/skr-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sli.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/smn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/so.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sr-ec.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sr-el.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sty.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/su.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/sw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/szl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/szy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ta.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tay.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tcy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/te.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tg-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/th.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ti.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tly.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/trv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tt-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tt-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/tzm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/udm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ug-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/uk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/ur.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/uz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/vec.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/vep.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/vi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/vo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/vro.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/wa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/war.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/wls.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/wo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/wuu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/xmf.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/xsy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/yi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/yo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/yue.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/zea.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/zgh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/zh-hans.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/i18n/zh-hant.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/packages/wikibase/changes/composer.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/resources/wikibase.Site.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"note:\".","line":67,"column":null,"nodeType":"Block","endLine":67,"endColumn":null}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * JavaScript giving information about a site of the 'Wikibase' extension.\n *\n * @see https://www.mediawiki.org/wiki/Extension:Wikibase\n *\n * @license GPL-2.0-or-later\n * @author Daniel Werner\n */\n\n// Defining the top level variables to be used in other places.\nthis.wikibase = this.wikibase || {};\nthis.wb = this.wikibase;\n\n( function ( wb ) {\n\t'use strict';\n\n\t/**\n\t * Offers information about a site known to the local Wikibase installation.\n\t *\n\t * @constructor\n\t */\n\tvar SELF = wb.Site = function WbSite( siteDetails ) {\n\t\t// TODO: Validate site details, throw error if invalid.\n\t\t// TODO: Keep copy of details, no reference.\n\t\tthis._siteDetails = siteDetails;\n\t};\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * Returns the sites id.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetId: function () {\n\t\t\treturn this._siteDetails.id;\n\t\t},\n\n\t\t/**\n\t\t * Returns the full name of the site. This will return the name in the users language.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetName: function () {\n\t\t\treturn this._siteDetails.name;\n\t\t},\n\n\t\t/**\n\t\t * Returns the short name of the site. This will return the name in the users language.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetShortName: function () {\n\t\t\treturn this._siteDetails.shortName;\n\t\t},\n\n\t\t/**\n\t\t * Returns the group of the site.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetGroup: function () {\n\t\t\treturn this._siteDetails.group;\n\t\t},\n\n\t\t/**\n\t\t * Returns the link to the API\n\t\t *\n\t\t * @note: this might not be necessary later since we might want to do only API call to the\n\t\t *        base wiki which will handle the calls to the sites.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetApi: function () {\n\t\t\treturn this._siteDetails.apiUrl;\n\t\t},\n\n\t\t/**\n\t\t * Returns the url to a page of the site. To get a full html ready link, use getLinkTo().\n\t\t *\n\t\t * @todo decide whether we want to stick with this method which relies on having some knowledge about the php\n\t\t *       Site stuff (e.g. that we have to replace $1 in this._siteDetails.pageUrl) or whether we want to replace\n\t\t *       this with a API call to the foreign site (even in that case we have to know which API module to call and\n\t\t *       what parameters to pass in case we have a non-MW installation!)\n\t\t *\n\t\t * @param {string} pageTitle title of the page within the site\n\t\t * @return {string}\n\t\t */\n\t\tgetUrlTo: function ( pageTitle ) {\n\t\t\tpageTitle = this._urlEncodeSite( pageTitle.trim() );\n\t\t\treturn this._siteDetails.pageUrl.replace( /\\$1/g, pageTitle );\n\t\t},\n\n\t\t/**\n\t\t * Returns a html link to a site of the site. To get the url only, use getUrlTo().\n\t\t *\n\t\t * @param {string} pageTitle title of the site within the site\n\t\t * @return {jQuery} link to the site\n\t\t */\n\t\tgetLinkTo: function ( pageTitle ) {\n\t\t\tvar url = this.getUrlTo( pageTitle );\n\t\t\treturn $( '<a>' ).attr( 'href', url ).text( pageTitle );\n\t\t},\n\n\t\t/**\n\t\t * Returns the site's language code.\n\t\t *\n\t\t * @return {string} language code\n\t\t */\n\t\tgetLanguageCode: function () {\n\t\t\treturn this._siteDetails.languageCode;\n\t\t},\n\n\t\t/**\n\t\t * Returns the site language's text direction.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetLanguageDirection: function () {\n\t\t\tvar languageCode = this.getLanguageCode();\n\t\t\treturn $.uls && $.uls.data.languages[ languageCode ]\n\t\t\t\t? $.uls.data.getDir( languageCode )\n\t\t\t\t: 'auto';\n\t\t},\n\n\t\t/**\n\t\t * Does the encoding for a site so it can be used within the url to the site.\n\t\t * This should propably be over written in case the site is not a MediaWiki installation.\n\t\t *\n\t\t * @param {string} pageTitle\n\t\t * @return {string}\n\t\t */\n\t\t_urlEncodeSite: function ( pageTitle ) {\n\t\t\t// we don't create a mw.Title here since the given title should be normalized and could be one from a foreign\n\t\t\t// wiki which has different namespace config!\n\t\t\treturn mw.util.wikiUrlencode( pageTitle );\n\t\t}\n\n\t} );\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/tests/phpunit/Units/testunits.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/lib/tests/qunit/wikibase.Site.tests.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/abs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ace.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ady-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/aeb-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/aeb-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/af.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/alt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ami.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/an.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ang.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ann.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/anp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ast.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/bcl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/be-tarask.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/bg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/bn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ca.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ce.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ceb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/cs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/da.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/diq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/eo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/es.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/et.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/eu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/fa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/fi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/fr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/gl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/he.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/hi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/hr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/hu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ia.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/id.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/is.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/it.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ja.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/jv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ka.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/kk-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ko.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ksh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ku-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/lb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/lki.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/lt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/lv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/mk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/mr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/my.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/nap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/nb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/nn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/oc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/pam.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/pl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ps.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/pt-br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/pt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/qqq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ro.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/roa-tara.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ru.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/scn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sco.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/si.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/skr-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sr-ec.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sr-el.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/su.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/sw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/szy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/tay.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/tcy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/te.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/th.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/tl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/tr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/ug-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/uk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/yi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/zh-hans.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/api/zh-hant.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/arc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/arq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ary.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/arz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/as.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ase.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ast.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/atj.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/av.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/avk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/awa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/az.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/azb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ba.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ban.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bar.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bbc-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bci.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bcl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bdr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/be-tarask.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/be.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bgn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bho.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bjn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/blc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bpy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bqi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/brx.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/btm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/bto.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ca.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cak.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cdo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ce.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ceb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/chr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cjy-hant.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ckb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cnr-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/co.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cop.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/crh-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/crh-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/csb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/cy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/da.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/dag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/de-formal.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/din.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/diq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/dsb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/dty.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/dv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ee.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/el.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/eml.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/en-ca.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/en-gb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/eo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/es.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/et.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/eu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ext.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ff.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fit.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fon.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/frc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/frp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/frr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fur.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/fy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ga.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gaa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gcf.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gcr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gld.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/glk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gom-deva.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gom-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gor.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/got.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/grc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gsw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/guc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/gv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ha.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hak.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/he.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hif-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hil.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hoc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hrx.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hsb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ht.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/hyw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ia.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/id.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ie.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ig.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ilo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/inh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/io.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/is.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/it.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ja.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/jam.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/jut.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/jv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ka.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kbp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kcg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kea.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/khw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kip.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kiu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kjh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kjp.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kk-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/km.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ko.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/krc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kri.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/krl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ksh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ksw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ku-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kum.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/kw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ky.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/la.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lad.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lbe.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lez.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lfn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/li.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lij.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/liv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lki.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lkt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lld.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lmo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ln.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lrc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/luz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lzh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/lzz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mad.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mai.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/map-bms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mdf.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mg.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mhr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/min.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ml.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mnc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mni.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mnw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mrh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ms-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mui.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mwl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/my.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/myv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/mzn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nah.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nan.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nds-nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nds.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ne.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nia.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nqo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nso.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/nys.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/oc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ojb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/olo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/om.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/or.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/os.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/osi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pag.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pam.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pap.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pcd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pfl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pnb.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/prs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ps.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pt-br.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pt.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/pwn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/qqq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/qu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/qwh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/rej.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/rif.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/rm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/rmc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ro.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/roa-tara.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ru.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/rue.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sah.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sat.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/scn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sco.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sdc.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sdh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/se.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ses.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sgs.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/shi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/shn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/shy-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/si.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sjd.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/skr-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sli.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/smn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sms.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/so.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sq.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sr-ec.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sr-el.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sty.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/su.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sw.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/sxu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/syl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/szl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/szy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ta.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tay.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tcy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/te.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tet.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tg-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/th.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ti.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tly.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tr.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/trv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tt-cyrl.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tt-latn.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tyv.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/tzm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/udm.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ug-arab.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/uk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/ur.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/uz.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/vec.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/vep.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/vi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/vo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/vro.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/wa.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/war.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/wls.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/wo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/wuu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/xal.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/xh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/xmf.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/xsy.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/yi.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/yo.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/yue.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/zgh.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/zh-hans.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/zh-hant.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/zh-hk.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/i18n/zu.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/dataTypes/DataType.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/dataTypes/DataTypeStore.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/dataTypes/wikibase.dataTypeStore.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/experts/Entity.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/experts/Item.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/experts/Property.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/experts/__namespace.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/experts/getStore.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'registeredExperts' is already declared in the upper scope on line 11 column 6.","line":52,"column":33,"nodeType":"Identifier","messageId":"noShadow","endLine":52,"endColumn":50}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( vv, dv ) {\n\t'use strict';\n\n\t/**\n\t * @type {Object} Map from property type to expert module name\n\t */\n\tvar registeredExperts = require( 'wikibase.experts.modules' );\n\n\t/**\n\t * @param {dataTypes.DataTypeStore} dataTypeStore\n\t * @return {jQuery.valueview.ExpertStore}\n\t */\n\tmodule.exports = function ( dataTypeStore ) {\n\t\tvar expertStore = new vv.ExpertStore( vv.experts.UnsupportedValue );\n\n\t\texpertStore.registerDataValueExpert(\n\t\t\tvv.experts.StringValue,\n\t\t\tdv.StringValue.TYPE\n\t\t);\n\n\t\texpertStore.registerDataValueExpert(\n\t\t\tvv.experts.UnDeserializableValue,\n\t\t\tdv.UnDeserializableValue.TYPE\n\t\t);\n\n\t\t// Register experts for data types defined in Wikibase. Since those data types are defined by a\n\t\t// setting, it needs to be checked whether they are actually defined.\n\n\t\tvar dataTypeIdToExpertConstructor = resolveExpertModules( registeredExperts );\n\n\t\tfor ( var dataTypeId in dataTypeIdToExpertConstructor ) {\n\t\t\tvar dataType = dataTypeStore.getDataType( dataTypeId );\n\t\t\tif ( dataType ) {\n\t\t\t\texpertStore.registerDataTypeExpert(\n\t\t\t\t\tdataTypeIdToExpertConstructor[ dataTypeId ],\n\t\t\t\t\tdataType.getId()\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn expertStore;\n\t};\n\n\t/**\n\t * @param {Object} registeredExperts Map from property type to expert module name\n\t * @return {Object} Map from property type to expert constructor\n\t */\n\tfunction resolveExpertModules( registeredExperts ) {\n\t\tvar constructors = {};\n\n\t\tfor ( var dataType in registeredExperts ) {\n\t\t\tif ( Object.prototype.hasOwnProperty.call( registeredExperts, dataType ) ) {\n\t\t\t\tconstructors[ dataType ] = require( registeredExperts[ dataType ] );\n\t\t\t}\n\t\t}\n\n\t\treturn constructors;\n\t}\n\n}( $.valueview, dataValues ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/formatters/ApiValueFormatter.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/formatters/ApiValueFormatterFactory.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/jquery.wikibase/jquery.wikibase.entitysearch.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":15,"column":null,"nodeType":"Block","endLine":15,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":66,"column":3,"nodeType":"Block","endLine":68,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":84,"column":3,"nodeType":"Block","endLine":86,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":122,"column":3,"nodeType":"Block","endLine":124,"endColumn":6}],"errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\tvar PARENT = $.wikibase.entityselector;\n\n\t/**\n\t * Entity selector widget enhanced to be used as global search element.\n\t *\n\t * @extends jQuery.wikibase.entityselector\n\t *\n\t * @option {jQuery.ui.ooMenu.CustomItem} [suggestionsPlaceholder]\n\t *         Suggestions list item to be displayed while suggestions are retrieved.\n\t */\n\t$.widget( 'wikibase.entitysearch', PARENT, {\n\n\t\t/**\n\t\t * @see jQuery.wikibase.entityselector.options\n\t\t */\n\t\toptions: {\n\t\t\tsuggestionsPlaceholder: null\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.entityselector._create\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis.element\n\t\t\t.on( 'eachchange.' + this.widgetName, function () {\n\t\t\t\tvar menu = self.options.menu;\n\t\t\t\tif (\n\t\t\t\t\tself.options.suggestionsPlaceholder\n\t\t\t\t\t// TODO: Store visibility in model\n\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\t&& ( !menu.option( 'items' ).length || !menu.element.is( ':visible' ) )\n\t\t\t\t) {\n\t\t\t\t\tself.options.suggestionsPlaceholder.setVisibility( true );\n\t\t\t\t\t// Early update required for the suggestionsPlaceholder's visibility\n\t\t\t\t\tself._term = self.element.val();\n\t\t\t\t\tself._updateMenu( [] );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.entityselector._createMenuItemFromSuggestion\n\t\t * @protected\n\t\t *\n\t\t * @param {Object} entityStub\n\t\t * @return {jQuery.wikibase.entityselector.Item}\n\t\t */\n\t\t_createMenuItemFromSuggestion: function ( entityStub ) {\n\t\t\tvar $label = this._createLabelFromSuggestion( entityStub ),\n\t\t\t\tvalue = entityStub.label || entityStub.id;\n\n\t\t\treturn new PARENT.Item( $label, value, entityStub );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'suggestionsPlaceholder' ) {\n\t\t\t\tvar customItems = this.options.menu.option( 'customItems' );\n\n\t\t\t\tcustomItems.splice( customItems.indexOf( this.options.suggestionsPlaceholder ), 1 );\n\n\t\t\t\tif ( value instanceof $.ui.ooMenu.CustomItem ) {\n\t\t\t\t\tcustomItems.unshift( value );\n\t\t\t\t}\n\n\t\t\t\tthis._close();\n\t\t\t}\n\t\t\treturn PARENT.prototype._setOption.apply( this, arguments );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.entityselector._initMenu\n\t\t */\n\t\t_initMenu: function ( ooMenu ) {\n\t\t\tPARENT.prototype._initMenu.apply( this, arguments );\n\n\t\t\tif ( this.options.suggestionsPlaceholder ) {\n\t\t\t\tooMenu.option( 'customItems' ).unshift( this.options.suggestionsPlaceholder );\n\t\t\t}\n\n\t\t\tooMenu.element.addClass( 'wikibase-entitysearch-list' );\n\n\t\t\t$( ooMenu )\n\t\t\t.off( 'selected' )\n\t\t\t.on( 'selected.entitysearch', function ( event, item ) {\n\t\t\t\tif ( event.originalEvent\n\t\t\t\t\t&& /^key/.test( event.originalEvent.type )\n\t\t\t\t\t&& !( item instanceof $.ui.ooMenu.CustomItem )\n\t\t\t\t) {\n\t\t\t\t\twindow.location.href = item.getEntityStub().url;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn ooMenu;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._updateMenuVisibility\n\t\t */\n\t\t_updateMenuVisibility: function () {\n\t\t\tif ( this._term ) {\n\t\t\t\tthis._open();\n\t\t\t\tthis.repositionMenu();\n\t\t\t} else {\n\t\t\t\tthis._close();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.entityselector._getSuggestions\n\t\t */\n\t\t_getSuggestions: function ( term ) {\n\t\t\tvar self = this,\n\t\t\t\tpromise = PARENT.prototype._getSuggestions.call( this, term );\n\n\t\t\treturn promise.done( function ( suggestions, searchTerm ) {\n\t\t\t\tif ( self.options.suggestionsPlaceholder ) {\n\t\t\t\t\tself.options.suggestionsPlaceholder.setVisibility( false );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/parsers/getApiBasedValueParserConstructor.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/parsers/getStore.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.EntityInitializer.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Thenable' is undefined.","line":20,"column":null,"nodeType":"Block","endLine":20,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"configVarName\" type.","line":115,"column":null,"nodeType":"Block","endLine":115,"endColumn":null}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n *\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar config = require( './config.json' ),\n\t\tserialization = require( 'wikibase.serialization' );\n\n\t/**\n\t * Entity initializer.\n\t * Deserializes the entity passed to JavaScript via mw.config variable or\n\t * as entity object promise.\n\t *\n\t * @constructor\n\t *\n\t * @param {string|Thenable} arg Config variable name or entity object promise\n\t *\n\t * @throws {Error} if required parameter is not specified properly.\n\t */\n\tvar EntityInitializer = wb.EntityInitializer = function ( arg ) {\n\t\tvar entityPromise;\n\t\tif ( typeof arg === 'string' ) {\n\t\t\tentityPromise = getFromConfig( arg );\n\t\t} else if ( isThenable( arg ) ) {\n\t\t\tentityPromise = arg;\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t'Config variable name or entity promise needs to be specified'\n\t\t\t);\n\t\t}\n\n\t\tthis._entityPromise = entityPromise;\n\t};\n\n\tEntityInitializer.newFromEntityLoadedHook = function () {\n\t\tvar entityPromise = $.Deferred( function ( deferred ) {\n\t\t\tmw.hook( 'wikibase.entityPage.entityLoaded' ).add( function ( entity ) {\n\t\t\t\tdeferred.resolve( entity );\n\t\t\t} );\n\t\t} ).promise();\n\n\t\treturn new EntityInitializer( entityPromise );\n\t};\n\n\t$.extend( EntityInitializer.prototype, {\n\n\t\t/**\n\t\t * @type {jQuery.Promise} Promise for serialized entity\n\t\t */\n\t\t_entityPromise: null,\n\n\t\t/**\n\t\t * Retrieves an entity from mw.config.\n\t\t *\n\t\t * @return {Object} jQuery Promise\n\t\t *         Resolved parameters:\n\t\t *         - {wikibase.datamodel.Entity}\n\t\t *         No rejected parameters.\n\t\t */\n\t\tgetEntity: function () {\n\t\t\tvar self = this;\n\n\t\t\treturn this._entityPromise.then( function ( entity ) {\n\t\t\t\treturn self._getDeserializer().then( function ( entityDeserializer ) {\n\t\t\t\t\treturn entityDeserializer.deserialize( entity );\n\t\t\t\t} );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @return {Object} jQuery promise\n\t\t *         Resolved parameters:\n\t\t *         - {serialization.EntityDeserializer}\n\t\t *         No rejected parameters.\n\t\t */\n\t\t_getDeserializer: function () {\n\t\t\tvar entityDeserializer = new serialization.EntityDeserializer(),\n\t\t\t\tdeferred = $.Deferred();\n\n\t\t\tvar entityTypes = config.entityTypes;\n\t\t\tvar modules = [];\n\t\t\tvar typeNames = [];\n\t\t\tentityTypes.types.forEach( function ( type ) {\n\t\t\t\tvar deserializerFactoryFunction = entityTypes[ 'deserializer-factory-functions' ][ type ];\n\t\t\t\tif ( deserializerFactoryFunction ) {\n\t\t\t\t\tmodules.push( deserializerFactoryFunction );\n\t\t\t\t\ttypeNames.push( type );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tmw.loader.using( modules, function ( require ) {\n\t\t\t\tmodules.forEach( function ( module, index ) {\n\t\t\t\t\tentityDeserializer.registerStrategy(\n\t\t\t\t\t\trequire( module )(),\n\t\t\t\t\t\ttypeNames[ index ]\n\t\t\t\t\t);\n\t\t\t\t} );\n\n\t\t\t\tdeferred.resolve( entityDeserializer );\n\t\t\t} );\n\t\t\treturn deferred.promise();\n\t\t}\n\t} );\n\n\tfunction isThenable( arg ) {\n\t\treturn typeof arg === 'object' && typeof arg.then === 'function';\n\t}\n\n\t/**\n\t * Get entity from config\n\t *\n\t * @param configVarName\n\t * @return {jQuery.Promise}\n\t *         Resolved parameters:\n\t *         - {object} Entity object\n\t *         No rejected parameters.\n\t */\n\tfunction getFromConfig( configVarName ) {\n\t\treturn $.Deferred( function ( deferred ) {\n\t\t\tmw.hook( 'wikipage.content' ).add( function () {\n\t\t\t\tvar serializedEntity = mw.config.get( configVarName );\n\n\t\t\t\tif ( serializedEntity === null ) {\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdeferred.resolve( JSON.parse( serializedEntity ) );\n\t\t\t} );\n\t\t} ).promise();\n\t}\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.PropertyDataTypeStore.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'EntityStore' is undefined.","line":8,"column":null,"nodeType":"Block","endLine":8,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'EntityStore' is undefined.","line":28,"column":null,"nodeType":"Block","endLine":28,"endColumn":null}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n */\n( function () {\n\n\t/**\n\t * @param {Object} entityLoadedHook\n\t * @param {EntityStore} entityStore\n\t */\n\tfunction PropertyDataTypeStore( entityLoadedHook, entityStore ) {\n\t\tthis._entityLoadedHook = entityLoadedHook;\n\t\tthis._entityStore = entityStore;\n\t\tthis._propertyDataTypeMapping = {};\n\t}\n\n\t$.extend( PropertyDataTypeStore.prototype, {\n\t\t/**\n\t\t * @type {Object} map of property id to data type\n\t\t */\n\t\t_propertyDataTypeMapping: {},\n\n\t\t/**\n\t\t * @type {Object}\n\t\t */\n\t\t_entityLoadedHook: null,\n\n\t\t/**\n\t\t * @type {EntityStore}\n\t\t */\n\t\t_entityStore: null,\n\n\t\tsetDataTypeForProperty: function ( id, dataType ) {\n\t\t\tthis._propertyDataTypeMapping[ id ] = dataType;\n\t\t},\n\n\t\tgetDataTypeForProperty: function ( id ) {\n\t\t\tvar self = this;\n\n\t\t\tif ( this._propertyDataTypeMapping[ id ] ) {\n\t\t\t\treturn $.Deferred().resolve( this._propertyDataTypeMapping[ id ] );\n\t\t\t}\n\n\t\t\treturn this._getDataTypeFromExistingStatements( id )\n\t\t\t\t.catch( this._getDataTypeFromEntityStore.bind( this, id ) )\n\t\t\t\t.always( function ( dataType ) {\n\t\t\t\t\tself.setDataTypeForProperty( id, dataType );\n\t\t\t\t} );\n\t\t},\n\n\t\t_getDataTypeFromExistingStatements: function ( propertyId ) {\n\t\t\tvar dataTypePromise = $.Deferred(),\n\t\t\t\tself = this;\n\n\t\t\tthis._entityLoadedHook.add( function ( entity ) {\n\t\t\t\tvar dataType = self._findDataTypeInEntity( entity, propertyId );\n\t\t\t\tif ( dataType ) {\n\t\t\t\t\tdataTypePromise.resolve( dataType );\n\t\t\t\t} else {\n\t\t\t\t\tdataTypePromise.reject();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn dataTypePromise;\n\t\t},\n\n\t\t/**\n\t\t * Recursively traverses (pieces of) entity JSON and returns a property's data type if there is a statement for\n\t\t * it on the entity.\n\t\t *\n\t\t * @param {Object} node\n\t\t * @param {string} propertyId\n\t\t *\n\t\t * @return {null|string}\n\t\t */\n\t\t_findDataTypeInEntity: function ( node, propertyId ) {\n\t\t\tif ( !node || typeof node !== 'object' ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor ( var i in node ) {\n\t\t\t\tif ( i === propertyId ) {\n\t\t\t\t\tvar dataTypeFromSnak = this._getDataTypeFromSnak( node[ i ][ 0 ] ); // may not exist (T249206)\n\t\t\t\t\tif ( dataTypeFromSnak ) {\n\t\t\t\t\t\treturn dataTypeFromSnak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar dataType = this._findDataTypeInEntity( node[ i ], propertyId );\n\t\t\t\tif ( dataType ) {\n\t\t\t\t\treturn dataType;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\t_getDataTypeFromSnak: function ( snak ) {\n\t\t\treturn snak && snak.datatype || // if it's a qualifier/reference, the data type is at the top level\n\t\t\t\tsnak.mainsnak && snak.mainsnak.datatype; // main snak\n\t\t},\n\n\t\t_getDataTypeFromEntityStore: function ( propertyId ) {\n\t\t\treturn this._entityStore.get( propertyId ).then( function ( property ) {\n\t\t\t\tif ( !property ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn property.getDataTypeId();\n\t\t\t} );\n\t\t}\n\t} );\n\n\tmodule.exports = PropertyDataTypeStore;\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.WikibaseContentLanguages.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.entityPage.entityLoaded.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.federatedPropertiesEditRequestFailureNotice.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.federatedPropertiesLeavingSiteNotice.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.getUserLanguages.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.sites.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.special/wikibase.special.languageLabelDescriptionAliases.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.special/wikibase.special.mergeItems.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.special/wikibase.special.newEntity.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.ui.entityViewInit.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'CachingEntityStore' is undefined.","line":40,"column":null,"nodeType":"Block","endLine":40,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":53,"column":null,"nodeType":"Block","endLine":53,"endColumn":null},{"ruleId":"compat/compat","severity":2,"message":"performance.mark() is not supported in Safari 9.1, iOS Safari 9.0-9.2","line":359,"column":45,"nodeType":"MemberExpression","endLine":359,"endColumn":61}],"errorCount":1,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function ( wb, performance ) {\n\t'use strict';\n\n\tvar getExpertsStore = require( './experts/getStore.js' ),\n\t\tgetParserStore = require( './parsers/getStore.js' ),\n\t\tDefaultViewFactoryFactory = require( '../../view/resources/wikibase/view/ViewFactoryFactory.js' ),\n\t\tRevisionStore = require( '../../view/resources/wikibase/wikibase.RevisionStore.js' ),\n\t\tApiValueFormatterFactory = require( './formatters/ApiValueFormatterFactory.js' ),\n\t\tStructureEditorFactory = require( '../../view/resources/wikibase/view/StructureEditorFactory.js' ),\n\t\tCachingEntityStore = require( '../../view/resources/wikibase/store/store.CachingEntityStore.js' ),\n\t\tApiEntityStore = require( '../../view/resources/wikibase/store/store.ApiEntityStore.js' ),\n\t\tdataTypeStore = require( './dataTypes/wikibase.dataTypeStore.js' ),\n\t\tCachingEntityIdHtmlFormatter = require( '../../view/resources/wikibase/entityIdFormatter/CachingEntityIdHtmlFormatter.js' ),\n\t\tDataValueBasedEntityIdHtmlFormatter = require( '../../view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js' ),\n\t\tCachingEntityIdPlainFormatter = require( '../../view/resources/wikibase/entityIdFormatter/CachingEntityIdPlainFormatter.js' ),\n\t\tDataValueBasedEntityIdPlainFormatter = require( '../../view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js' ),\n\t\tToolbarFactory = require( '../../view/resources/wikibase/view/ToolbarFactory.js' ),\n\t\tPropertyDataTypeStore = require( './wikibase.PropertyDataTypeStore.js' ),\n\t\tconfig = require( './config.json' ),\n\t\tdatamodel = require( 'wikibase.datamodel' ),\n\t\tserialization = require( 'wikibase.serialization' );\n\n\t/**\n\t * @return {boolean}\n\t */\n\tfunction isEditable() {\n\t\treturn mw.config.get( 'wbIsEditView' )\n\t\t\t&& mw.config.get( 'wgRelevantPageIsProbablyEditable' );\n\t}\n\n\t/**\n\t * @param {wikibase.api.RepoApi} repoApi\n\t * @param {string} languageCode The language code of the ui language\n\t * @return {CachingEntityStore}\n\t */\n\tfunction buildEntityStore( repoApi, languageCode ) {\n\t\treturn new CachingEntityStore(\n\t\t\tnew ApiEntityStore(\n\t\t\t\trepoApi,\n\t\t\t\tnew serialization.EntityDeserializer(),\n\t\t\t\t[ languageCode ]\n\t\t\t)\n\t\t);\n\t}\n\n\t/**\n\t * @param {datamodel.Entity} entity\n\t * @param {jQuery} $entityview\n\t * @return {string} The name of the entity view widget class\n\t *\n\t * @throws {Error} if no widget to render the entity exists.\n\t */\n\tfunction createEntityView( entity, $entityview ) {\n\t\tvar currentRevision, revisionStore, entityChangersFactory,\n\t\t\tviewFactoryArguments, ViewFactoryFactory, viewFactory, entityView,\n\t\t\trepoConfig = mw.config.get( 'wbRepo' ),\n\t\t\trepoApiUrl = repoConfig.url + repoConfig.scriptPath + '/api.php',\n\t\t\tmwApi = wb.api.getLocationAgnosticMwApi( repoApiUrl ),\n\t\t\trepoApi = new wb.api.RepoApi( mwApi, mw.config.get( 'wgUserLanguage' ) ),\n\t\t\tuserLanguages = wb.getUserLanguages(),\n\t\t\tentityStore = buildEntityStore( repoApi, userLanguages[ 0 ] ),\n\t\t\tmonolingualTextLanguages = wikibase.WikibaseContentLanguages.getMonolingualTextLanguages(),\n\t\t\tformatterFactory = new ApiValueFormatterFactory(\n\t\t\t\tnew wb.api.FormatValueCaller(\n\t\t\t\t\trepoApi,\n\t\t\t\t\tdataTypeStore\n\t\t\t\t),\n\t\t\t\tuserLanguages[ 0 ]\n\t\t\t),\n\t\t\tparserStore = getParserStore( repoApi ),\n\t\t\thtmlDataValueEntityIdFormatter = formatterFactory.getFormatter( null, null, 'text/html' ),\n\t\t\tplaintextDataValueEntityIdFormatter = formatterFactory.getFormatter( null, null, 'text/plain' ),\n\t\t\tentityIdParser = new ( parserStore.getParser( datamodel.EntityId.TYPE ) )( { lang: userLanguages[ 0 ] } ),\n\t\t\ttoolbarFactory = new ToolbarFactory(),\n\t\t\tstructureEditorFactory = new StructureEditorFactory( toolbarFactory ),\n\t\t\tstartEditingCallback = function () {\n\t\t\t\treturn $.Deferred().resolve().promise();\n\t\t\t},\n\t\t\tentityNamespace = entity.getType(),\n\t\t\twbCurRev = mw.config.get( 'wbCurrentRevision' );\n\n\t\tif ( wbCurRev === null ) {\n\t\t\tcurrentRevision = mw.config.get( 'wgCurRevisionId' );\n\t\t} else {\n\t\t\tcurrentRevision = wbCurRev;\n\t\t}\n\n\t\trevisionStore = new RevisionStore( currentRevision );\n\n\t\tentityChangersFactory = new wb.entityChangers.EntityChangersFactory(\n\t\t\trepoApi,\n\t\t\trevisionStore,\n\t\t\tentity,\n\t\t\tfunction ( hookName ) {\n\t\t\t\tvar hook = mw.hook( hookName );\n\t\t\t\thook.fire.apply( hook, Array.prototype.slice.call( arguments, 1 ) );\n\t\t\t}\n\t\t);\n\n\t\tviewFactoryArguments = [\n\t\t\ttoolbarFactory,\n\t\t\tentityChangersFactory,\n\t\t\tstructureEditorFactory,\n\t\t\tmonolingualTextLanguages,\n\t\t\tdataTypeStore,\n\t\t\tnew CachingEntityIdHtmlFormatter(\n\t\t\t\tnew DataValueBasedEntityIdHtmlFormatter( entityIdParser, htmlDataValueEntityIdFormatter )\n\t\t\t),\n\t\t\tnew CachingEntityIdPlainFormatter(\n\t\t\t\tnew DataValueBasedEntityIdPlainFormatter( entityIdParser, plaintextDataValueEntityIdFormatter )\n\t\t\t),\n\t\t\tnew PropertyDataTypeStore( mw.hook( 'wikibase.entityPage.entityLoaded' ), entityStore ),\n\t\t\tgetExpertsStore( dataTypeStore ),\n\t\t\tformatterFactory,\n\t\t\t{\n\t\t\t\tgetMessage: function ( key, params ) {\n\t\t\t\t\treturn mw.msg.apply( mw, [ key ].concat( params || [] ) );\n\t\t\t\t}\n\t\t\t},\n\t\t\tparserStore,\n\t\t\tuserLanguages,\n\t\t\trepoApiUrl,\n\t\t\tconfig.geoShapeStorageApiEndpoint\n\t\t];\n\t\tvar hookResults = [];\n\t\tmw.hook( 'wikibase.entityPage.entityView.viewFactoryFactory.required' ).fire(\n\t\t\tentityNamespace,\n\t\t\tfunction ( promise ) {\n\t\t\t\thookResults.push( promise );\n\t\t\t}\n\t\t);\n\n\t\treturn $.when.apply( $, hookResults ).then( function () {\n\t\t\tViewFactoryFactory = wb[ entityNamespace ] && wb[ entityNamespace ].view\n\t\t\t\t&& wb[ entityNamespace ].view.ViewFactoryFactory\n\t\t\t\t|| DefaultViewFactoryFactory;\n\n\t\t\tviewFactory = ( new ViewFactoryFactory() ).getViewFactory( isEditable(), viewFactoryArguments );\n\n\t\t\tentityView = viewFactory.getEntityView( startEditingCallback, entity, $entityview );\n\n\t\t\treturn entityView.widgetName;\n\t\t} );\n\n\t}\n\n\t/**\n\t * @param {jQuery.wikibase.entityview} $entityview\n\t * @param {string} viewName\n\t * @param {string} entityType\n\t */\n\tfunction attachAnonymousEditWarningTrigger( $entityview, viewName, entityType ) {\n\t\tif ( !mw.user || !mw.user.isAnon() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$entityview.on( viewName + 'afterstartediting', function () {\n\t\t\tif ( !$.find( '.mw-notification-content' ).length\n\t\t\t\t&& !mw.cookie.get( 'wikibase-no-anonymouseditwarning' )\n\t\t\t) {\n\t\t\t\tvar message = mw.message(\n\t\t\t\t\t'wikibase-anonymouseditwarning',\n\t\t\t\t\t// The following messages can be used here:\n\t\t\t\t\t// * wikibase-entity-item\n\t\t\t\t\t// * wikibase-entity-property\n\t\t\t\t\t// * wikibase-entity-query\n\t\t\t\t\tmw.msg( 'wikibase-entity-' + entityType )\n\t\t\t\t);\n\t\t\t\tmw.notify( message, { autoHide: false, type: 'warn', tag: 'wikibase-anonymouseditwarning' } );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Update the state of the watch link if the user has watchdefault enabled.\n\t */\n\tfunction attachWatchLinkUpdater( $entityview, viewName ) {\n\t\tvar update;\n\n\t\tif ( mw.loader.getState( 'mediawiki.page.watch.ajax' ) !== 'ready' || !mw.user.options.get( 'watchdefault' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tupdate = require( 'mediawiki.page.watch.ajax' ).updateWatchLink;\n\n\t\tfunction updateWatchLink() {\n\t\t\t// All four supported skins are using the same ID, the other selectors\n\t\t\t// in mediawiki.page.watch.ajax.js are undocumented and probably legacy stuff\n\t\t\tvar $link = $( '#ca-watch' ).find( 'a' );\n\n\t\t\t// Skip if page is already watched and there is no \"watch this page\" link\n\t\t\t// Note: The exposed function fails for empty jQuery collections\n\t\t\tif ( !$link.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate( $link, 'watch', 'loading' );\n\n\t\t\tvar api = new mw.Api();\n\n\t\t\tapi.get( {\n\t\t\t\tformatversion: 2,\n\t\t\t\taction: 'query',\n\t\t\t\tprop: 'info',\n\t\t\t\tinprop: 'watched',\n\t\t\t\tpageids: mw.config.get( 'wgArticleId' )\n\t\t\t} ).done( function ( data ) {\n\t\t\t\tvar watched = data.query && data.query.pages[ 0 ]\n\t\t\t\t\t&& data.query.pages[ 0 ].watched;\n\t\t\t\tupdate( $link, watched ? 'unwatch' : 'watch' );\n\t\t\t} ).fail( function () {\n\t\t\t\tupdate( $link, 'watch' );\n\t\t\t} );\n\t\t}\n\n\t\t$entityview.on( viewName + 'afterstopediting', function ( event, dropValue ) {\n\t\t\tif ( !dropValue ) {\n\t\t\t\tupdateWatchLink();\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * @param {jQuery} $entityview\n\t * @param {jQuery} $origin\n\t * @param {string} gravity\n\t */\n\tfunction showCopyrightTooltip( $entityview, $origin, gravity ) {\n\t\tif ( !mw.config.exists( 'wbCopyright' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tgravity = gravity || 'nw';\n\n\t\tvar copyRight = mw.config.get( 'wbCopyright' ),\n\t\t\tcopyRightVersion = copyRight.version,\n\t\t\tcopyRightMessageHtml = copyRight.messageHtml,\n\t\t\tcookieKey = 'wikibase.acknowledgedcopyrightversion',\n\t\t\toptionsKey = 'wb-acknowledgedcopyrightversion';\n\n\t\tif ( mw.cookie.get( cookieKey ) === copyRightVersion\n\t\t\t|| mw.user.options.get( optionsKey ) === copyRightVersion\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $message = $( '<span><p>' + copyRightMessageHtml + '</p></span>' )\n\t\t\t\t.addClass( 'wikibase-copyrightnotification-container' ),\n\t\t\t$hideMessage = $( '<a>' )\n\t\t\t\t.text( mw.msg( 'wikibase-copyrighttooltip-acknowledge' ) )\n\t\t\t\t.appendTo( $message ),\n\t\t\teditableTemplatedWidget = $origin.data( 'EditableTemplatedWidget' );\n\n\t\t// TODO: Use notification system for copyright messages on all widgets.\n\t\tif ( editableTemplatedWidget\n\t\t\t&& !( editableTemplatedWidget instanceof $.wikibase.statementview )\n\t\t\t&& !( editableTemplatedWidget instanceof $.wikibase.aliasesview )\n\t\t) {\n\t\t\teditableTemplatedWidget.notification( $message, 'wb-edit' );\n\n\t\t\t$hideMessage.on( 'click', function ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\teditableTemplatedWidget.notification();\n\t\t\t\tif ( mw.user.isAnon() ) {\n\t\t\t\t\tmw.cookie.set( cookieKey, copyRightVersion, { expires: 3 * 365 * 24 * 60 * 60, path: '/' } );\n\t\t\t\t} else {\n\t\t\t\t\tvar api = new mw.Api();\n\t\t\t\t\tapi.saveOption( optionsKey, copyRightVersion );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tvar edittoolbar = $origin.data( 'edittoolbar' );\n\n\t\tif ( !edittoolbar ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Tooltip gets its own anchor since other elements might have their own tooltip.\n\t\t// we don't even have to add this new toolbar element to the toolbar, we only use it\n\t\t// to manage the tooltip which will have the 'save' button as element to point to.\n\t\t// The 'save' button can still have its own tooltip though.\n\t\tvar $messageAnchor = $( '<span>' )\n\t\t\t.appendTo( document.body )\n\t\t\t.toolbaritem()\n\t\t\t.wbtooltip( {\n\t\t\t\tcontent: $message,\n\t\t\t\tpermanent: true,\n\t\t\t\tgravity: gravity,\n\t\t\t\t$anchor: edittoolbar.getContainer()\n\t\t\t} );\n\n\t\t$hideMessage.on( 'click', function ( event ) {\n\t\t\tevent.preventDefault();\n\t\t\t$messageAnchor.data( 'wbtooltip' ).degrade( true );\n\t\t\t$( window ).off( '.wbCopyrightTooltip' );\n\t\t\tif ( mw.user.isAnon() ) {\n\t\t\t\tmw.cookie.set( cookieKey, copyRightVersion, { expires: 3 * 365 * 24 * 60 * 60, path: '/' } );\n\t\t\t} else {\n\t\t\t\tvar api = new mw.Api();\n\t\t\t\tapi.saveOption( optionsKey, copyRightVersion );\n\t\t\t}\n\t\t} );\n\n\t\t$messageAnchor.data( 'wbtooltip' ).show();\n\n\t\t// destroy tooltip after edit mode gets closed again:\n\t\t$entityview\n\t\t.one( 'entityviewafterstopediting.wbCopyRightTooltip', function ( event, origin ) {\n\t\t\tvar tooltip = $messageAnchor.data( 'wbtooltip' );\n\t\t\tif ( tooltip ) {\n\t\t\t\ttooltip.degrade( true );\n\t\t\t}\n\t\t\t$( window ).off( '.wbCopyrightTooltip' );\n\t\t} );\n\n\t\t$( window ).one(\n\t\t\t'scroll.wbCopyrightTooltip touchmove.wbCopyrightTooltip resize.wbCopyrightTooltip',\n\t\t\tfunction () {\n\t\t\t\tvar tooltip = $messageAnchor.data( 'wbtooltip' );\n\t\t\t\tif ( tooltip ) {\n\t\t\t\t\t$messageAnchor.data( 'wbtooltip' ).hide();\n\t\t\t\t}\n\t\t\t\t$entityview.off( '.wbCopyRightTooltip' );\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * @param {jQuery} $entityview\n\t */\n\tfunction attachCopyrightTooltip( $entityview ) {\n\t\t$entityview.on(\n\t\t\t'entitytermsafterstartediting sitelinkgroupviewafterstartediting statementviewafterstartediting',\n\t\t\tfunction ( event ) {\n\t\t\t\tvar $target = $( event.target ),\n\t\t\t\t\tgravity = 'sw';\n\n\t\t\t\tif ( $target.data( 'sitelinkgroupview' ) ) {\n\t\t\t\t\tgravity = 'nw';\n\t\t\t\t} else if ( $target.data( 'entitytermsview' ) ) {\n\t\t\t\t\tgravity = 'w';\n\t\t\t\t}\n\n\t\t\t\tshowCopyrightTooltip( $entityview, $target, gravity );\n\t\t\t}\n\t\t);\n\t}\n\n\tmw.hook( 'wikipage.content' ).add( function () {\n\t\t// This is copied from startup.js in MediaWiki core.\n\t\tvar mwPerformance = window.performance && performance.mark ? performance : {\n\t\t\tmark: function () {}\n\t\t};\n\t\tmwPerformance.mark( 'wbInitStart' );\n\n\t\tvar $entityview = $( '.wikibase-entityview' );\n\t\tvar canEdit = isEditable();\n\n\t\twb.EntityInitializer.newFromEntityLoadedHook().getEntity().done( function ( entity ) {\n\t\t\tvar viewNamePromise = createEntityView( entity, $entityview.first() );\n\t\t\tviewNamePromise.then( function ( viewName ) {\n\t\t\t\tif ( canEdit ) {\n\t\t\t\t\tattachAnonymousEditWarningTrigger( $entityview, viewName, entity.getType() );\n\t\t\t\t\tattachWatchLinkUpdater( $entityview, viewName );\n\t\t\t\t}\n\n\t\t\t\tmw.hook( 'wikibase.entityPage.entityView.rendered' ).fire();\n\n\t\t\t\tmwPerformance.mark( 'wbInitEnd' );\n\t\t\t} );\n\t\t} );\n\n\t\tif ( canEdit ) {\n\t\t\t$entityview\n\t\t\t.on( 'entitytermsviewchange entitytermsviewafterstopediting', function ( event, lang ) {\n\t\t\t\tvar userLanguage = mw.config.get( 'wgUserLanguage' );\n\n\t\t\t\tif ( typeof lang === 'string' && lang !== userLanguage ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $entitytermsview = $( event.target ),\n\t\t\t\t\tentitytermsview = $entitytermsview.data( 'entitytermsview' ),\n\t\t\t\t\tfingerprint = entitytermsview.value(),\n\t\t\t\t\tlabel = fingerprint.getLabelFor( userLanguage ),\n\t\t\t\t\tisEmpty = !label || label.getText() === '';\n\n\t\t\t\t$( 'title' ).text(\n\t\t\t\t\tmw.msg( 'pagetitle', isEmpty ? mw.config.get( 'wgTitle' ) : label.getText() )\n\t\t\t\t);\n\n\t\t\t\t$( 'h1' ).find( '.wikibase-title' )\n\t\t\t\t\t.toggleClass( 'wb-empty', isEmpty )\n\t\t\t\t\t.find( '.wikibase-title-label' )\n\t\t\t\t\t.text( isEmpty ? mw.msg( 'wikibase-label-empty' ) : label.getText() );\n\t\t\t} );\n\n\t\t\tattachCopyrightTooltip( $entityview );\n\t\t}\n\t} );\n\n}(\n\twikibase,\n\twindow.performance\n) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/resources/wikibase.ui.entitysearch.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'$form' is already declared in the upper scope on line 12 column 7.","line":21,"column":21,"nodeType":"Identifier","messageId":"noShadow","endLine":21,"endColumn":26}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Replacing the native MediaWiki search suggestions with the jQuery.wikibase.entitysearch widget.\n *\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\trequire( './jquery.wikibase/jquery.wikibase.entitysearch.js' );\n\n\t$( function () {\n\t\tvar $form = $( '#searchform ' ),\n\t\t\t$input = $( '#searchInput' ),\n\t\t\t// Both inputs must be named \"search\" to support Firefox' smart keyword feature (T60467)\n\t\t\t$hiddenInput = $( '<input>' ).attr( { type: 'hidden', name: 'search' } );\n\n\t\t/**\n\t\t * @param {jQuery} $form\n\t\t * @return {string}\n\t\t */\n\t\tfunction getHref( $form ) {\n\t\t\tvar href = $form.attr( 'action' ),\n\t\t\t\tparams = {};\n\n\t\t\thref += href.indexOf( '?' ) === -1 ? '?' : '&';\n\n\t\t\t$form.serializeArray().forEach( function ( param ) {\n\t\t\t\tparams[ param.name ] = param.value;\n\t\t\t} );\n\n\t\t\tparams.search = $input.val();\n\n\t\t\treturn href + $.param( params );\n\t\t}\n\n\t\t/**\n\t\t * Updates the suggestion list special item that triggers a full-text search.\n\t\t *\n\t\t * @param {jQuery.ui.ooMenu.CustomItem} searchContaining\n\t\t */\n\t\tfunction updateSuggestionSpecial( searchContaining ) {\n\t\t\tvar $suggestionsSpecial = $( '.wb-entitysearch-suggestions .suggestions-special' );\n\t\t\t$suggestionsSpecial.find( '.special-query' ).text( $input.val() );\n\n\t\t\tsearchContaining.setLink( getHref( $form ) + '&fulltext=1' );\n\t\t}\n\n\t\t/**\n\t\t * Removes the native search box suggestion list.\n\t\t *\n\t\t * @param {HTMLElement} input Search box node\n\t\t */\n\t\tfunction removeSuggestionContext( input ) {\n\t\t\tvar context = $( input ).data( 'suggestionsContext' );\n\n\t\t\tif ( context && !context._wbDisabled ) {\n\t\t\t\t// Native fetch() updates/re-sets the data attribute with the suggestion context.\n\t\t\t\tcontext.config.fetch = function () {};\n\t\t\t\t// Flag as disabled so we don't keep overwriting `fetch`, but don't\n\t\t\t\t// delete context completely, in case there are some requests still\n\t\t\t\t// in-flight. T105637\n\t\t\t\tcontext._wbDisabled = true;\n\t\t\t}\n\t\t}\n\n\t\tvar suggestionsPlaceholder = new $.ui.ooMenu.CustomItem(\n\t\t\t$( '<div>' ).append( $.createSpinner() )\n\t\t);\n\n\t\tvar $searchContaining = $( '<div>' )\n\t\t\t.addClass( 'suggestions-special' )\n\t\t\t.append(\n\t\t\t\t$( '<div>' )\n\t\t\t\t\t.addClass( 'special-label' )\n\t\t\t\t\t.text( mw.msg( 'searchsuggest-containing' ) ),\n\t\t\t\t$( '<div>' )\n\t\t\t\t\t.addClass( 'special-query' )\n\t\t\t);\n\n\t\tvar searchContaining = new $.ui.ooMenu.CustomItem( $searchContaining, null, function () {\n\t\t\t$form.trigger( 'submit' );\n\t\t}, 'wb-entitysearch-suggestions' );\n\n\t\tvar $searchMenu = $( '<ul>' ).ooMenu( {\n\t\t\tcustomItems: [ searchContaining ]\n\t\t} );\n\n\t\t// Must be placed in that order to support Firefox' smart keyword feature (T60467)\n\t\t$input.before( $hiddenInput );\n\n\t\t$input\n\t\t.one( 'eachchange.entitysearch', function () {\n\t\t\tremoveSuggestionContext( this );\n\t\t} )\n\t\t.entitysearch( {\n\t\t\turl: mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php',\n\t\t\tmenu: $searchMenu.data( 'ooMenu' ),\n\t\t\tposition: $.extend(\n\t\t\t\t{},\n\t\t\t\t$.wikibase.entityselector.prototype.options.position,\n\t\t\t\t{ offset: '-1 2' }\n\t\t\t),\n\t\t\tconfineMinWidthTo: $form,\n\t\t\tsuggestionsPlaceholder: suggestionsPlaceholder\n\t\t} )\n\t\t.on( 'entityselectoropen', function ( event ) {\n\t\t\tupdateSuggestionSpecial( searchContaining );\n\t\t} )\n\t\t.on( 'eachchange', function ( event, oldVal ) {\n\t\t\t$hiddenInput.val( '' );\n\t\t\tupdateSuggestionSpecial( searchContaining );\n\t\t} )\n\t\t.on( 'entityselectorselected', function ( event, entityId ) {\n\t\t\t$hiddenInput.val( entityId );\n\t\t} );\n\n\t\t// TODO: Re-evaluate entity selector input (e.g. hitting \"Go\" after having hit \"Search\"\n\t\t// before. However, this will require triggering the entity selector's API call and waiting\n\t\t// for its response.\n\n\t\t$( '#searchButton' ).on( 'click keydown', function ( event ) {\n\t\t\tif ( !$input.data( 'entityselector' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If an entity is selected, redirect to that entity's page.\n\t\t\tif ( event.type === 'click'\n\t\t\t\t|| event.keyCode === $.ui.keyCode.ENTER\n\t\t\t\t|| event.keyCode === $.ui.keyCode.SPACE\n\t\t\t) {\n\t\t\t\tvar entity = $input.data( 'entityselector' ).selectedEntity();\n\t\t\t\tif ( entity && entity.url ) {\n\t\t\t\t\tevent.preventDefault(); // Prevent default form submit action.\n\t\t\t\t\twindow.location.href = entity.url;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\t// Default form submit action: Imitate full-text search.\n\t\t// Since we are using the entity selector, if an entity is selected, the entity id is stored\n\t\t// in a hidden input element (which has ripped the \"name\" attribute from the original search\n\t\t// box). Therefore, the entity id needs to be replaced by the actual search box (entity\n\t\t// selector) content.\n\t\t$form.on( 'submit', function ( event ) {\n\t\t\t$( this ).find( 'input[name=\"search\"]' ).val( $input.val() );\n\t\t} );\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstract/term_store.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstract/wb_changes.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstract/wb_changes_dispatch.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstract/wb_changes_subscription.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstract/wb_id_counters.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstract/wb_items_per_site.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstract/wb_property_info.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/sql/abstractSchemaChanges/patch-wb_changes_dispatch-make-chd_seen-unsigned.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/api/editentity.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/api/getentities.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/api/setclaim.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/api/setlabel-removed.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/api/setlabel.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/api/setreference.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-emptyResponse.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-entityIdResponse.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-errorResponse.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-filteredResult.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-multipleEntityIdResponse.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-oneResponse.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-twoResponse.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-entity-search-helper-test-data-unexpectedResponse.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-en-de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-en-de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p18-p31-en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-en-de.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-p31-en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/api-prefetching-term-lookup-test-data-q42-en.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/query-siteinfo-namespaces-wikibase.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/query-siteinfo-namespaces-wikidata.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/wbgetentities-p1-missing.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/federatedProperties/wbgetentities-property-datatype.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/P2.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q1.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q10.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q2.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q3.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q4.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q4_no_prefixed_ids.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q5.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q6.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q6_no_prefixed_ids.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q7.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q7_no_prefixed_ids.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q8.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q9.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/phpunit/data/rdf/entities/Q9_no_prefixed_ids.json","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/dataTypes/DataType.tests.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/dataTypes/DataTypeStore.tests.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/experts/Item.tests.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/experts/Property.tests.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/index.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/jquery.wikibase/jquery.wikibase.entitysearch.tests.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/wikibase.EntityInitializer.tests.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/wikibase.PropertyDataTypeStore.tests.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'dataType' is already declared in the upper scope on line 156 column 71.","line":159,"column":72,"nodeType":"Identifier","messageId":"noShadow","endLine":159,"endColumn":80},{"ruleId":"no-shadow","severity":1,"message":"'dataType' is already declared in the upper scope on line 181 column 71.","line":184,"column":72,"nodeType":"Identifier","messageId":"noShadow","endLine":184,"endColumn":80}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( sinon ) {\n\t'use strict';\n\n\tvar PropertyDataTypeStore = require( '../../resources/wikibase.PropertyDataTypeStore.js' );\n\n\tQUnit.module( 'wikibase.PropertyDataTypeStore' );\n\n\tfunction newPropertyDataTypeStore( services ) {\n\t\tservices = services || {};\n\n\t\treturn new PropertyDataTypeStore(\n\t\t\tservices.entityLoadedHook || { add: sinon.stub().yields( { claims: {} } ) },\n\t\t\tservices.entityStore || { get: sinon.stub().returns( $.Deferred().resolve( null ) ) }\n\t\t);\n\t}\n\n\tQUnit.test( 'set/getDataTypeForProperty', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\tdataTypeStore = newPropertyDataTypeStore();\n\n\t\tdataTypeStore.setDataTypeForProperty( 'P123', 'string' );\n\n\t\tdataTypeStore.getDataTypeForProperty( 'P123' ).done( function ( dataType ) {\n\t\t\tassert.strictEqual( dataType, 'string' );\n\t\t\tdone();\n\t\t} );\n\t} );\n\n\tQUnit.test( 'Checks existing statements for the requested property\\'s data type', function ( assert ) {\n\t\tvar testData = [\n\t\t\t\t{\n\t\t\t\t\tmessage: 'getting the data type from a main snak',\n\t\t\t\t\texpected: 'time',\n\t\t\t\t\tproperty: 'P123',\n\t\t\t\t\tentity: {\n\t\t\t\t\t\t// id, labels, etc not relevant for these tests\n\t\t\t\t\t\tclaims: {\n\t\t\t\t\t\t\tP123: [ {\n\t\t\t\t\t\t\t\tmainsnak: { datatype: 'time' }\n\t\t\t\t\t\t\t} ]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage: 'getting the data type from a qualifier',\n\t\t\t\t\texpected: 'string',\n\t\t\t\t\tproperty: 'P666',\n\t\t\t\t\tentity: {\n\t\t\t\t\t\tclaims: {\n\t\t\t\t\t\t\tP123: [ {\n\t\t\t\t\t\t\t\tqualifiers: {\n\t\t\t\t\t\t\t\t\tP666: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tdatatype: 'string'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} ]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// This is a contrived example because at the time of writing the lexeme json is missing the data\n\t\t\t\t\t// type on statements on sub entities for some reason -> T249206.\n\t\t\t\t\tmessage: 'getting the data type from a statement on a sub entity',\n\t\t\t\t\texpected: 'quantity',\n\t\t\t\t\tproperty: 'P789',\n\t\t\t\t\tentity: {\n\t\t\t\t\t\tsenses: [ {\n\t\t\t\t\t\t\tclaims: {\n\t\t\t\t\t\t\t\tP789: [ {\n\t\t\t\t\t\t\t\t\tmainsnak: { datatype: 'quantity' }\n\t\t\t\t\t\t\t\t} ]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} ]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage: 'returns null if a statement exists for the property but without data type',\n\t\t\t\t\texpected: null,\n\t\t\t\t\tproperty: 'P321',\n\t\t\t\t\tentity: {\n\t\t\t\t\t\tsenses: [ {\n\t\t\t\t\t\t\tclaims: {\n\t\t\t\t\t\t\t\tP321: [ {\n\t\t\t\t\t\t\t\t\tmainsnak: {\n\t\t\t\t\t\t\t\t\t\t// datatype: 'missing :('\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} ]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} ]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tdone = assert.async( testData.length );\n\n\t\ttestData.forEach( function ( test ) {\n\t\t\tvar entityLoadedHook = { add: sinon.stub().yields( test.entity ) },\n\t\t\t\tdataTypeStore = newPropertyDataTypeStore( { entityLoadedHook: entityLoadedHook } );\n\n\t\t\tdataTypeStore.getDataTypeForProperty( test.property ).done( function ( dataType ) {\n\t\t\t\tassert.strictEqual( dataType, test.expected, test.message );\n\t\t\t\tdone();\n\t\t\t} );\n\t\t} );\n\t} );\n\n\tQUnit.test( 'Given data type not set and no existing statement for the property, uses entity store', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\texpectedType = 'quantity',\n\t\t\tpropertyId = 'P666',\n\t\t\tentityStore = {\n\t\t\t\tget: sinon.stub().returns( $.Deferred().resolve( {\n\t\t\t\t\tgetDataTypeId: function () {\n\t\t\t\t\t\treturn expectedType;\n\t\t\t\t\t}\n\t\t\t\t} ) )\n\t\t\t},\n\t\t\tdataTypeStore = newPropertyDataTypeStore( { entityStore: entityStore } );\n\n\t\tdataTypeStore.getDataTypeForProperty( propertyId ).done( function ( dataType ) {\n\t\t\tassert.strictEqual( dataType, expectedType );\n\t\t\tsinon.assert.calledWith( entityStore.get, propertyId );\n\n\t\t\tdone();\n\t\t} );\n\t} );\n\n\tQUnit.test( 'Given data type cannot be found, returns null', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\tentityStore = {\n\t\t\t\tget: sinon.stub().returns( $.Deferred().resolve( null ) )\n\t\t\t},\n\t\t\tdataTypeStore = newPropertyDataTypeStore( { entityStore: entityStore } );\n\n\t\tdataTypeStore.getDataTypeForProperty( 'P777' ).done( function ( dataType ) {\n\t\t\tassert.strictEqual( dataType, null );\n\t\t\tdone();\n\t\t} );\n\t} );\n\n\tQUnit.test( 'Given previous successful entity JSON lookup, it remembers the result', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\texpectedType = 'string',\n\t\t\tpropertyId = 'P123',\n\t\t\tentity = {\n\t\t\t\tclaims: {\n\t\t\t\t\tP123: [ {\n\t\t\t\t\t\tmainsnak: { datatype: expectedType }\n\t\t\t\t\t} ]\n\t\t\t\t}\n\t\t\t},\n\t\t\tentityLoadedHook = { add: sinon.stub().yields( entity ) },\n\t\t\tdataTypeStore = newPropertyDataTypeStore( { entityLoadedHook: entityLoadedHook } );\n\n\t\tdataTypeStore.getDataTypeForProperty( propertyId ).then( function ( dataType ) {\n\t\t\tassert.strictEqual( dataType, expectedType );\n\n\t\t\tdataTypeStore.getDataTypeForProperty( propertyId ).then( function ( dataType ) {\n\t\t\t\tassert.strictEqual( dataType, expectedType );\n\t\t\t\tsinon.assert.calledOnce( entityLoadedHook.add );\n\n\t\t\t\tdone();\n\t\t\t} );\n\t\t} );\n\t} );\n\n\tQUnit.test( 'Given previous successful entity entityStore lookup, it remembers the result', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\texpectedType = 'quantity',\n\t\t\tpropertyId = 'P666',\n\t\t\tentityStore = {\n\t\t\t\tget: sinon.stub().returns( $.Deferred().resolve( {\n\t\t\t\t\tgetDataTypeId: function () {\n\t\t\t\t\t\treturn expectedType;\n\t\t\t\t\t}\n\t\t\t\t} ) )\n\t\t\t},\n\t\t\tdataTypeStore = newPropertyDataTypeStore( { entityStore: entityStore } );\n\n\t\tdataTypeStore.getDataTypeForProperty( propertyId ).then( function ( dataType ) {\n\t\t\tassert.strictEqual( dataType, expectedType );\n\n\t\t\tdataTypeStore.getDataTypeForProperty( propertyId ).then( function ( dataType ) {\n\t\t\t\tassert.strictEqual( dataType, expectedType );\n\t\t\t\tsinon.assert.calledOnce( entityStore.get );\n\n\t\t\t\tdone();\n\t\t\t} );\n\t\t} );\n\t} );\n\n}( sinon ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/qunit/wikibase.sites.tests.js","messages":[{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":12,"column":null,"nodeType":"Block","endLine":12,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Tag @type must have a type.","line":19,"column":null,"nodeType":"Block","endLine":19,"endColumn":null}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n */\n\n( function ( wb, Site ) {\n\t'use strict';\n\n\t/**\n\t * All site groups used in site definitions in TEST_SITE_DEFINITIONS.\n\t *\n\t * @type String[]\n\t */\n\tvar TEST_SITE_GROUPS = [ 'wikipedia', 'foo bar group' ];\n\n\t/**\n\t * Site definition loaded to mw.config var \"wbSiteDetails\" before each test.\n\t *\n\t * @type Object\n\t */\n\tvar TEST_SITE_DEFINITIONS = {\n\t\tnnwiki: {\n\t\t\tapiUrl: '//nn.wikipedia.org/w/api.php',\n\t\t\tid: 'nnwiki',\n\t\t\tgroup: TEST_SITE_GROUPS[ 0 ],\n\t\t\tlanguageCode: 'nn',\n\t\t\tname: null,\n\t\t\tpageUrl: '//nn.wikipedia.org/wiki/$1',\n\t\t\tshortName: 'norsk nynorsk'\n\t\t},\n\t\t'foo-site': {\n\t\t\tapiUrl: '//foo.site.bar/api.php',\n\t\t\tid: 'foo-site',\n\t\t\tgroup: TEST_SITE_GROUPS[ 1 ],\n\t\t\tlanguageCode: 'foo',\n\t\t\tname: null,\n\t\t\tpageUrl: '//foo.site.bar/pages/$1',\n\t\t\tshortName: 'foo site'\n\t\t},\n\t\tsiteInExistingGroup: {\n\t\t\tapiUrl: '//someSite/api.php',\n\t\t\tglobalSiteId: 'site-in-existing-group',\n\t\t\tgroup: TEST_SITE_GROUPS[ 1 ],\n\t\t\tid: 'siteInExistingGroup',\n\t\t\tlanguageCode: 'siteInExistingGroup',\n\t\t\tname: null,\n\t\t\tpageUrl: '//someSite/pages/$1',\n\t\t\tshortName: 'some site'\n\t\t}\n\t};\n\n\tQUnit.module( 'wikibase.sites', QUnit.newMwEnvironment( {\n\t\tsetup: function () {\n\t\t\t// empty cache of wikibases site details\n\t\t\twb.sites._siteList = null;\n\n\t\t\tmw.config.set( {\n\t\t\t\twbSiteDetails: TEST_SITE_DEFINITIONS\n\t\t\t} );\n\t\t}\n\t} ) );\n\n\tQUnit.test( 'basic', function ( assert ) {\n\t\tassert.ok(\n\t\t\twb.sites instanceof Object,\n\t\t\t'initiated wikibase object'\n\t\t);\n\t} );\n\n\t/**\n\t * Generic test for testing an object of sites as supposed to be returned by getSites() and\n\t * others.\n\t *\n\t * TODO: Another reason why there should be a SiteList object, much easier to verify that the\n\t *  returned value of different functions returning a list of sites is valid.\n\t *\n\t * @param {QUnit.assert} assert\n\t * @param {string} fnName\n\t * @param {Object} sites\n\t */\n\tfunction siteSetTest( assert, fnName, sites ) {\n\t\tassert.ok(\n\t\t\t$.isPlainObject( sites ),\n\t\t\tfnName + '() returns a plain object'\n\t\t);\n\n\t\tvar allSiteInstances = true;\n\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t$.each( sites, function ( i, site ) {\n\t\t\tallSiteInstances = allSiteInstances && ( site instanceof Site );\n\t\t} );\n\n\t\tassert.ok(\n\t\t\tallSiteInstances,\n\t\t\tfnName + '() returned object fields only hold site objects'\n\t\t);\n\t}\n\n\tQUnit.test( 'wikibase.sites.getSites()', function ( assert ) {\n\t\tvar sites = wb.sites.getSites();\n\t\tsiteSetTest( assert, 'getSites', sites );\n\n\t\tassert.strictEqual(\n\t\t\tsites.length,\n\t\t\tTEST_SITE_DEFINITIONS.length,\n\t\t\t'getSites() returns expected number of sites'\n\t\t);\n\t} );\n\n\tQUnit.test( 'wikibase.sites.getSitesOfGroup()', function ( assert ) {\n\t\tTEST_SITE_GROUPS.forEach( function ( group ) {\n\t\t\tvar sites = wb.sites.getSitesOfGroup( group );\n\t\t\tsiteSetTest( assert, 'getSitesOfGroup', sites );\n\n\t\t\tvar allFromRightGroup = true;\n\t\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t\t$.each( sites, function ( i, site ) {\n\t\t\t\tallFromRightGroup = allFromRightGroup && ( site.getGroup() === group );\n\t\t\t} );\n\n\t\t\tassert.ok(\n\t\t\t\tallFromRightGroup,\n\t\t\t\t'getSitesOfGroup( \"' + group + '\" ) only returned sites of group \"' + group + '\"'\n\t\t\t);\n\t\t} );\n\t} );\n\n\tQUnit.test( 'wikibase.sites.getSite()', function ( assert ) {\n\t\tassert.ok(\n\t\t\twb.sites.getSite( 'nnwiki' ) instanceof Site,\n\t\t\t'trying to get a known site by its ID returns a site object'\n\t\t);\n\n\t\tassert.strictEqual(\n\t\t\twb.sites.getSite( 'unknown-site' ),\n\t\t\tnull,\n\t\t\t'trying to get an unknown site returns null'\n\t\t);\n\t} );\n\n}( wikibase, wikibase.Site ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/repo/tests/selenium/specs/blocked.js","messages":[{"ruleId":"mocha/no-setup-in-describe","severity":1,"message":"Unexpected member expression in describe block. Member expressions may call functions via getters.","line":61,"column":28,"nodeType":"MemberExpression","endLine":61,"endColumn":37}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst assert = require( 'assert' ),\n\tMWBot = require( 'mwbot' ),\n\tPage = require( 'wdio-mediawiki/Page' ),\n\tLoginPage = require( 'wdio-mediawiki/LoginPage' );\n\nconst bot = new MWBot( {\n\tapiUrl: browser.config.baseUrl + '/api.php'\n} );\n\ndescribe( 'blocked user cannot use', function () {\n\n\tbefore( function () {\n\t\tbot.loginGetEditToken( {\n\t\t\tusername: browser.config.mwUser,\n\t\t\tpassword: browser.config.mwPwd\n\t\t} );\n\n\t\tLoginPage.loginAdmin();\n\t} );\n\n\tbeforeEach( function blockUser() {\n\t\treturn bot.request( {\n\t\t\taction: 'block',\n\t\t\tuser: browser.config.mwUser,\n\t\t\texpiry: '1 minute',\n\t\t\treason: 'Wikibase browser test (T211120)',\n\t\t\ttoken: bot.editToken\n\t\t} );\n\t} );\n\n\tafterEach( function unblockUser() {\n\t\treturn bot.request( {\n\t\t\taction: 'unblock',\n\t\t\tuser: browser.config.mwUser,\n\t\t\treason: 'Wikibase browser test done (T211120)',\n\t\t\ttoken: bot.editToken\n\t\t} );\n\t} );\n\n\tfunction assertIsUserBlockedError() {\n\t\t$( '#mw-returnto' ).waitForDisplayed();\n\n\t\tassert.strictEqual( $( '#firstHeading' ).getText(), 'User is blocked' );\n\t}\n\n\tconst tests = [\n\t\t{ name: 'SetLabel', ids: [ 'wb-modifyentity-id', 'wb-setlabel-submit' ] },\n\t\t{ name: 'SetDescription', ids: [ 'wb-modifyentity-id', 'wb-setdescription-submit' ] },\n\t\t{ name: 'SetAliases', ids: [ 'wb-modifyentity-id', 'wb-setaliases-submit' ] },\n\t\t{ name: 'SetLabelDescriptionAliases', ids: [ 'wb-modifyentity-id', 'wb-setlabeldescriptionaliases-submit' ] },\n\t\t{ name: 'SetSiteLink', ids: [ 'wb-modifyentity-id', 'wb-setsitelink-submit' ] },\n\t\t{ name: 'NewItem', ids: [ 'wb-newentity-label', 'wb-newentity-submit' ] },\n\t\t{ name: 'NewProperty', ids: [ 'wb-newentity-label', 'wb-newentity-submit' ] },\n\t\t{ name: 'MergeItems', ids: [ 'wb-mergeitems-fromid', 'wb-mergeitems-submit' ] },\n\t\t{ name: 'RedirectEntity', ids: [ 'wb-redirectentity-fromid', 'wb-redirectentity-submit' ] }\n\t];\n\n\tfor ( const test of tests ) {\n\t\tconst title = `Special:${test.name}`;\n\t\tit( title, function () {\n\t\t\t( new Page() ).openTitle( title );\n\n\t\t\tassertIsUserBlockedError();\n\n\t\t\tfor ( const id of test.ids ) {\n\t\t\t\tconst selector = `#${id}`;\n\t\t\t\tassert(\n\t\t\t\t\t!$( selector ).isExisting(),\n\t\t\t\t\t`element \"${selector}\" should not exist`\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t}\n} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/repo/tests/selenium/specs/item.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 103. Maximum allowed is 100.","line":13,"column":1,"nodeType":"Program","messageId":"max","endLine":13,"endColumn":98},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":48,"column":1,"nodeType":"Program","messageId":"max","endLine":48,"endColumn":108}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst Util = require( 'wdio-mediawiki/Util' );\nconst assert = require( 'assert' );\nconst WikibaseApi = require( 'wdio-wikibase/wikibase.api' );\nconst EntityPage = require( 'wdio-wikibase/pageobjects/entity.page' );\nconst ItemPage = require( 'wdio-wikibase/pageobjects/item.page' );\nconst Page = require( 'wdio-mediawiki/Page' );\n\ndescribe( 'item', function () {\n\n\tit( 'can add a statement using the keyboard', function () {\n\t\t// high-level overview: add statement, add qualifier, add second qualifier, add reference, save\n\n\t\tconst itemId = browser.call( () => WikibaseApi.createItem( Util.getTestString( 'T154869-' ) ) );\n\t\tconst propertyId = browser.call( () => WikibaseApi.getProperty( 'string' ) );\n\n\t\tEntityPage.open( itemId );\n\n\t\t// begin adding statement (using the mouse)\n\t\tItemPage.addStatementLink.waitForDisplayed();\n\t\tItemPage.addStatementLink.click();\n\t\t// enter the main value\n\t\tItemPage.propertyInputField.waitForDisplayed();\n\t\t// property field should be automatically focused\n\t\tbrowser.keys( propertyId );\n\t\tItemPage.selectFirstSuggestedEntityOnEntitySelector();\n\n\t\tItemPage.valueInputField.waitForDisplayed();\n\t\t// focus auto moved after selection\n\t\tbrowser.keys( 'main value' );\n\n\t\t// move focus to “add qualifier” and activate link\n\t\tbrowser.keys( [ 'Tab' ] );\n\t\tbrowser.keys( [ 'Enter' ] );\n\t\t// property input automatically focused\n\t\tconst statement = ItemPage.statements[ 0 ];\n\t\tItemPage.getNthQualifierPropertyInput( statement, 0 ).waitForDisplayed();\n\t\t// property field should be automatically focused\n\t\tbrowser.keys( propertyId );\n\t\tItemPage.selectFirstSuggestedEntityOnEntitySelector();\n\t\tItemPage.firstQualifier.waitForExist();\n\t\t// focus auto moved after selection\n\t\tbrowser.keys( 'qualifier 1' );\n\t\tbrowser.waitUntil( () => ItemPage.isSaveButtonEnabled() );\n\n\t\t// move focus to “add reference” and activate link\n\t\t// (first Tab skips over link to remove current qualifier, second one over link to add another qualifier)\n\t\tbrowser.keys( [ 'Tab', 'Tab', 'Tab' ] );\n\t\tbrowser.keys( [ 'Enter' ] ); // this should also not save the statement (T154869)\n\t\t// property input automatically focused\n\t\tItemPage.getNthReferencePropertyInput( statement, 0 ).waitForDisplayed();\n\t\t// property field should be automatically focused\n\t\tbrowser.keys( propertyId );\n\t\tItemPage.selectFirstSuggestedEntityOnEntitySelector();\n\n\t\tItemPage.firstReference.waitForExist();\n\t\t// focus auto moved after selection\n\t\tbrowser.keys( 'reference 1-1' );\n\t\tbrowser.waitUntil( () => {\n\t\t\treturn ItemPage.isSaveButtonEnabled();\n\t\t} );\n\n\t\t// focus still on reference value input, can save entire statement from there\n\t\tbrowser.keys( [ 'Enter' ] );\n\t\tItemPage.valueInputField.waitForExist( { reverse: true } );\n\t} );\n\n\tit( 'old revisions do not have an edit link', function () {\n\t\tconst itemId = browser.call( () => WikibaseApi.createItem( Util.getTestString( 'T95406-' ) ) );\n\t\tconst entity = browser.call( () => WikibaseApi.getEntity( itemId ) );\n\n\t\tEntityPage.open( itemId );\n\t\tItemPage.editButton.waitForExist();\n\t\tItemPage.editItemDescription( 'revision 1' );\n\t\tItemPage.editButton.waitForExist();\n\n\t\t( new Page() ).openTitle( `Special:EntityPage/${itemId}`, { oldid: entity.lastrevid } );\n\n\t\tbrowser.pause( 1000 );\n\t\tassert( !ItemPage.editButton.isExisting() );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/repo/tests/selenium/specs/nonexisting.item.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/repo/tests/selenium/specs/readmode.references.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/repo/tests/selenium/specs/tainted-ref.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/repo/tests/selenium/wdio.conf.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/api-testing/LuaWikibaseIntegrationTest.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/view/resources/jquery/jquery.removeClassByRegex.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/jquery.sticknode.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'stickyNode' is already declared in the upper scope on line 268 column 8.","line":274,"column":23,"nodeType":"Identifier","messageId":"noShadow","endLine":274,"endColumn":33},{"ruleId":"no-shadow","severity":1,"message":"'stickyNode' is already declared in the upper scope on line 268 column 8.","line":288,"column":23,"nodeType":"Identifier","messageId":"noShadow","endLine":288,"endColumn":33}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\tvar $window = $( window ),\n\t\tEventSingletonManager = require( './jquery.util.EventSingletonManager.js' ),\n\t\teventSingleton = new EventSingletonManager(),\n\t\tPLUGIN_NAME = 'sticknode';\n\n\t/**\n\t * @constructor\n\t *\n\t * @param {jQuery} $node\n\t * @param {Object} options\n\t */\n\tvar StickyNode = function ( $node, options ) {\n\t\tthis.$node = $node;\n\t\tthis.$node.data( PLUGIN_NAME, this );\n\n\t\tthis._options = $.extend( {\n\t\t\t$container: null,\n\t\t\tautoWidth: false,\n\t\t\tzIndex: 1\n\t\t}, options );\n\n\t\tthis._initialAttributes = {};\n\t};\n\n\t$.extend( StickyNode.prototype, {\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$node: null,\n\n\t\t/**\n\t\t * @type {jQuery|null}\n\t\t */\n\t\t_$clone: null,\n\n\t\t/**\n\t\t * @type {Object}\n\t\t */\n\t\t_options: null,\n\n\t\t/**\n\t\t * @type {Object}\n\t\t */\n\t\t_initialAttributes: null,\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t */\n\t\t_changesDocumentHeight: false,\n\n\t\t/**\n\t\t * Destroys and unregisters the plugin.\n\t\t */\n\t\tdestroy: function () {\n\t\t\teventSingleton.unregister(\n\t\t\t\tthis.$node.data( PLUGIN_NAME ),\n\t\t\t\twindow,\n\t\t\t\t'.' + PLUGIN_NAME\n\t\t\t);\n\t\t\tthis.$node.removeData( PLUGIN_NAME );\n\n\t\t\tif ( this._$clone ) {\n\t\t\t\tthis._$clone.remove();\n\t\t\t\tthis._$clone = null;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\t_clipsContainer: function () {\n\t\t\tif ( !this._options.$container || !this.isFixed() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar nodeBottom = this.$node.offset().top + this.$node.outerHeight();\n\n\t\t\tvar containerBottom = this._options.$container.offset().top\n\t\t\t\t+ this._options.$container.outerHeight();\n\n\t\t\treturn nodeBottom > containerBottom;\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\t_isScrolledAfterContainer: function () {\n\t\t\tif ( !this._options.$container ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar containerBottom = this._options.$container.offset().top\n\t\t\t\t+ this._options.$container.outerHeight();\n\n\t\t\treturn $window.scrollTop() + this.$node.outerHeight() > containerBottom;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} scrollTop\n\t\t * @return {boolean}\n\t\t */\n\t\t_isScrolledBeforeContainer: function ( scrollTop ) {\n\t\t\tif ( !this._initialAttributes.offset ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar initTopOffset = this._initialAttributes.offset.top;\n\n\t\t\treturn !this._changesDocumentHeight && scrollTop < initTopOffset\n\t\t\t\t|| this._changesDocumentHeight && scrollTop < initTopOffset - this.$node.outerHeight();\n\t\t},\n\n\t\t_fix: function () {\n\t\t\tif ( this.isFixed() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._initialAttributes = {\n\t\t\t\toffset: this.$node.offset(),\n\t\t\t\tposition: this.$node.css( 'position' ),\n\t\t\t\ttop: this.$node.css( 'top' ),\n\t\t\t\tleft: this.$node.css( 'left' ),\n\t\t\t\twidth: this.$node.css( 'width' )\n\t\t\t};\n\n\t\t\tvar width = this.$node.width();\n\n\t\t\t// Cannot fix the clone instead of the original node since the clone does not feature event\n\t\t\t// bindings.\n\t\t\tthis._$clone = this.$node.clone()\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.insertBefore( this.$node );\n\n\t\t\tthis.$node\n\t\t\t.css( 'left', this._initialAttributes.offset.left + 'px' )\n\t\t\t.css( 'top', this.$node.outerHeight() - this.$node.outerHeight( true ) )\n\t\t\t.css( 'width', width )\n\t\t\t.css( 'position', 'fixed' )\n\t\t\t.css( 'z-index', this._options.zIndex );\n\n\t\t\tif ( this._$clone.css( 'display' ) === 'table-header-group' ) {\n\t\t\t\tvar $original = this._$clone.find( '*' );\n\n\t\t\t\tthis.$node.find( '*' ).each( function ( i ) {\n\t\t\t\t\tvar $node = $( this );\n\t\t\t\t\tif ( $node.css( 'display' ) === 'table-cell' ) {\n\t\t\t\t\t\t$node.width( $original.eq( i ).width() + 'px' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\t_unfix: function () {\n\t\t\tif ( !this.isFixed() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._$clone ) {\n\t\t\t\tthis._$clone.remove();\n\t\t\t\tthis._$clone = null;\n\t\t\t}\n\n\t\t\tthis.$node\n\t\t\t.css( 'left', this._initialAttributes.left )\n\t\t\t.css( 'top', this._initialAttributes.top )\n\t\t\t.css( 'width', this._options.autoWidth ? 'auto' : this._initialAttributes.width )\n\t\t\t.css( 'position', this._initialAttributes.position );\n\n\t\t\tthis._initialAttributes.offset = null;\n\t\t},\n\n\t\t/**\n\t\t * Returns whether the node the plugin is initialized on is in \"fixed\" position.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFixed: function () {\n\t\t\treturn this.$node.css( 'position' ) === 'fixed';\n\t\t},\n\n\t\t/**\n\t\t * Updates the node's positioning behaviour according to a specific scroll offset.\n\t\t *\n\t\t * @param {number} scrollTop\n\t\t * @param {boolean} force\n\t\t * @return {boolean}\n\t\t */\n\t\tupdate: function ( scrollTop, force ) {\n\t\t\tvar changedState = false;\n\n\t\t\tif ( force && this.isFixed() ) {\n\t\t\t\tthis._unfix();\n\t\t\t}\n\n\t\t\tif ( !this.isFixed()\n\t\t\t\t&& scrollTop > this.$node.offset().top\n\t\t\t\t&& !this._isScrolledAfterContainer()\n\t\t\t) {\n\t\t\t\tthis._fix();\n\t\t\t\tchangedState = true;\n\t\t\t}\n\n\t\t\tif ( this.isFixed() && this._isScrolledBeforeContainer( scrollTop )\n\t\t\t\t|| this._clipsContainer()\n\t\t\t) {\n\t\t\t\tthis._unfix();\n\t\t\t\tchangedState = !changedState;\n\t\t\t}\n\n\t\t\treturn changedState;\n\t\t},\n\n\t\t/**\n\t\t * Re-fixes the node if it is fixed, properly updating scroll position. Should be called\n\t\t * whenever the node's content has been updated.\n\t\t */\n\t\trefresh: function () {\n\t\t\tif ( this.isFixed() ) {\n\t\t\t\tthis._unfix();\n\t\t\t\tthis._fix();\n\t\t\t\tthis.$node.triggerHandler( PLUGIN_NAME + 'update' );\n\t\t\t}\n\t\t}\n\t} );\n\n\t/**\n\t * jQuery sticknode plugin.\n\t * Sticks a node with \"position: fixed\" when vertically scrolling it out of the viewport.\n\t * Be aware that plugin does not handle dynamic height changes (e.g. if the node contains\n\t * interactive elements that wipe out additional content). The code applying the widget needs to be\n\t * aware of dynamic height changes. Consequently, whenever the height of the node the plugin is\n\t * initialized on changes, a call to the refresh() function should be made to avoid undesired\n\t * clipping.\n\t *\n\t * @param {Object} [options]\n\t * @param {jQuery} [options.$container]\n\t *        Node specifying the bottom boundary for the node the plugin is initialized on. If the\n\t *        node the plugin is initialized on clips out of the container, it is reset to static\n\t *        position.\n\t * @param {boolean} [options.autoWidth=false]\n\t *        When not fixed, apply \"auto\" width attribute instead of width computed from the unfixed\n\t *        state.\n\t * @param {number} [options.zIndex=1]\n\t *        Custom z-index attribute.\n\t * @return {jQuery}\n\t *\n\t * @event sticknodeupdate\n\t *        Triggered when the node the widget is initialized and updates its positioning behaviour.\n\t *        - {jQuery.Event}\n\t */\n\t$.fn.sticknode = function ( options ) {\n\t\toptions = options || {};\n\n\t\tthis.each( function () {\n\t\t\tvar $node = $( this );\n\n\t\t\tif ( $node.data( PLUGIN_NAME ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar stickyNode = new StickyNode( $( this ), options );\n\n\t\t\teventSingleton.register(\n\t\t\t\tstickyNode,\n\t\t\t\twindow,\n\t\t\t\t'scroll.' + PLUGIN_NAME + ' ' + 'touchmove.' + PLUGIN_NAME,\n\t\t\t\tfunction ( event, stickyNode ) {\n\t\t\t\t\tif ( stickyNode.update( $window.scrollTop() ) ) {\n\t\t\t\t\t\tstickyNode.$node.triggerHandler( PLUGIN_NAME + 'update' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tthrottle: 150\n\t\t\t\t}\n\t\t\t);\n\n\t\t\teventSingleton.register(\n\t\t\t\tstickyNode,\n\t\t\t\twindow,\n\t\t\t\t'resize.' + PLUGIN_NAME,\n\t\t\t\tfunction ( event, stickyNode ) {\n\t\t\t\t\tif ( stickyNode.update( $window.scrollTop(), true ) ) {\n\t\t\t\t\t\tstickyNode.$node.triggerHandler( PLUGIN_NAME + 'update' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tthrottle: 150\n\t\t\t\t}\n\t\t\t);\n\t\t} );\n\n\t\treturn this;\n\t};\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/jquery.util.EventSingletonManager.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/jquery.util.getDirectionality.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":19,"column":null,"nodeType":"Block","endLine":19,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":196,"column":null,"nodeType":"Block","endLine":196,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":197,"column":null,"nodeType":"Block","endLine":197,"endColumn":null}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * Displays and allows editing of `datamodel.MultiTerm` objects.\n\t *\n\t * @see datamodel.MultiTerm\n\t * @class jQuery.wikibase.aliasesview\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {datamodel.MultiTerm} options.value\n\t * @param {string} [options.helpMessage=mw.msg( 'wikibase-aliases-input-help-message' )]\n\t */\n\t$.widget( 'wikibase.aliasesview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-aliasesview',\n\t\t\ttemplateParams: [\n\t\t\t\tfunction () {\n\t\t\t\t\treturn this.options.value.getTexts().length === 0 ? 'wb-empty' : '';\n\t\t\t\t}, // additional class\n\t\t\t\t'', // list items\n\t\t\t\t'', // toolbar\n\t\t\t\tfunction () {\n\t\t\t\t\treturn $.util.getDirectionality( this.options.value.getLanguageCode() );\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\treturn this.options.value.getLanguageCode();\n\t\t\t\t}\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$list: 'ul'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\thelpMessage: mw.msg( 'wikibase-aliases-input-help-message' )\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !( this.options.value instanceof datamodel.MultiTerm ) ) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( this.$list.children( 'li' ).length !== this.options.value.getTexts().length ) {\n\t\t\t\tthis.draw();\n\t\t\t}\n\n\t\t\tthis.$list.addClass( this.widgetFullName + '-input' );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this.$list ) {\n\t\t\t\tthis.$list.removeClass( this.widgetFullName + '-input' );\n\t\t\t}\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdraw: function () {\n\t\t\tthis.$list.off( '.' + this.widgetName );\n\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tthis._initTagadata();\n\t\t\t} else {\n\t\t\t\tvar self = this,\n\t\t\t\t\ttagadata = this.$list.data( 'tagadata' );\n\n\t\t\t\tif ( tagadata ) {\n\t\t\t\t\ttagadata.destroy();\n\t\t\t\t}\n\n\t\t\t\tthis.element.toggleClass( 'wb-empty', this.options.value.getTexts().length === 0 );\n\n\t\t\t\tthis.$list.empty();\n\n\t\t\t\tthis.options.value.getTexts().forEach( function ( text ) {\n\t\t\t\t\tself.$list.append( mw.wbTemplate( 'wikibase-aliasesview-list-item', text ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * Creates and initializes the `jQuery.ui.tagadata` widget.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_initTagadata: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis.$list\n\t\t\t.tagadata( {\n\t\t\t\tplaceholderText: mw.msg( 'wikibase-alias-edit-placeholder' )\n\t\t\t} )\n\t\t\t.on(\n\t\t\t\t'tagadatatagremoved.' + this.widgetName\n\t\t\t\t+ ' tagadatatagchanged.' + this.widgetName\n\t\t\t\t+ ' tagadatatagremoved.' + this.widgetName, function ( event ) {\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tvar expansionOptions = {\n\t\t\t\texpandOnResize: false,\n\t\t\t\tcomfortZone: 16, // width of .ui-icon\n\t\t\t\tmaxWidth: function () {\n\t\t\t\t\t// TODO/FIXME: figure out why this requires at least -17, can't be because of padding + border\n\t\t\t\t\t// which is only 6 for both sides\n\t\t\t\t\treturn self.$list.width() - 20;\n\t\t\t\t}\n\t\t\t\t/*\n\t\t\t\t// TODO/FIXME: both solutions are not perfect, when tag larger than available space either the\n\t\t\t\t// input will be auto-resized and not show the whole text or we still show the whole tag but it\n\t\t\t\t// will break the site layout. A solution would be replacing input with textarea.\n\t\t\t\tmaxWidth: function() {\n\t\t\t\t\tvar tagList = self._getTagadata().tagList;\n\t\t\t\t\tvar origCssDisplay = tagList.css( 'display' );\n\t\t\t\t\ttagList.css( 'display', 'block' );\n\t\t\t\t\tvar width = tagList.width();\n\t\t\t\t\ttagList.css( 'display', origCssDisplay );\n\t\t\t\t\treturn width;\n\t\t\t\t}\n\t\t\t\t */\n\t\t\t};\n\n\t\t\tvar tagadata = this.$list.data( 'tagadata' );\n\n\t\t\t// calculate size for all input elements initially:\n\t\t\ttagadata.getTags().add( tagadata.getHelperTag() )\n\t\t\t\t.find( 'input' ).inputautoexpand( expansionOptions );\n\n\t\t\t// also make sure that new helper tags will calculate size correctly:\n\t\t\tthis.$list.on( 'tagadatahelpertagadded.' + this.widgetName, function ( event, tag ) {\n\t\t\t\t$( tag ).find( 'input' ).inputautoexpand( expansionOptions );\n\t\t\t} );\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\t// FIXME: This could be much faster\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t_stopEditing: function () {\n\t\t\t// FIXME: This could be much faster\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} when trying to set the widget's value to something other than a\n\t\t *         `datamodel.MultiTerm` instance.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' && !( value instanceof datamodel.MultiTerm ) ) {\n\t\t\t\tthrow new Error( 'Value needs to be a datamodel.MultiTerm instance' );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.call( this, key, value );\n\n\t\t\tif ( key === 'disabled' && this.isInEditMode() ) {\n\t\t\t\tthis.$list.data( 'tagadata' ).option( 'disabled', value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t *\n\t\t * @param {datamodel.MultiTerm} [value]\n\t\t * @return {datamodel.MultiTerm|undefined}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\treturn this.options.value;\n\t\t\t}\n\n\t\t\tvar tagadata = this.$list.data( 'tagadata' );\n\n\t\t\treturn new datamodel.MultiTerm(\n\t\t\t\tthis.options.value.getLanguageCode(),\n\t\t\t\t// tagadata.getTags() returns a jquery object of html nodes\n\t\t\t\t// eslint-disable-next-line no-jquery/no-map-util\n\t\t\t\t$.map( tagadata.getTags(), function ( tag ) {\n\t\t\t\t\treturn tagadata.getTagLabel( $( tag ) );\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tthis.$list.data( 'tagadata' ).getHelperTag().find( 'input' ).trigger( 'focus' );\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.badgeselector.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":22,"column":null,"nodeType":"Block","endLine":22,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":26,"column":null,"nodeType":"Block","endLine":26,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":31,"column":null,"nodeType":"Block","endLine":31,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":33,"column":null,"nodeType":"Block","endLine":33,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":37,"column":null,"nodeType":"Block","endLine":37,"endColumn":null},{"ruleId":"no-shadow","severity":1,"message":"'$menu' is already declared in the upper scope on line 15 column 6.","line":216,"column":5,"nodeType":"Identifier","messageId":"noShadow","endLine":216,"endColumn":10},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":378,"column":3,"nodeType":"Block","endLine":380,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":419,"column":3,"nodeType":"Block","endLine":421,"endColumn":6}],"errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget;\n\n\t/**\n\t * References one single $menu instance that is reused for all badgeselector instances.\n\t *\n\t * @type {jQuery}\n\t */\n\tvar $menu = null;\n\n\t/**\n\t * Selector for toggling badges.\n\t *\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t *\n\t * @option {string[]} [value]\n\t *         Item ids of badges currently assigned.\n\t *         Default: []\n\t *\n\t * @option {Object} [badges]\n\t *         All badges that may be assigned.\n\t *         Structure: {<{string} item id>: <{string} custom badge css classes>}\n\t *         Default: {}\n\t *\n\t * @option {wikibase.entityIdFormatter.entityIdPlainFormatter} entityIdPlainFormatter\n\t *\n\t * @option {boolean} [isRtl]\n\t *         Whether the widget is displayed in right-to-left context.\n\t *         Default: false\n\t *\n\t * @option {Object} [messages]\n\t *         - badge-placeholder-title\n\t *           HTML title attribute of the placeholder displayed when no badge is selected.\n\t *\n\t * @event change\n\t *        - {jQuery.Event}\n\t *\n\t * @event afterstartediting\n\t *       - {jQuery.Event}\n\t *\n\t * @event afterstopediting\n\t *        - {jQuery.Event}\n\t *        - {boolean} Whether to drop the value.\n\t */\n\t$.widget( 'wikibase.badgeselector', PARENT, {\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.options\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-badgeselector',\n\t\t\ttemplateParams: [\n\t\t\t\t''\n\t\t\t],\n\t\t\ttemplateShortCuts: {},\n\t\t\tvalue: [],\n\t\t\tbadges: {},\n\t\t\tentityIdPlainFormatter: null,\n\t\t\tisRtl: false,\n\t\t\tmessages: {\n\t\t\t\t'badge-placeholder-title': 'Click to assign a badge.'\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.entityIdPlainFormatter ) {\n\t\t\t\tthrow new Error( 'Required option(s) missing' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._createBadges();\n\t\t\tthis._attachEventHandlers();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( $( '.' + this.widgetBaseClass ).length === 0 ) {\n\t\t\t\tthis._detachMenuEventListeners();\n\n\t\t\t\t$menu.data( 'menu' ).destroy();\n\t\t\t\t$menu.remove();\n\t\t\t\t$menu = null;\n\t\t\t} else if ( $menu && ( $menu.data( this.widgetName ) === this ) ) {\n\t\t\t\tthis._detachMenuEventListeners();\n\t\t\t}\n\t\t\tthis.element.removeClass( 'ui-state-active' );\n\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t_attachEventHandlers: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis.element\n\t\t\t.on( 'click.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( !self.isInEditMode() || self.option( 'disabled' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If the menu is already visible, hide it\n\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\tif ( $menu && $menu.data( self.widgetName ) === self && $menu.is( ':visible' ) ) {\n\t\t\t\t\tself._hideMenu();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tself._initMenu()\n\t\t\t\t\t.done( function () {\n\t\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\t\tif ( self.option( 'disabled' ) || $menu.is( ':visible' ) ) {\n\t\t\t\t\t\t\t$menu.hide();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$menu.data( self.widgetName, self );\n\t\t\t\t\t\t$menu.show();\n\t\t\t\t\t\tself.repositionMenu();\n\t\t\t\t\t\tself._attachMenuEventListeners();\n\n\t\t\t\t\t\tself.element.addClass( 'ui-state-active' );\n\t\t\t\t\t} );\n\t\t\t} );\n\t\t},\n\n\t\t_hideMenu: function () {\n\t\t\t$menu.hide();\n\t\t\tthis._detachMenuEventListeners();\n\n\t\t\tthis.element.removeClass( 'ui-state-active' );\n\t\t},\n\n\t\t_attachMenuEventListeners: function () {\n\t\t\tvar self = this;\n\t\t\tvar degrade = function ( event ) {\n\t\t\t\tif ( !$( event.target ).closest( self.element ).length &&\n\t\t\t\t\t!$( event.target ).closest( $menu ).length ) {\n\t\t\t\t\tself._hideMenu();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t$( document ).on( 'mouseup.' + this.widgetName, degrade );\n\t\t\t$( window ).on(\n\t\t\t\t'resize.' + this.widgetName,\n\t\t\t\tfunction ( event ) {\n\t\t\t\t\tself.repositionMenu();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t$menu.on( 'click.' + this.widgetName, function ( event ) {\n\t\t\t\tvar $li = $( event.target ).closest( 'li' ),\n\t\t\t\t\tbadge = $li.data( self.widgetName + '-menuitem-badge' );\n\n\t\t\t\tif ( badge ) {\n\t\t\t\t\tself._toggleBadge( badge, $li.hasClass( 'ui-state-active' ) );\n\t\t\t\t\t$li.toggleClass( 'ui-state-active' );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t_detachMenuEventListeners: function () {\n\t\t\t$( document ).add( $( window ) ).off( '.' + this.widgetName );\n\t\t\t$menu.off( 'click.' + this.widgetName );\n\t\t},\n\n\t\t/**\n\t\t * Creates the individual badges' DOM structures.\n\t\t */\n\t\t_createBadges: function () {\n\t\t\tif ( this.element.children( '.wb-badge' ).length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._updateEmptyBadge();\n\t\t\tthis._addBadges();\n\t\t},\n\n\t\t/**\n\t\t * Returns the static $menu including its instantiation if it has not been performed already.\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_getMenu: function () {\n\t\t\tif ( $menu ) {\n\t\t\t\treturn $menu;\n\t\t\t}\n\n\t\t\t$menu = $( '<ul>' )\n\t\t\t\t.text( '...' )\n\t\t\t\t.addClass( this.widgetFullName + '-menu' )\n\t\t\t\t.appendTo( document.body );\n\n\t\t\treturn $menu.menu();\n\t\t},\n\n\t\t/**\n\t\t * Fills the menu and activates the menu items of the badges already assigned.\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t *         No resolved parameters.\n\t\t *         No rejected parameters.\n\t\t */\n\t\t_initMenu: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\t$menu = this._getMenu();\n\n\t\t\tself.repositionMenu();\n\n\t\t\tthis._fillMenu()\n\t\t\t.done( function () {\n\t\t\t\t$menu.children( 'li' ).each( function () {\n\t\t\t\t\tvar $li = $( this ),\n\t\t\t\t\t\tbadgeId = $li.data( self.widgetName + '-menuitem-badge' );\n\n\t\t\t\t\t$li\n\t\t\t\t\t.addClass( 'ui-menu-item' )\n\t\t\t\t\t.toggleClass( 'ui-state-active', self.value().indexOf( badgeId ) !== -1 );\n\t\t\t\t} );\n\n\t\t\t\t$menu.hide();\n\n\t\t\t\tdeferred.resolve();\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\tdeferred.reject();\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Fills the menu with a menu item for each badge that may be assigned.\n\t\t *\n\t\t * @return {jQuery.Promise}\n\t\t *         No resolved parameters.\n\t\t *         No rejected parameters.\n\t\t */\n\t\t_fillMenu: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\t// eslint-disable-next-line no-jquery/no-map-util\n\t\t\t\tbadgeIds = $.map( this.options.badges, function ( cssClasses, itemId ) {\n\t\t\t\t\treturn itemId;\n\t\t\t\t} );\n\n\t\t\t$.when.apply( $, badgeIds.map( function ( badgeId ) {\n\t\t\t\treturn self.options.entityIdPlainFormatter.format( badgeId );\n\t\t\t} ) ).done( function ( /* … */ ) {\n\t\t\t\tvar badgeLabels = arguments;\n\t\t\t\t$menu.empty();\n\n\t\t\t\tbadgeIds.forEach( function ( itemId, index ) {\n\t\t\t\t\tvar badgeLabel = badgeLabels[ index ];\n\t\t\t\t\tvar $item = $( '<a>' )\n\t\t\t\t\t\t.on( 'click.' + self.widgetName, function ( event ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.text( badgeLabel );\n\n\t\t\t\t\t$( '<li>' )\n\t\t\t\t\t.addClass( self.widgetFullName + '-menuitem-' + itemId )\n\t\t\t\t\t.data( self.widgetName + '-menuitem-badge', itemId )\n\t\t\t\t\t.append( $item\n\t\t\t\t\t\t.prepend( mw.wbTemplate( 'wb-badge',\n\t\t\t\t\t\t\titemId + ' ' + self.options.badges[ itemId ],\n\t\t\t\t\t\t\tbadgeLabel,\n\t\t\t\t\t\t\titemId\n\t\t\t\t\t\t) )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( $menu );\n\t\t\t\t} );\n\n\t\t\t\tdeferred.resolve();\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\t// TODO: Display error message.\n\t\t\t\tdeferred.reject();\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * (De-)Activates a badge.\n\t\t *\n\t\t * @param {string} badgeId\n\t\t * @param {boolean} targetState\n\t\t */\n\t\t_toggleBadge: function ( badgeId, targetState ) {\n\t\t\tif ( targetState ) {\n\t\t\t\tthis.element.children( '.wb-badge-' + badgeId ).remove();\n\t\t\t} else {\n\t\t\t\tthis._addBadge( badgeId );\n\t\t\t}\n\t\t\tthis._updateEmptyBadge();\n\t\t\tthis._trigger( 'change' );\n\t\t},\n\n\t\t_addBadges: function () {\n\t\t\tvar self = this;\n\t\t\tthis.options.value.forEach( function ( badgeId ) {\n\t\t\t\tself._addBadge( badgeId );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Add the DOM for a badge with the given itemId.\n\t\t *\n\t\t * @param {string} badgeId\n\t\t */\n\t\t_addBadge: function ( badgeId ) {\n\t\t\tvar self = this,\n\t\t\t\t$badge;\n\n\t\t\tfunction addBadgeDom( badgeLabel ) {\n\t\t\t\tvar $oldBadge = $badge;\n\n\t\t\t\t$badge = mw.wbTemplate( 'wb-badge',\n\t\t\t\t\tbadgeId + ' ' + self.options.badges[ badgeId ],\n\t\t\t\t\tbadgeLabel,\n\t\t\t\t\tbadgeId\n\t\t\t\t);\n\n\t\t\t\tif ( $oldBadge ) {\n\t\t\t\t\t$oldBadge.replaceWith( $badge );\n\t\t\t\t} else {\n\t\t\t\t\tself.element.append( $badge );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// First add a placeholder without a nice label\n\t\t\taddBadgeDom( badgeId );\n\n\t\t\tthis.options.entityIdPlainFormatter.format( badgeId ).done( function ( badgeLabel ) {\n\t\t\t\t// Now add a badge with the right label\n\t\t\t\taddBadgeDom( badgeLabel );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Make sure there is an empty badge exactly when there should be one.\n\t\t *\n\t\t * An empty badge is needed when in edit mode and no other badges are selected.\n\t\t * The empty badge acts as a menu anchor in this case.\n\t\t */\n\t\t_updateEmptyBadge: function () {\n\t\t\tvar $badges = this.element.children( '.wb-badge' ),\n\t\t\t\tneedEmptyBadge = this.isInEditMode() && $badges.length === 0,\n\t\t\t\t$emptyBadge = $badges.filter( '[data-wb-badge=\"\"]' );\n\n\t\t\tif ( needEmptyBadge && $emptyBadge.length === 0 ) {\n\t\t\t\tthis.element.append( mw.wbTemplate( 'wb-badge',\n\t\t\t\t\t'empty',\n\t\t\t\t\tthis.options.messages[ 'badge-placeholder-title' ],\n\t\t\t\t\t''\n\t\t\t\t) );\n\t\t\t} else if ( !needEmptyBadge && $emptyBadge.length !== 0 ) {\n\t\t\t\t$emptyBadge.remove();\n\t\t\t}\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\tthis._updateEmptyBadge();\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * @param {boolean} dropValue\n\t\t */\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tif ( $menu ) {\n\t\t\t\t$menu.hide();\n\t\t\t}\n\n\t\t\tif ( !dropValue ) {\n\t\t\t\tthis._updateEmptyBadge();\n\n\t\t\t} else {\n\t\t\t\tthis.element.empty();\n\n\t\t\t\t// Reinitialize badges based on this.options.value\n\t\t\t\tthis._addBadges();\n\t\t\t}\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * @param {string[]} value\n\t\t * @return {string[]|*}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\tvalue = [];\n\n\t\t\tthis.element.children( '.wb-badge' ).each( function () {\n\t\t\t\tvar v = $( this ).data( 'wb-badge' );\n\t\t\t\tif ( v ) {\n\t\t\t\t\tvalue.push( v );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' && $menu && $menu.data( this.widgetName ) === this ) {\n\t\t\t\t$menu.hide();\n\t\t\t} else if ( key === 'value' && this.isInEditMode() ) {\n\t\t\t\tthis._initMenu();\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * Aligns the menu to the element the widget is initialized on.\n\t\t */\n\t\trepositionMenu: function () {\n\t\t\t$menu.position( {\n\t\t\t\tof: this.element,\n\t\t\t\tmy: ( this.options.isRtl ? 'right' : 'left' ) + ' top',\n\t\t\t\tat: ( this.options.isRtl ? 'right' : 'left' ) + ' bottom',\n\t\t\t\toffset: '0 1',\n\t\t\t\tcollision: 'none'\n\t\t\t} );\n\t\t}\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":16,"column":null,"nodeType":"Block","endLine":16,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":16,"column":null,"nodeType":"Block","endLine":16,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":95,"column":3,"nodeType":"Block","endLine":97,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":175,"column":3,"nodeType":"Block","endLine":177,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":195,"column":null,"nodeType":"Block","endLine":195,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":196,"column":null,"nodeType":"Block","endLine":196,"endColumn":null}],"errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * Manages a description.\n\t *\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t *\n\t * @option {datamodel.Term} value\n\t *\n\t * @option {string} [inputNodeName='TEXTAREA']\n\t *         Should either be 'TEXTAREA' or 'INPUT'.\n\t */\n\t$.widget( 'wikibase.descriptionview', PARENT, {\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.options\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-descriptionview',\n\t\t\ttemplateParams: [\n\t\t\t\t'', // additional class\n\t\t\t\t'', // text\n\t\t\t\t'' // toolbar\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$text: '.wikibase-descriptionview-text'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tinputNodeName: 'TEXTAREA'\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t *\n\t\t * @throws {Error} if required parameters are not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !( this.options.value instanceof datamodel.Term )\n\t\t\t\t|| this.options.inputNodeName !== 'INPUT' && this.options.inputNodeName !== 'TEXTAREA'\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Required parameter(s) missing' );\n\t\t\t}\n\n\t\t\tvar self = this;\n\n\t\t\tthis.element\n\t\t\t\t.on(\n\t\t\t\t\t'descriptionviewafterstartediting.' + this.widgetName\n\t\t\t\t\t+ ' eachchange.' + this.widgetName,\n\t\t\t\t\tfunction ( event ) {\n\t\t\t\t\t\tif ( self.value().getText() === '' ) {\n\t\t\t\t\t\t\t// Since the widget shall not be in view mode when there is no value, triggering\n\t\t\t\t\t\t\t// the event without a proper value is only done when creating the widget. Disabling\n\t\t\t\t\t\t\t// other edit buttons shall be avoided.\n\t\t\t\t\t\t\t// TODO: Move logic to a sensible place.\n\t\t\t\t\t\t\tself.element.addClass( 'wb-empty' );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.element.removeClass( 'wb-empty' );\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( this.$text.text() === '' ) {\n\t\t\t\tthis.draw();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tvar self = this;\n\n\t\t\t\tthis.element.one( this.widgetEventPrefix + 'afterstopediting', function ( event ) {\n\t\t\t\t\tPARENT.prototype.destroy.call( self );\n\t\t\t\t} );\n\n\t\t\t\tthis.stopEditing( true );\n\t\t\t} else {\n\t\t\t\tPARENT.prototype.destroy.call( this );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Main draw routine.\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar done = $.Deferred().resolve().promise();\n\t\t\tvar self = this,\n\t\t\t\tlanguageCode = this.options.value.getLanguageCode(),\n\t\t\t\tdescriptionText = this.options.value.getText();\n\n\t\t\tif ( descriptionText === '' ) {\n\t\t\t\tdescriptionText = null;\n\t\t\t}\n\n\t\t\tthis.element[ descriptionText ? 'removeClass' : 'addClass' ]( 'wb-empty' );\n\n\t\t\tif ( !this.isInEditMode() && !descriptionText ) {\n\t\t\t\tthis.$text.text( mw.msg( 'wikibase-description-empty' ) );\n\t\t\t\t// Apply lang and dir of UI language\n\t\t\t\t// instead language of that row\n\t\t\t\tvar userLanguage = mw.config.get( 'wgUserLanguage' );\n\t\t\t\tthis.element\n\t\t\t\t.attr( 'lang', userLanguage )\n\t\t\t\t.attr( 'dir', $.util.getDirectionality( userLanguage ) );\n\t\t\t\treturn done;\n\t\t\t}\n\n\t\t\tthis.element\n\t\t\t.attr( 'lang', languageCode )\n\t\t\t.attr( 'dir', $.util.getDirectionality( languageCode ) );\n\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\tthis.$text.text( descriptionText );\n\t\t\t\treturn done;\n\t\t\t}\n\n\t\t\tvar $input = $( document.createElement( this.options.inputNodeName ) );\n\n\t\t\t$input\n\t\t\t.addClass( this.widgetFullName + '-input' )\n\t\t\t// TODO: Inject correct placeholder via options\n\t\t\t.attr( 'placeholder', mw.msg(\n\t\t\t\t'wikibase-description-edit-placeholder-language-aware',\n\t\t\t\twb.getLanguageNameByCode( languageCode )\n\t\t\t) )\n\t\t\t.attr( 'lang', languageCode )\n\t\t\t.attr( 'dir', $.util.getDirectionality( languageCode ) )\n\t\t\t.on( 'keydown.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ENTER ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'eachchange.' + this.widgetName, function ( event ) {\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\n\t\t\tif ( descriptionText ) {\n\t\t\t\t$input.val( descriptionText );\n\t\t\t}\n\n\t\t\tif ( $.fn.inputautoexpand ) {\n\t\t\t\t$input.inputautoexpand( {\n\t\t\t\t\texpandHeight: true,\n\t\t\t\t\tsuppressNewLine: true\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.$text.empty().append( $input );\n\t\t\treturn done;\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\t// FIXME: This could be much faster\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t_stopEditing: function () {\n\t\t\t// FIXME: This could be much faster\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' && !( value instanceof datamodel.Term ) ) {\n\t\t\t\tthrow new Error( 'Value needs to be a datamodel.Term instance' );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.call( this, key, value );\n\n\t\t\tif ( key === 'disabled' && this.isInEditMode() ) {\n\t\t\t\tthis.$text.children( '.' + this.widgetFullName + '-input' ).prop( 'disabled', value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * Gets/Sets the widget's value.\n\t\t *\n\t\t * @param {datamodel.Term} [value]\n\t\t * @return {datamodel.Term|undefined}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\treturn this.options.value;\n\t\t\t}\n\n\t\t\treturn new datamodel.Term(\n\t\t\t\tthis.options.value.getLanguageCode(),\n\t\t\t\tthis.$text.children( '.' + this.widgetFullName + '-input' ).val().trim()\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tthis.$text.children( '.' + this.widgetFullName + '-input' ).trigger( 'focus' );\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entityselector.js","messages":[{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":339,"column":3,"nodeType":"Block","endLine":341,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":360,"column":3,"nodeType":"Block","endLine":362,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":412,"column":3,"nodeType":"Block","endLine":414,"endColumn":6}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\t// TODO: Get rid of MediaWiki context detection by submitting a message provider as option.\n\n\t/**\n\t * Whether loaded in MediaWiki context.\n\t *\n\t * @property {boolean}\n\t * @ignore\n\t */\n\tvar IS_MW_CONTEXT = mw !== undefined && mw.msg;\n\n\t/**\n\t * Whether actual `entityselector` resource loader module is loaded.\n\t *\n\t * @property {boolean}\n\t * @ignore\n\t */\n\tvar IS_MODULE_LOADED = (\n\t\tIS_MW_CONTEXT\n\t\t&& mw.loader.getModuleNames().indexOf( 'jquery.wikibase.entityselector' ) !== -1\n\t);\n\n\t/**\n\t * Returns a message from the MediaWiki context if the `entityselector` module has been loaded.\n\t * If it has not been loaded, the corresponding string defined in the options will be returned.\n\t *\n\t * @ignore\n\t *\n\t * @param {string} msgKey\n\t * @param {string} string\n\t * @return {string}\n\t */\n\tfunction mwMsgOrString( msgKey, string ) {\n\t\t// eslint-disable-next-line mediawiki/msg-doc\n\t\treturn IS_MODULE_LOADED ? mw.msg( msgKey ) : string;\n\t}\n\n\t/**\n\t * Enhances an input box with auto-complete and auto-suggestion functionality for Wikibase entities.\n\t *\n\t *     @example\n\t *     $( 'input' ).entityselector( {\n\t *         url: <{string} URL to the API of a MediaWiki instance running Wikibase repository>,\n\t *         language: <{string} language code of the language to fetch results in>\n\t *     } );\n\t *\n\t * @class jQuery.wikibase.entityselector\n\t * @extends jQuery.ui.suggester\n\t * @uses jQuery.event.special.eachchange\n\t * @uses jQuery.ui.ooMenu\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {string} options.url\n\t *        URL to retrieve results from.\n\t * @param {string} options.language\n\t *        (optional when in MediaWiki context)\n\t *        Language code of the language results shall be fetched in.\n\t *        Defaults to the user language (`mw.config.get( 'wgUserLanguage' )` when in MediaWiki\n\t *        context.\n\t * @param {string} [options.type='item']\n\t *        `Entity` type that will be queried for results.\n\t * @param {number|null} [options.limit=null]\n\t *         Number of results to query the API for. Will pick limit specified server-side if ´null´.\n\t * @param {boolean} [options.caseSensitive=false]\n\t *        Whether the widget shall consider letter case when determining if the first suggestion\n\t *        matches with the current input triggering the \"select\" mechanism.\n\t * @param {number} [options.timeout=8000]\n\t *        Default AJAX timeout in milliseconds.\n\t * @param {Object} [options.messages=Object]\n\t *        Strings used within the widget.\n\t *        Messages should be specified using `mwMsgOrString(<resource loader module message key>,\n\t *        <fallback message>)` in order to use the messages specified in the resource loader module\n\t *        (if loaded).\n\t * @param {string} [options.searchHookName='wikibase.entityselector.search']\n\t *        Name of the hook that fires when searching for entities.\n\t * @param {string} [options.messages.more='more']\n\t *        Label of the link to display more suggestions.\n\t * @param {string[]} [options.showErrorCodes=['failed-property-search']]\n\t *        Show errors with these error-codes in the ui.\n\t * @param {Function} [options.responseErrorFactory=null]\n\t *        Optional Callback to parse error message from response object\n\t *        @see wikibase.api.RepoApiError.newFromApiResponse\n\t */\n\t/**\n\t * @event selected\n\t * Triggered after having selected an entity.\n\t * @param {jQuery.Event} event\n\t * @param {string} entityId\n\t */\n\t$.widget( 'wikibase.entityselector', $.ui.suggester, {\n\n\t\t/**\n\t\t * @property {Object}\n\t\t */\n\t\toptions: {\n\t\t\turl: null,\n\t\t\tlanguage: ( IS_MW_CONTEXT ) ? mw.config.get( 'wgUserLanguage' ) : null,\n\t\t\ttype: 'item',\n\t\t\tlimit: null,\n\t\t\tcaseSensitive: false,\n\t\t\ttimeout: 8000,\n\t\t\tmessages: {\n\t\t\t\tmore: mwMsgOrString( 'wikibase-entityselector-more', 'more' ),\n\t\t\t\tnotfound: mwMsgOrString( 'wikibase-entityselector-notfound', 'Nothing found' ),\n\t\t\t\terror: null\n\t\t\t},\n\t\t\tsearchHookName: 'wikibase.entityselector.search',\n\t\t\tsearchApiParametersHookName: 'wikibase.entityselector.search.api-parameters',\n\t\t\tshowErrorCodes: [ 'failed-property-search' ],\n\t\t\tresponseErrorFactory: null\n\t\t},\n\n\t\t/**\n\t\t * Caching the most current entity returned from the API.\n\t\t *\n\t\t * @property {Object}\n\t\t * @private\n\t\t */\n\t\t_selectedEntity: null,\n\n\t\t/**\n\t\t * Caches retrieved results.\n\t\t *\n\t\t * Warning, PropertySuggester's EntitySelector accesses this!\n\t\t *\n\t\t * @property {Object} [_cache={}]\n\t\t * @protected\n\t\t */\n\t\t_cache: null,\n\n\t\t/**\n\t\t * Error object from last search.\n\t\t *\n\t\t * @property {Object} [_error={}]\n\t\t * @protected\n\t\t */\n\t\t_error: null,\n\n\t\t/**\n\t\t * Warning, PropertySuggester's EntitySelector overrides this!\n\t\t *\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis._cache = {};\n\n\t\t\tif ( !this.options.source ) {\n\t\t\t\tif ( this.options.url === null ) {\n\t\t\t\t\tthrow new Error( 'When not specifying a dedicated source, URL option needs to be '\n\t\t\t\t\t\t+ 'specified' );\n\t\t\t\t} else if ( this.options.language === null ) {\n\t\t\t\t\tthrow new Error( 'When not specifying a dedicated source, language option needs to '\n\t\t\t\t\t\t+ 'be specified.' );\n\t\t\t\t}\n\t\t\t\tthis.options.source = this._initDefaultSource();\n\t\t\t} else if ( typeof this.options.source !== 'function' && !Array.isArray( this.options.source ) ) {\n\t\t\t\tthrow new Error( 'Source needs to be a function or an array' );\n\t\t\t}\n\n\t\t\tif ( !this.options.messages.error ) {\n\t\t\t\tthis.options.messages.error = function () {\n\t\t\t\t\treturn self._error && self._error.detailedMessage ? self._error.detailedMessage : null;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t$.ui.suggester.prototype._create.call( this );\n\n\t\t\tthis.element\n\t\t\t\t.addClass( 'ui-entityselector-input' )\n\t\t\t\t.prop( 'dir', $( document ).prop( 'dir' ) );\n\n\t\t\tthis.options.menu.element.addClass( 'ui-entityselector-list' );\n\n\t\t\tthis.element\n\t\t\t.off( 'blur' )\n\t\t\t.on( 'eachchange.' + this.widgetName, function ( event ) {\n\t\t\t\tself._search( event );\n\t\t\t} )\n\t\t\t.on( 'focusout', function () {\n\t\t\t\tself._indicateRecognizedInput();\n\t\t\t} )\n\t\t\t.on( 'focusin', function () {\n\t\t\t\tself._inEditMode();\n\t\t\t\tself._showDefaultSuggestions();\n\t\t\t} );\n\t\t},\n\n\t\t_indicateRecognizedInput: function () {\n\t\t\tthis._resetInputHighlighting();\n\n\t\t\tif ( this._selectedEntity !== null ) {\n\t\t\t\tthis.element.addClass( 'ui-entityselector-input-recognized' );\n\t\t\t} else if ( this.element.val() !== '' ) {\n\t\t\t\tthis.element.addClass( 'ui-entityselector-input-unrecognized' );\n\t\t\t}\n\t\t},\n\n\t\t_inEditMode: function () {\n\t\t\tthis._resetInputHighlighting();\n\t\t},\n\n\t\t_resetInputHighlighting: function () {\n\t\t\tthis.element.removeClass(\n\t\t\t\t'ui-entityselector-input-recognized ui-entityselector-input-unrecognized'\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis.element.removeClass( 'ui-entityselector-input' );\n\n\t\t\tthis._cache = {};\n\n\t\t\t$.ui.suggester.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t *\n\t\t * @param {jQuery.Event} event\n\t\t */\n\t\t_search: function ( event ) {\n\t\t\tvar self = this;\n\n\t\t\tthis._select( null );\n\n\t\t\tclearTimeout( this._searching );\n\t\t\tthis._searching = setTimeout( function () {\n\t\t\t\tself.search( event );\n\t\t\t}, this.options.delay );\n\t\t},\n\n\t\t/**\n\t\t * Create and return the data object for the api call.\n\t\t *\n\t\t * Warning, PropertySuggester's EntitySelector overrides this!\n\t\t *\n\t\t * @protected\n\t\t * @param {string} term\n\t\t * @return {Object}\n\t\t */\n\t\t_getSearchApiParameters: function ( term ) {\n\t\t\tvar data = {\n\t\t\t\taction: 'wbsearchentities',\n\t\t\t\tsearch: term,\n\t\t\t\tformat: 'json',\n\t\t\t\terrorformat: 'plaintext',\n\t\t\t\tlanguage: this.options.language,\n\t\t\t\tuselang: this.options.language,\n\t\t\t\ttype: this.options.type\n\t\t\t};\n\n\t\t\tif ( this._cache.term === term && this._cache.nextSuggestionOffset ) {\n\t\t\t\tdata.continue = this._cache.nextSuggestionOffset;\n\t\t\t}\n\n\t\t\tif ( this.options.limit ) {\n\t\t\t\tdata.limit = this.options.limit;\n\t\t\t}\n\n\t\t\tmw.hook( this.options.searchApiParametersHookName ).fire( data );\n\n\t\t\treturn data;\n\t\t},\n\n\t\t/**\n\t\t * Initializes the default source pointing to the `wbsearchentities` API module via the URL\n\t\t * provided in the options.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @return {Function}\n\t\t */\n\t\t_initDefaultSource: function () {\n\t\t\tvar self = this;\n\n\t\t\treturn function ( term ) {\n\t\t\t\tvar deferred = $.Deferred(),\n\t\t\t\t\thookResults = self._fireSearchHook( term );\n\n\t\t\t\t// clear previous error\n\t\t\t\tif ( self._error ) {\n\t\t\t\t\tself._error = null;\n\t\t\t\t\tself._cache.suggestions = null;\n\t\t\t\t\tself._updateMenu( [] );\n\t\t\t\t}\n\t\t\t\t$.ajax( {\n\t\t\t\t\turl: self.options.url,\n\t\t\t\t\ttimeout: self.options.timeout,\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\tdata: self._getSearchApiParameters( term )\n\t\t\t\t} )\n\t\t\t\t.done( function ( response, statusText, jqXHR ) {\n\t\t\t\t\t// T141955\n\t\t\t\t\tif ( response.error ) {\n\t\t\t\t\t\tdeferred.reject( response.error.info );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// The default endpoint wbsearchentities responds with an array of errors.\n\t\t\t\t\tif ( response.errors && self.options.responseErrorFactory ) {\n\t\t\t\t\t\tvar error = self.options.responseErrorFactory( response, 'search' );\n\n\t\t\t\t\t\tif ( error && self.options.showErrorCodes.indexOf( error.code ) !== -1 ) {\n\t\t\t\t\t\t\tself._error = error;\n\t\t\t\t\t\t\tself._cache = {};\n\t\t\t\t\t\t\tself._updateMenu( [] );\n\t\t\t\t\t\t\tdeferred.reject( error.message );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._combineResults( hookResults, response.search ).then( function ( results ) {\n\t\t\t\t\t\tdeferred.resolve(\n\t\t\t\t\t\t\tresults,\n\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\tresponse[ 'search-continue' ],\n\t\t\t\t\t\t\tjqXHR.getResponseHeader( 'X-Search-ID' )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.fail( function ( jqXHR, textStatus ) {\n\t\t\t\t\tdeferred.reject( textStatus );\n\t\t\t\t} );\n\n\t\t\t\treturn deferred.promise();\n\t\t\t};\n\t\t},\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_fireSearchHook: function ( term ) {\n\t\t\tvar hookResults = [],\n\t\t\t\taddPromise = function ( p ) {\n\t\t\t\t\thookResults.push( p );\n\t\t\t\t};\n\n\t\t\tif ( this._cache.term === term ) {\n\t\t\t\treturn hookResults; // Don't fire hook when paginating\n\t\t\t}\n\n\t\t\tmw.hook( this.options.searchHookName ).fire( {\n\t\t\t\telement: this.element,\n\t\t\t\tterm: term,\n\t\t\t\toptions: this.options\n\t\t\t}, addPromise );\n\n\t\t\treturn hookResults;\n\t\t},\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_combineResults: function ( hookResults, searchResults ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\tids = {},\n\t\t\t\tresult = [],\n\t\t\t\tuniqueFilter = function ( item ) {\n\t\t\t\t\tif ( ids[ item.id ] ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tids[ item.id ] = true;\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tratingSorter = function ( item1, item2 ) {\n\t\t\t\t\tif ( !item1.rating && !item2.rating ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !item1.rating ) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !item2.rating ) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif ( item1.rating < item2.rating ) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\tif ( item1.rating === item2.rating ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn -1;\n\t\t\t\t};\n\n\t\t\tsearchResults = searchResults || [];\n\n\t\t\t$.when.apply( $, hookResults ).then( function () {\n\n\t\t\t\tvar args = Array.prototype.slice.call( arguments );\n\t\t\t\targs.forEach( function ( data ) {\n\t\t\t\t\tresult = data.concat( result );\n\t\t\t\t} );\n\n\t\t\t\tresult = self._stableSort( result, ratingSorter );\n\t\t\t\tresult = result.concat( searchResults );\n\t\t\t\tresult = result.filter( uniqueFilter );\n\t\t\t\tdeferred.resolve( result );\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_stableSort: function stableSort( items, compareFn ) {\n\t\t\tvar indices = Object.keys( items ).map( Number );\n\t\t\tindices.sort( function ( index1, index2 ) {\n\t\t\t\tvar compare = compareFn( items[ index1 ], items[ index2 ] );\n\t\t\t\tif ( compare !== 0 ) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\t\t\t\t// fall back to comparing indices to ensure stability\n\t\t\t\tif ( index1 < index2 ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( index1 > index2 ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t} );\n\t\t\tvar sorted = indices.map( function ( index ) {\n\t\t\t\treturn items[ index ];\n\t\t\t} );\n\t\t\treturn sorted;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_showDefaultSuggestions: function () {\n\t\t\tif ( this.element.val() !== '' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar self = this,\n\t\t\t\tterm = this.element.val(),\n\t\t\t\tpromises = this._fireSearchHook( term );\n\n\t\t\tthis._combineResults( promises, [] ).then( function ( suggestions ) {\n\t\t\t\tif ( suggestions.length > 0 ) {\n\t\t\t\t\tself._updateMenu( suggestions );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_updateMenu: function ( suggestions ) {\n\t\t\tvar scrollTop = this.options.menu.element.scrollTop();\n\n\t\t\t$.ui.suggester.prototype._updateMenu.apply( this, arguments );\n\n\t\t\tthis.options.menu.element.scrollTop( scrollTop );\n\t\t},\n\n\t\t/**\n\t\t * Generates the label for a suggester entity.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {Object} entityStub\n\t\t * @return {jQuery}\n\t\t */\n\t\t_createLabelFromSuggestion: function ( entityStub ) {\n\t\t\tvar $suggestion = $( '<span>' ).addClass( 'ui-entityselector-itemcontent' ),\n\t\t\t\t$label = $( '<span>' ).addClass( 'ui-entityselector-label' ).text( entityStub.label || entityStub.id );\n\n\t\t\tif ( entityStub.aliases ) {\n\t\t\t\t$label.append(\n\t\t\t\t\t$( '<span>' ).addClass( 'ui-entityselector-aliases' ).text( ' (' + entityStub.aliases.join( ', ' ) + ')' )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t$suggestion.append( $label );\n\n\t\t\tif ( entityStub.description ) {\n\t\t\t\t$suggestion.append(\n\t\t\t\t\t$( '<span>' ).addClass( 'ui-entityselector-description' )\n\t\t\t\t\t.text( entityStub.description )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn $suggestion;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._createMenuItemFromSuggestion\n\t\t * @protected\n\t\t *\n\t\t * @param {Object} entityStub\n\t\t * @return {jQuery.wikibase.entityselector.Item}\n\t\t */\n\t\t_createMenuItemFromSuggestion: function ( entityStub ) {\n\t\t\tvar $label = this._createLabelFromSuggestion( entityStub ),\n\t\t\t\tvalue = entityStub.label || entityStub.id;\n\n\t\t\treturn new $.wikibase.entityselector.Item( $label, value, entityStub );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_initMenu: function ( ooMenu ) {\n\t\t\tvar self = this;\n\t\t\t$.ui.suggester.prototype._initMenu.apply( this, arguments );\n\n\t\t\t$( this.options.menu )\n\t\t\t.off( 'selected.suggester' )\n\t\t\t.on( 'selected.entityselector', function ( event, item ) {\n\t\t\t\tif ( item.getEntityStub ) {\n\t\t\t\t\tif ( !self.options.caseSensitive\n\t\t\t\t\t\t&& item.getValue().toLowerCase() === self._term.toLowerCase()\n\t\t\t\t\t) {\n\t\t\t\t\t\tself._term = item.getValue();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.element.val( item.getValue() );\n\t\t\t\t\t}\n\n\t\t\t\t\tself._close();\n\t\t\t\t\tself._trigger( 'change' );\n\n\t\t\t\t\tvar entityStub = item.getEntityStub();\n\n\t\t\t\t\tif ( !self._selectedEntity || entityStub.id !== self._selectedEntity.id ) {\n\t\t\t\t\t\tself._select( entityStub );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar customItems = ooMenu.option( 'customItems' );\n\n\t\t\tcustomItems.unshift( new $.ui.ooMenu.CustomItem(\n\t\t\t\tthis.options.messages.more,\n\t\t\t\tfunction () {\n\t\t\t\t\treturn self._cache.term === self._term && self._cache.nextSuggestionOffset;\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tself.search( $.Event( 'programmatic' ) );\n\t\t\t\t},\n\t\t\t\t'ui-entityselector-more'\n\t\t\t) );\n\n\t\t\tcustomItems.unshift( new $.ui.ooMenu.CustomItem(\n\t\t\t\tthis.options.messages.notfound,\n\t\t\t\tfunction () {\n\t\t\t\t\treturn !self._error && self._cache.suggestions && !self._cache.suggestions.length\n\t\t\t\t\t\t&& self.element.val().trim() !== '';\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t'ui-entityselector-notfound'\n\t\t\t) );\n\n\t\t\tcustomItems.unshift( new $.ui.ooMenu.CustomItem(\n\t\t\t\tthis.options.messages.error,\n\t\t\t\tfunction () {\n\t\t\t\t\treturn self._error !== null;\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t'ui-entityselector-error'\n\t\t\t) );\n\n\t\t\tooMenu._evaluateVisibility = function ( customItem ) {\n\t\t\t\tif ( customItem instanceof $.ui.ooMenu.CustomItem ) {\n\t\t\t\t\treturn customItem.getVisibility( ooMenu );\n\t\t\t\t} else {\n\t\t\t\t\treturn ooMenu._evaluateVisibility.apply( this, arguments );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tooMenu.option( 'customItems', customItems );\n\n\t\t\treturn ooMenu;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_getSuggestions: function ( term ) {\n\t\t\tvar self = this;\n\n\t\t\treturn $.ui.suggester.prototype._getSuggestions.apply( this, arguments )\n\t\t\t.then( function ( suggestions, searchTerm, nextSuggestionOffset, searchId ) {\n\t\t\t\tvar deferred = $.Deferred();\n\n\t\t\t\tif ( self._cache.term === searchTerm && self._cache.nextSuggestionOffset ) {\n\t\t\t\t\tself._cache.suggestions = self._cache.suggestions.concat( suggestions );\n\t\t\t\t\tself._cache.nextSuggestionOffset = nextSuggestionOffset;\n\t\t\t\t} else {\n\t\t\t\t\tself._cache = {\n\t\t\t\t\t\tterm: searchTerm,\n\t\t\t\t\t\tsuggestions: suggestions,\n\t\t\t\t\t\tnextSuggestionOffset: nextSuggestionOffset\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif ( searchId ) {\n\t\t\t\t\tself._cache.searchId = searchId;\n\t\t\t\t} else {\n\t\t\t\t\tdelete self._cache.searchId;\n\t\t\t\t}\n\n\t\t\t\tdeferred.resolve( self._cache.suggestions, searchTerm );\n\t\t\t\treturn deferred.promise();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_getSuggestionsFromArray: function ( term, source ) {\n\t\t\tvar deferred = $.Deferred(),\n\t\t\t\tmatcher = new RegExp( this._escapeRegex( term ), 'i' );\n\n\t\t\tdeferred.resolve( source.filter( function ( item ) {\n\t\t\t\tif ( item.aliases ) {\n\t\t\t\t\tfor ( var i = 0; i < item.aliases.length; i++ ) {\n\t\t\t\t\t\tif ( matcher.test( item.aliases[ i ] ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn matcher.test( item.label ) || matcher.test( item.id );\n\t\t\t} ), term );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Selects an entity.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {Object} entityStub\n\t\t */\n\t\t_select: function ( entityStub ) {\n\t\t\tvar id = entityStub && entityStub.id;\n\t\t\tthis._selectedEntity = entityStub;\n\t\t\tif ( id ) {\n\t\t\t\tthis._trigger( 'selected', null, [ id ] );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Gets and sets the current state. The optional parameter can be used to let the initial\n\t\t * state of the selector reflect what can be seen in the input field the selector is\n\t\t * attached to.\n\t\t *\n\t\t * @param {string} [entityId]\n\t\t * @return {Object} Plain object featuring `Entity` stub data.\n\t\t */\n\t\tselectedEntity: function ( entityId ) {\n\t\t\tif ( typeof entityId === 'string' ) {\n\t\t\t\tthis._selectedEntity = { id: entityId };\n\t\t\t}\n\n\t\t\treturn this._selectedEntity;\n\t\t}\n\t} );\n\n\t/**\n\t * Default `entityselector` suggestion menu item.\n\t *\n\t * @class jQuery.wikibase.entityselector.Item\n\t * @extends jQuery.ui.ooMenu.Item\n\t *\n\t * @constructor\n\t *\n\t * @param {jQuery|string} label\n\t * @param {string} value\n\t * @param {Object} entityStub\n\t *\n\t * @throws {Error} if a required parameter is not specified properly.\n\t */\n\tvar Item = function ( label, value, entityStub ) {\n\t\tif ( !label || !value || !entityStub ) {\n\t\t\tthrow new Error( 'Required parameter(s) not specified properly' );\n\t\t}\n\n\t\tthis._label = label;\n\t\tthis._value = value;\n\t\tthis._entityStub = entityStub;\n\t\tthis._link = entityStub.url;\n\t};\n\n\tItem = util.inherit(\n\t\t$.ui.ooMenu.Item,\n\t\tItem,\n\t\t{\n\t\t\t/**\n\t\t\t * @property {Object}\n\t\t\t * @protected\n\t\t\t */\n\t\t\t_entityStub: null,\n\n\t\t\t/**\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tgetEntityStub: function () {\n\t\t\t\treturn this._entityStub;\n\t\t\t}\n\t\t}\n\t);\n\n\t$.extend( $.wikibase.entityselector, {\n\t\tItem: Item\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Fingerprint' is undefined.","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":19,"column":null,"nodeType":"Block","endLine":19,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":237,"column":3,"nodeType":"Block","endLine":241,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":388,"column":3,"nodeType":"Block","endLine":390,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Fingerprint' is undefined.","line":451,"column":null,"nodeType":"Block","endLine":451,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Fingerprint' is undefined.","line":452,"column":null,"nodeType":"Block","endLine":452,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":496,"column":3,"nodeType":"Block","endLine":498,"endColumn":6}],"errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n * @author Bene* < benestar.wikimedia@gmail.com >\n */\n( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * Displays multiple fingerprints (see jQuery.wikibase.entitytermsforlanguageview).\n\t *\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t *\n\t * @option {Fingerprint} value\n\t *\n\t * @option {string[]} userLanguages\n\t *         A list of languages for which terms should be displayed initially.\n\t *\n\t * @event change\n\t *        - {jQuery.Event}\n\t *        - {string} Language code the change was made in.\n\t *\n\t * @event afterstartediting\n\t *       - {jQuery.Event}\n\t *\n\t * @event afterstopediting\n\t *        - {jQuery.Event}\n\t *        - {boolean} Whether to drop the value.\n\t *\n\t * @event toggleerror\n\t *        - {jQuery.Event}\n\t *        - {Error|null}\n\t */\n\t$.widget( 'wikibase.entitytermsforlanguagelistview', PARENT, {\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-entitytermsforlanguagelistview',\n\t\t\ttemplateParams: [\n\t\t\t\tmw.msg( 'wikibase-entitytermsforlanguagelistview-language' ),\n\t\t\t\tmw.msg( 'wikibase-entitytermsforlanguagelistview-label' ),\n\t\t\t\tmw.msg( 'wikibase-entitytermsforlanguagelistview-description' ),\n\t\t\t\tmw.msg( 'wikibase-entitytermsforlanguagelistview-aliases' ),\n\t\t\t\t'' // entitytermsforlanguageview\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$header: '.wikibase-entitytermsforlanguagelistview-header',\n\t\t\t\t$listview: '.wikibase-entitytermsforlanguagelistview-listview'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tuserLanguages: []\n\t\t},\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$listview: null,\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$entitytermsforlanguagelistviewMore: null,\n\n\t\t/**\n\t\t * @type {boolean} Has the \"show all languages\" button been clicked and this click been tracked?\n\t\t */\n\t\t_showAllLanguagesTracked: false,\n\n\t\t/**\n\t\t * @type {Object} Map of language codes pointing to list items (in the form of jQuery nodes).\n\t\t */\n\t\t_moreLanguagesItems: {},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !( this.options.value instanceof datamodel.Fingerprint )\n\t\t\t\t|| !Array.isArray( this.options.userLanguages )\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Required option(s) missing' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._verifyExistingDom();\n\t\t\tthis._createListView();\n\n\t\t\tthis.element.addClass( 'wikibase-entitytermsforlanguagelistview' );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\t// When destroying a widget not initialized properly, shortcuts will not have been created.\n\t\t\tif ( this.$listview ) {\n\t\t\t\t// When destroying a widget not initialized properly, listview will not have been created.\n\t\t\t\tvar listview = this.$listview.data( 'listview' );\n\n\t\t\t\tif ( listview ) {\n\t\t\t\t\tlistview.destroy();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( this.$entitytermsforlanguagelistviewMore ) {\n\t\t\t\tthis.$entitytermsforlanguagelistviewMore.remove();\n\t\t\t}\n\n\t\t\tthis.element.removeClass( 'wikibase-entitytermsforlanguagelistview' );\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t_verifyExistingDom: function () {\n\t\t\tvar $entitytermsforlanguageview = this.element\n\t\t\t\t.find( '.wikibase-entitytermsforlanguageview' );\n\n\t\t\tif ( $entitytermsforlanguageview.length === 0 ) {\n\t\t\t\t// No need to verify an empty DOM\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Scrape languages from static HTML:\n\t\t\tvar mismatchAt = null,\n\t\t\t\tuserLanguages = this.options.userLanguages;\n\t\t\t$entitytermsforlanguageview.each( function ( i ) {\n\t\t\t\tvar match = $( this )\n\t\t\t\t\t.attr( 'class' )\n\t\t\t\t\t.match( /(?:^|\\s)wikibase-entitytermsforlanguageview-(\\S+)/ );\n\t\t\t\tif ( match && match[ 1 ] !== userLanguages[ i ] ) {\n\t\t\t\t\tmismatchAt = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif ( mismatchAt !== null ) {\n\t\t\t\tmw.log.warn( 'Existing entitytermsforlanguagelistview DOM does not match configured languages' );\n\t\t\t\t$entitytermsforlanguageview.slice( mismatchAt ).remove();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Creates the listview widget managing the entitytermsforlanguageview widgets\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_createListView: function () {\n\t\t\tvar self = this,\n\t\t\t\tlistItemWidget = $.wikibase.entitytermsforlanguageview,\n\t\t\t\tprefix = listItemWidget.prototype.widgetEventPrefix;\n\n\t\t\t// Fully encapsulate child widgets by suppressing their events:\n\t\t\tthis.element\n\t\t\t.on( prefix + 'change.' + this.widgetName, function ( event, lang ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\t// The only event handler for this is in entitytermsview.\n\t\t\t\tself._trigger( 'change', null, [ lang ] );\n\t\t\t} )\n\t\t\t.on( prefix + 'toggleerror.' + this.widgetName, function ( event, error ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tself.setError( error );\n\t\t\t} )\n\t\t\t.on(\n\t\t\t\t[\n\t\t\t\t\tprefix + 'create.' + this.widgetName,\n\t\t\t\t\tprefix + 'afterstartediting.' + this.widgetName,\n\t\t\t\t\tprefix + 'afterstopediting.' + this.widgetName,\n\t\t\t\t\tprefix + 'disable.' + this.widgetName\n\t\t\t\t].join( ' ' ),\n\t\t\t\tfunction ( event ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.$listview\n\t\t\t.listview( {\n\t\t\t\tlistItemAdapter: new $.wikibase.listview.ListItemAdapter( {\n\t\t\t\t\tlistItemWidget: listItemWidget,\n\t\t\t\t\tnewItemOptionsFn: function ( value ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tvalue: value\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} ),\n\t\t\t\tvalue: this.options.userLanguages.map( function ( lang ) {\n\t\t\t\t\treturn self._getValueForLanguage( lang );\n\t\t\t\t} ),\n\t\t\t\tlistItemNodeName: 'TR'\n\t\t\t} );\n\n\t\t\tif ( !this.element.find( '.wikibase-entitytermsforlanguagelistview-more' ).length ) {\n\t\t\t\tthis._createEntitytermsforlanguagelistviewMore();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Creates a button which allows the user to show terms in all languages available.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_createEntitytermsforlanguagelistviewMore: function () {\n\t\t\tif ( !this._hasMoreLanguages() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $moreLanguagesButton = $( '<a>' )\n\t\t\t\t.attr( 'href', '#' )\n\t\t\t\t.on( 'click', this._onMoreLanguagesButtonClicked.bind( this ) );\n\t\t\tthis._toggleMoreLanguagesButton( $moreLanguagesButton );\n\n\t\t\tthis.$entitytermsforlanguagelistviewMore = $( '<div>' )\n\t\t\t\t.addClass( 'wikibase-entitytermsforlanguagelistview-more' )\n\t\t\t\t.append( $moreLanguagesButton );\n\n\t\t\tthis.element.after( this.$entitytermsforlanguagelistviewMore );\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean} If there are more languages to display.\n\t\t * @private\n\t\t */\n\t\t_hasMoreLanguages: function () {\n\t\t\tvar fingerprint = this.options.value,\n\t\t\t\tminLength = this.options.userLanguages.length;\n\n\t\t\tif ( fingerprint.getLabels().length > minLength\n\t\t\t\t|| fingerprint.getDescriptions().length > minLength\n\t\t\t\t|| fingerprint.getAliases().length > minLength\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn !$.isEmptyObject( this._getMoreLanguages() );\n\t\t},\n\n\t\t/**\n\t\t * Click handler for more languages button.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_onMoreLanguagesButtonClicked: function ( event ) {\n\t\t\tvar $button = $( event.target );\n\n\t\t\tif ( !this._isMoreLanguagesExpanded() ) {\n\t\t\t\tthis._addMoreLanguages();\n\t\t\t\tthis._trackAllLanguagesShown();\n\t\t\t} else {\n\t\t\t\tvar previousTop = $button.offset().top;\n\t\t\t\tthis._removeMoreLanguages();\n\t\t\t\tthis._scrollUp( $button, previousTop );\n\t\t\t}\n\n\t\t\tthis._toggleMoreLanguagesButton( $button );\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Toggle more language button text between the \"wikibase-entitytermsforlanguagelistview-less\"\n\t\t * and \"wikibase-entitytermsforlanguagelistview-more\" messages.\n\t\t *\n\t\t * @param {jQuery} $button\n\t\t * @private\n\t\t */\n\t\t_toggleMoreLanguagesButton: function ( $button ) {\n\t\t\t$button.text( mw.msg(\n\t\t\t\tthis._isMoreLanguagesExpanded() ?\n\t\t\t\t\t'wikibase-entitytermsforlanguagelistview-less' :\n\t\t\t\t\t'wikibase-entitytermsforlanguagelistview-more'\n\t\t\t) );\n\t\t},\n\n\t\t_trackAllLanguagesShown: function () {\n\t\t\tif ( this._showAllLanguagesTracked ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmw.track( 'event.WikibaseTermboxInteraction', {\n\t\t\t\tactionType: 'all'\n\t\t\t} );\n\t\t\tthis._showAllLanguagesTracked = true;\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t * @private\n\t\t */\n\t\t_isMoreLanguagesExpanded: function () {\n\t\t\treturn !$.isEmptyObject( this._moreLanguagesItems );\n\t\t},\n\n\t\t/**\n\t\t * Add terms in \"more\" languages to the list view, ordered by language code.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_addMoreLanguages: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter(),\n\t\t\t\tself = this;\n\n\t\t\tObject.keys( this._getMoreLanguages() ).sort().forEach( function ( languageCode ) {\n\t\t\t\tvar $item = listview.addItem( self._getValueForLanguage( languageCode ) );\n\t\t\t\tif ( self.isInEditMode() ) {\n\t\t\t\t\tlia.liInstance( $item ).startEditing();\n\t\t\t\t}\n\t\t\t\tself._moreLanguagesItems[ languageCode ] = $item;\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Remove terms in \"more\" languages from the list view.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_removeMoreLanguages: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' );\n\n\t\t\tfor ( var languageCode in this._moreLanguagesItems ) {\n\t\t\t\tlistview.removeItem( this._moreLanguagesItems[ languageCode ] );\n\t\t\t}\n\n\t\t\tthis._moreLanguagesItems = {};\n\t\t},\n\n\t\t/**\n\t\t * @return {Object} Unsorted map of \"more\" language codes in this fingerprint.\n\t\t * @private\n\t\t */\n\t\t_getMoreLanguages: function () {\n\t\t\tvar fingerprint = this.options.value,\n\t\t\t\tlanguages = {};\n\n\t\t\tfingerprint.getLabels().each( function ( lang ) {\n\t\t\t\tlanguages[ lang ] = lang;\n\t\t\t} );\n\t\t\tfingerprint.getDescriptions().each( function ( lang ) {\n\t\t\t\tlanguages[ lang ] = lang;\n\t\t\t} );\n\t\t\tfingerprint.getAliases().each( function ( lang ) {\n\t\t\t\tlanguages[ lang ] = lang;\n\t\t\t} );\n\n\t\t\tthis.options.userLanguages.forEach( function ( lang ) {\n\t\t\t\tdelete languages[ lang ];\n\t\t\t} );\n\n\t\t\treturn languages;\n\t\t},\n\n\t\t/**\n\t\t * @param {jQuery} $this\n\t\t * @param {number} previousTop\n\t\t * @private\n\t\t */\n\t\t_scrollUp: function ( $this, previousTop ) {\n\t\t\tvar top = $this.offset().top;\n\n\t\t\tif ( top < $( window ).scrollTop() ) {\n\t\t\t\t// This does not only keep the toggler visible, it also updates all stick(y)nodes.\n\t\t\t\twindow.scrollBy( 0, top - previousTop );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {string} lang\n\t\t * @return {Object}\n\t\t * @private\n\t\t */\n\t\t_getValueForLanguage: function ( lang ) {\n\t\t\tvar fingerprint = this.options.value;\n\n\t\t\treturn {\n\t\t\t\tlanguage: lang,\n\t\t\t\tlabel: fingerprint.getLabelFor( lang ) || new datamodel.Term( lang, '' ),\n\t\t\t\tdescription: fingerprint.getDescriptionFor( lang ) || new datamodel.Term( lang, '' ),\n\t\t\t\taliases: fingerprint.getAliasesFor( lang ) || new datamodel.MultiTerm( lang, [] )\n\t\t\t};\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\tvar self = this;\n\t\t\tvar listview = this.$listview.data( 'listview' );\n\t\t\treturn listview.startEditing().done( function () {\n\t\t\t\tself.updateInputSize();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @param {boolean} [dropValue]\n\t\t */\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tvar listview = this.$listview.data( 'listview' );\n\n\t\t\treturn $.when.apply( $, listview.value().map( function ( entitytermsforlanguageview ) {\n\t\t\t\treturn entitytermsforlanguageview.stopEditing( dropValue );\n\t\t\t} ) );\n\t\t},\n\n\t\t/**\n\t\t * Updates the size of the input boxes by triggering the inputautoexpand plugin's `expand()`\n\t\t * function.\n\t\t */\n\t\tupdateInputSize: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\tlistview.items().each( function () {\n\t\t\t\tvar entitytermsforlanguageview = lia.liInstance( $( this ) );\n\n\t\t\t\t[ 'label', 'description', 'aliases' ].forEach( function ( name ) {\n\t\t\t\t\tvar $view = entitytermsforlanguageview[ '$' + name + 'view' ],\n\t\t\t\t\t\tautoExpandInput = $view.find( 'input,textarea' ).data( 'inputautoexpand' );\n\n\t\t\t\t\tif ( autoExpandInput ) {\n\t\t\t\t\t\tautoExpandInput.options( {\n\t\t\t\t\t\t\tmaxWidth: $view.width()\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tautoExpandInput.expand( true );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\t$items = listview.items();\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tlistview.listItemAdapter().liInstance( $items.first() ).focus();\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t},\n\n\t\tremoveError: function () {\n\t\t\tPARENT.prototype.removeError.call( this );\n\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\tlistview.items().each( function () {\n\t\t\t\tvar entitytermsforlanguageview = lia.liInstance( $( this ) );\n\t\t\t\tentitytermsforlanguageview.removeError();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @param {Fingerprint} [value]\n\t\t * @return {Fingerprint|*}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\t// Clones the current Fingerprint.\n\t\t\t// FIXME: This accesses the private _items property since there is no copy or clone.\n\t\t\tvalue = new datamodel.Fingerprint(\n\t\t\t\tnew datamodel.TermMap( this.options.value.getLabels()._items ),\n\t\t\t\tnew datamodel.TermMap( this.options.value.getDescriptions()._items ),\n\t\t\t\tnew datamodel.MultiTermMap( this.options.value.getAliases()._items )\n\t\t\t);\n\n\t\t\t// this only adds all terms visible in the ui to the Fingerprint, all other languages get ignored\n\t\t\tlistview.items().each( function () {\n\t\t\t\tvar terms = lia.liInstance( $( this ) ).value();\n\t\t\t\tif ( terms.label.getText() === '' ) {\n\t\t\t\t\t// FIXME: DataModel JavaScript should do this.\n\t\t\t\t\tvalue.removeLabelFor( terms.language );\n\t\t\t\t} else {\n\t\t\t\t\tvalue.setLabel( terms.language, terms.label );\n\t\t\t\t}\n\t\t\t\tif ( terms.description.getText() === '' ) {\n\t\t\t\t\t// FIXME: DataModel JavaScript should do this.\n\t\t\t\t\tvalue.removeDescriptionFor( terms.language );\n\t\t\t\t} else {\n\t\t\t\t\tvalue.setDescription( terms.language, terms.description );\n\t\t\t\t}\n\t\t\t\tif ( terms.aliases.isEmpty() ) {\n\t\t\t\t\t// FIXME: DataModel JavaScript should do this.\n\t\t\t\t\tvalue.removeAliasesFor( terms.language );\n\t\t\t\t} else {\n\t\t\t\t\tvalue.setAliases( terms.language, terms.aliases );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tvar self = this;\n\t\t\t\tthis.$listview.data( 'listview' ).value().forEach( function ( entitytermsforlanguageview ) {\n\t\t\t\t\tentitytermsforlanguageview.value( self._getValueForLanguage( entitytermsforlanguageview.value().language ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis.$listview.data( 'listview' ).option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":15,"column":null,"nodeType":"Block","endLine":15,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":177,"column":3,"nodeType":"Block","endLine":179,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":187,"column":3,"nodeType":"Block","endLine":189,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":216,"column":3,"nodeType":"Block","endLine":220,"endColumn":6}],"errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget;\n\n\t/**\n\t * Displays and allows editing label and description in a specific language.\n\t *\n\t * @extends jQuery.ui.TemplatedWidget\n\t *\n\t * @option {Object|null} value\n\t *         Object representing the widget's value.\n\t *         Structure: {\n\t *           language: <{string}>,\n\t *           label: <{wikibase.datamodel.Term}>,\n\t *           description: <{wikibase.datamodel.Term}>,\n\t *           aliases: <{wikibase.datamodel.MultiTerm}>\n\t *         }\n\t *\n\t * @event change\n\t *        - {jQuery.Event}\n\t *        - {string} Language code the change was made in.\n\t *\n\t * @event afterstartediting\n\t *       - {jQuery.Event}\n\t *\n\t * @event afterstopediting\n\t *        - {jQuery.Event}\n\t *        - {boolean} Whether to drop the value.\n\t *\n\t * @event toggleerror\n\t *        - {jQuery.Event}\n\t *        - {Error|null}\n\t */\n\t$.widget( 'wikibase.entitytermsforlanguageview', PARENT, {\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-entitytermsforlanguageview',\n\t\t\ttemplateParams: [\n\t\t\t\t'tr',\n\t\t\t\t'td',\n\t\t\t\tfunction () {\n\t\t\t\t\treturn this.options.value.language;\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\treturn wb.getLanguageNameByCode( this.options.value.language );\n\t\t\t\t},\n\t\t\t\t'', // label\n\t\t\t\t'', // description\n\t\t\t\t'', // aliases\n\t\t\t\t'', // toolbar placeholder\n\t\t\t\t'th' // row table header\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$language: '.wikibase-entitytermsforlanguageview-language',\n\t\t\t\t$label: '.wikibase-entitytermsforlanguageview-label',\n\t\t\t\t$description: '.wikibase-entitytermsforlanguageview-description',\n\t\t\t\t$aliases: '.wikibase-entitytermsforlanguageview-aliases'\n\t\t\t},\n\t\t\tvalue: null\n\t\t},\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$labelview: null,\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$descriptionview: null,\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$aliasesview: null,\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tthis.options.value = this._checkValue( this.options.value );\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._createWidgets();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar self = this;\n\n\t\t\tfunction degrade() {\n\t\t\t\tif ( self.$labelview ) {\n\t\t\t\t\tself.$labelview.data( 'labelview' ).destroy();\n\t\t\t\t}\n\t\t\t\tif ( self.$descriptionview ) {\n\t\t\t\t\tself.$descriptionview.data( 'descriptionview' ).destroy();\n\t\t\t\t}\n\t\t\t\tif ( self.$aliasesview ) {\n\t\t\t\t\tself.$aliasesview.data( 'aliasesview' ).destroy();\n\t\t\t\t}\n\n\t\t\t\tPARENT.prototype.destroy.call( self );\n\t\t\t}\n\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tthis.element.one( this.widgetEventPrefix + 'afterstopediting', function ( event ) {\n\t\t\t\t\tdegrade();\n\t\t\t\t} );\n\n\t\t\t\tthis.stopEditing( true );\n\t\t\t} else {\n\t\t\t\tdegrade();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Creates labelview, descriptionview and aliasesview widget\n\t\t */\n\t\t_createWidgets: function () {\n\t\t\tvar self = this;\n\n\t\t\t[ 'label', 'description', 'aliases' ].forEach( function ( subjectName ) {\n\t\t\t\tvar widgetName = subjectName + 'view';\n\n\t\t\t\tself[ '$' + widgetName ] = self[ '$' + subjectName ].children( '.wikibase-' + widgetName );\n\n\t\t\t\tif ( !self[ '$' + widgetName ].length ) {\n\t\t\t\t\tself[ '$' + widgetName ] = $( '<div>' ).appendTo( self[ '$' + subjectName ] );\n\t\t\t\t}\n\n\t\t\t\t// Fully encapsulate child widgets by suppressing their events:\n\t\t\t\tself[ '$' + widgetName ]\n\t\t\t\t.on( widgetName + 'change', function ( event ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t// The only event handler for this is in entitytermsforlanguagelistview.\n\t\t\t\t\tself._trigger( 'change', null, [ self.options.value.language ] );\n\t\t\t\t} )\n\t\t\t\t.on( widgetName + 'toggleerror.' + self.widgetName, function ( event, error ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tself.setError( error );\n\t\t\t\t} )\n\t\t\t\t.on(\n\t\t\t\t\t[\n\t\t\t\t\t\twidgetName + 'create.' + self.widgetName,\n\t\t\t\t\t\twidgetName + 'afterstartediting.' + self.widgetName,\n\t\t\t\t\t\twidgetName + 'afterstopediting.' + self.widgetName,\n\t\t\t\t\t\twidgetName + 'disable.' + self.widgetName\n\t\t\t\t\t].join( ' ' ),\n\t\t\t\t\tfunction ( event ) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tvar options = {\n\t\t\t\t\tvalue: self.options.value[ subjectName ],\n\t\t\t\t\thelpMessage: mw.msg(\n\t\t\t\t\t\t// The following messages can be used here:\n\t\t\t\t\t\t// * wikibase-label-input-help-message\n\t\t\t\t\t\t// * wikibase-description-input-help-message\n\t\t\t\t\t\t// * wikibase-aliases-input-help-message\n\t\t\t\t\t\t'wikibase-' + subjectName + '-input-help-message',\n\t\t\t\t\t\twb.getLanguageNameByCode( self.options.value.language )\n\t\t\t\t\t)\n\t\t\t\t};\n\n\t\t\t\tself[ '$' + widgetName ][ widgetName ]( options );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Puts the widget into edit mode.\n\t\t */\n\t\t_startEditing: function () {\n\t\t\tthis.$labelview.data( 'labelview' ).startEditing();\n\t\t\tthis.$descriptionview.data( 'descriptionview' ).startEditing();\n\t\t\tthis.$aliasesview.data( 'aliasesview' ).startEditing();\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * @param {boolean} [dropValue]\n\t\t */\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tthis.$labelview.data( 'labelview' ).stopEditing( dropValue );\n\t\t\tthis.$descriptionview.data( 'descriptionview' ).stopEditing( dropValue );\n\t\t\tthis.$aliasesview.data( 'aliasesview' ).stopEditing( dropValue );\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * Sets/Gets the widget's value.\n\t\t *\n\t\t * @param {Object} [value]\n\t\t * @return {Object|*}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tlanguage: this.options.value.language,\n\t\t\t\tlabel: this.$labelview.data( 'labelview' ).value(),\n\t\t\t\tdescription: this.$descriptionview.data( 'descriptionview' ).value(),\n\t\t\t\taliases: this.$aliasesview.data( 'aliasesview' ).value()\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t *\n\t\t * @throws {Error} when trying to set value with a new language.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tvalue = this._checkValue( value );\n\n\t\t\t\tif ( value.language !== this.options.value.language ) {\n\t\t\t\t\tthrow new Error( 'Cannot alter language' );\n\t\t\t\t}\n\n\t\t\t\tthis.$labelview.data( 'labelview' ).option( 'value', value.label );\n\t\t\t\tthis.$descriptionview.data( 'descriptionview' ).option( 'value', value.description );\n\t\t\t\tthis.$aliasesview.data( 'aliasesview' ).option( 'value', value.aliases );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis.$labelview.data( 'labelview' ).option( key, value );\n\t\t\t\tthis.$descriptionview.data( 'descriptionview' ).option( key, value );\n\t\t\t\tthis.$aliasesview.data( 'aliasesview' ).option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @param {*} value\n\t\t * @return {Object}\n\t\t *\n\t\t * @throws {Error} if value is not defined properly.\n\t\t */\n\t\t_checkValue: function ( value ) {\n\t\t\tif ( !$.isPlainObject( value ) ) {\n\t\t\t\tthrow new Error( 'Value needs to be an object' );\n\t\t\t} else if ( !value.language ) {\n\t\t\t\tthrow new Error( 'Value needs language to be specified' );\n\t\t\t}\n\n\t\t\tif ( !value.label ) {\n\t\t\t\tthrow new Error( 'label needs to be a wb.datamodel.Term instance' );\n\t\t\t}\n\n\t\t\tif ( !value.description ) {\n\t\t\t\tthrow new Error( 'description needs to be a wb.datamodel.Term instance' );\n\t\t\t}\n\n\t\t\tif ( !value.aliases ) {\n\t\t\t\tthrow new Error( 'aliases need to be a wb.datamodel.MultiTerm instance' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tthis.$labelview.data( 'labelview' ).focus();\n\t\t},\n\n\t\tremoveError: function () {\n\t\t\tPARENT.prototype.removeError.call( this );\n\n\t\t\tthis.$labelview.data( 'labelview' ).removeError();\n\t\t\tthis.$descriptionview.data( 'descriptionview' ).removeError();\n\t\t\tthis.$aliasesview.data( 'aliasesview' ).removeError();\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":16,"column":null,"nodeType":"Block","endLine":16,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Fingerprint' is undefined.","line":16,"column":null,"nodeType":"Block","endLine":16,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":21,"column":null,"nodeType":"Block","endLine":21,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":369,"column":3,"nodeType":"Block","endLine":371,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Fingerprint' is undefined.","line":398,"column":null,"nodeType":"Block","endLine":398,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Fingerprint' is undefined.","line":399,"column":null,"nodeType":"Block","endLine":399,"endColumn":null}],"errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * Encapsulates a entitytermsforlanguagelistview widget.\n\t *\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t *\n\t * @option {Fingerprint} value\n\t *\n\t * @option {string[]} userLanguages\n\t *         A list of languages for which terms should be displayed initially.\n\t *\n\t * @option {string} [helpMessage]\n\t *                  Default: 'Edit label, description and aliases per language.'\n\t *\n\t * @event change\n\t *        - {jQuery.Event}\n\t *        - {string} Language code the change was made in.\n\t *\n\t * @event afterstartediting\n\t *       - {jQuery.Event}\n\t *\n\t * @event afterstopediting\n\t *        - {jQuery.Event}\n\t *        - {boolean} Whether to drop the value.\n\t *\n\t * @event toggleerror\n\t *        - {jQuery.Event}\n\t *        - {Error|null}\n\t */\n\t$.widget( 'wikibase.entitytermsview', PARENT, {\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-entitytermsview',\n\t\t\ttemplateParams: [\n\t\t\t\tfunction () {\n\t\t\t\t\treturn $( mw.wbTemplate(\n\t\t\t\t\t\t'wikibase-entitytermsview-heading-part',\n\t\t\t\t\t\t'description',\n\t\t\t\t\t\t'',\n\t\t\t\t\t\t''\n\t\t\t\t\t) ).add( mw.wbTemplate(\n\t\t\t\t\t\t'wikibase-entitytermsview-heading-part',\n\t\t\t\t\t\t'aliases',\n\t\t\t\t\t\t'',\n\t\t\t\t\t\t''\n\t\t\t\t\t) );\n\t\t\t\t}, // header content\n\t\t\t\t'', // entitytermsforlanguagelistview\n\t\t\t\t'', // additional entitytermsforlanguagelistview container class(es)\n\t\t\t\t'' // toolbar placeholder\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$headingDescription: '.wikibase-entitytermsview-heading-description',\n\t\t\t\t$entitytermsforlanguagelistviewContainer:\n\t\t\t\t\t'.wikibase-entitytermsview-entitytermsforlanguagelistview'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tuserLanguages: [],\n\t\t\thelpMessage: 'Edit label, description and aliases per language.'\n\t\t},\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$entitytermsforlanguagelistview: null,\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$entitytermsforlanguagelistviewToggler: null,\n\n\t\t/**\n\t\t * @type {jQuery|null}\n\t\t */\n\t\t$entitytermsforlanguagelistviewHelp: null,\n\n\t\t/**\n\t\t * @type {Object} Has the termbox been hidden or shown via the button and has this click been tracked?\n\t\t */\n\t\t_tracked: {},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !( this.options.value instanceof datamodel.Fingerprint )\n\t\t\t\t|| !Array.isArray( this.options.userLanguages )\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Required option(s) missing' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tvar self = this;\n\n\t\t\tthis.element\n\t\t\t.on(\n\t\t\t\tthis.widgetEventPrefix + 'change.' + this.widgetName + ' ' +\n\t\t\t\tthis.widgetEventPrefix + 'afterstopediting.' + this.widgetName,\n\t\t\t\tfunction ( event, lang ) {\n\t\t\t\t\tvar firstLanguage = self.options.userLanguages[ 0 ];\n\n\t\t\t\t\tif ( typeof lang === 'string' && lang !== firstLanguage ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar fingerprint = self.value(),\n\t\t\t\t\t\tdescription = fingerprint.getDescriptionFor( firstLanguage ),\n\t\t\t\t\t\taliases = fingerprint.getAliasesFor( firstLanguage ),\n\t\t\t\t\t\tisDescriptionEmpty = !description || description.getText() === '',\n\t\t\t\t\t\tisAliasesEmpty = !aliases || aliases.isEmpty();\n\n\t\t\t\t\tself.$headingDescription\n\t\t\t\t\t\t.toggleClass( 'wb-empty', isDescriptionEmpty )\n\t\t\t\t\t\t.text( isDescriptionEmpty\n\t\t\t\t\t\t\t? mw.msg( 'wikibase-description-empty' )\n\t\t\t\t\t\t\t: description.getText()\n\t\t\t\t\t\t);\n\n\t\t\t\t\tvar $ul = self.element.find( '.wikibase-entitytermsview-heading-aliases' )\n\t\t\t\t\t\t.toggleClass( 'wb-empty', isAliasesEmpty )\n\t\t\t\t\t\t.children( 'ul' );\n\n\t\t\t\t\tif ( isAliasesEmpty ) {\n\t\t\t\t\t\t$ul.remove();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( $ul.length === 0 ) {\n\t\t\t\t\t\t\t$ul = mw.wbTemplate( 'wikibase-entitytermsview-aliases', '' );\n\t\t\t\t\t\t\tself.element.find( '.wikibase-entitytermsview-heading-aliases' ).append( $ul );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$ul.empty();\n\t\t\t\t\t\taliases.getTexts().forEach( function ( text ) {\n\t\t\t\t\t\t\t$ul.append( mw.wbTemplate(\n\t\t\t\t\t\t\t\t'wikibase-entitytermsview-aliases-alias',\n\t\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\t\tmw.message( 'wikibase-aliases-separator' ).text()\n\t\t\t\t\t\t\t) );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.draw();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\t// When destroying a widget not initialized properly, entitytermsforlanguagelistview will\n\t\t\t// not have been created.\n\t\t\tif ( this.$entitytermsforlanguagelistview ) {\n\t\t\t\tvar entitytermsforlanguagelistview = this._getEntitytermsforlanguagelistview();\n\n\t\t\t\tif ( entitytermsforlanguagelistview ) {\n\t\t\t\t\tentitytermsforlanguagelistview.destroy();\n\t\t\t\t}\n\n\t\t\t\tthis.$entitytermsforlanguagelistview.remove();\n\t\t\t}\n\n\t\t\tif ( this.$entitytermsforlanguagelistviewToggler ) {\n\t\t\t\tthis.$entitytermsforlanguagelistviewToggler.remove();\n\t\t\t}\n\n\t\t\tif ( this.$entitytermsforlanguagelistviewHelp ) {\n\t\t\t\tthis.$entitytermsforlanguagelistviewHelp.remove();\n\t\t\t}\n\n\t\t\tthis.element.off( '.' + this.widgetName );\n\t\t\tthis.element.removeClass( 'wikibase-entitytermsview' );\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar deferred = $.Deferred();\n\n\t\t\tthis.$entitytermsforlanguagelistview\n\t\t\t\t= this.element.find( '.wikibase-entitytermsforlanguagelistview' );\n\n\t\t\tif ( !this.$entitytermsforlanguagelistview.length ) {\n\t\t\t\tthis.$entitytermsforlanguagelistview = $( '<div>' )\n\t\t\t\t\t.appendTo( this.$entitytermsforlanguagelistviewContainer );\n\t\t\t}\n\n\t\t\tif ( !this._getEntitytermsforlanguagelistview() ) {\n\t\t\t\tthis._createEntitytermsforlanguagelistview();\n\t\t\t}\n\n\t\t\tif ( !this.element\n\t\t\t\t.find( '.wikibase-entitytermsview-entitytermsforlanguagelistview-toggler' )\n\t\t\t\t.length\n\t\t\t) {\n\t\t\t\t// TODO: Remove as soon as drop-down edit buttons are implemented. The language list may\n\t\t\t\t// then be shown (without directly switching to edit mode) using the drop down menu.\n\t\t\t\tthis._createEntitytermsforlanguagelistviewToggler();\n\t\t\t}\n\n\t\t\treturn deferred.resolve().promise();\n\t\t},\n\n\t\t_trackToggling: function ( isVisible ) {\n\t\t\tvar currentActionTracking = isVisible ? 'hide' : 'show';\n\t\t\tif ( this._tracked[ currentActionTracking ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmw.track(\n\t\t\t\t'event.WikibaseTermboxInteraction', {\n\t\t\t\t\tactionType: currentActionTracking\n\t\t\t\t}\n\t\t\t);\n\t\t\tthis._tracked[ currentActionTracking ] = true;\n\t\t},\n\n\t\t/**\n\t\t * Creates the dedicated toggler for showing/hiding the list of entity terms. This function is\n\t\t * supposed to be removed as soon as drop-down edit buttons are implemented with the mechanism\n\t\t * toggling the list's visibility while not starting edit mode will be part of the drop-down\n\t\t * menu.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_createEntitytermsforlanguagelistviewToggler: function () {\n\t\t\tvar self = this,\n\t\t\t\tapi = new mw.Api();\n\n\t\t\tthis.$entitytermsforlanguagelistviewToggler = $( '<div>' )\n\t\t\t\t.addClass( 'wikibase-entitytermsview-entitytermsforlanguagelistview-toggler' )\n\t\t\t\t.text( mw.msg( 'wikibase-entitytermsview-entitytermsforlanguagelistview-toggler' ) )\n\t\t\t\t.toggler( {\n\t\t\t\t\t$subject: this.$entitytermsforlanguagelistviewContainer,\n\t\t\t\t\tduration: 'fast'\n\t\t\t\t} )\n\t\t\t\t.on( 'toggleranimation.' + this.widgetName, function ( event, params ) {\n\t\t\t\t\tif ( mw.user.isAnon() ) {\n\t\t\t\t\t\tmw.cookie.set(\n\t\t\t\t\t\t\t'wikibase-entitytermsview-showEntitytermslistview',\n\t\t\t\t\t\t\tparams.visible,\n\t\t\t\t\t\t\t{ expires: 365 * 24 * 60 * 60, path: '/' }\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tapi.saveOption(\n\t\t\t\t\t\t\t'wikibase-entitytermsview-showEntitytermslistview',\n\t\t\t\t\t\t\tparams.visible ? '1' : '0'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.done( function () {\n\t\t\t\t\t\t\tmw.user.options.set(\n\t\t\t\t\t\t\t\t'wikibase-entitytermsview-showEntitytermslistview',\n\t\t\t\t\t\t\t\tparams.visible ? '1' : '0'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Show \"help\" link only if the toggler content is visible (decided by Product\n\t\t\t\t\t// Management):\n\t\t\t\t\tif ( self.$entitytermsforlanguagelistviewHelp ) {\n\t\t\t\t\t\tself.$entitytermsforlanguagelistviewHelp.toggleClass(\n\t\t\t\t\t\t\t'wikibase-entitytermsview-entitytermsforlanguagelistview-configure-hidden',\n\t\t\t\t\t\t\t!params.visible\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tself._trackToggling( params.visible );\n\t\t\t\t} );\n\n\t\t\tthis.$entitytermsforlanguagelistviewContainer.before(\n\t\t\t\tthis.$entitytermsforlanguagelistviewToggler\n\t\t\t);\n\n\t\t\t// Inject link to page providing help about how to configure languages:\n\t\t\t// TODO: Remove as soon as soon as some user-friendly mechanism is implemented to define\n\t\t\t// user languages.\n\n\t\t\tif ( mw.config.get( 'wbUserSpecifiedLanguages' )\n\t\t\t\t&& mw.config.get( 'wbUserSpecifiedLanguages' ).length > 1\n\t\t\t) {\n\t\t\t\t// User applied custom configuration, no need to show link to help page.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar toggler = this.$entitytermsforlanguagelistviewToggler.data( 'toggler' );\n\n\t\t\tthis.$entitytermsforlanguagelistviewHelp =\n\t\t\t\t$( '<span>' )\n\t\t\t\t.addClass( 'wikibase-entitytermsview-entitytermsforlanguagelistview-configure' )\n\t\t\t\t.append(\n\t\t\t\t\t$( '<a>' )\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'href',\n\t\t\t\t\t\tmw.msg(\n\t\t\t\t\t\t\t'wikibase-entitytermsview-entitytermsforlanguagelistview-configure-link'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.text( mw.msg(\n\t\t\t\t\t\t'wikibase-entitytermsview-entitytermsforlanguagelistview-configure-link-label'\n\t\t\t\t\t) )\n\t\t\t\t)\n\t\t\t\t.insertAfter( this.$entitytermsforlanguagelistviewToggler );\n\n\t\t\tif ( !toggler.option( '$subject' ).is( ':visible' ) ) {\n\t\t\t\tthis.$entitytermsforlanguagelistviewHelp\n\t\t\t\t\t.addClass(\n\t\t\t\t\t\t'wikibase-entitytermsview-entitytermsforlanguagelistview-configure-hidden'\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @return {jQuery.wikibase.entitytermsforlanguagelistview}\n\t\t * @private\n\t\t */\n\t\t_getEntitytermsforlanguagelistview: function () {\n\t\t\treturn this.$entitytermsforlanguagelistview.data( 'entitytermsforlanguagelistview' );\n\t\t},\n\n\t\t/**\n\t\t * Creates and initializes the entitytermsforlanguagelistview widget.\n\t\t */\n\t\t_createEntitytermsforlanguagelistview: function () {\n\t\t\tvar self = this,\n\t\t\t\tprefix = $.wikibase.entitytermsforlanguagelistview.prototype.widgetEventPrefix;\n\n\t\t\tthis.$entitytermsforlanguagelistview\n\t\t\t.on( prefix + 'change.' + this.widgetName, function ( event, lang ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\t// Event handlers for this are in the entitytermsview toolbar controller (for enabling\n\t\t\t\t// the save button), in entityViewInit (for updating the title) and in this file (for\n\t\t\t\t// updating description and aliases).\n\t\t\t\tself._trigger( 'change', null, [ lang ] );\n\t\t\t} )\n\t\t\t.on(\n\t\t\t\t[\n\t\t\t\t\tprefix + 'create.' + this.widgetName,\n\t\t\t\t\tprefix + 'afterstartediting.' + this.widgetName,\n\t\t\t\t\tprefix + 'afterstopediting.' + this.widgetName,\n\t\t\t\t\tprefix + 'disable.' + this.widgetName\n\t\t\t\t].join( ' ' ),\n\t\t\t\tfunction ( event ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t)\n\t\t\t.entitytermsforlanguagelistview( {\n\t\t\t\tvalue: this.options.value,\n\t\t\t\tuserLanguages: this.options.userLanguages\n\t\t\t} );\n\n\t\t\tthis.$entitytermsforlanguagelistview.data( 'entitytermsforlanguagelistview' )\n\t\t\t\t.$header.sticknode( {\n\t\t\t\t\t$container: this.$entitytermsforlanguagelistview\n\t\t\t\t} );\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\tthis._getEntitytermsforlanguagelistview().startEditing();\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t/**\n\t\t * @param {boolean} dropValue\n\t\t */\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tthis.draw();\n\t\t\tvar self = this;\n\t\t\treturn this._getEntitytermsforlanguagelistview().stopEditing( dropValue ).done( function () {\n\t\t\t\tself.notification();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tthis._getEntitytermsforlanguagelistview().focus();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tremoveError: function () {\n\t\t\tthis.element.removeClass( 'wb-error' );\n\t\t\tthis._getEntitytermsforlanguagelistview().removeError();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t *\n\t\t * @param {Fingerprint} [value]\n\t\t * @return {Fingerprint|*}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\treturn this._getEntitytermsforlanguagelistview().value();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' && !( value instanceof datamodel.Fingerprint ) ) {\n\t\t\t\tthrow new Error( 'value must be a Fingerprint' );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' || key === 'value' ) {\n\t\t\t\tthis._getEntitytermsforlanguagelistview().option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tnotification: function ( $content, additionalCssClasses ) {\n\t\t\tvar self = this;\n\t\t\tif ( !this._$notification ) {\n\t\t\t\tvar $closeable = $( '<div>' ).closeable();\n\n\t\t\t\tthis._$notification = $( '<tr>' ).append( $( '<td>' ).append( $closeable ) );\n\n\t\t\t\tthis._$notification.data( 'closeable', $closeable.data( 'closeable' ) );\n\t\t\t\tthis._$notification\n\t\t\t\t\t.appendTo( this._getEntitytermsforlanguagelistview().$header )\n\t\t\t\t\t.on( 'closeableupdate.' + this.widgetName, function () {\n\t\t\t\t\t\tvar sticknode = self.element.data( 'sticknode' );\n\t\t\t\t\t\tif ( sticknode ) {\n\t\t\t\t\t\t\tsticknode.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\tvar $headerTr = this._getEntitytermsforlanguagelistview().$header.children( 'tr' ).first();\n\t\t\t\tthis._$notification.children( 'td' ).attr( 'colspan', $headerTr.children().length );\n\n\t\t\t}\n\n\t\t\tthis._$notification.data( 'closeable' ).setContent( $content, additionalCssClasses );\n\t\t\treturn this._$notification;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tsetError: function ( error ) {\n\t\t\tif ( error && error.context ) {\n\t\t\t\tvar context = error.context;\n\t\t\t\tvar viewType = 'wikibase-' + context.type + 'view';\n\t\t\t\tthis.element.find( '.wikibase-entitytermsforlanguageview-' + context.value.getLanguageCode() )\n\t\t\t\t\t.find( '.' + viewType ).data( viewType ).setError( error );\n\t\t\t}\n\t\t\treturn PARENT.prototype.setError.apply( this, arguments );\n\t\t}\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.entityview.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.itemview.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.labelview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":209,"column":null,"nodeType":"Block","endLine":209,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":210,"column":null,"nodeType":"Block","endLine":210,"endColumn":null}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * Displays and allows editing of a `datamodel.Term` acting as an `Entity`'s label.\n\t *\n\t * @class jQuery.wikibase.labelview\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {datamodel.Term} options.value\n\t * @param {string} [options.helpMessage=mw.msg( 'wikibase-label-input-help-message' )]\n\t */\n\t$.widget( 'wikibase.labelview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-labelview',\n\t\t\ttemplateParams: [\n\t\t\t\t'', // additional class\n\t\t\t\t'', // text\n\t\t\t\t'', // toolbar\n\t\t\t\t'auto', // dir\n\t\t\t\t'' // lang\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$text: '.wikibase-labelview-text'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tinputNodeName: 'TEXTAREA',\n\t\t\thelpMessage: mw.msg( 'wikibase-label-input-help-message' ),\n\t\t\tshowEntityId: false\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !( this.options.value instanceof datamodel.Term )\n\t\t\t\t|| this.options.inputNodeName !== 'INPUT' && this.options.inputNodeName !== 'TEXTAREA'\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tvar self = this;\n\n\t\t\tthis.element\n\t\t\t.on(\n\t\t\t\t'labelviewafterstartediting.' + this.widgetName\n\t\t\t\t+ ' eachchange.' + this.widgetName,\n\t\t\t\tfunction ( event ) {\n\t\t\t\t\tif ( self.value().getText() === '' ) {\n\t\t\t\t\t\t// Since the widget shall not be in view mode when there is no value, triggering\n\t\t\t\t\t\t// the event without a proper value is only done when creating the widget. Disabling\n\t\t\t\t\t\t// other edit buttons shall be avoided.\n\t\t\t\t\t\t// TODO: Move logic to a sensible place.\n\t\t\t\t\t\tself.element.addClass( 'wb-empty' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tself.element.removeClass( 'wb-empty' );\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( this.$text.text() === '' ) {\n\t\t\t\tthis.draw();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tvar self = this;\n\n\t\t\t\tthis.element.one( this.widgetEventPrefix + 'afterstopediting', function ( event ) {\n\t\t\t\t\tPARENT.prototype.destroy.call( self );\n\t\t\t\t} );\n\n\t\t\t\tthis.stopEditing( true );\n\t\t\t} else {\n\t\t\t\tPARENT.prototype.destroy.call( this );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\tlanguageCode = this.options.value.getLanguageCode(),\n\t\t\t\tlabelText = this.options.value.getText();\n\n\t\t\tif ( labelText === '' ) {\n\t\t\t\tlabelText = null;\n\t\t\t}\n\n\t\t\tthis.element.toggleClass( 'wb-empty', !labelText );\n\n\t\t\tif ( !this.isInEditMode() && !labelText ) {\n\t\t\t\tthis.$text.text( mw.msg( 'wikibase-label-empty' ) );\n\t\t\t\t// Apply lang and dir of UI language\n\t\t\t\t// instead language of that row\n\t\t\t\tvar userLanguage = mw.config.get( 'wgUserLanguage' );\n\t\t\t\tthis.element\n\t\t\t\t.attr( 'lang', userLanguage )\n\t\t\t\t.attr( 'dir', $.util.getDirectionality( userLanguage ) );\n\t\t\t\treturn deferred.resolve().promise();\n\t\t\t}\n\n\t\t\tthis.element\n\t\t\t.attr( 'lang', languageCode )\n\t\t\t.attr( 'dir', $.util.getDirectionality( languageCode ) );\n\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\tthis.$text.text( labelText );\n\t\t\t\treturn deferred.resolve().promise();\n\t\t\t}\n\n\t\t\tvar $input = $( document.createElement( this.options.inputNodeName ) );\n\n\t\t\t$input\n\t\t\t.addClass( this.widgetFullName + '-input' )\n\t\t\t// TODO: Inject correct placeholder via options\n\t\t\t.attr( 'placeholder', mw.msg(\n\t\t\t\t'wikibase-label-edit-placeholder-language-aware',\n\t\t\t\twb.getLanguageNameByCode( languageCode )\n\t\t\t) )\n\t\t\t.attr( 'lang', languageCode )\n\t\t\t.attr( 'dir', $.util.getDirectionality( languageCode ) )\n\t\t\t.on( 'keydown.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ENTER ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'eachchange.' + this.widgetName, function ( event ) {\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\n\t\t\tif ( labelText ) {\n\t\t\t\t$input.val( labelText );\n\t\t\t}\n\n\t\t\tif ( $.fn.inputautoexpand ) {\n\t\t\t\t$input.inputautoexpand( {\n\t\t\t\t\texpandHeight: true,\n\t\t\t\t\tsuppressNewLine: true\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.$text.empty().append( $input );\n\n\t\t\treturn deferred.resolve().promise();\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\t// FIXME: This could be much faster\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tif ( dropValue && this.options.value.getText() === '' ) {\n\t\t\t\tthis.$text.children( '.' + this.widgetFullName + '-input' ).val( '' );\n\t\t\t}\n\t\t\t// FIXME: This could be much faster\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} when trying to set the widget's value to something other than a\n\t\t *         `datamodel.Term` instance.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' && !( value instanceof datamodel.Term ) ) {\n\t\t\t\tthrow new Error( 'Value needs to be a datamodel.Term instance' );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.call( this, key, value );\n\n\t\t\tif ( key === 'disabled' && this.isInEditMode() ) {\n\t\t\t\tthis.$text.children( '.' + this.widgetFullName + '-input' ).prop( 'disabled', value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t *\n\t\t * @param {datamodel.Term} [value]\n\t\t * @return {datamodel.Term|undefined}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\treturn this.options.value;\n\t\t\t}\n\n\t\t\treturn new datamodel.Term(\n\t\t\t\tthis.options.value.getLanguageCode(),\n\t\t\t\tthis.$text.children( '.' + this.widgetFullName + '-input' ).val().trim()\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tthis.$text.children( '.' + this.widgetFullName + '-input' ).trigger( 'focus' );\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.listview.ListItemAdapter.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.listview.js","messages":[{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":288,"column":3,"nodeType":"Block","endLine":296,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":288,"column":3,"nodeType":"Block","endLine":296,"endColumn":6}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.TemplatedWidget;\n\n\t/**\n\t * View for displaying and editing list items, each represented by a single random widget.\n\t *\n\t * @class jQuery.wikibase.listview\n\t * @extends jQuery.ui.TemplatedWidget\n\t * @license GPL-2.0-or-later\n\t * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {*[]} [options.value=null]\n\t *        The values displayed by this view. More specifically, a list of each list item widget's\n\t *        value.\n\t * @param {jQuery.wikibase.listview.ListItemAdapter} options.listItemAdapter\n\t *        Interfaces the actual widget instances to be used by the `listview`. Cannot be changed\n\t *        after initialization.\n\t * @param {string} [options.listItemNodeName='DIV']\n\t *         Node name of the base node of new list items.\n\t */\n\t$.widget( 'wikibase.listview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-listview',\n\t\t\ttemplateParams: [\n\t\t\t\t'' // list items\n\t\t\t],\n\t\t\tvalue: null,\n\t\t\tlistItemAdapter: null,\n\t\t\tlistItemNodeName: 'DIV'\n\t\t},\n\n\t\t/**\n\t\t * Short-cut for `this.options.listItemAdapter`.\n\t\t *\n\t\t * @property {jQuery.wikibase.listview.ListItemAdapter}\n\t\t * @private\n\t\t */\n\t\t_lia: null,\n\n\t\t/**\n\t\t * The DOM elements this `listview`'s element contained when it was initialized. These DOM\n\t\t * elements are reused in `this._addLiValue` until the array is empty.\n\t\t *\n\t\t * @property {HTMLElement[]|null}\n\t\t * @private\n\t\t */\n\t\t_reusedItems: null,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tthis._lia = this.options.listItemAdapter;\n\n\t\t\tif ( typeof this._lia !== 'object'\n\t\t\t\t|| !( this._lia instanceof $.wikibase.listview.ListItemAdapter )\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Option \"listItemAdapter\" has to be an instance of '\n\t\t\t\t\t+ 'jQuery.wikibase.listview.ListItemAdapter' );\n\t\t\t}\n\n\t\t\tthis._reusedItems = $.makeArray( this.element.children( this.options.listItemNodeName ) );\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._createList();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar self = this;\n\t\t\tthis.items().each( function () {\n\t\t\t\tself._removeItem( $( this ) );\n\t\t\t} );\n\t\t\tthis._lia = null;\n\t\t\tthis._reusedItems = null;\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} when trying to set `listItemAdapter` option.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar self = this;\n\n\t\t\tif ( key === 'listItemAdapter' ) {\n\t\t\t\tthrow new Error( 'Can not change the ListItemAdapter after initialization' );\n\t\t\t} else if ( key === 'value' ) {\n\t\t\t\tthis.items().each( function () {\n\t\t\t\t\tself._removeItem( $( this ) );\n\t\t\t\t} );\n\n\t\t\t\tfor ( var i = 0; i < value.length; i++ ) {\n\t\t\t\t\tthis._addLiValue( value[ i ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis.items().each( function () {\n\t\t\t\t\tvar liInstance = self._lia.liInstance( $( this ) );\n\t\t\t\t\t// Check if instance got destroyed in the meantime:\n\t\t\t\t\tif ( liInstance ) {\n\t\t\t\t\t\tliInstance.option( key, value );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * Fills the list element with DOM structure for each list item.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_createList: function () {\n\t\t\tvar i, items = this.option( 'value' );\n\n\t\t\tif ( items === null ) {\n\t\t\t\tfor ( i = this._reusedItems.length; i--; ) {\n\t\t\t\t\tthis._addLiValue( null );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in items ) {\n\t\t\t\t\tthis._addLiValue( items[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Sets the widget's value or gets the widget's current value. The widget's non-pending value\n\t\t * (the value the widget was initialized with) may be retrieved via `this.option( 'value' )`.\n\t\t *\n\t\t * @param {*[]} [value] List containing a value for each list item widget.\n\t\t * @return {*[]|undefined}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\tvar self = this,\n\t\t\t\tvalues = [];\n\n\t\t\tthis.items().each( function () {\n\t\t\t\tvalues.push( self._lia.liInstance( $( this ) ) );\n\t\t\t} );\n\n\t\t\treturn values;\n\t\t},\n\n\t\t/**\n\t\t * Returns all list item nodes. The `listItemAdapter` may be used to retrieve the list item\n\t\t * instance.\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\titems: function () {\n\t\t\treturn this.element.children( '.' + this.widgetName + '-item' );\n\t\t},\n\n\t\t/**\n\t\t * Returns all list items which have a value not considered empty (not `null`).\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\tnonEmptyItems: function () {\n\t\t\tvar lia = this._lia;\n\t\t\treturn this.items().filter( function () {\n\t\t\t\tvar item = lia.liInstance( $( this ) );\n\t\t\t\treturn !!item.value();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Returns the index of a given item node within the list managed by the `listview`. Returns\n\t\t * `-1` if the node could not be found.\n\t\t *\n\t\t * @param {jQuery} $itemNode\n\t\t * @return {number}\n\t\t */\n\t\tindexOf: function ( $itemNode ) {\n\t\t\tvar $items = this.items(),\n\t\t\t\titemNode = $itemNode.get( 0 );\n\n\t\t\tfor ( var i = 0; i < $items.length; i++ ) {\n\t\t\t\tif ( $items.get( i ) === itemNode ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t},\n\n\t\t/**\n\t\t * Returns the list item adapter object interfacing to this list's list items.\n\t\t *\n\t\t * @return {jQuery.wikibase.listview.ListItemAdapter}\n\t\t */\n\t\tlistItemAdapter: function () {\n\t\t\treturn this._lia;\n\t\t},\n\n\t\t/**\n\t\t * Adds one list item into the list and renders it in the view.\n\t\t *\n\t\t * @param {*} liValue One list item widget's value.\n\t\t * @return {jQuery} New list item's node.\n\t\t */\n\t\taddItem: function ( liValue ) {\n\t\t\treturn this._addLiValue( liValue );\n\t\t},\n\n\t\t/**\n\t\t * Adds one list item into the list and renders it in the view.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @param {*} liValue One list item widget's value.\n\t\t * @return {jQuery} New list item's node.\n\t\t */\n\t\t_addLiValue: function ( liValue ) {\n\t\t\tvar $newLi = this._reusedItems.length > 0\n\t\t\t\t? $( this._reusedItems.shift() )\n\t\t\t\t: $( '<' + this.option( 'listItemNodeName' ) + '/>' );\n\n\t\t\t$newLi.addClass( this.widgetName + '-item' );\n\n\t\t\tif ( !$newLi.parent( this.element ).length ) {\n\t\t\t\t// Insert DOM first, to allow events bubbling up the DOM tree.\n\t\t\t\tvar items = this.items();\n\n\t\t\t\tif ( items.length ) {\n\t\t\t\t\titems.last().after( $newLi );\n\t\t\t\t} else {\n\t\t\t\t\tthis.element.append( $newLi );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._lia.newListItem( $newLi, liValue );\n\n\t\t\treturn $newLi;\n\t\t},\n\n\t\t/**\n\t\t * Removes one list item from the list and renders the update in the view.\n\t\t *\n\t\t * @param {jQuery} $li The list item's node to be removed.\n\t\t *\n\t\t * @throws {Error} if the node provided is not a list item.\n\t\t */\n\t\tremoveItem: function ( $li ) {\n\t\t\tif ( !$li.parent( this.element ).length ) {\n\t\t\t\tthrow new Error( 'The given node is not an element in this list' );\n\t\t\t}\n\n\t\t\tthis._removeItem( $li );\n\n\t\t\t// FIXME: Remove all itemremoved events, see https://gerrit.wikimedia.org/r/298766.\n\t\t\tthis._trigger( 'itemremoved', null, [ null, $li ] );\n\t\t},\n\n\t\t_removeItem: function ( $li ) {\n\t\t\tthis._lia.liInstance( $li ).destroy();\n\t\t\t$li.remove();\n\t\t},\n\n\t\t/**\n\t\t * Inserts a new list item into the list. The new list item will be a widget instance of the\n\t\t * type set on the list, but without any value.\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.done.$newLi The new list item node. Use\n\t\t *         `listItemAdapter().liInstance( $newLi )` to receive the widget instance.\n\t\t */\n\t\tenterNewItem: function () {\n\t\t\tvar $newLi = this._addLiValue();\n\t\t\treturn $.Deferred().resolve( $newLi ).promise();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar $items = this.items();\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tvar item = this._lia.liInstance( $items.first() );\n\t\t\t\tif ( item.focus ) {\n\t\t\t\t\titem.focus();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.element.trigger( 'focus' );\n\t\t},\n\n\t\t/**\n\t\t * Starts the list item's edit modes.\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t *         No resolved parameters.\n\t\t *         Rejected parameters:\n\t\t *         - {Error}\n\t\t */\n\t\tstartEditing: function () {\n\t\t\treturn $.when.apply( $, this.value().map( function ( listitem ) {\n\t\t\t\treturn listitem.startEditing();\n\t\t\t} ) );\n\t\t},\n\n\t\t/**\n\t\t * Stops the list item's edit modes.\n\t\t *\n\t\t * @param {boolean} dropValue\n\t\t * @return {Object} jQuery.Promise\n\t\t *         No resolved parameters.\n\t\t *         Rejected parameters:\n\t\t *         - {Error}\n\t\t */\n\t\tstopEditing: function ( dropValue ) {\n\t\t\treturn $.when.apply( $, this.value().map( function ( listitem ) {\n\t\t\t\treturn listitem.stopEditing( dropValue );\n\t\t\t} ) );\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.pagesuggester.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":11,"column":null,"nodeType":"Block","endLine":11,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":13,"column":null,"nodeType":"Block","endLine":13,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":65,"column":3,"nodeType":"Block","endLine":67,"endColumn":6}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\t/**\n\t * Suggester enhanced input element for selecting a site link's page.\n\t *\n\t * @option {string} [siteId]\n\t *\n\t * @option {string} [pageName]\n\t */\n\t$.widget( 'wikibase.pagesuggester', $.ui.suggester, {\n\t\t/**\n\t\t * @see jQuery.ui.suggester.options\n\t\t */\n\t\toptions: {\n\t\t\tsiteId: null,\n\t\t\tpageName: null\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._create\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\tif ( this.option( 'pageName' ) ) {\n\t\t\t\tthis.element.val( this.option( 'pageName' ) );\n\t\t\t}\n\n\t\t\tif ( !this.option( 'source' ) ) {\n\t\t\t\tthis.option( 'source', this._request() );\n\t\t\t}\n\n\t\t\t$.ui.suggester.prototype._create.call( this );\n\n\t\t\tthis.element\n\t\t\t.on( this.widgetEventPrefix + 'change.' + this.widgetName, function ( event ) {\n\t\t\t\tvar value = self.element.val().trim();\n\t\t\t\tif ( value !== self.option( 'pageName' ) ) {\n\t\t\t\t\tself.option( 'pageName', value );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\t$.ui.suggester.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'siteId' ) {\n\t\t\t\tthis._trigger( 'change' );\n\t\t\t}\n\n\t\t\tif ( key === 'pageName' && this.element.val() !== value ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t\tthis._trigger( 'change' );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see $.ui.suggester.search\n\t\t */\n\t\tsearch: function ( event ) {\n\t\t\t// Reject searching when there is no siteId specified:\n\t\t\tif ( !this.option( 'siteId' ) ) {\n\t\t\t\tvar deferred = $.Deferred();\n\t\t\t\treturn deferred.reject( 'siteId-undefined' ).promise();\n\t\t\t}\n\t\t\treturn $.ui.suggester.prototype.search.apply( this, arguments );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._getSuggestions\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t *         Resolved parameters:\n\t\t *         - {string[]}\n\t\t *         - {string}\n\t\t *         Rejected parameters:\n\t\t *         - {string}\n\t\t */\n\t\t_request: function () {\n\t\t\tvar self = this;\n\n\t\t\treturn function ( term ) {\n\t\t\t\tvar deferred = $.Deferred();\n\n\t\t\t\t$.ajax( {\n\t\t\t\t\turl: wb.sites.getSite( self.option( 'siteId' ) ).getApi(),\n\t\t\t\t\tdataType: 'jsonp',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tsearch: term,\n\t\t\t\t\t\taction: 'opensearch'\n\t\t\t\t\t},\n\t\t\t\t\ttimeout: 8000\n\t\t\t\t} )\n\t\t\t\t.done( function ( response ) {\n\t\t\t\t\tdeferred.resolve( response[ 1 ], response[ 0 ] );\n\t\t\t\t} )\n\t\t\t\t.fail( function ( jqXHR, textStatus ) {\n\t\t\t\t\t// Since this is a JSONP request, this will always fail with a timeout...\n\t\t\t\t\tdeferred.reject( textStatus );\n\t\t\t\t} );\n\n\t\t\t\treturn deferred.promise();\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._createMenuItemFromSuggestion\n\t\t * @protected\n\t\t *\n\t\t * @param {string} suggestion\n\t\t * @param {string} requestTerm\n\t\t * @return {jQuery.ui.ooMenu.Item}\n\t\t */\n\t\t_createMenuItemFromSuggestion: function ( suggestion, requestTerm ) {\n\t\t\treturn new $.ui.ooMenu.Item(\n\t\t\t\tutil.highlightSubstring( requestTerm, suggestion ),\n\t\t\t\tsuggestion\n\t\t\t);\n\t\t}\n\n\t} );\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.propertyview.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":21,"column":null,"nodeType":"Block","endLine":21,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":180,"column":null,"nodeType":"Block","endLine":180,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":196,"column":null,"nodeType":"Block","endLine":196,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":197,"column":null,"nodeType":"Block","endLine":197,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":228,"column":3,"nodeType":"Block","endLine":230,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":246,"column":3,"nodeType":"Block","endLine":248,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":287,"column":3,"nodeType":"Block","endLine":295,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":287,"column":3,"nodeType":"Block","endLine":295,"endColumn":6}],"errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\trequire( './jquery.wikibase.listview.ListItemAdapter.js' );\n\n\t/**\n\t * View for displaying and editing `datamodel.Reference` objects.\n\t *\n\t * @see datamodel.Reference\n\t * @class jQuery.wikibase.referenceview\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {datamodel.Reference|null} options.value\n\t * @param {Function} options.getListItemAdapter\n\t * @param {Function} options.removeCallback\n\t */\n\t/**\n\t * @event afterstartediting\n\t * Triggered after having started the widget's edit mode and edit mode has been rendered.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event afterstopediting\n\t * Triggered after having stopped the widget's edit mode and non-edit mode is redrawn.\n\t * @param {boolean} dropValue\n\t *        Whether the widget's value has been be reset to the one from before starting edit mode.\n\t */\n\t/**\n\t * @event change\n\t * Triggered whenever the `Reference` represented by the widget is changed.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event toggleerror\n\t * Triggered when an error occurred or has been resolved.\n\t * @param {jQuery.Event} event\n\t * @param {boolean} error Whether an error occurred\n\t */\n\t$.widget( 'wikibase.referenceview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-referenceview',\n\t\t\ttemplateParams: [\n\t\t\t\t'', // additional css classes\n\t\t\t\t'' // snaklistview widget\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$heading: '.wikibase-referenceview-heading',\n\t\t\t\t$listview: '.wikibase-referenceview-listview'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tgetListItemAdapter: null\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.getListItemAdapter || !this.options.removeCallback ) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tthis.enableTabs = mw.config.get( 'wbRefTabsEnabled' );\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tvar self = this;\n\t\t\tvar listview;\n\t\t\tthis.$listview.listview( {\n\t\t\t\tlistItemAdapter: this.options.getListItemAdapter( function ( snaklistview ) {\n\t\t\t\t\tlistview.removeItem( snaklistview.element );\n\t\t\t\t\tif ( listview.items().length === 0 ) {\n\t\t\t\t\t\tself.options.removeCallback();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t\t}\n\t\t\t\t} ),\n\t\t\t\tvalue: this.options.value ? this.options.value.getSnaks().getGroupedSnakLists() : []\n\t\t\t} );\n\t\t\tlistview = this.$listview.data( 'listview' );\n\n\t\t\tthis._updateReferenceHashClass( this.value() );\n\n\t\t},\n\n\t\t/**\n\t\t * Creates tabs\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_createTabs: function () {\n\t\t\tvar manualSection,\n\t\t\t\t$manualLink,\n\t\t\t\tmanualLabel = mw.msg( 'wikibase-referenceview-tabs-manual' );\n\n\t\t\tthis.$manual = $( '<div>' ).addClass( 'wikibase-referenceview-manual' ).uniqueId();\n\n\t\t\tmanualSection = '#' + this.$manual.attr( 'id' );\n\t\t\t$manualLink = $( '<a>' )\n\t\t\t\t.attr( 'href', manualSection )\n\t\t\t\t.text( manualLabel );\n\t\t\tthis.$tabButtons = $( '<ul>' ).append(\n\t\t\t\t$( '<li>' ).append( $manualLink )\n\t\t\t);\n\n\t\t\tthis.$manual.append( this.$listview );\n\t\t\tthis.element.append( this.$tabButtons, this.$manual );\n\n\t\t\tthis.element.tabs();\n\n\t\t\t// Sets manual mode when user selects it after selecting another tab\n\t\t\t$manualLink.on( 'click', function () {\n\t\t\t\tnew mw.Api().saveOption( 'wb-reftabs-mode', 'manual' ); // for future page views\n\t\t\t\tmw.user.options.set( 'wb-reftabs-mode', 'manual' ); // for this page view\n\t\t\t} );\n\n\t\t\t// TODO: Figure out why templateParams classes in options obj doesn't work\n\t\t\tthis.element.addClass( 'wikibase-referenceview-tabs' );\n\n\t\t},\n\n\t\t/**\n\t\t * Attaches event listeners needed during edit mode.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_attachEditModeEventHandlers: function () {\n\t\t\tvar self = this,\n\t\t\t\tlistview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\tvar changeEvents = [\n\t\t\t\t'snakviewchange.' + this.widgetName,\n\t\t\t\tlia.prefixedEvent( 'change.' + this.widgetName ),\n\t\t\t\t// FIXME: Remove all itemremoved events, see https://gerrit.wikimedia.org/r/298766.\n\t\t\t\t'listviewitemremoved.' + this.widgetName\n\t\t\t];\n\n\t\t\tthis.$listview\n\t\t\t.on( changeEvents.join( ' ' ), function ( event ) {\n\t\t\t\t// Propagate \"change\" event.\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Detaches the event handlers needed during edit mode.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_detachEditModeEventHandlers: function () {\n\t\t\tvar lia = this.$listview.data( 'listview' ).listItemAdapter(),\n\t\t\t\tevents = [\n\t\t\t\t\t'snakviewchange.' + this.widgetName,\n\t\t\t\t\tlia.prefixedEvent( 'change.' + this.widgetName )\n\t\t\t\t];\n\t\t\tthis.$listview.off( events.join( ' ' ) );\n\t\t},\n\n\t\t/**\n\t\t * Will update the `wb-reference-<hash>` CSS class on the widget's root element to a given\n\t\t * `Reference`'s hash. If `null` is given or if the `Reference` has no hash, `wb-reference-new`\n\t\t * will be added as class.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @param {datamodel.Reference|null} reference\n\t\t */\n\t\t_updateReferenceHashClass: function ( reference ) {\n\t\t\tvar refHash = reference && reference.getHash() || 'new';\n\n\t\t\tthis.element.removeClassByRegex( /wb-reference-.+/ );\n\t\t\tthis.element.addClass( 'wb-reference-' + refHash );\n\n\t\t\tthis.element.removeClassByRegex( new RegExp( this.widgetBaseClass + '-.+' ) );\n\t\t\tthis.element.addClass( this.widgetBaseClass + '-' + refHash );\n\t\t},\n\n\t\t/**\n\t\t * Sets the `Reference` to be represented by the view or returns the `Reference` currently\n\t\t * represented by the widget.\n\t\t *\n\t\t * @param {datamodel.Reference|null} [reference]\n\t\t * @return {datamodel.Reference|null|undefined}\n\t\t */\n\t\tvalue: function ( reference ) {\n\t\t\tif ( reference ) {\n\t\t\t\treturn this.option( 'value', reference );\n\t\t\t}\n\n\t\t\tif ( !this.$listview ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar snakList = new datamodel.SnakList();\n\n\t\t\tif ( !this.$listview.data( 'listview' ).value().every( function ( snaklistview ) {\n\t\t\t\tvar value = snaklistview.value();\n\t\t\t\tsnakList.merge( value );\n\t\t\t\treturn value;\n\t\t\t} ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( this.options.value || snakList.length ) {\n\t\t\t\treturn new datamodel.Reference(\n\t\t\t\t\tsnakList,\n\t\t\t\t\tthis.options.value ? this.options.value.getHash() : undefined\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\t/**\n\t\t * Starts the widget's edit mode.\n\t\t */\n\t\t_startEditing: function () {\n\t\t\tthis._attachEditModeEventHandlers();\n\n\t\t\tthis._referenceRemover = this.options.getReferenceRemover( this.$heading );\n\n\t\t\tif ( this.enableTabs ) {\n\t\t\t\tthis._createTabs();\n\t\t\t\tthis._snakListAdder = this.options.getAdder( this.enterNewItem.bind( this ), this.$manual );\n\t\t\t} else {\n\t\t\t\tthis._snakListAdder = this.options.getAdder( this.enterNewItem.bind( this ), this.element );\n\t\t\t}\n\n\t\t\treturn this.$listview.data( 'listview' ).startEditing();\n\t\t},\n\n\t\t/**\n\t\t * Stops the widget's edit mode.\n\t\t */\n\t\t_stopEditing: function () {\n\t\t\tthis._detachEditModeEventHandlers();\n\n\t\t\tthis._referenceRemover.destroy();\n\t\t\tthis._referenceRemover = null;\n\t\t\tthis._snakListAdder.destroy();\n\t\t\tthis._snakListAdder = null;\n\n\t\t\t// FIXME: There should be a listview::stopEditing method\n\t\t\tthis._stopEditingReferenceSnaks();\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_stopEditingReferenceSnaks: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' );\n\t\t\tlistview.value( this.options.value ? this.options.value.getSnaks().getGroupedSnakLists() : [] );\n\n\t\t\tif ( this.enableTabs ) {\n\t\t\t\tthis._stopEditingTabs();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_stopEditingTabs: function () {\n\t\t\tthis.element.tabs( 'destroy' );\n\t\t\tthis.element.removeClass( 'wikibase-referenceview-tabs' );\n\t\t\tif ( this.$tabButtons ) {\n\t\t\t\tthis.$tabButtons.remove();\n\t\t\t\tthis.$tabButtons = null;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a pending `snaklistview` to the widget.\n\t\t *\n\t\t * @see jQuery.wikibase.listview.enterNewItem\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.done.$snaklistview\n\t\t */\n\t\tenterNewItem: function () {\n\t\t\tvar self = this,\n\t\t\t\tlistview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\tthis.startEditing();\n\n\t\t\treturn listview.enterNewItem().done( function ( $snaklistview ) {\n\t\t\t\tlia.liInstance( $snaklistview ).enterNewItem()\n\t\t\t\t.done( function ( $snakview ) {\n\t\t\t\t\t// Since the new snakview will be initialized empty which invalidates the\n\t\t\t\t\t// snaklistview, external components using the snaklistview will be noticed via\n\t\t\t\t\t// the \"change\" event.\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t\t$snakview.data( 'snakview' ).focus();\n\t\t\t\t} );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} when trying to set the value to something different that a\n\t\t *         `datamodel.Reference` object.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tif ( !( value instanceof datamodel.Reference ) ) {\n\t\t\t\t\tthrow new Error( 'Value has to be an instance of datamodel.Reference' );\n\t\t\t\t}\n\t\t\t\t// TODO: Redraw\n\t\t\t\tthis._updateReferenceHashClass( value );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis.$listview.data( 'listview' ).option( key, value );\n\t\t\t\tif ( this._referenceRemover ) {\n\t\t\t\t\tthis._referenceRemover[ value ? 'disable' : 'enable' ]();\n\t\t\t\t}\n\t\t\t\tif ( this._snakListAdder ) {\n\t\t\t\t\tthis._snakListAdder[ value ? 'disable' : 'enable' ]();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter(),\n\t\t\t\t$items = listview.items();\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tlia.liInstance( $items.first() ).focus();\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":59,"column":null,"nodeType":"Block","endLine":59,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":100,"column":null,"nodeType":"Block","endLine":100,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":101,"column":null,"nodeType":"Block","endLine":101,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":101,"column":null,"nodeType":"Block","endLine":101,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":168,"column":3,"nodeType":"Block","endLine":170,"endColumn":6}],"errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar datamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * Scrapes site links from static HTML in order to be sure the order in the static HTML matches the\n\t * order set on the widget initialized on the HTML structure since that widget is not supposed to\n\t * re-render the HTML for performance reasons.\n\t *\n\t * @ignore\n\t *\n\t * @param {jQuery} $siteLinks\n\t * @param {datamodel.SiteLinkSet} siteLinkSet\n\t * @return {Object}\n\t */\n\tfunction scrapeSiteLinks( $siteLinks, siteLinkSet ) {\n\t\tvar value = [];\n\n\t\t$siteLinks.find( '.wikibase-sitelinkgroupview' ).each( function () {\n\t\t\tvar $sitelinkgroupview = $( this ),\n\t\t\t\t$sitelinklistview = $sitelinkgroupview.find( '.wikibase-sitelinklistview' ),\n\t\t\t\tgroup = $sitelinkgroupview.data( 'wb-sitelinks-group' ),\n\t\t\t\tsiteIdsOfGroup = [],\n\t\t\t\tsiteLinkIds = siteLinkSet.getKeys(),\n\t\t\t\tsiteLinksOfGroup = [];\n\n\t\t\t$sitelinklistview.find( '.wikibase-sitelinkview' ).each( function () {\n\t\t\t\tsiteIdsOfGroup.push( $( this ).data( 'wb-siteid' ) );\n\t\t\t} );\n\n\t\t\tfor ( var i = 0; i < siteIdsOfGroup.length; i++ ) {\n\t\t\t\tfor ( var j = 0; j < siteLinkIds.length; j++ ) {\n\t\t\t\t\tif ( siteLinkIds[ j ] === siteIdsOfGroup[ i ] ) {\n\t\t\t\t\t\tsiteLinksOfGroup.push( siteLinkSet.getItemByKey( siteLinkIds[ j ] ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalue.push( {\n\t\t\t\tgroup: group,\n\t\t\t\tsiteLinks: new datamodel.SiteLinkSet( siteLinksOfGroup )\n\t\t\t} );\n\t\t} );\n\n\t\treturn value;\n\t}\n\n\t/**\n\t * Maps site links of a `datamodel.SiteLinkSet` to their Wikibase site groups.\n\t *\n\t * @ignore\n\t *\n\t * @param {datamodel.SiteLinkSet} siteLinkSet\n\t * @return {Object}\n\t */\n\tfunction orderSiteLinksByGroup( siteLinkSet ) {\n\t\tvar value = [];\n\n\t\tsiteLinkSet.each( function ( siteId, siteLink ) {\n\t\t\tvar site = wb.sites.getSite( siteId ),\n\t\t\t\tfound = false;\n\n\t\t\tif ( !site ) {\n\t\t\t\tmw.log.warn( 'Site with id ' + siteId + ' is not registered, but used' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < value.length; i++ ) {\n\t\t\t\tif ( value[ i ].group === site.getGroup() ) {\n\t\t\t\t\tvalue[ i ].siteLinks.addItem( siteLink );\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !found ) {\n\t\t\t\tvalue.push( {\n\t\t\t\t\tgroup: site.getGroup(),\n\t\t\t\t\tsiteLinks: new datamodel.SiteLinkSet( [ siteLink ] )\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn value;\n\t}\n\n\tvar PARENT = $.ui.TemplatedWidget;\n\n\t/**\n\t * Encapsulates multiple sitelinkgroupview widgets.\n\t *\n\t * @extends jQuery.ui.TemplatedWidget\n\t *\n\t * @option {jQuery.wikibase.listview.ListItemAdapter} listItemAdapter\n\t * @option {datamodel.SiteLinkSet} value\n\t */\n\t$.widget( 'wikibase.sitelinkgrouplistview', PARENT, {\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-sitelinkgrouplistview',\n\t\t\ttemplateParams: [\n\t\t\t\t'' // sitelinklistview(s)\n\t\t\t],\n\t\t\ttemplateShortCuts: {},\n\t\t\tvalue: null\n\t\t},\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$listview: null,\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.listItemAdapter || !this.options.value ) {\n\t\t\t\tthrow new Error( 'Required option(s) missing' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._createListview();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this.$listview ) {\n\t\t\t\tvar listview = this.$listview.data( 'listview' );\n\t\t\t\tif ( listview ) {\n\t\t\t\t\tlistview.destroy();\n\t\t\t\t}\n\t\t\t\tthis.$listview.remove();\n\t\t\t\tdelete this.$listview;\n\t\t\t}\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t_createListview: function () {\n\t\t\tvar value = this.element.is( ':empty' )\n\t\t\t\t? orderSiteLinksByGroup( this.options.value )\n\t\t\t\t: scrapeSiteLinks( this.element, this.options.value );\n\n\t\t\tthis.$listview = this.element.find( '.wikibase-listview' );\n\n\t\t\tif ( !this.$listview.length ) {\n\t\t\t\tthis.$listview = $( '<div>' ).appendTo( this.element );\n\t\t\t}\n\n\t\t\tthis.$listview\n\t\t\t.listview( {\n\t\t\t\tlistItemAdapter: this.options.listItemAdapter,\n\t\t\t\tvalue: value,\n\t\t\t\tencapsulate: true\n\t\t\t} )\n\t\t\t.on( this.options.listItemAdapter.prefixedEvent( 'disable.' + this.widgetName ), function ( event ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis.$listview.data( 'listview' ).option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\t$items = listview.items();\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tlistview.listItemAdapter().liInstance( $items.first() ).focus();\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":29,"column":null,"nodeType":"Block","endLine":29,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":30,"column":null,"nodeType":"Block","endLine":30,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":30,"column":null,"nodeType":"Block","endLine":30,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":31,"column":null,"nodeType":"Block","endLine":31,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":33,"column":null,"nodeType":"Block","endLine":33,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":112,"column":3,"nodeType":"Block","endLine":114,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":173,"column":null,"nodeType":"Block","endLine":173,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":192,"column":null,"nodeType":"Block","endLine":192,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":194,"column":null,"nodeType":"Block","endLine":194,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":221,"column":null,"nodeType":"Block","endLine":221,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":222,"column":null,"nodeType":"Block","endLine":222,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":248,"column":3,"nodeType":"Block","endLine":250,"endColumn":6}],"errorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * @param {string} group\n\t * @return {string[]}\n\t */\n\tfunction getSiteIdsOfGroup( group ) {\n\t\tvar siteIds = [];\n\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t$.each( wb.sites.getSitesOfGroup( group ), function ( siteId, site ) {\n\t\t\tsiteIds.push( siteId );\n\t\t} );\n\t\treturn siteIds;\n\t}\n\n\t/**\n\t * Manages a sitelinklistview widget specific to a particular site link group.\n\t *\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t *\n\t * @option {string} groupName\n\t * @option {datamodel.SiteLinkSet} value\n\t * @option {Function} getSiteLinkListView\n\t *\n\t * @option {string} [helpMessage]\n\t *                  Default: 'Add a site link by specifying a site and a page of that site, edit or\n\t *                  remove existing site links.'\n\t */\n\t$.widget( 'wikibase.sitelinkgroupview', PARENT, {\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.options\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-sitelinkgroupview',\n\t\t\ttemplateParams: [\n\t\t\t\tfunction () {\n\t\t\t\t\treturn 'sitelinks-' + this.options.groupName;\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// It's hard to dynamically load the right message. Fake it as best as possible.\n\t\t\t\t\treturn this.options.groupName[ 0 ].toUpperCase()\n\t\t\t\t\t\t+ this.options.groupName.slice( 1 );\n\t\t\t\t},\n\t\t\t\t'', // counter\n\t\t\t\t'', // sitelinklistview\n\t\t\t\t'', // group\n\t\t\t\t'', // toolbar\n\t\t\t\t'' // additional class names\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$headingSection: '.wikibase-sitelinkgroupview-heading-section',\n\t\t\t\theadingContainer: '.wikibase-sitelinkgroupview-heading-container',\n\t\t\t\t$h: 'h3',\n\t\t\t\t$counter: '.wikibase-sitelinkgroupview-counter'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tgetSiteLinkListView: null,\n\t\t\tgroupName: null,\n\t\t\thelpMessage: mw.msg( 'wikibase-sitelinkgroupview-input-help-message' )\n\t\t},\n\n\t\t/**\n\t\t * @type {jQuery}\n\t\t */\n\t\t$sitelinklistview: null,\n\n\t\t/**\n\t\t * @type {string[]}\n\t\t */\n\t\t_siteIdsOfGroup: null,\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.groupName || !this.options.getSiteLinkListView ) {\n\t\t\t\tthrow new Error( 'Required parameter(s) missing' );\n\t\t\t}\n\n\t\t\tthis.options.value = this._checkValue( this.options.value );\n\t\t\tthis._siteIdsOfGroup = getSiteIdsOfGroup( this.options.groupName );\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis.$sitelinklistview = this.element.find( '.wikibase-sitelinklistview' );\n\n\t\t\tif ( !this.$sitelinklistview.length ) {\n\t\t\t\tthis.$sitelinklistview = $( '<table>' ).appendTo( this.element );\n\t\t\t}\n\n\t\t\tthis.draw();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this.$sitelinklistview ) {\n\t\t\t\tthis.$sitelinklistview.data( 'sitelinklistview' ).destroy();\n\t\t\t}\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.draw\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred();\n\n\t\t\tthis.element.data( 'group', this.options.groupName );\n\n\t\t\tif ( !this.$headingSection.data( 'sticknode' ) ) {\n\t\t\t\tthis.$headingSection.sticknode( {\n\t\t\t\t\t$container: this.element\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( !this._$notification ) {\n\t\t\t\tthis.notification()\n\t\t\t\t.appendTo( this.$headingSection )\n\t\t\t\t.on( 'closeableupdate.' + this.widgetName, function () {\n\t\t\t\t\tvar sticknode = self.element.data( 'sticknode' );\n\t\t\t\t\tif ( sticknode ) {\n\t\t\t\t\t\tsticknode.refresh();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( !this.$sitelinklistview.data( 'sitelinklistview' ) ) {\n\t\t\t\tthis._createSitelinklistview();\n\t\t\t\tdeferred.resolve();\n\t\t\t} else {\n\t\t\t\tthis.$sitelinklistview.data( 'sitelinklistview' ).draw()\n\t\t\t\t\t.done( deferred.resolve )\n\t\t\t\t\t.fail( deferred.reject );\n\t\t\t}\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Creates and initializes the sitelinklistview widget.\n\t\t */\n\t\t_createSitelinklistview: function () {\n\t\t\tvar sitelinklistview = this.options.getSiteLinkListView(\n\t\t\t\tthis._getSiteLinksOfGroup(),\n\t\t\t\tthis.$sitelinklistview,\n\t\t\t\tthis._siteIdsOfGroup,\n\t\t\t\tthis.$counter\n\t\t\t);\n\t\t\tvar prefix = sitelinklistview.widgetEventPrefix;\n\n\t\t\tvar self = this;\n\t\t\tthis.$sitelinklistview\n\t\t\t.on( prefix + 'change.' + this.widgetName, function ( event ) {\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} )\n\t\t\t.on( prefix + 'toggleerror.' + this.widgetName, function ( event, error ) {\n\t\t\t\tself.setError( error );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @return {datamodel.SiteLink[]}\n\t\t */\n\t\t_getSiteLinksOfGroup: function () {\n\t\t\tvar self = this,\n\t\t\t\tresult = [];\n\n\t\t\tif ( !this.options.value ) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthis.options.value.each( function ( siteId, siteLink ) {\n\t\t\t\tif ( self._siteIdsOfGroup.indexOf( siteId ) !== -1 ) {\n\t\t\t\t\tresult.push( siteLink );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn result;\n\t\t},\n\n\t\t/**\n\t\t * @param {datamodel.SiteLinkSet|null} value\n\t\t * @throws {Error}\n\t\t * @return {datamodel.SiteLinkSet}\n\t\t */\n\t\t_checkValue: function ( value ) {\n\t\t\tif ( !value ) {\n\t\t\t\tvalue = new datamodel.SiteLinkSet( [] );\n\t\t\t} else if ( !( value instanceof datamodel.SiteLinkSet ) ) {\n\t\t\t\tthrow new Error( 'value must be a SiteLinkSet or null' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\treturn this.$sitelinklistview.data( 'sitelinklistview' ).startEditing();\n\t\t},\n\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tvar self = this;\n\t\t\treturn this.$sitelinklistview.data( 'sitelinklistview' ).stopEditing( dropValue )\n\t\t\t.done( function () {\n\t\t\t\tself.notification();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.value\n\t\t *\n\t\t * @param {datamodel.SiteLink[]} [value]\n\t\t * @return {datamodel.SiteLinkSet}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\treturn new datamodel.SiteLinkSet( this.$sitelinklistview.data( 'sitelinklistview' ).value() );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tthis.$sitelinklistview.data( 'sitelinklistview' ).focus();\n\t\t},\n\n\t\t_getSiteLinksArray: function () {\n\t\t\tvar res = [];\n\t\t\t// FIXME: Replace with Set.toArray (requires DataModel JavaScript 3.0).\n\t\t\tthis.options.value.each( function ( siteId, siteLink ) {\n\t\t\t\tres.push( siteLink );\n\t\t\t} );\n\t\t\treturn res;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tvalue = this._checkValue( value );\n\t\t\t} else if ( key === 'groupName' && value !== this.options.groupName ) {\n\t\t\t\tthis._siteIdsOfGroup = getSiteIdsOfGroup( value );\n\t\t\t\tthis.$sitelinklistview.data( 'sitelinklistview' )\n\t\t\t\t\t.option( 'allowedSiteIds', this._siteIdsOfGroup );\n\n\t\t\t\tthis.draw();\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.call( this, key, value );\n\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tthis.$sitelinklistview.data( 'sitelinklistview' )\n\t\t\t\t.value( this._getSiteLinksArray() );\n\n\t\t\t\tthis.draw();\n\t\t\t} else if ( key === 'disabled' ) {\n\t\t\t\tthis.$sitelinklistview.data( 'sitelinklistview' ).option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.setError\n\t\t */\n\t\tsetError: function ( error ) {\n\t\t\tif ( !error ) {\n\t\t\t\tif ( this.$notification && this.$notification.hasClass( 'wb-error' ) ) {\n\t\t\t\t\tthis.notification();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tPARENT.prototype.setError.call( this, error );\n\t\t},\n\n\t\tdoErrorNotification: function ( error ) {\n\t\t\tthis.notification( wb.buildErrorOutput( error ), 'wb-error' );\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":26,"column":null,"nodeType":"Block","endLine":26,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":29,"column":null,"nodeType":"Block","endLine":29,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":32,"column":null,"nodeType":"Block","endLine":32,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":34,"column":null,"nodeType":"Block","endLine":34,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'EventSingletonManager' is undefined.","line":34,"column":null,"nodeType":"Block","endLine":34,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":38,"column":null,"nodeType":"Block","endLine":38,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":41,"column":null,"nodeType":"Block","endLine":41,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'EventSingletonManager' is undefined.","line":64,"column":null,"nodeType":"Block","endLine":64,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":97,"column":3,"nodeType":"Block","endLine":99,"endColumn":6},{"ruleId":"no-shadow","severity":1,"message":"'self' is already declared in the upper scope on line 306 column 8.","line":312,"column":23,"nodeType":"Identifier","messageId":"noShadow","endLine":312,"endColumn":27},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":360,"column":3,"nodeType":"Block","endLine":362,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":467,"column":3,"nodeType":"Block","endLine":469,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":483,"column":3,"nodeType":"Block","endLine":491,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":483,"column":3,"nodeType":"Block","endLine":491,"endColumn":6}],"errorCount":0,"warningCount":14,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tEventSingletonManager = require( '../jquery.util.EventSingletonManager.js' ),\n\t\tbuildCounter = require( '../../wikibase/utilities/wikibase.utilities.ui.js' );\n\n\t/**\n\t * @param {string} eventNames\n\t * @param {string} namespace\n\t * @return {string}\n\t */\n\tfunction namespaceEventNames( eventNames, namespace ) {\n\t\treturn eventNames.split( ' ' ).join( '.' + namespace + ' ' ) + '.' + namespace;\n\t}\n\n\t/**\n\t * Displays and allows editing multiple site links.\n\t *\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t *\n\t * @option {wikibase.datamodel.SiteLink[]} [value]\n\t *         Default: []\n\t *\n\t * @option {string[]} [allowedSiteIds]\n\t *         Default: []\n\t *\n\t * @option {Function} getListItemAdapter\n\t *\n\t * @option {EventSingletonManager} [eventSingletonManager]\n\t *         Should be set when the widget instance is part of a sitelinkgroupview.\n\t *         Default: null (will be constructed automatically)\n\t *\n\t * @option {jQuery} [$counter]\n\t *         Node(s) that shall contain information about the number of site links.\n\t *\n\t * @option {boolean} [autoInput]\n\t *         Whether to automatically show and add new input fields to add a new value when in edit\n\t *         mode.\n\t *         Default: true\n\t */\n\t$.widget( 'wikibase.sitelinklistview', PARENT, {\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-sitelinklistview',\n\t\t\ttemplateParams: [\n\t\t\t\t'' // listview\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$listview: 'ul'\n\t\t\t},\n\t\t\tvalue: [],\n\t\t\tallowedSiteIds: [],\n\t\t\teventSingletonManager: null,\n\t\t\tgetListItemAdapter: null,\n\t\t\t$counter: null,\n\t\t\tautoInput: true\n\t\t},\n\n\t\t/**\n\t\t * @type {EventSingletonManager}\n\t\t */\n\t\t_eventSingletonManager: null,\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.getListItemAdapter ) {\n\t\t\t\tthrow new Error( 'Required option(s) missing' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._eventSingletonManager = this.options.eventSingletonManager\n\t\t\t\t|| new EventSingletonManager();\n\n\t\t\tthis.draw();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis.$listview.data( 'listview' ).destroy();\n\t\t\tthis.$listview.off( '.' + this.widgetName );\n\t\t\tthis.element.removeClass( 'wikibase-sitelinklistview' );\n\n\t\t\tthis._eventSingletonManager.unregister( this, window, '.' + this.widgetName );\n\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.draw\n\t\t */\n\t\tdraw: function () {\n\t\t\tif ( !this.$listview.data( 'listview' ) ) {\n\t\t\t\tthis._createListView();\n\t\t\t}\n\n\t\t\tif ( this.options.$counter && this.options.$counter.is( ':empty' ) ) {\n\t\t\t\tthis._refreshCounter();\n\t\t\t}\n\n\t\t\tif ( this.options.autoInput && !this.isFull() ) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tevent = this.widgetEventPrefix + 'afterstartediting.' + this.widgetName,\n\t\t\t\t\tupdateAutoInput = function () {\n\t\t\t\t\t\tself._updateAutoInput();\n\t\t\t\t\t};\n\n\t\t\t\tthis.element\n\t\t\t\t\t.off( event, updateAutoInput )\n\t\t\t\t\t.on( event, updateAutoInput );\n\t\t\t}\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * Creates the listview widget managing the sitelinkview widgets\n\t\t */\n\t\t_createListView: function () {\n\t\t\tvar self = this,\n\t\t\t\tlistItemAdapter = this.options.getListItemAdapter(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\treturn self._getUnusedAllowedSiteIds().map( function ( siteId ) {\n\t\t\t\t\t\t\treturn wb.sites.getSite( siteId );\n\t\t\t\t\t\t} );\n\t\t\t\t\t},\n\t\t\t\t\tfunction ( sitelinkview ) {\n\t\t\t\t\t\tself.$listview.data( 'listview' ).removeItem( sitelinkview.element );\n\t\t\t\t\t\tself._refreshCounter();\n\t\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t// Encapsulate sitelinkviews by suppressing their events:\n\t\t\tthis.$listview\n\t\t\t.listview( {\n\t\t\t\tlistItemAdapter: listItemAdapter,\n\t\t\t\tvalue: self.options.value || null,\n\t\t\t\tlistItemNodeName: 'LI',\n\t\t\t\tencapsulate: true\n\t\t\t} )\n\t\t\t.on( listItemAdapter.prefixedEvent( 'change.' + this.widgetName ), function ( event ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tif ( self.options.autoInput ) {\n\t\t\t\t\tself._updateAutoInput();\n\t\t\t\t\tself._refreshCounter();\n\t\t\t\t}\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} )\n\t\t\t.on( listItemAdapter.prefixedEvent( 'toggleerror.' + this.widgetName ), function ( event, error ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t} )\n\t\t\t.on( 'keydown.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.BACKSPACE ) {\n\t\t\t\t\tvar $sitelinkview = $( event.target ).parentsUntil( this ).addBack().filter( '.listview-item' ),\n\t\t\t\t\t\tsitelinkview = listItemAdapter.liInstance( $sitelinkview );\n\n\t\t\t\t\tif ( sitelinkview ) {\n\t\t\t\t\t\tself._removeSitelinkviewIfEmpty( sitelinkview, event ); // FIXME: Move to sitelinkview\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on(\n\t\t\t\t[\n\t\t\t\t\tlistItemAdapter.prefixedEvent( 'create.' + this.widgetName ),\n\t\t\t\t\tlistItemAdapter.prefixedEvent( 'afterstartediting.' + this.widgetName ),\n\t\t\t\t\tlistItemAdapter.prefixedEvent( 'afterstopediting.' + this.widgetName ),\n\t\t\t\t\tlistItemAdapter.prefixedEvent( 'disable.' + this.widgetName )\n\t\t\t\t].join( ' ' ),\n\t\t\t\tfunction ( event ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @param {jQuery.wikibase.sitelinkview} sitelinkview\n\t\t * @param {jQuery.Event} event\n\t\t */\n\t\t_removeSitelinkviewIfEmpty: function ( sitelinkview, event ) {\n\t\t\tvar $sitelinkview = sitelinkview.element,\n\t\t\t\tlistview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter(),\n\t\t\t\t$items = listview.items(),\n\t\t\t\tisLast = $sitelinkview.get( 0 ) === $items.last().get( 0 ),\n\t\t\t\tisEmpty = sitelinkview.isEmpty()\n\t\t\t\t\t|| sitelinkview.option( 'value' ) && !sitelinkview.value();\n\n\t\t\tif ( isEmpty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\t// Shift focus to previous line or to following line if there is no previous:\n\t\t\t\t$items.each( function ( i ) {\n\t\t\t\t\tif ( this === $sitelinkview.get( 0 ) ) {\n\t\t\t\t\t\tif ( i > 0 ) {\n\t\t\t\t\t\t\tlia.liInstance( $items.eq( i - 1 ) ).focus();\n\t\t\t\t\t\t} else if ( $items.length > 1 ) {\n\t\t\t\t\t\t\tlia.liInstance( $items.eq( i + 1 ) ).focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tif ( !isLast ) {\n\t\t\t\t\tlistview.removeItem( $sitelinkview );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_updateAutoInput: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter(),\n\t\t\t\t$items = listview.items(),\n\t\t\t\t$lastSitelinkview = $items.last(),\n\t\t\t\tlastSitelinkview = lia.liInstance( $lastSitelinkview ),\n\t\t\t\tsecondToLast = $items.length > 1 && lia.liInstance( $items.eq( -2 ) ),\n\t\t\t\tsecondToLastEmpty = secondToLast && secondToLast.isEmpty(),\n\t\t\t\tsecondToLastInvalidPending\n\t\t\t\t\t= secondToLast && !secondToLast.value() && !secondToLast.option( 'value' );\n\n\t\t\tif ( lastSitelinkview\n\t\t\t\t&& lastSitelinkview.isEmpty()\n\t\t\t\t&& ( secondToLastEmpty || secondToLastInvalidPending )\n\t\t\t) {\n\t\t\t\tlistview.removeItem( $lastSitelinkview );\n\t\t\t} else if ( !lastSitelinkview || lastSitelinkview.value() && !this.isFull() ) {\n\t\t\t\tthis.enterNewItem();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @return {string[]}\n\t\t */\n\t\t_getUnusedAllowedSiteIds: function () {\n\t\t\tvar representedSiteIds = this.value().map( function ( siteLink ) {\n\t\t\t\treturn siteLink.getSiteId();\n\t\t\t} );\n\n\t\t\treturn this.option( 'allowedSiteIds' ).filter( function ( siteId ) {\n\t\t\t\treturn representedSiteIds.indexOf( siteId ) === -1;\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Returns whether all allowed sites are linked or no more site links may be added.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFull: function () {\n\t\t\treturn !this._getUnusedAllowedSiteIds().length\n\t\t\t\t|| this.value().length === this.options.allowedSiteIds.length;\n\t\t},\n\n\t\t/**\n\t\t * Refreshes any nodes featuring a counter.\n\t\t */\n\t\t_refreshCounter: function () {\n\t\t\tif ( !this.options.$counter ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.options.$counter\n\t\t\t.addClass( this.widgetName + '-counter' )\n\t\t\t.empty()\n\t\t\t.append( this._getFormattedCounterText() );\n\t\t},\n\n\t\t/**\n\t\t * Returns a formatted string with the number of site links.\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_getFormattedCounterText: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter(),\n\t\t\t\t$items = listview.items().filter( function () {\n\t\t\t\t\tvar sitelinkview = lia.liInstance( $( this ) );\n\t\t\t\t\treturn !sitelinkview.isEmpty();\n\t\t\t\t} );\n\n\t\t\tvar $counterMsg = buildCounter(\n\t\t\t\t'wikibase-sitelinks-counter',\n\t\t\t\t$items.length\n\t\t\t);\n\n\t\t\t// Counter result should be wrapped in parentheses, which is another message. Since the\n\t\t\t// message system does not return a jQuery object, a work-around is needed:\n\t\t\tvar $parenthesesMsg = $(\n\t\t\t\t( '<div>' + mw.msg( 'parentheses', '__1__' ) + '</div>' ).replace( /__1__/g, '<span/>' )\n\t\t\t);\n\t\t\t$parenthesesMsg.find( 'span' ).replaceWith( $counterMsg );\n\n\t\t\treturn $parenthesesMsg.contents();\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis._eventSingletonManager.register(\n\t\t\t\tthis,\n\t\t\t\twindow,\n\t\t\t\tnamespaceEventNames( 'scroll touchmove resize', this.widgetName ),\n\t\t\t\tfunction ( event, self ) {\n\t\t\t\t\t// It's possible an event is triggered with the widget not being initialized.\n\t\t\t\t\tif ( self.$listview ) {\n\t\t\t\t\t\tself._startEditingInViewport();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tthrottle: 150\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tself._startEditingInViewport();\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t_startEditingInViewport: function () {\n\t\t\t/**\n\t\t\t * @param {HTMLElement} node\n\t\t\t * @return {boolean}\n\t\t\t */\n\t\t\tfunction touchesViewport( node ) {\n\t\t\t\tvar rect = node.getBoundingClientRect(),\n\t\t\t\t\t$window = $( window ),\n\t\t\t\t\twHeight = $window.height(),\n\t\t\t\t\twWidth = $window.width(),\n\t\t\t\t\ttouchesViewportHorizontally = rect.right >= 0 && rect.right < wWidth\n\t\t\t\t\t\t|| rect.left >= 0 && rect.left < wWidth,\n\t\t\t\t\ttouchesViewportVertically = rect.top >= 0 && rect.top < wHeight\n\t\t\t\t\t\t|| rect.bottom >= 0 && rect.bottom < wHeight;\n\t\t\t\treturn touchesViewportHorizontally && touchesViewportVertically;\n\t\t\t}\n\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter(),\n\t\t\t\tfoundOne = false;\n\n\t\t\tlistview.value().forEach( function ( sitelinkview ) {\n\t\t\t\tif ( touchesViewport( sitelinkview.element[ 0 ] ) ) {\n\t\t\t\t\tsitelinkview.startEditing();\n\t\t\t\t\tfoundOne = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !foundOne && listview.items().length > 0 ) {\n\t\t\t\tlia.liInstance( $( listview.items()[ 0 ] ) ).startEditing();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.stopEditing\n\t\t */\n\t\tstopEditing: function ( dropValue ) {\n\t\t\tif ( !dropValue ) {\n\t\t\t\tthis._removeIncompleteSiteLinks();\n\t\t\t}\n\n\t\t\treturn PARENT.prototype.stopEditing.call( this, dropValue );\n\t\t},\n\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tthis._refreshCounter();\n\t\t\tthis._eventSingletonManager.unregister(\n\t\t\t\tthis,\n\t\t\t\twindow,\n\t\t\t\tnamespaceEventNames( 'scroll touchmove resize', this.widgetName )\n\t\t\t);\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t_removeIncompleteSiteLinks: function () {\n\t\t\tvar listview = this.$listview.data( 'listview' );\n\n\t\t\tlistview.items().not( listview.nonEmptyItems() ).each( function () {\n\t\t\t\tlistview.removeItem( $( this ) );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\t// Focus first invalid/incomplete item or - if there is none - the first item.\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter(),\n\t\t\t\t$items = listview.items();\n\n\t\t\tif ( !$items.length ) {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @param {jQuery} $nodes\n\t\t\t * @return {jQuery}\n\t\t\t */\n\t\t\tfunction findFirstInViewPort( $nodes ) {\n\t\t\t\tvar $window = $( window );\n\t\t\t\tvar $foundNode = null;\n\n\t\t\t\t$nodes.each( function () {\n\t\t\t\t\tvar $node = $( this );\n\t\t\t\t\t// TODO: Store visibility in model\n\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\tif ( $node.is( ':visible' ) && $node.offset().top > $window.scrollTop() ) {\n\t\t\t\t\t\t$foundNode = $node;\n\t\t\t\t\t}\n\t\t\t\t\treturn $foundNode === null;\n\t\t\t\t} );\n\n\t\t\t\treturn $foundNode || $nodes.first();\n\t\t\t}\n\n\t\t\tif ( this.value() === null ) {\n\t\t\t\t$items = $items.filter( function () {\n\t\t\t\t\tvar sitelinkview = lia.liInstance( $( this ) );\n\t\t\t\t\treturn sitelinkview.value() === null;\n\t\t\t\t} );\n\t\t\t}\n\t\t\t$items = findFirstInViewPort( $items );\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tlia.liInstance( $items ).focus();\n\t\t\t\t}, 10 );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.EditableTemplatedWidget.value\n\t\t *\n\t\t * @param {wikibase.datamodel.SiteLink[]} [value]\n\t\t * @return {wikibase.datamodel.SiteLink[]|*}\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\treturn this.option( 'value', value );\n\t\t\t}\n\n\t\t\tvalue = [];\n\n\t\t\tif ( !this.$listview ) {\n\t\t\t\treturn this.options.value;\n\t\t\t}\n\n\t\t\tvar listview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\tlistview.nonEmptyItems().each( function () {\n\t\t\t\tvar sitelinkview = lia.liInstance( $( this ) );\n\t\t\t\tvalue.push( sitelinkview.value() );\n\t\t\t} );\n\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tthis.$listview.data( 'listview' ).value( value );\n\t\t\t\tthis._refreshCounter();\n\t\t\t} else if ( key === 'disabled' ) {\n\t\t\t\tthis.$listview.data( 'listview' ).option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * Adds a pending `sitelinkview` to the `sitelinklistview`.\n\t\t *\n\t\t * @see jQuery.wikibase.listview.enterNewItem\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.done.$sitelinkview\n\t\t */\n\t\tenterNewItem: function () {\n\t\t\tvar self = this,\n\t\t\t\tlistview = this.$listview.data( 'listview' ),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\treturn listview.enterNewItem().done( function ( $sitelinkview ) {\n\t\t\t\tvar sitelinkview = lia.liInstance( $sitelinkview );\n\n\t\t\t\t$sitelinkview.addClass( 'wb-new' );\n\n\t\t\t\tself._refreshCounter();\n\n\t\t\t\tif ( !self.isInEditMode() ) {\n\t\t\t\t\tself.startEditing();\n\t\t\t\t} else {\n\t\t\t\t\tsitelinkview.startEditing();\n\t\t\t\t}\n\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.sitelinkview.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":21,"column":null,"nodeType":"Block","endLine":21,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":25,"column":null,"nodeType":"Block","endLine":25,"endColumn":null},{"ruleId":"no-shadow","severity":1,"message":"'site' is already declared in the upper scope on line 213 column 9.","line":272,"column":9,"nodeType":"Identifier","messageId":"noShadow","endLine":272,"endColumn":13},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":358,"column":3,"nodeType":"Block","endLine":360,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":400,"column":null,"nodeType":"Block","endLine":400,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":401,"column":null,"nodeType":"Block","endLine":401,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":437,"column":3,"nodeType":"Block","endLine":441,"endColumn":6}],"errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\trequire( './jquery.wikibase.siteselector.js' );\n\n\t/**\n\t * Displays and allows editing a site link.\n\t *\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t *\n\t * @option {datamodel.SiteLink} [value]\n\t *         Default: null\n\t *\n\t * @option {Function} [getAllowedSites]\n\t *         Function returning an array of wikibase.Site objects.\n\t *         Default: function() { return []; }\n\t *\n\t * @option {wikibase.entityIdFormatter.EntityIdPlainFormatter} entityIdPlainFormatter\n\t *\n\t * @event change\n\t *        - {jQuery.Event}\n\t *\n\t * @event afterstartediting\n\t *       - {jQuery.Event}\n\t *\n\t * @event afterstopediting\n\t *        - {jQuery.Event}\n\t *        - {boolean} Whether to drop the value.\n\t *\n\t * @event toggleerror\n\t *        - {jQuery.Event}\n\t *        - {Error|null}\n\t */\n\t$.widget( 'wikibase.sitelinkview', PARENT, {\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-sitelinkview',\n\t\t\ttemplateParams: [\n\t\t\t\tfunction () {\n\t\t\t\t\tvar site = this._getSite();\n\t\t\t\t\treturn site ? site.getId() : 'new';\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tvar site = this._getSite();\n\t\t\t\t\treturn site ? site.getId() : '';\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tvar site = this._getSite();\n\t\t\t\t\treturn site ? site.getShortName() : '';\n\t\t\t\t},\n\t\t\t\t'' // page name\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$siteIdContainer: '.wikibase-sitelinkview-siteid-container',\n\t\t\t\t$siteId: '.wikibase-sitelinkview-siteid',\n\t\t\t\t$link: '.wikibase-sitelinkview-link'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tgetAllowedSites: function () { return []; },\n\t\t\tentityIdPlainFormatter: null\n\t\t},\n\n\t\t/**\n\t\t * @type {jQuery.wikibase.badgeselector|null}\n\t\t */\n\t\t_badgeselector: null,\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._create\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.entityIdPlainFormatter ) {\n\t\t\t\tthrow new Error( 'Required option(s) missing' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( !this.$link.children().length ) {\n\t\t\t\t// sitelinkview is created dynamically, in contrast to being initialized on pre-existing\n\t\t\t\t// DOM.\n\t\t\t\tthis._draw();\n\t\t\t}\n\n\t\t\tthis._createBadgeSelector();\n\t\t},\n\n\t\t_createRemover: function () {\n\t\t\tthis._siteLinkRemover = this.options.getSiteLinkRemover( this.$siteIdContainer, mw.msg( 'wikibase-remove' ) );\n\t\t\tthis._siteLinkRemover[ this.options.value ? 'enable' : 'disable' ]();\n\n\t\t\t// Update inputautoexpand maximum width after adding \"remove\" toolbar:\n\t\t\tvar $siteIdInput = this.$siteId.find( 'input' ),\n\t\t\t\tinputautoexpand = $siteIdInput.length\n\t\t\t\t\t? $siteIdInput.data( 'inputautoexpand' )\n\t\t\t\t\t: null;\n\t\t\tif ( inputautoexpand ) {\n\t\t\t\t$siteIdInput.inputautoexpand( {\n\t\t\t\t\tmaxWidth: this.element.width() - (\n\t\t\t\t\t\tthis.$siteIdContainer.outerWidth( true ) - $siteIdInput.width()\n\t\t\t\t\t)\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.updatePageNameInputAutoExpand();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this._badgeselector ) {\n\t\t\t\tthis._badgeselector.destroy();\n\t\t\t}\n\n\t\t\tif ( this._siteLinkRemover ) {\n\t\t\t\tthis._siteLinkRemover.destroy();\n\t\t\t\tthis._siteLinkRemover = null;\n\t\t\t}\n\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tvar self = this;\n\n\t\t\t\tthis.element.one( this.widgetEventPrefix + 'afterstopediting', function ( event ) {\n\t\t\t\t\tPARENT.prototype.destroy.call( self );\n\t\t\t\t} );\n\n\t\t\t\tthis.element.removeClass( 'wb-edit' );\n\t\t\t} else {\n\t\t\t\tPARENT.prototype.destroy.call( this );\n\t\t\t}\n\t\t},\n\n\t\t_createBadgeSelector: function () {\n\t\t\tvar self = this,\n\t\t\t\t$badgeselector = this.$link.find( '.wikibase-sitelinkview-badges' ),\n\t\t\t\tbadges = mw.config.get( 'wbBadgeItems' );\n\n\t\t\tif ( $.isEmptyObject( badges ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$badgeselector\n\t\t\t.badgeselector( {\n\t\t\t\tvalue: this.options.value ? this.options.value.getBadges() : [],\n\t\t\t\tbadges: badges,\n\t\t\t\tentityIdPlainFormatter: this.options.entityIdPlainFormatter,\n\t\t\t\tisRtl: $( document.body ).hasClass( 'rtl' ),\n\t\t\t\tmessages: {\n\t\t\t\t\t'badge-placeholder-title': mw.msg(\n\t\t\t\t\t\t'wikibase-badgeselector-badge-placeholder-title'\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tencapsulate: true\n\t\t\t} )\n\t\t\t.on( 'badgeselectorchange', function ( event ) {\n\t\t\t\t// Adding/removing badges decreases/increases available space:\n\t\t\t\tself.updatePageNameInputAutoExpand();\n\t\t\t\tself._trigger( 'change' );\n\t\t\t\tself._siteLinkRemover[ self.value() === null ? 'disable' : 'enable' ]();\n\t\t\t} );\n\n\t\t\tthis._badgeselector = $badgeselector.data( 'badgeselector' );\n\t\t},\n\n\t\t/**\n\t\t * Main rendering function.\n\t\t */\n\t\t_draw: function () {\n\t\t\tif ( !this.$link.children().length ) {\n\t\t\t\tvar siteLink = this.options.value,\n\t\t\t\t\tsite = this._getSite();\n\n\t\t\t\tthis.$link.append(\n\t\t\t\t\tmw.wbTemplate( 'wikibase-sitelinkview-pagename',\n\t\t\t\t\t\tsiteLink ? site.getUrlTo( siteLink.getPageName() ) : '',\n\t\t\t\t\t\tsiteLink ? siteLink.getPageName() : '',\n\t\t\t\t\t\tmw.wbTemplate( 'wikibase-badgeselector', '' ),\n\t\t\t\t\t\tsite ? site.getLanguageCode() : '',\n\t\t\t\t\t\tsite ? site.getLanguageDirection() : ''\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif ( !this._badgeselector ) {\n\t\t\t\tthis._createBadgeSelector();\n\t\t\t}\n\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tthis._drawEditMode();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Draws the edit mode context.\n\t\t */\n\t\t_drawEditMode: function () {\n\t\t\tvar self = this,\n\t\t\t\tpageNameInputOptions = {},\n\t\t\t\tdir = $( document.documentElement ).prop( 'dir' );\n\n\t\t\tif ( this.options.value ) {\n\t\t\t\tpageNameInputOptions = {\n\t\t\t\t\tsiteId: this.options.value.getSiteId(),\n\t\t\t\t\tpageName: this.options.value.getPageName()\n\t\t\t\t};\n\n\t\t\t\tvar site = wb.sites.getSite( this.options.value.getSiteId() );\n\t\t\t\tif ( site ) {\n\t\t\t\t\tdir = site.getLanguageDirection();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._createRemover();\n\n\t\t\tvar $pageNameInput = $( '<input>' )\n\t\t\t\t.attr( 'placeholder', mw.msg( 'wikibase-sitelink-page-edit-placeholder' ) )\n\t\t\t\t.attr( 'dir', dir )\n\t\t\t\t.pagesuggester( pageNameInputOptions );\n\n\t\t\tvar pagesuggester = $pageNameInput.data( 'pagesuggester' );\n\n\t\t\t$pageNameInput\n\t\t\t.on( 'pagesuggesterchange.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( !pagesuggester.isSearching() ) {\n\t\t\t\t\tself.setError();\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t}\n\t\t\t\tself._siteLinkRemover[ self.value() === null ? 'disable' : 'enable' ]();\n\t\t\t} );\n\n\t\t\tthis.$link.find( '.wikibase-sitelinkview-page' )\n\t\t\t\t.attr( 'dir', dir )\n\t\t\t\t.empty().append( $pageNameInput );\n\n\t\t\tif ( this._badgeselector ) {\n\t\t\t\tthis._badgeselector.startEditing();\n\t\t\t}\n\n\t\t\tif ( this.options.value ) {\n\t\t\t\tthis.updatePageNameInputAutoExpand();\n\t\t\t\t// Site of an existing site link is not supposed to be changeable.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $siteIdInput = $( '<input>' )\n\t\t\t\t// FIXME: \"noime\" class prevents Universal Language Selector's IME from being applied\n\t\t\t\t// to the input element with the IME overlaying the site suggestions (see T88417).\n\t\t\t\t.addClass( 'noime' )\n\t\t\t\t.attr( 'placeholder', mw.msg( 'wikibase-sitelink-site-edit-placeholder' ) )\n\t\t\t\t.siteselector( {\n\t\t\t\t\tsource: self.options.getAllowedSites\n\t\t\t\t} );\n\n\t\t\t// Disable and hide initially and wait for valid site input:\n\t\t\tpagesuggester.disable();\n\t\t\t$pageNameInput.hide();\n\n\t\t\tif ( this._badgeselector\n\t\t\t\t&& ( !this.options.value || !this.options.value.getBadges().length )\n\t\t\t) {\n\t\t\t\tthis._badgeselector.element.hide();\n\t\t\t}\n\n\t\t\t$siteIdInput\n\t\t\t.on( 'siteselectorselected.' + this.widgetName, function ( event, siteId ) {\n\t\t\t\tvar site = wb.sites.getSite( siteId );\n\n\t\t\t\tif ( site ) {\n\t\t\t\t\t$pageNameInput\n\t\t\t\t\t.attr( 'lang', site.getLanguageCode() )\n\t\t\t\t\t.attr( 'dir', site.getLanguageDirection() )\n\t\t\t\t\t.show();\n\t\t\t\t} else {\n\t\t\t\t\t$pageNameInput.hide();\n\t\t\t\t}\n\n\t\t\t\tif ( self._badgeselector ) {\n\t\t\t\t\tself._badgeselector.element[ site ? 'show' : 'hide' ]();\n\t\t\t\t}\n\n\t\t\t\tpagesuggester[ site ? 'enable' : 'disable' ]();\n\t\t\t\tpagesuggester.option( 'siteId', siteId );\n\n\t\t\t\tself._trigger( 'change' );\n\t\t\t\tself._siteLinkRemover[ self.value() === null ? 'disable' : 'enable' ]();\n\t\t\t} )\n\t\t\t.on(\n\t\t\t\t'siteselectorselected.' + this.widgetName + ' siteselectorchange.' + this.widgetName,\n\t\t\t\tfunction ( event, siteId ) {\n\t\t\t\t\tvar inputautoexpand = $siteIdInput.data( 'inputautoexpand' );\n\n\t\t\t\t\tif ( inputautoexpand ) {\n\t\t\t\t\t\tinputautoexpand.expand();\n\t\t\t\t\t}\n\n\t\t\t\t\tself.updatePageNameInputAutoExpand();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.$siteId.append( $siteIdInput );\n\n\t\t\t$siteIdInput.inputautoexpand( {\n\t\t\t\tmaxWidth: this.element.width() - (\n\t\t\t\t\tthis.$siteIdContainer.outerWidth( true ) - $siteIdInput.width()\n\t\t\t\t)\n\t\t\t} );\n\n\t\t\tthis.updatePageNameInputAutoExpand();\n\n\t\t\t$pageNameInput\n\t\t\t.on( 'keydown.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.BACKSPACE && $pageNameInput.val() === '' ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t$siteIdInput.val( '' ).trigger( 'focus' );\n\t\t\t\t\t$siteIdInput.data( 'siteselector' ).setSelectedSite( null );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Updates the maximum width the page name input element may grow to.\n\t\t */\n\t\tupdatePageNameInputAutoExpand: function () {\n\t\t\tvar $pageNameInput = this.$link.find( 'input' );\n\n\t\t\tif ( !$pageNameInput.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$pageNameInput.inputautoexpand( {\n\t\t\t\tmaxWidth: Math.floor( this.element.width()\n\t\t\t\t\t- this.$siteIdContainer.outerWidth( true )\n\t\t\t\t\t- ( this.$link.outerWidth( true ) - $pageNameInput.width() ) )\n\t\t\t} );\n\n\t\t\t$pageNameInput.data( 'inputautoexpand' ).expand( true );\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmpty: function () {\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\treturn !this.options.value;\n\t\t\t}\n\n\t\t\treturn !this.options.value\n\t\t\t\t&& this.$link.find( 'input' ).val().trim() === ''\n\t\t\t\t&& this.$siteId.find( 'input' ).val().trim() === '';\n\t\t},\n\n\t\t/**\n\t\t * Puts the widget into edit mode.\n\t\t */\n\t\t_startEditing: function () {\n\t\t\tthis._draw();\n\n\t\t\tif ( this.option( 'disabled' ) ) {\n\t\t\t\tthis._setState( 'disable' );\n\t\t\t}\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * Stops the widget's edit mode.\n\t\t *\n\t\t * @param {boolean} dropValue\n\t\t * @return {Object} jQuery.Promise\n\t\t *         Resolved parameters:\n\t\t *         - {boolean} dropValue\n\t\t *         Rejected parameters:\n\t\t *         - {Error}\n\t\t */\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tif ( this._badgeselector ) {\n\t\t\t\tthis._badgeselector.stopEditing( dropValue );\n\t\t\t}\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * @return {wikibase.Site|null}\n\t\t */\n\t\t_getSite: function () {\n\t\t\tvar siteLink = this.value();\n\t\t\treturn siteLink ? wb.sites.getSite( siteLink.getSiteId() ) : null;\n\t\t},\n\n\t\t/**\n\t\t * Sets/Gets the widget's value.\n\t\t *\n\t\t * @param {datamodel.SiteLink|null} [siteLink]\n\t\t * @return {datamodel.SiteLink|undefined}\n\t\t */\n\t\tvalue: function ( siteLink ) {\n\t\t\tif ( siteLink === undefined ) {\n\t\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\t\treturn this.options.value;\n\t\t\t\t}\n\n\t\t\t\tvar siteselector = this.element.find( ':wikibase-siteselector' ).data( 'siteselector' ),\n\t\t\t\t\t$pagesuggester = this.element.find( ':wikibase-pagesuggester' ),\n\t\t\t\t\tsiteId;\n\n\t\t\t\tif ( siteselector ) {\n\t\t\t\t\tvar site = siteselector.getSelectedSite();\n\t\t\t\t\tsiteId = site ? site.getId() : null;\n\t\t\t\t} else {\n\t\t\t\t\tsiteId = this.options.value ? this.options.value.getSiteId() : null;\n\t\t\t\t}\n\n\t\t\t\t// TODO: Do not allow null values for siteId and pageName in datamodel.SiteLink\n\t\t\t\tif ( !siteId || $pagesuggester.val() === '' ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn new datamodel.SiteLink(\n\t\t\t\t\tsiteId,\n\t\t\t\t\t$pagesuggester.val(),\n\t\t\t\t\tthis._badgeselector ? this._badgeselector.value() : []\n\t\t\t\t);\n\t\t\t} else if ( !( siteLink instanceof datamodel.SiteLink ) ) {\n\t\t\t\tthrow new Error( 'Value needs to be a SiteLink instance' );\n\t\t\t}\n\n\t\t\treturn this.option( 'value', siteLink );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget._setOption\n\t\t *\n\t\t * @throws {Error} when trying to set a site link with a new site id.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value'\n\t\t\t\t&& this.options.value\n\t\t\t\t&& value.getSiteId() !== this.options.value.getSiteId()\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Cannot set site link with new site id after initialization' );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tthis._draw();\n\t\t\t} else if ( key === 'disabled' ) {\n\t\t\t\tthis._setState( value ? 'disable' : 'enable' );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @param {string} state\n\t\t */\n\t\t_setState: function ( state ) {\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tvar $siteInput = this.$siteId.find( 'input' ),\n\t\t\t\t\thasSiteId = !!( this.options.value && this.options.value.getSiteId() );\n\n\t\t\t\tif ( $siteInput.length ) {\n\t\t\t\t\tvar siteselector = $siteInput.data( 'siteselector' );\n\t\t\t\t\thasSiteId = !!siteselector.getSelectedSite();\n\t\t\t\t\tsiteselector[ state ]();\n\t\t\t\t}\n\n\t\t\t\tif ( this._siteLinkRemover ) {\n\t\t\t\t\tthis._siteLinkRemover[ state ]();\n\t\t\t\t}\n\n\t\t\t\t// Do not enable page input if no site is set:\n\t\t\t\tif ( state === 'disable' || hasSiteId ) {\n\t\t\t\t\tthis.$link.find( 'input' ).data( 'pagesuggester' )[ state ]();\n\t\t\t\t\tif ( this._badgeselector ) {\n\t\t\t\t\t\tthis._badgeselector[ state ]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.TemplatedWidget.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar $siteselector = this.element.find( ':wikibase-siteselector' ),\n\t\t\t\t$pagesuggester = this.element.find( ':wikibase-pagesuggester' );\n\n\t\t\tif ( $pagesuggester.length\n\t\t\t\t&& !$pagesuggester.data( 'pagesuggester' ).option( 'disabled' )\n\t\t\t) {\n\t\t\t\t$pagesuggester.trigger( 'focus' );\n\t\t\t} else if ( $siteselector.length ) {\n\t\t\t\t$siteselector.trigger( 'focus' );\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.siteselector.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":14,"column":null,"nodeType":"Block","endLine":14,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"no-shadow","severity":1,"message":"'event' is already declared in the upper scope on line 48 column 50.","line":51,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":51,"endColumn":40},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":132,"column":3,"nodeType":"Block","endLine":134,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":197,"column":3,"nodeType":"Block","endLine":199,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":208,"column":3,"nodeType":"Block","endLine":210,"endColumn":6}],"errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki at snater.com >\n */\n( function () {\n\t'use strict';\n\n\t/**\n\t * Site selector\n\t * Enhances an input box with auto-complete and auto-suggestion functionality for site ids.\n\t *\n\t * @example $( 'input' ).siteselector( { source: <{wikibase.Site[]}> } );\n\t *\n\t * @option {wikibase.Site[]|Function} source\n\t *         An array of Site objects that shall be used to provide suggestions. Alternatively, a\n\t *         function dynamically retrieving an array of Site objects may be provided.\n\t *\n\t * @option {number} [delay=150]\n\t *         Delay in milliseconds of the request querying for suggestions.\n\t *\n\t * @event selected\n\t *        Triggered whenever a site is selected or de-selected.\n\t *        (1) {jQuery.Event}\n\t *        (2) {string|null}\n\t */\n\t$.widget( 'wikibase.siteselector', $.ui.suggester, {\n\t\t/**\n\t\t * @see jQuery.ui.suggester.options\n\t\t */\n\t\toptions: {\n\t\t\tdelay: 150\n\t\t},\n\n\t\t/**\n\t\t * @type {wikibase.Site}\n\t\t */\n\t\t_selectedSite: null,\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._create\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\t$.ui.suggester.prototype._create.apply( this, arguments );\n\n\t\t\tthis.element\n\t\t\t.on( 'keydown.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.TAB ) {\n\t\t\t\t\t$( self.options.menu )\n\t\t\t\t\t.one( 'selected', function ( event, item ) {\n\t\t\t\t\t\tself.element.val( item.getValue() );\n\t\t\t\t\t} );\n\t\t\t\t} else if ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar degrade = true,\n\t\t\t\t\t\tfirstItem = self.options.menu.option( 'items' )[ 0 ];\n\n\t\t\t\t\tif ( firstItem ) {\n\t\t\t\t\t\tvar site = firstItem.getSite(),\n\t\t\t\t\t\t\tlabel = self._createItemLabel( site, '' ),\n\t\t\t\t\t\t\tvalue = self._createItemValue( site );\n\n\t\t\t\t\t\tif ( self._term === label || self._term === value ) {\n\t\t\t\t\t\t\tdegrade = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( degrade ) {\n\t\t\t\t\t\tself.options.menu.deactivate();\n\t\t\t\t\t\tself.element.val( self._term );\n\t\t\t\t\t\tself._selectedSite = null;\n\t\t\t\t\t\tself._trigger( 'selected', null, [ null ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'eachchange.' + this.widgetName, function ( event, previousValue ) {\n\t\t\t\tself._selectedSite = null;\n\t\t\t\tself._term = self.element.val();\n\n\t\t\t\tclearTimeout( self._searching );\n\t\t\t\tself._searching = setTimeout( function () {\n\t\t\t\t\tself.search()\n\t\t\t\t\t.done( function ( suggestions ) {\n\t\t\t\t\t\t// TODO: Store visibility in model\n\t\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\t\tif ( self.options.menu.element.is( ':visible' ) ) {\n\t\t\t\t\t\t\tself._selectFirstSite();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._trigger( 'selected', null, [ null ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}, self.options.delay );\n\t\t\t} )\n\t\t\t.on( 'siteselectoropen.' + this.widgetName, function () {\n\t\t\t\tself._selectFirstSite();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\t$( this.options.menu ).off( 'siteselector' );\n\t\t\t$.ui.suggester.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * Implicitly selects the first site from the suggested sites.\n\t\t */\n\t\t_selectFirstSite: function () {\n\t\t\tvar menu = this.options.menu,\n\t\t\t\tmenuItems = menu.option( 'items' ),\n\t\t\t\tsite = null;\n\n\t\t\t// TODO: Store visibility in model\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( menuItems.length > 0 && menu.element.is( ':visible' ) ) {\n\t\t\t\tthis.options.menu.activate( menuItems[ 0 ] );\n\t\t\t\tsite = menuItems[ 0 ].getSite();\n\t\t\t}\n\n\t\t\tif ( this._selectedSite !== site ) {\n\t\t\t\tthis._selectedSite = site;\n\t\t\t\tthis._trigger(\n\t\t\t\t\t'selected',\n\t\t\t\t\tnull,\n\t\t\t\t\tsite ? [ site.getId() ] : [ null ]\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._initMenu\n\t\t */\n\t\t_initMenu: function ( ooMenu ) {\n\t\t\tvar self = this;\n\n\t\t\t$.ui.suggester.prototype._initMenu.apply( this, arguments );\n\n\t\t\tthis.options.menu.element.addClass( 'wikibase-siteselector-list' );\n\n\t\t\t$( this.options.menu )\n\t\t\t.on( 'selected.siteselector', function ( event, item ) {\n\t\t\t\tif ( item instanceof $.wikibase.siteselector.Item ) {\n\t\t\t\t\tself._selectedSite = item.getSite();\n\t\t\t\t\tself.element.val( self._createItemValue( self._selectedSite ) );\n\t\t\t\t\tself._trigger( 'selected', null, [ self._selectedSite.getId() ] );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'blur.siteselector', function () {\n\t\t\t\tif ( self._selectedSite ) {\n\t\t\t\t\tself.element.val( self._createItemValue( self._selectedSite ) );\n\t\t\t\t} else if ( self.element.val() !== '' ) {\n\t\t\t\t\tself._selectFirstSite();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.options.menu.element\n\t\t\t.on( 'mouseleave', function () {\n\t\t\t\t// TODO: Store visibility in model\n\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\tif ( self.options.menu.element.is( ':visible' ) ) {\n\t\t\t\t\tself._selectedSite = null;\n\t\t\t\t\tself._selectFirstSite();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn ooMenu;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._move\n\t\t */\n\t\t_move: function ( direction, activeItem, allItems ) {\n\t\t\t$.ui.suggester.prototype._move.apply( this, arguments );\n\t\t\tif ( this._selectedSite === this.options.menu.getActiveItem().getSite() ) {\n\t\t\t\tthis.element.val( this._term );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._moveOffEdge\n\t\t */\n\t\t_moveOffEdge: function ( direction ) {\n\t\t\tif ( direction === 'previous' ) {\n\t\t\t\tvar menu = this.options.menu,\n\t\t\t\t\titems = menu.option( 'items' );\n\t\t\t\tmenu.activate( items[ items.length - 1 ] );\n\t\t\t\tthis.element.val( items[ items.length - 1 ].getValue() );\n\t\t\t} else {\n\t\t\t\t$.ui.suggester.prototype._moveOffEdge.apply( this, arguments );\n\t\t\t\tthis._selectedSite = null;\n\t\t\t\tthis._selectFirstSite();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._getSuggestions\n\t\t */\n\t\t_getSuggestions: function ( term ) {\n\t\t\tvar source = typeof this.options.source === 'function'\n\t\t\t\t? this.options.source()\n\t\t\t\t: this.options.source;\n\n\t\t\treturn this._getSuggestionsFromArray( term, source );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._getSuggestionsFromArray\n\t\t */\n\t\t_getSuggestionsFromArray: function ( term, source ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred();\n\n\t\t\tif ( term === '' ) {\n\t\t\t\treturn deferred.resolve( [], term ).promise();\n\t\t\t}\n\n\t\t\tvar suggestedSites = source.filter( function ( site ) {\n\t\t\t\treturn self._considerSuggestion( site );\n\t\t\t} );\n\n\t\t\tif ( suggestedSites.length === 0 ) {\n\t\t\t\tvar subDomain = this._grepSubDomainFromTerm();\n\n\t\t\t\tif ( subDomain ) {\n\t\t\t\t\tsuggestedSites = source.filter( function ( site ) {\n\t\t\t\t\t\tvar url = site.getUrlTo( '' ),\n\t\t\t\t\t\t\tindex = url.indexOf( '//' ) + 2;\n\n\t\t\t\t\t\treturn url.indexOf( subDomain, index ) === index;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn deferred.resolve( suggestedSites, term ).promise();\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @return {boolean}\n\t\t */\n\t\t_considerSuggestion: function ( site ) {\n\t\t\tvar check = [\n\t\t\t\tsite.getId(),\n\t\t\t\tsite.getShortName(),\n\t\t\t\tsite.getName(),\n\t\t\t\tsite.getShortName() + ' (' + site.getId() + ')'\n\t\t\t];\n\n\t\t\tfor ( var i = 0; i < check.length; i++ ) {\n\t\t\t\tif ( check[ i ].toLowerCase().indexOf( this._term.toLowerCase() ) === 0 ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * @return {string|null}\n\t\t * @private\n\t\t */\n\t\t_grepSubDomainFromTerm: function () {\n\t\t\t// Extract either a subdomain (the word after \"//\") or simply the first word.\n\t\t\tvar matches = /\\/\\/(\\w[\\w-]+)/.exec( this._term )\n\t\t\t\t|| /(\\w[\\w-]+)/.exec( this._term );\n\n\t\t\treturn matches ? matches[ 1 ].toLowerCase().replace( /[\\W_]+/g, '-' ) : null;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.ui.suggester._createMenuItemFromSuggestion\n\t\t * @protected\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @param {string} requestTerm\n\t\t * @return {jQuery.wikibase.siteselector.Item}\n\t\t */\n\t\t_createMenuItemFromSuggestion: function ( site, requestTerm ) {\n\t\t\treturn new $.wikibase.siteselector.Item(\n\t\t\t\tthis._createItemLabel( site, requestTerm ),\n\t\t\t\tthis._createItemValue( site ),\n\t\t\t\tsite\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Creates the label of a suggestion item.\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @param {string} requestTerm\n\t\t * @return {string}\n\t\t */\n\t\t_createItemLabel: function ( site, requestTerm ) {\n\t\t\treturn util.highlightSubstring( requestTerm, site.getShortName() )\n\t\t\t+ ' (' + util.highlightSubstring( requestTerm, site.getId() ) + ')';\n\t\t},\n\n\t\t/**\n\t\t * Creates the value of a suggestion item.\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t * @return {string}\n\t\t */\n\t\t_createItemValue: function ( site ) {\n\t\t\treturn site.getId();\n\t\t},\n\n\t\t/**\n\t\t * Returns the currently selected site.\n\t\t *\n\t\t * @return {wikibase.Site|null}\n\t\t */\n\t\tgetSelectedSite: function () {\n\t\t\treturn this._selectedSite;\n\t\t},\n\n\t\t/**\n\t\t * Sets the selected site.\n\t\t *\n\t\t * @param {wikibase.Site} site\n\t\t */\n\t\tsetSelectedSite: function ( site ) {\n\t\t\tthis._selectedSite = site;\n\t\t}\n\n\t} );\n\n\t/**\n\t * Default siteselector suggestion menu item.\n\t *\n\t * @constructor\n\t * @extends jQuery.ui.ooMenu.Item\n\t *\n\t * @param {string|jQuery} label\n\t * @param {string} value\n\t * @param {wikibase.Site} site\n\t *\n\t * @throws {Error} if a required parameter is not specified.\n\t */\n\tvar Item = function ( label, value, site ) {\n\t\tif ( !label || !value || !site ) {\n\t\t\tthrow new Error( 'Required parameter(s) not specified' );\n\t\t}\n\n\t\tthis._label = label;\n\t\tthis._value = value;\n\t\tthis._site = site;\n\t};\n\n\tItem = util.inherit(\n\t\t$.ui.ooMenu.Item,\n\t\tItem,\n\t\t{\n\t\t\t/**\n\t\t\t * @type {wikibase.Site}\n\t\t\t */\n\t\t\t_site: null,\n\n\t\t\t/**\n\t\t\t * @return {wikibase.Site}\n\t\t\t */\n\t\t\tgetSite: function () {\n\t\t\t\treturn this._site;\n\t\t\t}\n\t\t}\n\t);\n\n\t$.extend( $.wikibase.siteselector, {\n\t\tItem: Item\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":21,"column":null,"nodeType":"Block","endLine":21,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":184,"column":3,"nodeType":"Block","endLine":189,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":213,"column":null,"nodeType":"Block","endLine":213,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":214,"column":null,"nodeType":"Block","endLine":214,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":234,"column":3,"nodeType":"Block","endLine":242,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":234,"column":3,"nodeType":"Block","endLine":242,"endColumn":6}],"errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * View for displaying and editing a `datamodel.SnakList` object.\n\t *\n\t * @see datamodel.SnakList\n\t * @class jQuery.wikibase.snaklistview\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @uses jQuery.wikibase.listview\n\t * @license GPL-2.0-or-later\n\t * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {datamodel.SnakList} [value=new datamodel.SnakList()]\n\t *        The `SnakList` to be displayed by this view.\n\t * @param {Function} options.getListItemAdapter\n\t * @param {boolean} [singleProperty=true]\n\t *        If `true`, it is assumed that the widget is filled with `Snak`s featuring a single common\n\t *        property.\n\t * @param {Function} removeCallback A function that removes this snaklistview\n\t */\n\t/**\n\t * @event afterstartediting\n\t * Triggered after having started the widget's edit mode.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event afterstopediting\n\t * Triggered after having stopped the widget's edit mode.\n\t * @param {jQuery.Event} event\n\t * @param {boolean} If `true`, the widget's value was reset to the one from before edit mode was\n\t *        started.\n\t */\n\t/**\n\t * @event change\n\t * Triggered whenever the widget's content is changed.\n\t * @param {jQuery.Event} event\n\t */\n\t$.widget( 'wikibase.snaklistview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-snaklistview',\n\t\t\ttemplateParams: [\n\t\t\t\t'' // listview widget\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$listview: '.wikibase-snaklistview-listview'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tsingleProperty: false,\n\t\t\tgetListItemAdapter: null,\n\t\t\tremoveCallback: null\n\t\t},\n\n\t\t/**\n\t\t * Short-cut to the `listview` widget used by the `snaklistview` to manage the `snakview`\n\t\t * widgets.\n\t\t *\n\t\t * @property {jQuery.wikibase.listview}\n\t\t * @private\n\t\t */\n\t\t_listview: null,\n\n\t\t/**\n\t\t * Short-cut to the `ListItemAdapter` in use with the `listview` widget used to manage the\n\t\t * `snakview` widgets.\n\t\t *\n\t\t * @property {jQuery.wikibase.listview.ListItemAdapter}\n\t\t * @private\n\t\t */\n\t\t_lia: null,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tthis.options.value = this.options.value || new datamodel.SnakList();\n\n\t\t\tif ( !this.options.getListItemAdapter || !( this.options.value instanceof datamodel.SnakList ) ) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( !this.options.value.length ) {\n\t\t\t\tthis.$listview.addClass( 'wikibase-snaklistview-listview-new' );\n\t\t\t}\n\n\t\t\tthis._createListView();\n\t\t},\n\n\t\t/**\n\t\t * (Re-)creates the `listview` widget managing the `snakview` widgets.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_createListView: function () {\n\t\t\tvar self = this,\n\t\t\t\t$listviewParent = null;\n\n\t\t\t// Re-create listview widget if it exists already\n\t\t\tif ( this._listview ) {\n\t\t\t\t// Detach listview since re-creation is regarded a content reset and not an\n\t\t\t\t// initialisation. Detaching prevents bubbling of initialisation events.\n\t\t\t\t$listviewParent = this.$listview.parent();\n\t\t\t\tthis.$listview.detach();\n\t\t\t\tthis._listview.destroy();\n\t\t\t\tthis.$listview.empty();\n\t\t\t}\n\n\t\t\tthis.$listview.listview( {\n\t\t\t\tlistItemAdapter: this.options.getListItemAdapter( function ( snakview ) {\n\t\t\t\t\tself._listview.removeItem( snakview.element );\n\t\t\t\t\tif ( self.value().length === 0 ) {\n\t\t\t\t\t\tself.options.removeCallback();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t\t}\n\t\t\t\t} ),\n\t\t\t\tvalue: this.options.value.toArray()\n\t\t\t} );\n\n\t\t\tif ( $listviewParent ) {\n\t\t\t\tthis.$listview.appendTo( $listviewParent );\n\t\t\t}\n\n\t\t\tthis._listview = this.$listview.data( 'listview' );\n\t\t\tthis._lia = this._listview.listItemAdapter();\n\t\t\tthis._updatePropertyLabels();\n\n\t\t\tthis.$listview\n\t\t\t.off( '.' + this.widgetName )\n\t\t\t.on(\n\t\t\t\tthis._lia.prefixedEvent( 'change.' ) + this.widgetName\n\t\t\t\t// FIXME: Remove all itemremoved events, see https://gerrit.wikimedia.org/r/298766.\n\t\t\t\t+ ' listviewitemremoved.' + this.widgetName,\n\t\t\t\tfunction ( event ) {\n\t\t\t\t\t// Forward the \"change\" event to external components (e.g. the edit toolbar).\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Updates the visibility of the `snakview`s' `Property` labels. (Effective only if the\n\t\t * `singleProperty` option is set.)\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_updatePropertyLabels: function () {\n\t\t\tif ( this.options.singleProperty ) {\n\t\t\t\tthis._listview.value().forEach( function ( snakview, index ) {\n\t\t\t\t\tvar operation = index ? 'hidePropertyLabel' : 'showPropertyLabel';\n\t\t\t\t\tsnakview[ operation ]();\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Starts the widget's edit mode.\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t *         No resolved parameters.\n\t\t *         Rejected parameters:\n\t\t *         - {Error}\n\t\t */\n\t\t_startEditing: function () {\n\t\t\treturn this._listview.startEditing();\n\t\t},\n\n\t\t/**\n\t\t * Stops the widget's edit mode.\n\t\t *\n\t\t * @param {boolean} [dropValue=false] If `true`, the widget's value will be reset to the one from\n\t\t *        before edit mode was started\n\t\t */\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tif ( dropValue ) {\n\t\t\t\t// If the whole item was pending, remove the whole list item. This has to be\n\t\t\t\t// performed in the widget using the snaklistview.\n\n\t\t\t\t// Re-create the list view to restore snakviews that have been removed during\n\t\t\t\t// editing:\n\t\t\t\tthis._createListView();\n\t\t\t} else {\n\t\t\t\tthis._listview.value().forEach( function ( snakview ) {\n\t\t\t\t\tsnakview.stopEditing( dropValue );\n\n\t\t\t\t\t// After saving, the property should not be editable anymore.\n\t\t\t\t\tsnakview.options.locked.property = true;\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * Sets a new `SnakList` or returns the current `SnakList` (including pending `Snaks` not yet\n\t\t * committed).\n\t\t *\n\t\t * @param {datamodel.SnakList} [snakList]\n\t\t * @return {datamodel.SnakList|undefined|null}\n\t\t */\n\t\tvalue: function ( snakList ) {\n\t\t\tif ( snakList !== undefined ) {\n\t\t\t\treturn this.option( 'value', snakList );\n\t\t\t}\n\n\t\t\tvar snaks = [];\n\n\t\t\tif ( !this._listview.value().every( function ( snakview ) {\n\t\t\t\tvar snak = snakview.snak();\n\t\t\t\tsnaks.push( snak );\n\t\t\t\treturn snak;\n\t\t\t} ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn new datamodel.SnakList( snaks );\n\t\t},\n\n\t\t/**\n\t\t * Adds a new empty `snakview` to the `listview` with edit mode started instantly.\n\t\t *\n\t\t * @see jQuery.wikibase.listview.enterNewItem\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.done.$snakview\n\t\t */\n\t\tenterNewItem: function () {\n\t\t\tvar self = this;\n\t\t\treturn this._listview.enterNewItem().done( function () {\n\t\t\t\tself.startEditing();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis._listview.destroy();\n\t\t\tthis._listview = null;\n\t\t\tthis._lia = null;\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t *\n\t\t * @throws {Error} when trying to set the value to something other than a\n\t\t *         `datamodel.SnakList` instance.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tif ( !( value instanceof datamodel.SnakList ) ) {\n\t\t\t\t\tthrow new Error( 'value has to be an instance of datamodel.SnakList' );\n\t\t\t\t}\n\t\t\t\tthis._listview.value( value.toArray() );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis._listview.option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar $items = this._listview.items();\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tthis._lia.liInstance( $items.first() ).focus();\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementgrouplistview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'jquery' is undefined.","line":22,"column":null,"nodeType":"Block","endLine":22,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":23,"column":null,"nodeType":"Block","endLine":23,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":94,"column":3,"nodeType":"Block","endLine":96,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":115,"column":null,"nodeType":"Block","endLine":115,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":116,"column":null,"nodeType":"Block","endLine":116,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":124,"column":3,"nodeType":"Block","endLine":135,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":124,"column":3,"nodeType":"Block","endLine":135,"endColumn":6},{"ruleId":"no-shadow","severity":1,"message":"'$statementgroupview' is already declared in the upper scope on line 141 column 23.","line":147,"column":12,"nodeType":"Identifier","messageId":"noShadow","endLine":147,"endColumn":31},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":169,"column":null,"nodeType":"Block","endLine":169,"endColumn":null}],"errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.TemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * View for displaying `datamodel.Statement` objects grouped by their main `Snak`'s\n\t * `Property` id by managing a list of `jQuery.wikibase.statementgroupview` widgets.\n\t *\n\t * @see datamodel.StatementGroup\n\t * @see datamodel.StatementGroupSet\n\t * @uses jQuery.wikibase.listview\n\t * @uses jQuery.wikibase.listview.ListItemAdapter\n\t * @extends jQuery.ui.TemplatedWidget\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {jquery.wikibase.listview.ListItemAdapter} options.listItemAdapter\n\t * @param {datamodel.StatementGroupSet} [options.value]\n\t *        The `Statements` to be displayed by this view.\n\t */\n\t$.widget( 'wikibase.statementgrouplistview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-statementgrouplistview',\n\t\t\ttemplateParams: [\n\t\t\t\t'' // listview\n\t\t\t],\n\t\t\ttemplateShortCuts: {},\n\t\t\tlistItemAdapter: null,\n\t\t\tvalue: null\n\t\t},\n\n\t\t/**\n\t\t * @property {jQuery.wikibase.listview}\n\t\t * @readonly\n\t\t */\n\t\tlistview: null,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.listItemAdapter\n\t\t\t\t|| ( this.options.value && !( this.options.value instanceof datamodel.StatementGroupSet ) )\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tvar listview = this.listview = this._createListview(),\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\tthis.element\n\t\t\t.on( lia.prefixedEvent( 'afterremove.' + this.widgetName ), function ( event ) {\n\t\t\t\tvar $statementgroupview = $( event.target ),\n\t\t\t\t\tstatementgroupview = lia.liInstance( $statementgroupview );\n\n\t\t\t\tif ( !statementgroupview.value() ) {\n\t\t\t\t\tlistview.removeItem( $statementgroupview );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis._statementGroupAdder = this.options.getAdder( this.enterNewItem.bind( this ),\n\t\t\t\tthis.element,\n\t\t\t\tmw.msg( 'wikibase-statementgrouplistview-add' ),\n\t\t\t\tmw.msg( 'wikibase-statementgrouplistview-add-tooltip' ) );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis.listview.destroy();\n\t\t\tif ( this._statementGroupAdder ) {\n\t\t\t\tthis._statementGroupAdder.destroy();\n\t\t\t\tthis._statementGroupAdder = null;\n\t\t\t}\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_createListview: function () {\n\t\t\tvar $listview = this.element.children( '.wikibase-listview' );\n\n\t\t\tif ( !$listview.length ) {\n\t\t\t\t$listview = $( '<div>' ).appendTo( this.element );\n\t\t\t}\n\n\t\t\t$listview.listview( {\n\t\t\t\tlistItemAdapter: this.options.listItemAdapter,\n\t\t\t\tvalue: this.options.value ? this._statementGroupSetToStatementGroups( this.options.value ) : null\n\t\t\t} );\n\n\t\t\treturn $listview.data( 'listview' );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {datamodel.StatementGroupSet} statementGroupSet\n\t\t * @return {datamodel.StatementGroup[]}\n\t\t */\n\t\t_statementGroupSetToStatementGroups: function ( statementGroupSet ) {\n\t\t\treturn statementGroupSet.getKeys().map( function ( propertyId ) {\n\t\t\t\treturn statementGroupSet.getItemByKey( propertyId );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Triggers adding a new `statementgroupview` to the `statementgrouplistview`. This involves\n\t\t * triggering the corresponding process for the new pending `statementgroupview` by instantly\n\t\t * triggering the `enterNewItem()` function of the `statementgroupview`.\n\t\t *\n\t\t * @see jQuery.wikibase.statementgroupview.enterNewItem\n\t\t * @see jQuery.wikibase.listview.enterNewItem\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.done.$statementgroupview\n\t\t */\n\t\tenterNewItem: function () {\n\t\t\tvar self = this,\n\t\t\t\tlia = this.listview.listItemAdapter();\n\n\t\t\treturn this.listview.enterNewItem()\n\t\t\t\t.done( function ( $statementgroupview ) {\n\t\t\t\t\t$statementgroupview\n\t\t\t\t\t.addClass( 'wb-new' )\n\t\t\t\t\t.one(\n\t\t\t\t\t\tlia.prefixedEvent( 'afterstopediting.' + self.widgetName ),\n\t\t\t\t\t\tfunction ( event, dropValue ) {\n\t\t\t\t\t\t\tvar $statementgroupview = $( event.target ),\n\t\t\t\t\t\t\t\tstatementGroup = lia.liInstance( $statementgroupview ).value();\n\n\t\t\t\t\t\t\tself.listview.removeItem( $statementgroupview );\n\n\t\t\t\t\t\t\tif ( dropValue ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tself._addStatementGroup( statementGroup );\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tvar statementgroupview = lia.liInstance( $statementgroupview );\n\t\t\t\t\tstatementgroupview.enterNewItem();\n\t\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.listview.addItem\n\t\t * @private\n\t\t *\n\t\t * @param {datamodel.StatementGroup} newStatementGroup\n\t\t */\n\t\t_addStatementGroup: function ( newStatementGroup ) {\n\t\t\tvar lia = this.listview.listItemAdapter(),\n\t\t\t\tpropertyId = newStatementGroup.getKey(),\n\t\t\t\t$statementgroupviews = this.listview.items(),\n\t\t\t\tfound = false;\n\n\t\t\t$statementgroupviews.each( function () {\n\t\t\t\tvar statementgroupview = lia.liInstance( $( this ) ),\n\t\t\t\t\tstatementGroup = statementgroupview.value();\n\n\t\t\t\tif ( statementGroup.getKey() === propertyId ) {\n\t\t\t\t\tnewStatementGroup.getItemContainer().each( function () {\n\t\t\t\t\t\tstatementGroup.addItem( this );\n\t\t\t\t\t} );\n\t\t\t\t\tstatementgroupview.value( statementGroup );\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\n\t\t\t\treturn !found;\n\t\t\t} );\n\n\t\t\tif ( !found ) {\n\t\t\t\tthis.listview.addItem( newStatementGroup );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' && value !== undefined ) {\n\t\t\t\tif ( !( value instanceof datamodel.StatementGroupSet ) ) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'value needs to be an instance of datamodel.StatementGroupSet'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.listview.value(\n\t\t\t\t\tthis._statementGroupSetToStatementGroups( value )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis.listview.option( key, value );\n\t\t\t\tif ( this._statementGroupAdder ) {\n\t\t\t\t\tthis._statementGroupAdder[ value ? 'disable' : 'enable' ]();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar lia = this.listview.listItemAdapter(),\n\t\t\t\t$items = this.listview.items();\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tlia.liInstance( $items.first() ).focus();\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementgroupview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":20,"column":null,"nodeType":"Block","endLine":20,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":173,"column":null,"nodeType":"Block","endLine":173,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":174,"column":null,"nodeType":"Block","endLine":174,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":225,"column":3,"nodeType":"Block","endLine":233,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":225,"column":3,"nodeType":"Block","endLine":233,"endColumn":6}],"errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.TemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * View for displaying `datamodel.Statement` objects grouped by their main `Snak`'s\n\t * `Property` id by managing a list of `jQuery.wikibase.statementview` widgets encapsulated by a\n\t * `jquery.wikibase.statementlistview` widget.\n\t *\n\t * @see datamodel.StatementGroup\n\t * @extends jQuery.ui.TemplatedWidget\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {datamodel.StatementGroup} [options.value=null]\n\t *        The `Statements` to be displayed by this view. If `null`, the view will only display an\n\t *        \"add\" button to add new `Statements`.\n\t * @param {wikibase.entityIdFormatter.EntityIdHtmlFormatter} options.entityIdHtmlFormatter\n\t *        Required for dynamically rendering links to `Entity`s.\n\t * @param {Function} options.buildStatementListView\n\t */\n\t/**\n\t * @event afterremove\n\t * Triggered after a `statementview` was removed from the `statementlistview` encapsulated by this\n\t * `statementgroupview`.\n\t * @param {jQuery.Event} event\n\t */\n\t$.widget( 'wikibase.statementgroupview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-statementgroupview',\n\t\t\ttemplateParams: [\n\t\t\t\t'', // label\n\t\t\t\t'', // statementlistview widget\n\t\t\t\t'', // html id attribute\n\t\t\t\t'' // property id\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$property: '.wikibase-statementgroupview-property',\n\t\t\t\t$propertyLabel: '.wikibase-statementgroupview-property-label'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tbuildStatementListView: null,\n\t\t\tentityIdHtmlFormatter: null,\n\t\t\thtmlIdPrefix: ''\n\t\t},\n\n\t\t/**\n\t\t * @property {jQuery.wikibase.statementlistview}\n\t\t */\n\t\tstatementlistview: null,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.entityIdHtmlFormatter || !this.options.buildStatementListView ) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( this.options.value ) {\n\t\t\t\tthis._updateId();\n\t\t\t\tthis._updatePropertyId( this.options.value.getKey() );\n\t\t\t\tthis._createPropertyLabel();\n\t\t\t}\n\t\t\tthis._createStatementlistview();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this.statementlistview ) {\n\t\t\t\tthis.statementlistview.element.off( this.widgetName );\n\t\t\t\tthis.statementlistview.destroy();\n\t\t\t}\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_updateId: function () {\n\t\t\tvar propertyId = this.options.value.getKey(),\n\t\t\t\tprefix = this.options.htmlIdPrefix,\n\t\t\t\tprefixSeparator = '-';\n\n\t\t\tif ( prefix !== '' ) {\n\t\t\t\tprefix += prefixSeparator;\n\t\t\t}\n\n\t\t\tthis.element.attr( 'id', prefix + propertyId );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {string} propertyId\n\t\t */\n\t\t_updatePropertyId: function ( propertyId ) {\n\t\t\tthis.element.data( 'property-id', propertyId );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_createPropertyLabel: function () {\n\t\t\tif ( this.$propertyLabel.contents().length > 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar self = this,\n\t\t\t\tpropertyId = this.options.value.getKey();\n\n\t\t\tthis.options.entityIdHtmlFormatter.format( propertyId ).done( function ( title ) {\n\t\t\t\tself.$propertyLabel.append( title );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_createStatementlistview: function () {\n\t\t\tvar self = this,\n\t\t\t\tprefix;\n\n\t\t\tvar $statementlistview = this.element.find( '.wikibase-statementlistview' );\n\n\t\t\tif ( !$statementlistview.length ) {\n\t\t\t\t$statementlistview = $( '<div>' ).appendTo( this.element );\n\t\t\t}\n\n\t\t\tthis.statementlistview = this.options.buildStatementListView(\n\t\t\t\tthis.options.value ? this.options.value.getItemContainer() : new datamodel.StatementList(),\n\t\t\t\t$statementlistview\n\t\t\t);\n\t\t\tprefix = this.statementlistview.widgetEventPrefix;\n\n\t\t\t$statementlistview\n\t\t\t.on( prefix + 'toggleerror.' + this.widgetName, function ( event, error ) {\n\t\t\t\tself.$property.toggleClass( 'wb-error', Boolean( error ) );\n\t\t\t} )\n\t\t\t.on( prefix + 'afterstopediting.' + this.widgetName, function ( event, dropValue ) {\n\t\t\t\tself.$property.removeClass( 'wb-error wb-edit' );\n\t\t\t\tself._trigger( 'afterstopediting', null, [ dropValue ] );\n\t\t\t} )\n\t\t\t.on( prefix + 'afterstartediting.' + this.widgetName, function ( event ) {\n\t\t\t\tself.$property.addClass( 'wb-edit' );\n\t\t\t} )\n\t\t\t.on( prefix + 'afterremove.' + this.widgetName, function ( event ) {\n\t\t\t\tself.$property.removeClass( 'wb-error wb-edit' );\n\t\t\t\tself._trigger( 'afterremove' );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Sets the widget's value or gets the widget's current value (including pending items). (The\n\t\t * value the widget was initialized with may be retrieved via `.option( 'value' )`.)\n\t\t *\n\t\t * @param {datamodel.StatementGroup} [statementGroupView]\n\t\t * @return {datamodel.StatementGroup|null|undefined}\n\t\t */\n\t\tvalue: function ( statementGroupView ) {\n\t\t\tif ( statementGroupView !== undefined ) {\n\t\t\t\treturn this.option( 'value', statementGroupView );\n\t\t\t}\n\n\t\t\tvar statementList = this.statementlistview.value();\n\t\t\tif ( !statementList.length ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// Use the first statement's main snak property id as the statementgroupview may have\n\t\t\t// been initialized without a value (as there is no initial value, the id cannot be\n\t\t\t// retrieved from this.options.value).\n\t\t\treturn new datamodel.StatementGroup(\n\t\t\t\tstatementList.toArray()[ 0 ].getClaim().getMainSnak().getPropertyId(),\n\t\t\t\tstatementList\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} when trying to set the value passing something different than a\n\t\t *         `datamodel.StatementGroup´ object.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' && !!value ) {\n\t\t\t\tif ( !( value instanceof datamodel.StatementGroup ) ) {\n\t\t\t\t\tthrow new Error( 'value needs to be a datamodel.StatementGroup instance' );\n\t\t\t\t}\n\t\t\t\tthis.statementlistview.value( value.getItemContainer() );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis.statementlistview.option( key, value );\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tthis.statementlistview.focus();\n\t\t},\n\n\t\t/**\n\t\t * Adds a new, pending `statementview` to the encapsulated `statementlistview`.\n\t\t *\n\t\t * @see jQuery.wikibase.statementlistview.enterNewItem\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.done.$statementview\n\t\t */\n\t\tenterNewItem: function () {\n\t\t\treturn this.statementlistview.enterNewItem();\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":24,"column":null,"nodeType":"Block","endLine":24,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":166,"column":null,"nodeType":"Block","endLine":166,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":167,"column":null,"nodeType":"Block","endLine":167,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":188,"column":3,"nodeType":"Block","endLine":196,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":188,"column":3,"nodeType":"Block","endLine":196,"endColumn":6}],"errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.TemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * View for displaying and editing a list of `datamodel.Statement` objects by using\n\t * `jQuery.wikibase.statementview` widgets.\n\t *\n\t * @see jQuery.wikibase.statementview\n\t * @see datamodel.Statement\n\t * @see datamodel.StatementList\n\t * @class jQuery.wikibase.statementlistview\n\t * @extends jQuery.ui.TemplatedWidget\n\t * @uses jQuery.wikibase.listview\n\t * @uses jQuery.wikibase.listview.ListItemAdapter\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {datamodel.StatementList} [options.value]\n\t *        The list of `Statement`s to be displayed by this view.\n\t * @param {Function} options.getListItemAdapter\n\t */\n\t/**\n\t * @event afterstartediting\n\t * Triggered when edit mode has been started for one of the `statementview` widgets managed by the\n\t * `statementlistview`.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event afterstopediting\n\t * Triggered when one of the `statementview` widgets managed by the `statementlistview` has\n\t * successfully stopped edit mode.\n\t * @param {jQuery.Event} event\n\t * @param {boolean} dropValue If true, the value from before edit mode has been started will be\n\t *        reinstated (basically, a cancel/save switch).\n\t */\n\t/**\n\t * @event afterremove\n\t * Triggered after one of the `statementview` widgets managed by the `statementlistview` was removed\n\t * from the `statementlistview`.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event toggleerror\n\t * Triggered when one of the `statementview` widgets managed by the `statementlistview` produces an\n\t * error.\n\t * @param {jQuery.Event} event\n\t */\n\t$.widget( 'wikibase.statementlistview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-statementlistview',\n\t\t\ttemplateParams: [\n\t\t\t\t'', // listview widget\n\t\t\t\t'' // toolbar\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$listview: '.wikibase-statementlistview-listview'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tgetListItemAdapter: null\n\t\t},\n\n\t\t/**\n\t\t * @type {jQuery.wikibase.listview}\n\t\t * @private\n\t\t */\n\t\t_listview: null,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.getListItemAdapter\n\t\t\t\t|| ( this.options.value && !( this.options.value instanceof datamodel.StatementList ) )\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._createListView();\n\n\t\t\tvar self = this,\n\t\t\t\tlia = this._listview.listItemAdapter(),\n\t\t\t\tafterStartEditingEvent\n\t\t\t\t\t= lia.prefixedEvent( 'afterstartediting.' + this.widgetName ),\n\t\t\t\tafterStopEditingEvent = lia.prefixedEvent( 'afterstopediting.' + this.widgetName ),\n\t\t\t\ttoggleErrorEvent = lia.prefixedEvent( 'toggleerror.' + this.widgetName );\n\n\t\t\tthis.element\n\t\t\t.on( afterStartEditingEvent, function ( event ) {\n\t\t\t\t// Forward \"afterstartediting\" event for higher components (e.g. statementgrouplistview)\n\t\t\t\t// to recognize that edit mode has been started.\n\t\t\t\tself._trigger( 'afterstartediting' );\n\t\t\t} )\n\t\t\t.on( afterStopEditingEvent, function ( event, dropValue ) {\n\t\t\t\tvar $statementview = $( event.target ),\n\t\t\t\t\tstatementview = lia.liInstance( $statementview );\n\n\t\t\t\t// Cancelling edit mode or having stopped edit mode after saving an existing (not\n\t\t\t\t// pending) statement.\n\t\t\t\tif ( dropValue || !statementview || statementview.value() ) {\n\t\t\t\t\tself._trigger( 'afterstopediting', null, [ dropValue ] );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( toggleErrorEvent, function ( event, error ) {\n\t\t\t\tself._trigger( 'toggleerror', null, [ error ] );\n\t\t\t} );\n\n\t\t\tvar $containerWrapper = this.element.children( '.wikibase-toolbar-wrapper' );\n\t\t\tif ( $containerWrapper.length === 0 ) {\n\t\t\t\t$containerWrapper = mw.wbTemplate( 'wikibase-toolbar-wrapper', '' ).appendTo( this.element );\n\t\t\t}\n\n\t\t\tthis._statementAdder = this.options.getAdder(\n\t\t\t\tthis.enterNewItem.bind( this ),\n\t\t\t\t$containerWrapper,\n\t\t\t\tmw.msg( 'wikibase-statementlistview-add' ),\n\t\t\t\tmw.msg( 'wikibase-statementlistview-add-tooltip' )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis._listview.destroy();\n\t\t\tif ( this._statementAdder ) {\n\t\t\t\tthis._statementAdder.destroy();\n\t\t\t\tthis._statementAdder = null;\n\t\t\t}\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * Creates the `listview` widget managing the `statementview` widgets.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_createListView: function () {\n\t\t\tthis.$listview.listview( {\n\t\t\t\tlistItemAdapter: this.options.getListItemAdapter( this._remove.bind( this ) ),\n\t\t\t\tvalue: this.options.value ? this.options.value.toArray() : null\n\t\t\t} );\n\n\t\t\tthis._listview = this.$listview.data( 'listview' );\n\t\t},\n\n\t\t/**\n\t\t * Sets the widget's value or gets the widget's current value (including pending items). (The\n\t\t * value the widget was initialized with may be retrieved via `.option( 'value' )`.)\n\t\t *\n\t\t * @param {datamodel.StatementList} [statementList]\n\t\t * @return {datamodel.StatementList|undefined}\n\t\t */\n\t\tvalue: function ( statementList ) {\n\t\t\tif ( statementList !== undefined ) {\n\t\t\t\treturn this.option( 'value', statementList );\n\t\t\t}\n\n\t\t\tvar statements = [],\n\t\t\t\tlia = this._listview.listItemAdapter();\n\n\t\t\tthis._listview.items().each( function () {\n\t\t\t\tvar statementview = lia.liInstance( $( this ) ),\n\t\t\t\t\tstatement = statementview.value();\n\t\t\t\tif ( statement ) {\n\t\t\t\t\tstatements.push( statement );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn new datamodel.StatementList( statements );\n\t\t},\n\n\t\t/**\n\t\t * Adds a new, pending `statementview` to the `statementlistview`.\n\t\t *\n\t\t * @see jQuery.wikibase.listview.enterNewItem\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.done.$statementview\n\t\t */\n\t\tenterNewItem: function () {\n\t\t\treturn this._listview.enterNewItem();\n\t\t},\n\n\t\t/**\n\t\t * Removes a `statementview` widget.\n\t\t *\n\t\t * @param {jQuery.wikibase.statementview} statementview\n\t\t */\n\t\t_remove: function ( statementview ) {\n\t\t\tthis._listview.removeItem( statementview.element );\n\t\t\tthis._trigger( 'afterremove' );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' && !!value ) {\n\t\t\t\tif ( !( value instanceof datamodel.StatementList ) ) {\n\t\t\t\t\tthrow new Error( 'value needs to be a datamodel.StatementList instance' );\n\t\t\t\t}\n\t\t\t\tthis._listview.value( value.toArray() );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis._listview.option( key, value );\n\t\t\t\tif ( this._statementAdder ) {\n\t\t\t\t\tthis._statementAdder[ value ? 'disable' : 'enable' ]();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar $items = this._listview.items();\n\n\t\t\tif ( $items.length ) {\n\t\t\t\tthis._listview.listItemAdapter().liInstance( $items.first() ).focus();\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'event' is already declared in the upper scope on line 121 column 48.","line":138,"column":30,"nodeType":"Identifier","messageId":"noShadow","endLine":138,"endColumn":35},{"ruleId":"no-shadow","severity":1,"message":"'event' is already declared in the upper scope on line 121 column 48.","line":149,"column":17,"nodeType":"Identifier","messageId":"noShadow","endLine":149,"endColumn":22},{"ruleId":"no-shadow","severity":1,"message":"'$menu' is already declared in the upper scope on line 13 column 6.","line":209,"column":5,"nodeType":"Identifier","messageId":"noShadow","endLine":209,"endColumn":10}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * The node of the `RankSelector` menu to select a `RANK` from.\n\t *\n\t * @property {jQuery|null} [$menu=null]\n\t * @ignore\n\t */\n\tvar $menu = null;\n\n\t/**\n\t * Returns a `RANK`'s serialized string.\n\t *\n\t * @see datamodel.Statement.RANK\n\t * @ignore\n\t *\n\t * @param {number} rank\n\t * @return {string|null}\n\t */\n\tfunction getRankName( rank ) {\n\t\tfor ( var rankName in datamodel.Statement.RANK ) {\n\t\t\tif ( rank === datamodel.Statement.RANK[ rankName ] ) {\n\t\t\t\treturn rankName.toLowerCase();\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Selector for choosing a `Statement` rank.\n\t *\n\t * @see datamodel.Statement.RANK\n\t * @class jQuery.wikibase.statementview.RankSelector\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} [options]\n\t * @param {number} [options.value=datamodel.Statement.RANK.NORMAL]\n\t *        The `RANK` that shall be selected.\n\t * @param {boolean} [options.isRTL=false]\n\t *        Whether the widget is displayed in right-to-left context.\n\t */\n\t/**\n\t * @event change\n\t * Triggered when the snak type got changed.\n\t * @param {jQuery.Event} event\n\t */\n\t$.wikibase.statementview.RankSelector = util.inherit( PARENT, {\n\t\tnamespace: 'wikibase',\n\t\twidgetName: 'rankselector',\n\t\twidgetFullName: 'wikibase-rankselector',\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t * @readonly\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-rankselector',\n\t\t\ttemplateParams: [\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t''\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$icon: '.ui-icon-rankselector'\n\t\t\t},\n\t\t\tvalue: datamodel.Statement.RANK.NORMAL,\n\t\t\tisRtl: false\n\t\t},\n\n\t\t/**\n\t\t * The `RANK` currently featured by the `RankSelector`.\n\t\t *\n\t\t * @see datamodel.Statement.RANK\n\t\t * @type {number}\n\t\t */\n\t\t_rank: null,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( !$menu ) {\n\t\t\t\t$menu = this._buildMenu().appendTo( document.body ).hide();\n\n\t\t\t\t$menu.on( 'click.' + this.widgetName, function ( event ) {\n\t\t\t\t\tvar $li = $( event.target ).closest( 'li' ),\n\t\t\t\t\t\trank = $li.data( self.widgetName + '-menuitem-rank' );\n\n\t\t\t\t\tif ( rank !== undefined ) {\n\t\t\t\t\t\t$.data( this, self.widgetName ).value( rank );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.element\n\t\t\t.addClass( this.widgetFullName )\n\t\t\t.on( 'mouseover.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( !self.option( 'disabled' ) && self.isInEditMode() ) {\n\t\t\t\t\tself.element.addClass( 'ui-state-hover' );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'mouseout.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( !self.option( 'disabled' ) && self.isInEditMode() ) {\n\t\t\t\t\tself.element.removeClass( 'ui-state-hover' );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'click.' + this.widgetName, function ( event ) {\n\t\t\t\t// TODO: Store visibility in model\n\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\tif ( self.option( 'disabled' ) || !self.isInEditMode() || $menu.is( ':visible' ) ) {\n\t\t\t\t\t$menu.hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$menu.data( self.widgetName, self );\n\t\t\t\t$menu.show();\n\t\t\t\tself._updateMenuCss();\n\t\t\t\tself.repositionMenu();\n\n\t\t\t\tself.element.addClass( 'ui-state-active' );\n\n\t\t\t\t// Close the menu when clicking, regardless of whether the click is performed on the\n\t\t\t\t// menu itself or outside of it:\n\t\t\t\tvar degrade = function ( event ) {\n\t\t\t\t\tif ( event.target !== self.element.get( 0 ) ) {\n\t\t\t\t\t\t$menu.hide();\n\t\t\t\t\t\tself.element.removeClass( 'ui-state-active' );\n\t\t\t\t\t}\n\t\t\t\t\tself._unbindGlobalEventListeners();\n\t\t\t\t};\n\n\t\t\t\t$( document ).on( 'mouseup.' + self.widgetName, degrade );\n\t\t\t\t$( window ).on(\n\t\t\t\t\t'resize.' + self.widgetName,\n\t\t\t\t\tfunction ( event ) {\n\t\t\t\t\t\tself.repositionMenu();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} );\n\n\t\t\tthis._setRank( this.options.value );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( $( '.' + this.widgetFullName ).length === 0 ) {\n\t\t\t\t$menu.data( 'menu' ).destroy();\n\t\t\t\t$menu.remove();\n\t\t\t\t$menu = null;\n\t\t\t}\n\t\t\tthis.$icon.remove();\n\n\t\t\tthis.element.removeClass( 'ui-state-default ui-state-hover ' + this.widgetFullName );\n\n\t\t\tthis._unbindGlobalEventListeners();\n\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\t\t\tif ( key === 'rank' ) {\n\t\t\t\tthis._setRank( value );\n\t\t\t\tthis._trigger( 'change' );\n\t\t\t} else if ( key === 'disabled' ) {\n\t\t\t\tthis.draw();\n\t\t\t}\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * Removes all global event listeners generated by the `RankSelector`.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_unbindGlobalEventListeners: function () {\n\t\t\t$( document ).add( $( window ) ).off( '.' + this.widgetName );\n\t\t},\n\n\t\t/**\n\t\t * Generates the menu the `RANK` may be chosen from.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_buildMenu: function () {\n\t\t\tvar self = this,\n\t\t\t\t$menu = $( '<ul>' ).addClass( this.widgetFullName + '-menu' );\n\n\t\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t\t$.each( datamodel.Statement.RANK, function ( rankName, rank ) {\n\t\t\t\trankName = rankName.toLowerCase();\n\n\t\t\t\t$menu.append(\n\t\t\t\t\t$( '<li>' )\n\t\t\t\t\t.addClass( self.widgetFullName + '-menuitem-' + rankName )\n\t\t\t\t\t.data( self.widgetName + '-menuitem-rank', rank )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$( '<a>' )\n\t\t\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t\t\t// * wikibase-statementview-rank-preferred\n\t\t\t\t\t\t\t// * wikibase-statementview-rank-normal\n\t\t\t\t\t\t\t// * wikibase-statementview-rank-deprecated\n\t\t\t\t\t\t\t.text( mw.msg( 'wikibase-statementview-rank-' + rankName ) )\n\t\t\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t\t\t// * wikibase-statementview-rank-tooltip-preferred\n\t\t\t\t\t\t\t// * wikibase-statementview-rank-tooltip-normal\n\t\t\t\t\t\t\t// * wikibase-statementview-rank-tooltip-deprecated\n\t\t\t\t\t\t\t.attr( 'title', mw.msg( 'wikibase-statementview-rank-tooltip-' + rankName ) )\n\t\t\t\t\t\t\t.on( 'click.' + self.widgetName, function ( event ) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} );\n\n\t\t\treturn $menu.menu();\n\t\t},\n\n\t\t/**\n\t\t * Sets the `RANK` if a `RANK` is specified or gets the current `RANK` if parameter is\n\t\t * omitted.\n\t\t *\n\t\t * @param {number} [rank]\n\t\t * @return {number|undefined}\n\t\t */\n\t\tvalue: function ( rank ) {\n\t\t\tif ( rank === undefined ) {\n\t\t\t\treturn this._rank;\n\t\t\t}\n\n\t\t\tthis._setRank( rank );\n\n\t\t\tthis._trigger( 'change' );\n\t\t},\n\n\t\t/**\n\t\t * Sets the `RANK` activating the menu item representing the specified `RANK`.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @param {number} rank\n\t\t */\n\t\t_setRank: function ( rank ) {\n\t\t\tthis._rank = rank;\n\n\t\t\tif ( $menu && $menu.data( this.widgetName ) === this ) {\n\t\t\t\tthis._updateMenuCss();\n\t\t\t}\n\n\t\t\tthis._updateIcon();\n\t\t},\n\n\t\t/**\n\t\t * Updates the menu's CSS classes.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_updateMenuCss: function () {\n\t\t\t$menu.children().removeClass( 'ui-state-active' );\n\t\t\t$menu\n\t\t\t.children( '.' + this.widgetFullName + '-menuitem-' + getRankName( this._rank ) )\n\t\t\t.addClass( 'ui-state-active' );\n\t\t},\n\n\t\t/**\n\t\t * Updates the rank icon to reflect the rank currently set.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_updateIcon: function () {\n\t\t\tfor ( var rankId in datamodel.Statement.RANK ) {\n\t\t\t\tvar rankName = rankId.toLowerCase(),\n\t\t\t\t\tselected = this._rank === datamodel.Statement.RANK[ rankId ];\n\n\t\t\t\tthis.$icon.toggleClass( this.widgetFullName + '-' + rankName, selected );\n\n\t\t\t\tif ( selected ) {\n\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t// * wikibase-statementview-rank-preferred\n\t\t\t\t\t// * wikibase-statementview-rank-normal\n\t\t\t\t\t// * wikibase-statementview-rank-deprecated\n\t\t\t\t\tthis.$icon.attr( 'title', mw.msg( 'wikibase-statementview-rank-' + rankName ) );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * (Re-)positions the menu.\n\t\t */\n\t\trepositionMenu: function () {\n\t\t\t$menu.position( {\n\t\t\t\tof: this.$icon,\n\t\t\t\tmy: ( this.options.isRTL ? 'right' : 'left' ) + ' top',\n\t\t\t\tat: ( this.options.isRTL ? 'right' : 'left' ) + ' bottom',\n\t\t\t\toffset: '0 1',\n\t\t\t\tcollision: 'none'\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdraw: function () {\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tthis.element\n\t\t\t\t.addClass( 'ui-state-default' )\n\t\t\t\t.removeClass( 'ui-state-disabled' );\n\t\t\t} else {\n\t\t\t\tthis.element\n\t\t\t\t.removeClass( 'ui-state-default ui-state-active ui-state-hover' )\n\t\t\t\t.addClass( 'ui-state-disabled' );\n\t\t\t}\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\t// Hide the menu the rank selector currently references to:\n\t\t\tif ( $menu && $menu.data( this.widgetName ) === this ) {\n\t\t\t\t$menu.hide();\n\t\t\t}\n\t\t\treturn this.draw();\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.statementview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":34,"column":null,"nodeType":"Block","endLine":34,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":257,"column":null,"nodeType":"Block","endLine":257,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":297,"column":null,"nodeType":"Block","endLine":297,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":478,"column":null,"nodeType":"Block","endLine":478,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":523,"column":null,"nodeType":"Block","endLine":523,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":549,"column":null,"nodeType":"Block","endLine":549,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":569,"column":null,"nodeType":"Block","endLine":569,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":680,"column":3,"nodeType":"Block","endLine":684,"endColumn":6}],"errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' ),\n\t\tbuildCounter = require( '../../wikibase/utilities/wikibase.utilities.ui.js' );\n\n\t/**\n\t * View for displaying and editing `datamodel.Statement` objects.\n\t *\n\t * @see datamodel.Statement\n\t * @class jQuery.wikibase.statementview\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @uses jQuery.ui.toggler\n\t * @uses jQuery.wikibase.listview\n\t * @uses jQuery.wikibase.listview.ListItemAdapter\n\t * @uses jQuery.wikibase.referenceview\n\t * @uses jQuery.wikibase.snakview\n\t * @uses jQuery.wikibase.snaklistview\n\t * @uses jQuery.wikibase.statementview.RankSelector\n\t * @uses mediaWiki\n\t * @uses datamodel.Claim\n\t * @uses datamodel.SnakList\n\t * @uses datamodel.ReferenceList\n\t * @uses datamodel.Statement\n\t * @uses wikibase.utilities.ui\n\t * @license GPL-2.0-or-later\n\t * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {datamodel.Statement|null} [options.value=null]\n\t *        The `Statement` displayed by the view.\n\t * @param {Function} options.getReferenceListItemAdapter\n\t * @param {Function} options.buildSnakView\n\t * @param {wikibase.utilities.ClaimGuidGenerator} options.guidGenerator\n\t *        Required for dynamically generating GUIDs for new `Statement`s.\n\t * @param {wikibase.entityIdFormatter.EntityIdPlainFormatter} options.entityIdPlainFormatter\n\t *        Required for dynamically rendering plain text references to `Entity`s.\n\t * @param {Object} [options.predefined={ mainSnak: false }]\n\t *        Allows to predefine certain aspects of the `Statement` to be created from the view. If\n\t *        this option is omitted, an empty view is created. A common use-case is adding a value to a\n\t *        property existing already by specifying, for example: `{ mainSnak.property: 'P1' }`.\n\t * @param {Function} options.getQualifiersListItemAdapter\n\t * @param {Object} [options.locked={ mainSnak: false }]\n\t *        Elements that shall be locked and may not be changed by user interaction.\n\t * @param {string} [options.helpMessage=mw.msg( 'wikibase-claimview-snak-new-tooltip' )]\n\t *        End-user message explaining how to use the `statementview` widget. The message is most\n\t *        likely to be used inside the tooltip of the toolbar corresponding to the `statementview`.\n\t */\n\t/**\n\t * @event change\n\t * Triggered whenever the view's content is changed.\n\t * @param {jQuery.Event} event\n\t */\n\t$.widget( 'wikibase.statementview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-statementview',\n\t\t\ttemplateParams: [\n\t\t\t\tfunction () { // GUID\n\t\t\t\t\treturn ( this.options.value && this.options.value.getClaim().getGuid() ) || 'new';\n\t\t\t\t},\n\t\t\t\tfunction () { // Rank name\n\t\t\t\t\treturn ( this.options.value && this._getRankName( this.options.value.getRank() ) )\n\t\t\t\t\t\t|| 'normal';\n\t\t\t\t},\n\t\t\t\tfunction () { // Rank selector\n\t\t\t\t\treturn $( '<div>' );\n\t\t\t\t},\n\t\t\t\tfunction () { // Main snak\n\t\t\t\t\treturn $( '<div>' );\n\t\t\t\t},\n\t\t\t\t'', // Qualifiers\n\t\t\t\t'', // Toolbar placeholder\n\t\t\t\t'', // References heading\n\t\t\t\t'', // List of references\n\t\t\t\t'' // wikibase-initially-collapsed for wikibase-statementview-references\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$rankSelector: '.wikibase-statementview-rankselector',\n\t\t\t\t$mainSnak: '.wikibase-statementview-mainsnak > :first-child',\n\t\t\t\t$qualifiers: '.wikibase-statementview-qualifiers',\n\t\t\t\t$refsHeading: '.wikibase-statementview-references-heading',\n\t\t\t\t$references: '.wikibase-statementview-references'\n\t\t\t},\n\t\t\tvalue: null,\n\t\t\tentityIdPlainFormatter: null,\n\t\t\tpredefined: {\n\t\t\t\tmainSnak: false\n\t\t\t},\n\t\t\tlocked: {\n\t\t\t\tmainSnak: false\n\t\t\t},\n\t\t\thelpMessage: mw.msg( 'wikibase-claimview-snak-new-tooltip' ),\n\t\t\tfireStartEditingHook: mw.hook( 'wikibase.statement.startEditing' ).fire,\n\t\t\tfireStopEditingHook: mw.hook( 'wikibase.statement.stopEditing' ).fire\n\t\t},\n\n\t\t/**\n\t\t * @property {jQuery.wikibase.snakview|null}\n\t\t * @private\n\t\t */\n\t\t_mainSnakSnakView: null,\n\n\t\t/**\n\t\t * @property {jQuery.wikibase.statementview.RankSelector|null}\n\t\t * @private\n\t\t */\n\t\t_rankSelector: null,\n\n\t\t/**\n\t\t * Shortcut to the `listview` managing the `referenceview`s.\n\t\t *\n\t\t * @property {jQuery.wikibase.listview|null}\n\t\t * @private\n\t\t */\n\t\t_referencesListview: null,\n\n\t\t/**\n\t\t * Reference to the `listview` widget managing the qualifier `snaklistview`s.\n\t\t *\n\t\t * @property {jQuery.wikibase.listview|null}\n\t\t * @private\n\t\t */\n\t\t_qualifiers: null,\n\n\t\t/**\n\t\t * Reference to the `toggler` widget managing expanding/collapsing\n\t\t *\n\t\t * @property {jQuery}\n\t\t * @private\n\t\t */\n\t\t_$toggler: null,\n\n\t\t/**\n\t\t * @property {Object}\n\t\t * @private\n\t\t */\n\t\t_referenceAdder: null,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} if a required option is not specified properly.\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( !this.options.getReferenceListItemAdapter\n\t\t\t\t|| !this.options.buildSnakView\n\t\t\t\t|| !this.options.entityIdPlainFormatter\n\t\t\t\t|| !this.options.guidGenerator\n\t\t\t\t|| !this.options.getQualifiersListItemAdapter\n\t\t\t) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tvar isEmpty = this.element.is( ':empty' );\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( isEmpty ) {\n\t\t\t\tthis.draw();\n\t\t\t} else {\n\t\t\t\tthis._createReferencesToggler();\n\t\t\t}\n\n\t\t\tthis._referenceAdder = this.options.getAdder(\n\t\t\t\tthis._enterNewReference.bind( this ),\n\t\t\t\tthis.$references,\n\t\t\t\tmw.msg( 'wikibase-addreference' )\n\t\t\t);\n\t\t\tthis.element.toggleClass( 'wb-new', this.options.value === null );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {number} rank\n\t\t */\n\t\t_createRankSelector: function ( rank ) {\n\t\t\tif ( this._rankSelector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $rankSelector = this.$rankSelector.children().first();\n\t\t\tthis._rankSelector = new $.wikibase.statementview.RankSelector( {\n\t\t\t\tvalue: rank,\n\t\t\t\ttemplateParams: [ 'ui-state-disabled', '', '' ],\n\t\t\t\t// TODO: Directionality should be determined on entityview level and forwarded to here\n\t\t\t\tisRTL: $( document.documentElement ).prop( 'dir' ) === 'rtl'\n\t\t\t}, $rankSelector );\n\n\t\t\tvar self = this,\n\t\t\t\tchangeEvent = ( this._rankSelector.widgetEventPrefix + 'change' ).toLowerCase();\n\n\t\t\tthis.$rankSelector.on( changeEvent + '.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( self.value() ) {\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {number} rank\n\t\t * @return {string|null}\n\t\t */\n\t\t_getRankName: function ( rank ) {\n\t\t\tfor ( var rankName in datamodel.Statement.RANK ) {\n\t\t\t\tif ( rank === datamodel.Statement.RANK[ rankName ] ) {\n\t\t\t\t\treturn rankName.toLowerCase();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_createMainSnak: function () {\n\t\t\tif ( this.$mainSnak.data( 'snakview' ) ) {\n\t\t\t\tthis._mainSnakSnakView = this.$mainSnak.data( 'snakview' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar snak = this.options.value\n\t\t\t\t? this.options.value.getClaim().getMainSnak()\n\t\t\t\t: this.options.predefined.mainSnak || null;\n\t\t\tvar self = this;\n\n\t\t\tthis.$mainSnak\n\t\t\t.on( 'snakviewchange.' + this.widgetName, function ( event, status ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\n\t\t\tthis._mainSnakSnakView = this.options.buildSnakView(\n\t\t\t\t{\n\t\t\t\t\tlocked: this.options.locked.mainSnak,\n\t\t\t\t\tautoStartEditing: false\n\t\t\t\t},\n\t\t\t\tsnak,\n\t\t\t\tthis.$mainSnak\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {datamodel.SnakList|null} [qualifiers=null]\n\t\t */\n\t\t_createQualifiersListview: function ( qualifiers ) {\n\t\t\tif ( this._qualifiers ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar self = this,\n\t\t\t\tgroupedQualifierSnaks = null;\n\n\t\t\t// Group qualifiers by property id:\n\t\t\tif ( qualifiers && qualifiers.length ) {\n\t\t\t\tgroupedQualifierSnaks = qualifiers.getGroupedSnakLists();\n\t\t\t}\n\n\t\t\t// Using the property id, qualifier snaks are split into groups of snaklistviews. These\n\t\t\t// snaklistviews are managed in a listview:\n\t\t\tvar $qualifiers = this.$qualifiers.children( '.wikibase-listview' );\n\t\t\tif ( !$qualifiers.length ) {\n\t\t\t\t$qualifiers = $( '<div>' ).prependTo( this.$qualifiers );\n\t\t\t}\n\t\t\t$qualifiers.listview( {\n\t\t\t\tlistItemAdapter: this.options.getQualifiersListItemAdapter( function ( snaklistview ) {\n\t\t\t\t\tself._qualifiers.removeItem( snaklistview.element );\n\t\t\t\t} ),\n\t\t\t\tvalue: groupedQualifierSnaks\n\t\t\t} )\n\t\t\t.on( 'snaklistviewchange.' + this.widgetName,\n\t\t\t\tfunction ( event ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis._qualifiers = $qualifiers.data( 'listview' );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {datamodel.Reference[]} [references]\n\t\t */\n\t\t_createReferencesListview: function ( references ) {\n\t\t\tvar self = this;\n\n\t\t\tvar $listview = this.$references.children( '.wikibase-listview' );\n\t\t\tif ( !$listview.length ) {\n\t\t\t\t$listview = $( '<div>' ).prependTo( this.$references );\n\t\t\t} else if ( $listview.data( 'listview' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lia = this.options.getReferenceListItemAdapter(\n\t\t\t\tfunction ( referenceview ) {\n\t\t\t\t\tself._referencesListview.removeItem( referenceview.element );\n\t\t\t\t\tself._drawReferencesCounter();\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t$listview.listview( {\n\t\t\t\tlistItemAdapter: lia,\n\t\t\t\tvalue: references\n\t\t\t} );\n\n\t\t\tthis._referencesListview = $listview.data( 'listview' );\n\n\t\t\t$listview\n\t\t\t.on( lia.prefixedEvent( 'change.' + this.widgetName ), function ( event ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tself._drawReferencesCounter();\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\n\t\t\tthis._createReferencesToggler();\n\t\t},\n\n\t\t_createReferencesToggler: function () {\n\t\t\tif ( this._$toggler ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar expanded, text;\n\n\t\t\tif ( this._referencesListview ) {\n\t\t\t\texpanded = this._referencesListview.items().length === 0;\n\t\t\t\tthis.$references.toggleClass( 'wikibase-initially-collapsed', !expanded );\n\t\t\t} else {\n\t\t\t\texpanded = !this.$references.hasClass( 'wikibase-initially-collapsed' );\n\t\t\t}\n\n\t\t\t// toggle for references section:\n\t\t\tthis._$toggler = $( '<a>' ).toggler( {\n\t\t\t\t$subject: this.$references,\n\t\t\t\tvisible: expanded\n\t\t\t} );\n\n\t\t\ttext = this.$refsHeading.text();\n\t\t\tif ( text ) {\n\t\t\t\tthis._$toggler.find( '.ui-toggler-label' ).text( text );\n\t\t\t\tthis.$refsHeading.empty().append( this._$toggler );\n\t\t\t} else {\n\t\t\t\tthis.$refsHeading.empty().append( this._$toggler );\n\t\t\t\tthis._drawReferencesCounter();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tgetHelpMessage: function () {\n\t\t\tvar deferred = $.Deferred(),\n\t\t\t\thelpMessage = this.options.helpMessage;\n\n\t\t\tif ( !this.options.value && !this.options.predefined.mainSnak ) {\n\t\t\t\tdeferred.resolve( helpMessage );\n\t\t\t} else {\n\t\t\t\tvar property = this.options.value\n\t\t\t\t\t? this.options.value.getClaim().getMainSnak().getPropertyId()\n\t\t\t\t\t: this.options.predefined.mainSnak.property;\n\n\t\t\t\tif ( property ) {\n\t\t\t\t\tthis.options.entityIdPlainFormatter.format( property ).done( function ( formattedEntityId ) {\n\t\t\t\t\t\tdeferred.resolve( mw.msg( 'wikibase-claimview-snak-tooltip', formattedEntityId ) );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolve( helpMessage );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this._rankSelector ) {\n\t\t\t\tthis._rankSelector.destroy();\n\t\t\t\tthis.$rankSelector.off( '.' + this.widgetName );\n\t\t\t\tthis._rankSelector = null;\n\t\t\t}\n\n\t\t\tif ( this._mainSnakSnakView ) {\n\t\t\t\tthis._mainSnakSnakView.destroy();\n\t\t\t\tthis.$mainSnak.off( '.' + this.widgetName );\n\t\t\t\tthis._mainSnakSnakView = null;\n\t\t\t}\n\n\t\t\tif ( this._qualifiers ) {\n\t\t\t\tthis._destroyQualifiersListView();\n\t\t\t}\n\t\t\tif ( this._referencesListview ) {\n\t\t\t\tthis._destroyReferencesListview();\n\t\t\t}\n\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_destroyQualifiersListView: function () {\n\t\t\tthis._qualifiers.destroy();\n\t\t\tthis.$qualifiers\n\t\t\t\t.off( '.' + this.widgetName );\n\t\t\tthis._qualifiers = null;\n\n\t\t\tif ( this._qualifierAdder ) {\n\t\t\t\tthis._qualifierAdder.destroy();\n\t\t\t\tthis._qualifierAdder = null;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_destroyReferencesListview: function () {\n\t\t\tthis._referencesListview.destroy();\n\t\t\tthis.$references\n\t\t\t\t.off( '.' + this.widgetName )\n\t\t\t\t.empty();\n\t\t\tthis._referencesListview = null;\n\t\t\tthis._referenceAdder.destroy();\n\t\t\tthis._referenceAdder = null;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdraw: function () {\n\t\t\tthis._createRankSelector( this.options.value\n\t\t\t\t? this.options.value.getRank()\n\t\t\t\t: datamodel.Statement.RANK.NORMAL\n\t\t\t);\n\t\t\tthis._createMainSnak();\n\n\t\t\tif (\n\t\t\t\tthis.isInEditMode()\n\t\t\t\t|| this.options.value\n\t\t\t\t&& this.options.value.getClaim().getQualifiers().length\n\t\t\t) {\n\t\t\t\tthis._createQualifiersListview(\n\t\t\t\t\tthis.options.value\n\t\t\t\t\t\t? this.options.value.getClaim().getQualifiers()\n\t\t\t\t\t\t: new datamodel.SnakList()\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._createReferencesListview(\n\t\t\t\tthis.options.value ? this.options.value.getReferences().toArray() : []\n\t\t\t);\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * Instantiates a `Statement` with the `statementview`'s current value.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @param {string} guid\n\t\t * @return {datamodel.Statement|null}\n\t\t */\n\t\t_instantiateStatement: function ( guid ) {\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\tmw.log.warn( 'statementview::_instantiateStatement should only be called in edit mode' );\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar mainSnak = this._mainSnakSnakView.snak();\n\t\t\tif ( !mainSnak ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar qualifiers = this._getQualifiers();\n\t\t\tif ( !qualifiers ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar references = this._getReferences();\n\t\t\tif ( !references ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn new datamodel.Statement(\n\t\t\t\tnew datamodel.Claim( mainSnak, qualifiers, guid ),\n\t\t\t\treferences,\n\t\t\t\tthis._rankSelector.value()\n\t\t\t);\n\t\t},\n\n\t\t_enterNewReference: function () {\n\t\t\tvar listview = this._referencesListview,\n\t\t\t\tlia = listview.listItemAdapter();\n\n\t\t\tlistview.enterNewItem().done( function ( $referenceview ) {\n\t\t\t\tvar referenceview = lia.liInstance( $referenceview );\n\n\t\t\t\t// Enter first item into the referenceview.\n\t\t\t\treferenceview.enterNewItem();\n\t\t\t} ).done( this._drawReferencesCounter.bind( this ) );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @return {datamodel.SnakList|null}\n\t\t */\n\t\t_getQualifiers: function () {\n\t\t\tvar qualifiers = new datamodel.SnakList();\n\n\t\t\tif ( this._qualifiers ) {\n\t\t\t\tvar snaklistviews = this._qualifiers.value();\n\n\t\t\t\t// Combine qualifiers grouped by property to a single SnakList:\n\t\t\t\tfor ( var i = 0; i < snaklistviews.length; i++ ) {\n\t\t\t\t\tvar value = snaklistviews[ i ].value();\n\t\t\t\t\tif ( !value ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tqualifiers.merge( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn qualifiers;\n\t\t},\n\n\t\t/**\n\t\t * Returns all `Reference`s currently specified in the view (including all pending changes).\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @return {datamodel.ReferenceList|null}\n\t\t */\n\t\t_getReferences: function () {\n\t\t\tvar references = [];\n\n\t\t\tif ( !this._referencesListview.value().every( function ( referenceview ) {\n\t\t\t\tvar value = referenceview.value();\n\t\t\t\treferences.push( value );\n\t\t\t\treturn value;\n\t\t\t} ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn new datamodel.ReferenceList( references );\n\t\t},\n\n\t\t/**\n\t\t * Returns the current `Statement` represented by the view, considering all pending changes not\n\t\t * yet stored. Use `this.option( 'value' )` to retrieve the stored/original `Statement`.\n\t\t *\n\t\t * @return {datamodel.Statement|null}\n\t\t */\n\t\tvalue: function ( newValue ) {\n\t\t\tif ( typeof newValue !== 'undefined' ) {\n\t\t\t\treturn this.option( 'value', newValue );\n\t\t\t}\n\t\t\tif ( this.isInEditMode() ) {\n\t\t\t\tvar guid = this.options.value ? this.options.value.getClaim().getGuid() : this.options.guidGenerator.newGuid();\n\t\t\t\treturn this._instantiateStatement( guid );\n\t\t\t} else {\n\t\t\t\treturn this.options.value;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Updates the visual `Reference`s counter.\n\t\t *\n\t\t * @private\n\t\t */\n\t\t_drawReferencesCounter: function () {\n\t\t\tvar numberOfValues = 0;\n\n\t\t\tif ( this._referencesListview ) {\n\t\t\t\tnumberOfValues = this._referencesListview.items().length;\n\t\t\t}\n\n\t\t\tvar $counterMsg = buildCounter(\n\t\t\t\t'wikibase-statementview-references-counter',\n\t\t\t\tnumberOfValues\n\t\t\t);\n\n\t\t\t// update counter, don't touch the toggle!\n\t\t\tthis.$refsHeading.find( '.ui-toggler-label' ).empty().append( $counterMsg );\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\tvar self = this;\n\n\t\t\tif ( this.options.value ) {\n\t\t\t\tthis.options.fireStartEditingHook( this.options.value.getClaim().getGuid() );\n\t\t\t}\n\t\t\tthis._qualifierAdder = this.options.getAdder(\n\t\t\t\tfunction () {\n\t\t\t\t\tvar listview = self._qualifiers;\n\t\t\t\t\tlistview.enterNewItem();\n\n\t\t\t\t\tvar snaklistview = listview.value()[ listview.value().length - 1 ];\n\t\t\t\t\tsnaklistview.enterNewItem().done( function () {\n\t\t\t\t\t\tsnaklistview.focus();\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\tthis.$qualifiers,\n\t\t\t\tmw.msg( 'wikibase-addqualifier' )\n\t\t\t);\n\n\t\t\treturn $.when(\n\t\t\t\tthis._createMainSnak(),\n\t\t\t\tthis.draw(),\n\t\t\t\tthis._mainSnakSnakView.startEditing(),\n\t\t\t\tthis._rankSelector.startEditing(),\n\t\t\t\tthis._qualifiers.startEditing(),\n\t\t\t\tthis._startEditingReferences()\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\t_startEditingReferences: function () {\n\t\t\tthis._referencesListview.startEditing();\n\t\t\tthis._expandReferencesToggler();\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\t_expandReferencesToggler: function () {\n\t\t\tvar toggler = this._$toggler.data( 'toggler' );\n\t\t\tif ( toggler.isCollapsed() ) {\n\t\t\t\ttoggler.toggle();\n\t\t\t}\n\t\t},\n\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tif ( !dropValue ) {\n\t\t\t\tthis.element.find( '.wikibase-snakview-indicators' ).empty();\n\t\t\t}\n\t\t\tif ( this.options.value ) {\n\t\t\t\tthis.options.fireStopEditingHook( this.options.value.getClaim().getGuid() );\n\t\t\t}\n\n\t\t\t// TODO: this should return a promise\n\t\t\tthis._stopEditingQualifiers( dropValue );\n\n\t\t\treturn $.when(\n\t\t\t\tthis._stopEditingReferences( dropValue ),\n\t\t\t\tthis._mainSnakSnakView.stopEditing( dropValue ),\n\t\t\t\tthis._rankSelector.stopEditing( dropValue )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\t_recreateReferences: function () {\n\t\t\tthis._referencesListview.option( 'value', this.options.value\n\t\t\t\t? this.options.value.getReferences().toArray() : [] );\n\n\t\t\tthis._drawReferencesCounter();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {boolean} [dropValue=false]\n\t\t */\n\t\t_stopEditingReferences: function ( dropValue ) {\n\t\t\tthis._recreateReferences(); // FIXME: Should not be necessary if _setOption would do the right thing for values\n\t\t\treturn this._referencesListview.stopEditing( dropValue );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {boolean} [dropValue=false]\n\t\t */\n\t\t_stopEditingQualifiers: function ( dropValue ) {\n\t\t\tvar snaklistviews,\n\t\t\t\ti;\n\n\t\t\tsnaklistviews = this._qualifiers.value();\n\n\t\t\tif ( snaklistviews.length ) {\n\t\t\t\tfor ( i = 0; i < snaklistviews.length; i++ ) {\n\t\t\t\t\tsnaklistviews[ i ].stopEditing( dropValue );\n\n\t\t\t\t\tif ( dropValue && !snaklistviews[ i ].value() ) {\n\t\t\t\t\t\t// Remove snaklistview from qualifier listview if no snakviews are left in\n\t\t\t\t\t\t// that snaklistview:\n\t\t\t\t\t\tthis._qualifiers.removeItem( snaklistviews[ i ].element );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Destroy and (if qualifiers still exist) re-create the qualifier listview in order to\n\t\t\t// re-group the qualifiers by their property. This will also send out the event to erase\n\t\t\t// the \"add qualifier\" toolbar.\n\t\t\tthis._destroyQualifiersListView();\n\n\t\t\tvar qualifiers = this.options.value ? this.options.value.getClaim().getQualifiers() : [];\n\n\t\t\tif ( qualifiers.length > 0 ) {\n\t\t\t\t// Refill the qualifier listview with the initial (or new initial) qualifiers:\n\t\t\t\tthis._createQualifiersListview( qualifiers );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tif ( this._mainSnakSnakView ) {\n\t\t\t\t\tthis._mainSnakSnakView.option( key, value );\n\t\t\t\t}\n\t\t\t\tif ( this._qualifiers ) {\n\t\t\t\t\tthis._qualifiers.option( key, value );\n\t\t\t\t}\n\t\t\t\tif ( this._rankSelector ) {\n\t\t\t\t\tthis._rankSelector.option( key, value );\n\t\t\t\t}\n\t\t\t\tif ( this._referencesListview ) {\n\t\t\t\t\tthis._referencesListview.option( key, value );\n\t\t\t\t}\n\t\t\t\tthis._referenceAdder[ value ? 'disable' : 'enable' ]();\n\t\t\t}\n\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tthis.element.toggleClass( 'wb-new', value === null );\n\n\t\t\t\tif ( value !== null ) {\n\t\t\t\t\tif ( value.getClaim().getGuid() ) {\n\t\t\t\t\t\tthis.element.addClass( 'wikibase-statement-' + value.getClaim().getGuid() );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._mainSnakSnakView ) {\n\t\t\t\t\t\tthis._mainSnakSnakView.option( key, value.getClaim().getMainSnak() );\n\t\t\t\t\t}\n\t\t\t\t\tif ( this._qualifiers ) {\n\t\t\t\t\t\tthis._qualifiers.option( key, value.getClaim().getQualifiers().getGroupedSnakLists() );\n\t\t\t\t\t}\n\t\t\t\t\tif ( this._rankSelector ) {\n\t\t\t\t\t\tthis._rankSelector.option( key, value.getRank() );\n\t\t\t\t\t}\n\t\t\t\t\tif ( this._referencesListview ) {\n\t\t\t\t\t\tthis._referencesListview.option( key, value.getReferences().toArray() );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tthis._mainSnakSnakView.focus();\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/jquery.wikibase.wbtooltip.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":14,"column":null,"nodeType":"Block","endLine":14,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":21,"column":null,"nodeType":"Block","endLine":21,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":27,"column":null,"nodeType":"Block","endLine":27,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in namepath: afterhide:","line":31,"column":null,"nodeType":"Block","endLine":31,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":164,"column":3,"nodeType":"Block","endLine":169,"endColumn":6},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"triggers\".","line":262,"column":null,"nodeType":"Block","endLine":262,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"TODO:\".","line":283,"column":null,"nodeType":"Block","endLine":283,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":290,"column":3,"nodeType":"Block","endLine":292,"endColumn":6}],"errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\n\t'use strict';\n\n\tvar PARENT = $.Widget;\n\n\t/**\n\t * Tooltip widget enhancing jQuery.tipsy.\n\t *\n\t * @option content {string|jQuery|Error} The tooltip balloon's content.\n\t *         (REQUIRED)\n\t *\n\t * @option permanent {boolean} Whether the tooltip shall be visible permanently (only closing with a\n\t *         click outside of it) or when hovering.\n\t *         Default: false\n\t *\n\t * @option gravity {string} Two-letter string consisting out of a combination of the letter 'n', 's'\n\t *         and 'e', 'w'. This specifies the direction the tooltip balloon will be anchored to. The\n\t *         direction is to be specified assuming an left-to-right context and is mirrored when\n\t *         detecting an RTL context.\n\t *         Default: 'nw'\n\t *\n\t * @option $anchor {jQuery} An anchor where the tooltip's tip shall point on. By default (null), it\n\t *         is the node the tooltip widget is initialized on.\n\t *         Default: null\n\t *\n\t * @event afterhide: Triggered after the tooltip has been hidden.\n\t *        (1) jQuery.Event\n\t */\n\t$.widget( 'wikibase.wbtooltip', PARENT, {\n\t\t/**\n\t\t * Options.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\toptions: {\n\t\t\tcontent: null,\n\t\t\tpermanent: false,\n\t\t\tgravity: 'nw',\n\t\t\t$anchor: null\n\t\t},\n\n\t\t/**\n\t\t * Tipsy tooltip plugin object.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t_tipsy: null,\n\n\t\t/**\n\t\t * @see jQuery.Widget._create\n\t\t * @throws {Error} when no content has been specified in the options.\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this;\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( typeof this.options.content === 'string' ) {\n\t\t\t\t// Tipsy, in general, makes use of the \"title\" attribute. Therefore, when setting a\n\t\t\t\t// plain string as content, just assign it to the \"title\" attribute:\n\t\t\t\tthis.element.attr( 'title', this.options.content );\n\t\t\t} else {\n\t\t\t\t// Init Tipsy with some placeholder since the tooltip message would not show without the\n\t\t\t\t// title attribute being set. However, setting a complex HTML structure cannot be done\n\t\t\t\t// via the title tag, so, the content is stored in a custom variable that will be\n\t\t\t\t// injected when the message is about to get displayed.\n\t\t\t\tthis.element.attr( 'title', '.' );\n\t\t\t}\n\n\t\t\t// Flip horizontal gravity when in RTL context:\n\t\t\tvar gravity = this._evaluateGravity( this.options.gravity );\n\n\t\t\t// Init tipsy:\n\t\t\tif ( !this.element.data( 'tipsy' ) ) {\n\t\t\t\tthis.element.tipsy( {\n\t\t\t\t\tgravity: gravity,\n\t\t\t\t\ttrigger: 'manual', // Prevent Tipsy's native hover handling.\n\t\t\t\t\thtml: true\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\t// If Tipsy is initialised already, just overwrite the gravity:\n\t\t\t\tthis.element.data( 'tipsy' ).options.gravity = gravity;\n\t\t\t}\n\n\t\t\tthis._tipsy = this.element.data( 'tipsy' );\n\n\t\t\tthis.element.addClass( this.widgetFullName );\n\n\t\t\tif ( !this.options.permanent ) {\n\t\t\t\tthis.element\n\t\t\t\t.off( '.' + this.widgetName )\n\t\t\t\t.on( 'mouseenter.' + this.widgetName, function ( event ) {\n\t\t\t\t\tself.show();\n\t\t\t\t} )\n\t\t\t\t.on( 'mouseleave.' + this.widgetName, function ( event ) {\n\t\t\t\t\tself.hide();\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Reposition tooltip when resizing the browser window:\n\t\t\t$( window )\n\t\t\t.off( '.' + this.widgetName ) // Never need that event more than once.\n\t\t\t.on( 'resize.' + this.widgetName, function ( event ) {\n\t\t\t\t$( ':' + self.widgetFullName ).each( function ( i, node ) {\n\t\t\t\t\tvar tooltip = $( node ).data( self.widgetName );\n\n\t\t\t\t\tif ( tooltip\n\t\t\t\t\t\t&& tooltip._tipsy.$tip\n\t\t\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\t\t\t&& tooltip._tipsy.$tip.is( ':visible' )\n\t\t\t\t\t\t&& tooltip.option( 'permanent' )\n\t\t\t\t\t) {\n\t\t\t\t\t\ttooltip._tipsy.$tip.hide();\n\t\t\t\t\t\t// Trigger show() to reposition:\n\t\t\t\t\t\t// TODO: Implement option to show tooltip without a fade animation to prevent\n\t\t\t\t\t\t//  flickering.\n\t\t\t\t\t\ttooltip.show( tooltip._permanent );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis._tipsy.tip().remove();\n\t\t\tthis.element.off( 'mouseenter.' + this.widgetName + ' mouseleave.' + this.widgetName );\n\t\t\tthis.element.removeData( 'tipsy' );\n\t\t\tthis._tipsy = null;\n\n\t\t\t// Detach window event handler if no widget instances are left:\n\t\t\tif ( $( ':' + this.widgetFullName ).length === 0 ) {\n\t\t\t\t$( window ).off( '.' + this.widgetName );\n\t\t\t}\n\n\t\t\tPARENT.prototype.destroy.apply( this, arguments );\n\t\t},\n\n\t\t/**\n\t\t * Hides the tooltip balloon and destroys the tooltip object afterwards.\n\t\t *\n\t\t * @param {boolean} [remove] Whether to remove the tooltip's node from the DOM.\n\t\t */\n\t\tdegrade: function ( remove ) {\n\t\t\tvar self = this;\n\n\t\t\tthis.element.one( 'wbtooltipafterhide', function ( event ) {\n\t\t\t\tself.destroy();\n\t\t\t\tif ( remove ) {\n\t\t\t\t\tself.element.remove();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.hide();\n\t\t},\n\n\t\t/**\n\t\t * Evaluates a given gravity string according to the language direction flipping the horizontal\n\t\t * gravity in RTL context.\n\t\t *\n\t\t * @param {string} gravity\n\t\t */\n\t\t_evaluateGravity: function ( gravity ) {\n\t\t\tif ( document.documentElement.dir === 'rtl' ) {\n\t\t\t\tif ( gravity.search( /e/ ) !== -1 ) {\n\t\t\t\t\tgravity = gravity.replace( /e/g, 'w' );\n\t\t\t\t} else {\n\t\t\t\t\tgravity = gravity.replace( /w/g, 'e' );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn gravity;\n\t\t},\n\n\t\t/**\n\t\t * Shows the tooltip balloon.\n\t\t */\n\t\tshow: function () {\n\t\t\tvar self = this;\n\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( this._tipsy.$tip && this._tipsy.$tip.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// The native Tipsy tooltip does not allow jQuery nodes to be set as content and when\n\t\t\t// triggering Tipsy's show() method, the $tip is removed from the DOM while the $tips\n\t\t\t// position is also set within the show() method. To work around that, we trigger showing\n\t\t\t// the tooltip before filling it with content and cache the initial position.\n\t\t\t// TODO: This is not the most elegant solution since the $tip might reach out of the\n\t\t\t// viewport.\n\t\t\t// The DOM content needs to be cloned since IE8 will lose the reference to the DOM content\n\t\t\t// when the inner HTML is removed within tipsy's native show() method.\n\t\t\tvar content = null;\n\n\t\t\tif ( this.options.content instanceof $ ) {\n\t\t\t\tcontent = this.options.content.clone( true, true );\n\t\t\t}\n\n\t\t\t// If a tooltip anchor is specified, use that for positioning the tip by overwriting the\n\t\t\t// element referenced by Tipsy. In order for Tipsy's show() method to not abort, the anchor\n\t\t\t// node needs to have the \"title\" attribute set.\n\t\t\tif ( this.options.$anchor ) {\n\t\t\t\tthis._tipsy.$element = this.options.$anchor;\n\t\t\t\tif ( !this._tipsy.$element.attr( 'title' ) ) {\n\t\t\t\t\tthis._tipsy.$element.attr( 'title', '.' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._tipsy.show();\n\n\t\t\tthis._tipsy.$tip.addClass( this.widgetFullName + '-tip' );\n\n\t\t\tvar offset = this._tipsy.$tip.offset(),\n\t\t\t\theight = this._tipsy.$tip.height();\n\n\t\t\tif ( this.options.content.code ) {\n\t\t\t\t// Content is an error object.\n\t\t\t\tthis._tipsy.tip().addClass( 'wb-error' );\n\n\t\t\t\t// If not re-constructed on showing, click event on inner element (e.g. Details link)\n\t\t\t\t// will be lost.\n\t\t\t\tcontent = this._buildErrorTooltip();\n\t\t\t}\n\n\t\t\tif ( this.options.permanent ) {\n\t\t\t\t// Hide error tooltip when clicking outside of it by suppressing clicks on the $tip from\n\t\t\t\t// bubbling:\n\t\t\t\tthis._tipsy.tip().on( 'mousedown.' + this.widgetName, function ( event ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t} );\n\n\t\t\t\t$( window ).one( 'mousedown.' + this.widgetName, function ( event ) {\n\t\t\t\t\t// Tipsy might be destroyed already.\n\t\t\t\t\tif ( self._tipsy ) {\n\t\t\t\t\t\tself.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( typeof this.options.content !== 'string' ) {\n\t\t\t\tthis._tipsy.tip().find( '.tipsy-inner' ).empty().append( content );\n\t\t\t}\n\n\t\t\t// Reposition $tip since Tipsy evaluated the position before we filled it with DOM content:\n\t\t\tif ( this._tipsy.options.gravity.charAt( 0 ) === 's' ) {\n\t\t\t\tthis._tipsy.$tip.offset(\n\t\t\t\t\t{ top: offset.top - this._tipsy.$tip.height() + height, left: offset.left }\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Hides the tooltip balloon.\n\t\t *\n\t\t * @triggers afterhide\n\t\t */\n\t\thide: function () {\n\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\tif ( !this._tipsy || !this._tipsy.$tip || !this._tipsy.$tip.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._tipsy.tip().off( '.' + this.widgetName );\n\t\t\tthis._tipsy.hide();\n\n\t\t\t// TODO: Implement afterHide properly to be called within some callback of tipsy.hide() or\n\t\t\t// (probably) overwrite tipsy's hide().\n\t\t\tthis._trigger( 'afterhide' );\n\t\t},\n\n\t\t/**\n\t\t * Constructs the DOM structure displayed within an error tooltip.\n\t\t *\n\t\t * @return {jQuery}\n\t\t *\n\t\t * @TODO: Error tooltip should be a separate tooltip derivative.\n\t\t */\n\t\t_buildErrorTooltip: function () {\n\t\t\treturn wb.buildErrorOutput( this.options.content )\n\t\t\t\t.addClass( this.widgetFullName + '-error' );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.option\n\t\t */\n\t\toption: function ( key, value ) {\n\t\t\tif ( key === 'gravity' ) {\n\t\t\t\t// Consider language direction:\n\t\t\t\tvalue = this._evaluateGravity( value );\n\t\t\t}\n\t\t\treturn PARENT.prototype.option.call( this, key, value );\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.SnakTypeSelector.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'event' is already declared in the upper scope on line 66 column 43.","line":83,"column":30,"nodeType":"Identifier","messageId":"noShadow","endLine":83,"endColumn":35},{"ruleId":"no-shadow","severity":1,"message":"'event' is already declared in the upper scope on line 66 column 43.","line":90,"column":37,"nodeType":"Identifier","messageId":"noShadow","endLine":90,"endColumn":42}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar PARENT = $.Widget,\n\t\tvariations = require( './snakview.variations.js' );\n\n\t/**\n\t * Selector for choosing a `Snak` type offering to select from a list of all `Snak` types which\n\t * a `Variation` is registered for and, thus, can be displayed by a\n\t * `jQuery.wikibase.snakview`.\n\t * Because of being tightly bound to the `variations`, the widget is\n\t * considered part of the `jQuery.wikibase.snakview` rather than being a stand-alone widget.\n\t *\n\t * @see jQuery.wikibase.snakview\n\t * @see datamodel.Snak\n\t * @class jQuery.wikibase.snakview.SnakTypeSelector\n\t * @extends jQuery.Widget\n\t * @license GPL-2.0-or-later\n\t * @author H. Snater < mediawiki@snater.com >\n\t * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n\t *\n\t * @constructor\n\t */\n\t/**\n\t * @event change\n\t * Triggered when the `Snak` type changed.\n\t * @param {jQuery.Event} event\n\t */\n\t$.widget( 'wikibase.SnakTypeSelector', PARENT, {\n\t\t/**\n\t\t * @property {jQuery}\n\t\t * @private\n\t\t */\n\t\t_$icon: null,\n\n\t\t/**\n\t\t * @property {jQuery.ui.menu}\n\t\t * @private\n\t\t */\n\t\t_menu: null,\n\n\t\t/**\n\t\t * The function for removing global event listeners, if there are any. Empty function if\n\t\t * no gloabel event listeners are registered.\n\t\t *\n\t\t * @property {Function}\n\t\t * @private\n\t\t */\n\t\t_unbindGlobalListenersFn: function () {},\n\n\t\t/**\n\t\t * @see jQuery.Widget._create\n\t\t * @protected\n\t\t */\n\t\t_create: function () {\n\t\t\tvar self = this,\n\t\t\t\twidgetName = this.widgetName,\n\t\t\t\t$menu = this._buildMenu().appendTo( document.body ).hide();\n\n\t\t\tthis._menu = $menu.data( 'menu' );\n\n\t\t\tthis._hoverable( this.element );\n\n\t\t\tthis.element\n\t\t\t.addClass( 'ui-state-default ' + this.widgetBaseClass )\n\t\t\t.on( 'click.' + widgetName, function ( event ) {\n\t\t\t\t// don't show menu if selector is disabled!\n\t\t\t\t// otherwise, simply toggle menu's visibility\n\t\t\t\t// TODO: Store visiblity in model\n\t\t\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t\t\tif ( self.options.disabled || $menu.is( ':visible' ) ) {\n\t\t\t\t\t$menu.hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$menu.show();\n\t\t\t\tself.repositionMenu();\n\n\t\t\t\tself.element.addClass( 'ui-state-active' );\n\n\t\t\t\t// close the menu when clicking, regardless of whether the click is performed on the\n\t\t\t\t// menu itself or outside of it:\n\t\t\t\tvar degrade = function ( event ) {\n\t\t\t\t\tif ( event.target !== self.element[ 0 ] ) {\n\t\t\t\t\t\t$menu.hide();\n\t\t\t\t\t\tself.element.removeClass( 'ui-state-active' );\n\t\t\t\t\t}\n\t\t\t\t\tself._unbindGlobalListenersFn();\n\t\t\t\t};\n\t\t\t\tvar repositionMenu = function ( event ) {\n\t\t\t\t\tself.repositionMenu();\n\t\t\t\t};\n\t\t\t\t// also make this available for destroy() function!\n\t\t\t\tself._unbindGlobalListenersFn = function () {\n\t\t\t\t\t// unbind event after closing menu, explicitly unbind specific handler to\n\t\t\t\t\t// support instantiation of multiple snaktypeselector widgets.\n\t\t\t\t\t$( document ).off( 'mouseup.' + widgetName, degrade );\n\t\t\t\t\t$( window ).off( 'resize.' + widgetName, repositionMenu );\n\t\t\t\t\tself._unbindGlobalListenersFn = function () {};\n\t\t\t\t};\n\t\t\t\t$( document ).on( 'mouseup.' + widgetName, degrade );\n\t\t\t\t$( window ).on( 'resize.' + widgetName, repositionMenu );\n\t\t\t} );\n\n\t\t\tthis._$icon = $( '<span>' )\n\t\t\t\t.addClass( 'ui-icon ui-icon-snaktypeselector' )\n\t\t\t\t.appendTo( this.element );\n\n\t\t\t// listen to clicks; after click on a menu item, select its type as active:\n\t\t\t$menu.on( 'click', function ( event ) {\n\t\t\t\tvar $li = $( event.target ).closest( 'li' ),\n\t\t\t\t\ttype = $li.data( 'snaktypeselector-menuitem-type' );\n\n\t\t\t\tif ( type ) {\n\t\t\t\t\tself._setSnakType( type );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar $menu = this._menu.element;\n\t\t\tthis._menu.destroy();\n\t\t\t$menu.remove();\n\n\t\t\tthis._$icon.remove();\n\n\t\t\tthis.element.removeClass( 'ui-state-default ' + this.widgetBaseClass );\n\n\t\t\t// remove event listeners responsible for closing this instance's menu:\n\t\t\tthis._unbindGlobalListenersFn();\n\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.Widget._setOption\n\t\t * @protected\n\t\t *\n\t\t * @param {string} key\n\t\t * @param {*} value\n\t\t * @return {jQuery.Widget}\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'disabled' && value ) {\n\t\t\t\tthis._menu.element.hide();\n\t\t\t\tthis.element.removeClass( 'ui-state-active' );\n\t\t\t}\n\t\t\treturn PARENT.prototype._setOption.apply( this, arguments );\n\t\t},\n\n\t\t/**\n\t\t * Returns a DOM structure for the selector's menu the `Snak` type can be chosen from.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_buildMenu: function () {\n\t\t\tvar classPrefix = this.widgetBaseClass + '-menuitem-',\n\t\t\t\t$menu = $( '<ul>' ).addClass( this.widgetBaseClass + '-menu' ),\n\t\t\t\tsnakTypes = variations.getCoveredSnakTypes();\n\n\t\t\tsnakTypes.forEach( function ( type ) {\n\t\t\t\t$menu.append(\n\t\t\t\t\t$( '<li>' )\n\t\t\t\t\t.addClass( classPrefix + type ) // type should only be lower case string anyhow!\n\t\t\t\t\t.data( 'snaktypeselector-menuitem-type', type )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$( '<a>' )\n\t\t\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t\t\t// * wikibase-snakview-snaktypeselector-somevalue\n\t\t\t\t\t\t\t// * wikibase-snakview-snaktypeselector-novalue\n\t\t\t\t\t\t\t.text( mw.msg( 'wikibase-snakview-snaktypeselector-' + type ) )\n\t\t\t\t\t\t\t.on( 'click', function ( event ) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} );\n\n\t\t\treturn $menu.menu();\n\t\t},\n\n\t\t/**\n\t\t * Gets the current `Snak` type or sets a new `Snak` type.\n\t\t *\n\t\t * @param {string|null} [snakType]\n\t\t * @return {string|null|undefined}\n\t\t */\n\t\tsnakType: function ( snakType ) {\n\t\t\tif ( snakType === undefined ) {\n\t\t\t\tvar $snakTypeLi = this._menu.element.children( '.ui-state-active' ).first();\n\t\t\t\treturn $snakTypeLi.length\n\t\t\t\t\t? $snakTypeLi.data( 'snaktypeselector-menuitem-type' )\n\t\t\t\t\t: null;\n\t\t\t}\n\t\t\tthis._setSnakType( snakType );\n\t\t},\n\n\t\t/**\n\t\t * Activates a `Snak` type in the menu.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @param {string|null} snakType\n\t\t */\n\t\t_setSnakType: function ( snakType ) {\n\t\t\tif ( this.snakType() === snakType ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._menu.element.children( '.ui-state-active' ).removeClass( 'ui-state-active' );\n\n\t\t\tif ( snakType !== null ) {\n\t\t\t\tvar $snakTypeLi = this._menu.element.children( '.' + this.widgetBaseClass + '-menuitem-' + snakType );\n\t\t\t\t$snakTypeLi.addClass( 'ui-state-active' );\n\t\t\t\tthis._$icon.attr( 'title', $snakTypeLi.text() );\n\t\t\t}\n\n\t\t\tthis._trigger( 'change' );\n\t\t},\n\n\t\t/**\n\t\t * (Re-)aligns the menu.\n\t\t */\n\t\trepositionMenu: function () {\n\t\t\tvar isRtl = $( document.body ).hasClass( 'rtl' );\n\n\t\t\tthis._menu.element.position( {\n\t\t\t\tof: this._$icon,\n\t\t\t\tmy: ( isRtl ? 'right' : 'left' ) + ' top',\n\t\t\t\tat: ( isRtl ? 'left' : 'right' ) + ' bottom',\n\t\t\t\toffset: '0 1',\n\t\t\t\tcollision: 'none'\n\t\t\t} );\n\t\t}\n\t} );\n\n\t$.wikibase.snakview.SnakTypeSelector = $.wikibase.SnakTypeSelector;\n\n\t// We have to override this here because $.widget sets it no matter what's in\n\t// the prototype\n\t$.wikibase.snakview.SnakTypeSelector.prototype.widgetBaseClass = 'wikibase-snaktypeselector';\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.ViewState.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":30,"column":null,"nodeType":"Block","endLine":30,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'PropertyDataTypeStore' is undefined.","line":46,"column":null,"nodeType":"Block","endLine":46,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Variation' is undefined.","line":108,"column":null,"nodeType":"Block","endLine":108,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":341,"column":3,"nodeType":"Block","endLine":346,"endColumn":6},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":415,"column":null,"nodeType":"Block","endLine":415,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":416,"column":null,"nodeType":"Block","endLine":416,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":468,"column":null,"nodeType":"Block","endLine":468,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":469,"column":null,"nodeType":"Block","endLine":469,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Variation' is undefined.","line":555,"column":null,"nodeType":"Block","endLine":555,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":646,"column":3,"nodeType":"Block","endLine":654,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":646,"column":3,"nodeType":"Block","endLine":654,"endColumn":6},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Found more than one @return declaration.","line":679,"column":3,"nodeType":"Block","endLine":690,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"Found more than one @return declaration.","line":679,"column":3,"nodeType":"Block","endLine":690,"endColumn":6}],"errorCount":0,"warningCount":13,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( wb, dv ) {\n\t'use strict';\n\n\t// Back-up components already initialized in the namespace to re-apply them after initializing\n\t// the snakview widget.\n\t$.wikibase = $.wikibase || {};\n\tvar existingSnakview = $.wikibase.snakview || {};\n\n\t// Erase existing object to prevent jQuery.Widget detecting an existing constructor:\n\tdelete $.wikibase.snakview;\n\n\tvar PARENT = $.ui.EditableTemplatedWidget,\n\t\tdatamodel = require( 'wikibase.datamodel' ),\n\t\tViewState = require( './snakview.ViewState.js' ),\n\t\tvariations = require( './snakview.variations.js' ),\n\t\twbserialization = require( 'wikibase.serialization' );\n\n\t/**\n\t * View for displaying and editing `datamodel.Snak` objects.\n\t *\n\t * @see datamodel.Snak\n\t * @class jQuery.wikibase.snakview\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n\t * @author H. Snater < mediawiki@snater.com >\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {Object|datamodel.Snak|null} [options.value]\n\t *        The `Snak` this `snakview` should represent initially. If omitted, an empty view will be\n\t *        served, ready to take some input by the user. The value may be overwritten later, by using\n\t *        the `value()` or the `snak()` function.\n\t *        Default: `{ snaktype: datamodel.PropertyValueSnak.TYPE }`\n\t * @param {Object|boolean} [options.locked=false]\n\t *        Key-value pairs determining which `snakview` elements to lock from being edited by the\n\t *        user. May also be a boolean value enabling/disabling all elements. If `false`, no elements\n\t *        will be locked.\n\t * @param {boolean} [options.autoStartEditing=true]\n\t *        Whether the `snakview` should switch to edit mode automatically upon initialization if its\n\t *        initial value is empty.\n\t * @param {wikibase.entityIdFormatter.EntityIdHtmlFormatter} options.entityIdHtmlFormatter\n\t *        Required for dynamically rendering links to `Entity`s.\n\t * @param {wikibase.entityIdFormatter.EntityIdPlainFormatter} options.entityIdPlainFormatter\n\t *        Required for dynamically rendering plain text references to `Entity`s.\n\t * @param {PropertyDataTypeStore} options.propertyDataTypeStore\n\t *        Required for looking up the Snak's property's data type.\n\t * @param {wikibase.ValueViewBuilder} options.valueViewBuilder\n\t *        Required to interfacing a `snakview` \"value\" `Variation` to `jQuery.valueview`.\n\t * @param {wikibase.dataTypes.DataTypeStore} options.dataTypeStore\n\t *        Required to retrieve and evaluate a proper `wikibase.dataTypes.DataType` object when interacting on\n\t *        a \"value\" `Variation`.\n\t * @param {boolean} [options.drawProperty=true]\n\t *        The `Property` part of the `snakview` is not rendered when `drawProperty` is false.\n\t */\n\t/**\n\t * @event afterstartediting\n\t * Triggered after having started the widget's edit mode.\n\t * @param {jQuery.Event} event\n\t */\n\t/**\n\t * @event afterstopediting\n\t * Triggered after having stopped the widget's edit mode.\n\t * @param {jQuery.Event} event\n\t * @param {boolean} dropValue\n\t */\n\t/**\n\t * @event change\n\t * Triggered whenever the widget's content or status is changed.\n\t * @param {jQuery.Event} event\n\t */\n\t$.widget( 'wikibase.snakview', PARENT, {\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-snakview',\n\t\t\ttemplateParams: [ '', '', '', '' ],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$property: '.wikibase-snakview-property',\n\t\t\t\t$snakValue: '.wikibase-snakview-value',\n\t\t\t\t$snakTypeSelector: '.wikibase-snakview-typeselector'\n\t\t\t},\n\t\t\tvalue: {\n\t\t\t\tsnaktype: datamodel.PropertyValueSnak.TYPE\n\t\t\t},\n\t\t\tlocked: {\n\t\t\t\tproperty: false,\n\t\t\t\tsnaktype: false\n\t\t\t},\n\t\t\tautoStartEditing: true,\n\t\t\tentityIdPlainFormatter: null,\n\t\t\tentityIdHtmlFormatter: null,\n\t\t\tvalueViewBuilder: null,\n\t\t\tdataTypeStore: null,\n\t\t\tdrawProperty: true,\n\t\t\tgetSnakRemover: null,\n\t\t\tpropertyDataTypeStore: null\n\t\t},\n\n\t\t/**\n\t\t * `Variation` object responsible for presenting the essential parts of a certain kind of\n\t\t * `Snak`. May be `null` if an unsupported `Snak` type is represented by the `snakview`. In this\n\t\t * case, the `snakview` won't be able to display the `Snak` but displays an appropriate message\n\t\t * instead.\n\t\t *\n\t\t * @property {Variation|null}\n\t\t * @private\n\t\t */\n\t\t_variation: null,\n\n\t\t/**\n\t\t * Cache for the values of specific `variation`s used to have those\n\t\t * values restored when toggling the `Snak` type.\n\t\t *\n\t\t * @property {Object}\n\t\t * @private\n\t\t */\n\t\t_cachedValues: null,\n\n\t\t/**\n\t\t * Whether then `snakview`'s value is regarded \"valid\" at the moment.\n\t\t *\n\t\t * @property {boolean}\n\t\t * @private\n\t\t */\n\t\t_isValid: false,\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t */\n\t\t_create: function () {\n\t\t\tif ( this.options.locked === true || this.options.locked.property === true ) {\n\t\t\t\tif ( !(\n\t\t\t\t\tthis.options.value instanceof datamodel.Snak || ( this.options.value && this.options.value.property )\n\t\t\t\t) ) {\n\t\t\t\t\tmw.log.warn( 'You cannot lock the property without specifying a property' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._cachedValues = {};\n\n\t\t\tthis.updateVariation();\n\t\t\tthis.updateHash();\n\n\t\t\t// Re-render on previously generated DOM should be avoided. However, when regenerating the\n\t\t\t// whole snakview, every component needs to be drawn.\n\t\t\tvar propertyIsEmpty = !this.$property.contents().length,\n\t\t\t\tsnakValueIsEmpty = !this.$snakValue.contents().length;\n\n\t\t\tif ( propertyIsEmpty && this.options.drawProperty ) {\n\t\t\t\tthis.drawProperty();\n\t\t\t}\n\n\t\t\tif ( snakValueIsEmpty ) {\n\t\t\t\tthis.drawVariation();\n\t\t\t}\n\n\t\t\tif ( this.option( 'autoStartEditing' ) && !this.snak() ) {\n\t\t\t\t// If no Snak is represented, offer UI to build one.\n\t\t\t\t// This clearly implies draw() since it requires visual changes!\n\t\t\t\tthis.startEditing();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t * @protected\n\t\t *\n\t\t * @throws {Error} when trying to set an invalid value.\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tif ( value !== null\n\t\t\t\t\t&& !$.isPlainObject( value )\n\t\t\t\t\t&& !( value instanceof datamodel.Snak )\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error( 'The given value has to be a plain object, an instance of '\n\t\t\t\t\t\t+ 'datamodel.Snak, or null' );\n\t\t\t\t}\n\t\t\t} else if ( key === 'locked' && typeof value === 'boolean' ) {\n\t\t\t\tvar locked = value;\n\t\t\t\tvalue = $.extend( {}, $.wikibase.snakview.prototype.options.locked );\n\t\t\t\tObject.keys( $.wikibase.snakview.prototype.options.locked ).forEach( function ( k ) {\n\t\t\t\t\tvalue[ k ] = locked;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'value' ) {\n\t\t\t\tthis.updateVariation();\n\t\t\t\tthis.draw();\n\t\t\t} else if ( key === 'disabled' ) {\n\t\t\t\tvar propertySelector = this._getPropertySelector(),\n\t\t\t\t\tsnakTypeSelector = this._getSnakTypeSelector();\n\n\t\t\t\tif ( propertySelector ) {\n\t\t\t\t\tpropertySelector.option( 'disabled', key );\n\t\t\t\t}\n\n\t\t\t\tif ( snakTypeSelector ) {\n\t\t\t\t\tsnakTypeSelector.option( 'disabled', key );\n\t\t\t\t}\n\n\t\t\t\tif ( this._snakRemover ) {\n\t\t\t\t\tthis._snakRemover[ value ? 'disable' : 'enable' ]();\n\t\t\t\t}\n\n\t\t\t\tif ( this._variation ) {\n\t\t\t\t\tthis._variation[ value ? 'disable' : 'enable' ]();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * Returns an input element with initialized `entityselector` for selecting entities.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\t_buildPropertySelector: function () {\n\t\t\tvar self = this,\n\t\t\t\trepoConfig = mw.config.get( 'wbRepo' ),\n\t\t\t\trepoApiUrl = repoConfig.url + repoConfig.scriptPath + '/api.php';\n\n\t\t\treturn $( '<input>' ).entityselector( {\n\t\t\t\turl: repoApiUrl,\n\t\t\t\ttype: 'property',\n\t\t\t\tresponseErrorFactory: wb.api.RepoApiError.newFromApiResponse\n\t\t\t} )\n\t\t\t.prop( 'placeholder', mw.msg( 'wikibase-snakview-property-input-placeholder' ) )\n\t\t\t.on( 'eachchange', function ( event, oldValue ) {\n\t\t\t\t// remove out-dated variations\n\t\t\t\tif ( self._variation ) {\n\t\t\t\t\tself.drawSnakTypeSelector();\n\t\t\t\t\tself.updateVariation();\n\t\t\t\t\tself.drawVariation();\n\t\t\t\t\tself._trigger( 'change' );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'entityselectorselected', function ( event, entityId ) {\n\t\t\t\tself._selectProperty();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_selectProperty: function () {\n\t\t\tvar self = this;\n\n\t\t\t// Display spinner as long as the ValueView is loading:\n\t\t\tthis.$snakValue.empty().append(\n\t\t\t\t$.createSpinner( 'small' )\n\t\t\t);\n\n\t\t\t// The \"value\" variation contains experts that depend on the property and value type. Must\n\t\t\t// be recreated when the property changes. Would be better to do this in updateVariation,\n\t\t\t// and only when the value type changes, but at this point we can't find out any more.\n\t\t\tif ( this._variation ) {\n\t\t\t\tthis._variation.destroy();\n\t\t\t\tthis._variation = null;\n\t\t\t}\n\n\t\t\tthis.updateVariation();\n\t\t\tthis.drawSnakTypeSelector();\n\n\t\t\t// Since it might take a while for the value view to gather its data from the API,\n\t\t\t// the property might not be valid anymore aborting the rendering of the value\n\t\t\t// view.\n\t\t\tif ( this._variation ) {\n\t\t\t\t$( this._variation ).one( 'afterstartediting', function () {\n\t\t\t\t\tself._variation.focus();\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.drawVariation();\n\n\t\t\tthis._trigger( 'change' );\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdestroy: function () {\n\t\t\tif ( this._snakRemover ) {\n\t\t\t\tthis._snakRemover.destroy();\n\t\t\t\tthis._snakRemover = null;\n\t\t\t}\n\t\t\tvar snakTypeSelector = this._getSnakTypeSelector();\n\t\t\tif ( snakTypeSelector ) {\n\t\t\t\tsnakTypeSelector.destroy();\n\t\t\t\tsnakTypeSelector.element.remove();\n\t\t\t}\n\t\t\t$.Widget.prototype.destroy.call( this );\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\tvar deferred = $.Deferred();\n\t\t\tif ( this.options.getSnakRemover ) {\n\t\t\t\tthis._snakRemover = this.options.getSnakRemover( this.element );\n\t\t\t}\n\n\t\t\tif ( this._variation ) {\n\t\t\t\t$( this._variation ).one( 'afterstartediting', function () {\n\t\t\t\t\tdeferred.resolve();\n\t\t\t\t} );\n\t\t\t\tthis.draw();\n\t\t\t\tthis._variation.startEditing();\n\t\t\t} else {\n\t\t\t\tthis.draw();\n\t\t\t\tdeferred.resolve();\n\t\t\t}\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tfocus: function () {\n\t\t\tif ( this._variation && this._variation.isFocusable() ) {\n\t\t\t\tthis._variation.focus();\n\t\t\t} else {\n\t\t\t\tvar propertySelector = this._getPropertySelector();\n\t\t\t\tif ( propertySelector ) {\n\t\t\t\t\tpropertySelector.element.trigger( 'focus' );\n\t\t\t\t} else {\n\t\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Stops the widget's edit mode.\n\t\t *\n\t\t * @param {boolean} [dropValue=false] If `true`, the widget's value will be reset to the one\n\t\t *        from before edit mode was started.\n\t\t */\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tif ( this._snakRemover ) {\n\t\t\t\tthis._snakRemover.destroy();\n\t\t\t\tthis._snakRemover = null;\n\t\t\t}\n\n\t\t\tif ( this._variation ) {\n\t\t\t\tthis._variation.stopEditing( dropValue );\n\t\t\t}\n\t\t\tthis.drawSnakTypeSelector();\n\n\t\t\tthis.element.off( 'keydown.' + this.widgetName );\n\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t},\n\n\t\t/**\n\t\t * Updates this `snakview`'s status.\n\t\t *\n\t\t * @param {string} status May either be 'valid' or 'invalid'\n\t\t */\n\t\tupdateStatus: function ( status ) {\n\t\t\tif ( status === 'valid' ) {\n\t\t\t\tthis._isValid = true;\n\t\t\t} else if ( status === 'invalid' ) {\n\t\t\t\tthis._isValid = false;\n\t\t\t}\n\t\t\tif ( this._variation ) {\n\t\t\t\tthis._trigger( 'change' );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the `entityselector` for choosing the `Snak`'s `Property`. Returns `null` if the\n\t\t * `Snak` is created and has a `Property` already. (Once created, the `Property` is immutable.)\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @return {jQuery.wikibase.entityselector|null}\n\t\t */\n\t\t_getPropertySelector: function () {\n\t\t\tif ( this.$property ) {\n\t\t\t\treturn this.$property.children().first().data( 'entityselector' ) || null;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\n\t\t/**\n\t\t * Returns the `snaktypeselector` for choosing the `Snak`'s type. Returns `null` if the `Snak`\n\t\t * is created and has a `Property` already. (Once created, the `Property` is immutable.)\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @return {jQuery.wikibase.snakview.SnakTypeSelector|null}\n\t\t */\n\t\t_getSnakTypeSelector: function () {\n\t\t\tif ( this.$snakTypeSelector ) {\n\t\t\t\treturn this.$snakTypeSelector.children().first().data( 'snaktypeselector' ) || null;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\n\t\t/**\n\t\t * Returns an object representing the currently displayed `Snak`. This is equivalent to the JSON\n\t\t * structure of a `Snak`, except that it does not have to be complete. For example, for a\n\t\t * `PropertyValueSnak` where only the `Property` and `Snak` type are specified, but the value\n\t\t * has not yet been supplied, the returned object would not have a field for the value either.\n\t\t *\n\t\t * @param {Object|datamodel.Snak|null} [value]\n\t\t * @return {datamodel.Snak|Object|undefined} `undefined` in case `value()` is called to\n\t\t *         set the value.\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value !== undefined ) {\n\t\t\t\tthis.option( 'value', value );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar snakSerializer = new wbserialization.SnakSerializer(),\n\t\t\t\tserialization = this.options.value instanceof datamodel.Snak\n\t\t\t\t\t? snakSerializer.serialize( this.options.value )\n\t\t\t\t\t: this.options.value;\n\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\treturn serialization;\n\t\t\t}\n\n\t\t\tvalue = {};\n\n\t\t\tif ( this.options.locked.property && serialization.property !== undefined ) {\n\t\t\t\tvalue.property = serialization.property;\n\t\t\t} else if ( !this.options.locked.property ) {\n\t\t\t\tvar propertyStub = this._getSelectedProperty();\n\n\t\t\t\tif ( propertyStub && propertyStub.id !== undefined ) {\n\t\t\t\t\tvalue.property = propertyStub.id;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( this.options.locked.snaktype && serialization.snaktype !== undefined ) {\n\t\t\t\tvalue.snaktype = serialization.snaktype;\n\t\t\t} else if ( !this.options.locked.snaktype ) {\n\t\t\t\tvar snakTypeSelector = this._getSnakTypeSelector(),\n\t\t\t\t\tsnakType = snakTypeSelector && snakTypeSelector.snakType();\n\t\t\t\tif ( snakType ) {\n\t\t\t\t\tvalue.snaktype = snakType;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( serialization.hash ) {\n\t\t\t\tvalue.hash = serialization.hash;\n\t\t\t}\n\n\t\t\treturn this._variation ? $.extend( this._variation.value(), value ) : value;\n\t\t},\n\n\t\t/**\n\t\t * If a `datamodel.Snak` instance is passed, the `snakview` is updated to represent the\n\t\t * `Snak`. If no parameter is supplied, the current `Snak` represented by the `snakview` is\n\t\t * returned.\n\t\t *\n\t\t * @param {datamodel.Snak|null} [snak]\n\t\t * @return {datamodel.Snak|null|undefined}\n\t\t */\n\t\tsnak: function ( snak ) {\n\t\t\tif ( snak !== undefined ) {\n\t\t\t\tthis.value( snak || {} );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !this._isValid ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar value = this.value();\n\t\t\tif ( value.datavalue instanceof dv.DataValue ) {\n\t\t\t\tvalue.datavalue = {\n\t\t\t\t\ttype: value.datavalue.getType(),\n\t\t\t\t\tvalue: value.datavalue.toJSON()\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar snakDeserializer = new wbserialization.SnakDeserializer();\n\t\t\ttry {\n\t\t\t\treturn snakDeserializer.deserialize( value );\n\t\t\t} catch ( e ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Sets/Gets the ID of the `Property` for the `Snak` represented by the `snakview`. If no\n\t\t * `Property` is set, `null` is returned.\n\t\t *\n\t\t * @since 0.3 (setter since 0.4)\n\t\t *\n\t\t * @param {string|null} [propertyId]\n\t\t * @return {string|null|undefined}\n\t\t */\n\t\tpropertyId: function ( propertyId ) {\n\t\t\tif ( propertyId === undefined ) {\n\t\t\t\treturn this.value().property || null;\n\t\t\t} else {\n\t\t\t\tvar value = this.value();\n\n\t\t\t\tif ( propertyId !== value.property ) {\n\t\t\t\t\tif ( propertyId === null ) {\n\t\t\t\t\t\tdelete value.property;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue.property = propertyId;\n\t\t\t\t\t}\n\t\t\t\t\tthis.option( 'value', value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Sets/Gets the ID of the `Snak` type for the `Snak` represented by the `snakview`. If no\n\t\t * `Snak` type is set, `null` is returned.\n\t\t *\n\t\t * @see datamodel.Snak.TYPE\n\t\t *\n\t\t * @param {string|null} [snakType]\n\t\t * @return {string|null|undefined}\n\t\t */\n\t\tsnakType: function ( snakType ) {\n\t\t\tvar value = this.value();\n\n\t\t\tif ( snakType === undefined ) {\n\t\t\t\treturn value.snaktype || null;\n\t\t\t} else if ( snakType === value.snaktype ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( snakType === null ) {\n\t\t\t\tdelete value.snaktype;\n\t\t\t} else {\n\t\t\t\t// TODO: check whether given snak type is actually valid!\n\t\t\t\tvalue.snaktype = snakType;\n\t\t\t}\n\n\t\t\tthis.option( 'value', value );\n\t\t},\n\n\t\t/**\n\t\t * Returns the `snakview`'s `Variation` object required for presenting the current `Snak` type.\n\t\t * If a `Snak` type has not been defined yet, `null` is returned.\n\t\t *\n\t\t * @return {Variation|null}\n\t\t */\n\t\tvariation: function () {\n\t\t\treturn this._variation;\n\t\t},\n\n\t\t/**\n\t\t * Updates the `Variation` according to the widget's current value.\n\t\t */\n\t\tupdateVariation: function () {\n\t\t\tvar value = this.value(),\n\t\t\t\tpropertyId = value ? value.property : null,\n\t\t\t\tsnakType = value ? value.snaktype : null,\n\t\t\t\tVariationConstructor = snakType ? variations.getVariation( snakType ) : null;\n\n\t\t\tthis._setDataTypeForSelectedProperty();\n\n\t\t\tif ( this._variation\n\t\t\t\t&& ( !propertyId || this._variation.constructor !== VariationConstructor )\n\t\t\t) {\n\t\t\t\tvar variationValue = this._variation.value();\n\n\t\t\t\tif ( variationValue.datavalue ) {\n\t\t\t\t\tvariationValue.datavalue = {\n\t\t\t\t\t\ttype: variationValue.datavalue.getType(),\n\t\t\t\t\t\tvalue: variationValue.datavalue.toJSON()\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis._cachedValues[ this._variation.variationSnakConstructor.TYPE ] = variationValue;\n\n\t\t\t\tthis.$snakValue.empty();\n\n\t\t\t\t// clean destruction of old variation in case variation will change or property not set\n\t\t\t\tthis._variation.destroy();\n\t\t\t\tthis._variation = null;\n\t\t\t}\n\n\t\t\tif ( !this._variation && propertyId && VariationConstructor ) {\n\t\t\t\t// Snak type has changed so we need another variation Object!\n\t\t\t\tthis._variation = new VariationConstructor(\n\t\t\t\t\tnew ViewState( this ),\n\t\t\t\t\tthis.$snakValue,\n\t\t\t\t\tthis.options.propertyDataTypeStore,\n\t\t\t\t\tthis.options.valueViewBuilder,\n\t\t\t\t\tthis.options.dataTypeStore\n\t\t\t\t);\n\n\t\t\t\tif ( !value.datavalue\n\t\t\t\t\t&& this._cachedValues[ snakType ] && this._cachedValues[ snakType ].datavalue\n\t\t\t\t) {\n\t\t\t\t\tvalue.datavalue = $.extend( {}, this._cachedValues[ snakType ].datavalue );\n\t\t\t\t}\n\n\t\t\t\t// Update Variation with fields not directly managed by the snakview. If necessary\n\t\t\t\t// within the Variation, those fields should be accessed via the Variation's\n\t\t\t\t// ViewState object.\n\t\t\t\tvar serializationCopy = $.extend( {}, value );\n\t\t\t\tdelete serializationCopy.property;\n\t\t\t\tdelete serializationCopy.snaktype;\n\t\t\t\tthis._variation.value( serializationCopy );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * (Re-)renders the widget.\n\t\t */\n\t\tdraw: function () {\n\t\t\tthis.updateHash();\n\t\t\tthis.drawProperty();\n\t\t\tthis.drawSnakTypeSelector();\n\t\t\tthis.drawVariation();\n\t\t},\n\n\t\t/**\n\t\t * Updates the class list of the DOM element\n\t\t * to contain the right wikibase-snakview-{hash} class if a hash is configured,\n\t\t * and no other wikibase-snakview-{otherHash} classes.\n\t\t */\n\t\tupdateHash: function () {\n\t\t\tvar hash;\n\t\t\tthis.element.removeClass( function ( index, className ) {\n\t\t\t\tvar matches = className.match( /\\bwikibase-snakview-([0-9a-fA-F]{40})?(\\s|$)/g );\n\t\t\t\treturn matches ? matches.join( ' ' ) : '';\n\t\t\t} );\n\t\t\thash = this.snak() && this.snak().getHash();\n\t\t\tif ( hash ) {\n\t\t\t\tthis.element.addClass( 'wikibase-snakview-' + hash );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * (Re-)renders the Property DOM structure according to the current value. The `Property` DOM\n\t\t * is not (re-)rendered if changing the `Property` is locked via the `locked` option and\n\t\t * previously generated HTML is detected.\n\t\t *\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {Function} return.fail\n\t\t */\n\t\tdrawProperty: function () {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\tpropertyId = this.value().property;\n\n\t\t\tif ( this.options.locked.property\n\t\t\t\t&& ( this.$property.contents().length || !this.options.drawProperty )\n\t\t\t) {\n\t\t\t\treturn deferred.resolve().promise();\n\t\t\t}\n\n\t\t\tthis._getPropertyDOM( propertyId )\n\t\t\t.done( function ( $property ) {\n\t\t\t\tself.$property.empty().append( $property );\n\t\t\t\tdeferred.resolve();\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\tself.$property.empty().text( propertyId );\n\t\t\t\tdeferred.reject();\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Retrieves the DOM structure representing the `Property` of the `Snak` represented by the\n\t\t * `snakview`.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @param {string} [propertyId]\n\t\t * @return {Object} jQuery.Promise\n\t\t * @return {Function} return.done\n\t\t * @return {jQuery} return.$property\n\t\t * @return {Function} return.fail\n\t\t */\n\t\t_getPropertyDOM: function ( propertyId ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\teditable = !this.options.locked.property && this.isInEditMode();\n\n\t\t\tif ( !propertyId ) {\n\t\t\t\tif ( editable ) {\n\t\t\t\t\tdeferred.resolve( this._createPropertyDOM( '' ) );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolve( '' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( editable ) {\n\t\t\t\t\tthis.options.entityIdPlainFormatter.format( propertyId ).done( function ( propertyLabel ) {\n\t\t\t\t\t\tdeferred.resolve( self._createPropertyDOM( propertyLabel ) );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t// Property is set already and cannot be changed, display label only:\n\t\t\t\t\treturn this.options.entityIdHtmlFormatter.format( propertyId );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * Creates the DOM structure specific for a `Property`, a generic DOM\n\t\t * structure or an input element.\n\t\t *\n\t\t * @private\n\t\t *\n\t\t * @param {string} propertyLabel Rendered label for the `Property`\n\t\t * @return {jQuery|null}\n\t\t */\n\t\t_createPropertyDOM: function ( propertyLabel ) {\n\t\t\tvar $propertyDom;\n\n\t\t\t// No Property set for this Snak, serve edit view to specify it:\n\t\t\tvar propertySelector = this._getPropertySelector();\n\n\t\t\t// TODO: use selectedEntity() or other command to set selected entity in both cases!\n\t\t\tif ( propertySelector ) {\n\t\t\t\t// property selector in DOM already, just replace current value\n\t\t\t\tvar currentValue = propertySelector.widget().val();\n\t\t\t\t// Impose case-insensitivity:\n\t\t\t\tif ( propertyLabel.toLowerCase() !== currentValue.toLocaleLowerCase() ) {\n\t\t\t\t\tpropertySelector.widget().val( propertyLabel );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$propertyDom = this._buildPropertySelector().val( propertyLabel );\n\n\t\t\t\t// propagate snakview state:\n\t\t\t\t$propertyDom.data( 'entityselector' ).option( 'disabled', this.options.disabled );\n\t\t\t}\n\t\t\treturn $propertyDom;\n\t\t},\n\n\t\t/**\n\t\t * Updates the `SnakTypeSelector` for choosing the `Snak` type. The `SnakTypeSelector` DOM\n\t\t * is not (re-)rendered if changing the `Snak` type is locked via the `locked` option and\n\t\t * previously generated HTML is detected.\n\t\t */\n\t\tdrawSnakTypeSelector: function () {\n\t\t\tif ( this.options.locked.snaktype && this.$snakTypeSelector.contents().length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar snakTypes = variations.getCoveredSnakTypes(),\n\t\t\t\tselector = this._getSnakTypeSelector();\n\n\t\t\tif ( !this.isInEditMode()\n\t\t\t\t|| snakTypes.length <= 1\n\t\t\t\t|| this.options.locked.snaktype\n\t\t\t) {\n\t\t\t\tif ( selector ) {\n\t\t\t\t\tselector.destroy();\n\t\t\t\t}\n\t\t\t\tthis.$snakTypeSelector.empty();\n\t\t\t\treturn; // No type selector required!\n\t\t\t}\n\n\t\t\tvar snakType = this.options.value instanceof datamodel.Snak\n\t\t\t\t? this.options.value.getType()\n\t\t\t\t: this.options.value.snaktype;\n\n\t\t\tif ( selector ) {\n\t\t\t\t// mark current Snak type as chosen one in the menu:\n\t\t\t\tselector.snakType( snakType );\n\t\t\t} else {\n\t\t\t\tvar $selector = this._buildSnakTypeSelector( snakType );\n\t\t\t\tthis.$snakTypeSelector.empty().append( $selector );\n\t\t\t\tselector = $selector.data( 'snaktypeselector' );\n\t\t\t}\n\n\t\t\t// only show selector if a property is chosen:\n\t\t\tthis.$snakTypeSelector[ ( this.value().property ? 'show' : 'hide' ) ]();\n\n\t\t\t// propagate snakview state:\n\t\t\tselector.option( 'disabled', this.options.disabled );\n\t\t},\n\n\t\t/**\n\t\t * Renders the `Variation` or placeholder text if no proper `Variation` is available.\n\t\t */\n\t\tdrawVariation: function () {\n\t\t\t// property ID will be null if not in edit mode and no Snak set or if in edit mode and user\n\t\t\t// didn't choose property yet.\n\t\t\tvar self = this,\n\t\t\t\tvalue = this.value(),\n\t\t\t\tpropertyId = value ? value.property : null;\n\n\t\t\tif ( propertyId && this._variation ) {\n\t\t\t\t$( this._variation ).one( 'afterdraw', function () {\n\t\t\t\t\tif ( self.isInEditMode() ) {\n\t\t\t\t\t\tself.variation().startEditing();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tthis.variation().draw();\n\t\t\t} else {\n\t\t\t\t// remove any remains from previous rendering or initial template (e.g. '$4')\n\t\t\t\tthis.$snakValue.empty();\n\n\t\t\t\tif ( propertyId ) {\n\t\t\t\t\t// property ID selected but apparently no variation available to handle it\n\t\t\t\t\t$( '<span>' ).text( mw.msg( 'wikibase-snakview-choosesnaktype' ) )\n\t\t\t\t\t.addClass( this.widgetBaseClass + '-unsupportedsnaktype' )\n\t\t\t\t\t.appendTo( this.$snakValue );\n\t\t\t\t\t// NOTE: instead of doing this here and checking everywhere whether this._variation\n\t\t\t\t\t//  is set, we could as well use variations for displaying system messages like\n\t\t\t\t\t//  this, e.g. having a UnsupportedSnakType variation which is not registered for a\n\t\t\t\t\t//  specific snak type but is known to updateVariation().\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t *\n\t\t * @param {string|null} snakType\n\t\t * @return {jQuery}\n\t\t */\n\t\t_buildSnakTypeSelector: function ( snakType ) {\n\t\t\tvar self = this,\n\t\t\t\t$anchor = $( '<span>' ),\n\t\t\t\t// initiate snak type selector widget which is a normal widget just without a\n\t\t\t\t// jQuery.widget.bridge...\n\t\t\t\tselector = new $.wikibase.snakview.SnakTypeSelector( {}, $anchor );\n\n\t\t\t// ...add the data information nevertheless:\n\t\t\t$anchor.data( 'snaktypeselector', selector );\n\n\t\t\t// Set value before binding the change event handler to avoid handling first\n\t\t\t// useless change event\n\t\t\tselector.snakType( snakType );\n\n\t\t\tvar changeEvent = ( selector.widgetEventPrefix + 'change' ).toLowerCase();\n\n\t\t\t// bind user interaction on selector to snakview's state:\n\t\t\t$anchor.on( changeEvent + '.' + this.widgetName, function ( event ) {\n\t\t\t\tself.updateVariation();\n\t\t\t\tself.drawVariation();\n\t\t\t\tif ( self._variation ) {\n\t\t\t\t\tself._variation.focus();\n\t\t\t\t}\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\n\t\t\treturn $anchor;\n\t\t},\n\n\t\thidePropertyLabel: function () {\n\t\t\tthis.$property.hide();\n\t\t},\n\n\t\tshowPropertyLabel: function () {\n\t\t\tthis.$property.show();\n\t\t},\n\n\t\t_getSelectedProperty: function () {\n\t\t\tvar propertySelector = this._getPropertySelector();\n\n\t\t\treturn propertySelector && propertySelector.selectedEntity();\n\t\t},\n\n\t\t_setDataTypeForSelectedProperty: function () {\n\t\t\tvar property = this._getSelectedProperty();\n\n\t\t\tif ( property && property.datatype ) {\n\t\t\t\tthis.options.propertyDataTypeStore.setDataTypeForProperty( property.id, property.datatype );\n\t\t\t}\n\t\t}\n\t} );\n\n\t$.extend( $.wikibase.snakview, existingSnakview );\n\n}( wikibase, dataValues ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.variations.NoValue.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.variations.SomeValue.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.variations.Variation.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ViewState' is undefined.","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'PropertyDataTypeStore' is undefined.","line":24,"column":null,"nodeType":"Block","endLine":24,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":76,"column":null,"nodeType":"Block","endLine":76,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'PropertyDataTypeStore' is undefined.","line":92,"column":null,"nodeType":"Block","endLine":92,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ViewState' is undefined.","line":102,"column":null,"nodeType":"Block","endLine":102,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ViewState' is undefined.","line":142,"column":null,"nodeType":"Block","endLine":142,"endColumn":null}],"errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n */\n( function () {\n\t'use strict';\n\tvar ViewState = require( './snakview.ViewState.js' );\n\n\t/**\n\t * Abstract base for all kinds of `Variation`s to be used by `jQuery.wikibase.snakview` to\n\t * represent the different types of `datamodel.Snak` objects.\n\t *\n\t * @see datamodel.Snak\n\t * @abstract\n\t *\n\t * @constructor\n\t *\n\t * @param {ViewState} viewState Interface that allows retrieving\n\t *        information from the related `snakview` instance as well as updating the `snakview`\n\t *        instance.\n\t * @param {jQuery} $viewPort A DOM node which serves as drawing surface for the `Variation`'s\n\t *        output. This is where the `Variation` instance expresses its current state and/or\n\t *        displays input elements for user interaction.\n\t * @param {PropertyDataTypeStore} propertyDataTypeStore\n\t * @param {wikibase.ValueViewBuilder} valueViewBuilder Enables the `Variation` to have\n\t *        `jQuery.valueview` instances created according to particular `wikibase.dataTypes.DataType` /\n\t *        `dataValues.DataValue` objects.\n\t * @param {wikibase.dataTypes.DataTypeStore} dataTypeStore Enables the `Variation` to retrieve a\n\t *        `wikibase.dataTypes.DataType` instance for a particular `DataType` ID.\n\t *\n\t * @throws {Error} if a required parameter is not specified properly.\n\t */\n\tvar SELF = function WbSnakviewVariationsVariation(\n\t\tviewState,\n\t\t$viewPort,\n\t\tpropertyDataTypeStore,\n\t\tvalueViewBuilder,\n\t\tdataTypeStore\n\t) {\n\t\tif ( !( viewState instanceof ViewState ) ) {\n\t\t\tthrow new Error( 'No ViewState object was provided to the snakview variation' );\n\t\t}\n\t\tif ( !( $viewPort instanceof $ ) || $viewPort.length !== 1 ) {\n\t\t\tthrow new Error( 'No sufficient DOM node provided for the snakview variation' );\n\t\t}\n\n\t\tthis._valueViewBuilder = valueViewBuilder;\n\t\tthis._viewState = viewState;\n\t\tthis._dataTypeStore = dataTypeStore;\n\t\tthis._propertyDataTypeStore = propertyDataTypeStore;\n\n\t\tthis.$viewPort = $viewPort;\n\t\tthis.$viewPort.addClass( this.variationBaseClass );\n\n\t\tthis._init();\n\t};\n\t/**\n\t * @event afterdraw\n\t * Triggered on the `Variation` object after drawing the `Variation`.\n\t * @param {jQuery.Event} event\n\t */\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * A unique class for this `Variation`, applied to the `Variation` DOM's `class` attribute.\n\t\t * Will be set by the `Variation` factory when creating a new `Variation` definition.\n\t\t *\n\t\t * @property {string}\n\t\t * @readonly\n\t\t */\n\t\tvariationBaseClass: null,\n\n\t\t/**\n\t\t * The constructor of the `Snak` the `Variation` is for. Will be set by the `Variation`\n\t\t * factory when creating a new `Variation` definition.\n\t\t *\n\t\t * @property {datamodel.Snak}\n\t\t * @readonly\n\t\t */\n\t\tvariationSnakConstructor: null,\n\n\t\t/**\n\t\t * The DOM node displaying the `Variation`'s current state and/or input elements for user\n\t\t * interaction during the `snakview`'s edit mode. The node's content has to be updated by\n\t\t * the `draw()` function.\n\t\t *\n\t\t * @property {jQuery}\n\t\t * @protected\n\t\t */\n\t\t$viewPort: null,\n\n\t\t/**\n\t\t * @property {PropertyDataTypeStore}\n\t\t */\n\t\t_propertyDataTypeStore: null,\n\n\t\t/**\n\t\t * @property {wikibase.ValueViewBuilder}\n\t\t */\n\t\t_valueViewBuilder: null,\n\n\t\t/**\n\t\t * @property {ViewState}\n\t\t */\n\t\t_viewState: null,\n\n\t\t/**\n\t\t * @property {wikibase.dataTypes.DataTypeStore}\n\t\t */\n\t\t_dataTypeStore: null,\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\t_init: function () {\n\t\t\tthis._viewState.notify( 'valid' );\n\t\t},\n\n\t\t/**\n\t\t * Destroys the `Variation`.\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis.$viewPort.removeClass( this.variationBaseClass );\n\t\t\tthis.$viewPort = null;\n\t\t\tthis._viewState = null;\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisDestroyed: function () {\n\t\t\treturn !this._viewState;\n\t\t},\n\n\t\t/**\n\t\t * Returns an object that offers information about the related `snakview`'s current state as\n\t\t * well as allows updating the `snakview` instance.\n\t\t *\n\t\t * @see jQuery.wikibase.snakview\n\t\t *\n\t\t * @return {ViewState|null} Null when called after the object got\n\t\t *  destroyed.\n\t\t */\n\t\tviewState: function () {\n\t\t\treturn this._viewState;\n\t\t},\n\n\t\t/**\n\t\t * Sets/Gets the value of the `Variation`'s part of the `Snak` by accepting/returning an\n\t\t * incomplete `Snak` serialization containing the parts of the `Snak` specific to the `Snak`\n\t\t * bound to the `Variation`. Equivalent to what\n\t\t * `wikibase.serialization.SnakSerializer.serialize()` returns, just without the fields\n\t\t * `snaktype` and `property`.\n\t\t *\n\t\t * @see wikibase.serialization.SnakSerializer\n\t\t *\n\t\t * @param {Object} [value]\n\t\t * @return {Object|undefined} Incomplete `Snak` serialization containing the parts of the\n\t\t *         `Snak` specific to the `Snak` bound to the `Variation`. Equivalent to what\n\t\t *         `wikibase.serialization.SnakSerializer.serialize()` returns, just without the\n\t\t *         fields `snaktype` and `property`.\n\t\t */\n\t\tvalue: function ( value ) {\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn this._getValue();\n\t\t\t}\n\t\t\tthis._setValue( value );\n\t\t},\n\n\t\t/**\n\t\t * Sets the `Variation`s value by being passed an incomplete `Snak` serialization containing\n\t\t * the parts of the `Snak` specific to the `Snak` type bound to the `Variation`. Equivalent\n\t\t * to what `wikibase.serialization.SnakSerializer.serialize()` returns, just without the\n\t\t * fields `snaktype` and `property`. These fields may be received per\n\t\t * `viewState().property()` and `viewState().snakType()`, if necessary. A missing field\n\t\t * implies that the aspect of the `Snak` was not defined yet. Then, the view should display\n\t\t * a useful message or, in edit-mode, show empty input forms for user interaction.\n\t\t *\n\t\t * @protected\n\t\t *\n\t\t * @param {Object} value Incomplete `Snak` serialization.\n\t\t */\n\t\t_setValue: function ( value ) {},\n\n\t\t/**\n\t\t * Gets the `Variation`s value returning an incomplete `Snak` serialization containing the\n\t\t * parts of the `Snak` specific to the `Snak` type bound to the `Variation`. Equivalent to\n\t\t * what `wikibase.serialization.SnakSerializer.serialize()` returns, just without the fields\n\t\t * `snaktype` and `property`. Attributes of the `Snak` not defined yet, should be omitted\n\t\t * from the returned incomplete serialization.\n\t\t *\n\t\t * @return {Object} Incomplete `Snak` serialization.\n\t\t */\n\t\t_getValue: function () {\n\t\t\treturn {};\n\t\t},\n\n\t\t/**\n\t\t * Updates the `Variation` view port's content.\n\t\t *\n\t\t * @abstract\n\t\t */\n\t\tdraw: util.abstractMember,\n\n\t\t/**\n\t\t * Start the `Variation`'s edit mode.\n\t\t */\n\t\tstartEditing: function () {\n\t\t\t$( this ).triggerHandler( 'afterstartediting' );\n\t\t},\n\n\t\t/**\n\t\t * Stops the `Variation`'s edit mode.\n\t\t *\n\t\t * @param {boolean} dropValue\n\t\t */\n\t\tstopEditing: function ( dropValue ) {},\n\n\t\tdisable: function () {},\n\n\t\tenable: function () {},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tisFocusable: function () {\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Sets the focus on the `Variation`.\n\t\t */\n\t\tfocus: function () {},\n\n\t\t/**\n\t\t * Removes focus from the `Variation`.\n\t\t */\n\t\tblur: function () {}\n\t} );\n\n\tmodule.exports = SELF;\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/snakview/snakview.variations.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":26,"column":null,"nodeType":"Block","endLine":26,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Variation' is undefined.","line":34,"column":null,"nodeType":"Block","endLine":34,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Variation' is undefined.","line":86,"column":null,"nodeType":"Block","endLine":86,"endColumn":null}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\t/**\n\t * Map of `Snak` type IDs and related `Variation`s required for representing different kinds of\n\t * `Snaks` with `jQuery.wikibase.snakview`.\n\t *\n\t * @property {Object}\n\t * @ignore\n\t */\n\tvar variations = {};\n\n\t/**\n\t * Store for `jQuery.wikibase.snakview.variations.Variation` objects.\n\t *\n\t * @class jQuery.wikibase.snakview.variations\n\t * @singleton\n\t * @license GPL-2.0-or-later\n\t * @author Daniel Werner < daniel.a.r.werner@gmail.com >\n\t */\n\tvar SELF = {\n\t\t/**\n\t\t * Registers a new `jQuery.wikibase.snakview.variations.Variation` definition to enable\n\t\t * using a specific `Snak` type within `jQuery.wikibase.snakview`. Acts like the\n\t\t * `jQuery.Widget` factory.\n\t\t *\n\t\t * @param {datamodel.Snak} snakConstructor The constructor of the `Snak` the\n\t\t *        `Variation` applies to.\n\t\t * @param {Function|string|Object} baseOrDefinition Constructor or name of the `Variation`\n\t\t *        the new `Variation` should be based on. The parameter may be omitted resulting in\n\t\t *        the it being regarded the `definition` and `base` defaulting to\n\t\t *        `jQuery.snakview.variations.Variation`.\n\t\t * @param {Object} [definition] The new `Variation`'s definition (new members and members\n\t\t *        overwriting the base `Variation`s members).\n\t\t * @return {Variation} The new `Variation`'s constructor.\n\t\t */\n\t\tvariation: function ( snakConstructor, baseOrDefinition, definition ) {\n\t\t\tif ( typeof snakConstructor !== 'function' || !snakConstructor.TYPE ) {\n\t\t\t\tthrow new Error( 'Snak constructor required for registering a snakview variation' );\n\t\t\t}\n\n\t\t\tif ( !definition ) {\n\t\t\t\tdefinition = baseOrDefinition;\n\t\t\t\tbaseOrDefinition = SELF.Variation;\n\t\t\t} else if ( typeof baseOrDefinition === 'string' ) {\n\t\t\t\tbaseOrDefinition = SELF.getVariation( baseOrDefinition );\n\t\t\t}\n\n\t\t\tvar snakType = snakConstructor.TYPE,\n\t\t\t\tvariationName = 'WbSnakviewVariations_' + snakType; // name for constructor\n\n\t\t\tvar Variation = util.inherit( variationName, baseOrDefinition, $.extend(\n\t\t\t\t{ variationBaseClass: 'wikibase-snakview-variation-' + snakType + 'snak' },\n\t\t\t\tdefinition,\n\t\t\t\t{ // we don't want to allow to overwrite this one via the definition\n\t\t\t\t\tvariationSnakConstructor: snakConstructor\n\t\t\t\t}\n\t\t\t) );\n\n\t\t\t// TODO: store them in some public place as well ( have to decide on where exactly)\n\t\t\tvariations[ snakType ] = Variation;\n\t\t\treturn Variation;\n\t\t},\n\n\t\t/**\n\t\t * Returns all `Snak` types which can be represented by the `snakview` since there is a\n\t\t * `Variation` constructor for presenting them.\n\t\t *\n\t\t * @return {string[]}\n\t\t */\n\t\tgetCoveredSnakTypes: function () {\n\t\t\tvar types = [];\n\n\t\t\tfor ( var key in variations ) {\n\t\t\t\tif ( Object.prototype.hasOwnProperty.call( variations, key ) ) {\n\t\t\t\t\ttypes.push( key );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn types;\n\t\t},\n\n\t\t/**\n\t\t * Returns the constructor of the `Variation` used to represent a particular kind of `Snak`\n\t\t * within a `jQuery.wikibase.snakview`.\n\t\t *\n\t\t * @param {string} snakType\n\t\t * @return {Variation|*}\n\t\t */\n\t\tgetVariation: function ( snakType ) {\n\t\t\treturn variations[ snakType ] || null;\n\t\t}\n\t};\n\n\tmodule.exports = SELF;\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.addtoolbar.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":20,"column":null,"nodeType":"Block","endLine":20,"endColumn":null}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\trequire( './jquery.wikibase.singlebuttontoolbar.js' );\n\n\tvar PARENT = $.wikibase.singlebuttontoolbar;\n\n\t/**\n\t * \"Add\" toolbar widget by default offering an \"add\" button.\n\t *\n\t * @extends jQuery.wikibase.singlebuttontoolbar\n\t *\n\t * @option {string} [label]\n\t *         Default: mw.msg( 'wikibase-add' )\n\t *\n\t * @option {string} [eventName]\n\t *         Default: 'add'\n\t */\n\t$.widget( 'wikibase.addtoolbar', PARENT, {\n\t\t/**\n\t\t * @see jQuery.wikibase.singlebuttontoolbar.options\n\t\t */\n\t\toptions: {\n\t\t\tlabel: mw.msg( 'wikibase-add' ),\n\t\t\teventName: 'add',\n\t\t\tbuttonCssClassSuffix: 'add'\n\t\t}\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":24,"column":null,"nodeType":"Block","endLine":24,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":26,"column":null,"nodeType":"Block","endLine":26,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":407,"column":3,"nodeType":"Block","endLine":409,"endColumn":6}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function ( wb ) {\n\t'use strict';\n\n\trequire( './jquery.wikibase.toolbar.js' );\n\trequire( './jquery.wikibase.toolbarbutton.js' );\n\n\tvar PARENT = $.wikibase.toolbar;\n\n\t/**\n\t * \"Edit\" toolbar widget.\n\t *\n\t * @extends jQuery.wikibase.toolbar\n\t *\n\t * This widget offers a \"edit\" toolbar allowing editing-related interaction with a specific widget.\n\t * The widget the toolbar shall interact with has to have implemented certain methods listed in\n\t * the _requiredMethods attribute.\n\t * Apart from the required methods, the interaction widget has to have defined a help message in\n\t * its options that will be used as tooltip message.\n\t *\n\t * @option {Function} getHelpMessage\n\t *\n\t * @option {Function} [onRemove]\n\t *         Function to be triggered when hitting the \"remove\" button. If omitted, no \"remove\"\n\t *         button will be shown.\n\t *         Default: null\n\t *\n\t * @event edit\n\t *        Triggered after the \"edit\" button is hit and the interaction widget has switched to edit\n\t *        mode.\n\t *        - {jQuery.Event}\n\t *\n\t * @event afterstartediting\n\t *        Triggered after the interaction widget and toolbar has switched to edit mode.\n\t *        - {jQuery.Event}\n\t *\n\t * @event afterstopediting\n\t *        Triggered after the interaction widget and the toolbar has switched to non-edit mode.\n\t *        - {jQuery.Event}\n\t */\n\t$.widget( 'wikibase.edittoolbar', PARENT, {\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbar.options\n\t\t */\n\t\toptions: {\n\t\t\tgetHelpMessage: null,\n\t\t\tonRemove: null,\n\t\t\tbuttonLabels: {\n\t\t\t\tedit: mw.msg( 'wikibase-edit' ),\n\t\t\t\tsave: mw.msg( mw.config.get( 'wgEditSubmitButtonLabelPublish' ) ? 'wikibase-publish' : 'wikibase-save' ),\n\t\t\t\tremove: mw.msg( 'wikibase-remove' ),\n\t\t\t\tcancel: mw.msg( 'wikibase-cancel' )\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Names of methods that are required in the interaction widget to ensure proper toolbar\n\t\t * interaction.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\t_requiredMethods: [\n\t\t\t'cancelEditing',\n\t\t\t'startEditing',\n\t\t\t'stopEditing',\n\t\t\t'setError'\n\t\t],\n\n\t\t/**\n\t\t * @type {Object}\n\t\t */\n\t\t_buttons: null,\n\n\t\t/**\n\t\t * Node holding the tooltip image with the tooltip itself attached.\n\t\t *\n\t\t * @type {null|jQuery}\n\t\t */\n\t\t_$tooltipAnchor: null,\n\n\t\t/**\n\t\t * @property {jQuery.ui.EditableTemplatedWidget|wikibase.view.ViewController} [controller]\n\t\t * @private\n\t\t */\n\t\t_controller: null,\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbar._create\n\t\t */\n\t\t_create: function () {\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( !this.options.getHelpMessage ) {\n\t\t\t\tthrow new Error( 'Required option not specified properly' );\n\t\t\t}\n\n\t\t\tthis._buttons = {};\n\n\t\t\tvar $scrapedSubToolbar = this.getContainer().children( '.wikibase-toolbar' );\n\n\t\t\tthis._initSubToolbar( $scrapedSubToolbar );\n\t\t\tthis._attachEventHandlers();\n\n\t\t\tif ( $scrapedSubToolbar.length && $scrapedSubToolbar.children().length ) {\n\t\t\t\tthis.toNonEditMode();\n\t\t\t} else {\n\t\t\t\tthis._toNonEditMode();\n\t\t\t}\n\t\t},\n\n\t\tsetController: function ( controller ) {\n\t\t\tthis._controller = controller;\n\t\t\tvar missingMethods = this.checkRequiredMethods();\n\t\t\tif ( missingMethods.length ) {\n\t\t\t\tthrow new Error( 'Required method(s) missing: ' + missingMethods.join( ', ' ) );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbar.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar self = this;\n\n\t\t\tif ( this._$tooltipAnchor ) {\n\t\t\t\tvar $wbtooltip = this._$tooltipAnchor.find( ':wikibase-wbtooltip' ),\n\t\t\t\t\twbtooltip = $wbtooltip.data( 'wbtooltip' );\n\t\t\t\tif ( wbtooltip ) {\n\t\t\t\t\twbtooltip.destroy();\n\t\t\t\t}\n\n\t\t\t\tthis._$tooltipAnchor.data( 'wikibase-toolbaritem' ).destroy();\n\t\t\t}\n\n\t\t\tthis.getContainer().off( '.' + this.widgetName );\n\n\t\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t\t$.each( this._buttons, function ( buttonName, $button ) {\n\t\t\t\t$button.off( '.' + self.widgetName );\n\t\t\t\tvar buttonWbtooltip = $button.data( 'wbtooltip' );\n\t\t\t\tif ( buttonWbtooltip ) {\n\t\t\t\t\tbuttonWbtooltip.destroy();\n\t\t\t\t}\n\t\t\t\t$button.data( 'wikibase-toolbarbutton' ).destroy();\n\t\t\t} );\n\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * Checks whether all methods required in the interaction widget are defined and will return\n\t\t * the names of any missing methods.\n\t\t *\n\t\t * @return {string[]}\n\t\t */\n\t\tcheckRequiredMethods: function () {\n\t\t\tvar self = this,\n\t\t\t\tmissingMethods = [];\n\t\t\tthis._requiredMethods.forEach( function ( methodName ) {\n\t\t\t\tif ( typeof self._controller[ methodName ] !== 'function' ) {\n\t\t\t\t\tmissingMethods.push( methodName );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn missingMethods;\n\t\t},\n\n\t\t/**\n\t\t * Initializes the sub toolbar encapsulating the toolbar buttons excluding the tooltip anchor.\n\t\t *\n\t\t * @param {jQuery} $subToolbar\n\t\t */\n\t\t_initSubToolbar: function ( $subToolbar ) {\n\t\t\tvar $content = $();\n\n\t\t\tif ( !$subToolbar.length ) {\n\t\t\t\t$subToolbar = $( '<span>' ).appendTo( this.getContainer() );\n\t\t\t} else {\n\t\t\t\tthis._scrapeButtons( $subToolbar );\n\t\t\t\t$content = $subToolbar.children();\n\t\t\t}\n\n\t\t\t$subToolbar.toolbar( {\n\t\t\t\t$content: $content\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Analyzes a DOM structure in order to detect and reuse button nodes.\n\t\t *\n\t\t * @param {jQuery} $subToolbar\n\t\t */\n\t\t_scrapeButtons: function ( $subToolbar ) {\n\t\t\tvar self = this;\n\n\t\t\t$subToolbar.children( '.wikibase-toolbar-button' ).each( function () {\n\t\t\t\tvar $button = $( this );\n\t\t\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t\t\t$.each( self.options.buttonLabels, function ( buttonName, label ) {\n\t\t\t\t\tif ( $button.text() === label ) {\n\t\t\t\t\t\tself._buttons[ buttonName ] = $button.toolbarbutton( {\n\t\t\t\t\t\t\t$label: self.options.buttonLabels[ buttonName ]\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t},\n\n\t\t_attachEventHandlers: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis.getContainer()\n\t\t\t.on( 'toolbarbuttonaction.' + this.widgetName, function ( event ) {\n\t\t\t\tif ( self._buttons.edit && event.target === self._buttons.edit.get( 0 ) ) {\n\t\t\t\t\tself._controller.startEditing();\n\t\t\t\t} else if ( self._buttons.save && event.target === self._buttons.save.get( 0 ) ) {\n\t\t\t\t\tself._controller.stopEditing();\n\t\t\t\t} else if ( self._buttons.remove && event.target === self._buttons.remove.get( 0 ) ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t\tself.toggleActionMessage( mw.msg( 'wikibase-remove-inprogress' ) );\n\t\t\t\t\tself.options.onRemove();\n\t\t\t\t} else if ( self._buttons.cancel && event.target === self._buttons.cancel.get( 0 ) ) {\n\t\t\t\t\tself._controller.cancelEditing();\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Switches the toolbar to edit mode displaying \"save\", \"cancel\" and - depending on the toolbar\n\t\t * configuration - \"remove\" buttons.\n\t\t */\n\t\ttoEditMode: function () {\n\t\t\tif ( this._isInEditMode() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $subToolbar = this.getContainer().children( ':wikibase-toolbar' ),\n\t\t\t\tsubToolbar = $subToolbar.data( 'toolbar' );\n\n\t\t\t// This may happen while \"Saving...\" is shown.\n\t\t\tif ( !subToolbar ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $buttons = this.getButton( 'save' ).element;\n\t\t\tif ( typeof this.options.onRemove === 'function' ) {\n\t\t\t\t$buttons = $buttons.add( this.getButton( 'remove' ).element );\n\t\t\t}\n\t\t\t$buttons = $buttons.add( this.getButton( 'cancel' ).element );\n\t\t\tsubToolbar.option( '$content', $buttons );\n\n\t\t\tthis.getContainer()\n\t\t\t.append( this._getTooltipAnchor() )\n\t\t\t.addClass( this.widgetBaseClass + '-ineditmode' );\n\t\t},\n\n\t\t/**\n\t\t * Forces drawing edit mode.\n\t\t */\n\t\t_toEditMode: function () {\n\t\t\tthis.getContainer().removeClass( this.widgetBaseClass + '-ineditmode' );\n\t\t\tthis.toEditMode();\n\t\t},\n\n\t\t/**\n\t\t * Switches the toolbar to non-edit mode displaying the \"edit\" button.\n\t\t */\n\t\ttoNonEditMode: function () {\n\t\t\tif ( !this._isInEditMode() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._$tooltipAnchor ) {\n\t\t\t\tthis._$tooltipAnchor.detach();\n\t\t\t}\n\n\t\t\tvar $subToolbar = this.getContainer().children( ':wikibase-toolbar' ),\n\t\t\t\tsubToolbar = $subToolbar.data( 'toolbar' );\n\n\t\t\t// This may happen while \"Saving...\" is shown.\n\t\t\tif ( !subToolbar ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsubToolbar.option( '$content', this.getButton( 'edit' ).element );\n\n\t\t\tthis.getContainer().removeClass( this.widgetBaseClass + '-ineditmode' );\n\t\t},\n\n\t\t/**\n\t\t * Forces drawing non-edit mode.\n\t\t */\n\t\t_toNonEditMode: function () {\n\t\t\tthis.getContainer().addClass( this.widgetBaseClass + '-ineditmode' );\n\t\t\tthis.toNonEditMode();\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\t_isInEditMode: function () {\n\t\t\treturn this.getContainer().hasClass( this.widgetBaseClass + '-ineditmode' );\n\t\t},\n\n\t\t/**\n\t\t * @return {jQuery}\n\t\t */\n\t\t_getTooltipAnchor: function () {\n\t\t\tvar self = this;\n\n\t\t\tif ( this._$tooltipAnchor ) {\n\t\t\t\treturn this._$tooltipAnchor;\n\t\t\t}\n\n\t\t\tthis._$tooltipAnchor = $( '<span>' )\n\t\t\t\t.addClass( 'wb-help-field-hint' )\n\t\t\t\t.text( '\\u00A0' ) // TODO find nicer way to hack Webkit browsers to display tooltip image (see also css)\n\t\t\t\t.toolbaritem();\n\n\t\t\t// Support promises instead of strings, too, since $.wikibase.statementview does not know\n\t\t\t// immediately after creation which help message to show.\n\t\t\t// TODO: This should be replaced by a dynamic getter so that views can arbitrarily\n\t\t\t// change their help messages anywhere in their lifecycle.\n\t\t\tfunction addTooltip( helpMessage ) {\n\t\t\t\tif ( self._$tooltipAnchor ) {\n\t\t\t\t\tif ( helpMessage ) {\n\t\t\t\t\t\tself._$tooltipAnchor.wbtooltip( { content: helpMessage } );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself._$tooltipAnchor.hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.options.getHelpMessage().done( addTooltip );\n\n\t\t\treturn this._$tooltipAnchor;\n\t\t},\n\n\t\t/**\n\t\t * Returns a button by its name creating the button if it has not yet been created.\n\t\t *\n\t\t * @param {string} buttonName \"edit\"|\"save\"|\"remove\"|\"cancel\"\n\t\t * @return {jQuery.wikibase.toolbarbutton}\n\t\t */\n\t\tgetButton: function ( buttonName ) {\n\t\t\tif ( !this._buttons[ buttonName ] ) {\n\t\t\t\tthis._buttons[ buttonName ] = $( '<span>' ).toolbarbutton( {\n\t\t\t\t\t$label: this.options.buttonLabels[ buttonName ],\n\t\t\t\t\tcssClassSuffix: buttonName\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn this._buttons[ buttonName ].data( 'toolbarbutton' );\n\t\t},\n\n\t\t/**\n\t\t * Toggles a message replacing the toolbar contents.\n\t\t *\n\t\t * @param {string} [message] Message to be displayed instead of the\n\t\t *        toolbar contents. If omitted, the toolbar contents will be shown.\n\t\t */\n\t\ttoggleActionMessage: function ( message ) {\n\t\t\tvar $container = this.getContainer(),\n\t\t\t\tactionMessageClass = this.widgetBaseClass + '-actionmsg',\n\t\t\t\t$actionMsg = $container.find( '.' + actionMessageClass );\n\n\t\t\tif ( message !== undefined ) {\n\t\t\t\t$container.contents().hide();\n\n\t\t\t\t$actionMsg = $( '<span>' )\n\t\t\t\t\t.addClass( actionMessageClass + ' wb-actionmsg' )\n\t\t\t\t\t.text( message )\n\t\t\t\t\t.appendTo( $container );\n\t\t\t} else if ( $actionMsg.length ) {\n\t\t\t\t$actionMsg.remove();\n\t\t\t\t$container.contents().show();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Displays an error message.\n\t\t *\n\t\t * @param {wikibase.api.RepoApiError} error\n\t\t * @param {jQuery} $anchor Node the tooltip shall be attached to.\n\t\t */\n\t\tdisplayError: function ( error, $anchor ) {\n\t\t\tvar self = this;\n\n\t\t\t$anchor\n\t\t\t.wbtooltip( {\n\t\t\t\tcontent: error,\n\t\t\t\tpermanent: true\n\t\t\t} )\n\t\t\t.one( 'wbtooltipafterhide.' + this.widgetName, function () {\n\t\t\t\tself._controller.setError();\n\t\t\t\tvar wbtooltip = $anchor.data( 'wbtooltip' );\n\t\t\t\tif ( wbtooltip ) {\n\t\t\t\t\twbtooltip.destroy();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t$anchor.data( 'wbtooltip' ).show();\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbar._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === 'onRemove' && this._isInEditMode() ) {\n\t\t\t\tthis._toEditMode();\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbar.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tif ( this._isInEditMode() ) {\n\t\t\t\tvar btnSave = this._buttons.save && this._buttons.save.data( 'toolbarbutton' ),\n\t\t\t\t\tbtnCancel = this._buttons.cancel && this._buttons.cancel.data( 'toolbarbutton' );\n\n\t\t\t\tif ( btnSave && !btnSave.option( 'disabled' ) ) {\n\t\t\t\t\tbtnSave.focus();\n\t\t\t\t\treturn;\n\t\t\t\t} else if ( btnCancel && btnCancel.option( 'disabled' ) ) {\n\t\t\t\t\tbtnCancel.focus();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar btnEdit = this._buttons.edit && this._buttons.edit.data( 'toolbarbutton' );\n\n\t\t\t\tif ( btnEdit && !btnEdit.option( 'disabled' ) ) {\n\t\t\t\t\tbtnEdit.focus();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.element.trigger( 'focus' );\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.removetoolbar.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":20,"column":null,"nodeType":"Block","endLine":20,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":23,"column":null,"nodeType":"Block","endLine":23,"endColumn":null},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":26,"column":null,"nodeType":"Block","endLine":26,"endColumn":null},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in namepath: <custom","line":29,"column":null,"nodeType":"Block","endLine":29,"endColumn":null}],"errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\trequire( './jquery.wikibase.toolbar.js' );\n\n\tvar PARENT = $.wikibase.toolbar;\n\n\t/**\n\t * Toolbar by default featuring a single button.\n\t *\n\t * @extends jQuery.wikibase.toolbar\n\t *\n\t * @option {string} [label]\n\t *         Default: ''\n\t *\n\t * @option {string} [title]\n\t *         Default: ''\n\t *\n\t * @option {string} [eventName]\n\t *         Default: 'action'\n\t *\n\t * @option {string} [buttonCssClassSuffix]\n\t *         Default: null\n\t *\n\t * @event <custom name> (see options)\n\t *        Triggered when the default button is hit.\n\t *        - {jQuery.Event}\n\t */\n\t$.widget( 'wikibase.singlebuttontoolbar', PARENT, {\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbar.options\n\t\t */\n\t\toptions: {\n\t\t\tlabel: '',\n\t\t\ttitle: '',\n\t\t\teventName: 'action',\n\t\t\tbuttonCssClassSuffix: null\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbar._create\n\t\t */\n\t\t_create: function () {\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( !this.options.$content.length ) {\n\t\t\t\tvar $scrapedButton = this._scrapeButton();\n\t\t\t\tthis.options.$content = this._initDefaultButton( $scrapedButton );\n\t\t\t\tif ( !$scrapedButton ) {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {jQuery|null} $scrapedButton\n\t\t * @return {jQuery}\n\t\t */\n\t\t_initDefaultButton: function ( $scrapedButton ) {\n\t\t\tvar self = this,\n\t\t\t\t$defaultButton = $scrapedButton || $( '<span>' );\n\n\t\t\treturn $defaultButton.toolbarbutton( {\n\t\t\t\t$label: this.options.label,\n\t\t\t\ttitle: this.options.title,\n\t\t\t\tcssClassSuffix: this.options.buttonCssClassSuffix\n\t\t\t} )\n\t\t\t.on( 'toolbarbuttonaction.' + this.widgetName, function ( event ) {\n\t\t\t\tself._trigger( self.options.eventName );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @return {jQuery}\n\t\t */\n\t\t_scrapeButton: function () {\n\t\t\tvar self = this,\n\t\t\t\t$defaultButton = null;\n\n\t\t\tthis.getContainer().children( '.wikibase-toolbar-button' ).each( function () {\n\t\t\t\tvar $button = $( this );\n\t\t\t\tif ( $button.text() === self.options.label ) {\n\t\t\t\t\t$defaultButton = $button;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn $defaultButton;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar button = this.options.$content.first().data( 'toolbarbutton' );\n\t\t\tif ( button ) {\n\t\t\t\tbutton.focus();\n\t\t\t} else {\n\t\t\t\tthis.element.trigger( 'focus' );\n\t\t\t}\n\t\t}\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbar.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":18,"column":null,"nodeType":"Block","endLine":18,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":122,"column":3,"nodeType":"Block","endLine":124,"endColumn":6}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\trequire( './jquery.wikibase.toolbaritem.js' );\n\n\tvar PARENT = $.wikibase.toolbaritem;\n\n\t/**\n\t * Toolbar widget that can be filled with compatible toolbar items.\n\t *\n\t * @constructor\n\t * @extends jQuery.wikibase.toolbaritem\n\t *\n\t * @option {jQuery} [$content]\n\t *         jQuery wrapped DOM elements, each featuring an instance of jQuery.wikibase.toolbaritem.\n\t *         Default: $()\n\t */\n\t$.widget( 'wikibase.toolbar', PARENT, {\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem.options\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-toolbar',\n\t\t\ttemplateParams: [\n\t\t\t\t'',\n\t\t\t\t''\n\t\t\t],\n\t\t\ttemplateShortCuts: {},\n\t\t\t$content: $(),\n\t\t\t$container: null\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem._create\n\t\t */\n\t\t_create: function () {\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tif ( this._getItems().length !== this.options.$content.length ) {\n\t\t\t\tthis.draw();\n\t\t\t}\n\n\t\t\tthis.getContainer()\n\t\t\t.addClass( this.widgetBaseClass + '-container wikibase-toolbar-container' );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\t// Remove toolbar items managed by the widget:\n\t\t\tthis._getItems().forEach( function ( item ) {\n\t\t\t\titem.destroy();\n\t\t\t\titem.element.remove();\n\t\t\t} );\n\n\t\t\tvar $container = this.getContainer();\n\n\t\t\t$container\n\t\t\t.removeClass( this.widgetBaseClass\n\t\t\t\t+ '-container wikibase-toolbar-container ui-state-disabled' )\n\t\t\t.off( '.' + this.widgetName );\n\n\t\t\tif ( $container.get( 0 ) !== this.element.get( 0 ) ) {\n\t\t\t\t$container.remove();\n\t\t\t}\n\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @return {jQuery.wikibase.toolbaritem[]}\n\t\t */\n\t\t_getItems: function () {\n\t\t\tvar items = [];\n\t\t\tthis.getContainer().children().each( function () {\n\t\t\t\tvar item = $( this ).data( 'wikibase-toolbar-item' );\n\t\t\t\tif ( item ) {\n\t\t\t\t\titems.push( item );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn items;\n\t\t},\n\n\t\t/**\n\t\t * Returns the node actually containing the toolbar DOM structure.\n\t\t *\n\t\t * @return {jQuery}\n\t\t */\n\t\tgetContainer: function () {\n\t\t\treturn this.options.$container || this.element;\n\t\t},\n\n\t\tdraw: function () {\n\t\t\tvar $container = this.getContainer(),\n\t\t\t\t$children = $();\n\n\t\t\t$container.children().each( function () {\n\t\t\t\t$( this ).detach();\n\t\t\t} );\n\n\t\t\t$container.empty();\n\n\t\t\tthis.options.$content.each( function ( i ) {\n\t\t\t\tvar $item = $( this );\n\n\t\t\t\t$children = $children.add( $item );\n\n\t\t\t\tvar item = $item.data( 'wikibase-toolbar-item' );\n\t\t\t\tif ( item ) {\n\t\t\t\t\titem.draw();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t$container.append( $children );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'disabled' ) {\n\t\t\t\tthis._setState( value );\n\t\t\t\tthis.options[ key ] = value;\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar response = PARENT.prototype._setOption.apply( this, arguments );\n\n\t\t\tif ( key === '$content' ) {\n\t\t\t\tthis.draw();\n\t\t\t}\n\n\t\t\treturn response;\n\t\t},\n\n\t\t/**\n\t\t * @param {boolean} disable\n\t\t */\n\t\t_setState: function ( disable ) {\n\t\t\tthis.getContainer()\n\t\t\t\t.toggleClass( this.widgetFullName + '-disabled ui-state-disabled', !!disable )\n\t\t\t\t.attr( 'aria-disabled', disable );\n\t\t\tthis._getItems().forEach( function ( item ) {\n\t\t\t\titem[ disable ? 'disable' : 'enable' ]();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tvar items = this._getItems();\n\n\t\t\tfor ( var i = 0; i < items.length; i++ ) {\n\t\t\t\tif ( !items[ i ].option( 'disabled' ) ) {\n\t\t\t\t\titems[ i ].focus();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.element.trigger( 'focus' );\n\t\t}\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbarbutton.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"option\".","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":86,"column":3,"nodeType":"Block","endLine":88,"endColumn":6}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author H. Snater < mediawiki@snater.com >\n */\n( function () {\n\t'use strict';\n\n\trequire( './jquery.wikibase.toolbaritem.js' );\n\n\tvar PARENT = $.wikibase.toolbaritem;\n\n\t/**\n\t * Represents a button to be used in a jQuery.wikibase.toolbar.\n\t *\n\t * @extends jQuery.wikibase.toolbaritem\n\t *\n\t * @option {string} [cssClassSuffix]\n\t *         If set, another css class \"wikibase-toolbar-button-<cssClassSuffix>\" is added to the\n\t *         button's root node.\n\t *         Default: null\n\t *\n\t * @event action\n\t *        Triggered when the button is hit while not being disabled.\n\t *        - {jQuery.Event}\n\t */\n\t$.widget( 'wikibase.toolbarbutton', PARENT, {\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem.options\n\t\t */\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-toolbar-button',\n\t\t\ttemplateParams: [\n\t\t\t\t'', // CSS class names\n\t\t\t\t'#', // URL\n\t\t\t\t'', // Label\n\t\t\t\t'' // Title tooltip\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$link: 'a'\n\t\t\t},\n\t\t\t$label: null,\n\t\t\ttitle: '',\n\t\t\tcssClassSuffix: null\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem._create\n\t\t */\n\t\t_create: function () {\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tvar self = this;\n\n\t\t\tif ( this.options.cssClassSuffix ) {\n\t\t\t\tthis.element.addClass( 'wikibase-toolbar-button-' + this.options.cssClassSuffix );\n\t\t\t}\n\n\t\t\tif ( this.$link.contents().text() === '' ) {\n\t\t\t\tthis.$link.append( this._getLabel() );\n\t\t\t}\n\n\t\t\tif ( this.options.title ) {\n\t\t\t\tthis.$link.prop( 'title', this.options.title );\n\t\t\t}\n\n\t\t\tthis.$link\n\t\t\t.on( 'click.toolbarbutton keydown.toolbarbutton', function ( event ) {\n\t\t\t\tif ( event.type === 'click' || event.keyCode === $.ui.keyCode.ENTER ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\tif ( !self.options.disabled ) {\n\t\t\t\t\t\tself._trigger( 'action' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem.destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis.$link.off( '.toolbarbutton' );\n\t\t\tPARENT.prototype.destroy.call( this );\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem._setOption\n\t\t */\n\t\t_setOption: function ( key, value ) {\n\t\t\tif ( key === 'cssClassSuffix' ) {\n\t\t\t\tif ( this.options.cssClassSuffix ) {\n\t\t\t\t\tthis.element\n\t\t\t\t\t.removeClass( 'wikibase-toolbar-button-' + this.options.cssClassSuffix );\n\t\t\t\t}\n\t\t\t\tthis.element.addClass( 'wikibase-toolbar-button-' + value );\n\t\t\t} else if ( key === 'disabled' ) {\n\t\t\t\tif ( value ) {\n\t\t\t\t\tthis.$link.attr( 'tabIndex', '-1' );\n\t\t\t\t} else {\n\t\t\t\t\tthis.$link.removeAttr( 'tabIndex' );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn PARENT.prototype._setOption.apply( this, arguments );\n\t\t},\n\n\t\t/**\n\t\t * @return {jQuery}\n\t\t */\n\t\t_getLabel: function () {\n\t\t\treturn typeof this.options.$label === 'string'\n\t\t\t\t? $( document.createTextNode( this.options.$label ) )\n\t\t\t\t: this.options.$label;\n\t\t},\n\n\t\t/**\n\t\t * @see jQuery.wikibase.toolbaritem.focus\n\t\t */\n\t\tfocus: function () {\n\t\t\tthis.$link.trigger( 'focus' );\n\t\t},\n\n\t\t/**\n\t\t * Main drawing routine.\n\t\t */\n\t\tdraw: function () {}\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/jquery/wikibase/toolbar/jquery.wikibase.toolbaritem.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase/entityChangers/AliasesChanger.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":16,"column":null,"nodeType":"Block","endLine":16,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":26,"column":null,"nodeType":"Block","endLine":26,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":41,"column":null,"nodeType":"Block","endLine":41,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":82,"column":null,"nodeType":"Block","endLine":82,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":90,"column":null,"nodeType":"Block","endLine":90,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":91,"column":null,"nodeType":"Block","endLine":91,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":109,"column":null,"nodeType":"Block","endLine":109,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":110,"column":null,"nodeType":"Block","endLine":110,"endColumn":null}],"errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar MODULE = wb.entityChangers,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * @constructor\n\t *\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.RevisionStore} revisionStore\n\t * @param {datamodel.Entity} entity\n\t */\n\tvar SELF = MODULE.AliasesChanger = function WbEntityChangersAliasesChanger( api, revisionStore, entity ) {\n\t\tthis._api = api;\n\t\tthis._revisionStore = revisionStore;\n\t\tthis._entity = entity;\n\t};\n\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * @type {datamodel.Entity}\n\t\t */\n\t\t_entity: null,\n\n\t\t/**\n\t\t * @type {wikibase.RevisionStore}\n\t\t */\n\t\t_revisionStore: null,\n\n\t\t/**\n\t\t * @type {wikibase.api.RepoApi}\n\t\t */\n\t\t_api: null,\n\n\t\t/**\n\t\t * @param {datamodel.MultiTerm} aliases\n\t\t * @return {jQuery.Promise}\n\t\t *         No resolved parameters.\n\t\t *         Rejected parameters:\n\t\t *         - {wikibase.api.RepoApiError}\n\t\t */\n\t\tsetAliases: function ( aliases ) {\n\t\t\tvar deferred = $.Deferred(),\n\t\t\t\tself = this,\n\t\t\t\tlanguage = aliases.getLanguageCode(),\n\t\t\t\tinitialAliases = this._getInitialAliases( language );\n\n\t\t\tthis._api.setAliases(\n\t\t\t\tthis._entity.getId(),\n\t\t\t\tthis._revisionStore.getAliasesRevision(),\n\t\t\t\tthis._getNewAliasesTexts( aliases, initialAliases ),\n\t\t\t\tthis._getRemovedAliasesTexts( aliases, initialAliases ),\n\t\t\t\tlanguage\n\t\t\t)\n\t\t\t.done( function ( response ) {\n\t\t\t\tself._revisionStore.setAliasesRevision( response.entity.lastrevid );\n\n\t\t\t\tself._entity.getFingerprint().setAliases( language, aliases );\n\n\t\t\t\tvar texts = [];\n\t\t\t\tif ( response.entity.aliases && response.entity.aliases[ language ] ) {\n\t\t\t\t\ttexts = response.entity.aliases[ language ].map( function ( value ) {\n\t\t\t\t\t\treturn value.value;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\tdeferred.resolve( new datamodel.MultiTerm( language, texts ) );\n\t\t\t} )\n\t\t\t.fail( function ( errorCode, errorObject ) {\n\t\t\t\tdeferred.reject( wb.api.RepoApiError.newFromApiResponse( errorObject, 'save' ) );\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t},\n\n\t\t/**\n\t\t * @param {string} language\n\t\t * @return {datamodel.MultiTerm}\n\t\t */\n\t\t_getInitialAliases: function ( language ) {\n\t\t\treturn this._entity.getFingerprint().getAliasesFor( language )\n\t\t\t\t|| new datamodel.MultiTerm( language, [] );\n\t\t},\n\n\t\t/**\n\t\t * @param {datamodel.MultiTerm} currentAliases\n\t\t * @param {datamodel.MultiTerm} initialAliases\n\t\t * @return {string[]}\n\t\t */\n\t\t_getNewAliasesTexts: function ( currentAliases, initialAliases ) {\n\t\t\tvar currentTexts = currentAliases.getTexts(),\n\t\t\t\tinitialTexts = initialAliases.getTexts(),\n\t\t\t\tnewAliases = [];\n\n\t\t\tfor ( var i = 0; i < currentTexts.length; i++ ) {\n\t\t\t\tif ( initialTexts.indexOf( currentTexts[ i ] ) === -1 ) {\n\t\t\t\t\tnewAliases.push( currentTexts[ i ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newAliases;\n\t\t},\n\n\t\t/**\n\t\t * @param {datamodel.MultiTerm} currentAliases\n\t\t * @param {datamodel.MultiTerm} initialAliases\n\t\t * @return {string[]}\n\t\t */\n\t\t_getRemovedAliasesTexts: function ( currentAliases, initialAliases ) {\n\t\t\tvar currentTexts = currentAliases.getTexts(),\n\t\t\t\tinitialTexts = initialAliases.getTexts(),\n\t\t\t\tremovedAliases = [];\n\n\t\t\tfor ( var i = 0; i < initialTexts.length; i++ ) {\n\t\t\t\tif ( currentTexts.indexOf( initialTexts[ i ] ) === -1 ) {\n\t\t\t\t\tremovedAliases.push( initialTexts[ i ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn removedAliases;\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase/entityChangers/DescriptionsChanger.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":14,"column":null,"nodeType":"Block","endLine":14,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":24,"column":null,"nodeType":"Block","endLine":24,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":39,"column":null,"nodeType":"Block","endLine":39,"endColumn":null}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar MODULE = wb.entityChangers,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.RevisionStore} revisionStore\n\t * @param {datamodel.Entity} entity\n\t */\n\tvar SELF = MODULE.DescriptionsChanger = function WbEntityChangersDescriptionsChanger( api, revisionStore, entity ) {\n\t\tthis._api = api;\n\t\tthis._revisionStore = revisionStore;\n\t\tthis._entity = entity;\n\t};\n\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * @type {datamodel.Entity}\n\t\t */\n\t\t_entity: null,\n\n\t\t/**\n\t\t * @type {wikibase.RevisionStore}\n\t\t */\n\t\t_revisionStore: null,\n\n\t\t/**\n\t\t * @type {wikibase.api.RepoApi}\n\t\t */\n\t\t_api: null,\n\n\t\t/**\n\t\t * @param {datamodel.Term} description\n\t\t * @return {jQuery.Promise}\n\t\t *         Resolved parameters:\n\t\t *         - {string} The saved description\n\t\t *         Rejected parameters:\n\t\t *         - {wikibase.api.RepoApiError}\n\t\t */\n\t\tsetDescription: function ( description ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\tlanguage = description.getLanguageCode();\n\n\t\t\tthis._api.setDescription(\n\t\t\t\tthis._entity.getId(),\n\t\t\t\tthis._revisionStore.getDescriptionRevision(),\n\t\t\t\tdescription.getText(),\n\t\t\t\tlanguage\n\t\t\t)\n\t\t\t.done( function ( result ) {\n\t\t\t\tvar savedText = result.entity.descriptions[ language ].value,\n\t\t\t\t\tsavedTerm = savedText ? new datamodel.Term( language, savedText ) : null;\n\n\t\t\t\t// Update revision store:\n\t\t\t\tself._revisionStore.setDescriptionRevision( result.entity.lastrevid );\n\n\t\t\t\t// FIXME: Maybe check API's return value?\n\n\t\t\t\t// FIXME: Introduce Item.setDescriptions\n\n\t\t\t\tdeferred.resolve( savedTerm );\n\t\t\t} )\n\t\t\t.fail( function ( errorCode, error ) {\n\t\t\t\tdeferred.reject( wb.api.RepoApiError.newFromApiResponse( error, 'save' ) );\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t}\n\t} );\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase/entityChangers/EntityChangersFactory.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase/entityChangers/EntityTermsChanger.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":20,"column":null,"nodeType":"Block","endLine":20,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":31,"column":null,"nodeType":"Block","endLine":31,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":51,"column":null,"nodeType":"Block","endLine":51,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":52,"column":null,"nodeType":"Block","endLine":52,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":125,"column":null,"nodeType":"Block","endLine":125,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":125,"column":null,"nodeType":"Block","endLine":125,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":126,"column":null,"nodeType":"Block","endLine":126,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":126,"column":null,"nodeType":"Block","endLine":126,"endColumn":null}],"errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar MODULE = wb.entityChangers,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\tfunction chain( tasks ) {\n\t\treturn tasks.reduce( function ( promise, task ) {\n\t\t\treturn promise.then( task );\n\t\t}, $.Deferred().resolve().promise() );\n\t}\n\n\t/**\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.RevisionStore} revisionStore\n\t * @param {datamodel.Entity} entity\n\t */\n\tvar SELF = MODULE.EntityTermsChanger = function WbEntityChangersEntityTermsChanger( api, revisionStore, entity ) {\n\t\tthis._aliasesChanger = new MODULE.AliasesChanger( api, revisionStore, entity );\n\t\tthis._descriptionsChanger = new MODULE.DescriptionsChanger( api, revisionStore, entity );\n\t\tthis._labelsChanger = new MODULE.LabelsChanger( api, revisionStore, entity );\n\t\tthis._entity = entity;\n\t};\n\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * @type {datamodel.Entity}\n\t\t */\n\t\t_entity: null,\n\n\t\t/**\n\t\t * @type {wikibase.entityChangers.AliasesChanger}\n\t\t */\n\t\t_aliasesChanger: null,\n\n\t\t/**\n\t\t * @type {wikibase.entityChangers.DescriptionsChanger}\n\t\t */\n\t\t_descriptionsChanger: null,\n\n\t\t/**\n\t\t * @type {wikibase.entityChangers.LabelsChanger}\n\t\t */\n\t\t_labelsChanger: null,\n\n\t\t/**\n\t\t * @param {datamodel.Fingerprint} newFingerprint\n\t\t * @param {datamodel.Fingerprint} oldFingerprint\n\t\t * @return {jQuery.Promise}\n\t\t *         Resolved parameters:\n\t\t *         - {datamodel.Fingerprint} The saved fingerprint\n\t\t *         Rejected parameters:\n\t\t *         - {wikibase.api.RepoApiError}\n\t\t */\n\t\tsave: function ( newFingerprint, oldFingerprint ) {\n\t\t\tvar labelsChanger = this._labelsChanger,\n\t\t\t\tdescriptionsChanger = this._descriptionsChanger,\n\t\t\t\taliasesChanger = this._aliasesChanger,\n\t\t\t\tchanges = [],\n\t\t\t\tresultFingerprint = newFingerprint;\n\n\t\t\tArray.prototype.push.apply( changes, this._getTermsChanges(\n\t\t\t\tnewFingerprint.getLabels(),\n\t\t\t\toldFingerprint.getLabels(),\n\t\t\t\tfunction ( newTerm ) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\treturn labelsChanger.setLabel( newTerm ).done( function ( savedLabel ) {\n\t\t\t\t\t\t\tif ( savedLabel === null ) {\n\t\t\t\t\t\t\t\tresultFingerprint.removeLabelFor( newTerm.getLanguageCode() );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresultFingerprint.setLabel( newTerm.getLanguageCode(), savedLabel );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} ).fail( function ( error ) {\n\t\t\t\t\t\t\terror.context = { type: 'label', value: newTerm };\n\t\t\t\t\t\t} );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t) );\n\t\t\tArray.prototype.push.apply( changes, this._getTermsChanges(\n\t\t\t\tnewFingerprint.getDescriptions(),\n\t\t\t\toldFingerprint.getDescriptions(),\n\t\t\t\tfunction ( newTerm ) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\treturn descriptionsChanger.setDescription( newTerm ).done( function ( savedDescription ) {\n\t\t\t\t\t\t\tif ( savedDescription === null ) {\n\t\t\t\t\t\t\t\tresultFingerprint.removeDescriptionFor( newTerm.getLanguageCode() );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresultFingerprint.setDescription( newTerm.getLanguageCode(), savedDescription );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} ).fail( function ( error ) {\n\t\t\t\t\t\t\terror.context = { type: 'description', value: newTerm };\n\t\t\t\t\t\t} );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t) );\n\n\t\t\tthis._entity.setFingerprint( oldFingerprint ); // FIXME: For AliasesChanger\n\t\t\tArray.prototype.push.apply( changes, this._getTermsChanges(\n\t\t\t\tnewFingerprint.getAliases(),\n\t\t\t\toldFingerprint.getAliases(),\n\t\t\t\tfunction ( newMultiTerm ) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\treturn aliasesChanger.setAliases( newMultiTerm ).done( function ( savedAliases ) {\n\t\t\t\t\t\t\tresultFingerprint.setAliases( newMultiTerm.getLanguageCode(), savedAliases );\n\t\t\t\t\t\t} ).fail( function ( error ) {\n\t\t\t\t\t\t\terror.context = { type: 'aliases', value: newMultiTerm };\n\t\t\t\t\t\t} );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t) );\n\n\t\t\t// TODO: These changes should not need to be queued.\n\t\t\t// However, the back-end produces edit conflicts when issuing multiple requests at once.\n\t\t\t// Remove queueing as soon as the back-end is fixed; see bug T74020.\n\t\t\treturn chain( changes ).then( function () {\n\t\t\t\treturn resultFingerprint;\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * @param {datamodel.TermMap|datamodel.MultiTermMap} newTerms\n\t\t * @param {datamodel.TermMap|datamodel.MultiTermMap} oldTerms\n\t\t * @param {Function} getChange\n\t\t * @return {Function[]}\n\t\t * @private\n\t\t */\n\t\t_getTermsChanges: function ( newTerms, oldTerms, getChange ) {\n\t\t\tvar changes = [];\n\n\t\t\tnewTerms.each( function ( languageCode, newTerm ) {\n\t\t\t\tvar oldTerm = oldTerms.getItemByKey( languageCode );\n\n\t\t\t\tif ( !newTerm.equals( oldTerm ) ) {\n\t\t\t\t\tchanges.push( getChange( newTerm ) );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\toldTerms.each( function ( languageCode, oldTerm ) {\n\t\t\t\tvar isTerm = oldTerm instanceof datamodel.Term;\n\n\t\t\t\tif ( !newTerms.hasItemForKey( languageCode )\n\t\t\t\t\t// There are also MultiTerms where this does not apply\n\t\t\t\t\t|| ( isTerm && newTerms.getItemByKey( languageCode ).getText() === '' )\n\t\t\t\t) {\n\t\t\t\t\tchanges.push( getChange(\n\t\t\t\t\t\tnew oldTerm.constructor( languageCode, isTerm ? '' : [] )\n\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn changes;\n\t\t}\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase/entityChangers/LabelsChanger.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":14,"column":null,"nodeType":"Block","endLine":14,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":24,"column":null,"nodeType":"Block","endLine":24,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":39,"column":null,"nodeType":"Block","endLine":39,"endColumn":null}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar MODULE = wb.entityChangers,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\t/**\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.RevisionStore} revisionStore\n\t * @param {datamodel.Entity} entity\n\t */\n\tvar SELF = MODULE.LabelsChanger = function WbEntityChangersLabelsChanger( api, revisionStore, entity ) {\n\t\tthis._api = api;\n\t\tthis._revisionStore = revisionStore;\n\t\tthis._entity = entity;\n\t};\n\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * @type {datamodel.Entity}\n\t\t */\n\t\t_entity: null,\n\n\t\t/**\n\t\t * @type {wikibase.RevisionStore}\n\t\t */\n\t\t_revisionStore: null,\n\n\t\t/**\n\t\t * @type {wikibase.api.RepoApi}\n\t\t */\n\t\t_api: null,\n\n\t\t/**\n\t\t * @param {datamodel.Term} label\n\t\t * @return {jQuery.Promise}\n\t\t *         Resolved parameters:\n\t\t *         - {string} The saved label\n\t\t *         Rejected parameters:\n\t\t *         - {wikibase.api.RepoApiError}\n\t\t */\n\t\tsetLabel: function ( label ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred(),\n\t\t\t\tlanguage = label.getLanguageCode();\n\n\t\t\tthis._api.setLabel(\n\t\t\t\tthis._entity.getId(),\n\t\t\t\tthis._revisionStore.getLabelRevision(),\n\t\t\t\tlabel.getText(),\n\t\t\t\tlanguage\n\t\t\t)\n\t\t\t.done( function ( result ) {\n\t\t\t\tvar savedText = result.entity.labels[ language ].value,\n\t\t\t\t\tsavedTerm = savedText ? new datamodel.Term( language, savedText ) : null;\n\n\t\t\t\t// Update revision store:\n\t\t\t\tself._revisionStore.setLabelRevision( result.entity.lastrevid );\n\n\t\t\t\t// FIXME: Maybe check API's return value?\n\n\t\t\t\t// FIXME: Introduce Item.setLabels\n\n\t\t\t\tdeferred.resolve( savedTerm );\n\t\t\t} )\n\t\t\t.fail( function ( errorCode, error ) {\n\t\t\t\tdeferred.reject( wb.api.RepoApiError.newFromApiResponse( error, 'save' ) );\n\t\t\t} );\n\n\t\t\treturn deferred.promise();\n\t\t}\n\t} );\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase/entityChangers/SiteLinkSetsChanger.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":20,"column":null,"nodeType":"Block","endLine":20,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":29,"column":null,"nodeType":"Block","endLine":29,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":39,"column":null,"nodeType":"Block","endLine":39,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":40,"column":null,"nodeType":"Block","endLine":40,"endColumn":null}],"errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar MODULE = wb.entityChangers,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\tfunction chain( tasks ) {\n\t\treturn tasks.reduce( function ( promise, task ) {\n\t\t\treturn promise.then( task );\n\t\t}, $.Deferred().resolve().promise() );\n\t}\n\n\t/**\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.RevisionStore} revisionStore\n\t * @param {datamodel.Entity} entity\n\t */\n\tvar SELF = MODULE.SiteLinkSetsChanger = function WbEntityChangersSiteLinkSetsChanger( api, revisionStore, entity ) {\n\t\tthis._siteLinksChanger = new MODULE.SiteLinksChanger( api, revisionStore, entity );\n\t\tthis._entity = entity;\n\t};\n\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * @type {datamodel.Entity}\n\t\t */\n\t\t_entity: null,\n\n\t\t/**\n\t\t * @type {wikibase.entityChangers.SiteLinksChanger}\n\t\t */\n\t\t_siteLinksChanger: null,\n\n\t\t/**\n\t\t * @param {datamodel.SiteLinkSet} newSiteLinkSet\n\t\t * @param {datamodel.SiteLinkSet} oldSiteLinkSet\n\t\t * @return {jQuery.Promise}\n\t\t *         Resolved parameters:\n\t\t *         - {string} The saved SiteLinkSet\n\t\t *         Rejected parameters:\n\t\t *         - {wikibase.api.RepoApiError}\n\t\t */\n\t\tsave: function ( newSiteLinkSet, oldSiteLinkSet ) {\n\t\t\tfunction getRemovedSiteLinkIds() {\n\t\t\t\tvar currentSiteIds = newSiteLinkSet.getKeys();\n\t\t\t\tvar removedSiteLinkIds = [];\n\n\t\t\t\toldSiteLinkSet.each( function ( siteId ) {\n\t\t\t\t\tif ( currentSiteIds.indexOf( siteId ) === -1 ) {\n\t\t\t\t\t\tremovedSiteLinkIds.push( siteId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn removedSiteLinkIds;\n\t\t\t}\n\n\t\t\tfunction getDiffValue() {\n\t\t\t\tvar siteLinks = [],\n\t\t\t\t\tunchangedSiteLinks = [];\n\t\t\t\tsiteLinks = siteLinks.concat( getRemovedSiteLinkIds().map( function ( siteId ) {\n\t\t\t\t\treturn new datamodel.SiteLink( siteId, '' );\n\t\t\t\t} ) );\n\n\t\t\t\tnewSiteLinkSet.each( function ( site, sitelink ) {\n\t\t\t\t\tif ( !sitelink.equals( oldSiteLinkSet.getItemByKey( site ) ) ) {\n\t\t\t\t\t\tsiteLinks.push( sitelink );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunchangedSiteLinks.push( sitelink );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn { changed: siteLinks, unchanged: unchangedSiteLinks };\n\t\t\t}\n\n\t\t\tvar diffValue = getDiffValue();\n\t\t\tvar siteLinksChanger = this._siteLinksChanger;\n\t\t\tvar resultValue = diffValue.unchanged;\n\n\t\t\treturn chain( diffValue.changed.map( function ( siteLink ) {\n\t\t\t\treturn function () {\n\t\t\t\t\treturn siteLinksChanger.setSiteLink( siteLink ).done( function ( savedSiteLink ) {\n\t\t\t\t\t\tif ( savedSiteLink ) { // Is null if a site link was removed\n\t\t\t\t\t\t\tresultValue.push( savedSiteLink );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t} ) ).then( function () {\n\t\t\t\treturn new datamodel.SiteLinkSet( resultValue.sort( function ( s1, s2 ) {\n\t\t\t\t\treturn s1.getSiteId().localeCompare( s2.getSiteId() );\n\t\t\t\t} ) );\n\t\t\t} );\n\t\t}\n\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/view/resources/wikibase/entityChangers/SiteLinksChanger.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":13,"column":null,"nodeType":"Block","endLine":13,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":23,"column":null,"nodeType":"Block","endLine":23,"endColumn":null},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'datamodel' is undefined.","line":38,"column":null,"nodeType":"Block","endLine":38,"endColumn":null}],"errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Adrian Heine <adrian.heine@wikimedia.de>\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar MODULE = wb.entityChangers,\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\t/**\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.RevisionStore} revisionStore\n\t * @param {datamodel.Entity} entity\n\t */\n\tvar SELF = MODULE.SiteLinksChanger = function WbEntityChangersSiteLinksChanger( api, revisionStore, entity ) {\n\t\tthis._api = api;\n\t\tthis._revisionStore = revisionStore;\n\t\tthis._entity = entity;\n\t};\n\n\t$.extend( SELF.prototype, {\n\t\t/**\n\t\t * @type {datamodel.Entity}\n\t\t */\n\t\t_entity: null,\n\n\t\t/**\n\t\t * @type {wikibase.RevisionStore}\n\t\t */\n\t\t_revisionStore: null,\n\n\t\t/**\n\t\t * @type {wikibase.api.RepoApi}\n\t\t */\n\t\t_api: null,\n\n\t\t/**\n\t\t * @param {datamodel.SiteLink} siteLink\n\t\t * @return {jQuery.Promise}\n\t\t *         Resolved parameters:\n\t\t *         - {string} The saved siteLink\n\t\t *         Rejected parameters:\n\t\t *         - {wikibase.api.RepoApiError}\n\t\t */\n\t\tsetSiteLink: function ( siteLink ) {\n\t\t\tvar self = this,\n\t\t\t\tdeferred = $.Deferred();\n\n\t\t\tthis._api.setSitelink(\n\t\t\t\tthis._entity.getId()