[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
1 /* 2 * jQote2 - client-side Javascript templating engine 3 * Copyright (C) 2010, aefxx 4 * http://aefxx.com/ 5 * 6 * Dual licensed under the WTFPL v2 or MIT (X11) licenses 7 * WTFPL v2 Copyright (C) 2004, Sam Hocevar 8 * 9 * Date: Thu, Oct 21st, 2010 10 * Version: 0.9.7 11 */ 12 (function($) { 13 var JQOTE2_TMPL_UNDEF_ERROR = 'UndefinedTemplateError', 14 JQOTE2_TMPL_COMP_ERROR = 'TemplateCompilationError', 15 JQOTE2_TMPL_EXEC_ERROR = 'TemplateExecutionError'; 16 17 var ARR = '[object Array]', 18 STR = '[object String]', 19 FUNC = '[object Function]'; 20 21 var n = 1, tag = '%', 22 qreg = /^[^<]*(<[\w\W]+>)[^>]*$/, 23 type_of = Object.prototype.toString; 24 25 function raise(error, ext) { 26 throw ($.extend(error, ext), error); 27 } 28 29 function dotted_ns(fn) { 30 var ns = []; 31 32 if ( type_of.call(fn) !== ARR ) return false; 33 34 for ( var i=0,l=fn.length; i < l; i++ ) 35 ns[i] = fn[i].jqote_id; 36 37 return ns.length ? 38 ns.sort().join('.').replace(/(\b\d+\b)\.(?:\1(\.|$))+/g, '$1$2') : false; 39 } 40 41 function lambda(tmpl, t) { 42 var f, fn = [], t = t || tag, 43 type = type_of.call(tmpl); 44 45 if ( type === FUNC ) 46 return tmpl.jqote_id ? [tmpl] : false; 47 48 if ( type !== ARR ) 49 return [$.jqotec(tmpl, t)]; 50 51 if ( type === ARR ) 52 for ( var i=0,l=tmpl.length; i < l; i++ ) 53 if ( f = lambda(tmpl[i], t) ) fn.push(f[0]); 54 55 return fn.length ? fn : false; 56 } 57 58 $.fn.extend({ 59 jqote: function(data, t) { 60 var data = type_of.call(data) === ARR ? data : [data], 61 dom = ''; 62 63 this.each(function(i) { 64 var fn = $.jqotec(this, t); 65 66 for ( var j=0; j < data.length; j++ ) 67 dom += fn.call(data[j], i, j, data, fn); 68 }); 69 70 return dom; 71 } 72 }); 73 74 $.each({app: 'append', pre: 'prepend', sub: 'html'}, function(name, method) { 75 $.fn['jqote'+name] = function(elem, data, t) { 76 var ns, regexp, str = $.jqote(elem, data, t), 77 $$ = !qreg.test(str) ? 78 function(str) {return $(document.createTextNode(str));} : $; 79 80 if ( !!(ns = dotted_ns(lambda(elem))) ) 81 regexp = new RegExp('(^|\\.)'+ns.split('.').join('\\.(.*)?')+'(\\.|$)'); 82 83 return this.each(function() { 84 var dom = $$(str); 85 86 $(this)[method](dom); 87 88 ( dom[0].nodeType === 3 ? 89 $(this) : dom ).trigger('jqote.'+name, [dom, regexp]); 90 }); 91 }; 92 }); 93 94 $.extend({ 95 jqote: function(elem, data, t) { 96 var str = '', t = t || tag, 97 fn = lambda(elem); 98 99 if ( fn === false ) 100 raise(new Error('Empty or undefined template passed to $.jqote'), {type: JQOTE2_TMPL_UNDEF_ERROR}); 101 102 data = type_of.call(data) !== ARR ? 103 [data] : data; 104 105 for ( var i=0,l=fn.length; i < l; i++ ) 106 for ( var j=0; j < data.length; j++ ) 107 str += fn[i].call(data[j], i, j, data, fn[i]); 108 109 return str; 110 }, 111 112 jqotec: function(template, t) { 113 var cache, elem, tmpl, t = t || tag, 114 type = type_of.call(template); 115 116 if ( type === STR && qreg.test(template) ) { 117 elem = tmpl = template; 118 119 if ( cache = $.jqotecache[template] ) return cache; 120 } else { 121 elem = type === STR || template.nodeType ? 122 $(template) : template instanceof jQuery ? 123 template : null; 124 125 if ( !elem[0] || !(tmpl = elem[0].innerHTML) && !(tmpl = elem.text()) ) 126 raise(new Error('Empty or undefined template passed to $.jqotec'), {type: JQOTE2_TMPL_UNDEF_ERROR}); 127 128 if ( cache = $.jqotecache[$.data(elem[0], 'jqote_id')] ) return cache; 129 } 130 131 var str = '', index, 132 arr = tmpl.replace(/\s*<!\[CDATA\[\s*|\s*\]\]>\s*|[\r\n\t]/g, '') 133 .split('<'+t).join(t+'>\x1b') 134 .split(t+'>'); 135 136 for ( var m=0,l=arr.length; m < l; m++ ) 137 str += arr[m].charAt(0) !== '\x1b' ? 138 "out+='" + arr[m].replace(/(\\|["'])/g, '\\$1') + "'" : (arr[m].charAt(1) === '=' ? 139 ';out+=(' + arr[m].substr(2) + ');' : (arr[m].charAt(1) === '!' ? 140 ';out+=$.jqotenc((' + arr[m].substr(2) + '));' : ';' + arr[m].substr(1))); 141 142 str = 'try{' + 143 ('var out="";'+str+';return out;') 144 .split("out+='';").join('') 145 .split('var out="";out+=').join('var out=') + 146 '}catch(e){e.type="'+JQOTE2_TMPL_EXEC_ERROR+'";e.args=arguments;e.template=arguments.callee.toString();throw e;}'; 147 148 try { 149 var fn = new Function('i, j, data, fn', str); 150 } catch ( e ) { raise(e, {type: JQOTE2_TMPL_COMP_ERROR}); } 151 152 index = elem instanceof jQuery ? 153 $.data(elem[0], 'jqote_id', n) : elem; 154 155 return $.jqotecache[index] = (fn.jqote_id = n++, fn); 156 }, 157 158 jqotefn: function(elem) { 159 var type = type_of.call(elem), 160 index = type === STR && qreg.test(elem) ? 161 elem : $.data($(elem)[0], 'jqote_id'); 162 163 return $.jqotecache[index] || false; 164 }, 165 166 jqotetag: function(str) { 167 if ( type_of.call(str) === STR ) tag = str; 168 }, 169 170 jqotenc: function(str) { 171 return str.toString() 172 .replace(/&(?!\w+;)/g, '&') 173 .split('<').join('<').split('>').join('>') 174 .split('"').join('"').split("'").join('''); 175 }, 176 177 jqotecache: {} 178 }); 179 180 $.event.special.jqote = { 181 add: function(obj) { 182 var ns, handler = obj.handler, 183 data = !obj.data ? 184 [] : type_of.call(obj.data) !== ARR ? 185 [obj.data] : obj.data; 186 187 if ( !obj.namespace ) obj.namespace = 'app.pre.sub'; 188 if ( !data.length || !(ns = dotted_ns(lambda(data))) ) return; 189 190 obj.handler = function(event, dom, regexp) { 191 return !regexp || regexp.test(ns) ? 192 handler.apply(this, [event, dom]) : null; 193 }; 194 } 195 }; 196 })(jQuery);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |