UNPKG

janus

Version:

the two-faced application library-framework

154 lines (140 loc) 4.16 kB
// Generated by CoffeeScript 1.12.2 (function() { var build, concat, defaultMutators, find, rechain, selectorToWalks, template, templateSentinel, walk, wrap, slice = [].slice; defaultMutators = require('./mutators'); wrap = function(dom) { return dom.wrapAll('<div/>').parent(); }; selectorToWalks = function(dom, selector) { var rawDom; rawDom = dom.get(0); return dom.find(selector).map(function(_, target) { var i, idx, parent, ref, walk; walk = []; while (target !== rawDom) { parent = target.parentNode; for (idx = i = 0, ref = parent.childNodes.length; 0 <= ref ? i <= ref : i >= ref; idx = 0 <= ref ? ++i : --i) { if (!(parent.childNodes[idx] === target)) { continue; } walk.unshift(idx); break; } target = parent; } return [walk]; }); }; walk = function(dom, walks) { var rawDom; rawDom = dom.get(); return walks.map(function(_, walk) { var childIdx, i, idx, len, ptr; for (idx = i = 0, len = walk.length; i < len; idx = ++i) { childIdx = walk[idx]; ptr = (idx === 0 ? rawDom[childIdx] : ptr.childNodes[childIdx]); } return ptr; }); }; rechain = function(chains, mutators, selector) { var fn, head, i, k, result, tail, v; result = function(fragment) { var walks; walks = selectorToWalks(wrap(fragment), selector); return function(dom, point, immediate) { var chain, i, len, results, target; target = walk(dom, walks); results = []; for (i = 0, len = chains.length; i < len; i++) { chain = chains[i]; results.push(chain(target, point, immediate)); } return results; }; }; head = 2 <= chains.length ? slice.call(chains, 0, i = chains.length - 1) : (i = 0, []), tail = chains[i++]; if (tail != null) { fn = function(v) { return result[k] = function() { var args; args = 1 <= arguments.length ? slice.call(arguments, 0) : []; return rechain(head.concat([v.apply(null, args)]), mutators, selector); }; }; for (k in tail) { v = tail[k]; fn(v); } } for (k in mutators) { v = mutators[k]; if (result[k] == null) { (function(v) { return result[k] = function() { var args; args = 1 <= arguments.length ? slice.call(arguments, 0) : []; return rechain(chains.concat([v.apply(null, args)]), mutators, selector); }; })(v); } } return result; }; build = function(mutators) { return function(selector) { return rechain([], mutators, selector); }; }; find = build(defaultMutators); find.build = build; concat = Array.prototype.concat; templateSentinel = Symbol('template'); template = function() { var i, k, len, result, v, x, xs; xs = 1 <= arguments.length ? slice.call(arguments, 0) : []; result = function(fragment) { var prebound, x; prebound = (function() { var i, len, results; results = []; for (i = 0, len = xs.length; i < len; i++) { x = xs[i]; results.push(x(fragment)); } return results; })(); return function(dom, point, immediate) { var f; return concat.apply([], (function() { var i, len, results; results = []; for (i = 0, len = prebound.length; i < len; i++) { f = prebound[i]; results.push(f(dom, point, immediate)); } return results; })()); }; }; result[templateSentinel] = true; if (typeof xs[0] === 'string') { result[xs.shift()] = result; } for (i = 0, len = xs.length; i < len; i++) { x = xs[i]; if ((x != null ? x[templateSentinel] : void 0) === true) { for (k in x) { v = x[k]; result[k] = v; } } } return result; }; module.exports = { find: find, template: template }; }).call(this);