Currently, MediaWiki has a mess of resources, some but not all of which are upstream libraries.
This means that occasionally people will attempt to make local modifications of the libraries
by accident, or deliberately but do not flag it, making dependency management a challenge (and
fixing upstream-related bugs a headache).
Instead, we now split the /resources directory into a /resources/lib directory for those items
which are used purely as intact upstream libraries, and a /resources/src directroy for those
which are either local libraries written for MediaWiki and mastered here, or downstream forks
of upstream libraries which require particular care and attention when being upgraded. Also,
some incidental files which are not to be loaded as part of a module have been moved to better
locations.
Upstream libaries
* jquery
resources/jquery/jquery.js
* jquery.appear
resources/jquery/jquery.appear.js
* jquery.async
resources/jquery/jquery.async.js
* jquery.chosen
resources/jquery.chosen/*
* jquery.cookie
resources/jquery/jquery.cookie.js
* jquery.form
resources/jquery/jquery.form.js
* jquery.fullscreen.js
resources/jquery/jquery.fullscreen.js
* jquery.hoverIntent
resources/jquery/jquery.hoverIntent.js
* jquery.json
resources/jquery/jquery.json.js
* jquery.mockjax
resources/jquery/jquery.mockjax.js
* jquery.qunit
resources/jquery/jquery.qunit.css
resources/jquery/jquery.qunit.js
* jquery.jStorage
resources/jquery/jquery.jStorage.js
* jquery.throttle-debounce
resources/jquery/jquery.ba-throttle-debounce.js
* jquery.validate
resources/jquery/jquery.validate.js
* jquery.xmldom
resources/jquery/jquery.xmldom.js
* moment
resources/moment/*
* OOjs
resource/oojs/*
* OOjs UI
resources/oojs-ui/*
* jquery.ui.*
resources/jquery.ui/*
resources/jquery.ui/themes/default moved to resources/lib/jquery.ui/themes/
resources/jquery.ui/themes/vector moved to resources/src/jquery.ui-themes/
* jquery.effects.*
resources/jquery.effects/*
* sinon
resources/sinonjs/*
Upstream libraries forked for MediaWiki
* jquery.color
resources/jquery/jquery.color.js
* jquery.tipsy
resources/jquery.tipsy/*
Local libraries
* jquery.arrowSteps
resources/jquery/jquery.arrowSteps.css
resources/jquery/jquery.arrowSteps.js
resources/jquery/images/jquery.arrowSteps.divider-ltr.png
resources/jquery/images/jquery.arrowSteps.divider-rtl.png
resources/jquery/images/jquery.arrowSteps.head-ltr.png
resources/jquery/images/jquery.arrowSteps.head-rtl.png
resources/jquery/images/jquery.arrowSteps.tail-ltr.png
resources/jquery/images/jquery.arrowSteps.tail-rtl.png
* jquery.autoEllipsis
resources/jquery/jquery.autoEllipsis.js
* jquery.badge
resources/jquery/jquery.badge.css
resources/jquery/jquery.badge.js
* jquery.byteLength
resources/jquery/jquery.byteLength.js
* jquery.byteLimit
resources/jquery/jquery.byteLimit.js
* jquery.checkboxShiftClick
resources/jquery/jquery.checkboxShiftClick.js
* jquery.client
resources/jquery/jquery.client.js
* jquery.colorUtil
resources/jquery/jquery.colorUtil.js
* jquery.delayedBind
resources/jquery/jquery.delayedBind.js
* jquery.expandableField
resources/jquery/jquery.expandableField.js
* jquery.farbtastic
resources/jquery/jquery.farbtastic.css
resources/jquery/jquery.farbtastic.js
resources/jquery/images/marker.png
resources/jquery/images/mask.png
resources/jquery/images/wheel.png
* jquery.footHovzer
resources/jquery/jquery.footHovzer.css
resources/jquery/jquery.footHovzer.js
* jquery.getAttrs
resources/jquery/jquery.getAttrs.js
* jquery.hidpi
resources/jquery/jquery.hidpi.js
* jquery.highlightText
resources/jquery/jquery.highlightText.js
* jquery.localize
resources/jquery/jquery.localize.js
* jquery.makeCollapsible
resources/jquery/jquery.makeCollapsible.css
resources/jquery/jquery.makeCollapsible.js
* jquery.mw-jump
resources/jquery/jquery.mw-jump.js
* jquery.mwExtension
resources/jquery/jquery.mwExtension.js
* jquery.placeholder
resources/jquery/jquery.placeholder.js
* jquery.spinner
resources/jquery/jquery.spinner.css
resources/jquery/jquery.spinner.js
resources/jquery/images/spinner-large.gif
resources/jquery/images/spinner.gif
* jquery.suggestions
resources/jquery/jquery.suggestions.css
resources/jquery/jquery.suggestions.js
* jquery.tabIndex
resources/jquery/jquery.tabIndex.js
* jquery.tablesorter
resources/jquery/jquery.tablesorter.css
resources/jquery/jquery.tablesorter.js
resources/jquery/images/sort_both.gif
resources/jquery/images/sort_down.gif
resources/jquery/images/sort_none.gif
resources/jquery/images/sort_up.gif
* jquery.textSelection
resources/jquery/jquery.textSelection.js
* jquery.qunit.completenessTest
resources/jquery/jquery.qunit.completenessTest.js
* mediawiki
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.log.js
* mediawiki.api
resources/mediawiki.api/mediawiki.api.js
* mediawiki.api.category
resources/mediawiki.api/mediawiki.api.category.js
* mediawiki.api.edit
resources/mediawiki.api/mediawiki.api.edit.js
* mediawiki.api.login
resources/mediawiki.api/mediawiki.api.login.js
* mediawiki.api.parse
resources/mediawiki.api/mediawiki.api.parse.js
* mediawiki.api.watch
resources/mediawiki.api/mediawiki.api.watch.js
* mediawiki.debug
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.debug.less
resources/mediawiki/mediawiki.debug.profile.css
resources/mediawiki/mediawiki.debug.profile.js
* mediawiki.debug.init
resources/mediawiki/mediawiki.debug.init.js
* mediawiki.feedback
resources/mediawiki/mediawiki.feedback.css
resources/mediawiki/mediawiki.feedback.js
resources/mediawiki/mediawiki.feedback.spinner.gif
* mediawiki.hidpi
resources/mediawiki/mediawiki.hidpi.js
* mediawiki.hlist
resources/mediawiki/mediawiki.hlist.css
resources/mediawiki/mediawiki.hlist.js
* mediawiki.htmlform
resources/mediawiki/mediawiki.htmlform.js
* mediawiki.icon
resources/mediawiki/mediawiki.icon.less
resources/mediawiki/images/arrow-collapsed-ltr.png
resources/mediawiki/images/arrow-collapsed-ltr.svg
resources/mediawiki/images/arrow-collapsed-rtl.png
resources/mediawiki/images/arrow-collapsed-rtl.svg
resources/mediawiki/images/arrow-expanded.png
resources/mediawiki/images/arrow-expanded.svg
* mediawiki.inspect
resources/mediawiki/mediawiki.inspect.js
* mediawiki.notification
resources/mediawiki/mediawiki.notification.css
resources/mediawiki/mediawiki.notification.hideForPrint.css
resources/mediawiki/mediawiki.notification.js
* mediawiki.notify
resources/mediawiki/mediawiki.notify.js
* mediawiki.searchSuggest
resources/mediawiki/mediawiki.searchSuggest.css
resources/mediawiki/mediawiki.searchSuggest.js
* mediawiki.Title
resources/mediawiki/mediawiki.Title.js
* mediawiki.toc
resources/mediawiki/mediawiki.toc.js
* mediawiki.Uri
resources/mediawiki/mediawiki.Uri.js
* mediawiki.user
resources/mediawiki/mediawiki.user.js
* mediawiki.util
resources/mediawiki/mediawiki.util.js
* mediawiki.action.edit
resources/mediawiki.action/mediawiki.action.edit.js
* mediawiki.action.edit.styles
resources/mediawiki.action/mediawiki.action.edit.styles.css
* mediawiki.action.edit.collapsibleFooter
resources/mediawiki.action/mediawiki.action.edit.collapsibleFooter.css
resources/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js
* mediawiki.action.edit.preview
resources/mediawiki.action/mediawiki.action.edit.preview.js
* mediawiki.action.history
resources/mediawiki.action/mediawiki.action.history.js
* mediawiki.action.history.diff
resources/mediawiki.action/mediawiki.action.history.diff.css
* mediawiki.action.view.dblClickEdit
resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js
* mediawiki.action.view.metadata
resources/mediawiki.action/mediawiki.action.view.metadata.js
* mediawiki.action.view.postEdit
resources/mediawiki.action/mediawiki.action.view.postEdit.css
resources/mediawiki.action/mediawiki.action.view.postEdit.js
resources/mediawiki.action/images/green-checkmark.png
* mediawiki.action.view.redirectToFragment
resources/mediawiki.action/mediawiki.action.view.redirectToFragment.js
* mediawiki.action.view.rightClickEdit
resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js
* mediawiki.action.edit.editWarning
resources/mediawiki.action/mediawiki.action.edit.editWarning.js
* mediawiki.action.watch.ajax
No files associated with this resource.
* mediawiki.language
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki.language/mediawiki.language.numbers.js
resources/mediawiki.language/languages/bs.js
resources/mediawiki.language/languages/dsb.js
resources/mediawiki.language/languages/fi.js
resources/mediawiki.language/languages/ga.js
resources/mediawiki.language/languages/he.js
resources/mediawiki.language/languages/hsb.js
resources/mediawiki.language/languages/hu.js
resources/mediawiki.language/languages/hy.js
resources/mediawiki.language/languages/la.js
resources/mediawiki.language/languages/os.js
resources/mediawiki.language/languages/ru.js
resources/mediawiki.language/languages/sl.js
resources/mediawiki.language/languages/uk.js
* mediawiki.cldr
resources/mediawiki.language/mediawiki.cldr.js
* mediawiki.libs.pluralruleparser
Possibly should be moved to /lib
resources/mediawiki.libs/CLDRPluralRuleParser.js
* mediawiki.language.init
resources/mediawiki.language/mediawiki.language.init.js
* mediawiki.jqueryMsg
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.jqueryMsg.peg
* mediawiki.language.months
resources/mediawiki.language/mediawiki.language.months.js
* mediawiki.libs.jpegmeta
resources/mediawiki.libs/mediawiki.libs.jpegmeta.js
* mediawiki.page.gallery
resources/mediawiki.page/mediawiki.page.gallery.js
* mediawiki.page.ready
resources/mediawiki.page/mediawiki.page.ready.js
* mediawiki.page.startup
resources/mediawiki.page/mediawiki.page.startup.js
* mediawiki.page.patrol.ajax
resources/mediawiki.page/mediawiki.page.patrol.ajax.js
* mediawiki.page.watch.ajax
resources/mediawiki.page/mediawiki.page.watch.ajax.js
* mediawiki.page.image.pagination
resources/mediawiki.page/mediawiki.page.image.pagination.js
* mediawiki.special
resources/mediawiki.special/mediawiki.special.css
resources/mediawiki.special/mediawiki.special.js
* mediawiki.special.block
resources/mediawiki.special/mediawiki.special.block.css
resources/mediawiki.special/mediawiki.special.block.js
* mediawiki.special.changeemail
resources/mediawiki.special/mediawiki.special.changeemail.css
resources/mediawiki.special/mediawiki.special.changeemail.js
* mediawiki.special.changeslist
resources/mediawiki.special/mediawiki.special.changeslist.css
* mediawiki.special.changeslist.legend
resources/mediawiki.special/mediawiki.special.changeslist.legend.css
* mediawiki.special.changeslist.legend.js
resources/mediawiki.special/mediawiki.special.changeslist.legend.js
* mediawiki.special.changeslist.enhanced
resources/mediawiki.special/mediawiki.special.changeslist.enhanced.css
* mediawiki.special.movePage
resources/mediawiki.special/mediawiki.special.movePage.js
* mediawiki.special.pagesWithProp
resources/mediawiki.special/mediawiki.special.pagesWithProp.css
* mediawiki.special.preferences
resources/mediawiki.special/mediawiki.special.preferences.css
resources/mediawiki.special/mediawiki.special.preferences.js
* mediawiki.special.recentchanges
resources/mediawiki.special/mediawiki.special.recentchanges.js
* mediawiki.special.search
resources/mediawiki.special/mediawiki.special.search.css
resources/mediawiki.special/mediawiki.special.search.js
* mediawiki.special.undelete
resources/mediawiki.special/mediawiki.special.undelete.js
* mediawiki.special.upload
resources/mediawiki.special/mediawiki.special.upload.js
* mediawiki.special.userlogin.common.styles
resources/mediawiki.special/mediawiki.special.userlogin.common.css
resources/mediawiki.special/images/icon-lock.png
* mediawiki.special.userlogin.signup.styles
resources/mediawiki.special/mediawiki.special.userlogin.signup.css
resources/mediawiki.special/images/icon-edits.png
resources/mediawiki.special/images/icon-pages.png
resources/mediawiki.special/images/icon-contributors.png
* mediawiki.special.userlogin.login.styles
resources/mediawiki.special/mediawiki.special.userlogin.login.css
resources/mediawiki.special/images/glyph-people-large.png
* mediawiki.special.userlogin.common.js
resources/mediawiki.special/mediawiki.special.userlogin.common.js
* mediawiki.special.userlogin.signup.js
resources/mediawiki.special/mediawiki.special.userlogin.signup.js
* mediawiki.special.javaScriptTest
resources/mediawiki.special/mediawiki.special.javaScriptTest.js
* mediawiki.special.version
resources/mediawiki.special/mediawiki.special.version.css
* mediawiki.ui
resources/mediawiki.ui/default.less
resources/mediawiki.ui/vector.less
resources/mediawiki.ui/components/utilities.less
resources/mediawiki.ui/components/default/forms.less
resources/mediawiki.ui/components/vector/containers.less
resources/mediawiki.ui/components/vector/forms.less
resources/mediawiki.ui/mixins/effects.less
resources/mediawiki.ui/mixins/forms.less
resources/mediawiki.ui/mixins/type.less
resources/mediawiki.ui/mixins/utilities.less
resources/mediawiki.ui/settings/colors.less
resources/mediawiki.ui/settings/typography.less
resources/mediawiki.ui/styleguide.md
* mediawiki.ui.button
resources/mediawiki.ui/components/default/buttons.less
resources/mediawiki.ui/components/vector/buttons.less
Legacy modules, untouched:
* mediawiki.legacy.ajax
* mediawiki.legacy.commonPrint
* mediawiki.legacy.config
* mediawiki.legacy.protect
* mediawiki.legacy.shared
* mediawiki.legacy.oldshared
* mediawiki.legacy.upload
* mediawiki.legacy.wikibits
Miscellaneous files moved elsewhere
* A currently-failing (unused?) script attempting to build some kss style documentation.
Previously in the root of the resources directory, now moved to a new folder, /docs/kss.
Makefile
README.txt
package.json
scripts/nodecheck.sh
styleguide-template/index.html
styleguide-template/public/kss.less
styleguide-template/public/less.js
* ResourceLoader startup JS code was also moved to /src
resources/startup.js
* mediawiki.mixins, hard-coded to be loaded by ResourceLoader, also moved to /src
resources/mediawiki.less/mediawiki.mixins.animation.less
resources/mediawiki.less/mediawiki.mixins.less
resources/mediawiki.less/mediawiki.mixins.rotation.less
* jquery.cycle.all.js appears not to be refered to (?!):
(added in 2f1f0abc6b)
resources/jquery/jquery.cycle.all.js
Change-Id: Id5ead1453412e763bdb3763084e43694517088fd
199 lines
5.1 KiB
JavaScript
199 lines
5.1 KiB
JavaScript
/**
|
|
* jQuery JSON plugin 2.4.0
|
|
*
|
|
* @author Brantley Harris, 2009-2011
|
|
* @author Timo Tijhof, 2011-2012
|
|
* @source This plugin is heavily influenced by MochiKit's serializeJSON, which is
|
|
* copyrighted 2005 by Bob Ippolito.
|
|
* @source Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
|
|
* website's http://www.json.org/json2.js, which proclaims:
|
|
* "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
|
|
* I uphold.
|
|
* @license MIT License <http://www.opensource.org/licenses/mit-license.php>
|
|
*/
|
|
(function ($) {
|
|
'use strict';
|
|
|
|
var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
|
|
meta = {
|
|
'\b': '\\b',
|
|
'\t': '\\t',
|
|
'\n': '\\n',
|
|
'\f': '\\f',
|
|
'\r': '\\r',
|
|
'"' : '\\"',
|
|
'\\': '\\\\'
|
|
},
|
|
hasOwn = Object.prototype.hasOwnProperty;
|
|
|
|
/**
|
|
* jQuery.toJSON
|
|
* Converts the given argument into a JSON representation.
|
|
*
|
|
* @param o {Mixed} The json-serializable *thing* to be converted
|
|
*
|
|
* If an object has a toJSON prototype, that will be used to get the representation.
|
|
* Non-integer/string keys are skipped in the object, as are keys that point to a
|
|
* function.
|
|
*
|
|
*/
|
|
$.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
|
|
if (o === null) {
|
|
return 'null';
|
|
}
|
|
|
|
var pairs, k, name, val,
|
|
type = $.type(o);
|
|
|
|
if (type === 'undefined') {
|
|
return undefined;
|
|
}
|
|
|
|
// Also covers instantiated Number and Boolean objects,
|
|
// which are typeof 'object' but thanks to $.type, we
|
|
// catch them here. I don't know whether it is right
|
|
// or wrong that instantiated primitives are not
|
|
// exported to JSON as an {"object":..}.
|
|
// We choose this path because that's what the browsers did.
|
|
if (type === 'number' || type === 'boolean') {
|
|
return String(o);
|
|
}
|
|
if (type === 'string') {
|
|
return $.quoteString(o);
|
|
}
|
|
if (typeof o.toJSON === 'function') {
|
|
return $.toJSON(o.toJSON());
|
|
}
|
|
if (type === 'date') {
|
|
var month = o.getUTCMonth() + 1,
|
|
day = o.getUTCDate(),
|
|
year = o.getUTCFullYear(),
|
|
hours = o.getUTCHours(),
|
|
minutes = o.getUTCMinutes(),
|
|
seconds = o.getUTCSeconds(),
|
|
milli = o.getUTCMilliseconds();
|
|
|
|
if (month < 10) {
|
|
month = '0' + month;
|
|
}
|
|
if (day < 10) {
|
|
day = '0' + day;
|
|
}
|
|
if (hours < 10) {
|
|
hours = '0' + hours;
|
|
}
|
|
if (minutes < 10) {
|
|
minutes = '0' + minutes;
|
|
}
|
|
if (seconds < 10) {
|
|
seconds = '0' + seconds;
|
|
}
|
|
if (milli < 100) {
|
|
milli = '0' + milli;
|
|
}
|
|
if (milli < 10) {
|
|
milli = '0' + milli;
|
|
}
|
|
return '"' + year + '-' + month + '-' + day + 'T' +
|
|
hours + ':' + minutes + ':' + seconds +
|
|
'.' + milli + 'Z"';
|
|
}
|
|
|
|
pairs = [];
|
|
|
|
if ($.isArray(o)) {
|
|
for (k = 0; k < o.length; k++) {
|
|
pairs.push($.toJSON(o[k]) || 'null');
|
|
}
|
|
return '[' + pairs.join(',') + ']';
|
|
}
|
|
|
|
// Any other object (plain object, RegExp, ..)
|
|
// Need to do typeof instead of $.type, because we also
|
|
// want to catch non-plain objects.
|
|
if (typeof o === 'object') {
|
|
for (k in o) {
|
|
// Only include own properties,
|
|
// Filter out inherited prototypes
|
|
if (hasOwn.call(o, k)) {
|
|
// Keys must be numerical or string. Skip others
|
|
type = typeof k;
|
|
if (type === 'number') {
|
|
name = '"' + k + '"';
|
|
} else if (type === 'string') {
|
|
name = $.quoteString(k);
|
|
} else {
|
|
continue;
|
|
}
|
|
type = typeof o[k];
|
|
|
|
// Invalid values like these return undefined
|
|
// from toJSON, however those object members
|
|
// shouldn't be included in the JSON string at all.
|
|
if (type !== 'function' && type !== 'undefined') {
|
|
val = $.toJSON(o[k]);
|
|
pairs.push(name + ':' + val);
|
|
}
|
|
}
|
|
}
|
|
return '{' + pairs.join(',') + '}';
|
|
}
|
|
};
|
|
|
|
/**
|
|
* jQuery.evalJSON
|
|
* Evaluates a given json string.
|
|
*
|
|
* @param str {String}
|
|
*/
|
|
$.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
|
|
/*jshint evil: true */
|
|
return eval('(' + str + ')');
|
|
};
|
|
|
|
/**
|
|
* jQuery.secureEvalJSON
|
|
* Evals JSON in a way that is *more* secure.
|
|
*
|
|
* @param str {String}
|
|
*/
|
|
$.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
|
|
var filtered =
|
|
str
|
|
.replace(/\\["\\\/bfnrtu]/g, '@')
|
|
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
|
|
.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
|
|
|
|
if (/^[\],:{}\s]*$/.test(filtered)) {
|
|
/*jshint evil: true */
|
|
return eval('(' + str + ')');
|
|
}
|
|
throw new SyntaxError('Error parsing JSON, source is not valid.');
|
|
};
|
|
|
|
/**
|
|
* jQuery.quoteString
|
|
* Returns a string-repr of a string, escaping quotes intelligently.
|
|
* Mostly a support function for toJSON.
|
|
* Examples:
|
|
* >>> jQuery.quoteString('apple')
|
|
* "apple"
|
|
*
|
|
* >>> jQuery.quoteString('"Where are we going?", she asked.')
|
|
* "\"Where are we going?\", she asked."
|
|
*/
|
|
$.quoteString = function (str) {
|
|
if (str.match(escape)) {
|
|
return '"' + str.replace(escape, function (a) {
|
|
var c = meta[a];
|
|
if (typeof c === 'string') {
|
|
return c;
|
|
}
|
|
c = a.charCodeAt();
|
|
return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
|
|
}) + '"';
|
|
}
|
|
return '"' + str + '"';
|
|
};
|
|
|
|
}(jQuery));
|