// Generated by CoffeeScript 1.6.2 (function() { var addToEnv, bling, parseTag, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __slice = [].slice; if (typeof _ === "undefined" || _ === null) { _ = require("underscore"); } parseTag = function(str, defaultTag) { var bindTo, i, id, k, klass, rest, tag, _i, _len, _ref, _ref1, _ref2; bindTo = { id: false, "class": [], tag: false }; if (__indexOf.call(str, "#") >= 0) { _ref = str.split("#"), tag = _ref[0], rest = _ref[1]; if (!tag.length) { tag = defaultTag; } _ref1 = rest.split("."), id = _ref1[0], klass = 2 <= _ref1.length ? __slice.call(_ref1, 1) : []; } else if (__indexOf.call(str, ".") >= 0) { id = false; _ref2 = str.split("."), tag = _ref2[0], klass = 2 <= _ref2.length ? __slice.call(_ref2, 1) : []; if (!tag.length) { tag = defaultTag; } } else { tag = str; id = false; klass = false; } if (id[0] === "@") { bindTo.id = true; id = id.slice(1); } if (tag[0] === "@") { bindTo.tag = true; tag = tag.slice(1); } for (i = _i = 0, _len = klass.length; _i < _len; i = ++_i) { k = klass[i]; if (k[0] === "@") { klass[i] = k.slice(1); bindTo["class"].push(klass[i]); } } return { tagName: tag, "class": klass, id: id, bindTo: bindTo }; }; addToEnv = function(env, key, val) { if (env[key] == null) { env[key] = $(); } return env[key] = env[key].add(val); }; bling = function(str, options, onCreate) { var $tag, appendTo, depth, elAttrs, env, i, k, klass, part, parts, rootTag, tag, tags, v, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2; if (options == null) { options = {}; } if (_.isFunction(options)) { options = { onCreate: options }; } if (_.isFunction(onCreate)) { options.onCreate = onCreate; } options.onCreate || (options.onCreate = function() {}); options.appendTo || (options.appendTo = false); options.defaultTag || (options.defaultTag = "div"); options.self || (options.self = {}); elAttrs = {}; for (k in options) { v = options[k]; if (k !== "appendTo" && k !== "onCreate" && k !== "defaultTag" && k !== "self") { elAttrs[k] = v; } } env = {}; tags = []; appendTo = options.appendTo; rootTag = false; depth = 0; if (_.isString(appendTo)) { appendTo = $(appendTo); } parts = str.replace(/\,/g, ' , ').replace(/\s+/g, ' ').split(' '); for (i = _i = 0, _len = parts.length; _i < _len; i = ++_i) { part = parts[i]; if (!(part !== ",")) { continue; } tag = parseTag(part.trim(), options.defaultTag); tags.push($tag = $("<" + tag.tagName + "/>", elAttrs)); if (appendTo) { $tag.appendTo(appendTo); } else if (depth === 0) { if (!rootTag) { rootTag = $tag; } else { rootTag = rootTag.add($tag); } } addToEnv(env, tag.tagName, $tag); if (tag["class"]) { $tag.addClass(tag["class"].join(" ")); _ref = tag["class"]; for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { klass = _ref[_j]; addToEnv(env, klass, $tag); } } if (tag.id) { $tag.attr({ id: tag.id }); addToEnv(env, tag.id, $tag); } if (tag.bindTo.id) { options.self["$" + tag.id] = $tag; } _ref1 = tag.bindTo["class"]; for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { k = _ref1[_k]; options.self["$" + k] = $tag; } if (tag.bindTo.tag) { options.self["$" + tag.tagName] = $tag; } if ((parts[i + 1] != null) && parts[i + 1] === ",") { continue; } appendTo = $tag; depth++; } env._ = options.self; if ((_ref2 = options.onCreate) != null) { _ref2.apply(env, tags); } return rootTag; }; bling.version = "0.0.6"; module.exports = bling; }).call(this);