2015-02-10 19:41:24 +00:00
|
|
|
define(function(require, exports, module) {
|
|
|
|
main.consumes = ["Plugin", "http", "ui", "settings"];
|
|
|
|
main.provides = ["layout.preload"];
|
|
|
|
return main;
|
|
|
|
|
|
|
|
function main(options, imports, register) {
|
|
|
|
var settings = imports.settings;
|
|
|
|
var Plugin = imports.Plugin;
|
|
|
|
var http = imports.http;
|
|
|
|
var ui = imports.ui;
|
|
|
|
|
|
|
|
var async = require("async");
|
|
|
|
|
|
|
|
/***** Initialization *****/
|
|
|
|
|
|
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
|
|
|
|
|
|
var themePrefix = options.themePrefix;
|
|
|
|
var packed = ui.packedThemes;
|
|
|
|
|
|
|
|
var themes = {
|
|
|
|
"dark" : "",
|
|
|
|
"dark-gray" : "",
|
|
|
|
"light-gray" : "",
|
|
|
|
"light" : "",
|
2015-09-27 18:46:38 +00:00
|
|
|
"flat-light" : "",
|
|
|
|
"flat-dark" : ""
|
2015-02-10 19:41:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/***** Methods *****/
|
|
|
|
|
|
|
|
function preload(callback) {
|
|
|
|
settings.setDefaults("user/general", [
|
2015-09-27 18:46:38 +00:00
|
|
|
["skin", options.defaultTheme || "flat-dark"]
|
2015-02-10 19:41:24 +00:00
|
|
|
]);
|
|
|
|
if (!packed || options.loadTheme) return callback();
|
|
|
|
try {
|
|
|
|
var theme = settings.get("user/general/@skin");
|
|
|
|
return getTheme(theme, callback);
|
|
|
|
} catch(e) {}
|
|
|
|
async.forEach(Object.keys(themes), getTheme, callback);
|
|
|
|
}
|
|
|
|
|
|
|
|
function getTheme(name, callback) {
|
|
|
|
if (themes[name]) {
|
|
|
|
callback(null, themes[name]);
|
|
|
|
} else if (options.loadTheme) {
|
|
|
|
options.loadTheme(name, function(err, data) {
|
|
|
|
themes[name] = data;
|
|
|
|
callback(err, data);
|
|
|
|
});
|
|
|
|
} else {
|
2015-07-02 23:59:11 +00:00
|
|
|
var url = themePrefix + "/" + name + ".css";
|
2015-11-29 02:00:05 +00:00
|
|
|
require(["text!" + url], function(data) {
|
2015-07-02 23:59:11 +00:00
|
|
|
// set sourceurl so that sourcemaps work when theme is inserted as a style tag
|
|
|
|
data += "\n/*# sourceURL=" + url + " */";
|
2015-02-10 19:41:24 +00:00
|
|
|
themes[name] = data;
|
2015-11-29 02:00:05 +00:00
|
|
|
callback(null, data);
|
|
|
|
}, function(err) {
|
|
|
|
callback(err);
|
2015-02-10 19:41:24 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/***** Register and define API *****/
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @singleton
|
|
|
|
**/
|
|
|
|
plugin.freezePublicAPI({
|
|
|
|
getTheme: getTheme,
|
|
|
|
packed: packed
|
|
|
|
});
|
|
|
|
|
|
|
|
preload(function(err) {
|
|
|
|
register(null, {
|
|
|
|
"layout.preload": plugin
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|