UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

118 lines (100 loc) 3.19 kB
var fs = require("fs"); var path = require("path"); var less = require("less"); var themeFolders = ["../android", "../iphone", "../blackberry", "../holodark", "../windows", "../custom", "../ios7"]; var commonFolders = ["../common/domButtons", "../common/transitions"]; var batchQueue = []; var batchIndex = 0; var processProgress = 0; themeFolders.forEach(function(folder){ batchQueue.push(function(){ processFolder(folder, true); processFolder(folder + "/dijit", false); }); }); commonFolders.forEach(function(folder){ batchQueue.push(function(){ processFolder(folder, false); }); }); batch(); /////////////////////////////////////////////////////////////////////////////////////////////////// function batch(){ if(batchIndex < batchQueue.length){ batchQueue[batchIndex](); batchIndex++; } } function beginProcess(){ processProgress++; } function endProcess(){ processProgress--; if (processProgress == 0){ batch(); } } function processFolder(folder, usingCommonSubstitution){ var folderFiles = getLessFiles(folder); if(usingCommonSubstitution){ var commonFiles = getLessFiles("../common"); var outputFile; commonFiles.array.forEach(function(commonFile){ var themeFile = folderFiles.dic[commonFiles.dic[commonFile]]; if(themeFile){ // If there is a .less file in the theme folder, use it. outputFile = themeFile.replace(".less", ".css"); applyLess(themeFile, null, outputFile); }else{ // Otherwise, fall back to the .less file which is in 'common'. var fileName = commonFiles.dic[commonFile]; outputFile = folder + "/" + fileName.replace(".less", ".css"); // dojox.mobile mirroring support if(fileName.indexOf("_rtl") == -1){ applyLess(commonFile, '@import "' + folder + '/variables.less";', outputFile); }else{ applyLess(commonFile, '@import "' + folder + '/variables_rtl.less";', outputFile); } } }); }else{ folderFiles.array.forEach(function(file){ applyLess(file, null, file.replace(".less", ".css")); }); } } function applyLess(file, prependText, outputFile){ beginProcess(); console.log("compiling:", file); var parser = new(less.Parser)({paths: [path.dirname(file)], filename: file, optimization: 1}); var lessContent = fs.readFileSync(file, "utf-8"); if(prependText){ lessContent = prependText + lessContent; } parser.parse(lessContent, function(error, tree){ if(error){ less.writeError(error); process.exit(1); } var fd = fs.openSync(outputFile, "w"); fs.write(fd, tree.toCSS({compress: false}).replace(/\n/g, "\r\n"), 0, "utf-8", function(f){ fs.close(fd); console.log("writing:", outputFile); endProcess(); }); }); } function getLessFiles(folder){ var filesMap = {}; var filesArray = fs.readdirSync(folder); filesArray = filesArray.filter(function(file){ return file && /\.less$/.test(file) && !/variables\.less$/.test(file) && !/css3\.less$/.test(file) && !/variables_rtl\.less$/.test(file); }); filesArray = filesArray.map(function(file){ filesMap[file] = folder + "/" + file; filesMap[folder + "/" + file] = file; return filesMap[file]; }); return {array: filesArray, dic: filesMap}; }