UNPKG

ractiveify

Version:

A ractive component/template browserify transform which allows for embedded transpilable languages for javascript or css (like livescript, coffeescript, and scss!).

139 lines (138 loc) 4.38 kB
// Generated by LiveScript 1.3.1 (function(){ var through, tosource, Ractive, livescript, coffeescript, parseAndCompile, ractiveify, x$; through = require('through'); tosource = require('tosource'); Ractive = require('ractive'); livescript = require(__dirname + '/compilers/livescript.js'); coffeescript = require(__dirname + '/compilers/coffeescript.js'); parseAndCompile = function(file, data, cb){ var parsed, links, scripts, styles, template, i, item, style, source, script, imports, res$, i$, len$, ref$, name, href, css, compiled, error; try { parsed = Ractive.parse(data, { noStringify: true, interpolate: { script: false, style: false } }); links = []; scripts = []; styles = []; template = parsed.t; i = template.length; while (i--) { item = template[i]; if (!(item && item.t === 7)) { continue; } switch (item.e) { case 'link': if (item.a && item.a.rel === 'ractive') { links.push(template.splice(i, 1)[0]); } break; case 'style': if (!item.a || !item.a.type) { styles.push(template.splice(i, 1)[0]); } else if (item.a.type === 'text/css') { styles.push(template.splice(i, 1)[0]); } else if (item.a.type in ractiveify.compilers) { style = template.splice(i, 1)[0]; source = style.f[0]; style.f[0] = ractiveify.compilers[item.a.type](file, source); styles.push(style); } else if (ractiveify.removeUnsupported) { template.splice(i, 1)[0]; } break; case 'script': if (!item.a || !item.a.type) { scripts.push(template.splice(i, 1)[0]); } else if (item.a.type === 'text/javascript') { scripts.push(template.splice(i, 1)[0]); } else if (item.a.type in ractiveify.compilers) { script = template.splice(i, 1)[0]; source = script.f[0]; script.f[0] = ractiveify.compilers[item.a.type](file, source); scripts.push(script); } else if (ractiveify.removeUnsupported) { template.splice(i, 1)[0]; } } } res$ = []; for (i$ = 0, len$ = links.length; i$ < len$; ++i$) { ref$ = links[i$].a, name = ref$.name, href = ref$.href; res$.push({ name: name, href: href }); } imports = res$; script = (function(){ var i$, x$, ref$, len$, results$ = []; for (i$ = 0, len$ = (ref$ = scripts).length; i$ < len$; ++i$) { x$ = ref$[i$]; results$.push(x$.f); } return results$; }()).join(';'); css = (function(){ var i$, x$, ref$, len$, results$ = []; for (i$ = 0, len$ = (ref$ = styles).length; i$ < len$; ++i$) { x$ = ref$[i$]; results$.push(x$.f); } return results$; }()).join(' '); compiled = "var component = module;\n\n"; compiled += script; if (parsed) { compiled += "\n\ncomponent.exports.template = " + tosource(parsed); } if (css) { compiled += "\n\ncomponent.exports.css = " + tosource(css); } return cb(null, compiled); } catch (e$) { error = e$; return cb(error); } }; ractiveify = function(file){ var data, pattern, regex, stream; data = ""; pattern = "\\.(" + ractiveify.extensions.join("|") + ")$"; regex = new RegExp(pattern); if (!regex.test(file)) { return through(); } stream = through(write, end); return stream; function write(buf){ data += buf; } function end(){ parseAndCompile(file, data, function(error, result){ if (error) { stream.emit("error", error); } stream.queue(result); stream.queue(null); }); } }; x$ = ractiveify; x$.parse = parseAndCompile; x$.extensions = ['ract', 'rtv']; x$.removeUnsupported = true; x$.compilers = { "text/livescript": livescript, "text/ls": livescript, "text/coffeescript": coffeescript, "text/coffee": coffeescript, "text/coffee-script": coffeescript }; module.exports = ractiveify; }).call(this);