move css strings inline to avoid problems with text plugin
This commit is contained in:
parent
8366784729
commit
73f66d9408
1 changed files with 76 additions and 50 deletions
|
|
@ -244,6 +244,33 @@ function addSuffix(options) {
|
||||||
options.suffix += "-noconflict";
|
options.suffix += "-noconflict";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getWriteFilters(options, projectType) {
|
||||||
|
var filters = [
|
||||||
|
copy.filter.moduleDefines,
|
||||||
|
inlineTextModules,
|
||||||
|
removeUseStrict,
|
||||||
|
removeLicenceComments
|
||||||
|
];
|
||||||
|
|
||||||
|
if (projectType == "worker")
|
||||||
|
return filters;
|
||||||
|
|
||||||
|
if (options.noconflict)
|
||||||
|
filters.push(namespace(options.ns));
|
||||||
|
|
||||||
|
if (options.compress)
|
||||||
|
filters.push(copy.filter.uglifyjs);
|
||||||
|
|
||||||
|
if (options.exportModule && projectType == "main") {
|
||||||
|
if (options.noconflict)
|
||||||
|
filters.push(exportAce(options.ns, options.exportModule, options.ns));
|
||||||
|
else
|
||||||
|
filters.push(exportAce(options.ns, options.exportModule));
|
||||||
|
}
|
||||||
|
return filters;
|
||||||
|
}
|
||||||
|
|
||||||
var buildAce = function(options) {
|
var buildAce = function(options) {
|
||||||
var aceProject = {
|
var aceProject = {
|
||||||
roots: [ACE_HOME + '/lib', ACE_HOME + '/demo'],
|
roots: [ACE_HOME + '/lib', ACE_HOME + '/demo'],
|
||||||
|
|
@ -275,24 +302,6 @@ var buildAce = function(options) {
|
||||||
if (!options.requires)
|
if (!options.requires)
|
||||||
options.requires = [options.exportModule];
|
options.requires = [options.exportModule];
|
||||||
|
|
||||||
var filters = [
|
|
||||||
copy.filter.moduleDefines,
|
|
||||||
filterTextPlugin,
|
|
||||||
removeUseStrict,
|
|
||||||
removeLicenceComments
|
|
||||||
];
|
|
||||||
|
|
||||||
if (options.noconflict) {
|
|
||||||
filters.push(namespace(options.ns));
|
|
||||||
if (options.exportModule)
|
|
||||||
var exportFilter = exportAce(options.ns, options.exportModule, options.ns);
|
|
||||||
} else if (options.exportModule) {
|
|
||||||
var exportFilter = exportAce(options.ns, options.exportModule);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.compress)
|
|
||||||
filters.push(copy.filter.uglifyjs);
|
|
||||||
|
|
||||||
var targetDir = options.targetDir + options.suffix;
|
var targetDir = options.targetDir + options.suffix;
|
||||||
var name = options.name;
|
var name = options.name;
|
||||||
|
|
||||||
|
|
@ -313,7 +322,7 @@ var buildAce = function(options) {
|
||||||
|
|
||||||
copy({
|
copy({
|
||||||
source: ace,
|
source: ace,
|
||||||
filter: exportFilter ? filters.concat(exportFilter) : filters,
|
filter: getWriteFilters(options, "main"),
|
||||||
dest: targetDir + '/' + name + ".js"
|
dest: targetDir + '/' + name + ".js"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -327,7 +336,7 @@ var buildAce = function(options) {
|
||||||
project: cloneProject(project),
|
project: cloneProject(project),
|
||||||
require: [ 'ace/mode/' + mode ]
|
require: [ 'ace/mode/' + mode ]
|
||||||
}],
|
}],
|
||||||
filter: filters,
|
filter: getWriteFilters(options, "mode"),
|
||||||
dest: targetDir + "/mode-" + mode + ".js"
|
dest: targetDir + "/mode-" + mode + ".js"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -337,26 +346,14 @@ var buildAce = function(options) {
|
||||||
project.assumeAllFilesLoaded();
|
project.assumeAllFilesLoaded();
|
||||||
options.themes.forEach(function(theme) {
|
options.themes.forEach(function(theme) {
|
||||||
console.log("theme " + theme);
|
console.log("theme " + theme);
|
||||||
/*copy({
|
copy({
|
||||||
source: [{
|
source: [{
|
||||||
project: cloneProject(project),
|
project: cloneProject(project),
|
||||||
require: ["ace/theme/" + theme]
|
require: ["ace/theme/" + theme]
|
||||||
}],
|
}],
|
||||||
filter: filters,
|
filter: getWriteFilters(options, "theme"),
|
||||||
dest: targetDir + "/theme-" + theme + ".js"
|
dest: targetDir + "/theme-" + theme.replace("_theme", "") + ".js"
|
||||||
});*/
|
});
|
||||||
// use this instead, to not create separate modules for js and css
|
|
||||||
var themePath = ACE_HOME + "/lib/ace/theme/" + theme;
|
|
||||||
var js = fs.readFileSync(themePath + ".js", "utf8");
|
|
||||||
js = js.replace("define(", "define('ace/theme/" + theme + "', ['require', 'exports', 'module', 'ace/lib/dom'], ");
|
|
||||||
|
|
||||||
if (fs.existsSync(themePath + ".css", "utf8")) {
|
|
||||||
var css = fs.readFileSync(themePath + ".css", "utf8")
|
|
||||||
js = js.replace(/require\(.ace\/requirejs\/text!.*?\)/, quoteString(css))
|
|
||||||
}
|
|
||||||
filters.forEach(function(f) {js = f(js); });
|
|
||||||
|
|
||||||
fs.writeFileSync(targetDir + "/theme-" + theme + ".js", js);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('# ace extensions ---------');
|
console.log('# ace extensions ---------');
|
||||||
|
|
@ -369,7 +366,7 @@ var buildAce = function(options) {
|
||||||
project: cloneProject(project),
|
project: cloneProject(project),
|
||||||
require: [ 'ace/ext/' + ext ]
|
require: [ 'ace/ext/' + ext ]
|
||||||
}],
|
}],
|
||||||
filter: filters,
|
filter: getWriteFilters(options, "ext"),
|
||||||
dest: targetDir + "/ext-" + ext + ".js"
|
dest: targetDir + "/ext-" + ext + ".js"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -384,20 +381,13 @@ var buildAce = function(options) {
|
||||||
project: cloneProject(project),
|
project: cloneProject(project),
|
||||||
require: [ 'ace/keyboard/' + keybinding ]
|
require: [ 'ace/keyboard/' + keybinding ]
|
||||||
}],
|
}],
|
||||||
filter: filters,
|
filter: getWriteFilters(options, "keybinding"),
|
||||||
dest: targetDir + "/keybinding-" + keybinding + ".js"
|
dest: targetDir + "/keybinding-" + keybinding + ".js"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('# ace worker ---------');
|
console.log('# ace worker ---------');
|
||||||
|
|
||||||
filters = [
|
|
||||||
copy.filter.moduleDefines,
|
|
||||||
filterTextPlugin,
|
|
||||||
removeUseStrict,
|
|
||||||
removeLicenceComments
|
|
||||||
];
|
|
||||||
|
|
||||||
options.workers.forEach(function(mode) {
|
options.workers.forEach(function(mode) {
|
||||||
console.log("worker for " + mode + " mode");
|
console.log("worker for " + mode + " mode");
|
||||||
var worker = copy.createDataObject();
|
var worker = copy.createDataObject();
|
||||||
|
|
@ -415,7 +405,7 @@ var buildAce = function(options) {
|
||||||
'ace/mode/' + mode + '_worker'
|
'ace/mode/' + mode + '_worker'
|
||||||
]
|
]
|
||||||
}],
|
}],
|
||||||
filter: filters,
|
filter: getWriteFilters(options, "worker"),
|
||||||
dest: worker
|
dest: worker
|
||||||
});
|
});
|
||||||
copy({
|
copy({
|
||||||
|
|
@ -452,6 +442,45 @@ var buildAce = function(fn) {
|
||||||
}
|
}
|
||||||
}(buildAce);
|
}(buildAce);
|
||||||
|
|
||||||
|
var textModules = {}
|
||||||
|
var detectTextModules = function(input, source) {
|
||||||
|
if (!source)
|
||||||
|
throw new Error('Missing filename for text module');
|
||||||
|
|
||||||
|
if (typeof input !== 'string')
|
||||||
|
input = input.toString();
|
||||||
|
|
||||||
|
var module = source.isLocation ? source.path : source;
|
||||||
|
|
||||||
|
input = input.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
||||||
|
input = '"' + input.replace(/\n/g, '\\n\\\n') + '"';
|
||||||
|
textModules[module] = input;
|
||||||
|
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
detectTextModules.onRead = true;
|
||||||
|
copy.filter.addDefines = detectTextModules;
|
||||||
|
|
||||||
|
function inlineTextModules(text) {
|
||||||
|
var lastDep = "";
|
||||||
|
return text.replace(/, *['"]ace\/requirejs\/text!(.*?)['"]|= *require\(['"](?:ace|[.\/]+)\/requirejs\/text!(.*?)['"]\)/g, function(_, dep, call) {
|
||||||
|
if (dep) {
|
||||||
|
if (!lastDep) {
|
||||||
|
lastDep = dep;
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
} else if (call) {
|
||||||
|
call = textModules[lastDep];
|
||||||
|
delete textModules[lastDep];
|
||||||
|
lastDep = "";
|
||||||
|
if (call)
|
||||||
|
return "= " + call;
|
||||||
|
}
|
||||||
|
console.log(dep, lastDep, call);
|
||||||
|
throw "inlining of multiple text modules is not supported";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: replace with project.clone once it is fixed in dryice
|
// TODO: replace with project.clone once it is fixed in dryice
|
||||||
function cloneProject(project) {
|
function cloneProject(project) {
|
||||||
var clone = copy.createCommonJsProject({
|
var clone = copy.createCommonJsProject({
|
||||||
|
|
@ -470,6 +499,7 @@ function cloneProject(project) {
|
||||||
|
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
function copyFileSync(srcFile, destFile) {
|
function copyFileSync(srcFile, destFile) {
|
||||||
var BUF_LENGTH = 64*1024,
|
var BUF_LENGTH = 64*1024,
|
||||||
buf = new Buffer(BUF_LENGTH),
|
buf = new Buffer(BUF_LENGTH),
|
||||||
|
|
@ -496,10 +526,6 @@ function quoteString(str) {
|
||||||
return '"' + str.replace(/\\/, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\\n") + '"';
|
return '"' + str.replace(/\\/, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\\n") + '"';
|
||||||
}
|
}
|
||||||
|
|
||||||
function filterTextPlugin(text) {
|
|
||||||
return text.replace(/(['"])(ace|[.\/]+?)\/requirejs\/text\!/g, "$1");
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeUseStrict(text) {
|
function removeUseStrict(text) {
|
||||||
return text.replace(/['"]use strict['"];/g, "");
|
return text.replace(/['"]use strict['"];/g, "");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue