Commits

Olemis Lang committed 5fdcf07

BH Dashboard #195 : Rebase jQuery File Upload patch r1397115 => r1398977

  • Participants
  • Parent commits e0d8eee
  • Branches t195_attach_form

Comments (0)

Files changed (3)

 hgsvn/rm_files.diff
 t220/t220_r1397115_bootstrap_2.1.1.diff
-t195/t195_r1397115_jquery_file_upload_deps_generic.diff
+t195/t195_r1398977_jquery_file_upload_deps_generic.diff

t195/t195_r1397115_jquery_file_upload_deps_generic.diff

-# HG changeset patch
-# Parent 346666e9e1e03a17a3cf480bbe6ab990fd885955
-BH Dashboard #195 : Reusable dependencies of jQuery FileUpload
-
-diff -r 346666e9e1e0 bhdashboard/htdocs/js/jquery.iframe-transport.js
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/bhdashboard/htdocs/js/jquery.iframe-transport.js	Thu Oct 18 16:38:10 2012 -0500
-@@ -0,0 +1,172 @@
-+/*
-+ * jQuery Iframe Transport Plugin 1.5
-+ * https://github.com/blueimp/jQuery-File-Upload
-+ *
-+ * Copyright 2011, Sebastian Tschan
-+ * https://blueimp.net
-+ *
-+ * Licensed under the MIT license:
-+ * http://www.opensource.org/licenses/MIT
-+ */
-+
-+/*jslint unparam: true, nomen: true */
-+/*global define, window, document */
-+
-+(function (factory) {
-+    'use strict';
-+    if (typeof define === 'function' && define.amd) {
-+        // Register as an anonymous AMD module:
-+        define(['jquery'], factory);
-+    } else {
-+        // Browser globals:
-+        factory(window.jQuery);
-+    }
-+}(function ($) {
-+    'use strict';
-+
-+    // Helper variable to create unique names for the transport iframes:
-+    var counter = 0;
-+
-+    // The iframe transport accepts three additional options:
-+    // options.fileInput: a jQuery collection of file input fields
-+    // options.paramName: the parameter name for the file form data,
-+    //  overrides the name property of the file input field(s),
-+    //  can be a string or an array of strings.
-+    // options.formData: an array of objects with name and value properties,
-+    //  equivalent to the return data of .serializeArray(), e.g.:
-+    //  [{name: 'a', value: 1}, {name: 'b', value: 2}]
-+    $.ajaxTransport('iframe', function (options) {
-+        if (options.async && (options.type === 'POST' || options.type === 'GET')) {
-+            var form,
-+                iframe;
-+            return {
-+                send: function (_, completeCallback) {
-+                    form = $('<form style="display:none;"></form>');
-+                    form.attr('accept-charset', options.formAcceptCharset);
-+                    // javascript:false as initial iframe src
-+                    // prevents warning popups on HTTPS in IE6.
-+                    // IE versions below IE8 cannot set the name property of
-+                    // elements that have already been added to the DOM,
-+                    // so we set the name along with the iframe HTML markup:
-+                    iframe = $(
-+                        '<iframe src="javascript:false;" name="iframe-transport-' +
-+                            (counter += 1) + '"></iframe>'
-+                    ).bind('load', function () {
-+                        var fileInputClones,
-+                            paramNames = $.isArray(options.paramName) ?
-+                                    options.paramName : [options.paramName];
-+                        iframe
-+                            .unbind('load')
-+                            .bind('load', function () {
-+                                var response;
-+                                // Wrap in a try/catch block to catch exceptions thrown
-+                                // when trying to access cross-domain iframe contents:
-+                                try {
-+                                    response = iframe.contents();
-+                                    // Google Chrome and Firefox do not throw an
-+                                    // exception when calling iframe.contents() on
-+                                    // cross-domain requests, so we unify the response:
-+                                    if (!response.length || !response[0].firstChild) {
-+                                        throw new Error();
-+                                    }
-+                                } catch (e) {
-+                                    response = undefined;
-+                                }
-+                                // The complete callback returns the
-+                                // iframe content document as response object:
-+                                completeCallback(
-+                                    200,
-+                                    'success',
-+                                    {'iframe': response}
-+                                );
-+                                // Fix for IE endless progress bar activity bug
-+                                // (happens on form submits to iframe targets):
-+                                $('<iframe src="javascript:false;"></iframe>')
-+                                    .appendTo(form);
-+                                form.remove();
-+                            });
-+                        form
-+                            .prop('target', iframe.prop('name'))
-+                            .prop('action', options.url)
-+                            .prop('method', options.type);
-+                        if (options.formData) {
-+                            $.each(options.formData, function (index, field) {
-+                                $('<input type="hidden"/>')
-+                                    .prop('name', field.name)
-+                                    .val(field.value)
-+                                    .appendTo(form);
-+                            });
-+                        }
-+                        if (options.fileInput && options.fileInput.length &&
-+                                options.type === 'POST') {
-+                            fileInputClones = options.fileInput.clone();
-+                            // Insert a clone for each file input field:
-+                            options.fileInput.after(function (index) {
-+                                return fileInputClones[index];
-+                            });
-+                            if (options.paramName) {
-+                                options.fileInput.each(function (index) {
-+                                    $(this).prop(
-+                                        'name',
-+                                        paramNames[index] || options.paramName
-+                                    );
-+                                });
-+                            }
-+                            // Appending the file input fields to the hidden form
-+                            // removes them from their original location:
-+                            form
-+                                .append(options.fileInput)
-+                                .prop('enctype', 'multipart/form-data')
-+                                // enctype must be set as encoding for IE:
-+                                .prop('encoding', 'multipart/form-data');
-+                        }
-+                        form.submit();
-+                        // Insert the file input fields at their original location
-+                        // by replacing the clones with the originals:
-+                        if (fileInputClones && fileInputClones.length) {
-+                            options.fileInput.each(function (index, input) {
-+                                var clone = $(fileInputClones[index]);
-+                                $(input).prop('name', clone.prop('name'));
-+                                clone.replaceWith(input);
-+                            });
-+                        }
-+                    });
-+                    form.append(iframe).appendTo(document.body);
-+                },
-+                abort: function () {
-+                    if (iframe) {
-+                        // javascript:false as iframe src aborts the request
-+                        // and prevents warning popups on HTTPS in IE6.
-+                        // concat is used to avoid the "Script URL" JSLint error:
-+                        iframe
-+                            .unbind('load')
-+                            .prop('src', 'javascript'.concat(':false;'));
-+                    }
-+                    if (form) {
-+                        form.remove();
-+                    }
-+                }
-+            };
-+        }
-+    });
-+
-+    // The iframe transport returns the iframe content document as response.
-+    // The following adds converters from iframe to text, json, html, and script:
-+    $.ajaxSetup({
-+        converters: {
-+            'iframe text': function (iframe) {
-+                return $(iframe[0].body).text();
-+            },
-+            'iframe json': function (iframe) {
-+                return $.parseJSON($(iframe[0].body).text());
-+            },
-+            'iframe html': function (iframe) {
-+                return $(iframe[0].body).html();
-+            },
-+            'iframe script': function (iframe) {
-+                return $.globalEval($(iframe[0].body).text());
-+            }
-+        }
-+    });
-+
-+}));
-diff -r 346666e9e1e0 bhdashboard/htdocs/js/jquery.ui.widget.js
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/bhdashboard/htdocs/js/jquery.ui.widget.js	Thu Oct 18 16:38:10 2012 -0500
-@@ -0,0 +1,511 @@
-+/*
-+ * jQuery UI Widget 1.9.0+amd
-+ * https://github.com/blueimp/jQuery-File-Upload
-+ *
-+ * Copyright 2012 jQuery Foundation and other contributors
-+ * Released under the MIT license.
-+ * http://jquery.org/license
-+ *
-+ * http://api.jqueryui.com/jQuery.widget/
-+ */
-+
-+(function (factory) {
-+    if (typeof define === "function" && define.amd) {
-+        // Register as an anonymous AMD module:
-+        define(["jquery"], factory);
-+    } else {
-+        // Browser globals:
-+        factory(jQuery);
-+    }
-+}(function( $, undefined ) {
-+
-+var uuid = 0,
-+	slice = Array.prototype.slice,
-+	_cleanData = $.cleanData;
-+$.cleanData = function( elems ) {
-+	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-+		try {
-+			$( elem ).triggerHandler( "remove" );
-+		// http://bugs.jquery.com/ticket/8235
-+		} catch( e ) {}
-+	}
-+	_cleanData( elems );
-+};
-+
-+$.widget = function( name, base, prototype ) {
-+	var fullName, existingConstructor, constructor, basePrototype,
-+		namespace = name.split( "." )[ 0 ];
-+
-+	name = name.split( "." )[ 1 ];
-+	fullName = namespace + "-" + name;
-+
-+	if ( !prototype ) {
-+		prototype = base;
-+		base = $.Widget;
-+	}
-+
-+	// create selector for plugin
-+	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
-+		return !!$.data( elem, fullName );
-+	};
-+
-+	$[ namespace ] = $[ namespace ] || {};
-+	existingConstructor = $[ namespace ][ name ];
-+	constructor = $[ namespace ][ name ] = function( options, element ) {
-+		// allow instantiation without "new" keyword
-+		if ( !this._createWidget ) {
-+			return new constructor( options, element );
-+		}
-+
-+		// allow instantiation without initializing for simple inheritance
-+		// must use "new" keyword (the code above always passes args)
-+		if ( arguments.length ) {
-+			this._createWidget( options, element );
-+		}
-+	};
-+	// extend with the existing constructor to carry over any static properties
-+	$.extend( constructor, existingConstructor, {
-+		version: prototype.version,
-+		// copy the object used to create the prototype in case we need to
-+		// redefine the widget later
-+		_proto: $.extend( {}, prototype ),
-+		// track widgets that inherit from this widget in case this widget is
-+		// redefined after a widget inherits from it
-+		_childConstructors: []
-+	});
-+
-+	basePrototype = new base();
-+	// we need to make the options hash a property directly on the new instance
-+	// otherwise we'll modify the options hash on the prototype that we're
-+	// inheriting from
-+	basePrototype.options = $.widget.extend( {}, basePrototype.options );
-+	$.each( prototype, function( prop, value ) {
-+		if ( $.isFunction( value ) ) {
-+			prototype[ prop ] = (function() {
-+				var _super = function() {
-+						return base.prototype[ prop ].apply( this, arguments );
-+					},
-+					_superApply = function( args ) {
-+						return base.prototype[ prop ].apply( this, args );
-+					};
-+				return function() {
-+					var __super = this._super,
-+						__superApply = this._superApply,
-+						returnValue;
-+
-+					this._super = _super;
-+					this._superApply = _superApply;
-+
-+					returnValue = value.apply( this, arguments );
-+
-+					this._super = __super;
-+					this._superApply = __superApply;
-+
-+					return returnValue;
-+				};
-+			})();
-+		}
-+	});
-+	constructor.prototype = $.widget.extend( basePrototype, {
-+		// TODO: remove support for widgetEventPrefix
-+		// always use the name + a colon as the prefix, e.g., draggable:start
-+		// don't prefix for widgets that aren't DOM-based
-+		widgetEventPrefix: name
-+	}, prototype, {
-+		constructor: constructor,
-+		namespace: namespace,
-+		widgetName: name,
-+		// TODO remove widgetBaseClass, see #8155
-+		widgetBaseClass: fullName,
-+		widgetFullName: fullName
-+	});
-+
-+	// If this widget is being redefined then we need to find all widgets that
-+	// are inheriting from it and redefine all of them so that they inherit from
-+	// the new version of this widget. We're essentially trying to replace one
-+	// level in the prototype chain.
-+	if ( existingConstructor ) {
-+		$.each( existingConstructor._childConstructors, function( i, child ) {
-+			var childPrototype = child.prototype;
-+
-+			// redefine the child widget using the same prototype that was
-+			// originally used, but inherit from the new version of the base
-+			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
-+		});
-+		// remove the list of existing child constructors from the old constructor
-+		// so the old child constructors can be garbage collected
-+		delete existingConstructor._childConstructors;
-+	} else {
-+		base._childConstructors.push( constructor );
-+	}
-+
-+	$.widget.bridge( name, constructor );
-+};
-+
-+$.widget.extend = function( target ) {
-+	var input = slice.call( arguments, 1 ),
-+		inputIndex = 0,
-+		inputLength = input.length,
-+		key,
-+		value;
-+	for ( ; inputIndex < inputLength; inputIndex++ ) {
-+		for ( key in input[ inputIndex ] ) {
-+			value = input[ inputIndex ][ key ];
-+			if (input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
-+				target[ key ] = $.isPlainObject( value ) ? $.widget.extend( {}, target[ key ], value ) : value;
-+			}
-+		}
-+	}
-+	return target;
-+};
-+
-+$.widget.bridge = function( name, object ) {
-+	var fullName = object.prototype.widgetFullName;
-+	$.fn[ name ] = function( options ) {
-+		var isMethodCall = typeof options === "string",
-+			args = slice.call( arguments, 1 ),
-+			returnValue = this;
-+
-+		// allow multiple hashes to be passed on init
-+		options = !isMethodCall && args.length ?
-+			$.widget.extend.apply( null, [ options ].concat(args) ) :
-+			options;
-+
-+		if ( isMethodCall ) {
-+			this.each(function() {
-+				var methodValue,
-+					instance = $.data( this, fullName );
-+				if ( !instance ) {
-+					return $.error( "cannot call methods on " + name + " prior to initialization; " +
-+						"attempted to call method '" + options + "'" );
-+				}
-+				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
-+					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
-+				}
-+				methodValue = instance[ options ].apply( instance, args );
-+				if ( methodValue !== instance && methodValue !== undefined ) {
-+					returnValue = methodValue && methodValue.jquery ?
-+						returnValue.pushStack( methodValue.get() ) :
-+						methodValue;
-+					return false;
-+				}
-+			});
-+		} else {
-+			this.each(function() {
-+				var instance = $.data( this, fullName );
-+				if ( instance ) {
-+					instance.option( options || {} )._init();
-+				} else {
-+					new object( options, this );
-+				}
-+			});
-+		}
-+
-+		return returnValue;
-+	};
-+};
-+
-+$.Widget = function( options, element ) {};
-+$.Widget._childConstructors = [];
-+
-+$.Widget.prototype = {
-+	widgetName: "widget",
-+	widgetEventPrefix: "",
-+	defaultElement: "<div>",
-+	options: {
-+		disabled: false,
-+
-+		// callbacks
-+		create: null
-+	},
-+	_createWidget: function( options, element ) {
-+		element = $( element || this.defaultElement || this )[ 0 ];
-+		this.element = $( element );
-+		this.uuid = uuid++;
-+		this.eventNamespace = "." + this.widgetName + this.uuid;
-+		this.options = $.widget.extend( {},
-+			this.options,
-+			this._getCreateOptions(),
-+			options );
-+
-+		this.bindings = $();
-+		this.hoverable = $();
-+		this.focusable = $();
-+
-+		if ( element !== this ) {
-+			// 1.9 BC for #7810
-+			// TODO remove dual storage
-+			$.data( element, this.widgetName, this );
-+			$.data( element, this.widgetFullName, this );
-+			this._on({ remove: "destroy" });
-+			this.document = $( element.style ?
-+				// element within the document
-+				element.ownerDocument :
-+				// element is window or document
-+				element.document || element );
-+			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
-+		}
-+
-+		this._create();
-+		this._trigger( "create", null, this._getCreateEventData() );
-+		this._init();
-+	},
-+	_getCreateOptions: $.noop,
-+	_getCreateEventData: $.noop,
-+	_create: $.noop,
-+	_init: $.noop,
-+
-+	destroy: function() {
-+		this._destroy();
-+		// we can probably remove the unbind calls in 2.0
-+		// all event bindings should go through this._on()
-+		this.element
-+			.unbind( this.eventNamespace )
-+			// 1.9 BC for #7810
-+			// TODO remove dual storage
-+			.removeData( this.widgetName )
-+			.removeData( this.widgetFullName )
-+			// support: jquery <1.6.3
-+			// http://bugs.jquery.com/ticket/9413
-+			.removeData( $.camelCase( this.widgetFullName ) );
-+		this.widget()
-+			.unbind( this.eventNamespace )
-+			.removeAttr( "aria-disabled" )
-+			.removeClass(
-+				this.widgetFullName + "-disabled " +
-+				"ui-state-disabled" );
-+
-+		// clean up events and states
-+		this.bindings.unbind( this.eventNamespace );
-+		this.hoverable.removeClass( "ui-state-hover" );
-+		this.focusable.removeClass( "ui-state-focus" );
-+	},
-+	_destroy: $.noop,
-+
-+	widget: function() {
-+		return this.element;
-+	},
-+
-+	option: function( key, value ) {
-+		var options = key,
-+			parts,
-+			curOption,
-+			i;
-+
-+		if ( arguments.length === 0 ) {
-+			// don't return a reference to the internal hash
-+			return $.widget.extend( {}, this.options );
-+		}
-+
-+		if ( typeof key === "string" ) {
-+			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
-+			options = {};
-+			parts = key.split( "." );
-+			key = parts.shift();
-+			if ( parts.length ) {
-+				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
-+				for ( i = 0; i < parts.length - 1; i++ ) {
-+					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
-+					curOption = curOption[ parts[ i ] ];
-+				}
-+				key = parts.pop();
-+				if ( value === undefined ) {
-+					return curOption[ key ] === undefined ? null : curOption[ key ];
-+				}
-+				curOption[ key ] = value;
-+			} else {
-+				if ( value === undefined ) {
-+					return this.options[ key ] === undefined ? null : this.options[ key ];
-+				}
-+				options[ key ] = value;
-+			}
-+		}
-+
-+		this._setOptions( options );
-+
-+		return this;
-+	},
-+	_setOptions: function( options ) {
-+		var key;
-+
-+		for ( key in options ) {
-+			this._setOption( key, options[ key ] );
-+		}
-+
-+		return this;
-+	},
-+	_setOption: function( key, value ) {
-+		this.options[ key ] = value;
-+
-+		if ( key === "disabled" ) {
-+			this.widget()
-+				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
-+				.attr( "aria-disabled", value );
-+			this.hoverable.removeClass( "ui-state-hover" );
-+			this.focusable.removeClass( "ui-state-focus" );
-+		}
-+
-+		return this;
-+	},
-+
-+	enable: function() {
-+		return this._setOption( "disabled", false );
-+	},
-+	disable: function() {
-+		return this._setOption( "disabled", true );
-+	},
-+
-+	_on: function( element, handlers ) {
-+		// no element argument, shuffle and use this.element
-+		if ( !handlers ) {
-+			handlers = element;
-+			element = this.element;
-+		} else {
-+			// accept selectors, DOM elements
-+			element = $( element );
-+			this.bindings = this.bindings.add( element );
-+		}
-+
-+		var instance = this;
-+		$.each( handlers, function( event, handler ) {
-+			function handlerProxy() {
-+				// allow widgets to customize the disabled handling
-+				// - disabled as an array instead of boolean
-+				// - disabled class as method for disabling individual parts
-+				if ( instance.options.disabled === true ||
-+						$( this ).hasClass( "ui-state-disabled" ) ) {
-+					return;
-+				}
-+				return ( typeof handler === "string" ? instance[ handler ] : handler )
-+					.apply( instance, arguments );
-+			}
-+
-+			// copy the guid so direct unbinding works
-+			if ( typeof handler !== "string" ) {
-+				handlerProxy.guid = handler.guid =
-+					handler.guid || handlerProxy.guid || $.guid++;
-+			}
-+
-+			var match = event.match( /^(\w+)\s*(.*)$/ ),
-+				eventName = match[1] + instance.eventNamespace,
-+				selector = match[2];
-+			if ( selector ) {
-+				instance.widget().delegate( selector, eventName, handlerProxy );
-+			} else {
-+				element.bind( eventName, handlerProxy );
-+			}
-+		});
-+	},
-+
-+	_off: function( element, eventName ) {
-+		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
-+		element.unbind( eventName ).undelegate( eventName );
-+	},
-+
-+	_delay: function( handler, delay ) {
-+		function handlerProxy() {
-+			return ( typeof handler === "string" ? instance[ handler ] : handler )
-+				.apply( instance, arguments );
-+		}
-+		var instance = this;
-+		return setTimeout( handlerProxy, delay || 0 );
-+	},
-+
-+	_hoverable: function( element ) {
-+		this.hoverable = this.hoverable.add( element );
-+		this._on( element, {
-+			mouseenter: function( event ) {
-+				$( event.currentTarget ).addClass( "ui-state-hover" );
-+			},
-+			mouseleave: function( event ) {
-+				$( event.currentTarget ).removeClass( "ui-state-hover" );
-+			}
-+		});
-+	},
-+
-+	_focusable: function( element ) {
-+		this.focusable = this.focusable.add( element );
-+		this._on( element, {
-+			focusin: function( event ) {
-+				$( event.currentTarget ).addClass( "ui-state-focus" );
-+			},
-+			focusout: function( event ) {
-+				$( event.currentTarget ).removeClass( "ui-state-focus" );
-+			}
-+		});
-+	},
-+
-+	_trigger: function( type, event, data ) {
-+		var prop, orig,
-+			callback = this.options[ type ];
-+
-+		data = data || {};
-+		event = $.Event( event );
-+		event.type = ( type === this.widgetEventPrefix ?
-+			type :
-+			this.widgetEventPrefix + type ).toLowerCase();
-+		// the original event may come from any element
-+		// so we need to reset the target on the new event
-+		event.target = this.element[ 0 ];
-+
-+		// copy original event properties over to the new event
-+		orig = event.originalEvent;
-+		if ( orig ) {
-+			for ( prop in orig ) {
-+				if ( !( prop in event ) ) {
-+					event[ prop ] = orig[ prop ];
-+				}
-+			}
-+		}
-+
-+		this.element.trigger( event, data );
-+		return !( $.isFunction( callback ) &&
-+			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
-+			event.isDefaultPrevented() );
-+	}
-+};
-+
-+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
-+	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
-+		if ( typeof options === "string" ) {
-+			options = { effect: options };
-+		}
-+		var hasOptions,
-+			effectName = !options ?
-+				method :
-+				options === true || typeof options === "number" ?
-+					defaultEffect :
-+					options.effect || defaultEffect;
-+		options = options || {};
-+		if ( typeof options === "number" ) {
-+			options = { duration: options };
-+		}
-+		hasOptions = !$.isEmptyObject( options );
-+		options.complete = callback;
-+		if ( options.delay ) {
-+			element.delay( options.delay );
-+		}
-+		if ( hasOptions && $.effects && ( $.effects.effect[ effectName ] || $.uiBackCompat !== false && $.effects[ effectName ] ) ) {
-+			element[ method ]( options );
-+		} else if ( effectName !== method && element[ effectName ] ) {
-+			element[ effectName ]( options.duration, options.easing, callback );
-+		} else {
-+			element.queue(function( next ) {
-+				$( this )[ method ]();
-+				if ( callback ) {
-+					callback.call( element[ 0 ] );
-+				}
-+				next();
-+			});
-+		}
-+	};
-+});
-+
-+// DEPRECATED
-+if ( $.uiBackCompat !== false ) {
-+	$.Widget.prototype._getCreateOptions = function() {
-+		return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
-+	};
-+}
-+
-+}));
-diff -r 346666e9e1e0 bhdashboard/htdocs/js/tmpl.js
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/bhdashboard/htdocs/js/tmpl.js	Thu Oct 18 16:38:10 2012 -0500
-@@ -0,0 +1,1 @@
-+(function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?![^%]*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){if(b)return{"\n":"\\n","\r":"\\r","\t":"\\t"," ":" "}[a]||"\\"+a;if(c)return c==="="?"'+_e("+d+")+'":"'+("+d+"||'')+'";if(e)return"';";if(f)return"_s+='"},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#39;"},b.encode=function(a){return String(a||"").replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e&&(s||'')||_e(s);},include=function(s,d){_s+=tmpl(s,d);}",typeof define=="function"&&define.amd?define(function(){return b}):a.tmpl=b})(this);
-\ No newline at end of file

