Skip to content

Commit 116cf0c

Browse files
committed
adds a static compilation more for #6 - alpha
1 parent 96e5d37 commit 116cf0c

File tree

6 files changed

+122
-38
lines changed

6 files changed

+122
-38
lines changed

bin/sniper

+37-10
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,64 @@
22

33
var program = require('commander');
44
var path = require('path');
5+
var join = path.join;
56
var fs = require('fs');
67
var cwd = process.cwd();
8+
var Minilog = require('minilog');
9+
710
var Server = require("..");
11+
var staticProg = require("../lib/static.js");
812

913
program
1014
.version(JSON.parse(fs.readFileSync(__dirname + '/../package.json', 'utf8')).version)
1115
.usage('[options] [files]')
1216
.option('-p, --port <number>', 'port to run', 9090)
17+
.option('-c, --compile', 'Creates static output', false)
1318
.option('-v, --verbose', 'Increase verbosity', false)
1419
.parse(process.argv);
1520

1621
// default settings
1722
var options = {
18-
config: "package.json",
19-
templateDir: "templates",
20-
snippets: "snippets",
23+
config: "package.json",
24+
templateDir: "templates",
25+
snippets: "snippets",
26+
};
27+
// define templates
28+
options.templates = {
29+
snip: "template.html",
30+
list: "list.html",
31+
all: "all.html"
2132
};
33+
var templates = options.templates;
34+
var templateDir = join(__dirname, "/../templates");
35+
for (var key in templates) {
36+
templates[key] = join(templateDir, templates[key]);
37+
}
2238

2339
// PARSE cli
2440

25-
if(program.args.length === 0){
26-
options.dirname = cwd;
41+
if (program.args.length === 0) {
42+
options.dirname = cwd;
2743
} else {
28-
options.dirname = program.args[0];
44+
options.dirname = program.args[0];
2945
}
3046

3147
options.port = program.port;
3248
options.dirname = path.normalize(options.dirname);
33-
options.verbose = program.verbose;
3449

35-
console.log("running: http://localhost:" + options.port);
36-
console.log("DIR:" + options.dirname);
50+
if (program.verbose) {
51+
Minilog.enable();
52+
}
3753

38-
var server = new Server(options);
54+
if (program.compile) {
55+
console.log("WARNING: static compilation mode is in alpha - use with caution");
56+
staticProg(options).then(function(){
57+
console.log("=)");
58+
}).error(function(){
59+
console.log("error happened");
60+
});
61+
} else {
62+
console.log("running: http://localhost:" + options.port);
63+
console.log("DIR:" + options.dirname);
64+
var server = new Server(options);
65+
}

lib/index.js

+2-5
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@ module.exports = function(opts) {
2424
filename: filename
2525
};
2626

27-
if (opts.verbose) {
28-
Minilog.enable();
29-
}
30-
3127
var log = Minilog("index");
3228

3329
this.evt = new EventEmitter();
@@ -101,7 +97,8 @@ module.exports = function(opts) {
10197
router: router,
10298
parsed: deepcopy(self.parsed),
10399
evt: self.evt,
104-
dirOpts: dirOpts
100+
dirOpts: dirOpts,
101+
templates: opts.templates
105102
});
106103

107104
this.server.listen(this.port);

lib/routes.js

+1-12
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,7 @@ module.exports = function(opts) {
2525
self.parsed = config;
2626
});
2727

28-
// define templates
29-
var templates = {
30-
snip: "template.html",
31-
list: "list.html",
32-
all: "all.html"
33-
};
34-
35-
var templateDir = join(__dirname, "/../templates");
36-
for (var key in templates) {
37-
templates[key] = join(templateDir, templates[key]);
38-
}
39-
28+
var templates = opts.templates;
4029
var sniper = new Sniper({
4130
snippetFolder: this.parsed.snippetFolder
4231
});

lib/sniper.js

+11-10
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ var swig = require('swig');
55
var Minilog = require('minilog');
66
var log = Minilog("sniper");
77

8-
var helper= require("biojs-util-snippets").helper;
8+
var helper = require("biojs-util-snippets").helper;
99

