Comparing version 0.1.9 to 0.1.10
234
dist/jeff.js
/*! | ||
jeff v0.1.0 | ||
jeff-core v0.1.10 | ||
@@ -31,3 +31,8 @@ Copyright (C) 2013 by GetHuman LLC | ||
// lib/jeff/base.js | ||
module.exports.create = function() { | ||
var Jeff = {}; | ||
// BEGIN(BROWSER) | ||
Jeff.VERSION = "0.2.0"; | ||
@@ -37,36 +42,70 @@ | ||
Jeff.registerPlugin = function(name, obj) { | ||
if ( name && obj && name.length > 0 ) { | ||
Jeff.plugins[name] = obj; | ||
} | ||
}; | ||
Jeff.registerPlugin("each", function(items, tmpl) { | ||
var ret = []; | ||
for( var i = 0, len = items.length; i < len; ++i ) { | ||
ret.push(tmpl(items[i])); | ||
} | ||
return ret; | ||
}); | ||
; | ||
return Jeff; | ||
};; | ||
// lib/jeff/utils.js | ||
Jeff.Utils = { | ||
extend: function(obj, value) { | ||
for(var key in value) { | ||
if(value.hasOwnProperty(key)) { | ||
obj[key] = value[key]; | ||
} | ||
extend: function() { | ||
var options, name, src, copy, copyIsArray, clone, | ||
target = arguments[0] || {}, | ||
i = 1, | ||
length = arguments.length, | ||
deep = false; | ||
// Handle a deep copy situation | ||
if ( typeof target === "boolean" ) { | ||
deep = target; | ||
// skip the boolean and the target | ||
target = arguments[ i ] || {}; | ||
i++; | ||
} | ||
return obj; | ||
}, | ||
inArray: function(arr, obj) { | ||
var i = arr.length; | ||
while (i--) { | ||
if (arr[i] === obj) { | ||
return true; | ||
// Handle case when target is a string or something (possible in deep copy) | ||
if ( typeof target !== "object" && !Jeff.Utils.isFunction(target) ) { | ||
target = {}; | ||
} | ||
// return clone of object if only one argument is passed | ||
if ( i === length ) { | ||
target = {}; | ||
i--; | ||
} | ||
for ( ; i < length; i++ ) { | ||
// Only deal with non-null/undefined values | ||
if ( (options = arguments[ i ]) !== null ) { | ||
// Extend the base object | ||
for ( name in options ) { | ||
src = target[ name ]; | ||
copy = options[ name ]; | ||
// Prevent never-ending loop | ||
if ( target === copy ) { | ||
continue; | ||
} | ||
// Recurse if we're merging plain objects or arrays | ||
if ( deep && copy && ( Jeff.Utils.isObject(copy) || (copyIsArray = Jeff.Utils.isArray(copy)) ) ) { | ||
if ( copyIsArray ) { | ||
copyIsArray = false; | ||
clone = src && Jeff.Utils.isArray(src) ? src : []; | ||
} else { | ||
clone = src && Jeff.Utils.isObject(src) ? src : {}; | ||
} | ||
// Never move original objects, clone them | ||
target[ name ] = Jeff.Utils.extend( deep, clone, copy ); | ||
// Don't bring in undefined values | ||
} else if ( copy !== undefined ) { | ||
target[ name ] = copy; | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
// Return the modified object | ||
return target; | ||
}, | ||
@@ -82,2 +121,6 @@ | ||
isFunction: function(obj) { | ||
return !!(obj && obj.constructor && obj.call && obj.apply); | ||
}, | ||
isEmptyObject: function(obj) { | ||
@@ -107,3 +150,3 @@ | ||
isString: function(str) { | ||
return (typeof str == 'string' || str instanceof String); | ||
return (typeof str === 'string' || str instanceof String); | ||
} | ||
@@ -118,2 +161,3 @@ | ||
var fs = require("fs"); | ||
var namedTemplates = {}; // store partials in memory by name | ||
@@ -132,5 +176,9 @@ | ||
var jtPrintNewline = ""; | ||
var outputMode = 1; // 0 = toDom, 1 = toString, 2 = toStringPretty | ||
var outputMode = 1; // 0 = leaveAlone, 1 = toString, 2 = toStringPretty, 3 = toDom | ||
var templateDirs = []; | ||
Jeff.getTags = function () { | ||
return Array.concat(allTags, selfClosing); | ||
}; | ||
Jeff.setOutputMode = function(mode) { | ||
@@ -153,16 +201,24 @@ if ( !isNaN(mode) && mode >= 0 && mode < 3 ) { | ||
Jeff.elem = function(tagName) { // like this: elem("div", attributes, children, text); | ||
if ( !Jeff.Utils.isString(tagName) ) return null; | ||
var e = { tag: tagName, render: function() { return output(e); } }; | ||
if ( !Jeff.Utils.isString(tagName) ) { | ||
return null; | ||
} | ||
var e = { tag: tagName, toString: function() { return Jeff.output(e); } }; | ||
if ( arguments.length > 1 ) { | ||
for ( var i = 1, len = arguments.length; i < len; ++i ) { | ||
if ( Jeff.Utils.isArray(arguments[i]) ) { | ||
e.children = arguments[i]; | ||
} else if ( Jeff.Utils.isObject(arguments[i]) ) { | ||
e.attributes = arguments[i]; | ||
} else if ( Jeff.Utils.isString(arguments[i]) ) { | ||
e.text = arguments[i]; | ||
var arg = arguments[i]; | ||
if ( Jeff.Utils.isArray(arg) ) { | ||
e.children = arg; | ||
} else if ( Jeff.Utils.isObject(arg) && Object.hasOwnProperty('tag') ) { | ||
e.children = e.children || []; | ||
e.children.push(arg); | ||
} else if ( Jeff.Utils.isObject(arg) && arg.tag && arg.toString ) { | ||
e.children = [arg]; | ||
} else if ( Jeff.Utils.isObject(arg) ) { | ||
e.attributes = arg; | ||
} else if ( Jeff.Utils.isString(arg) ) { | ||
e.text = arg; | ||
} | ||
} | ||
} | ||
return output(e); | ||
return e; | ||
}; | ||
@@ -178,28 +234,6 @@ | ||
// actually make tag methods for each of the tags in var allTags | ||
Jeff.elems = {}; | ||
var i = allTags.length; | ||
while( i-- ) { | ||
Jeff.elems[allTags[i]] = makeElem(allTags[i]); | ||
} | ||
// PRINTING MARKUP AS HTML | ||
function output(elem, mode) { | ||
var currentMode = mode || outputMode; | ||
if ( currentMode === 0 ) { | ||
return markupToDom(elem); | ||
} else if ( currentMode === 2 ) { | ||
jtPrintIndent = " "; | ||
jtPrintNewline = "\n"; | ||
return markupToString(elem); | ||
} else { | ||
jtPrintIndent = ""; | ||
jtPrintNewline = ""; | ||
return markupToString(elem); | ||
} | ||
} | ||
// once we have converted our json to "markup", we can now "print" to DOM using document.createElement, etc | ||
function markupToDom(elem) { | ||
// todo | ||
return elem; | ||
} | ||
@@ -209,5 +243,10 @@ | ||
function markupToString(elem, ind) { | ||
//console.log('printing: ' + JSON.stringify(elem)); | ||
if ( !elem ) return; | ||
if ( Jeff.Utils.isString(elem) ) return elem; | ||
if ( !elem ) { | ||
return; | ||
} | ||
if ( Jeff.Utils.isString(elem) ) { | ||
return elem; | ||
} | ||
@@ -235,9 +274,15 @@ var indent = "", indentation = 0, i, len; | ||
//console.log('\n\nelem is ' + JSON.stringify(elem)); | ||
if ( elem.attributes ) { | ||
//console.log('attributes are ' + JSON.stringify(elem.attributes)); | ||
for( var prop in elem.attributes ) { | ||
p.push(" ", prop, "=\"", elem.attributes[prop], "\""); | ||
if ( elem.attributes[prop] === null ) { | ||
p.push(" ", prop); | ||
} else { | ||
p.push(" ", prop, "=\"", elem.attributes[prop], "\""); | ||
} | ||
} | ||
} | ||
if ( elem.tag && !elem.children && !elem.text ) { | ||
if ( Jeff.Utils.inArray(selfClosing, elem.tag) ) { | ||
if ( selfClosing.indexOf(elem.tag) > -1 ) { | ||
p.push("/>", jtPrintNewline); | ||
@@ -273,17 +318,56 @@ } else { | ||
Jeff.template = function(path) { | ||
var fs = require("fs"); | ||
if ( fs && templateDirs.length > 0 ) { | ||
// actually make tag methods for each of the tags in var allTags | ||
Jeff.elems = {}; | ||
var i = allTags.length; | ||
while( i-- ) { | ||
Jeff.elems[allTags[i]] = makeElem(allTags[i]); | ||
} | ||
// PRINTING MARKUP AS HTML | ||
Jeff.output = function(elem, mode) { | ||
var currentMode = mode || outputMode; | ||
if ( currentMode === 0 ) { | ||
return markupToDom(elem); | ||
} else if ( currentMode === 2 ) { | ||
jtPrintIndent = " "; | ||
jtPrintNewline = "\n"; | ||
return markupToString(elem); | ||
} else { | ||
jtPrintIndent = ""; | ||
jtPrintNewline = ""; | ||
return markupToString(elem); | ||
} | ||
}; | ||
Jeff.getTemplate = function(path) { | ||
if ( namedTemplates[path] ) { | ||
return namedTemplates[path]; | ||
} else { | ||
var i = templateDirs.length; | ||
while( i-- ) { | ||
var fullpath = templateDirs[i] + "/" + path; | ||
//console.log("trying " + fullpath); | ||
if ( fs.existsSync(fullpath) ) { | ||
return require(fullpath); | ||
path = fullpath; | ||
break; | ||
} | ||
} | ||
return require(path); | ||
} | ||
return require(path); | ||
}; | ||
Jeff.templateToString = function(result) { | ||
return (Jeff.Utils.isString(result) ? result : (Jeff.Utils.isArray(result) ? Jeff.naked(result).toString() : result.toString())); | ||
}; | ||
Jeff.template = function(path) { | ||
return function(model) { | ||
var result = Jeff.getTemplate(path)(model); | ||
return Jeff.templateToString(result, model); | ||
}; | ||
}; | ||
Jeff.render = function(path, model) { | ||
return Jeff.template(path)(model); | ||
}; | ||
Jeff.extends = function(path, model, subTemplates) { | ||
@@ -293,3 +377,3 @@ if ( subTemplates && Jeff.Utils.isObject(subTemplates) ) { | ||
} | ||
return Jeff.template(path)(model); | ||
return Jeff.render(path, model); | ||
}; | ||
@@ -317,2 +401,6 @@ | ||
Jeff.init = function(overrides) { | ||
Jeff.Utils.extend(Jeff, overrides); | ||
}; | ||
return Jeff; | ||
@@ -319,0 +407,0 @@ |
/*! | ||
jeff v0.1.0 | ||
jeff-core v0.1.10 | ||
@@ -26,2 +26,2 @@ Copyright (C) 2013 by GetHuman LLC | ||
*/ | ||
(function(){var a={};a.VERSION="0.2.0",a.plugins={},a.registerPlugin=function(b,c){b&&c&&b.length>0&&(a.plugins[b]=c)},a.registerPlugin("each",function(a,b){for(var c=[],d=0,e=a.length;e>d;++d)c.push(b(a[d]));return c}),a.Utils={extend:function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a},inArray:function(a,b){for(var c=a.length;c--;)if(a[c]===b)return!0;return!1},isArray:function(a){return a&&"object"==typeof a?"[object Array]"===toString.call(a):!1},isObject:function(a){return a&&"object"==typeof a?"[object Object]"===toString.call(a):!1},isEmptyObject:function(a){if(null===a)return!0;if(a.length&&a.length>0)return!1;if(0===a.length)return!0;for(var b in a)if(hasOwnProperty.call(a,b))return!1;return!0},isString:function(a){return"string"==typeof a||a instanceof String}},exports.attach=function(a){function b(b){return function(){return[].unshift.call(arguments,b),a.elem.apply(this,arguments)}}function c(a,b){var c=b||l;return 0===c?d(a):2===c?(j=" ",k="\n",e(a)):(j="",k="",e(a))}function d(){}function e(b,c){if(b){if(a.Utils.isString(b))return b;var d,f,g="",l=0;if(j&&j.length>0){var m=[];for(c&&(l=c),d=l;d--;)m.push(j);g=m.join("")}var n=[];if(b.tag&&"html"===b.tag&&n.push(g,i,k),b.tag&&n.push(g,"<",b.tag),b.attributes)for(var o in b.attributes)n.push(" ",o,'="',b.attributes[o],'"');if(!b.tag||b.children||b.text){if(b.tag&&n.push(">"),b.children){for(b.tag&&n.push(k),d=0,f=b.children.length;f>d;++d)n.push(e(b.children[d],b.tag?l+1:l));b.tag&&n.push(g)}b.text&&n.push(b.text),b.tag&&n.push("</",b.tag,">",k)}else a.Utils.inArray(h,b.tag)?n.push("/>",k):n.push("></",b.tag,">",k);return n.join("")}}var f={};a.getTemplateByName=function(a){return f[a]};var g=["a","iframe","abbr","acronym","address","area","b","base","bdo","big","blockquote","body","br","button","caption","cite","code","col","colgroup","dd","del","dfn","div","dl","dt","em","fieldset","form","h1","h2","h3","h4","h5","h6","head","html","hr","i","img","input","ins","kbd","label","legend","li","link","map","meta","noscript","object","ol","optgroup","option","p","param","pre","q","samp","script","select","small","span","strong","style","sub","sup","table","tbody","td","textarea","tfoot","th","thead","title","tr","tt","ul"],h=["area","base","basefont","br","col","frame","hr","img","input","link","meta","param"],i="<!DOCTYPE html>",j="",k="",l=1,m=[];a.setOutputMode=function(a){!isNaN(a)&&a>=0&&3>a&&(l=a)},a.setTemplateDirs=function(b){b&&a.Utils.isArray(b)&&(m=b)},a.addTemplateDir=function(a){m.push(a)},a.elem=function(b){if(!a.Utils.isString(b))return null;var d={tag:b,render:function(){return c(d)}};if(arguments.length>1)for(var e=1,f=arguments.length;f>e;++e)a.Utils.isArray(arguments[e])?d.children=arguments[e]:a.Utils.isObject(arguments[e])?d.attributes=arguments[e]:a.Utils.isString(arguments[e])&&(d.text=arguments[e]);return c(d)},a.elems={};for(var n=g.length;n--;)a.elems[g[n]]=b(g[n]);return a.template=function(a){var b=require("fs");if(b&&m.length>0)for(var c=m.length;c--;){var d=m[c]+"/"+a;if(b.existsSync(d))return require(d)}return require(a)},a.extends=function(b,c,d){return d&&a.Utils.isObject(d)&&a.Utils.extend(f,d),a.template(b)(c)},a.extension=function(a){return f[a]},a.addShortcutsToScope=function(b){var c;for(c in a.elems)b[c]=a.elems[c];for(c in a.plugins)b[c]=a.plugins[c]},a.naked=function(b,c){return a.elem("",b,c)},a},"object"==typeof module&&module.exports?module.exports=a:"function"==typeof define&&define.amd?define(function(){return a}):this.Jeff=a}).call(this); | ||
(function(a){var b={};module.exports.create=function(){var a={};return a.VERSION="0.2.0",a.plugins={},a},b.Utils={extend:function(){var c,d,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;for("boolean"==typeof i&&(l=i,i=arguments[j]||{},j++),"object"==typeof i||b.Utils.isFunction(i)||(i={}),j===k&&(i={},j--);k>j;j++)if(null!==(c=arguments[j]))for(d in c)e=i[d],f=c[d],i!==f&&(l&&f&&(b.Utils.isObject(f)||(g=b.Utils.isArray(f)))?(g?(g=!1,h=e&&b.Utils.isArray(e)?e:[]):h=e&&b.Utils.isObject(e)?e:{},i[d]=b.Utils.extend(l,h,f)):f!==a&&(i[d]=f));return i},isArray:function(a){return a&&"object"==typeof a?"[object Array]"===toString.call(a):!1},isObject:function(a){return a&&"object"==typeof a?"[object Object]"===toString.call(a):!1},isFunction:function(a){return!!(a&&a.constructor&&a.call&&a.apply)},isEmptyObject:function(a){if(null===a)return!0;if(a.length&&a.length>0)return!1;if(0===a.length)return!0;for(var b in a)if(hasOwnProperty.call(a,b))return!1;return!0},isString:function(a){return"string"==typeof a||a instanceof String}},exports.attach=function(a){function b(b){return function(){return[].unshift.call(arguments,b),a.elem.apply(this,arguments)}}function c(a){return a}function d(b,c){if(b){if(a.Utils.isString(b))return b;var e,f,g="",l=0;if(j&&j.length>0){var m=[];for(c&&(l=c),e=l;e--;)m.push(j);g=m.join("")}var n=[];if(b.tag&&"html"===b.tag&&n.push(g,i,k),b.tag&&n.push(g,"<",b.tag),b.attributes)for(var o in b.attributes)null===b.attributes[o]?n.push(" ",o):n.push(" ",o,'="',b.attributes[o],'"');if(!b.tag||b.children||b.text){if(b.tag&&n.push(">"),b.children){for(b.tag&&n.push(k),e=0,f=b.children.length;f>e;++e)n.push(d(b.children[e],b.tag?l+1:l));b.tag&&n.push(g)}b.text&&n.push(b.text),b.tag&&n.push("</",b.tag,">",k)}else h.indexOf(b.tag)>-1?n.push("/>",k):n.push("></",b.tag,">",k);return n.join("")}}var e=require("fs"),f={};a.getTemplateByName=function(a){return f[a]};var g=["a","iframe","abbr","acronym","address","area","b","base","bdo","big","blockquote","body","br","button","caption","cite","code","col","colgroup","dd","del","dfn","div","dl","dt","em","fieldset","form","h1","h2","h3","h4","h5","h6","head","html","hr","i","img","input","ins","kbd","label","legend","li","link","map","meta","noscript","object","ol","optgroup","option","p","param","pre","q","samp","script","select","small","span","strong","style","sub","sup","table","tbody","td","textarea","tfoot","th","thead","title","tr","tt","ul"],h=["area","base","basefont","br","col","frame","hr","img","input","link","meta","param"],i="<!DOCTYPE html>",j="",k="",l=1,m=[];a.getTags=function(){return Array.concat(g,h)},a.setOutputMode=function(a){!isNaN(a)&&a>=0&&3>a&&(l=a)},a.setTemplateDirs=function(b){b&&a.Utils.isArray(b)&&(m=b)},a.addTemplateDir=function(a){m.push(a)},a.elem=function(b){if(!a.Utils.isString(b))return null;var c={tag:b,toString:function(){return a.output(c)}};if(arguments.length>1)for(var d=1,e=arguments.length;e>d;++d){var f=arguments[d];a.Utils.isArray(f)?c.children=f:a.Utils.isObject(f)&&Object.hasOwnProperty("tag")?(c.children=c.children||[],c.children.push(f)):a.Utils.isObject(f)&&f.tag&&f.toString?c.children=[f]:a.Utils.isObject(f)?c.attributes=f:a.Utils.isString(f)&&(c.text=f)}return c},a.elems={};for(var n=g.length;n--;)a.elems[g[n]]=b(g[n]);return a.output=function(a,b){var e=b||l;return 0===e?c(a):2===e?(j=" ",k="\n",d(a)):(j="",k="",d(a))},a.getTemplate=function(a){if(f[a])return f[a];for(var b=m.length;b--;){var c=m[b]+"/"+a;if(e.existsSync(c)){a=c;break}}return require(a)},a.templateToString=function(b){return a.Utils.isString(b)?b:a.Utils.isArray(b)?a.naked(b).toString():b.toString()},a.template=function(b){return function(c){var d=a.getTemplate(b)(c);return a.templateToString(d,c)}},a.render=function(b,c){return a.template(b)(c)},a.extends=function(b,c,d){return d&&a.Utils.isObject(d)&&a.Utils.extend(f,d),a.render(b,c)},a.extension=function(a){return f[a]},a.addShortcutsToScope=function(b){var c;for(c in a.elems)b[c]=a.elems[c];for(c in a.plugins)b[c]=a.plugins[c]},a.naked=function(b,c){return a.elem("",b,c)},a.init=function(b){a.Utils.extend(a,b)},a},"object"==typeof module&&module.exports?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):this.Jeff=b}).call(this); |
@@ -52,2 +52,5 @@ exports.attach = function(Jeff) { | ||
e.children = arg; | ||
} else if ( Jeff.Utils.isObject(arg) && Object.hasOwnProperty('tag') ) { | ||
e.children = e.children || []; | ||
e.children.push(arg); | ||
} else if ( Jeff.Utils.isObject(arg) && arg.tag && arg.toString ) { | ||
@@ -54,0 +57,0 @@ e.children = [arg]; |
@@ -5,3 +5,3 @@ | ||
"description": "JSON-based HTML templating engine", | ||
"version": "0.1.9", | ||
"version": "0.1.10", | ||
"homepage": "http://jeffjs.com", | ||
@@ -8,0 +8,0 @@ "author": "Christian Allen <christian@gethuman.com>", |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
102443
41
1066
8