[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/jquery/ -> jquery.jqote2.min.js (source)

   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, '&#38;')
 173                          .split('<').join('&#60;').split('>').join('&#62;')
 174                              .split('"').join('&#34;').split("'").join('&#39;');
 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);


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1