/
index.js
159 lines (150 loc) · 4.19 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// 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);