forked from brianjlandau/js-templates-benchmark
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.jqote.js
51 lines (44 loc) · 1.74 KB
/
jquery.jqote.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
/*
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
* Version 2, December 2004
*
* Copyright (C) 2004 Sam Hocevar
* 14 rue de Plaisance, 75014 Paris, France
* Everyone is permitted to copy and distribute verbatim or modified
* copies of this license document, and changing it is allowed as long
* as the name is changed.
*
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
*
* 0. You just DO WHAT THE FUCK YOU WANT TO.
*/
(function($) {
var n = 0, cache = {}, tag_chr = '%';
$.fn.jqote = function(data, tag) {
var dom = $([]), tag = tag || tag_chr, reg = new RegExp('<'+tag+'(.+?)'+tag+'>', 'g');
if ( !$.isArray(data) ) data = [data];
$(this).each(function(i) {
var f = ( fn = cache[$.data(this, 'jqote')] ) ?
fn : cache[$.data(this, 'jqote', n++)] = new Function('i, j',
"var t=[]; t.push('" +
$(this).html()
.replace(/\s*<!\[CDATA\[|\]\]>\s*/g, '')
.replace(/[\r\n\t]/g, '\\\n')
.replace(reg, function(m){return m.replace(/'/g, '\x1a');})
.split('<'+tag+'=').join("\x1a,")
.replace(reg, "\x1a); $1 t.push(\x1a")
.split(tag+'>').join(",\x1a")
.split("'").join("\\'")
.split("\x1a").join("'") +
"'); return $(t.join(''));"
);
for ( j=0; j < data.length; j++ )
dom.push(f.call(data[j], i, j));
});
return dom;
};
$.jqote_tag = function(c) {
tag_chr = c;
};
})(jQuery);