116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env node
 | |
| 
 | |
| var fs = require('fs');
 | |
| var path = require('path');
 | |
| var glob = require('glob');
 | |
| 
 | |
| var args = require('optimist').argv;
 | |
| 
 | |
| var header = args.h || args.header;
 | |
| 
 | |
| if (args._.length == 0) {
 | |
|     console.log("No skin given");
 | |
|     process.exit(1);
 | |
| }
 | |
| 
 | |
| var skin = args._[0];
 | |
| 
 | |
| try {
 | |
|     fs.accessSync(path.join('src', 'skins', skin), fs.F_OK);
 | |
| } catch (e) {
 | |
|     console.log("Skin "+skin+" not found");
 | |
|     process.exit(1);
 | |
| }
 | |
| 
 | |
| var skinfoFile = path.join('src', 'skins', skin, 'skinfo.json');
 | |
| 
 | |
| try {
 | |
|     fs.accessSync(skinfoFile, fs.F_OK);
 | |
| } catch (e) {
 | |
|     console.log("Skin "+skin+" has no skinfo.json");
 | |
|     process.exit(1);
 | |
| }
 | |
| 
 | |
| try {
 | |
|     fs.accessSync(path.join('src', 'skins', skin, 'views'), fs.F_OK);
 | |
| } catch (e) {
 | |
|     console.log("Skin "+skin+" has no views directory");
 | |
|     process.exit(1);
 | |
| }
 | |
| 
 | |
| var skindex = path.join('src', 'skins', skin, 'skindex.js');
 | |
| var viewsDir = path.join('src', 'skins', skin, 'views');
 | |
| 
 | |
| var strm = fs.createWriteStream(skindex);
 | |
| 
 | |
| if (header) {
 | |
|    strm.write(fs.readFileSync(header));
 | |
|    strm.write('\n');
 | |
| }
 | |
| 
 | |
| strm.write("/*\n");
 | |
| strm.write(" * THIS FILE IS AUTO-GENERATED\n");
 | |
| strm.write(" * You can edit it you like, but your changes will be overwritten,\n");
 | |
| strm.write(" * so you'd just be trying to swim upstream like a salmon.\n");
 | |
| strm.write(" * You are not a salmon.\n");
 | |
| strm.write(" */\n\n");
 | |
| 
 | |
| var mySkinfo = JSON.parse(fs.readFileSync(skinfoFile, "utf8"));
 | |
| 
 | |
| strm.write("var skin = {\n");
 | |
| strm.write("    atoms: {},\n");
 | |
| strm.write("    molecules: {},\n");
 | |
| strm.write("    organisms: {},\n");
 | |
| strm.write("    templates: {},\n");
 | |
| strm.write("    pages: {}\n");
 | |
| strm.write("};\n");
 | |
| strm.write('\n');
 | |
| 
 | |
| var tree = {
 | |
|     atoms: {},
 | |
|     molecules: {},
 | |
|     organisms: {},
 | |
|     templates: {},
 | |
|     pages: {}
 | |
| };
 | |
| 
 | |
| var files = glob.sync('**/*.js', {cwd: viewsDir});
 | |
| for (var i = 0; i < files.length; ++i) {
 | |
|     var file = files[i].replace('.js', '');
 | |
|     var module = (file.replace(/\//g, '.'));
 | |
| 
 | |
|     // create objects for submodules
 | |
|     // NB. that we do not support creating additional
 | |
|     // top level modules. Perhaps we should?
 | |
|     var subtree = tree[module.split('.')[0]];
 | |
|     var restOfPath = module.split('.').slice(0, -1);
 | |
|     var currentPath = restOfPath[0];
 | |
|     restOfPath = restOfPath.slice(1);
 | |
|     while (restOfPath.length) {
 | |
|         currentPath += '.'+restOfPath[0];
 | |
|         if (subtree[restOfPath[0]] == undefined) {
 | |
|             strm.write('skin.'+currentPath+' = {};\n');
 | |
|             strm.uncork();
 | |
|             subtree[restOfPath[0]] = {};
 | |
|         }
 | |
|         subtree = subtree[restOfPath[0]];
 | |
|         restOfPath = restOfPath.slice(1);
 | |
|     }
 | |
| 
 | |
|     strm.write('skin.'+module+" = require('./views/"+file+"');\n");
 | |
|     strm.uncork();
 | |
| }
 | |
| 
 | |
| strm.write("\n");
 | |
| 
 | |
| if (mySkinfo.baseSkin) {
 | |
|     strm.write("module.exports = require('"+mySkinfo.baseSkin+"');");
 | |
|     strm.write("var extend = require('matrix-react-sdk/lib/extend');\n");
 | |
|     strm.write("extend(module.exports, skin);\n");
 | |
| } else {
 | |
|     strm.write("module.exports = skin;");
 | |
| }
 | |
| 
 | |
| strm.end();
 | |
| 
 |