historia-de-zainab/bower_components/jsrender/tmplify/index.js
2017-09-25 14:03:53 +02:00

64 lines
2.3 KiB
JavaScript

/*! JsRender tmplify submodule v0.9.84 (Beta): http://jsviews.com/#jsrender */
/*! Browserify transform for JsRender templates */
/*
* Copyright 2017, Boris Moore
* Released under the MIT License.
*/
(function() {
"use strict";
var jsrender = require('./../jsrender-node.js'),
fs = require('fs'),
path = require('path'),
pathSep = path.sep,
through = require('through2'),
rootDirPath = path.resolve("./"),
rootDirPathLen = rootDirPath.length + 1;
function isTemplate(fileExt, extensions) {
extensions = typeof extensions === "string"
? extensions
: "html jsrender jsr"; // Default extensions
return new RegExp("\\s" + fileExt + "\\s").test(" " + extensions + " ");
}
module.exports = function(file, options) {
var nodeFileDirName = path.dirname(file);
if (!isTemplate(path.extname(file).slice(1), options && (options.extensions || options.e))) {
return through();
}
return through(function(buf, enc, next) {
var createTmplCode, ref, pathFromFileDir,
markup = buf.toString().replace(/^\uFEFF/, ''), // Remove BOM if necessary
tmpl = jsrender.templates(markup),
bundledFile = 'var tmplRefs = [],\n'
+ " mkup = '" + markup.replace(/['"\\]/g, "\\$&").replace(/[ \t]*(\r\n|\n|\r)/g, '\\n') + "',\n" // Normalize newlines, and escape quotes and \ character
+ ' $ = global.jsrender || global.jQuery;\n\n',
templateName = './' + file.slice(rootDirPathLen).split(pathSep).join('/');
for (ref in tmpl.refs) {
// Recursively bundle any nested template references, e.g. {{include tmpl="./some/template.html/}}"
fs.stat(ref, function(err, stat) {
// Async check that file exists
if(err && err.code == 'ENOENT') {
throw new Error("Template '" + ref + "' not found at '" + err.path + "'. Use path relative to '" + rootDirPath + "'.");
}
});
pathFromFileDir = './' + path.relative(nodeFileDirName, ref).split(pathSep).join('/');
bundledFile += 'tmplRefs.push(require("' + pathFromFileDir + '"));\n';
}
createTmplCode = '$.templates("' + templateName + '", mkup)';
bundledFile +=
'module.exports = $ ? ' + createTmplCode
+ ' :\n function($) {\n'
+ ' if (!$ || !$.views) {throw "Requires jsrender/jQuery";}\n'
+ ' while (tmplRefs.length) {\n tmplRefs.pop()($); // compile nested template\n }\n\n'
+ ' return ' + createTmplCode
+ '\n };';
this.push(bundledFile);
next();
});
};
}());