it('should handle operator expressions', function(){ var element = document.querySelector('#operator-expression'); directive('data-operator-expression', function(ctx, element, attr){ if (attr.expression(ctx)) { element.textContent = 'Count is greater than 10'; } else { element.textContent = 'Count is not greater than 10'; } }); directive('data-operator-expression').exec(element, { count: 20 }); assert('Count is greater than 10' === element.textContent); directive('data-operator-expression').exec(element, { count: 5 }); assert('Count is not greater than 10' === element.textContent); });
it('should handle function(arg) expressions', function(done){ var element = document.querySelector('#fn-arg-expression'); directive('data-fn-arg-expression', function(ctx, element, attr){ attr.expression(ctx); }); content('todos') .attr('todo', 'object') .action('create', function(todo){ assert('A todo!' === todo.title); done(); }); var ctx = content('todos').init({ todo: { title: 'A todo!' } }); directive('data-fn-arg-expression').exec(element, ctx); });
it('should execute (and return a content)', function(done){ var result = directive('data-title', function(ctx, element){ assert(content.root() === ctx); assert(document.querySelector('#mocha') === element); done(); }).exec(document.querySelector('#mocha'), content.root()); });
it('should define', function(done){ directive.on('define', function(instance){ assert('property' === instance.name); done(); }); directive('property'); });
it('should return a custom content', function(){ var custom = content('custom').init(); var result = directive('data-title', function(ctx, element){ return custom; }).exec(document.querySelector('#mocha'), content.root()); assert(custom === result); });
it('should return `true` if `defined`', function(){ assert(false === directive.defined('data-random')); directive('data-random', function(){}); assert(true === directive.defined('data-random')); });
it('should print "directive(name)" on instance.toString()', function(){ assert('directive("data-text")' === directive('data-text').toString()); });
/** * Module dependencies. */ var element = require('tower-element'); var directive = require('tower-directive'); /** * Expose `elementDirective`. */ module.exports = directive('data-element').compiler(elementDirective); /** * Define `elementDirective`. */ function elementDirective(el, attr) { var expression = attr.expression; // XXX: could probably use some way of caching. function exec(scope, cursor, attr) { var name = expression(scope); var obj = element(name).init({ parent: scope }); var el = obj.render(); cursor.parentNode.insertBefore(el, cursor.nextSibling); } return exec; }
var directive = require('tower-directive'); // https://github.com/isagalaev/highlight.js directive('data-content', function(scope, el, attr){ while (el.firstChild) el.removeChild(el.firstChild); var child = scope.get('body')(scope); el.appendChild(child); }); /** * Module dependencies. */ var domify = require('domify'); var jsdom = require('jsdom').jsdom; var template = require('tower-template'); var content = require('tower-content'); var fs = require('fs'); var path = require('path'); var minify = require('html-minifier').minify; var minifyOptions = { removeCommentsFromCDATA: true, collapseWhitespace: true, collapseBooleanAttributes: true, removeEmptyAttributes: true, useShortDoctype: false }; function min(val) { return minify(val, minifyOptions);