You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2016/11/23 15:50:49 UTC

svn commit: r1770992 [22/23] - in /myfaces/tobago/trunk: src/site/fml/ tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/ tobago-theme/ tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/ tobago-theme/tobago-theme-c...

Added: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/tether/1.1.1/js/tether.min.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/tether/1.1.1/js/tether.min.js?rev=1770992&view=auto
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/tether/1.1.1/js/tether.min.js (added)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/tether/1.1.1/js/tether.min.js Wed Nov 23 15:50:47 2016
@@ -0,0 +1 @@
+!function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e(require,exports,module):t.Tether=e()}(this,function(t,e,o){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t){var e=getComputedStyle(t),o=e.position;if("fixed"===o)return t;for(var i=t;i=i.parentNode;){var n=void 0;try{n=getComputedStyle(i)}catch(r){}if("undefined"==typeof n||null===n)return i;var s=n,a=s.overflow,f=s.overflowX,h=s.overflowY;if(/(auto|scroll)/.test(a+h+f)&&("absolute"!==o||["relative","absolute","fixed"].indexOf(n.position)>=0))return i}return document.body}function r(t){var e=void 0;t===document?(e=document,t=document.documentElement):e=t.ownerDocument;var o=e.documentElement,i={},n=t.getBoundingClientRect();for(var r in n)i[r]=n[r];var s=x(e);return i.top-=s.top,i.left-=s.left,"undefined"==typeof i.width&&(i.width=document.body.scrollWidth-i.left-i.right),"undefined"==typeof i.height&&(i.heig
 ht=document.body.scrollHeight-i.top-i.bottom),i.top=i.top-o.clientTop,i.left=i.left-o.clientLeft,i.right=e.body.clientWidth-i.width-i.left,i.bottom=e.body.clientHeight-i.height-i.top,i}function s(t){return t.offsetParent||document.documentElement}function a(){var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");f(e.style,{position:"absolute",top:0,left:0,pointerEvents:"none",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);var o=t.offsetWidth;e.style.overflow="scroll";var i=t.offsetWidth;o===i&&(i=e.clientWidth),document.body.removeChild(e);var n=o-i;return{width:n,height:n}}function f(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],e=[];return Array.prototype.push.apply(e,arguments),e.slice(1).forEach(function(e){if(e)for(var o in e)({}).hasOwnProperty.call(e,o)&&(t[o]=e[o])}),t}function h(t,e){if("undefined"!=typeof t.classList)e.split
 (" ").forEach(function(e){e.trim()&&t.classList.remove(e)});else{var o=new RegExp("(^| )"+e.split(" ").join("|")+"( |$)","gi"),i=u(t).replace(o," ");p(t,i)}}function l(t,e){if("undefined"!=typeof t.classList)e.split(" ").forEach(function(e){e.trim()&&t.classList.add(e)});else{h(t,e);var o=u(t)+(" "+e);p(t,o)}}function d(t,e){if("undefined"!=typeof t.classList)return t.classList.contains(e);var o=u(t);return new RegExp("(^| )"+e+"( |$)","gi").test(o)}function u(t){return t.className instanceof SVGAnimatedString?t.className.baseVal:t.className}function p(t,e){t.setAttribute("class",e)}function c(t,e,o){o.forEach(function(o){-1===e.indexOf(o)&&d(t,o)&&h(t,o)}),e.forEach(function(e){d(t,e)||l(t,e)})}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function g(t,e){var o=arguments.length<=2||void 0===arguments[2]?1:arguments[2];return t+o>=e&&e>=t-o}function m(){return"undefined"!=typeof performance&&"undefined"!=typeof performance.now?performa
 nce.now():+new Date}function v(){for(var t={top:0,left:0},e=arguments.length,o=Array(e),i=0;e>i;i++)o[i]=arguments[i];return o.forEach(function(e){var o=e.top,i=e.left;"string"==typeof o&&(o=parseFloat(o,10)),"string"==typeof i&&(i=parseFloat(i,10)),t.top+=o,t.left+=i}),t}function y(t,e){return"string"==typeof t.left&&-1!==t.left.indexOf("%")&&(t.left=parseFloat(t.left,10)/100*e.width),"string"==typeof t.top&&-1!==t.top.indexOf("%")&&(t.top=parseFloat(t.top,10)/100*e.height),t}function b(t,e){return"scrollParent"===e?e=t.scrollParent:"window"===e&&(e=[pageXOffset,pageYOffset,innerWidth+pageXOffset,innerHeight+pageYOffset]),e===document&&(e=e.documentElement),"undefined"!=typeof e.nodeType&&!function(){var t=r(e),o=t,i=getComputedStyle(e);e=[o.left,o.top,t.width+o.left,t.height+o.top],U.forEach(function(t,o){t=t[0].toUpperCase()+t.substr(1),"Top"===t||"Left"===t?e[o]+=parseFloat(i["border"+t+"Width"]):e[o]-=parseFloat(i["border"+t+"Width"])})}(),e}var w=function(){function t(t,e){for
 (var o=0;o<e.length;o++){var i=e[o];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,o,i){return o&&t(e.prototype,o),i&&t(e,i),e}}(),C=void 0;"undefined"==typeof C&&(C={modules:[]});var O=function(){var t=0;return function(){return++t}}(),E={},x=function(t){var e=t._tetherZeroElement;"undefined"==typeof e&&(e=t.createElement("div"),e.setAttribute("data-tether-id",O()),f(e.style,{top:0,left:0,position:"absolute"}),t.body.appendChild(e),t._tetherZeroElement=e);var o=e.getAttribute("data-tether-id");if("undefined"==typeof E[o]){E[o]={};var i=e.getBoundingClientRect();for(var n in i)E[o][n]=i[n];T(function(){delete E[o]})}return E[o]},A=[],T=function(t){A.push(t)},S=function(){for(var t=void 0;t=A.pop();)t()},W=function(){function t(){i(this,t)}return w(t,[{key:"on",value:function(t,e,o){var i=arguments.length<=3||void 0===arguments[3]?!1:arguments[3];"undefined"==typeof this.bindings&&(this.bindings={}),"un
 defined"==typeof this.bindings[t]&&(this.bindings[t]=[]),this.bindings[t].push({handler:e,ctx:o,once:i})}},{key:"once",value:function(t,e,o){this.on(t,e,o,!0)}},{key:"off",value:function(t,e){if("undefined"==typeof this.bindings||"undefined"==typeof this.bindings[t])if("undefined"==typeof e)delete this.bindings[t];else for(var o=0;o<this.bindings[t].length;)this.bindings[t][o].handler===e?this.bindings[t].splice(o,1):++o}},{key:"trigger",value:function(t){if("undefined"!=typeof this.bindings&&this.bindings[t]){for(var e=0,o=arguments.length,i=Array(o>1?o-1:0),n=1;o>n;n++)i[n-1]=arguments[n];for(;e<this.bindings[t].length;){var r=this.bindings[t][e],s=r.handler,a=r.ctx,f=r.once,h=a;"undefined"==typeof h&&(h=this),s.apply(h,i),f?this.bindings[t].splice(e,1):++e}}}}]),t}();C.Utils={getScrollParent:n,getBounds:r,getOffsetParent:s,extend:f,addClass:l,removeClass:h,hasClass:d,updateClasses:c,defer:T,flush:S,uniqueId:O,Evented:W,getScrollBarSize:a};var M=function(){function t(t,e){var o=[]
 ,i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),w=function(){function t(t,e){for(var o=0;o<e.length;o++){var i=e[o];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,o,i){return o&&t(e.prototype,o),i&&t(e,i),e}}();if("undefined"==typeof C)throw new Error("You must include the utils.js file before tether.js");var P=C.Utils,n=P.getScrollParent,r=P.getBounds,s=P.getOffsetParent,f=P.extend,l=P.addClass,h=P.removeClass,c=P.updateClasses,T=P.defer,S=P.flush,a=P.getScrollBarSize,k=function(){if("undefined"==typeof document)return"";for(var t=document.createElement("div"),e=["
 transform","webkitTransform","OTransform","MozTransform","msTransform"],o=0;o<e.length;++o){var i=e[o];if(void 0!==t.style[i])return i}}(),B=[],_=function(){B.forEach(function(t){t.position(!1)}),S()};!function(){var t=null,e=null,o=null,i=function n(){return"undefined"!=typeof e&&e>16?(e=Math.min(e-16,250),void(o=setTimeout(n,250))):void("undefined"!=typeof t&&m()-t<10||("undefined"!=typeof o&&(clearTimeout(o),o=null),t=m(),_(),e=m()-t))};"undefined"!=typeof window&&["resize","scroll","touchmove"].forEach(function(t){window.addEventListener(t,i)})}();var z={center:"center",left:"right",right:"left"},F={middle:"middle",top:"bottom",bottom:"top"},L={top:0,left:0,middle:"50%",center:"50%",bottom:"100%",right:"100%"},Y=function(t,e){var o=t.left,i=t.top;return"auto"===o&&(o=z[e.left]),"auto"===i&&(i=F[e.top]),{left:o,top:i}},H=function(t){var e=t.left,o=t.top;return"undefined"!=typeof L[t.left]&&(e=L[t.left]),"undefined"!=typeof L[t.top]&&(o=L[t.top]),{left:e,top:o}},X=function(t){var 
 e=t.split(" "),o=M(e,2),i=o[0],n=o[1];return{top:i,left:n}},j=X,N=function(){function t(e){var o=this;i(this,t),this.position=this.position.bind(this),B.push(this),this.history=[],this.setOptions(e,!1),C.modules.forEach(function(t){"undefined"!=typeof t.initialize&&t.initialize.call(o)}),this.position()}return w(t,[{key:"getClass",value:function(){var t=arguments.length<=0||void 0===arguments[0]?"":arguments[0],e=this.options.classes;return"undefined"!=typeof e&&e[t]?this.options.classes[t]:this.options.classPrefix?this.options.classPrefix+"-"+t:t}},{key:"setOptions",value:function(t){var e=this,o=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],i={offset:"0 0",targetOffset:"0 0",targetAttachment:"auto auto",classPrefix:"tether"};this.options=f(i,t);var r=this.options,s=r.element,a=r.target,h=r.targetModifier;if(this.element=s,this.target=a,this.targetModifier=h,"viewport"===this.target?(this.target=document.body,this.targetModifier="visible"):"scroll-handle"===this.target
 &&(this.target=document.body,this.targetModifier="scroll-handle"),["element","target"].forEach(function(t){if("undefined"==typeof e[t])throw new Error("Tether Error: Both element and target must be defined");"undefined"!=typeof e[t].jquery?e[t]=e[t][0]:"string"==typeof e[t]&&(e[t]=document.querySelector(e[t]))}),l(this.element,this.getClass("element")),this.options.addTargetClasses!==!1&&l(this.target,this.getClass("target")),!this.options.attachment)throw new Error("Tether Error: You must provide an attachment");this.targetAttachment=j(this.options.targetAttachment),this.attachment=j(this.options.attachment),this.offset=X(this.options.offset),this.targetOffset=X(this.options.targetOffset),"undefined"!=typeof this.scrollParent&&this.disable(),"scroll-handle"===this.targetModifier?this.scrollParent=this.target:this.scrollParent=n(this.target),this.options.enabled!==!1&&this.enable(o)}},{key:"getTargetBounds",value:function(){if("undefined"==typeof this.targetModifier)return r(this.ta
 rget);if("visible"===this.targetModifier){if(this.target===document.body)return{top:pageYOffset,left:pageXOffset,height:innerHeight,width:innerWidth};var t=r(this.target),e={height:t.height,width:t.width,top:t.top,left:t.left};return e.height=Math.min(e.height,t.height-(pageYOffset-t.top)),e.height=Math.min(e.height,t.height-(t.top+t.height-(pageYOffset+innerHeight))),e.height=Math.min(innerHeight,e.height),e.height-=2,e.width=Math.min(e.width,t.width-(pageXOffset-t.left)),e.width=Math.min(e.width,t.width-(t.left+t.width-(pageXOffset+innerWidth))),e.width=Math.min(innerWidth,e.width),e.width-=2,e.top<pageYOffset&&(e.top=pageYOffset),e.left<pageXOffset&&(e.left=pageXOffset),e}if("scroll-handle"===this.targetModifier){var t=void 0,o=this.target;o===document.body?(o=document.documentElement,t={left:pageXOffset,top:pageYOffset,height:innerHeight,width:innerWidth}):t=r(o);var i=getComputedStyle(o),n=o.scrollWidth>o.clientWidth||[i.overflow,i.overflowX].indexOf("scroll")>=0||this.target!=
 =document.body,s=0;n&&(s=15);var a=t.height-parseFloat(i.borderTopWidth)-parseFloat(i.borderBottomWidth)-s,e={width:15,height:.975*a*(a/o.scrollHeight),left:t.left+t.width-parseFloat(i.borderLeftWidth)-15},f=0;408>a&&this.target===document.body&&(f=-11e-5*Math.pow(a,2)-.00727*a+22.58),this.target!==document.body&&(e.height=Math.max(e.height,24));var h=this.target.scrollTop/(o.scrollHeight-a);return e.top=h*(a-e.height-f)+t.top+parseFloat(i.borderTopWidth),this.target===document.body&&(e.height=Math.max(e.height,24)),e}}},{key:"clearCache",value:function(){this._cache={}}},{key:"cache",value:function(t,e){return"undefined"==typeof this._cache&&(this._cache={}),"undefined"==typeof this._cache[t]&&(this._cache[t]=e.call(this)),this._cache[t]}},{key:"enable",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!0:arguments[0];this.options.addTargetClasses!==!1&&l(this.target,this.getClass("enabled")),l(this.element,this.getClass("enabled")),this.enabled=!0,this.scrollParent
 !==document&&this.scrollParent.addEventListener("scroll",this.position),t&&this.position()}},{key:"disable",value:function(){h(this.target,this.getClass("enabled")),h(this.element,this.getClass("enabled")),this.enabled=!1,"undefined"!=typeof this.scrollParent&&this.scrollParent.removeEventListener("scroll",this.position)}},{key:"destroy",value:function(){var t=this;this.disable(),B.forEach(function(e,o){return e===t?void B.splice(o,1):void 0})}},{key:"updateAttachClasses",value:function(t,e){var o=this;t=t||this.attachment,e=e||this.targetAttachment;var i=["left","top","bottom","right","middle","center"];"undefined"!=typeof this._addAttachClasses&&this._addAttachClasses.length&&this._addAttachClasses.splice(0,this._addAttachClasses.length),"undefined"==typeof this._addAttachClasses&&(this._addAttachClasses=[]);var n=this._addAttachClasses;t.top&&n.push(this.getClass("element-attached")+"-"+t.top),t.left&&n.push(this.getClass("element-attached")+"-"+t.left),e.top&&n.push(this.getClas
 s("target-attached")+"-"+e.top),e.left&&n.push(this.getClass("target-attached")+"-"+e.left);var r=[];i.forEach(function(t){r.push(o.getClass("element-attached")+"-"+t),r.push(o.getClass("target-attached")+"-"+t)}),T(function(){"undefined"!=typeof o._addAttachClasses&&(c(o.element,o._addAttachClasses,r),o.options.addTargetClasses!==!1&&c(o.target,o._addAttachClasses,r),delete o._addAttachClasses)})}},{key:"position",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]?!0:arguments[0];if(this.enabled){this.clearCache();var o=Y(this.targetAttachment,this.attachment);this.updateAttachClasses(this.attachment,o);var i=this.cache("element-bounds",function(){return r(t.element)}),n=i.width,f=i.height;if(0===n&&0===f&&"undefined"!=typeof this.lastSize){var h=this.lastSize;n=h.width,f=h.height}else this.lastSize={width:n,height:f};var l=this.cache("target-bounds",function(){return t.getTargetBounds()}),d=l,u=y(H(this.attachment),{width:n,height:f}),p=y(H(o),d),c=y(this.off
 set,{width:n,height:f}),g=y(this.targetOffset,d);u=v(u,c),p=v(p,g);for(var m=l.left+p.left-u.left,b=l.top+p.top-u.top,w=0;w<C.modules.length;++w){var O=C.modules[w],E=O.position.call(this,{left:m,top:b,targetAttachment:o,targetPos:l,elementPos:i,offset:u,targetOffset:p,manualOffset:c,manualTargetOffset:g,scrollbarSize:A,attachment:this.attachment});if(E===!1)return!1;"undefined"!=typeof E&&"object"==typeof E&&(b=E.top,m=E.left)}var x={page:{top:b,left:m},viewport:{top:b-pageYOffset,bottom:pageYOffset-b-f+innerHeight,left:m-pageXOffset,right:pageXOffset-m-n+innerWidth}},A=void 0;return document.body.scrollWidth>window.innerWidth&&(A=this.cache("scrollbar-size",a),x.viewport.bottom-=A.height),document.body.scrollHeight>window.innerHeight&&(A=this.cache("scrollbar-size",a),x.viewport.right-=A.width),(-1===["","static"].indexOf(document.body.style.position)||-1===["","static"].indexOf(document.body.parentElement.style.position))&&(x.page.bottom=document.body.scrollHeight-b-f,x.page.righ
 t=document.body.scrollWidth-m-n),"undefined"!=typeof this.options.optimizations&&this.options.optimizations.moveElement!==!1&&"undefined"==typeof this.targetModifier&&!function(){var e=t.cache("target-offsetparent",function(){return s(t.target)}),o=t.cache("target-offsetparent-bounds",function(){return r(e)}),i=getComputedStyle(e),n=o,a={};if(["Top","Left","Bottom","Right"].forEach(function(t){a[t.toLowerCase()]=parseFloat(i["border"+t+"Width"])}),o.right=document.body.scrollWidth-o.left-n.width+a.right,o.bottom=document.body.scrollHeight-o.top-n.height+a.bottom,x.page.top>=o.top+a.top&&x.page.bottom>=o.bottom&&x.page.left>=o.left+a.left&&x.page.right>=o.right){var f=e.scrollTop,h=e.scrollLeft;x.offset={top:x.page.top-o.top+f-a.top,left:x.page.left-o.left+h-a.left}}}(),this.move(x),this.history.unshift(x),this.history.length>3&&this.history.pop(),e&&S(),!0}}},{key:"move",value:function(t){var e=this;if("undefined"!=typeof this.element.parentNode){var o={};for(var i in t){o[i]={};for
 (var n in t[i]){for(var r=!1,a=0;a<this.history.length;++a){var h=this.history[a];if("undefined"!=typeof h[i]&&!g(h[i][n],t[i][n])){r=!0;break}}r||(o[i][n]=!0)}}var l={top:"",left:"",right:"",bottom:""},d=function(t,o){var i="undefined"!=typeof e.options.optimizations,n=i?e.options.optimizations.gpu:null;if(n!==!1){var r=void 0,s=void 0;t.top?(l.top=0,r=o.top):(l.bottom=0,r=-o.bottom),t.left?(l.left=0,s=o.left):(l.right=0,s=-o.right),l[k]="translateX("+Math.round(s)+"px) translateY("+Math.round(r)+"px)","msTransform"!==k&&(l[k]+=" translateZ(0)")}else t.top?l.top=o.top+"px":l.bottom=o.bottom+"px",t.left?l.left=o.left+"px":l.right=o.right+"px"},u=!1;if((o.page.top||o.page.bottom)&&(o.page.left||o.page.right)?(l.position="absolute",d(o.page,t.page)):(o.viewport.top||o.viewport.bottom)&&(o.viewport.left||o.viewport.right)?(l.position="fixed",d(o.viewport,t.viewport)):"undefined"!=typeof o.offset&&o.offset.top&&o.offset.left?!function(){l.position="absolute";var i=e.cache("target-offset
 parent",function(){return s(e.target)});s(e.element)!==i&&T(function(){e.element.parentNode.removeChild(e.element),i.appendChild(e.element)}),d(o.offset,t.offset),u=!0}():(l.position="absolute",d({top:!0,left:!0},t.page)),!u){for(var p=!0,c=this.element.parentNode;c&&"BODY"!==c.tagName;){if("static"!==getComputedStyle(c).position){p=!1;break}c=c.parentNode}p||(this.element.parentNode.removeChild(this.element),document.body.appendChild(this.element))}var m={},v=!1;for(var n in l){var y=l[n],b=this.element.style[n];""!==b&&""!==y&&["top","left","bottom","right"].indexOf(n)>=0&&(b=parseFloat(b),y=parseFloat(y)),b!==y&&(v=!0,m[n]=y)}v&&T(function(){f(e.element.style,m)})}}}]),t}();N.modules=[],C.position=_;var R=f(N,C),M=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o)
 {if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),P=C.Utils,r=P.getBounds,f=P.extend,c=P.updateClasses,T=P.defer,U=["left","top","right","bottom"];C.modules.push({position:function(t){var e=this,o=t.top,i=t.left,n=t.targetAttachment;if(!this.options.constraints)return!0;var s=this.cache("element-bounds",function(){return r(e.element)}),a=s.height,h=s.width;if(0===h&&0===a&&"undefined"!=typeof this.lastSize){var l=this.lastSize;h=l.width,a=l.height}var d=this.cache("target-bounds",function(){return e.getTargetBounds()}),u=d.height,p=d.width,g=[this.getClass("pinned"),this.getClass("out-of-bounds")];this.options.constraints.forEach(function(t){var e=t.outOfBoundsClass,o=t.pinnedClass;e&&g.push(e),o&&g.push(o)}),g.forEach(function(t){["left","top","right","bottom"].forEach(function(e){g.push(t+"-"+e)})});var m=[],v=f({},n),y=f({},this.attachment);return this.options.constraints.for
 Each(function(t){var r=t.to,s=t.attachment,f=t.pin;"undefined"==typeof s&&(s="");var l=void 0,d=void 0;if(s.indexOf(" ")>=0){var c=s.split(" "),g=M(c,2);d=g[0],l=g[1]}else l=d=s;var w=b(e,r);("target"===d||"both"===d)&&(o<w[1]&&"top"===v.top&&(o+=u,v.top="bottom"),o+a>w[3]&&"bottom"===v.top&&(o-=u,v.top="top")),"together"===d&&(o<w[1]&&"top"===v.top&&("bottom"===y.top?(o+=u,v.top="bottom",o+=a,y.top="top"):"top"===y.top&&(o+=u,v.top="bottom",o-=a,y.top="bottom")),o+a>w[3]&&"bottom"===v.top&&("top"===y.top?(o-=u,v.top="top",o-=a,y.top="bottom"):"bottom"===y.top&&(o-=u,v.top="top",o+=a,y.top="top")),"middle"===v.top&&(o+a>w[3]&&"top"===y.top?(o-=a,y.top="bottom"):o<w[1]&&"bottom"===y.top&&(o+=a,y.top="top"))),("target"===l||"both"===l)&&(i<w[0]&&"left"===v.left&&(i+=p,v.left="right"),i+h>w[2]&&"right"===v.left&&(i-=p,v.left="left")),"together"===l&&(i<w[0]&&"left"===v.left?"right"===y.left?(i+=p,v.left="right",i+=h,y.left="left"):"left"===y.left&&(i+=p,v.left="right",i-=h,y.left="righ
 t"):i+h>w[2]&&"right"===v.left?"left"===y.left?(i-=p,v.left="left",i-=h,y.left="right"):"right"===y.left&&(i-=p,v.left="left",i+=h,y.left="left"):"center"===v.left&&(i+h>w[2]&&"left"===y.left?(i-=h,y.left="right"):i<w[0]&&"right"===y.left&&(i+=h,y.left="left"))),("element"===d||"both"===d)&&(o<w[1]&&"bottom"===y.top&&(o+=a,y.top="top"),o+a>w[3]&&"top"===y.top&&(o-=a,y.top="bottom")),("element"===l||"both"===l)&&(i<w[0]&&"right"===y.left&&(i+=h,y.left="left"),i+h>w[2]&&"left"===y.left&&(i-=h,y.left="right")),"string"==typeof f?f=f.split(",").map(function(t){return t.trim()}):f===!0&&(f=["top","left","right","bottom"]),f=f||[];var C=[],O=[];o<w[1]&&(f.indexOf("top")>=0?(o=w[1],C.push("top")):O.push("top")),o+a>w[3]&&(f.indexOf("bottom")>=0?(o=w[3]-a,C.push("bottom")):O.push("bottom")),i<w[0]&&(f.indexOf("left")>=0?(i=w[0],C.push("left")):O.push("left")),i+h>w[2]&&(f.indexOf("right")>=0?(i=w[2]-h,C.push("right")):O.push("right")),C.length&&!function(){var t=void 0;t="undefined"!=typeof
  e.options.pinnedClass?e.options.pinnedClass:e.getClass("pinned"),m.push(t),C.forEach(function(e){m.push(t+"-"+e)})}(),O.length&&!function(){var t=void 0;t="undefined"!=typeof e.options.outOfBoundsClass?e.options.outOfBoundsClass:e.getClass("out-of-bounds"),m.push(t),O.forEach(function(e){m.push(t+"-"+e)})}(),(C.indexOf("left")>=0||C.indexOf("right")>=0)&&(y.left=v.left=!1),(C.indexOf("top")>=0||C.indexOf("bottom")>=0)&&(y.top=v.top=!1),(v.top!==n.top||v.left!==n.left||y.top!==e.attachment.top||y.left!==e.attachment.left)&&e.updateAttachClasses(y,v)}),T(function(){e.options.addTargetClasses!==!1&&c(e.target,m,g),c(e.element,m,g)}),{top:o,left:i}}});var P=C.Utils,r=P.getBounds,c=P.updateClasses,T=P.defer;C.modules.push({position:function(t){var e=this,o=t.top,i=t.left,n=this.cache("element-bounds",function(){return r(e.element)}),s=n.height,a=n.width,f=this.getTargetBounds(),h=o+s,l=i+a,d=[];o<=f.bottom&&h>=f.top&&["left","right"].forEach(function(t){var e=f[t];(e===i||e===l)&&d.push
 (t)}),i<=f.right&&l>=f.left&&["top","bottom"].forEach(function(t){var e=f[t];(e===o||e===h)&&d.push(t)});var u=[],p=[],g=["left","top","right","bottom"];return u.push(this.getClass("abutted")),g.forEach(function(t){u.push(e.getClass("abutted")+"-"+t)}),d.length&&p.push(this.getClass("abutted")),d.forEach(function(t){p.push(e.getClass("abutted")+"-"+t)}),T(function(){e.options.addTargetClasses!==!1&&c(e.target,p,u),c(e.element,p,u)}),!0}});var M=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();return C.modules.push({position:function(t){var e=t.top,o=t.left;if(this.options.shift){var i=this.options.shift;"function
 "==typeof this.options.shift&&(i=this.options.shift.call(this,{top:e,left:o}));var n=void 0,r=void 0;if("string"==typeof i){i=i.split(" "),i[1]=i[1]||i[0];var s=i,a=M(s,2);n=a[0],r=a[1],n=parseFloat(n,10),r=parseFloat(r,10)}else n=i.top,r=i.left;return e+=n,o+=r,{top:e,left:o}}}}),R});
\ No newline at end of file

Propchange: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/tether/1.1.1/js/tether.min.js
------------------------------------------------------------------------------
    svn:executable = *

Added: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/typeahead/0.11.1-patched-with-1212/typeahead.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/typeahead/0.11.1-patched-with-1212/typeahead.js?rev=1770992&view=auto
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/typeahead/0.11.1-patched-with-1212/typeahead.js (added)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/typeahead/0.11.1-patched-with-1212/typeahead.js Wed Nov 23 15:50:47 2016
@@ -0,0 +1,1540 @@
+/*!
+ * typeahead.js 0.11.1-patched-with-1212 (including patch https://github.com/twitter/typeahead.js/pull/1212)
+ * https://github.com/twitter/typeahead.js
+ * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT
+ */
+
+(function(root, factory) {
+  if (typeof define === "function" && define.amd) {
+    define("typeahead.js", [ "jquery" ], function(a0) {
+      return factory(a0);
+    });
+  } else if (typeof exports === "object") {
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+})(this, function($) {
+  var _ = function() {
+    "use strict";
+    return {
+      isMsie: function() {
+        return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+      },
+      isBlankString: function(str) {
+        return !str || /^\s*$/.test(str);
+      },
+      escapeRegExChars: function(str) {
+        return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+      },
+      isString: function(obj) {
+        return typeof obj === "string";
+      },
+      isNumber: function(obj) {
+        return typeof obj === "number";
+      },
+      isArray: $.isArray,
+      isFunction: $.isFunction,
+      isObject: $.isPlainObject,
+      isUndefined: function(obj) {
+        return typeof obj === "undefined";
+      },
+      isElement: function(obj) {
+        return !!(obj && obj.nodeType === 1);
+      },
+      isJQuery: function(obj) {
+        return obj instanceof $;
+      },
+      toStr: function toStr(s) {
+        return _.isUndefined(s) || s === null ? "" : s + "";
+      },
+      bind: $.proxy,
+      each: function(collection, cb) {
+        $.each(collection, reverseArgs);
+        function reverseArgs(index, value) {
+          return cb(value, index);
+        }
+      },
+      map: $.map,
+      filter: $.grep,
+      every: function(obj, test) {
+        var result = true;
+        if (!obj) {
+          return result;
+        }
+        $.each(obj, function(key, val) {
+          if (!(result = test.call(null, val, key, obj))) {
+            return false;
+          }
+        });
+        return !!result;
+      },
+      some: function(obj, test) {
+        var result = false;
+        if (!obj) {
+          return result;
+        }
+        $.each(obj, function(key, val) {
+          if (result = test.call(null, val, key, obj)) {
+            return false;
+          }
+        });
+        return !!result;
+      },
+      mixin: $.extend,
+      identity: function(x) {
+        return x;
+      },
+      clone: function(obj) {
+        return $.extend(true, {}, obj);
+      },
+      getIdGenerator: function() {
+        var counter = 0;
+        return function() {
+          return counter++;
+        };
+      },
+      templatify: function templatify(obj) {
+        return $.isFunction(obj) ? obj : template;
+        function template() {
+          return String(obj);
+        }
+      },
+      defer: function(fn) {
+        setTimeout(fn, 0);
+      },
+      debounce: function(func, wait, immediate) {
+        var timeout, result;
+        return function() {
+          var context = this, args = arguments, later, callNow;
+          later = function() {
+            timeout = null;
+            if (!immediate) {
+              result = func.apply(context, args);
+            }
+          };
+          callNow = immediate && !timeout;
+          clearTimeout(timeout);
+          timeout = setTimeout(later, wait);
+          if (callNow) {
+            result = func.apply(context, args);
+          }
+          return result;
+        };
+      },
+      throttle: function(func, wait) {
+        var context, args, timeout, result, previous, later;
+        previous = 0;
+        later = function() {
+          previous = new Date();
+          timeout = null;
+          result = func.apply(context, args);
+        };
+        return function() {
+          var now = new Date(), remaining = wait - (now - previous);
+          context = this;
+          args = arguments;
+          if (remaining <= 0) {
+            clearTimeout(timeout);
+            timeout = null;
+            previous = now;
+            result = func.apply(context, args);
+          } else if (!timeout) {
+            timeout = setTimeout(later, remaining);
+          }
+          return result;
+        };
+      },
+      stringify: function(val) {
+        return _.isString(val) ? val : JSON.stringify(val);
+      },
+      noop: function() {}
+    };
+  }();
+  var WWW = function() {
+    "use strict";
+    var defaultClassNames = {
+      wrapper: "twitter-typeahead",
+      input: "tt-input",
+      hint: "tt-hint",
+      menu: "tt-menu",
+      dataset: "tt-dataset",
+      suggestion: "tt-suggestion",
+      selectable: "tt-selectable",
+      empty: "tt-empty",
+      open: "tt-open",
+      cursor: "tt-cursor",
+      highlight: "tt-highlight"
+    };
+    return build;
+    function build(o) {
+      var www, classes;
+      classes = _.mixin({}, defaultClassNames, o);
+      www = {
+        css: buildCss(),
+        classes: classes,
+        html: buildHtml(classes),
+        selectors: buildSelectors(classes)
+      };
+      return {
+        css: www.css,
+        html: www.html,
+        classes: www.classes,
+        selectors: www.selectors,
+        mixin: function(o) {
+          _.mixin(o, www);
+        }
+      };
+    }
+    function buildHtml(c) {
+      return {
+        wrapper: '<span class="' + c.wrapper + '"></span>',
+        menu: '<div class="' + c.menu + '"></div>'
+      };
+    }
+    function buildSelectors(classes) {
+      var selectors = {};
+      _.each(classes, function(v, k) {
+        selectors[k] = "." + v;
+      });
+      return selectors;
+    }
+    function buildCss() {
+      var css = {
+        wrapper: {
+          position: "relative",
+          display: "inline-block"
+        },
+        hint: {
+          position: "absolute",
+          top: "0",
+          left: "0",
+          borderColor: "transparent",
+          boxShadow: "none",
+          opacity: "1"
+        },
+        input: {
+          position: "relative",
+          verticalAlign: "top",
+          backgroundColor: "transparent"
+        },
+        inputWithNoHint: {
+          position: "relative",
+          verticalAlign: "top"
+        },
+        menu: {
+          position: "absolute",
+          top: "100%",
+          left: "0",
+          zIndex: "100",
+          display: "none"
+        },
+        ltr: {
+          left: "0",
+          right: "auto"
+        },
+        rtl: {
+          left: "auto",
+          right: " 0"
+        }
+      };
+      if (_.isMsie()) {
+        _.mixin(css.input, {
+          backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
+        });
+      }
+      return css;
+    }
+  }();
+  var EventBus = function() {
+    "use strict";
+    var namespace, deprecationMap;
+    namespace = "typeahead:";
+    deprecationMap = {
+      render: "rendered",
+      cursorchange: "cursorchanged",
+      select: "selected",
+      autocomplete: "autocompleted"
+    };
+    function EventBus(o) {
+      if (!o || !o.el) {
+        $.error("EventBus initialized without el");
+      }
+      this.$el = $(o.el);
+    }
+    _.mixin(EventBus.prototype, {
+      _trigger: function(type, args) {
+        var $e;
+        $e = $.Event(namespace + type);
+        (args = args || []).unshift($e);
+        this.$el.trigger.apply(this.$el, args);
+        return $e;
+      },
+      before: function(type) {
+        var args, $e;
+        args = [].slice.call(arguments, 1);
+        $e = this._trigger("before" + type, args);
+        return $e.isDefaultPrevented();
+      },
+      trigger: function(type) {
+        var deprecatedType;
+        this._trigger(type, [].slice.call(arguments, 1));
+        if (deprecatedType = deprecationMap[type]) {
+          this._trigger(deprecatedType, [].slice.call(arguments, 1));
+        }
+      }
+    });
+    return EventBus;
+  }();
+  var EventEmitter = function() {
+    "use strict";
+    var splitter = /\s+/, nextTick = getNextTick();
+    return {
+      onSync: onSync,
+      onAsync: onAsync,
+      off: off,
+      trigger: trigger
+    };
+    function on(method, types, cb, context) {
+      var type;
+      if (!cb) {
+        return this;
+      }
+      types = types.split(splitter);
+      cb = context ? bindContext(cb, context) : cb;
+      this._callbacks = this._callbacks || {};
+      while (type = types.shift()) {
+        this._callbacks[type] = this._callbacks[type] || {
+              sync: [],
+              async: []
+            };
+        this._callbacks[type][method].push(cb);
+      }
+      return this;
+    }
+    function onAsync(types, cb, context) {
+      return on.call(this, "async", types, cb, context);
+    }
+    function onSync(types, cb, context) {
+      return on.call(this, "sync", types, cb, context);
+    }
+    function off(types) {
+      var type;
+      if (!this._callbacks) {
+        return this;
+      }
+      types = types.split(splitter);
+      while (type = types.shift()) {
+        delete this._callbacks[type];
+      }
+      return this;
+    }
+    function trigger(types) {
+      var type, callbacks, args, syncFlush, asyncFlush;
+      if (!this._callbacks) {
+        return this;
+      }
+      types = types.split(splitter);
+      args = [].slice.call(arguments, 1);
+      while ((type = types.shift()) && (callbacks = this._callbacks[type])) {
+        syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));
+        asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));
+        syncFlush() && nextTick(asyncFlush);
+      }
+      return this;
+    }
+    function getFlush(callbacks, context, args) {
+      return flush;
+      function flush() {
+        var cancelled;
+        for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
+          cancelled = callbacks[i].apply(context, args) === false;
+        }
+        return !cancelled;
+      }
+    }
+    function getNextTick() {
+      var nextTickFn;
+      if (window.setImmediate) {
+        nextTickFn = function nextTickSetImmediate(fn) {
+          setImmediate(function() {
+            fn();
+          });
+        };
+      } else {
+        nextTickFn = function nextTickSetTimeout(fn) {
+          setTimeout(function() {
+            fn();
+          }, 0);
+        };
+      }
+      return nextTickFn;
+    }
+    function bindContext(fn, context) {
+      return fn.bind ? fn.bind(context) : function() {
+        fn.apply(context, [].slice.call(arguments, 0));
+      };
+    }
+  }();
+  var highlight = function(doc) {
+    "use strict";
+    var defaults = {
+      node: null,
+      pattern: null,
+      tagName: "strong",
+      className: null,
+      wordsOnly: false,
+      caseSensitive: false
+    };
+    return function hightlight(o) {
+      var regex;
+      o = _.mixin({}, defaults, o);
+      if (!o.node || !o.pattern) {
+        return;
+      }
+      o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];
+      regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);
+      traverse(o.node, hightlightTextNode);
+      function hightlightTextNode(textNode) {
+        var match, patternNode, wrapperNode;
+        if (match = regex.exec(textNode.data)) {
+          wrapperNode = doc.createElement(o.tagName);
+          o.className && (wrapperNode.className = o.className);
+          patternNode = textNode.splitText(match.index);
+          patternNode.splitText(match[0].length);
+          wrapperNode.appendChild(patternNode.cloneNode(true));
+          textNode.parentNode.replaceChild(wrapperNode, patternNode);
+        }
+        return !!match;
+      }
+      function traverse(el, hightlightTextNode) {
+        var childNode, TEXT_NODE_TYPE = 3;
+        for (var i = 0; i < el.childNodes.length; i++) {
+          childNode = el.childNodes[i];
+          if (childNode.nodeType === TEXT_NODE_TYPE) {
+            i += hightlightTextNode(childNode) ? 1 : 0;
+          } else {
+            traverse(childNode, hightlightTextNode);
+          }
+        }
+      }
+    };
+    function getRegex(patterns, caseSensitive, wordsOnly) {
+      var escapedPatterns = [], regexStr;
+      for (var i = 0, len = patterns.length; i < len; i++) {
+        escapedPatterns.push(_.escapeRegExChars(patterns[i]));
+      }
+      regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
+      return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");
+    }
+  }(window.document);
+  var Input = function() {
+    "use strict";
+    var specialKeyCodeMap;
+    specialKeyCodeMap = {
+      9: "tab",
+      27: "esc",
+      37: "left",
+      39: "right",
+      13: "enter",
+      38: "up",
+      40: "down"
+    };
+    function Input(o, www) {
+      o = o || {};
+      if (!o.input) {
+        $.error("input is missing");
+      }
+      www.mixin(this);
+      this.$hint = $(o.hint);
+      this.$input = $(o.input);
+      this.query = this.$input.val();
+      this.queryWhenFocused = this.hasFocus() ? this.query : null;
+      this.$overflowHelper = buildOverflowHelper(this.$input);
+      this._checkLanguageDirection();
+      if (this.$hint.length === 0) {
+        this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;
+      }
+    }
+    Input.normalizeQuery = function(str) {
+      return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " ");
+    };
+    _.mixin(Input.prototype, EventEmitter, {
+      _onBlur: function onBlur() {
+        this.resetInputValue();
+        this.trigger("blurred");
+      },
+      _onFocus: function onFocus() {
+        this.queryWhenFocused = this.query;
+        this.trigger("focused");
+      },
+      _onKeydown: function onKeydown($e) {
+        var keyName = specialKeyCodeMap[$e.which || $e.keyCode];
+        this._managePreventDefault(keyName, $e);
+        if (keyName && this._shouldTrigger(keyName, $e)) {
+          this.trigger(keyName + "Keyed", $e);
+        }
+      },
+      _onInput: function onInput() {
+        this._setQuery(this.getInputValue());
+        this.clearHintIfInvalid();
+        this._checkLanguageDirection();
+      },
+      _managePreventDefault: function managePreventDefault(keyName, $e) {
+        var preventDefault;
+        switch (keyName) {
+          case "up":
+          case "down":
+            preventDefault = !withModifier($e);
+            break;
+
+          default:
+            preventDefault = false;
+        }
+        preventDefault && $e.preventDefault();
+      },
+      _shouldTrigger: function shouldTrigger(keyName, $e) {
+        var trigger;
+        switch (keyName) {
+          case "tab":
+            trigger = !withModifier($e);
+            break;
+
+          default:
+            trigger = true;
+        }
+        return trigger;
+      },
+      _checkLanguageDirection: function checkLanguageDirection() {
+        var dir = (this.$input.css("direction") || "ltr").toLowerCase();
+        if (this.dir !== dir) {
+          this.dir = dir;
+          this.$hint.attr("dir", dir);
+          this.trigger("langDirChanged", dir);
+        }
+      },
+      _setQuery: function setQuery(val, silent) {
+        var areEquivalent, hasDifferentWhitespace;
+        areEquivalent = areQueriesEquivalent(val, this.query);
+        hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;
+        this.query = val;
+        if (!silent && !areEquivalent) {
+          this.trigger("queryChanged", this.query);
+        } else if (!silent && hasDifferentWhitespace) {
+          this.trigger("whitespaceChanged", this.query);
+        }
+      },
+      bind: function() {
+        var that = this, onBlur, onFocus, onKeydown, onInput;
+        onBlur = _.bind(this._onBlur, this);
+        onFocus = _.bind(this._onFocus, this);
+        onKeydown = _.bind(this._onKeydown, this);
+        onInput = _.bind(this._onInput, this);
+        this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);
+        if (!_.isMsie() || _.isMsie() > 9) {
+          this.$input.on("input.tt", onInput);
+        } else {
+          this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {
+            if (specialKeyCodeMap[$e.which || $e.keyCode]) {
+              return;
+            }
+            _.defer(_.bind(that._onInput, that, $e));
+          });
+        }
+        return this;
+      },
+      focus: function focus() {
+        this.$input.focus();
+      },
+      blur: function blur() {
+        this.$input.blur();
+      },
+      getLangDir: function getLangDir() {
+        return this.dir;
+      },
+      getQuery: function getQuery() {
+        return this.query || "";
+      },
+      setQuery: function setQuery(val, silent) {
+        this.setInputValue(val);
+        this._setQuery(val, silent);
+      },
+      hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {
+        return this.query !== this.queryWhenFocused;
+      },
+      getInputValue: function getInputValue() {
+        return this.$input.val();
+      },
+      setInputValue: function setInputValue(value) {
+        this.$input.val(value);
+        this.clearHintIfInvalid();
+        this._checkLanguageDirection();
+      },
+      resetInputValue: function resetInputValue() {
+        this.setInputValue(this.query);
+      },
+      getHint: function getHint() {
+        return this.$hint.val();
+      },
+      setHint: function setHint(value) {
+        this.$hint.val(value);
+      },
+      clearHint: function clearHint() {
+        this.setHint("");
+      },
+      clearHintIfInvalid: function clearHintIfInvalid() {
+        var val, hint, valIsPrefixOfHint, isValid;
+        val = this.getInputValue();
+        hint = this.getHint();
+        valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;
+        isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();
+        !isValid && this.clearHint();
+      },
+      hasFocus: function hasFocus() {
+        return this.$input.is(":focus");
+      },
+      hasOverflow: function hasOverflow() {
+        var constraint = this.$input.width() - 2;
+        this.$overflowHelper.text(this.getInputValue());
+        return this.$overflowHelper.width() >= constraint;
+      },
+      isCursorAtEnd: function() {
+        var valueLength, selectionStart, range;
+        valueLength = this.$input.val().length;
+        selectionStart = this.$input[0].selectionStart;
+        if (_.isNumber(selectionStart)) {
+          return selectionStart === valueLength;
+        } else if (document.selection) {
+          range = document.selection.createRange();
+          range.moveStart("character", -valueLength);
+          return valueLength === range.text.length;
+        }
+        return true;
+      },
+      destroy: function destroy() {
+        this.$hint.off(".tt");
+        this.$input.off(".tt");
+        this.$overflowHelper.remove();
+        this.$hint = this.$input = this.$overflowHelper = $("<div>");
+      }
+    });
+    return Input;
+    function buildOverflowHelper($input) {
+      return $('<pre aria-hidden="true"></pre>').css({
+        position: "absolute",
+        visibility: "hidden",
+        whiteSpace: "pre",
+        fontFamily: $input.css("font-family"),
+        fontSize: $input.css("font-size"),
+        fontStyle: $input.css("font-style"),
+        fontVariant: $input.css("font-variant"),
+        fontWeight: $input.css("font-weight"),
+        wordSpacing: $input.css("word-spacing"),
+        letterSpacing: $input.css("letter-spacing"),
+        textIndent: $input.css("text-indent"),
+        textRendering: $input.css("text-rendering"),
+        textTransform: $input.css("text-transform")
+      }).insertAfter($input);
+    }
+    function areQueriesEquivalent(a, b) {
+      return Input.normalizeQuery(a) === Input.normalizeQuery(b);
+    }
+    function withModifier($e) {
+      return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;
+    }
+  }();
+  var Dataset = function() {
+    "use strict";
+    var keys, nameGenerator;
+    keys = {
+      val: "tt-selectable-display",
+      obj: "tt-selectable-object"
+    };
+    nameGenerator = _.getIdGenerator();
+    function Dataset(o, www) {
+      o = o || {};
+      o.templates = o.templates || {};
+      o.templates.notFound = o.templates.notFound || o.templates.empty;
+      if (!o.source) {
+        $.error("missing source");
+      }
+      if (!o.node) {
+        $.error("missing node");
+      }
+      if (o.name && !isValidName(o.name)) {
+        $.error("invalid dataset name: " + o.name);
+      }
+      www.mixin(this);
+      this.highlight = !!o.highlight;
+      this.name = o.name || nameGenerator();
+      this.limit = o.limit || 5;
+      this.displayFn = getDisplayFn(o.display || o.displayKey);
+      this.templates = getTemplates(o.templates, this.displayFn);
+      this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;
+      this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;
+      this._resetLastSuggestion();
+      this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);
+    }
+    Dataset.extractData = function extractData(el) {
+      var $el = $(el);
+      if ($el.data(keys.obj)) {
+        return {
+          val: $el.data(keys.val) || "",
+          obj: $el.data(keys.obj) || null
+        };
+      }
+      return null;
+    };
+    _.mixin(Dataset.prototype, EventEmitter, {
+      _overwrite: function overwrite(query, suggestions) {
+        suggestions = suggestions || [];
+        if (suggestions.length) {
+          this._renderSuggestions(query, suggestions);
+        } else if (this.async && this.templates.pending) {
+          this._renderPending(query);
+        } else if (!this.async && this.templates.notFound) {
+          this._renderNotFound(query);
+        } else {
+          this._empty();
+        }
+        this.trigger("rendered", this.name, suggestions, false);
+      },
+      _append: function append(query, suggestions) {
+        suggestions = suggestions || [];
+        if (suggestions.length && this.$lastSuggestion.length) {
+          this._appendSuggestions(query, suggestions);
+        } else if (suggestions.length) {
+          this._renderSuggestions(query, suggestions);
+        } else if (!this.$lastSuggestion.length && this.templates.notFound) {
+          this._renderNotFound(query);
+        }
+        this.trigger("rendered", this.name, suggestions, true);
+      },
+      _renderSuggestions: function renderSuggestions(query, suggestions) {
+        var $fragment;
+        $fragment = this._getSuggestionsFragment(query, suggestions);
+        this.$lastSuggestion = $fragment.children().last();
+        this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));
+      },
+      _appendSuggestions: function appendSuggestions(query, suggestions) {
+        var $fragment, $lastSuggestion;
+        $fragment = this._getSuggestionsFragment(query, suggestions);
+        $lastSuggestion = $fragment.children().last();
+        this.$lastSuggestion.after($fragment);
+        this.$lastSuggestion = $lastSuggestion;
+      },
+      _renderPending: function renderPending(query) {
+        var template = this.templates.pending;
+        this._resetLastSuggestion();
+        template && this.$el.html(template({
+          query: query,
+          dataset: this.name
+        }));
+      },
+      _renderNotFound: function renderNotFound(query) {
+        var template = this.templates.notFound;
+        this._resetLastSuggestion();
+        template && this.$el.html(template({
+          query: query,
+          dataset: this.name
+        }));
+      },
+      _empty: function empty() {
+        this.$el.empty();
+        this._resetLastSuggestion();
+      },
+      _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {
+        var that = this, fragment;
+        fragment = document.createDocumentFragment();
+        _.each(suggestions, function getSuggestionNode(suggestion) {
+          var $el, context;
+          context = that._injectQuery(query, suggestion);
+          $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);
+          fragment.appendChild($el[0]);
+        });
+        this.highlight && highlight({
+          className: this.classes.highlight,
+          node: fragment,
+          pattern: query
+        });
+        return $(fragment);
+      },
+      _getFooter: function getFooter(query, suggestions) {
+        return this.templates.footer ? this.templates.footer({
+          query: query,
+          suggestions: suggestions,
+          dataset: this.name
+        }) : null;
+      },
+      _getHeader: function getHeader(query, suggestions) {
+        return this.templates.header ? this.templates.header({
+          query: query,
+          suggestions: suggestions,
+          dataset: this.name
+        }) : null;
+      },
+      _resetLastSuggestion: function resetLastSuggestion() {
+        this.$lastSuggestion = $();
+      },
+      _injectQuery: function injectQuery(query, obj) {
+        return _.isObject(obj) ? _.mixin({
+          _query: query
+        }, obj) : obj;
+      },
+      update: function update(query) {
+        var that = this, canceled = false, syncCalled = false, rendered = 0;
+        this.cancel();
+        this.cancel = function cancel() {
+          canceled = true;
+          that.cancel = $.noop;
+          that.async && that.trigger("asyncCanceled", query);
+        };
+        this.source(query, sync, async);
+        !syncCalled && sync([]);
+        function sync(suggestions) {
+          if (syncCalled) {
+            return;
+          }
+          syncCalled = true;
+          suggestions = (suggestions || []).slice(0, that.limit);
+          rendered = suggestions.length;
+          that._overwrite(query, suggestions);
+          if (rendered < that.limit && that.async) {
+            that.trigger("asyncRequested", query);
+          }
+        }
+        function async(suggestions) {
+          suggestions = suggestions || [];
+          if (!canceled && rendered < that.limit) {
+            that.cancel = $.noop;
+            // patch rendered += suggestions.length;
+            that._append(query, suggestions.slice(0, that.limit - rendered));
+            // patch: https://github.com/twitter/typeahead.js/pull/1212
+            rendered += suggestions.length;
+            that.async && that.trigger("asyncReceived", query);
+          }
+        }
+      },
+      cancel: $.noop,
+      clear: function clear() {
+        this._empty();
+        this.cancel();
+        this.trigger("cleared");
+      },
+      isEmpty: function isEmpty() {
+        return this.$el.is(":empty");
+      },
+      destroy: function destroy() {
+        this.$el = $("<div>");
+      }
+    });
+    return Dataset;
+    function getDisplayFn(display) {
+      display = display || _.stringify;
+      return _.isFunction(display) ? display : displayFn;
+      function displayFn(obj) {
+        return obj[display];
+      }
+    }
+    function getTemplates(templates, displayFn) {
+      return {
+        notFound: templates.notFound && _.templatify(templates.notFound),
+        pending: templates.pending && _.templatify(templates.pending),
+        header: templates.header && _.templatify(templates.header),
+        footer: templates.footer && _.templatify(templates.footer),
+        suggestion: templates.suggestion || suggestionTemplate
+      };
+      function suggestionTemplate(context) {
+        return $("<div>").text(displayFn(context));
+      }
+    }
+    function isValidName(str) {
+      return /^[_a-zA-Z0-9-]+$/.test(str);
+    }
+  }();
+  var Menu = function() {
+    "use strict";
+    function Menu(o, www) {
+      var that = this;
+      o = o || {};
+      if (!o.node) {
+        $.error("node is required");
+      }
+      www.mixin(this);
+      this.$node = $(o.node);
+      this.query = null;
+      this.datasets = _.map(o.datasets, initializeDataset);
+      function initializeDataset(oDataset) {
+        var node = that.$node.find(oDataset.node).first();
+        oDataset.node = node.length ? node : $("<div>").appendTo(that.$node);
+        return new Dataset(oDataset, www);
+      }
+    }
+    _.mixin(Menu.prototype, EventEmitter, {
+      _onSelectableClick: function onSelectableClick($e) {
+        this.trigger("selectableClicked", $($e.currentTarget));
+      },
+      _onRendered: function onRendered(type, dataset, suggestions, async) {
+        this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+        this.trigger("datasetRendered", dataset, suggestions, async);
+      },
+      _onCleared: function onCleared() {
+        this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+        this.trigger("datasetCleared");
+      },
+      _propagate: function propagate() {
+        this.trigger.apply(this, arguments);
+      },
+      _allDatasetsEmpty: function allDatasetsEmpty() {
+        return _.every(this.datasets, isDatasetEmpty);
+        function isDatasetEmpty(dataset) {
+          return dataset.isEmpty();
+        }
+      },
+      _getSelectables: function getSelectables() {
+        return this.$node.find(this.selectors.selectable);
+      },
+      _removeCursor: function _removeCursor() {
+        var $selectable = this.getActiveSelectable();
+        $selectable && $selectable.removeClass(this.classes.cursor);
+      },
+      _ensureVisible: function ensureVisible($el) {
+        var elTop, elBottom, nodeScrollTop, nodeHeight;
+        elTop = $el.position().top;
+        elBottom = elTop + $el.outerHeight(true);
+        nodeScrollTop = this.$node.scrollTop();
+        nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);
+        if (elTop < 0) {
+          this.$node.scrollTop(nodeScrollTop + elTop);
+        } else if (nodeHeight < elBottom) {
+          this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));
+        }
+      },
+      bind: function() {
+        var that = this, onSelectableClick;
+        onSelectableClick = _.bind(this._onSelectableClick, this);
+        this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);
+        _.each(this.datasets, function(dataset) {
+          dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);
+        });
+        return this;
+      },
+      isOpen: function isOpen() {
+        return this.$node.hasClass(this.classes.open);
+      },
+      open: function open() {
+        this.$node.addClass(this.classes.open);
+      },
+      close: function close() {
+        this.$node.removeClass(this.classes.open);
+        this._removeCursor();
+      },
+      setLanguageDirection: function setLanguageDirection(dir) {
+        this.$node.attr("dir", dir);
+      },
+      selectableRelativeToCursor: function selectableRelativeToCursor(delta) {
+        var $selectables, $oldCursor, oldIndex, newIndex;
+        $oldCursor = this.getActiveSelectable();
+        $selectables = this._getSelectables();
+        oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;
+        newIndex = oldIndex + delta;
+        newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;
+        newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;
+        return newIndex === -1 ? null : $selectables.eq(newIndex);
+      },
+      setCursor: function setCursor($selectable) {
+        this._removeCursor();
+        if ($selectable = $selectable && $selectable.first()) {
+          $selectable.addClass(this.classes.cursor);
+          this._ensureVisible($selectable);
+        }
+      },
+      getSelectableData: function getSelectableData($el) {
+        return $el && $el.length ? Dataset.extractData($el) : null;
+      },
+      getActiveSelectable: function getActiveSelectable() {
+        var $selectable = this._getSelectables().filter(this.selectors.cursor).first();
+        return $selectable.length ? $selectable : null;
+      },
+      getTopSelectable: function getTopSelectable() {
+        var $selectable = this._getSelectables().first();
+        return $selectable.length ? $selectable : null;
+      },
+      update: function update(query) {
+        var isValidUpdate = query !== this.query;
+        if (isValidUpdate) {
+          this.query = query;
+          _.each(this.datasets, updateDataset);
+        }
+        return isValidUpdate;
+        function updateDataset(dataset) {
+          dataset.update(query);
+        }
+      },
+      empty: function empty() {
+        _.each(this.datasets, clearDataset);
+        this.query = null;
+        this.$node.addClass(this.classes.empty);
+        function clearDataset(dataset) {
+          dataset.clear();
+        }
+      },
+      destroy: function destroy() {
+        this.$node.off(".tt");
+        this.$node = $("<div>");
+        _.each(this.datasets, destroyDataset);
+        function destroyDataset(dataset) {
+          dataset.destroy();
+        }
+      }
+    });
+    return Menu;
+  }();
+  var DefaultMenu = function() {
+    "use strict";
+    var s = Menu.prototype;
+    function DefaultMenu() {
+      Menu.apply(this, [].slice.call(arguments, 0));
+    }
+    _.mixin(DefaultMenu.prototype, Menu.prototype, {
+      open: function open() {
+        !this._allDatasetsEmpty() && this._show();
+        return s.open.apply(this, [].slice.call(arguments, 0));
+      },
+      close: function close() {
+        this._hide();
+        return s.close.apply(this, [].slice.call(arguments, 0));
+      },
+      _onRendered: function onRendered() {
+        if (this._allDatasetsEmpty()) {
+          this._hide();
+        } else {
+          this.isOpen() && this._show();
+        }
+        return s._onRendered.apply(this, [].slice.call(arguments, 0));
+      },
+      _onCleared: function onCleared() {
+        if (this._allDatasetsEmpty()) {
+          this._hide();
+        } else {
+          this.isOpen() && this._show();
+        }
+        return s._onCleared.apply(this, [].slice.call(arguments, 0));
+      },
+      setLanguageDirection: function setLanguageDirection(dir) {
+        this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);
+        return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));
+      },
+      _hide: function hide() {
+        this.$node.hide();
+      },
+      _show: function show() {
+        this.$node.css("display", "block");
+      }
+    });
+    return DefaultMenu;
+  }();
+  var Typeahead = function() {
+    "use strict";
+    function Typeahead(o, www) {
+      var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;
+      o = o || {};
+      if (!o.input) {
+        $.error("missing input");
+      }
+      if (!o.menu) {
+        $.error("missing menu");
+      }
+      if (!o.eventBus) {
+        $.error("missing event bus");
+      }
+      www.mixin(this);
+      this.eventBus = o.eventBus;
+      this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
+      this.input = o.input;
+      this.menu = o.menu;
+      this.enabled = true;
+      this.active = false;
+      this.input.hasFocus() && this.activate();
+      this.dir = this.input.getLangDir();
+      this._hacks();
+      this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);
+      onFocused = c(this, "activate", "open", "_onFocused");
+      onBlurred = c(this, "deactivate", "_onBlurred");
+      onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed");
+      onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");
+      onEscKeyed = c(this, "isActive", "_onEscKeyed");
+      onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");
+      onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");
+      onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");
+      onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");
+      onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");
+      onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");
+      this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);
+    }
+    _.mixin(Typeahead.prototype, {
+      _hacks: function hacks() {
+        var $input, $menu;
+        $input = this.input.$input || $("<div>");
+        $menu = this.menu.$node || $("<div>");
+        $input.on("blur.tt", function($e) {
+          var active, isActive, hasActive;
+          active = document.activeElement;
+          isActive = $menu.is(active);
+          hasActive = $menu.has(active).length > 0;
+          if (_.isMsie() && (isActive || hasActive)) {
+            $e.preventDefault();
+            $e.stopImmediatePropagation();
+            _.defer(function() {
+              $input.focus();
+            });
+          }
+        });
+        $menu.on("mousedown.tt", function($e) {
+          $e.preventDefault();
+        });
+      },
+      _onSelectableClicked: function onSelectableClicked(type, $el) {
+        this.select($el);
+      },
+      _onDatasetCleared: function onDatasetCleared() {
+        this._updateHint();
+      },
+      _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {
+        this._updateHint();
+        this.eventBus.trigger("render", suggestions, async, dataset);
+      },
+      _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
+        this.eventBus.trigger("asyncrequest", query, dataset);
+      },
+      _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
+        this.eventBus.trigger("asynccancel", query, dataset);
+      },
+      _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
+        this.eventBus.trigger("asyncreceive", query, dataset);
+      },
+      _onFocused: function onFocused() {
+        this._minLengthMet() && this.menu.update(this.input.getQuery());
+      },
+      _onBlurred: function onBlurred() {
+        if (this.input.hasQueryChangedSinceLastFocus()) {
+          this.eventBus.trigger("change", this.input.getQuery());
+        }
+      },
+      _onEnterKeyed: function onEnterKeyed(type, $e) {
+        var $selectable;
+        if ($selectable = this.menu.getActiveSelectable()) {
+          this.select($selectable) && $e.preventDefault();
+        }
+      },
+      _onTabKeyed: function onTabKeyed(type, $e) {
+        var $selectable;
+        if ($selectable = this.menu.getActiveSelectable()) {
+          this.select($selectable) && $e.preventDefault();
+        } else if ($selectable = this.menu.getTopSelectable()) {
+          this.autocomplete($selectable) && $e.preventDefault();
+        }
+      },
+      _onEscKeyed: function onEscKeyed() {
+        this.close();
+      },
+      _onUpKeyed: function onUpKeyed() {
+        this.moveCursor(-1);
+      },
+      _onDownKeyed: function onDownKeyed() {
+        this.moveCursor(+1);
+      },
+      _onLeftKeyed: function onLeftKeyed() {
+        if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
+          this.autocomplete(this.menu.getTopSelectable());
+        }
+      },
+      _onRightKeyed: function onRightKeyed() {
+        if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
+          this.autocomplete(this.menu.getTopSelectable());
+        }
+      },
+      _onQueryChanged: function onQueryChanged(e, query) {
+        this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
+      },
+      _onWhitespaceChanged: function onWhitespaceChanged() {
+        this._updateHint();
+      },
+      _onLangDirChanged: function onLangDirChanged(e, dir) {
+        if (this.dir !== dir) {
+          this.dir = dir;
+          this.menu.setLanguageDirection(dir);
+        }
+      },
+      _openIfActive: function openIfActive() {
+        this.isActive() && this.open();
+      },
+      _minLengthMet: function minLengthMet(query) {
+        query = _.isString(query) ? query : this.input.getQuery() || "";
+        return query.length >= this.minLength;
+      },
+      _updateHint: function updateHint() {
+        var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
+        $selectable = this.menu.getTopSelectable();
+        data = this.menu.getSelectableData($selectable);
+        val = this.input.getInputValue();
+        if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
+          query = Input.normalizeQuery(val);
+          escapedQuery = _.escapeRegExChars(query);
+          frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
+          match = frontMatchRegEx.exec(data.val);
+          match && this.input.setHint(val + match[1]);
+        } else {
+          this.input.clearHint();
+        }
+      },
+      isEnabled: function isEnabled() {
+        return this.enabled;
+      },
+      enable: function enable() {
+        this.enabled = true;
+      },
+      disable: function disable() {
+        this.enabled = false;
+      },
+      isActive: function isActive() {
+        return this.active;
+      },
+      activate: function activate() {
+        if (this.isActive()) {
+          return true;
+        } else if (!this.isEnabled() || this.eventBus.before("active")) {
+          return false;
+        } else {
+          this.active = true;
+          this.eventBus.trigger("active");
+          return true;
+        }
+      },
+      deactivate: function deactivate() {
+        if (!this.isActive()) {
+          return true;
+        } else if (this.eventBus.before("idle")) {
+          return false;
+        } else {
+          this.active = false;
+          this.close();
+          this.eventBus.trigger("idle");
+          return true;
+        }
+      },
+      isOpen: function isOpen() {
+        return this.menu.isOpen();
+      },
+      open: function open() {
+        if (!this.isOpen() && !this.eventBus.before("open")) {
+          this.menu.open();
+          this._updateHint();
+          this.eventBus.trigger("open");
+        }
+        return this.isOpen();
+      },
+      close: function close() {
+        if (this.isOpen() && !this.eventBus.before("close")) {
+          this.menu.close();
+          this.input.clearHint();
+          this.input.resetInputValue();
+          this.eventBus.trigger("close");
+        }
+        return !this.isOpen();
+      },
+      setVal: function setVal(val) {
+        this.input.setQuery(_.toStr(val));
+      },
+      getVal: function getVal() {
+        return this.input.getQuery();
+      },
+      select: function select($selectable) {
+        var data = this.menu.getSelectableData($selectable);
+        if (data && !this.eventBus.before("select", data.obj)) {
+          this.input.setQuery(data.val, true);
+          this.eventBus.trigger("select", data.obj);
+          this.close();
+          return true;
+        }
+        return false;
+      },
+      autocomplete: function autocomplete($selectable) {
+        var query, data, isValid;
+        query = this.input.getQuery();
+        data = this.menu.getSelectableData($selectable);
+        isValid = data && query !== data.val;
+        if (isValid && !this.eventBus.before("autocomplete", data.obj)) {
+          this.input.setQuery(data.val);
+          this.eventBus.trigger("autocomplete", data.obj);
+          return true;
+        }
+        return false;
+      },
+      moveCursor: function moveCursor(delta) {
+        var query, $candidate, data, payload, cancelMove;
+        query = this.input.getQuery();
+        $candidate = this.menu.selectableRelativeToCursor(delta);
+        data = this.menu.getSelectableData($candidate);
+        payload = data ? data.obj : null;
+        cancelMove = this._minLengthMet() && this.menu.update(query);
+        if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {
+          this.menu.setCursor($candidate);
+          if (data) {
+            this.input.setInputValue(data.val);
+          } else {
+            this.input.resetInputValue();
+            this._updateHint();
+          }
+          this.eventBus.trigger("cursorchange", payload);
+          return true;
+        }
+        return false;
+      },
+      destroy: function destroy() {
+        this.input.destroy();
+        this.menu.destroy();
+      }
+    });
+    return Typeahead;
+    function c(ctx) {
+      var methods = [].slice.call(arguments, 1);
+      return function() {
+        var args = [].slice.call(arguments);
+        _.each(methods, function(method) {
+          return ctx[method].apply(ctx, args);
+        });
+      };
+    }
+  }();
+  (function() {
+    "use strict";
+    var old, keys, methods;
+    old = $.fn.typeahead;
+    keys = {
+      www: "tt-www",
+      attrs: "tt-attrs",
+      typeahead: "tt-typeahead"
+    };
+    methods = {
+      initialize: function initialize(o, datasets) {
+        var www;
+        datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
+        o = o || {};
+        www = WWW(o.classNames);
+        return this.each(attach);
+        function attach() {
+          var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;
+          _.each(datasets, function(d) {
+            d.highlight = !!o.highlight;
+          });
+          $input = $(this);
+          $wrapper = $(www.html.wrapper);
+          $hint = $elOrNull(o.hint);
+          $menu = $elOrNull(o.menu);
+          defaultHint = o.hint !== false && !$hint;
+          defaultMenu = o.menu !== false && !$menu;
+          defaultHint && ($hint = buildHintFromInput($input, www));
+          defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
+          $hint && $hint.val("");
+          $input = prepInput($input, www);
+          if (defaultHint || defaultMenu) {
+            $wrapper.css(www.css.wrapper);
+            $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);
+            $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
+          }
+          MenuConstructor = defaultMenu ? DefaultMenu : Menu;
+          eventBus = new EventBus({
+            el: $input
+          });
+          input = new Input({
+            hint: $hint,
+            input: $input
+          }, www);
+          menu = new MenuConstructor({
+            node: $menu,
+            datasets: datasets
+          }, www);
+          typeahead = new Typeahead({
+            input: input,
+            menu: menu,
+            eventBus: eventBus,
+            minLength: o.minLength
+          }, www);
+          $input.data(keys.www, www);
+          $input.data(keys.typeahead, typeahead);
+        }
+      },
+      isEnabled: function isEnabled() {
+        var enabled;
+        ttEach(this.first(), function(t) {
+          enabled = t.isEnabled();
+        });
+        return enabled;
+      },
+      enable: function enable() {
+        ttEach(this, function(t) {
+          t.enable();
+        });
+        return this;
+      },
+      disable: function disable() {
+        ttEach(this, function(t) {
+          t.disable();
+        });
+        return this;
+      },
+      isActive: function isActive() {
+        var active;
+        ttEach(this.first(), function(t) {
+          active = t.isActive();
+        });
+        return active;
+      },
+      activate: function activate() {
+        ttEach(this, function(t) {
+          t.activate();
+        });
+        return this;
+      },
+      deactivate: function deactivate() {
+        ttEach(this, function(t) {
+          t.deactivate();
+        });
+        return this;
+      },
+      isOpen: function isOpen() {
+        var open;
+        ttEach(this.first(), function(t) {
+          open = t.isOpen();
+        });
+        return open;
+      },
+      open: function open() {
+        ttEach(this, function(t) {
+          t.open();
+        });
+        return this;
+      },
+      close: function close() {
+        ttEach(this, function(t) {
+          t.close();
+        });
+        return this;
+      },
+      select: function select(el) {
+        var success = false, $el = $(el);
+        ttEach(this.first(), function(t) {
+          success = t.select($el);
+        });
+        return success;
+      },
+      autocomplete: function autocomplete(el) {
+        var success = false, $el = $(el);
+        ttEach(this.first(), function(t) {
+          success = t.autocomplete($el);
+        });
+        return success;
+      },
+      moveCursor: function moveCursoe(delta) {
+        var success = false;
+        ttEach(this.first(), function(t) {
+          success = t.moveCursor(delta);
+        });
+        return success;
+      },
+      val: function val(newVal) {
+        var query;
+        if (!arguments.length) {
+          ttEach(this.first(), function(t) {
+            query = t.getVal();
+          });
+          return query;
+        } else {
+          ttEach(this, function(t) {
+            t.setVal(newVal);
+          });
+          return this;
+        }
+      },
+      destroy: function destroy() {
+        ttEach(this, function(typeahead, $input) {
+          revert($input);
+          typeahead.destroy();
+        });
+        return this;
+      }
+    };
+    $.fn.typeahead = function(method) {
+      if (methods[method]) {
+        return methods[method].apply(this, [].slice.call(arguments, 1));
+      } else {
+        return methods.initialize.apply(this, arguments);
+      }
+    };
+    $.fn.typeahead.noConflict = function noConflict() {
+      $.fn.typeahead = old;
+      return this;
+    };
+    function ttEach($els, fn) {
+      $els.each(function() {
+        var $input = $(this), typeahead;
+        (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
+      });
+    }
+    function buildHintFromInput($input, www) {
+      return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({
+        autocomplete: "off",
+        spellcheck: "false",
+        tabindex: -1
+      });
+    }
+    function prepInput($input, www) {
+      $input.data(keys.attrs, {
+        dir: $input.attr("dir"),
+        autocomplete: $input.attr("autocomplete"),
+        spellcheck: $input.attr("spellcheck"),
+        style: $input.attr("style")
+      });
+      $input.addClass(www.classes.input).attr({
+        autocomplete: "off",
+        spellcheck: false
+      });
+      try {
+        !$input.attr("dir") && $input.attr("dir", "auto");
+      } catch (e) {}
+      return $input;
+    }
+    function getBackgroundStyles($el) {
+      return {
+        backgroundAttachment: $el.css("background-attachment"),
+        backgroundClip: $el.css("background-clip"),
+        backgroundColor: $el.css("background-color"),
+        backgroundImage: $el.css("background-image"),
+        backgroundOrigin: $el.css("background-origin"),
+        backgroundPosition: $el.css("background-position"),
+        backgroundRepeat: $el.css("background-repeat"),
+        backgroundSize: $el.css("background-size")
+      };
+    }
+    function revert($input) {
+      var www, $wrapper;
+      www = $input.data(keys.www);
+      $wrapper = $input.parent().filter(www.selectors.wrapper);
+      _.each($input.data(keys.attrs), function(val, key) {
+        _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
+      });
+      $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
+      if ($wrapper.length) {
+        $input.detach().insertAfter($wrapper);
+        $wrapper.remove();
+      }
+    }
+    function $elOrNull(obj) {
+      var isValid, $el;
+      isValid = _.isJQuery(obj) || _.isElement(obj);
+      $el = isValid ? $(obj).first() : [];
+      return $el.length ? $el : null;
+    }
+  })();
+});
\ No newline at end of file