Skip to content

Commit

Permalink
helpers removed from Dust core. New npm package created for helpers.
Browse files Browse the repository at this point in the history
Conflicts:
	dist/dust-core-1.0.0.js
	dist/dust-full-1.0.0.js
  • Loading branch information
jairodemorais committed Jul 19, 2012
1 parent 446ad26 commit 8c7089d
Show file tree
Hide file tree
Showing 26 changed files with 1,252 additions and 593 deletions.
8 changes: 3 additions & 5 deletions Makefile
Expand Up @@ -8,8 +8,7 @@ test:
# Run jasmine-test
#
jasmine:
node test/jasmine-test/server/specRunner.js

node test/jasmine-test/server/specRunner.js grammarTests
#
# Run code coverage and generate report
#
Expand Down Expand Up @@ -62,13 +61,12 @@ dust:
@@mkdir -p dist
@@touch ${CORE}
@@echo "$$HEADER" > ${CORE}
@@cat ${SRC}/dust.js\
${SRC}/dust-helpers.js >> ${CORE}
@@cat ${SRC}/dust.js >> ${CORE}
@@echo ${CORE} built

@@touch ${FULL}
@@echo "$$HEADER" > ${FULL}
@@cat ${SRC}/dust.js\
${SRC}/dust-helpers.js\
${SRC}/compiler.js\
${SRC}/parser.js >> ${FULL}
@@echo ${FULL} built
Expand Down
152 changes: 0 additions & 152 deletions dist/dust-core-1.0.0.js
Expand Up @@ -549,160 +549,8 @@ dust.escapeJs = function(s) {
})(dust);

if (typeof exports !== "undefined") {
dust.helpers = require("./dust-helpers").helpers;
if (typeof process !== "undefined") {
require('./server')(dust);
}
module.exports = dust;
}
(function(dust){

/* make a safe version of console if it is not available
* currently supporting:
* _console.log
* */
var _console = (typeof console !== 'undefined')? console: {
log: function(){
/* a noop*/
}
};

function isSelect(context) {
var value = context.current();
return typeof value === "object" && value.isSelect === true;
}

function filter(chunk, context, bodies, params, filter) {
var params = params || {},
actual, expected;
if (params.key) {
actual = context.get(params.key);
} else if (isSelect(context)) {
actual = context.current().value;
if (context.current().isResolved) {
filter = function() { return false; };
}
} else {
throw "No key specified for filter and no key found in context from select statement";
}
expected = helpers.tap(params.value, chunk, context);
if (filter(expected, coerce(actual, params.type, context))) {
if (isSelect(context)) {
context.current().isResolved = true;
}
return chunk.render(bodies.block, context);
} else if (bodies['else']) {
return chunk.render(bodies['else'], context);
}

return chunk.write('');
}

function coerce (value, type, context) {
if (value) {
switch (type || typeof(value)) {
case 'number': return +value;
case 'string': return String(value);
case 'boolean': return Boolean(value);
case 'date': return new Date(value);
case 'context': return context.get(value);
}
}

return value;
}

var helpers = {

sep: function(chunk, context, bodies) {
if (context.stack.index === context.stack.of - 1) {
return chunk;
}
return bodies.block(chunk, context);
},

idx: function(chunk, context, bodies) {
return bodies.block(chunk, context.push(context.stack.index));
},
contextDump: function(chunk, context, bodies) {
_console.log(JSON.stringify(context.stack));
return chunk;
},

// Utility helping to resolve dust references in the given chunk
tap: function( input, chunk, context ){
// return given input if there is no dust reference to resolve
var output = input;
// dust compiles a string to function, if there are references
if( typeof input === "function"){
output = '';
chunk.tap(function(data){
output += data;
return '';
}).render(input, context).untap();
if( output === '' ){
output = false;
}
}
return output;
},

"if": function( chunk, context, bodies, params ){
if( params && params.cond ){
var cond = params.cond;
cond = this.tap(cond, chunk, context);
// eval expressions with given dust references
if( eval( cond ) ){
return chunk.render( bodies.block, context );
}
if( bodies['else'] ){
return chunk.render( bodies['else'], context );
}
}
// no condition
else {
_console.log( "NO condition given in the if helper!" );
}
return chunk;
},
select: function(chunk, context, bodies, params) {
if( params && params.key){
var key = params.key;
key = this.tap(key, chunk, context);
return chunk.render(bodies.block, context.push({ isSelect: true, isResolved: false, value: context.get(key) }));
}
// no key
else {
_console.log( "No key given for the select tag!" );
}
return chunk;
},

eq: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual === expected; });
},

