Add jsdoc with jsdoc-wmf-theme

jsduck is preventing us from using ES6 syntax and has not
been supported for some time. It is also difficult to setup
locally due its use of Ruby.

Introduce jsdoc and remove jsduck per T138401#9335987
Link to static copy of jsduck explaining the state

This does the bare minimum - the docs are built to the folder
docs/js/index.html and only one module is ported over to allow
us to provide feedback on the end result.

Bug: T138401
Change-Id: I1a351ac5aec731bb79a877023ac10988ec3ec786
This commit is contained in:
Jon Robson 2023-07-11 08:52:05 -07:00 committed by Jdlrobson
parent dd4461c17d
commit dfea3e8e5a
9 changed files with 638 additions and 51 deletions

View file

@ -142,7 +142,7 @@ module.exports = function ( grunt ) {
}
},
copy: {
jsduck: {
jsdoc: {
src: 'resources/**/*',
dest: 'docs/js/modules',
expand: true,

145
jsdoc.js Normal file
View file

@ -0,0 +1,145 @@
'use strict';
module.exports = {
opts: {
destination: 'docs/js',
package: 'resources/package.json',
pedantic: true,
readme: 'resources/README.md',
recurse: true,
template: 'node_modules/jsdoc-wmf-theme'
},
plugins: [
'plugins/markdown'
],
source: {
include: [
'resources/src/mediawiki.util'
],
exclude: [
/* The following modules are temporarily disabled as we haven't
got round to reviewing them and incorporating them into the documentation page yet. */
'resources/src/codex',
'resources/src/mediawiki.page.image.pagination.js',
'resources/src/codex-search',
'resources/src/mediawiki.page.media.js',
'resources/src/jquery',
'resources/src/jquery.lengthLimit.js',
'resources/src/mediawiki.page.preview.js',
'resources/src/jquery.spinner',
'resources/src/mediawiki.page.ready',
'resources/src/jquery.tablesorter',
'resources/src/mediawiki.page.watch.ajax',
'resources/src/mediawiki.ForeignApi',
'resources/src/mediawiki.pulsatingdot',
'resources/src/mediawiki.ForeignStructuredUpload.BookletLayout',
'resources/src/mediawiki.rcfilters',
'resources/src/mediawiki.ForeignUpload.js',
'resources/src/mediawiki.router',
'resources/src/mediawiki.String.js',
'resources/src/mediawiki.searchSuggest',
'resources/src/mediawiki.Title',
'resources/src/mediawiki.skinning',
'resources/src/mediawiki.Upload.BookletLayout',
'resources/src/mediawiki.special',
'resources/src/mediawiki.Upload.Dialog.js',
'resources/src/mediawiki.special.apisandbox',
'resources/src/mediawiki.Upload.js',
'resources/src/mediawiki.special.block.js',
'resources/src/mediawiki.Uri',
'resources/src/mediawiki.special.changecredentails.js',
'resources/src/mediawiki.action',
'resources/src/mediawiki.special.changeemail.js',
'resources/src/mediawiki.action.edit',
'resources/src/mediawiki.special.changeslist',
'resources/src/mediawiki.api',
'resources/src/mediawiki.special.changeslist.legend.js',
'resources/src/mediawiki.apipretty',
'resources/src/mediawiki.base',
'resources/src/mediawiki.special.changeslist.watchlistexpiry',
'resources/src/mediawiki.checkboxtoggle.js',
'resources/src/mediawiki.special.contributions.js',
'resources/src/mediawiki.special.createaccount',
'resources/src/mediawiki.cldr',
'resources/src/mediawiki.special.editrecovery',
'resources/src/mediawiki.confirmCloseWindow.js',
'resources/src/mediawiki.special.preferences.ooui',
'resources/src/mediawiki.cookie',
'resources/src/mediawiki.special.search',
'resources/src/mediawiki.debug',
'resources/src/mediawiki.special.search.commonsInterwikiWidget.js',
'resources/src/mediawiki.deflate',
'resources/src/mediawiki.diff',
'resources/src/mediawiki.special.unwatchedPages',
'resources/src/mediawiki.editRecovery',
'resources/src/mediawiki.special.upload',
'resources/src/mediawiki.experiments.js',
'resources/src/mediawiki.feedback',
'resources/src/mediawiki.feedlink',
'resources/src/mediawiki.special.userrights.js',
'resources/src/mediawiki.filewarning',
'resources/src/resources/src/mediawiki.special.watchlist',
'resources/src/mediawiki.helplink',
'resources/src/mediawiki.storage.js',
'resources/src/mediawiki.tempUserBanner',
'resources/src/mediawiki.htmlform',
'resources/src/mediawiki.tempUserCreated',
'resources/src/mediawiki.htmlform.ooui',
'resources/src/mediawiki.template.js',
'resources/src/mediawiki.template.mustache.js',
'resources/src/mediawiki.toc',
'resources/src/mediawiki.inspect.js',
'resources/src/mediawiki.jqueryMsg',
'resources/src/mediawiki.language',
'resources/src/mediawiki.language.months',
'resources/src/mediawiki.language.names',
'resources/src/mediawiki.user.js',
'resources/src/mediawiki.language.specialCharacters',
'resources/src/mediawiki.userSuggest.js',
'resources/src/mediawiki.libs.jpegmeta',
'resources/src/mediawiki.visibleTimeout',
'resources/src/mediawiki.libs.pluralruleparser',
'resources/src/mediawiki.watchstar.widgets',
'resources/src/mediawiki.messagePoster',
'resources/src/mediawiki.widgets',
'resources/src/mediawiki.misc-authed-curate',
'resources/src/mediawiki.widgets.datetime',
'resources/src/mediawiki.misc-authed-ooui',
'resources/src/mediawiki.widgets.visibleLengthLimit',
'resources/src/mediawiki.misc-authed-pref',
'resources/src/moment',
'resources/src/mediawiki.notification',
'resources/src/oojs-global.js',
'resources/src/mediawiki.notification.convertmessagebox.js',
'resources/src/ooui-local.js',
'resources/src/qunitjs',
'resources/src/mediawiki.page.gallery.js',
'resources/src/skip-web2017-polyfills.js',
'resources/src/mediawiki.page.gallery.slideshow.js',
'resources/src/startup',
'resources/src/vue'
]
},
templates: {
cleverLinks: true,
default: {
useLongnameInNav: true
},
wmf: {
linkMap: {
Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array',
Blob: 'https://developer.mozilla.org/en-US/docs/Web/API/Blob',
CSSStyleSheet: 'https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet',
File: 'https://developer.mozilla.org/en-US/docs/Web/API/File',
HTMLElement: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement',
HTMLInputElement: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement',
jQuery: 'https://api.jquery.com/jQuery/',
'jQuery.fn': 'https://api.jquery.com/jQuery/',
'jQuery.Event': 'https://api.jquery.com/Types/#Event',
'jQuery.Promise': 'https://api.jquery.com/Types/#Promise',
Promise: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise',
Set: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set',
URLSearchParams: 'https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams'
}
}
}
};

View file

@ -1,36 +0,0 @@
{
"--title": "MediaWiki core - Documentation",
"--categories": "maintenance/jsduck/categories.json",
"--eg-iframe": "maintenance/jsduck/eg-iframe.html",
"--tags": "maintenance/jsduck/custom_tags.rb",
"--warnings": [ "-nodoc(class,public),-global", "-tag(stable)" ],
"--builtin-classes": true,
"--processes": "0",
"--warnings-exit-nonzero": true,
"--external": "Blob,File,FileList,HTMLBodyElement,HTMLDocument,HTMLElement,HTMLHtmlElement,HTMLInputElement,HTMLStyleElement,IdleDeadline,KeyboardEvent,MouseEvent,Node,Set,URL,URLSearchParams,Window",
"--output": "docs/js",
"--exclude": [
"resources/src/codex",
"resources/src/codex-search",
"resources/src/jquery.tablesorter",
"resources/src/jquery.tipsy",
"resources/src/jquery/jquery.highlightText.js",
"resources/src/mediawiki.libs.jpegmeta/jpegmeta.js",
"resources/src/mediawiki.page.ready/teleportTarget.js",
"resources/src/mediawiki.skinning",
"resources/src/mediawiki.watchstar.widgets/WatchlistExpiryWidget.js",
"resources/src/startup/startup.js",
"resources/src/vue"
],
"--": [
"maintenance/jsduck/external.js",
"resources/lib/jquery.client/jquery.client.js",
"resources/lib/ooui/oojs-ui-apex.js",
"resources/lib/ooui/oojs-ui-core.js",
"resources/lib/ooui/oojs-ui-toolbars.js",
"resources/lib/ooui/oojs-ui-widgets.js",
"resources/lib/ooui/oojs-ui-wikimediaui.js",
"resources/lib/ooui/oojs-ui-windows.js",
"resources/src"
]
}

454
package-lock.json generated
View file

@ -22,6 +22,8 @@
"grunt-eslint": "24.3.0",
"grunt-karma": "4.0.2",
"grunt-stylelint": "0.19.0",
"jsdoc": "3.6.10",
"jsdoc-wmf-theme": "0.0.8",
"karma": "6.4.1",
"karma-chrome-launcher": "3.1.0",
"karma-firefox-launcher": "1.3.0",
@ -145,6 +147,18 @@
"node": ">=4"
}
},
"node_modules/@babel/parser": {
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz",
"integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@ -620,6 +634,12 @@
"@types/node": "*"
}
},
"node_modules/@types/linkify-it": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz",
"integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==",
"dev": true
},
"node_modules/@types/lodash": {
"version": "4.14.178",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz",
@ -653,6 +673,22 @@
"@types/lodash": "*"
}
},
"node_modules/@types/markdown-it": {
"version": "12.2.3",
"resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
"integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
"dev": true,
"dependencies": {
"@types/linkify-it": "*",
"@types/mdurl": "*"
}
},
"node_modules/@types/mdurl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz",
"integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==",
"dev": true
},
"node_modules/@types/minimatch": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
@ -2211,6 +2247,18 @@
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"node_modules/catharsis": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz",
"integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==",
"dev": true,
"dependencies": {
"lodash": "^4.17.15"
},
"engines": {
"node": ">= 10"
}
},
"node_modules/chai": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
@ -6023,12 +6071,50 @@
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/js2xmlparser": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
"integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
"dev": true,
"dependencies": {
"xmlcreate": "^2.0.4"
}
},
"node_modules/jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
"node_modules/jsdoc": {
"version": "3.6.10",
"resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz",
"integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.9.4",
"@types/markdown-it": "^12.2.3",
"bluebird": "^3.7.2",
"catharsis": "^0.9.0",
"escape-string-regexp": "^2.0.0",
"js2xmlparser": "^4.0.2",
"klaw": "^4.0.1",
"markdown-it": "^12.3.2",
"markdown-it-anchor": "^8.4.1",
"marked": "^4.0.10",
"mkdirp": "^1.0.4",
"requizzle": "^0.2.3",
"strip-json-comments": "^3.1.0",
"taffydb": "2.6.2",
"underscore": "~1.13.2"
},
"bin": {
"jsdoc": "jsdoc.js"
},
"engines": {
"node": ">=8.15.0"
}
},
"node_modules/jsdoc-type-pratt-parser": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
@ -6038,6 +6124,50 @@
"node": ">=12.0.0"
}
},
"node_modules/jsdoc-wmf-theme": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/jsdoc-wmf-theme/-/jsdoc-wmf-theme-0.0.8.tgz",
"integrity": "sha512-0TSKpoEIwJgo2In5KQW3CImmODHV7bV7p0AyoyyF8wDPNA4Mvz4ZJ8TmhlpgWLyJzbefnVg4uxyEpElwdB3WPw==",
"dev": true,
"dependencies": {
"domino": "^2.1.6",
"lunr": "2.3.9",
"taffydb": "^2.7.3"
}
},
"node_modules/jsdoc-wmf-theme/node_modules/domino": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz",
"integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==",
"dev": true
},
"node_modules/jsdoc-wmf-theme/node_modules/taffydb": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz",
"integrity": "sha512-GQ3gtYFSOAxSMN/apGtDKKkbJf+8izz5YfbGqIsUc7AMiQOapARZ76dhilRY2h39cynYxBFdafQo5HUL5vgkrg==",
"dev": true
},
"node_modules/jsdoc/node_modules/escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jsdoc/node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true,
"bin": {
"mkdirp": "bin/cmd.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/jsesc": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
@ -6381,6 +6511,15 @@
"node": ">=0.10.0"
}
},
"node_modules/klaw": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz",
"integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==",
"dev": true,
"engines": {
"node": ">=14.14.0"
}
},
"node_modules/known-css-properties": {
"version": "0.28.0",
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz",
@ -6567,6 +6706,15 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
"node_modules/linkify-it": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
"integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
"dev": true,
"dependencies": {
"uc.micro": "^1.0.1"
}
},
"node_modules/livereload-js": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz",
@ -6866,6 +7014,12 @@
"node": ">=10"
}
},
"node_modules/lunr": {
"version": "2.3.9",
"resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
"integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
"dev": true
},
"node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
@ -6911,6 +7065,59 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/markdown-it": {
"version": "12.3.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
"integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
"dev": true,
"dependencies": {
"argparse": "^2.0.1",
"entities": "~2.1.0",
"linkify-it": "^3.0.1",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
},
"bin": {
"markdown-it": "bin/markdown-it.js"
}
},
"node_modules/markdown-it-anchor": {
"version": "8.6.7",
"resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
"integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
"dev": true,
"peerDependencies": {
"@types/markdown-it": "*",
"markdown-it": "*"
}
},
"node_modules/markdown-it/node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"node_modules/markdown-it/node_modules/entities": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
"dev": true,
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/marked": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
"integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
"dev": true,
"bin": {
"marked": "bin/marked.js"
},
"engines": {
"node": ">= 12"
}
},
"node_modules/marky": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz",
@ -6933,6 +7140,12 @@
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
},
"node_modules/mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
"dev": true
},
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -8800,6 +9013,15 @@
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
},
"node_modules/requizzle": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz",
"integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==",
"dev": true,
"dependencies": {
"lodash": "^4.17.21"
}
},
"node_modules/resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@ -9918,6 +10140,12 @@
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/taffydb": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
"integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==",
"dev": true
},
"node_modules/tar-fs": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
@ -10188,6 +10416,12 @@
"node": "*"
}
},
"node_modules/uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
"dev": true
},
"node_modules/unbzip2-stream": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
@ -10207,6 +10441,12 @@
"node": ">=0.10.0"
}
},
"node_modules/underscore": {
"version": "1.13.6",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
"integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
"dev": true
},
"node_modules/underscore.string": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
@ -10688,6 +10928,12 @@
"node": ">=8.0"
}
},
"node_modules/xmlcreate": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz",
"integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
"dev": true
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@ -11123,6 +11369,12 @@
}
}
},
"@babel/parser": {
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz",
"integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==",
"dev": true
},
"@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@ -11477,6 +11729,12 @@
"@types/node": "*"
}
},
"@types/linkify-it": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz",
"integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==",
"dev": true
},
"@types/lodash": {
"version": "4.14.178",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz",
@ -11510,6 +11768,22 @@
"@types/lodash": "*"
}
},
"@types/markdown-it": {
"version": "12.2.3",
"resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
"integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
"dev": true,
"requires": {
"@types/linkify-it": "*",
"@types/mdurl": "*"
}
},
"@types/mdurl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz",
"integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==",
"dev": true
},
"@types/minimatch": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
@ -12709,6 +12983,15 @@
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"catharsis": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz",
"integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==",
"dev": true,
"requires": {
"lodash": "^4.17.15"
}
},
"chai": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
@ -15589,18 +15872,89 @@
"esprima": "^4.0.0"
}
},
"js2xmlparser": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
"integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
"dev": true,
"requires": {
"xmlcreate": "^2.0.4"
}
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
"jsdoc": {
"version": "3.6.10",
"resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz",
"integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==",
"dev": true,
"requires": {
"@babel/parser": "^7.9.4",
"@types/markdown-it": "^12.2.3",
"bluebird": "^3.7.2",
"catharsis": "^0.9.0",
"escape-string-regexp": "^2.0.0",
"js2xmlparser": "^4.0.2",
"klaw": "^4.0.1",
"markdown-it": "^12.3.2",
"markdown-it-anchor": "^8.4.1",
"marked": "^4.0.10",
"mkdirp": "^1.0.4",
"requizzle": "^0.2.3",
"strip-json-comments": "^3.1.0",
"taffydb": "2.6.2",
"underscore": "~1.13.2"
},
"dependencies": {
"escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
},
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
}
}
},
"jsdoc-type-pratt-parser": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
"integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
"dev": true
},
"jsdoc-wmf-theme": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/jsdoc-wmf-theme/-/jsdoc-wmf-theme-0.0.8.tgz",
"integrity": "sha512-0TSKpoEIwJgo2In5KQW3CImmODHV7bV7p0AyoyyF8wDPNA4Mvz4ZJ8TmhlpgWLyJzbefnVg4uxyEpElwdB3WPw==",
"dev": true,
"requires": {
"domino": "^2.1.6",
"lunr": "2.3.9",
"taffydb": "^2.7.3"
},
"dependencies": {
"domino": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz",
"integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==",
"dev": true
},
"taffydb": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz",
"integrity": "sha512-GQ3gtYFSOAxSMN/apGtDKKkbJf+8izz5YfbGqIsUc7AMiQOapARZ76dhilRY2h39cynYxBFdafQo5HUL5vgkrg==",
"dev": true
}
}
},
"jsesc": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
@ -15885,6 +16239,12 @@
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
"klaw": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz",
"integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==",
"dev": true
},
"known-css-properties": {
"version": "0.28.0",
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz",
@ -16061,6 +16421,15 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
"linkify-it": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
"integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
"dev": true,
"requires": {
"uc.micro": "^1.0.1"
}
},
"livereload-js": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz",
@ -16314,6 +16683,12 @@
"yallist": "^4.0.0"
}
},
"lunr": {
"version": "2.3.9",
"resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
"integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
"dev": true
},
"make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
@ -16344,6 +16719,46 @@
"integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
"dev": true
},
"markdown-it": {
"version": "12.3.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
"integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
"dev": true,
"requires": {
"argparse": "^2.0.1",
"entities": "~2.1.0",
"linkify-it": "^3.0.1",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
},
"dependencies": {
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"entities": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
"dev": true
}
}
},
"markdown-it-anchor": {
"version": "8.6.7",
"resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
"integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
"dev": true,
"requires": {}
},
"marked": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
"integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
"dev": true
},
"marky": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz",
@ -16362,6 +16777,12 @@
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
"dev": true
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -17721,6 +18142,15 @@
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
},
"requizzle": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz",
"integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==",
"dev": true,
"requires": {
"lodash": "^4.17.21"
}
},
"resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@ -18589,6 +19019,12 @@
}
}
},
"taffydb": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
"integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==",
"dev": true
},
"tar-fs": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
@ -18798,6 +19234,12 @@
"integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==",
"dev": true
},
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
"dev": true
},
"unbzip2-stream": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
@ -18814,6 +19256,12 @@
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
"dev": true
},
"underscore": {
"version": "1.13.6",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
"integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
"dev": true
},
"underscore.string": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
@ -19172,6 +19620,12 @@
"integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
"dev": true
},
"xmlcreate": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz",
"integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
"dev": true
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",

