| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | var tokenize   = require("html-tokenize");var through2   = require("through2");var vinyl      = require("vinyl");var select     = require("html-select");/** * @param config * @param item * @param markup * @param done */function directiveStripper(config, item, markup, done) {    var replacer = getReplacer(item, config);    var chunks = [];    new vinyl({            contents: new Buffer(markup)        })        .pipe(tokenize())        .pipe(replacer)        .pipe(through2.obj(function (row, buf, next) {            chunks.push(row[1]);            next();        }, function () {            done(null, chunks.join(""));        }));    replacer.resume();}/** * @param name * @param item * @returns {*|exports} */function getReplacer (name, markup) {    return select(name, function (e) {        var tr = through2.obj(function (row, buf, next) {            if (row[0] === "open") {                this.push([row[0], directive(name, String(row[1]), markup)]);            } else {                this.push([ row[0], "" ]);            }            next();        });        tr.pipe(e.createStream()).pipe(tr);    });}/** * @param name * @param content * @param item * @returns {*|string} */function directive (name, content, item) {    var angularDir;    try {        angularDir = require("../src/scripts/directives/" + name)();    } catch (e) {        console.log("Directive not found, cannot re-use");        return content;    }    var scope = item;    scope = angularDir.link(scope, {}, {});    return angularDir.template.replace(/\{\{(.+?)\}\}/, function ($1, $2) {        if ($2 in scope) {            return scope[$2];        }        return $1;    });}module.exports.getReplacer       = getReplacer;module.exports.directive         = directive;module.exports.directiveStripper = directiveStripper;
 |