ResourceLoader/Version 2 Design Specification/Worklist for 2011

Todo

 * (TT) Surface the skin and position properties in the UI
 * (TT) Enforce ID-validation in the frontend too
 * (TT) Somehow add a spinner to the code that rewrites the shared gadget preferences labels using AJAX. The HTML structure makes this non-trivial, or I would've done it
 * (TT) rel=canonical for Special:Gadgets, per TODO comment in SpecialGadgets::execute
 * (TT) On Special:Gadgets/export, "Add note somewhere with link to mw.org help pages about gadget repos; if this is a shared gadget and the user owns the wiki, he is recommended to instead pull from this repo natively." per TODO comment
 * (RK) Export translation subpages of title and description messages on Special:Gadgets/export per TODO comments in SpecialGadgets::showExportForm
 * Title::getSubpages, see also migration script
 * (RK) See what we can do about the ugliness of having the timestamp in the constructor in GadgetsHooks::gadgetDefinitionSave
 * (RK) Figure out how gadget ID naming collisions should be handled, define this somewhere, and enforce it
 * If not too complicated and possibility to trigger syntax highlighting, name Gadget definition pages  instead
 * On Special:Preferences, don't show "Shared gadgets" tabs if there are no shared gadgets available (just like "Gadgets" tab is not visible if there are no registered gadgets on this wiki)
 * needs to handle 'jsonp'/'crossDomain' correctly for foreign sources. Right now it gives an exception.

Done

 * (RK) Add Gadget ID length limit (because of up_name) and enforce it in the backend
 * (TT) Fix preference tables display bug causing varying "gap"
 * (RK/TT) Research async-behavior, and convert client loading to new behavior loading async from top of the body
 * (RK) Write migration maintenance scripts per the table above
 * (TT) Implement "New category" feature in the dialog
 * (TT) Merge gadget manager into SpecialGadgets implementing mockups
 * (TT) "Create" tab on SpecialGadgets
 * (TT) "Delete gadget" link next to "Modify gadget" link
 * (TT) Make the Export-method on SpecialGadgets work (get a an array of full page names of the NS_GADGET_DEFINITION page, linked wiki resources in NS_GADGET, and messages (including subpages/translations) of title, description and linked messages in NS_MEDIAWIKI)
 * (RK) Fix bug that causes bad cache at r96837 CR
 * (RK) Preferences are currently tags with a multi-select HTMLform element (list of checkboxes with labels and a common name-attribute (" "). These should instead be  elements wrapping the section with the category title in a, like other preferences tabs do. And the label should be like:
 * (RK) Revamp gadgets preferences sections
 * Include description of gadget on Special:Preferences (for foreign gadgets as well)
 * Label should be something like " " or something visually equivalent
 * Make sure things are sorted by i18n message value (probably automatic for local gadgets, needs JS reordering for foreign gadgets)
 * If two categories from different repos have the same i18n message value, merge them (in JS) but don't re-sort the merged category
 * (RK) Fix JS to not touch markup of local gadgets preferences. Currently makes MediaWiki:Gadgets-preference-description‎ fail. It shows the correct output and then it is removed (try by putting  in that message).
 * (RK) Make sure missing properties are filled in on read
 * (RK) Port support for skin-specific Gadgets from master
 * (RK) Add support for specifying position=top|bottom

Bugs

 * On prototype (rl2-repo1wiki) message "Gadget-foobar-label" and "Gadget-foobar-tooltip" are not being suggested through the All messages API. The message index still needs the fix we talked about in San Francisco (or it didn't work)
 * Oh this has been fixed, the autosuggestions just aren't consuming it. You need to pass &amincludelocal=1 to allmessages.
 * OK. 99049.
 * Gadget editor does not handle errors like 'editconflict'
 * Gadget editor uses definitiontimestamp (when the database entry for the gadget was last changed) as basetimestamp (supposed to be the timestamp of the last edit to the definition page); this causes edit conflict errors when these timestamps aren't equal (this can happen if a whitespace-only edit is made, when a definition page is imported, and possibly in other cases as well)