1010
module.exports = function(opts) {
1111

1212
this.opts = opts;
1313
var self = this;
1414

1515
// adds an optional slash to relative paths
16-
function makeAbsolute(path) {
16+
this.makeAbsolute = function(path) {
1717
var firstChar = path.charAt(0);
1818
// check whether it is http or https
1919
if (path.indexOf(":") >= 0) {
@@ -27,7 +27,7 @@ module.exports = function(opts) {
2727
return path.slice(1);
2828
}
2929
return "/" + path;
30-
}
30+
};
3131

3232
// removes the extension and filters duplicates
3333
this.getSnippets = function() {
@@ -65,13 +65,14 @@ module.exports = function(opts) {
6565
// displays the script tags
6666
this.renderHead = function(snipTemplate, parsedD) {
6767
var template = swig.compileFile(snipTemplate);
68-
if(parsedD.css){
69-
parsedD.css = parsedD.css.map(makeAbsolute);
68+
var css = {};
69+
if (parsedD.css) {
70+
css = parsedD.css.map(self.makeAbsolute);
7071
}
71-
parsedD.js = parsedD.js.map(makeAbsolute);
72+
var js = parsedD.js.map(self.makeAbsolute);
7273
var head = template({
73-
css: parsedD.css,
74-
scripts: parsedD.js
74+
css: css,
75+
scripts: js
7576
});
7677
return head;
7778
};
@@ -104,7 +105,7 @@ module.exports = function(opts) {
104105
var buffer = "";
105106

106107
if (fs.existsSync(extraFile)) {
107-
console.log("found extra config:", extraFile);
108+
log.info("found extra config: " + extraFile);
108109
this.addJSON(extraFile, parsedD);
109110
}
110111

@@ -126,7 +127,7 @@ module.exports = function(opts) {
126127
if (!htmlExists) {
127128
buffer += "(function(){\n";
128129
var mainVar = helper.findMainVar(jsContent);
129-
log.debug("selected main var: "+ mainVar);
130+
log.debug("selected main var: " + mainVar);
130131
buffer += "var " + mainVar + " = document.getElementById('" + divName + "');\n";
131132
}
132133
buffer += jsContent;

lib/static.js

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
var q = require("bluebird");
2+
var fsp = q.promisifyAll(require("fs"));
3+
var path = require('path');
4+
var join = path.join;
5+
var minilog = require('minilog');
6+
var log = minilog("static");
7+
8+
var readConfig = require('./read_config');
9+
var Sniper = require('./sniper');
10+
11+
module.exports = function(opts) {
12+
13+
var dirname = opts.dirname || __dirname;
14+
var self = this;
15+
16+
var filename = join(dirname, opts.config);
17+
var dirOpts = {
18+
dirname: dirname,
19+
filename: filename
20+
};
21+
var templates = opts.templates;
22+
23+
var parsed = readConfig(dirOpts);
24+
if (!parsed) {
25+
console.log("invalid package.json - see https://github.com/biojs/biojs-sniper for more help");
26+
process.exit(1);
27+
}
28+
29+
var snippetFolder = parsed.snippetFolder;
30+
var outputDir = opts.outputDir || snippetFolder + "-out";
31+
32+
fsp.mkdir(outputDir, function(err){
33+
if(err.code !== "EEXIST"){
34+
log.warn(err);
35+
}
36+
});
37+
38+
log.debug("opening snipper dir:" + snippetFolder);
39+
log.debug("opening snipper out dir:" + outputDir);
40+
var sniper = new Sniper({
41+
snippetFolder: snippetFolder,
42+
});
43+
44+
// custom absolute folder (one folder higher)
45+
sniper.makeAbsolute = function(path) {
46+
var firstChar = path.charAt(0);
47+
// check whether it is http or https
48+
if (path.indexOf(":") >= 0) {
49+
return path;
50+
}
51+
// defined path
52+
if (firstChar === "/") {
53+
return ".." + path;
54+
}
55+
return "../" + path;
56+
};
57+
58+
return fsp.readdirAsync(snippetFolder).filter(function(name) {
59+
return name.indexOf(".js") >= 0;
60+
}).map(function(name) {
61+
var snippet = name.split(".")[0];
62+
var buffer = sniper.buildSnippet(snippet, parsed);
63+
var text = sniper.renderHead(templates.snip, parsed);
64+
text += buffer;
65+
return fsp.writeFileAsync(join(outputDir,snippet + ".html"), text, "utf8");
66+
}).all().then(function(){
67+
console.log("Have a look in " + outputDir);
68+
});
69+
70+
};

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "biojs-sniper",
3-
"version": "0.2.4",
3+
"version": "0.2.6",
44
"description": "Renders snippets on demand",
55
"main": "lib/index.js",
66
"bin": {

0 commit comments

Comments
 (0)