t195/t195_r1398977_jquery_file_upload_deps_generic.diff

+# HG changeset patch
+# Parent 346666e9e1e03a17a3cf480bbe6ab990fd885955
+BH Dashboard #195 : Reusable dependencies of jQuery FileUpload
+
+diff -r 346666e9e1e0 bhdashboard/htdocs/js/jquery.iframe-transport.js
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/bhdashboard/htdocs/js/jquery.iframe-transport.js	Thu Oct 18 16:38:10 2012 -0500
+@@ -0,0 +1,172 @@
++/*
++ * jQuery Iframe Transport Plugin 1.5
++ * https://github.com/blueimp/jQuery-File-Upload
++ *
++ * Copyright 2011, Sebastian Tschan
++ * https://blueimp.net
++ *
++ * Licensed under the MIT license:
++ * http://www.opensource.org/licenses/MIT
++ */
++
++/*jslint unparam: true, nomen: true */
++/*global define, window, document */
++
++(function (factory) {
++    'use strict';
++    if (typeof define === 'function' && define.amd) {
++        // Register as an anonymous AMD module:
++        define(['jquery'], factory);
++    } else {
++        // Browser globals:
++        factory(window.jQuery);
++    }
++}(function ($) {
++    'use strict';
++
++    // Helper variable to create unique names for the transport iframes:
++    var counter = 0;
++
++    // The iframe transport accepts three additional options:
++    // options.fileInput: a jQuery collection of file input fields
++    // options.paramName: the parameter name for the file form data,
++    //  overrides the name property of the file input field(s),
++    //  can be a string or an array of strings.
++    // options.formData: an array of objects with name and value properties,
++    //  equivalent to the return data of .serializeArray(), e.g.:
++    //  [{name: 'a', value: 1}, {name: 'b', value: 2}]
++    $.ajaxTransport('iframe', function (options) {
++        if (options.async && (options.type === 'POST' || options.type === 'GET')) {
++            var form,
++                iframe;
++            return {
++                send: function (_, completeCallback) {
++                    form = $('<form style="display:none;"></form>');
++                    form.attr('accept-charset', options.formAcceptCharset);
++                    // javascript:false as initial iframe src
++                    // prevents warning popups on HTTPS in IE6.
++                    // IE versions below IE8 cannot set the name property of
++                    // elements that have already been added to the DOM,
++                    // so we set the name along with the iframe HTML markup:
++                    iframe = $(
++                        '<iframe src="javascript:false;" name="iframe-transport-' +
++                            (counter += 1) + '"></iframe>'
++                    ).bind('load', function () {
++                        var fileInputClones,
++                            paramNames = $.isArray(options.paramName) ?
++                                    options.paramName : [options.paramName];
++                        iframe
++                            .unbind('load')
++                            .bind('load', function () {
++                                var response;
++                                // Wrap in a try/catch block to catch exceptions thrown
++                                // when trying to access cross-domain iframe contents:
++                                try {
++                                    response = iframe.contents();
++                                    // Google Chrome and Firefox do not throw an
++                                    // exception when calling iframe.contents() on
++                                    // cross-domain requests, so we unify the response:
++                                    if (!response.length || !response[0].firstChild) {
++                                        throw new Error();
++                                    }
++                                } catch (e) {
++                                    response = undefined;
++                                }
++                                // The complete callback returns the
++                                // iframe content document as response object:
++                                completeCallback(
++                                    200,
++                                    'success',
++                                    {'iframe': response}
++                                );
++                                // Fix for IE endless progress bar activity bug
++                                // (happens on form submits to iframe targets):
++                                $('<iframe src="javascript:false;"></iframe>')
++                                    .appendTo(form);
++                                form.remove();
++                            });
++                        form
++                            .prop('target', iframe.prop('name'))
++                            .prop('action', options.url)
++                            .prop('method', options.type);
++                        if (options.formData) {
++                            $.each(options.formData, function (index, field) {
++                                $('<input type="hidden"/>')
++                                    .prop('name', field.name)
++                                    .val(field.value)
++                                    .appendTo(form);
++                            });
++                        }
++                        if (options.fileInput && options.fileInput.length &&
++                                options.type === 'POST') {
++                            fileInputClones = options.fileInput.clone();
++                            // Insert a clone for each file input field:
++                            options.fileInput.after(function (index) {
++                                return fileInputClones[index];
++                            });
++                            if (options.paramName) {
++                                options.fileInput.each(function (index) {
++                                    $(this).prop(
++                                        'name',
++                                        paramNames[index] || options.paramName
++                                    );
++                                });
++                            }
++                            // Appending the file input fields to the hidden form
++                            // removes them from their original location:
++                            form
++                                .append(options.fileInput)
++                                .prop('enctype', 'multipart/form-data')
++                                // enctype must be set as encoding for IE:
++                                .prop('encoding', 'multipart/form-data');
++                        }
++                        form.submit();
++                        // Insert the file input fields at their original location
++                        // by replacing the clones with the originals:
++                        if (fileInputClones && fileInputClones.length) {
++                            options.fileInput.each(function (index, input) {
++                                var clone = $(fileInputClones[index]);
++                                $(input).prop('name', clone.prop('name'));
++                                clone.replaceWith(input);
++                            });
++                        }
++                    });
++                    form.append(iframe).appendTo(document.body);
++                },
++                abort: function () {
++                    if (iframe) {
++                        // javascript:false as iframe src aborts the request
++                        // and prevents warning popups on HTTPS in IE6.
++                        // concat is used to avoid the "Script URL" JSLint error:
++                        iframe
++                            .unbind('load')
++                            .prop('src', 'javascript'.concat(':false;'));
++                    }
++                    if (form) {
++                        form.remove();
++                    }
++                }
++            };
++        }
++    });
++
++    // The iframe transport returns the iframe content document as response.
++    // The following adds converters from iframe to text, json, html, and script:
++    $.ajaxSetup({
++        converters: {
++            'iframe text': function (iframe) {
++                return $(iframe[0].body).text();
++            },
++            'iframe json': function (iframe) {
++                return $.parseJSON($(iframe[0].body).text());
++            },
++            'iframe html': function (iframe) {
++                return $(iframe[0].body).html();
++            },
++            'iframe script': function (iframe) {
++                return $.globalEval($(iframe[0].body).text());
++            }
++        }
++    });
++
++}));
+diff -r 346666e9e1e0 bhdashboard/htdocs/js/jquery.ui.widget.js
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/bhdashboard/htdocs/js/jquery.ui.widget.js	Thu Oct 18 16:38:10 2012 -0500
+@@ -0,0 +1,511 @@
++/*
++ * jQuery UI Widget 1.9.0+amd
++ * https://github.com/blueimp/jQuery-File-Upload
++ *
++ * Copyright 2012 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/jQuery.widget/
++ */
++
++(function (factory) {
++    if (typeof define === "function" && define.amd) {
++        // Register as an anonymous AMD module:
++        define(["jquery"], factory);
++    } else {
++        // Browser globals:
++        factory(jQuery);
++    }
++}(function( $, undefined ) {
++
++var uuid = 0,
++	slice = Array.prototype.slice,
++	_cleanData = $.cleanData;
++$.cleanData = function( elems ) {
++	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++		try {
++			$( elem ).triggerHandler( "remove" );
++		// http://bugs.jquery.com/ticket/8235
++		} catch( e ) {}
++	}
++	_cleanData( elems );
++};
++
++$.widget = function( name, base, prototype ) {
++	var fullName, existingConstructor, constructor, basePrototype,
++		namespace = name.split( "." )[ 0 ];
++
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
++		return !!$.data( elem, fullName );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	existingConstructor = $[ namespace ][ name ];
++	constructor = $[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without "new" keyword
++		if ( !this._createWidget ) {
++			return new constructor( options, element );
++		}
++
++		// allow instantiation without initializing for simple inheritance
++		// must use "new" keyword (the code above always passes args)
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++	// extend with the existing constructor to carry over any static properties
++	$.extend( constructor, existingConstructor, {
++		version: prototype.version,
++		// copy the object used to create the prototype in case we need to
++		// redefine the widget later
++		_proto: $.extend( {}, prototype ),
++		// track widgets that inherit from this widget in case this widget is
++		// redefined after a widget inherits from it
++		_childConstructors: []
++	});
++
++	basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++	basePrototype.options = $.widget.extend( {}, basePrototype.options );
++	$.each( prototype, function( prop, value ) {
++		if ( $.isFunction( value ) ) {
++			prototype[ prop ] = (function() {
++				var _super = function() {
++						return base.prototype[ prop ].apply( this, arguments );
++					},
++					_superApply = function( args ) {
++						return base.prototype[ prop ].apply( this, args );
++					};
++				return function() {
++					var __super = this._super,
++						__superApply = this._superApply,
++						returnValue;
++
++					this._super = _super;
++					this._superApply = _superApply;
++
++					returnValue = value.apply( this, arguments );
++
++					this._super = __super;
++					this._superApply = __superApply;
++
++					return returnValue;
++				};
++			})();
++		}
++	});
++	constructor.prototype = $.widget.extend( basePrototype, {
++		// TODO: remove support for widgetEventPrefix
++		// always use the name + a colon as the prefix, e.g., draggable:start
++		// don't prefix for widgets that aren't DOM-based
++		widgetEventPrefix: name
++	}, prototype, {
++		constructor: constructor,
++		namespace: namespace,
++		widgetName: name,
++		// TODO remove widgetBaseClass, see #8155
++		widgetBaseClass: fullName,
++		widgetFullName: fullName
++	});
++
++	// If this widget is being redefined then we need to find all widgets that
++	// are inheriting from it and redefine all of them so that they inherit from
++	// the new version of this widget. We're essentially trying to replace one
++	// level in the prototype chain.
++	if ( existingConstructor ) {
++		$.each( existingConstructor._childConstructors, function( i, child ) {
++			var childPrototype = child.prototype;
++
++			// redefine the child widget using the same prototype that was
++			// originally used, but inherit from the new version of the base
++			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
++		});
++		// remove the list of existing child constructors from the old constructor
++		// so the old child constructors can be garbage collected
++		delete existingConstructor._childConstructors;
++	} else {
++		base._childConstructors.push( constructor );
++	}
++
++	$.widget.bridge( name, constructor );
++};
++
++$.widget.extend = function( target ) {
++	var input = slice.call( arguments, 1 ),
++		inputIndex = 0,
++		inputLength = input.length,
++		key,
++		value;
++	for ( ; inputIndex < inputLength; inputIndex++ ) {
++		for ( key in input[ inputIndex ] ) {
++			value = input[ inputIndex ][ key ];
++			if (input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
++				target[ key ] = $.isPlainObject( value ) ? $.widget.extend( {}, target[ key ], value ) : value;
++			}
++		}
++	}
++	return target;
++};
++
++$.widget.bridge = function( name, object ) {
++	var fullName = object.prototype.widgetFullName;
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.widget.extend.apply( null, [ options ].concat(args) ) :
++			options;
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var methodValue,
++					instance = $.data( this, fullName );
++				if ( !instance ) {
++					return $.error( "cannot call methods on " + name + " prior to initialization; " +
++						"attempted to call method '" + options + "'" );
++				}
++				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
++					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
++				}
++				methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue && methodValue.jquery ?
++						returnValue.pushStack( methodValue.get() ) :
++						methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, fullName );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					new object( options, this );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( options, element ) {};
++$.Widget._childConstructors = [];
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	defaultElement: "<div>",
++	options: {
++		disabled: false,
++
++		// callbacks
++		create: null
++	},
++	_createWidget: function( options, element ) {
++		element = $( element || this.defaultElement || this )[ 0 ];
++		this.element = $( element );
++		this.uuid = uuid++;
++		this.eventNamespace = "." + this.widgetName + this.uuid;
++		this.options = $.widget.extend( {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		this.bindings = $();
++		this.hoverable = $();
++		this.focusable = $();
++
++		if ( element !== this ) {
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			$.data( element, this.widgetName, this );
++			$.data( element, this.widgetFullName, this );
++			this._on({ remove: "destroy" });
++			this.document = $( element.style ?
++				// element within the document
++				element.ownerDocument :
++				// element is window or document
++				element.document || element );
++			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
++		}
++
++		this._create();
++		this._trigger( "create", null, this._getCreateEventData() );
++		this._init();
++	},
++	_getCreateOptions: $.noop,
++	_getCreateEventData: $.noop,
++	_create: $.noop,
++	_init: $.noop,
++
++	destroy: function() {
++		this._destroy();
++		// we can probably remove the unbind calls in 2.0
++		// all event bindings should go through this._on()
++		this.element
++			.unbind( this.eventNamespace )
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			.removeData( this.widgetName )
++			.removeData( this.widgetFullName )
++			// support: jquery <1.6.3
++			// http://bugs.jquery.com/ticket/9413
++			.removeData( $.camelCase( this.widgetFullName ) );
++		this.widget()
++			.unbind( this.eventNamespace )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetFullName + "-disabled " +
++				"ui-state-disabled" );
++
++		// clean up events and states
++		this.bindings.unbind( this.eventNamespace );
++		this.hoverable.removeClass( "ui-state-hover" );
++		this.focusable.removeClass( "ui-state-focus" );
++	},
++	_destroy: $.noop,
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key,
++			parts,
++			curOption,
++			i;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.widget.extend( {}, this.options );
++		}
++
++		if ( typeof key === "string" ) {
++			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
++			options = {};
++			parts = key.split( "." );
++			key = parts.shift();
++			if ( parts.length ) {
++				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
++				for ( i = 0; i < parts.length - 1; i++ ) {
++					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
++					curOption = curOption[ parts[ i ] ];
++				}
++				key = parts.pop();
++				if ( value === undefined ) {
++					return curOption[ key ] === undefined ? null : curOption[ key ];
++				}
++				curOption[ key ] = value;
++			} else {
++				if ( value === undefined ) {
++					return this.options[ key ] === undefined ? null : this.options[ key ];
++				}
++				options[ key ] = value;
++			}
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var key;
++
++		for ( key in options ) {
++			this._setOption( key, options[ key ] );
++		}
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
++				.attr( "aria-disabled", value );
++			this.hoverable.removeClass( "ui-state-hover" );
++			this.focusable.removeClass( "ui-state-focus" );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_on: function( element, handlers ) {
++		// no element argument, shuffle and use this.element
++		if ( !handlers ) {
++			handlers = element;
++			element = this.element;
++		} else {
++			// accept selectors, DOM elements
++			element = $( element );
++			this.bindings = this.bindings.add( element );
++		}
++
++		var instance = this;
++		$.each( handlers, function( event, handler ) {
++			function handlerProxy() {
++				// allow widgets to customize the disabled handling
++				// - disabled as an array instead of boolean
++				// - disabled class as method for disabling individual parts
++				if ( instance.options.disabled === true ||
++						$( this ).hasClass( "ui-state-disabled" ) ) {
++					return;
++				}
++				return ( typeof handler === "string" ? instance[ handler ] : handler )
++					.apply( instance, arguments );
++			}
++
++			// copy the guid so direct unbinding works
++			if ( typeof handler !== "string" ) {
++				handlerProxy.guid = handler.guid =
++					handler.guid || handlerProxy.guid || $.guid++;
++			}
++
++			var match = event.match( /^(\w+)\s*(.*)$/ ),
++				eventName = match[1] + instance.eventNamespace,
++				selector = match[2];
++			if ( selector ) {
++				instance.widget().delegate( selector, eventName, handlerProxy );
++			} else {
++				element.bind( eventName, handlerProxy );
++			}
++		});
++	},
++
++	_off: function( element, eventName ) {
++		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
++		element.unbind( eventName ).undelegate( eventName );
++	},
++
++	_delay: function( handler, delay ) {
++		function handlerProxy() {
++			return ( typeof handler === "string" ? instance[ handler ] : handler )
++				.apply( instance, arguments );
++		}
++		var instance = this;
++		return setTimeout( handlerProxy, delay || 0 );
++	},
++
++	_hoverable: function( element ) {
++		this.hoverable = this.hoverable.add( element );
++		this._on( element, {
++			mouseenter: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-hover" );
++			},
++			mouseleave: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-hover" );
++			}
++		});
++	},
++
++	_focusable: function( element ) {
++		this.focusable = this.focusable.add( element );
++		this._on( element, {
++			focusin: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-focus" );
++			},
++			focusout: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-focus" );
++			}
++		});
++	},
++
++	_trigger: function( type, event, data ) {
++		var prop, orig,
++			callback = this.options[ type ];
++
++		data = data || {};
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		// the original event may come from any element
++		// so we need to reset the target on the new event
++		event.target = this.element[ 0 ];
++
++		// copy original event properties over to the new event
++		orig = event.originalEvent;
++		if ( orig ) {
++			for ( prop in orig ) {
++				if ( !( prop in event ) ) {
++					event[ prop ] = orig[ prop ];
++				}
++			}
++		}
++
++		this.element.trigger( event, data );
++		return !( $.isFunction( callback ) &&
++			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
++	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
++		if ( typeof options === "string" ) {
++			options = { effect: options };
++		}
++		var hasOptions,
++			effectName = !options ?
++				method :
++				options === true || typeof options === "number" ?
++					defaultEffect :
++					options.effect || defaultEffect;
++		options = options || {};
++		if ( typeof options === "number" ) {
++			options = { duration: options };
++		}
++		hasOptions = !$.isEmptyObject( options );
++		options.complete = callback;
++		if ( options.delay ) {
++			element.delay( options.delay );
++		}
++		if ( hasOptions && $.effects && ( $.effects.effect[ effectName ] || $.uiBackCompat !== false && $.effects[ effectName ] ) ) {
++			element[ method ]( options );
++		} else if ( effectName !== method && element[ effectName ] ) {
++			element[ effectName ]( options.duration, options.easing, callback );
++		} else {
++			element.queue(function( next ) {
++				$( this )[ method ]();
++				if ( callback ) {
++					callback.call( element[ 0 ] );
++				}
++				next();
++			});
++		}
++	};
++});
++
++// DEPRECATED
++if ( $.uiBackCompat !== false ) {
++	$.Widget.prototype._getCreateOptions = function() {
++		return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
++	};
++}
++
++}));
+diff -r 346666e9e1e0 bhdashboard/htdocs/js/tmpl.js
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/bhdashboard/htdocs/js/tmpl.js	Thu Oct 18 16:38:10 2012 -0500
+@@ -0,0 +1,1 @@
++(function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?![^%]*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){if(b)return{"\n":"\\n","\r":"\\r","\t":"\\t"," ":" "}[a]||"\\"+a;if(c)return c==="="?"'+_e("+d+")+'":"'+("+d+"||'')+'";if(e)return"';";if(f)return"_s+='"},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#39;"},b.encode=function(a){return String(a||"").replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e&&(s||'')||_e(s);},include=function(s,d){_s+=tmpl(s,d);}",typeof define=="function"&&define.amd?define(function(){return b}):a.tmpl=b})(this);
+\ No newline at end of file