Add analytics
[bus.git] / busui / owa / modules / base / js / includes / jquery / jQote2 / jquery.jqote2.js
blob:a/busui/owa/modules/base/js/includes/jquery/jQote2/jquery.jqote2.js -> blob:b/busui/owa/modules/base/js/includes/jquery/jQote2/jquery.jqote2.js
  /*
  * 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*<!\[CDATA\[\s*|\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);