--- a/busui/owa/modules/base/js/includes/jquery/jQote2/jquery.jqote2.js +++ b/busui/owa/modules/base/js/includes/jquery/jQote2/jquery.jqote2.js @@ -1,1 +1,119 @@ +/* + * jQote2 - client-side Javascript templating engine + * Copyright (C) 2010, aefxx + * http://aefxx.com/ + * + * Licensed under the DWTFYWT PUBLIC LICENSE v2 + * Copyright (C) 2004, Sam Hocevar + * + * Date: Sun, May 5th, 2010 + * Version: 0.9.2 + */ +(function($) { + var ARR = '[object Array]', + FUNC = '[object Function]', + STR = '[object String]'; + var n = 0, + tag = '%', + type_of = Object.prototype.toString; + + $.fn.extend({ + jqote: function(data, t) { + var data = type_of.call(data) === ARR ? data : [data], + dom = ''; + + this.each(function(i) { + var f = ( fn = $.jqotecache[this.jqote] ) ? fn : $.jqotec(this, t || tag); + + for ( var j=0; j < data.length; j++ ) + dom += f.call(data[j], i, j, data, f); + }); + + return dom; + }, + + jqoteapp: function(elem, data, t) { + var dom = $.jqote(elem, data, t); + + return this.each(function() { + $(this).append(dom); + }); + }, + + jqotepre: function(elem, data, t) { + var dom = $.jqote(elem, data, t); + + return this.each(function() { + $(this).prepend(dom); + }); + }, + + jqotesub: function(elem, data, t) { + var dom = $.jqote(elem, data, t); + + return this.each(function() { + $(this).html(dom); + }); + } + }); + + $.extend({ + jqote: function(elem, data, t) { + var dom = '', fn = [], t = t || tag, type = type_of.call(elem), + data = type_of.call(data) === ARR ? data : [data]; + + if ( type === FUNC ) + fn = [elem]; + + else if ( type === ARR ) + fn = type_of.call(elem[0]) === FUNC ? + elem : $.map(elem, function(e) { return $.jqotec(e, t); }); + + else if ( type === STR ) + fn.push( elem.indexOf('<' + t) < 0 ? + $.jqotec($(elem), t) : $.jqotec(elem, t)); + + else fn = $.map($(elem), function(e) { return $.jqotec(e, t); }); + + for ( var i=0,l=fn.length; i < l; i++ ) + for ( var j=0; j < data.length; j++ ) + dom += fn[i].call(data[j], i, j, data, fn[i]); + + return dom; + }, + + jqotec: function(elem, t) { + var fn, str = '', t = t || tag, + type = type_of.call(elem), + tmpl = ( type === STR && elem.indexOf('<' + t) >= 0 ) ? + elem : ( elem = ( type === STR || elem instanceof jQuery ) ? + $(elem)[0] : elem ).innerHTML; + + var arr = tmpl.replace(/\s*\s*|[\r\n\t]/g, '') + .split('<'+t).join(t+'>\x1b') + .split(t+'>'); + + for ( var i=0,l=arr.length; i < l; i++ ) + str += arr[i].charAt(0) !== '\x1b' ? + "out+='" + arr[i].replace(/([^\\])?(["'])/g, '$1\\$2') + "'" : (arr[i].charAt(1) === '=' ? + '+' + arr[i].substr(2) + ';' : ';' + arr[i].substr(1)); + + fn = new Function('i, j, data, fn', 'var out="";' + str + '; return out;'); + + return type_of.call(elem) === STR ? + fn : $.jqotecache[elem.jqote = elem.jqote || n++] = fn; + }, + + jqotefn: function(elem) { + return $.jqotecache[$(elem)[0].jqote] || false; + }, + + jqotetag: function(str) { + tag = str; + }, + + jqotecache: [] + }); +})(jQuery); +