WIP reworking of skinning and app integration process
This commit is contained in:
parent
9b73d6ed6d
commit
f3b9f8c799
4 changed files with 105 additions and 15 deletions
|
@ -9,6 +9,9 @@
|
|||
},
|
||||
"license": "Apache-2.0",
|
||||
"main": "lib/index.js",
|
||||
"bin": {
|
||||
"reskindex": "./reskindex.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "babel src -d lib --source-maps",
|
||||
"start": "babel src -w -d lib --source-maps",
|
||||
|
@ -16,6 +19,8 @@
|
|||
"prepublish": "npm run build"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob": "^5.0.14",
|
||||
"optimist": "^0.6.1",
|
||||
"classnames": "^2.1.2",
|
||||
"filesize": "^3.1.2",
|
||||
"flux": "^2.0.3",
|
||||
|
|
85
reskindex.js
Executable file
85
reskindex.js
Executable file
|
@ -0,0 +1,85 @@
|
|||
#!/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);
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
strm.write("var sdk = require('matrix-react-sdk');\n\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;
|
||||
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('sdk.'+currentPath+' = {};\n');
|
||||
strm.uncork();
|
||||
}
|
||||
subtree[restOfPath[0]] = {};
|
||||
restOfPath = restOfPath.slice(1);
|
||||
}
|
||||
|
||||
strm.write('sdk.'+module+" = require('./views/"+file+"');\n");
|
||||
strm.uncork();
|
||||
}
|
||||
strm.end();
|
||||
|
|
@ -17,21 +17,17 @@ limitations under the License.
|
|||
'use strict';
|
||||
|
||||
var flux = require("flux");
|
||||
var extend = require("./extend");
|
||||
|
||||
var MatrixDispatcher = function() {
|
||||
flux.Dispatcher.call(this);
|
||||
class MatrixDispatcher extends flux.Dispatcher {
|
||||
dispatch(payload) {
|
||||
if (this.dispatching) {
|
||||
setTimeout(super.dispatch.bind(this, payload), 0);
|
||||
} else {
|
||||
this.dispatching = true;
|
||||
super.dispatch.call(this, payload);
|
||||
this.dispatching = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
extend(MatrixDispatcher.prototype, flux.Dispatcher.prototype);
|
||||
MatrixDispatcher.prototype.dispatch = function(payload) {
|
||||
if (this.dispatching) {
|
||||
setTimeout(flux.Dispatcher.prototype.dispatch.bind(this, payload), 0);
|
||||
} else {
|
||||
this.dispatching = true;
|
||||
flux.Dispatcher.prototype.dispatch.call(this, payload);
|
||||
this.dispatching = false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new MatrixDispatcher();
|
||||
|
|
|
@ -16,4 +16,8 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
module.exports.ComponentBroker = require("./ComponentBroker");
|
||||
module.exports.atoms = {};
|
||||
module.exports.molecules = {};
|
||||
module.exports.organisms = {};
|
||||
module.exports.templates = {};
|
||||
module.exports.pages = {};
|
||||
|
|
Loading…
Reference in a new issue