fix slow and hacky way of calling less.parse

pull/468/merge
nightwing 2017-11-30 00:17:15 +04:00
rodzic dfa654812e
commit 13ec68a39b
4 zmienionych plików z 92 dodań i 160 usunięć

116
node_modules/architect-build/build.js wygenerowano vendored
Wyświetl plik

@ -160,116 +160,51 @@ function createOutputFolder(opts, cb) {
function compileLess(opts, sources, callback) {
var less = stripLess(sources);
var cssCode = [];
var code = [];
var cache = opts.cache;
if (cache && !cache.less)
cache.less = Object.create(null);
async.forEachSeries(less, function(file, next) {
var libs = opts.lessLibs;
less.forEach(function(file) {
var plugin = file.pkg.parent.plugin || {};
if (file.pkg.id.match(/(keyframes|font-awesome)\.css$/)) {
code.push(file.code
cssCode.push(file.code
.replace(/@\{image-path\}/g, plugin.staticPrefix + "/images")
.replace(/@\{icon-path\}/g, plugin.staticPrefix + "/icons")
.replace(/@\{base-path\}/g, plugin.staticPrefix)
.replace(/@\{base-path\}/g, plugin.staticPrefix)
);
return next();
}
var root = path.join(opts.basepath, (plugin.packagePath ? path.dirname(plugin.packagePath) : "/"));
var cacheKey;
if (cache && opts.lessLibCacheKey) {
cacheKey = [opts.lessLibCacheKey, plugin.staticPrefix, file.pkg.id].join("|");
if (cache.less[cacheKey]) {
code.push(cache.less[cacheKey]);
return next();
}
return;
}
compileLessFragment(file.code, opts.lessLibs, root, plugin.staticPrefix, file.path, opts.compress, function(err, css) {
if (err)
return callback(err);
if (cacheKey)
cache.less[cacheKey] = css;
code.push(css);
next();
});
}, function(err) {
if (opts.lessLibs.css) {
code.push(opts.lessLibs.css);
}
callback(err, {
code: code.join("\n")
});
var staticPrefix = plugin.staticPrefix || libs.staticPrefix;
// Complete paths, but not subdirectories like foo/images/bar.png
var lessCode = file.code.replace(/(["(])(images|icons)\//g, "$1" + staticPrefix + "/$2/");
code.push("ß{" + lessPathLib(staticPrefix) + lessCode + "}");
});
}
function compileLibRules(libs, ctx, next) {
// Libs is an array of paths; adds property .compiled to keep a state(cache).
if (libs.compiled)
return next(null, libs.compiled.rules, libs.compiled.css);
var src = lessPathLib(libs.staticPrefix) + libs.join("\n");
var less = require("less");
less.parse(src, ctx, function(err, root, imports, options) {
if (err) return next(err);
toCss(root, imports, options, function(err, css) {
if (err) return next(err);
libs.compiled = {
rules: root.rules,
css: css,
};
next(null, libs.compiled.rules, libs.compiled.css);
});
});
}
function compileLessFragment(css, libs, root, staticPrefix, path, compress, callback) {
var less = require("less");
var ctx = {
var ctx = {
paths: ["/"],
filename: root + '/unknown.less',
compress: !!compress
filename: opts.basepath + '/unknown.less',
compress: !!opts.compress
};
compileLibRules( libs, ctx, function(err, libRules, libCss) {
code = lessPathLib("/static/" + libs.staticPrefix) + libs.join("\n") + code.join("\n");
var lessParser = require("less");
return lessParser.parse(code, ctx, function(err, tree, imports, options) {
if (err) return callback(err);
var baseLib = lessPathLib(staticPrefix || libs.staticPrefix);
var code = baseLib + "\n" + css;
// Complete paths, but not subdirectories like foo/images/bar.png
code = code.replace(/(["(])(images|icons)\//g, "$1" + staticPrefix + "/$2/");
console.log("[Less] compiling ", path || "skin", root);
less.parse(code, ctx, function (err, tree, imports, options) {
toCss(tree, imports, options, function(err, css) {
if (err) return callback(err);
tree.rules = libRules.concat(tree.rules);
toCss(tree, imports, options, function(err, css) {
if (err) return callback(err);
if (css.substring(0, libCss.length) == libCss) {
css = css.substr(libCss.length);
} else {
console.warn("couldn't strip default less");
}
callback(null, css);
});
callback(null, { code: css.replace(/ß /g, "").replace(/^ +/gm, "\t") });
});
});
}
function toCss(tree, imports, options, callback) {
var less = require("less");
var parseTree = new less.ParseTree(tree, imports);
@ -285,6 +220,9 @@ function toCss(tree, imports, options, callback) {
function lessPathLib(staticPrefix) {
if (!staticPrefix) return "";
staticPrefix = staticPrefix.replace(/^(\/static\/)?(plugins\/)?/, "/static/plugins/");
return "@base-path : \"" + staticPrefix + "\";\n"
+ "@image-path : \"" + staticPrefix + "/images\";\n"
+ "@icon-path : \"" + staticPrefix + "/icons\";\n";
@ -301,7 +239,7 @@ function stripLess(sources) {
});
}
sources.forEach(function(pkg){
sources.forEach(function(pkg) {
if (pkg.id && (pkg.id.indexOf("text!") > -1) && pkg.id.match(/text\!.*\.(less|css)$/)) {
var source = pkg.source;
pkg.source = "";

Wyświetl plik

@ -19,14 +19,6 @@ define(function(require, exports, module) {
var markup = require("text!./layout.xml");
// pre load themes
require("text!./themes/default-dark.less");
require("text!./themes/default-dark-gray.less");
require("text!./themes/default-light-gray.less");
require("text!./themes/default-light.less");
require("text!./themes/default-flat-light.less");
require("text!./themes/default-flat-dark.less");
/***** Initialization *****/
var plugin = new Plugin("Ajax.org", main.consumes);
@ -75,8 +67,7 @@ define(function(require, exports, module) {
.replace(/@\{image-path\}/g, options.staticPrefix + "/images"),
false, plugin);
ui.insertCss(require("text!./less/main.less"),
options.staticPrefix, plugin);
ui.insertCss(require("./less/index"), options.staticPrefix, plugin);
}
draw();

Wyświetl plik

@ -0,0 +1,64 @@
define(function(require, exports, module) {
module.exports = require("text!./main.less")
+ require("text!./style.less")
+ require("text!./bar.less")
+ require("text!./bk-window2.less")
+ require("text!./bk-window.less")
+ require("text!./blackbutton.less")
+ require("text!./blackdg.less")
+ require("text!./black_dropdown.less")
+ require("text!./browser-btn.less")
+ require("text!./btn-default-css3.less")
+ require("text!./btn_icon_only.less")
+ require("text!./button.less")
+ require("text!./btn_console.less")
+ require("text!./btn_console_open.less")
+ require("text!./btn-switcher.less")
+ require("text!./c9-divider-double.less")
+ require("text!./c9-divider-hor.less")
+ require("text!./c9-divider.less")
+ require("text!./c9-menu-bar.less")
+ require("text!./c9-menu-btn.less")
+ require("text!./c9-simple-btn.less")
+ require("text!./c9-toolbarbutton-glossy.less")
+ require("text!./c9-toolbarbutton.less")
+ require("text!./c9-toolbarbutton-light.less")
+ require("text!./cboffline.less")
+ require("text!./checkbox_black.less")
+ require("text!./checkbox_grey.less")
+ require("text!./checkbox.less")
+ require("text!./editor_tab.less")
+ require("text!./textbox.less")
+ require("text!./searchbox.less")
+ require("text!./codebox.less")
+ require("text!./colorbox.less")
+ require("text!./datagrid.less")
+ require("text!./divider_console.less")
+ require("text!./divider.less")
+ require("text!./dropdown-dark-glossy.less")
+ require("text!./dropdown.less")
+ require("text!./frame.less")
+ require("text!./grouped_checkbox.less")
+ require("text!./header-btn.less")
+ require("text!./img.less")
+ require("text!./label.less")
+ require("text!./list_dark.less")
+ require("text!./list.less")
+ require("text!./menu.less")
+ require("text!./panel-bar.less")
+ require("text!./password.less")
+ require("text!./radiobutton.less")
+ require("text!./scrollbar.less")
+ require("text!./simplebox.less")
+ require("text!./simpleimg.less")
+ require("text!./spinner.less")
+ require("text!./splitbutton.less")
+ require("text!./splitter.less")
+ require("text!./tbsimple.less")
+ require("text!./textarea.less")
+ require("text!./tooltiplabel.less")
+ require("text!./toolbar.less")
+ require("text!./toolbar-top.less")
+ require("text!./toolbar-bottom.less");
})

Wyświetl plik

@ -33,64 +33,3 @@ BODY.noInput *{
padding: @dialog-buttons-padding !important;
height: @dialog-buttons-height !important;
}
@import "less/style.less";
@import "less/bar.less";
@import "less/bk-window2.less";
@import "less/bk-window.less";
@import "less/blackbutton.less";
@import "less/blackdg.less";
@import "less/black_dropdown.less";
@import "less/browser-btn.less";
@import "less/btn-default-css3.less";
@import "less/btn_icon_only.less";
@import "less/button.less";
@import "less/btn_console.less";
@import "less/btn_console_open.less";
@import "less/btn-switcher.less";
@import "less/c9-divider-double.less";
@import "less/c9-divider-hor.less";
@import "less/c9-divider.less";
@import "less/c9-menu-bar.less";
@import "less/c9-menu-btn.less";
@import "less/c9-simple-btn.less";
@import "less/c9-toolbarbutton-glossy.less";
@import "less/c9-toolbarbutton.less";
@import "less/c9-toolbarbutton-light.less";
@import "less/cboffline.less";
@import "less/checkbox_black.less";
@import "less/checkbox_grey.less";
@import "less/checkbox.less";
@import "less/editor_tab.less";
@import "less/textbox.less";
@import "less/searchbox.less";
@import "less/codebox.less";
@import "less/colorbox.less";
@import "less/datagrid.less";
@import "less/divider_console.less";
@import "less/divider.less";
@import "less/dropdown-dark-glossy.less";
@import "less/dropdown.less";
@import "less/frame.less";
@import "less/grouped_checkbox.less";
@import "less/header-btn.less";
@import "less/img.less";
@import "less/label.less";
@import "less/list_dark.less";
@import "less/list.less";
@import "less/menu.less";
@import "less/panel-bar.less";
@import "less/password.less";
@import "less/radiobutton.less";
@import "less/scrollbar.less";
@import "less/simplebox.less";
@import "less/simpleimg.less";
@import "less/spinner.less";
@import "less/splitbutton.less";
@import "less/splitter.less";
@import "less/tbsimple.less";
@import "less/textarea.less";
@import "less/tooltiplabel.less";
@import "less/toolbar.less";
@import "less/toolbar-top.less";
@import "less/toolbar-bottom.less";