modules.notifications.showNotification({ sticky: true }) prevents notification from automatically closing
notifications.options.allowSticky option to disable all sticky notifications
RESUtils.mapTableOptionValueToObject and .mapObjectToTableOptionValue
For a module table option, transform a row value into an object and vice-versa using the fields’ names for property keys.
Fill in missing values using optional backup object or default field values.
tidy up modules.notifications.addNotificationType / getOrAddNotificationType
using new RESUtils.map… functions
notificationTypes can be sticky; options.sticky for "per notificationType, always, or never"
RESUtils.map option stuff more tolerant of empty params
showNotification("message") sanitized to { message: "message" }
notifications without moduleID get notificationType with moduleID o’f —'
sanitize notification some before getting related notificationType
missed a var
addModule(moduleID, function populateModule(module, moduleID)
Pattern for AMD-style modules
register modules.notifications using addModule
notification.addNotificationTypeOption and .getNotificationTypeOption now private functions
moved notificationType.moduleID default value of '—' to getOrAdd
although I should probably refactor into somewhere else
menial refactoring of notifications.showNotification
notifications.showNotification() returns { close: function(), element: ele }
user can re-check/un-check enabled from notification
incidentally module.enableNotificationType (name change)
move up isEnabled check higher in showNotification
better module-ification
Force HTTPS on all images

// on Firefox translates into resource://, not http(s)://

Some of these are not strictly necessary (mainly the img src URLs
and the CSS that we insert in res_user.js), but there's no harm in
using all HTTPS