This commit is contained in:
nightwing 2014-06-21 00:45:50 +04:00
commit 6714359998
3 changed files with 24 additions and 40 deletions

View file

@ -13,7 +13,6 @@ pre_build:
build: pre_build build: pre_build
./Makefile.dryice.js normal ./Makefile.dryice.js normal
./Makefile.dryice.js demo ./Makefile.dryice.js demo
./Makefile.dryice.js bm
# Minimal build: call Makefile.dryice.js only if our sources changed # Minimal build: call Makefile.dryice.js only if our sources changed
basic: build/src/ace.js basic: build/src/ace.js

View file

@ -112,14 +112,11 @@ function ace() {
function demo() { function demo() {
console.log('# kitchen sink ---------'); console.log('# kitchen sink ---------');
var version, ref; var version = "", ref = "";
try { try {
version = JSON.parse(fs.readFileSync(ACE_HOME + "/package.json")).version; version = JSON.parse(fs.readFileSync(ACE_HOME + "/package.json")).version;
ref = fs.readFileSync(ACE_HOME + "/.git-ref").toString(); ref = fs.readFileSync(ACE_HOME + "/.git-ref").toString();
} catch(e) { } catch(e) {}
ref = "";
version = "";
}
function changeComments(data) { function changeComments(data) {
return (data return (data
@ -131,16 +128,12 @@ function demo() {
.replace("%commit%", ref) .replace("%commit%", ref)
); );
} }
copy(ACE_HOME + "/demo/kitchen-sink", BUILD_DIR + "/demo/kitchen-sink", {
shallow: true,
replace: [changeComments],
include: /\.(css|html)$/
});
copy(ACE_HOME +"/demo/kitchen-sink/docs/", BUILD_DIR + "/demo/kitchen-sink/docs/"); copy(ACE_HOME +"/demo/kitchen-sink/docs/", BUILD_DIR + "/demo/kitchen-sink/docs/");
copy.file(ACE_HOME + "/demo/kitchen-sink/logo.png", BUILD_DIR + "/demo/kitchen-sink/logo.png"); copy.file(ACE_HOME + "/demo/kitchen-sink/logo.png", BUILD_DIR + "/demo/kitchen-sink/logo.png");
copy.file(ACE_HOME + "/demo/kitchen-sink/styles.css", BUILD_DIR + "/demo/kitchen-sink/styles.css");
copy.file(ACE_HOME + "/kitchen-sink.html", BUILD_DIR + "/kitchen-sink.html", changeComments);
buildSubmodule({}, { buildSubmodule({}, {
require: ["kitchen-sink/demo"], require: ["kitchen-sink/demo"],
@ -214,9 +207,9 @@ function buildAceModule(opts, callback) {
buildAceModule.dequeue = function() { buildAceModule.dequeue = function() {
if (buildAceModule.running) return; if (buildAceModule.running) return;
var call = buildAceModule.queue.shift(); var call = buildAceModule.queue.shift();
buildAceModule.running = call;
if (call) if (call)
buildAceModuleInternal.apply(null, call); buildAceModuleInternal.apply(null, call);
buildAceModule.running = call;
}; };
} }
@ -235,7 +228,7 @@ function buildAceModule(opts, callback) {
function buildAceModuleInternal(opts, callback) { function buildAceModuleInternal(opts, callback) {
var cache = opts.cache == undefined ? CACHE : opts.cache; var cache = opts.cache == undefined ? CACHE : opts.cache;
var key = opts.require + "|" + opts.compress + "|" + opts.projectType; var key = opts.require + "|" + opts.projectType;
if (cache && cache.configs && cache.configs[key]) if (cache && cache.configs && cache.configs[key])
return write(null, cache.configs[key]); return write(null, cache.configs[key]);
@ -249,19 +242,23 @@ function buildAceModuleInternal(opts, callback) {
}; };
function write(err, result) { function write(err, result) {
if (opts.compress) if (cache && key && !(cache.configs && cache.configs[key])) {
result.code = compress(result.code);
if (cache && key) {
cache.configs = cache.configs || Object.create(null); cache.configs = cache.configs || Object.create(null);
cache.configs[key] = result; cache.configs[key] = result;
result.sources = result.sources.map(function(pkg) { result.sources = result.sources.map(function(pkg) {
return {deps: pkg.deps}; return {deps: pkg.deps};
}); });
} }
if (!opts.outputFile) if (!opts.outputFile)
return callback(err, result); return callback(err, result);
var code = result.code;
if (opts.compress) {
if (!result.codeMin)
result.codeMin = compress(result.code);
code = result.codeMin;
}
var targetDir = BUILD_DIR + "/src"; var targetDir = BUILD_DIR + "/src";
if (opts.compress) if (opts.compress)
@ -287,7 +284,6 @@ function buildAceModuleInternal(opts, callback) {
opts.noconflict ? ns : "", projectType == "ext")); opts.noconflict ? ns : "", projectType == "ext"));
} }
var code = result.code;
filters.forEach(function(f) { code = f(code); }); filters.forEach(function(f) { code = f(code); });
build.writeToFile({code: code}, { build.writeToFile({code: code}, {
@ -331,7 +327,7 @@ function buildSubmodule(options, extra, file, callback) {
options = extend(extra, options); options = extend(extra, options);
getLoadedFileList(options, function(coreFiles) { getLoadedFileList(options, function(coreFiles) {
options.outputFile = file + ".js"; options.outputFile = file + ".js";
options.ignore = coreFiles; options.ignore = options.ignore || coreFiles;
options.quiet = true; options.quiet = true;
buildAceModule(options, callback); buildAceModule(options, callback);
}); });
@ -384,9 +380,10 @@ function buildAce(options) {
buildSubmodule(options, { buildSubmodule(options, {
projectType: "worker", projectType: "worker",
require: ["ace/mode/" + name + "_worker"], require: ["ace/mode/" + name + "_worker"],
ignore: [],
additional: [{ additional: [{
id: "ace/worker/worker", id: "ace/worker/worker",
loaderModule: true, transforms: [],
order: -1000 order: -1000
}], }],
}, "worker-" + name); }, "worker-" + name);
@ -467,9 +464,7 @@ function namespace(ns) {
return function(text) { return function(text) {
text = text text = text
.toString() .toString()
.replace('var ACE_NAMESPACE = "";', 'var ACE_NAMESPACE = "' + ns +'";') .replace(/ACE_NAMESPACE\s*=\s*""/, 'ACE_NAMESPACE = "' + ns +'"')
// .replace(/(\.define)|([,;\n]|^\s*?)define\(/g, function(_, a, b) {
// return a || b + ns + ".define(";
.replace(/(\.define)|\bdefine\(/g, function(_, a) { .replace(/(\.define)|\bdefine\(/g, function(_, a) {
return a || ns + ".define("; return a || ns + ".define(";
}); });
@ -551,20 +546,10 @@ function addSnippetFile(modeName) {
} }
function compress(text) { function compress(text) {
return asciify(require("dryice").copy.filter.uglifyjs(text)); var ujs = require("dryice").copy.filter.uglifyjs;
// copy.filter.uglifyjs.options.ascii_only = true; doesn't work with some uglify.js versions ujs.options.mangle_toplevel = {except: ["ACE_NAMESPACE", "requirejs"]};
function asciify(text) { ujs.options.beautify = {ascii_only: true, inline_script: true}
return text.replace(/[\x00-\x08\x0b\x0c\x0e\x19\x80-\uffff]/g, function(c) { return ujs(text);
c = c.charCodeAt(0).toString(16);
if (c.length == 1)
return "\\x0" + c;
if (c.length == 2)
return "\\x" + c;
if (c.length == 3)
return "\\u0" + c;
return "\\u" + c;
});
}
} }
function extend(base, extra) { function extend(base, extra) {

View file

@ -281,7 +281,7 @@
<script src="src/ace.js" data-ace-base="src" type="text/javascript" charset="utf-8"></script> <script src="src/ace.js" data-ace-base="src" type="text/javascript" charset="utf-8"></script>
<script src="src/keybinding-vim.js"></script> <script src="src/keybinding-vim.js"></script>
<script src="src/keybinding-emacs.js"></script> <script src="src/keybinding-emacs.js"></script>
<script src="kitchen-sink/demo.js"></script> <script src="demo/kitchen-sink/demo.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
require("kitchen-sink/demo"); require("kitchen-sink/demo");
</script> </script>