CodeLoad is a customisable code page loader. It lets communities set up a system for their users to enable provided code (JavaScript/CSS), in a similar way to the Gadgets extension. On a wiki using the script, user preferences can be configured on the page Special:BlankPage?blankspecial=CodeLoadPrefs. A link to this page is added to the Shortcuts dialog and to the "My tools" menu in the toolbar.
Usage
- Add the line below to your wiki's MediaWiki:ImportJS page:
dev:CodeLoad.js
- Code definitions have to be set up by the wiki's administrators. Configuration information is below.
Configuring definitions
Definitions are loaded from the page MediaWiki:CodeLoad-definitions.js
. Some example definitions are available, which may be copy+pasted as a base for a wiki's definition page.
These are configured via the JavaScript variable codeLoad.definitions
, which should be an object with a unique ID (this can simply be the name of the script) for each key, and an object (the definition) as its value. Each definition object can contain the following keys:
Key | Required | Description |
---|---|---|
title | no | A friendly name for the definition (shown in bold on the preferences page). Wikitext links may be used here. |
description | yes | A description of what the definition does (shown after the definition title on the preferences page). Wikitext links may be used here. |
group | no | Add this definition to a particular group on the preferences page (see below for details). |
articles | yes | An array of page names that should be imported when this definition is enabled (see below for details). |
preferences | no | If a definition has user-configurable settings, these can be set/saved with CodeLoad (see below for details). |
requirements | no | Set pre-requisites before this definition is used/shown (see below for details). |
Here is an example definition excerpt for AjaxRC:
"ajaxrc": {
"title": "AjaxRC",
"description": "Advanced auto-refreshing recent changes and watchlist ([[w:c:dev:AjaxRC|more info]])",
"group": "tools",
"articles": [
"dev:AjaxRC/code.js"
],
"preferences": {
"requiresGlobalPrefs": true,
"AjaxRCRefreshText": "Auto-refresh",
"ajaxRefresh": 30000
}
}
Groups
Definitions can optionally be sorted into groups on the preferences page. These are configured via the JavaScript variable codeLoad.groups
, which should be an object with a unique ID for each key, and a string (the friendly name for the group, shown as a heading on the preferences page) as its value. Wikitext links may be used within the friendly group names.
When a definition's group is set to a ID existing in codeLoad.groups
, it will be added to that group. Any definition without a set group, or with a group ID not in codeLoad.groups
, will be added to the group 'Other'.
Articles
The articles array should contain page names of one or more CSS (ending with .css
) and/or JavaScript (ending with .js
) pages. These can be either local pages (stored in the MediaWiki namespace), or pages from Dev Wiki. Imports from outside the MediaWiki namespace or from wikis other than the local wiki and Dev Wiki are not supported. Page names should not contain the MediaWiki namespace prefix. For imports from Dev Wiki, prefix the page name with dev:
.
Preferences
Preferences (if set) should be an object, and can contain the following keys (all optional):
Key | Description |
---|---|
enabled | If this is set to true, the definition will be enabled by default. Note that it will also be enabled for logged-out users. |
requiresGlobalPrefs | If this is set to true, user preferences for this definition will be each exposed as properties on the global window object. This allows CodeLoad to manage preferences for scripts which weren't specifically written for use with CodeLoad.
|
globalPrefNamespace | If preferences.requiresGlobalPrefs is set to true and this is set to a string, user preferences for this definition will be added to a single object (namespace), and only this object will be exposed as a property on the global window object, using the name given here. This may be needed for particular scripts.
|
The preferences object can also contain custom keys for that definition's preferences. A preference ID should be used for each key, and a boolean, number, or string (the default value for the preference) as its value.
Friendly names for preferences can be configured via the JavaScript variable codeLoad.prefDescriptions
, which should be an object with a preference ID for each key, and a string (the friendly name for the preference) as its value. Wikitext links may be used within the friendly preference names. These are shared across all definitions, and if a friendly name is available, it will be used on the preferences page in place of the preference ID.
Requirements
Requirements (if set) should be an object, and can contain the following keys (all optional):
Key | Description |
---|---|
skins | Skins (e.g. oasis, monobook) for which this definition can be used/shown, each separated by the | character
|
usergroups | User groups (e.g. sysop, content-moderator, user) for which this definition can be used/shown, each separated by the | character
|
Intro message
A optional message can be configured via the JavaScript variable codeLoad.introMessage
, and will be shown below the default intro text. This may be used, for example, to provide more information about the available definitions, or to provide a link to a page with more details. Wikitext links may be used within the message.
Using CodeLoad-kept preferences
Preferences set/saved with CodeLoad can be accessed by calling the codeLoad.getScriptPrefs()
function with a definition ID as the first argument. This is the recommended method for configuring local script preferences. Using the AjaxRC definition above as an example, the following code will set the prefs
variable with the user preferences for the definition. User preferences can then be accessed via properties of the prefs
variable.
var prefs = codeLoad.getScriptPrefs('ajaxrc');
prefs.AjaxRCRefreshText; // will return 'Auto-refresh'
prefs.ajaxRefresh; // will return 30000
requiresGlobalPrefs
If preferences.requiresGlobalPrefs
is set to true for a definition, that definition's preferences will be each exposed as properties on the global window
object. This is available to allow scripts from Dev Wiki to be easily configurable using CodeLoad. Using the AjaxRC definition above as an example, the following code accesses user preferences for the definition.
window.AjaxRCRefreshText; // will return 'Auto-refresh'
window.ajaxRefresh; // will return 30000
globalPrefNamespace
If preferences.requiresGlobalPrefs
is set to true for a definition and preferences.globalPrefNamespace
is set to a string (e.g. AjaxRCConfig
), that definition's preferences will be added to a single object (namespace) with the name AjaxRCConfig
, and only this object will be exposed as a property on the global window
object. This may be needed for particular scripts, depending on how their preferences are configured within the script. Using the AjaxRC definition above as an example, the following code accesses user preferences for the definition.
window.AjaxRCConfig.AjaxRCRefreshText; // will return 'Auto-refresh'
window.AjaxRCConfig.ajaxRefresh; // will return 30000