You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.8 KiB
86 lines
1.8 KiB
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; |