annotate gis_gui/lib/jquery.tmpl.js @ 222:b636b0417aab

implement Google Search
author fknauft
date Fri, 01 Apr 2011 10:53:06 +0200
parents 7f008e782563
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
63
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
1 /*!
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
2 * jQuery Templates Plugin
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
3 * http://github.com/jquery/jquery-tmpl
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
4 *
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
5 * Copyright Software Freedom Conservancy, Inc.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
6 * Dual licensed under the MIT or GPL Version 2 licenses.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
7 * http://jquery.org/license
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
8 */
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
9 (function( jQuery, undefined ){
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
10 var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
11 newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
12
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
13 function newTmplItem( options, parentItem, fn, data ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
14 // Returns a template item data structure for a new rendered instance of a template (a 'template item').
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
15 // The content field is a hierarchical array of strings and nested items (to be
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
16 // removed and replaced by nodes field of dom elements, once inserted in DOM).
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
17 var newItem = {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
18 data: data || (parentItem ? parentItem.data : {}),
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
19 _wrap: parentItem ? parentItem._wrap : null,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
20 tmpl: null,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
21 parent: parentItem || null,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
22 nodes: [],
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
23 calls: tiCalls,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
24 nest: tiNest,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
25 wrap: tiWrap,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
26 html: tiHtml,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
27 update: tiUpdate
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
28 };
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
29 if ( options ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
30 jQuery.extend( newItem, options, { nodes: [], parent: parentItem } );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
31 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
32 if ( fn ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
33 // Build the hierarchical content to be used during insertion into DOM
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
34 newItem.tmpl = fn;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
35 newItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
36 newItem.key = ++itemKey;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
37 // Keep track of new template item, until it is stored as jQuery Data on DOM element
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
38 (stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
39 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
40 return newItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
41 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
42
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
43 // Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
44 jQuery.each({
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
45 appendTo: "append",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
46 prependTo: "prepend",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
47 insertBefore: "before",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
48 insertAfter: "after",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
49 replaceAll: "replaceWith"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
50 }, function( name, original ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
51 jQuery.fn[ name ] = function( selector ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
52 var ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
53 parent = this.length === 1 && this[0].parentNode;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
54
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
55 appendToTmplItems = newTmplItems || {};
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
56 if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
57 insert[ original ]( this[0] );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
58 ret = this;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
59 } else {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
60 for ( i = 0, l = insert.length; i < l; i++ ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
61 cloneIndex = i;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
62 elems = (i > 0 ? this.clone(true) : this).get();
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
63 jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
64 ret = ret.concat( elems );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
65 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
66 cloneIndex = 0;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
67 ret = this.pushStack( ret, name, insert.selector );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
68 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
69 tmplItems = appendToTmplItems;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
70 appendToTmplItems = null;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
71 jQuery.tmpl.complete( tmplItems );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
72 return ret;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
73 };
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
74 });
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
75
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
76 jQuery.fn.extend({
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
77 // Use first wrapped element as template markup.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
78 // Return wrapped set of template items, obtained by rendering template against data.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
79 tmpl: function( data, options, parentItem ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
80 return jQuery.tmpl( this[0], data, options, parentItem );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
81 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
82
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
83 // Find which rendered template item the first wrapped DOM element belongs to
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
84 tmplItem: function() {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
85 return jQuery.tmplItem( this[0] );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
86 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
87
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
88 // Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
89 template: function( name ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
90 return jQuery.template( name, this[0] );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
91 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
92
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
93 domManip: function( args, table, callback, options ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
94 // This appears to be a bug in the appendTo, etc. implementation
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
95 // it should be doing .call() instead of .apply(). See #6227
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
96 if ( args[0] && args[0].nodeType ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
97 var dmArgs = jQuery.makeArray( arguments ), argsLength = args.length, i = 0, tmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
98 while ( i < argsLength && !(tmplItem = jQuery.data( args[i++], "tmplItem" ))) {}
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
99 if ( argsLength > 1 ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
100 dmArgs[0] = [jQuery.makeArray( args )];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
101 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
102 if ( tmplItem && cloneIndex ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
103 dmArgs[2] = function( fragClone ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
104 // Handler called by oldManip when rendered template has been inserted into DOM.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
105 jQuery.tmpl.afterManip( this, fragClone, callback );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
106 };
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
107 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
108 oldManip.apply( this, dmArgs );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
109 } else {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
110 oldManip.apply( this, arguments );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
111 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
112 cloneIndex = 0;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
113 if ( !appendToTmplItems ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
114 jQuery.tmpl.complete( newTmplItems );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
115 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
116 return this;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
117 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
118 });
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
119
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
120 jQuery.extend({
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
121 // Return wrapped set of template items, obtained by rendering template against data.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
122 tmpl: function( tmpl, data, options, parentItem ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
123 var ret, topLevel = !parentItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
124 if ( topLevel ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
125 // This is a top-level tmpl call (not from a nested template using {{tmpl}})
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
126 parentItem = topTmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
127 tmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
128 wrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
129 } else if ( !tmpl ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
130 // The template item is already associated with DOM - this is a refresh.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
131 // Re-evaluate rendered template for the parentItem
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
132 tmpl = parentItem.tmpl;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
133 newTmplItems[parentItem.key] = parentItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
134 parentItem.nodes = [];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
135 if ( parentItem.wrapped ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
136 updateWrapped( parentItem, parentItem.wrapped );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
137 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
138 // Rebuild, without creating a new template item
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
139 return jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
140 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
141 if ( !tmpl ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
142 return []; // Could throw...
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
143 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
144 if ( typeof data === "function" ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
145 data = data.call( parentItem || {} );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
146 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
147 if ( options && options.wrapped ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
148 updateWrapped( options, options.wrapped );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
149 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
150 ret = jQuery.isArray( data ) ?
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
151 jQuery.map( data, function( dataItem ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
152 return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
153 }) :
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
154 [ newTmplItem( options, parentItem, tmpl, data ) ];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
155 return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
156 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
157
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
158 // Return rendered template item for an element.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
159 tmplItem: function( elem ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
160 var tmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
161 if ( elem instanceof jQuery ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
162 elem = elem[0];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
163 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
164 while ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, "tmplItem" )) && (elem = elem.parentNode) ) {}
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
165 return tmplItem || topTmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
166 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
167
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
168 // Set:
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
169 // Use $.template( name, tmpl ) to cache a named template,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
170 // where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
171 // Use $( "selector" ).template( name ) to provide access by name to a script block template declaration.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
172
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
173 // Get:
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
174 // Use $.template( name ) to access a cached template.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
175 // Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
176 // will return the compiled template, without adding a name reference.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
177 // If templateString includes at least one HTML tag, $.template( templateString ) is equivalent
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
178 // to $.template( null, templateString )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
179 template: function( name, tmpl ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
180 if (tmpl) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
181 // Compile template and associate with name
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
182 if ( typeof tmpl === "string" ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
183 // This is an HTML string being passed directly in.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
184 tmpl = buildTmplFn( tmpl )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
185 } else if ( tmpl instanceof jQuery ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
186 tmpl = tmpl[0] || {};
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
187 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
188 if ( tmpl.nodeType ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
189 // If this is a template block, use cached copy, or generate tmpl function and cache.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
190 tmpl = jQuery.data( tmpl, "tmpl" ) || jQuery.data( tmpl, "tmpl", buildTmplFn( tmpl.innerHTML ));
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
191 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
192 return typeof name === "string" ? (jQuery.template[name] = tmpl) : tmpl;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
193 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
194 // Return named compiled template
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
195 return name ? (typeof name !== "string" ? jQuery.template( null, name ):
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
196 (jQuery.template[name] ||
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
197 // If not in map, treat as a selector. (If integrated with core, use quickExpr.exec)
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
198 jQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
199 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
200
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
201 encode: function( text ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
202 // Do HTML encoding replacing < > & and ' and " by corresponding entities.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
203 return ("" + text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
204 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
205 });
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
206
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
207 jQuery.extend( jQuery.tmpl, {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
208 tag: {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
209 "tmpl": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
210 _default: { $2: "null" },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
211 open: "if($notnull_1){_=_.concat($item.nest($1,$2));}"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
212 // tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
213 // This means that {{tmpl foo}} treats foo as a template (which IS a function).
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
214 // Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
215 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
216 "wrap": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
217 _default: { $2: "null" },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
218 open: "$item.calls(_,$1,$2);_=[];",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
219 close: "call=$item.calls();_=call._.concat($item.wrap(call,_));"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
220 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
221 "each": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
222 _default: { $2: "$index, $value" },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
223 open: "if($notnull_1){$.each($1a,function($2){with(this){",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
224 close: "}});}"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
225 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
226 "if": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
227 open: "if(($notnull_1) && $1a){",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
228 close: "}"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
229 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
230 "else": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
231 _default: { $1: "true" },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
232 open: "}else if(($notnull_1) && $1a){"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
233 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
234 "html": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
235 // Unecoded expression evaluation.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
236 open: "if($notnull_1){_.push($1a);}"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
237 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
238 "=": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
239 // Encoded expression evaluation. Abbreviated form is ${}.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
240 _default: { $1: "$data" },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
241 open: "if($notnull_1){_.push($.encode($1a));}"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
242 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
243 "!": {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
244 // Comment tag. Skipped by parser
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
245 open: ""
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
246 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
247 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
248
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
249 // This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
250 complete: function( items ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
251 newTmplItems = {};
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
252 },
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
253
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
254 // Call this from code which overrides domManip, or equivalent
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
255 // Manage cloning/storing template items etc.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
256 afterManip: function afterManip( elem, fragClone, callback ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
257 // Provides cloned fragment ready for fixup prior to and after insertion into DOM
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
258 var content = fragClone.nodeType === 11 ?
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
259 jQuery.makeArray(fragClone.childNodes) :
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
260 fragClone.nodeType === 1 ? [fragClone] : [];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
261
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
262 // Return fragment to original caller (e.g. append) for DOM insertion
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
263 callback.call( elem, fragClone );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
264
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
265 // Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
266 storeTmplItems( content );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
267 cloneIndex++;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
268 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
269 });
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
270
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
271 //========================== Private helper functions, used by code above ==========================
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
272
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
273 function build( tmplItem, nested, content ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
274 // Convert hierarchical content into flat string array
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
275 // and finally return array of fragments ready for DOM insertion
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
276 var frag, ret = content ? jQuery.map( content, function( item ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
277 return (typeof item === "string") ?
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
278 // Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
279 (tmplItem.key ? item.replace( /(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g, "$1 " + tmplItmAtt + "=\"" + tmplItem.key + "\" $2" ) : item) :
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
280 // This is a child template item. Build nested template.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
281 build( item, tmplItem, item._ctnt );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
282 }) :
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
283 // If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
284 tmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
285 if ( nested ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
286 return ret;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
287 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
288
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
289 // top-level template
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
290 ret = ret.join("");
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
291
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
292 // Support templates which have initial or final text nodes, or consist only of text
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
293 // Also support HTML entities within the HTML markup.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
294 ret.replace( /^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/, function( all, before, middle, after) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
295 frag = jQuery( middle ).get();
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
296
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
297 storeTmplItems( frag );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
298 if ( before ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
299 frag = unencode( before ).concat(frag);
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
300 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
301 if ( after ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
302 frag = frag.concat(unencode( after ));
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
303 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
304 });
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
305 return frag ? frag : unencode( ret );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
306 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
307
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
308 function unencode( text ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
309 // Use createElement, since createTextNode will not render HTML entities correctly
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
310 var el = document.createElement( "div" );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
311 el.innerHTML = text;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
312 return jQuery.makeArray(el.childNodes);
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
313 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
314
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
315 // Generate a reusable function that will serve to render a template against data
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
316 function buildTmplFn( markup ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
317 return new Function("jQuery","$item",
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
318 "var $=jQuery,call,_=[],$data=$item.data;" +
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
319
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
320 // Introduce the data as local variables using with(){}
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
321 "with($data){_.push('" +
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
322
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
323 // Convert the template into pure JavaScript
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
324 jQuery.trim(markup)
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
325 .replace( /([\\'])/g, "\\$1" )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
326 .replace( /[\r\t\n]/g, " " )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
327 .replace( /\$\{([^\}]*)\}/g, "{{= $1}}" )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
328 .replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
329 function( all, slash, type, fnargs, target, parens, args ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
330 var tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
331 if ( !tag ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
332 throw "Template command not found: " + type;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
333 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
334 def = tag._default || [];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
335 if ( parens && !/\w$/.test(target)) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
336 target += parens;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
337 parens = "";
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
338 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
339 if ( target ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
340 target = unescape( target );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
341 args = args ? ("," + unescape( args ) + ")") : (parens ? ")" : "");
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
342 // Support for target being things like a.toLowerCase();
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
343 // In that case don't call with template item as 'this' pointer. Just evaluate...
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
344 expr = parens ? (target.indexOf(".") > -1 ? target + parens : ("(" + target + ").call($item" + args)) : target;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
345 exprAutoFnDetect = parens ? expr : "(typeof(" + target + ")==='function'?(" + target + ").call($item):(" + target + "))";
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
346 } else {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
347 exprAutoFnDetect = expr = def.$1 || "null";
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
348 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
349 fnargs = unescape( fnargs );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
350 return "');" +
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
351 tag[ slash ? "close" : "open" ]
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
352 .split( "$notnull_1" ).join( target ? "typeof(" + target + ")!=='undefined' && (" + target + ")!=null" : "true" )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
353 .split( "$1a" ).join( exprAutoFnDetect )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
354 .split( "$1" ).join( expr )
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
355 .split( "$2" ).join( fnargs ?
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
356 fnargs.replace( /\s*([^\(]+)\s*(\((.*?)\))?/g, function( all, name, parens, params ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
357 params = params ? ("," + params + ")") : (parens ? ")" : "");
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
358 return params ? ("(" + name + ").call($item" + params) : all;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
359 })
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
360 : (def.$2||"")
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
361 ) +
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
362 "_.push('";
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
363 }) +
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
364 "');}return _;"
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
365 );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
366 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
367 function updateWrapped( options, wrapped ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
368 // Build the wrapped content.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
369 options._wrap = build( options, true,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
370 // Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
371 jQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
372 ).join("");
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
373 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
374
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
375 function unescape( args ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
376 return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
377 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
378 function outerHtml( elem ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
379 var div = document.createElement("div");
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
380 div.appendChild( elem.cloneNode(true) );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
381 return div.innerHTML;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
382 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
383
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
384 // Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
385 function storeTmplItems( content ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
386 var keySuffix = "_" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
387 for ( i = 0, l = content.length; i < l; i++ ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
388 if ( (elem = content[i]).nodeType !== 1 ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
389 continue;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
390 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
391 elems = elem.getElementsByTagName("*");
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
392 for ( m = elems.length - 1; m >= 0; m-- ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
393 processItemKey( elems[m] );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
394 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
395 processItemKey( elem );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
396 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
397 function processItemKey( el ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
398 var pntKey, pntNode = el, pntItem, tmplItem, key;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
399 // Ensure that each rendered template inserted into the DOM has its own template item,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
400 if ( (key = el.getAttribute( tmplItmAtt ))) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
401 while ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
402 if ( pntKey !== key ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
403 // The next ancestor with a _tmplitem expando is on a different key than this one.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
404 // So this is a top-level element within this template item
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
405 // Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
406 pntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
407 if ( !(tmplItem = newTmplItems[key]) ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
408 // The item is for wrapped content, and was copied from the temporary parent wrappedItem.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
409 tmplItem = wrappedItems[key];
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
410 tmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode], null, true );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
411 tmplItem.key = ++itemKey;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
412 newTmplItems[itemKey] = tmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
413 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
414 if ( cloneIndex ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
415 cloneTmplItem( key );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
416 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
417 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
418 el.removeAttribute( tmplItmAtt );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
419 } else if ( cloneIndex && (tmplItem = jQuery.data( el, "tmplItem" )) ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
420 // This was a rendered element, cloned during append or appendTo etc.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
421 // TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
422 cloneTmplItem( tmplItem.key );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
423 newTmplItems[tmplItem.key] = tmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
424 pntNode = jQuery.data( el.parentNode, "tmplItem" );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
425 pntNode = pntNode ? pntNode.key : 0;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
426 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
427 if ( tmplItem ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
428 pntItem = tmplItem;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
429 // Find the template item of the parent element.
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
430 // (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
431 while ( pntItem && pntItem.key != pntNode ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
432 // Add this element as a top-level node for this rendered template item, as well as for any
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
433 // ancestor items between this item and the item of its parent element
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
434 pntItem.nodes.push( el );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
435 pntItem = pntItem.parent;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
436 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
437 // Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
438 delete tmplItem._ctnt;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
439 delete tmplItem._wrap;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
440 // Store template item as jQuery data on the element
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
441 jQuery.data( el, "tmplItem", tmplItem );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
442 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
443 function cloneTmplItem( key ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
444 key = key + keySuffix;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
445 tmplItem = newClonedItems[key] =
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
446 (newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent, null, true ));
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
447 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
448 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
449 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
450
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
451 //---- Helper functions for template item ----
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
452
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
453 function tiCalls( content, tmpl, data, options ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
454 if ( !content ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
455 return stack.pop();
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
456 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
457 stack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
458 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
459
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
460 function tiNest( tmpl, data, options ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
461 // nested template, using {{tmpl}} tag
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
462 return jQuery.tmpl( jQuery.template( tmpl ), data, options, this );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
463 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
464
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
465 function tiWrap( call, wrapped ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
466 // nested template, using {{wrap}} tag
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
467 var options = call.options || {};
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
468 options.wrapped = wrapped;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
469 // Apply the template, which may incorporate wrapped content,
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
470 return jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
471 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
472
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
473 function tiHtml( filter, textOnly ) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
474 var wrapped = this._wrap;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
475 return jQuery.map(
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
476 jQuery( jQuery.isArray( wrapped ) ? wrapped.join("") : wrapped ).filter( filter || "*" ),
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
477 function(e) {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
478 return textOnly ?
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
479 e.innerText || e.textContent :
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
480 e.outerHTML || outerHtml(e);
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
481 });
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
482 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
483
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
484 function tiUpdate() {
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
485 var coll = this.nodes;
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
486 jQuery.tmpl( null, null, null, this).insertBefore( coll[0] );
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
487 jQuery( coll ).remove();
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
488 }
7f008e782563 add gui files to product via FileSystemSite
casties
parents:
diff changeset
489 })( jQuery );