mirror of
https://github.com/twbs/bootstrap.git
synced 2024-12-05 17:24:20 +01:00
93 lines
2.5 KiB
JavaScript
Executable File
93 lines
2.5 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/*
|
|
* Copyright 2011 Twitter, Inc.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
var hogan = require('../lib/hogan.js'),
|
|
path = require('path'),
|
|
fs = require('fs');
|
|
|
|
var specials = ['/', '.', '*', '+', '?', '|','(', ')', '[', ']', '{', '}', '\\'],
|
|
specialsRegExp = new RegExp('(\\' + specials.join('|\\') + ')', 'g'),
|
|
templates;
|
|
|
|
|
|
// Escape special regexp characters
|
|
function esc(text) {
|
|
return text.replace(specialsRegExp, '\\$1');
|
|
}
|
|
|
|
|
|
// Check for dirs and correct ext (<3 for windows)
|
|
function extractFiles(args) {
|
|
var usage = 'USAGE: hulk ./templates/*.mustaches\n' +
|
|
'NOTE: hulk supports the "*" wildcard and allows you to target specific extensions too',
|
|
files = [];
|
|
|
|
if (!args.length) {
|
|
console.log(usage);
|
|
process.exit(-1);
|
|
}
|
|
|
|
args.forEach(function (arg) {
|
|
|
|
if (/\*/.test(arg)) {
|
|
arg = arg.split('*');
|
|
return files = files.concat(
|
|
fs.readdirSync(arg[0] || '.')
|
|
.map(function (f) {
|
|
return new RegExp(esc(arg[1]) + '$').test(f) && path.join(arg[0], f);
|
|
})
|
|
.filter(function (f) {
|
|
return f;
|
|
})
|
|
);
|
|
}
|
|
|
|
files.push(arg);
|
|
|
|
})
|
|
|
|
return files;
|
|
}
|
|
|
|
|
|
// Remove utf-8 byte order mark, http://en.wikipedia.org/wiki/Byte_order_mark
|
|
function removeByteOrderMark(text) {
|
|
if (text.charCodeAt(0) === 0xfeff) {
|
|
return text.substring(1);
|
|
}
|
|
return text;
|
|
}
|
|
|
|
|
|
// Write a template foreach file that matches template extension
|
|
templates = extractFiles(process.argv.slice(2))
|
|
.map(function (file) {
|
|
var openedFile = fs.readFileSync(file, 'utf-8'), name;
|
|
if (!openedFile) return;
|
|
name = file.replace(/\..*$/, '');
|
|
openedFile = removeByteOrderMark(openedFile.trim());
|
|
return 'templates.' + name + ' = new Hogan.Template(' + hogan.compile(openedFile, { asString: 1 }) + ');';
|
|
})
|
|
.filter(function (t) {
|
|
return t;
|
|
});
|
|
|
|
|
|
// Output templates
|
|
if (!templates.length) return;
|
|
console.log('var templates = {};');
|
|
console.log(templates.join('\n')); |