You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.1 KiB
117 lines
3.1 KiB
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}; |
|
}
|
|
|