kopia lustrzana https://github.com/c9/core
fix slow and hacky way of calling less.parse
rodzic
dfa654812e
commit
13ec68a39b
|
@ -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 = "";
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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");
|
||||
|
||||
})
|
|
@ -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";
|
Ładowanie…
Reference in New Issue