fix loading themes from bundles

pull/261/head
nightwing 2016-02-15 16:01:01 +04:00
rodzic 78857abde0
commit 863fc77198
2 zmienionych plików z 36 dodań i 10 usunięć

Wyświetl plik

@ -298,7 +298,7 @@ config.paths = Object.create(null);
config.baseUrl = "";
config.useCache = false;
require.undef = function(module, recursive) {
define.undef = require.undef = function(module, recursive) {
if (recursive) {
var root = (module + "/").replace(/\/+$/, "/");
undefAll(root, define.errors);

Wyświetl plik

@ -37,6 +37,7 @@ define(function(require, exports, module) {
require("./scrollbar");
// Ace
var dom = require("ace/lib/dom");
var lang = require("ace/lib/lang");
var Range = require("ace/range").Range;
var config = require("ace/config");
@ -144,6 +145,11 @@ define(function(require, exports, module) {
function setTheme(path, isPreview, fromServer, $err) {
// Get Theme or wait for theme to load
theme = fromServer;
if (/custom_themes/.test(path)) {
theme = themes[path];
if (!theme) return;
dom.importCssString(theme.cssText, theme.cssClass);
}
if (!theme) {
return $err || config.loadModule(path, function(m) {
setTheme(path, isPreview, m, true);
@ -154,6 +160,8 @@ define(function(require, exports, module) {
if (settings.get("user/ace/@theme") != path) {
settings.set("user/ace/@theme", path);
settings.set("user/ace/@customTheme", theme.customCss);
// Emit theme change event
var style = (theme.isDark ? "dark" : "light");
if (settings.get("user/general/@skin").indexOf(style) == -1)
@ -504,7 +512,12 @@ define(function(require, exports, module) {
settings.on("read", function(e) {
settings.setDefaults("user/ace", userSettings);
settings.setDefaults("project/ace", projectSettings);
// TODO remove when there is a better way of loading custom themes
var customTheme = settings.get("user/ace/@customTheme");
if (customTheme)
addTheme(customTheme, handle);
// pre load custom mime types
loadCustomExtensions();
@ -1243,20 +1256,33 @@ define(function(require, exports, module) {
theme[info[0].trim()] = info[1].trim();
});
theme.isDark = theme.isDark == "true";
themes[theme.name] = theme;
ui.insertCss(exports.cssText, plugin);
addThemeMenu(theme.name, theme, null, plugin);
theme.id = "custom_themes/" + theme.name;
theme.customCss = css;
define.undef(theme.id);
define(theme.id, [], theme);
handleEmit("addTheme");
themes[theme.id] = theme;
addThemeMenu(theme.name, theme.id, null, plugin);
handleEmit("addTheme", theme);
if (settings.get("user/ace/@theme") == theme.id)
setTheme(theme.id);
plugin.addOther(function(){
delete themes[theme.name];
handleEmit("removeTheme");
removeTheme(theme, true);
});
}
function removeTheme(theme, silent) {
var el = document.getElementById(theme.cssClass);
el && el.remove();
delete themes[theme.name];
silent || handleEmit("removeTheme");
}
function rebuildSyntaxMenu() {
menus.remove("View/Syntax/");
var c = 0;
@ -1707,7 +1733,7 @@ define(function(require, exports, module) {
/***** Initialization *****/
function Ace(isBaseclass, exts) {
if ( !exts) exts = [];
if (!exts) exts = [];
var plugin = new Editor("Ajax.org", main.consumes,
exts && exts.concat(extensions) || extensions);
var emit = plugin.getEmitter();