View file

@ -7,8 +7,8 @@
"lint": "grunt lint",
"test": "grunt lint && npm run doc",
"qunit": "grunt qunit",
"doc": "jsduck",
"postdoc": "grunt copy:jsduck",
"doc": "jsdoc -c jsdoc.js",
"postdoc": "grunt copy:jsdoc",
"selenium-daily": "npm run selenium-test -- --mochaOpts.grep @daily",
"selenium-test": "wdio ./tests/selenium/wdio.conf.js"
},
@ -29,6 +29,8 @@
"grunt-eslint": "24.3.0",
"grunt-karma": "4.0.2",
"grunt-stylelint": "0.19.0",
"jsdoc": "3.6.10",
"jsdoc-wmf-theme": "0.0.8",
"karma": "6.4.1",
"karma-chrome-launcher": "3.1.0",
"karma-firefox-launcher": "1.3.0",

5
resources/README.md Normal file
View file

@ -0,0 +1,5 @@
> Please pardon our mess! We are currently in the process of revamping this documentation page so this page may appear incomplete. If you use this documentation we would value your feedback at [This MediaWiki page](https://www.mediawiki.org/wiki/Developer_Experience/Technical_Documentation). If needed you can view [the MediaWiki 1.41 frontend documentation page](https://doc.wikimedia.org/mediawiki-core/REL1_41/js/).
This "resources" contains frontend resources (JavaScript and CSS) managed by [ResourceLoader](https://www.mediawiki.org/wiki/ResourceLoader).
This documentation describes the public API that gadgets, skins and extensions can use to interact with MediaWiki.

4
resources/package.json Normal file
View file

@ -0,0 +1,4 @@
{
"@name": "Used by jsdoc",
"name": "MediaWiki frontend code"
}

View file

@ -1,7 +1,5 @@
/**
* jQuery plugin to update the tooltip to show the correct access key
*
* @class jQuery.plugin.accessKeyLabel
*/
// Whether to use 'test-' instead of correct prefix (for unit tests)
@ -174,7 +172,13 @@ function updateTooltip( element ) {
/**
* Update the titles for all elements in a jQuery selection.
*
* @class updateTooltipAccessKeys
* @memberof jQuery.fn
* @return {jQuery}
* @example
* // Converts tooltip "[z]" to associated browser shortcut key e.g. "[ctrl-option-z]"
* var $a = $('<a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a>');
* $a.updateTooltipAccessKeys();
* @chainable
*/
$.fn.updateTooltipAccessKeys = function () {
@ -183,12 +187,6 @@ $.fn.updateTooltipAccessKeys = function () {
} );
};
/**
* getAccessKeyLabel
*
* @method updateTooltipAccessKeys_getAccessKeyLabel
* @inheritdoc #getAccessKeyLabel
*/
$.fn.updateTooltipAccessKeys.getAccessKeyLabel = getAccessKeyLabel;
/**

View file

@ -49,8 +49,7 @@ function escapeIdInternal( str, mode ) {
/**
* Utility library provided by the `mediawiki.util` module.
*
* @class mw.util
* @singleton
* @exports mw.util
*/
var util = {
@ -503,6 +502,7 @@ var util = {
* @param {string} [label] of the new portlet.
* @param {string} [before] selector of the element preceding the new portlet. If not passed
* the caller is responsible for appending the element to the DOM before using addPortletLink.
* @fires util_addPortlet
* @return {HTMLElement|null} will be null if it was not possible to create an portlet with
* the required information e.g. the selector given in before parameter could not be resolved
* to an existing element in the page.
@ -540,12 +540,15 @@ var util = {
}
}
/**
* @event util.addPortlet
*
* Fires when a portlet is successfully created.
*
* @event util_addPortlet
* @param {HTMLElement} portlet the portlet that was created.
* @param {string|null} before the css selector used to append to the DOM.
* @example
* mw.hook( 'util.addPortlet' ).add( ( p ) => {
* p.style.border = 'solid 1px black';
* } );
*/
mw.hook( 'util.addPortlet' ).fire( portlet, before );
return portlet;
@ -698,6 +701,18 @@ var util = {
$( link ).updateTooltipAccessKeys();
}
/**
* Fires when a portlet link is successfully created.
*
* @event util_addPortletLink
* @param {HTMLElement} item the portlet link that was created.
* @param {Object} information about the item include id.
* @example
* mw.hook( 'util.addPortletLink' ).add( ( link ) => {
* const span = $( '<span class="icon">' );
* link.appendChild( span );
* } );
*/
mw.hook( 'util.addPortletLink' ).fire( item, {
id: id
} );