lt: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual < expected; });
},

lte: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual <= expected; });
},

gt: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual > expected; });
},

gte: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual >= expected; });
},

"else": function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return true; });
}
};

dust.helpers = helpers;

})(typeof exports !== 'undefined' ? exports : getGlobal());
152 changes: 0 additions & 152 deletions dist/dust-full-1.0.0.js
Expand Up @@ -549,163 +549,11 @@ dust.escapeJs = function(s) {
})(dust);

if (typeof exports !== "undefined") {
dust.helpers = require("./dust-helpers").helpers;
if (typeof process !== "undefined") {
require('./server')(dust);
}
module.exports = dust;
}
(function(dust){

/* make a safe version of console if it is not available
* currently supporting:
* _console.log
* */
var _console = (typeof console !== 'undefined')? console: {
log: function(){
/* a noop*/
}
};

function isSelect(context) {
var value = context.current();
return typeof value === "object" && value.isSelect === true;
}

function filter(chunk, context, bodies, params, filter) {
var params = params || {},
actual, expected;
if (params.key) {
actual = context.get(params.key);
} else if (isSelect(context)) {
actual = context.current().value;
if (context.current().isResolved) {
filter = function() { return false; };
}
} else {
throw "No key specified for filter and no key found in context from select statement";
}
expected = helpers.tap(params.value, chunk, context);
if (filter(expected, coerce(actual, params.type, context))) {
if (isSelect(context)) {
context.current().isResolved = true;
}
return chunk.render(bodies.block, context);
} else if (bodies['else']) {
return chunk.render(bodies['else'], context);
}

return chunk.write('');
}

function coerce (value, type, context) {
if (value) {
switch (type || typeof(value)) {
case 'number': return +value;
case 'string': return String(value);
case 'boolean': return Boolean(value);
case 'date': return new Date(value);
case 'context': return context.get(value);
}
}

return value;
}

var helpers = {

sep: function(chunk, context, bodies) {
if (context.stack.index === context.stack.of - 1) {
return chunk;
}
return bodies.block(chunk, context);
},

idx: function(chunk, context, bodies) {
return bodies.block(chunk, context.push(context.stack.index));
},
contextDump: function(chunk, context, bodies) {
_console.log(JSON.stringify(context.stack));
return chunk;
},

// Utility helping to resolve dust references in the given chunk
tap: function( input, chunk, context ){
// return given input if there is no dust reference to resolve
var output = input;
// dust compiles a string to function, if there are references
if( typeof input === "function"){
output = '';
chunk.tap(function(data){
output += data;
return '';
}).render(input, context).untap();
if( output === '' ){
output = false;
}
}
return output;
},

"if": function( chunk, context, bodies, params ){
if( params && params.cond ){
var cond = params.cond;
cond = this.tap(cond, chunk, context);
// eval expressions with given dust references
if( eval( cond ) ){
return chunk.render( bodies.block, context );
}
if( bodies['else'] ){
return chunk.render( bodies['else'], context );
}
}
// no condition
else {
_console.log( "NO condition given in the if helper!" );
}
return chunk;
},
select: function(chunk, context, bodies, params) {
if( params && params.key){
var key = params.key;
key = this.tap(key, chunk, context);
return chunk.render(bodies.block, context.push({ isSelect: true, isResolved: false, value: context.get(key) }));
}
// no key
else {
_console.log( "No key given for the select tag!" );
}
return chunk;
},

eq: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual === expected; });
},

lt: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual < expected; });
},

lte: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual <= expected; });
},

gt: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual > expected; });
},

gte: function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return actual >= expected; });
},

"else": function(chunk, context, bodies, params) {
return filter(chunk, context, bodies, params, function(expected, actual) { return true; });
}
};

dust.helpers = helpers;

})(typeof exports !== 'undefined' ? exports : getGlobal());
(function(dust) {

dust.compile = function(source, name) {
Expand Down
2 changes: 1 addition & 1 deletion docs/index.dust.html
Expand Up @@ -12,7 +12,7 @@
<script src="lib/dust.js"></script>
<script src="lib/parser.js"></script>
<script src="lib/compiler.js"></script>
<script src="test/examples.js"></script>
<script src="test/jasmine-test/spec/grammarTests.js"></script>
<script src="test/uutest.js"></script>
<script src="test/core.js"></script>
{#tmpl names="select"/}
Expand Down

0 comments on commit 8c7089d

Please sign in to comment.