Skip to content

Commit 94e1e5b

Browse files
committed
refactor out base prototypes
remove prototypes from string and array merge in appendRow rstaib#285 improves Chrome 50%, FF 15%, Edge 10%
1 parent 10197d2 commit 94e1e5b

File tree

4 files changed

+204
-226
lines changed

4 files changed

+204
-226
lines changed

src/extensions.js

Lines changed: 145 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ $.fn.extend({
99

1010
_bgBusyAria: function(busy)
1111
{
12-
return (busy == null || busy) ?
13-
this._bgAria("busy", "true") :
12+
return (busy == null || busy) ?
13+
this._bgAria("busy", "true") :
1414
this._bgAria("busy", "false");
1515
},
1616

@@ -21,29 +21,29 @@ $.fn.extend({
2121

2222
_bgEnableAria: function (enable)
2323
{
24-
return (enable == null || enable) ?
25-
this.removeClass("disabled")._bgAria("disabled", "false") :
24+
return (enable == null || enable) ?
25+
this.removeClass("disabled")._bgAria("disabled", "false") :
2626
this.addClass("disabled")._bgAria("disabled", "true");
2727
},
2828

2929
_bgEnableField: function (enable)
3030
{
31-
return (enable == null || enable) ?
32-
this.removeAttr("disabled") :
31+
return (enable == null || enable) ?
32+
this.removeAttr("disabled") :
3333
this.attr("disabled", "disable");
3434
},
3535

3636
_bgShowAria: function (show)
3737
{
38-
return (show == null || show) ?
38+
return (show == null || show) ?
3939
this.show()._bgAria("hidden", "false") :
4040
this.hide()._bgAria("hidden", "true");
4141
},
4242

4343
_bgSelectAria: function (select)
4444
{
45-
return (select == null || select) ?
46-
this.addClass("active")._bgAria("selected", "true") :
45+
return (select == null || select) ?
46+
this.addClass("active")._bgAria("selected", "true") :
4747
this.removeClass("active")._bgAria("selected", "false");
4848
},
4949

@@ -53,200 +53,171 @@ $.fn.extend({
5353
}
5454
});
5555

56-
if (!String.prototype.resolve)
57-
{
58-
var formatter = {
59-
"checked": function(value)
56+
var formatter = {
57+
"checked": function(value)
58+
{
59+
if (typeof value === "boolean")
6060
{
61-
if (typeof value === "boolean")
61+
return (value) ? "checked=\"checked\"" : "";
62+
}
63+
return value;
64+
}
65+
};
66+
67+
var _templateCache = {};
68+
var getTemplate = function(template){
69+
if (!_templateCache.hasOwnProperty(template)){
70+
var str = template.split(/{([^{}]+)}/g);
71+
72+
for (var i = 0; i < str.length; i++){
73+
var s = str[i];
74+
var hasStart = (s.charAt(0) === "}");
75+
var hasEnd = (s.charAt(s.length - 1) === "{");
76+
if (hasStart)
6277
{
63-
return (value) ? "checked=\"checked\"" : "";
78+
s = s.substr(1);
79+
}
80+
if (hasEnd)
81+
{
82+
s = s.substr(0, s.length - 1);
6483
}
65-
return value;
66-
}
67-
};
68-
69-
var _templateCache = {};
70-
var getTemplate = function(template){
71-
if (!_templateCache.hasOwnProperty(template)){
72-
var str = template.split(/{([^{}]+)}/g);
73-
74-
for (var i = 0; i < str.length; i++){
75-
var s = str[i];
76-
var hasStart = (s.charAt(0) === "}");
77-
var hasEnd = (s.charAt(s.length - 1) === "{");
78-
if (hasStart)
79-
{
80-
s = s.substr(1);
81-
}
82-
if (hasEnd)
83-
{
84-
s = s.substr(0, s.length - 1);
85-
}
8684

87-
if (hasStart || hasEnd)
88-
{
89-
str[i] = s; //plain old html
90-
} else {
91-
str[i] = {
92-
token: str[i],
93-
key: s.split(".")
94-
};
95-
}
85+
if (hasStart || hasEnd)
86+
{
87+
str[i] = s; //plain old html
88+
} else {
89+
str[i] = {
90+
token: str[i],
91+
key: s.split(".")
92+
};
9693
}
97-
_templateCache[template] = str;
9894
}
99-
return _templateCache[template];
100-
};
101-
102-
// ONLY FOR TESTING
103-
String.prototype.resolve_old = function (substitutes, prefixes)
104-
{
105-
var result = this;
95+
_templateCache[template] = str;
96+
}
97+
return _templateCache[template];
98+
};
99+
/*
100+
// ONLY FOR TESTING
101+
var String.prototype.resolve_old = function (substitutes, prefixes)
102+
{
103+
var result = this;
106104
107-
$.each(substitutes, function (key, value)
105+
$.each(substitutes, function (key, value)
106+
{
107+
if (value != null && typeof value !== "function")
108108
{
109-
if (value != null && typeof value !== "function")
109+
if (typeof value === "object")
110110
{
111-
if (typeof value === "object")
112-
{
113-
var keys = (prefixes) ? $.extend([], prefixes) : [];
114-
keys.push(key);
115-
result = result.resolve_old(value, keys) + "";
116-
}
117-
else
118-
{
119-
if (formatter && formatter[key] && typeof formatter[key] === "function")
120-
{
121-
value = formatter[key](value);
122-
}
123-
key = (prefixes) ? prefixes.join(".") + "." + key : key;
124-
var pattern = new RegExp("\\{\\{" + key + "\\}\\}", "gm");
125-
result = result.replace(pattern, (value.replace) ? value.replace(/\$/gi, "&#36;") : value);
126-
}
111+
var keys = (prefixes) ? $.extend([], prefixes) : [];
112+
keys.push(key);
113+
result = result.resolve_old(value, keys) + "";
127114
}
128-
});
129-
130-
return result;
131-
};
132-
133-
String.prototype.resolve = function (substitutes, prefixes)
134-
{
135-
var str = getTemplate(this);
136-
var result = "";
137-
for (var i = 0; i < str.length; i++){
138-
if (typeof str[i] === "object"){
139-
var key = str[i].key;
140-
var v = "";
141-
// now we have a variable to be substitued
142-
if (substitutes.hasOwnProperty(key[0]))
143-
{
144-
v = substitutes[key[0]];
145-
}
146-
else
115+
else
116+
{
117+
if (formatter && formatter[key] && typeof formatter[key] === "function")
147118
{
148-
continue;
119+
value = formatter[key](value);
149120
}
150-
151-
for (var k = 1; k < key.length; k++){
152-
if (v.hasOwnProperty(key[k])){
153-
v = v[key[k]];
154-
} else {
155-
v = "";
156-
break;
157-
}
158-
}
159-
var formatter_key = key[key.length-1];
160-
if (formatter && formatter[formatter_key] && typeof formatter[formatter_key] === "function"){
161-
result += formatter[formatter_key](v);
162-
} else {
163-
result += v;
164-
}
165-
} else {
166-
result += str[i]; // plain old html
121+
key = (prefixes) ? prefixes.join(".") + "." + key : key;
122+
var pattern = new RegExp("\\{\\{" + key + "\\}\\}", "gm");
123+
result = result.replace(pattern, (value.replace) ? value.replace(/\$/gi, "&#36;") : value);
167124
}
168125
}
169-
// ONLY FOR TESTING, remove for release or testing performance of individal approaches
170-
var result_old = this.resolve_old(substitutes, prefixes);
171-
if (result !== result_old){
172-
console.warn("Different templating result");
173-
console.log("new: ", result);
174-
console.log("old: ", result_old);
175-
}
176-
return result;
177-
};
178-
}
126+
});
179127
180-
if (!Array.prototype.first)
128+
return result;
129+
};
130+
*/
131+
var template = function (template, substitutes, prefixes)
181132
{
182-
Array.prototype.first = function (condition)
183-
{
184-
for (var i = 0; i < this.length; i++)
185-
{
186-
var item = this[i];
187-
if (condition(item))
133+
var str = getTemplate(template);
134+
var result = "";
135+
for (var i = 0; i < str.length; i++){
136+
if (typeof str[i] === "object"){
137+
var key = str[i].key;
138+
var v = "";
139+
// now we have a variable to be substitued
140+
if (substitutes.hasOwnProperty(key[0]))
188141
{
189-
return item;
142+
v = substitutes[key[0]];
143+
}
144+
else
145+
{
146+
continue;
190147
}
191-
}
192-
return null;
193-
};
194-
}
195148

196-
if (!Array.prototype.contains)
149+
for (var k = 1; k < key.length; k++){
150+
if (v.hasOwnProperty(key[k])){
151+
v = v[key[k]];
152+
} else {
153+
v = "";
154+
break;
155+
}
156+
}
157+
var formatter_key = key[key.length-1];
158+
if (formatter && formatter[formatter_key] && typeof formatter[formatter_key] === "function"){
159+
result += formatter[formatter_key](v);
160+
} else {
161+
result += v;
162+
}
163+
} else {
164+
result += str[i]; // plain old html
165+
}
166+
}
167+
// ONLY FOR TESTING
168+
/*
169+
var result_old = this.resolve_old(substitutes, prefixes);
170+
if (result !== result_old){
171+
console.warn("Difference templating result");
172+
console.log(result);
173+
console.log(result_old);
174+
}
175+
*/
176+
return result;
177+
};
178+
var arrayContains = function (arr, condition)
197179
{
198-
Array.prototype.contains = function (condition)
180+
for (var i = 0; i < arr.length; i++)
199181
{
200-
for (var i = 0; i < this.length; i++)
182+
var item = arr[i];
183+
if (condition(item))
201184
{
202-
var item = this[i];
203-
if (condition(item))
204-
{
205-
return true;
206-
}
185+
return true;
207186
}
208-
return false;
209-
};
210-
}
187+
}
188+
return false;
189+
};
211190

212-
if (!Array.prototype.page)
191+
var arrayPage = function (arr, page, size)
213192
{
214-
Array.prototype.page = function (page, size)
215-
{
216-
var skip = (page - 1) * size,
217-
end = skip + size;
218-
return (this.length > skip) ?
219-
(this.length > end) ? this.slice(skip, end) :
220-
this.slice(skip) : [];
221-
};
222-
}
223-
224-
if (!Array.prototype.where)
193+
var skip = (page - 1) * size,
194+
end = skip + size;
195+
return (arr.length > skip) ?
196+
(arr.length > end) ? arr.slice(skip, end) :
197+
arr.slice(skip) : [];
198+
};
199+
200+
var arrayWhere = function (arr, condition)
225201
{
226-
Array.prototype.where = function (condition)
202+
var result = [];
203+
for (var i = 0; i < arr.length; i++)
227204
{
228-
var result = [];
229-
for (var i = 0; i < this.length; i++)
205+
var item = arr[i];
206+
if (condition(item))
230207
{
231-
var item = this[i];
232-
if (condition(item))
233-
{
234-
result.push(item);
235-
}
208+
result.push(item);
236209
}
237-
return result;
238-
};
239-
}
210+
}
211+
return result;
212+
};
240213

241-
if (!Array.prototype.propValues)
214+
var arrayPropValues = function (arr, propName)
242215
{
243-
Array.prototype.propValues = function (propName)
216+
var result = [];
217+
for (var i = 0; i < arr.length; i++)
244218
{
245-
var result = [];
246-
for (var i = 0; i < this.length; i++)
247-
{
248-
result.push(this[i][propName]);
249-
}
250-
return result;
251-
};
252-
}
219+
result.push(arr[i][propName]);
220+
}
221+
return result;
222+
};
223+

0 commit comments

Comments
 (0)