From f359efa4c246fc701d1bee6ce829335438179ea5 Mon Sep 17 00:00:00 2001 From: Tim Trueman Date: Tue, 19 Feb 2013 11:53:24 -0800 Subject: [PATCH 01/44] gh-pages initial commit --- .gitignore | 9 + .jshintrc | 17 + .travis.yml | 5 + css/bootstrap.min.css | 9 + css/examples.css | 160 +++++ css/main.css | 315 +++++++++ css/normalize.min.css | 1 + css/typeahead.min.css | 5 + data/countries.json | 1 + data/nba.json | 1 + data/nhl.json | 1 + data/repos.json | 1053 ++++++++++++++++++++++++++++ examples/index.html | 75 ++ font/Prociono-Regular-webfont.eot | Bin 0 -> 33742 bytes font/Prociono-Regular-webfont.svg | 150 ++++ font/Prociono-Regular-webfont.ttf | Bin 0 -> 33556 bytes font/Prociono-Regular-webfont.woff | Bin 0 -> 22452 bytes img/twitter-logo.png | Bin 0 -> 4392 bytes index.html | 61 ++ js/examples.js | 45 ++ js/ghostwriter.min.js | 295 ++++++++ js/hogan-2.0.0.js | 576 +++++++++++++++ js/jquery-1.9.1.min.js | 5 + js/main.js | 43 ++ js/typeahead.min.js | 7 + 25 files changed, 2834 insertions(+) create mode 100755 .gitignore create mode 100644 .jshintrc create mode 100755 .travis.yml create mode 100644 css/bootstrap.min.css create mode 100644 css/examples.css create mode 100644 css/main.css create mode 100644 css/normalize.min.css create mode 100644 css/typeahead.min.css create mode 100644 data/countries.json create mode 100644 data/nba.json create mode 100644 data/nhl.json create mode 100644 data/repos.json create mode 100644 examples/index.html create mode 100755 font/Prociono-Regular-webfont.eot create mode 100755 font/Prociono-Regular-webfont.svg create mode 100755 font/Prociono-Regular-webfont.ttf create mode 100755 font/Prociono-Regular-webfont.woff create mode 100644 img/twitter-logo.png create mode 100644 index.html create mode 100644 js/examples.js create mode 100644 js/ghostwriter.min.js create mode 100644 js/hogan-2.0.0.js create mode 100644 js/jquery-1.9.1.min.js create mode 100644 js/main.js create mode 100644 js/typeahead.min.js diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000000..2b85ceece6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.swp +.DS_Store + +dist +.grunt +_SpecRunner.html + +node_modules +npm-debug.log diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000000..8ec450725d --- /dev/null +++ b/.jshintrc @@ -0,0 +1,17 @@ +{ + "curly": true, + "newcap": true, + "noarg": true, + "noempty": true, + "nonew": true, + "quotmark": true, + "regexp": true, + "trailing": true, + + "boss": true, + "eqnull": true, + "expr": true, + + "browser": true, + "jquery": true +} diff --git a/.travis.yml b/.travis.yml new file mode 100755 index 0000000000..2d6cd8f4f4 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - 0.8 +before_script: + - npm install -g grunt-cli \ No newline at end of file diff --git a/css/bootstrap.min.css b/css/bootstrap.min.css new file mode 100644 index 0000000000..fd5ed73407 --- /dev/null +++ b/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.0 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/css/examples.css b/css/examples.css new file mode 100644 index 0000000000..ac32d985b7 --- /dev/null +++ b/css/examples.css @@ -0,0 +1,160 @@ +/* custom font! */ +/* ------------ */ + +@font-face { + font-family: Prociono; + src: url(../font/Prociono-Regular-webfont.ttf); +} + +/* scaffolding */ +/* ----------- */ + +html { + overflow-y: scroll; + *overflow-x: hidden; +} + +.container { + max-width: 700px; + margin: 0 auto; + text-align: center; +} + +.tt-dropdown-menu, +.gist { + text-align: left; +} + +/* base styles */ +/* ----------- */ + +html { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 18px; + line-height: 1.2; + color: #333; +} + +.title, +.example-name { + font-family: Prociono; +} + +p { + margin: 0 0 10px 0; +} + +/* site theme */ +/* ---------- */ + +.title { + margin: 20px 0 0 0; + font-size: 64px; +} + +.example { + padding: 30px 0; +} + +.example-name { + margin: 20px 0; + font-size: 32px; +} + +.demo { + position: relative; + *z-index: 1; + margin: 50px 0; +} + +.typeahead, +.tt-query, +.tt-hint { + width: 396px; + height: 30px; + padding: 8px 12px; + font-size: 24px; + line-height: 30px; + border: 2px solid #ccc; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + outline: none; +} + +.typeahead:focus { + border: 2px solid #0097cf; +} + +.tt-query { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.tt-hint { + color: #999 +} + +.tt-dropdown-menu { + width: 422px; + margin-top: 12px; + padding: 8px 0; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); + -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); + box-shadow: 0 5px 10px rgba(0,0,0,.2); +} + +.tt-suggestion { + padding: 3px 20px; + font-size: 18px; + line-height: 24px; +} + +.tt-suggestion.tt-is-under-cursor { + color: #fff; + background-color: #0097cf; + +} + +.tt-suggestion p { + margin: 0; +} + +.gist { + font-size: 14px; +} + +/* example specific styles */ +/* ----------------------- */ + +.example-twitter-oss .tt-suggestion { + padding: 8px 20px; +} + +.example-twitter-oss .tt-suggestion + .tt-suggestion { + border-top: 1px solid #ccc; +} + +.example-twitter-oss .repo-language { + float: right; + font-style: italic; +} + +.example-twitter-oss .repo-name { + font-weight: bold; +} + +.example-twitter-oss .repo-description { + font-size: 14px; +} + +.example-arabic .tt-dropdown-menu { + text-align: right; +} diff --git a/css/main.css b/css/main.css new file mode 100644 index 0000000000..a6799f7bfb --- /dev/null +++ b/css/main.css @@ -0,0 +1,315 @@ +/* custom font! */ +/* ------------ */ + +@font-face { + font-family: Prociono; + src: url(../font/Prociono-Regular-webfont.ttf); +} + +/* scaffolding */ +/* ----------- */ + +html, +body { + height: 100%; +} + +html { + overflow-y: scroll; + *overflow-x: hidden; +} + +.sticky-footer-wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -60px; +} + +.sticky-footer-push, +.footer { + height: 60px; +} + +.container { + max-width: 700px; + margin: 0 auto; +} + +/* base styles */ +/* ----------- */ + +html { + font-family: Prociono; + font-size: 18px; + line-height: 1.2; + color: #333; +} + +a { + color: #03739c; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +p { + margin: 0 0 10px 0; +} + +/* site theme */ +/* ---------- */ + +.masthead, +.footer { + max-width: 800px; + margin: 0 auto; + text-align: center; +} + +.twitter-logo { + width: 72px; + height: 72px; + margin: 0; + vertical-align: middle; +} + +.title { + margin: 20px 0 0 0; + font-size: 64px; +} + +.tagline { + margin: 20px 0 0 0; + font-size: 20px; + color: #444; +} + +.typeahead-demo { + position: relative; + *z-index: 1; + width: 600px; + margin: 50px auto 0 auto; + padding: 15px; + text-align: left; + background-color: #0097cf; + background-image: -moz-linear-gradient(top, #04a2dd, #03739c); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#04a2dd), to(#03739c)); + background-image: -webkit-linear-gradient(top, #04a2dd, #03739c); + background-image: -o-linear-gradient(top, #04a2dd, #03739c); + background-image: linear-gradient(to bottom, #04a2dd, #03739c); + background-repeat: repeat-x; + border: 1px solid #024e6a; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + -webkit-box-shadow: 0 0 2px #111; + -moz-box-shadow: 0 0 2px #111; + box-shadow: 0 0 2px #111; +} + +.btn-demo { + position: absolute; + top: 15px; + right: 15px; + height: 50px; + width: 602px; + overflow: hidden; + cursor: pointer; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} + +.btn-demo.is-pressed { + width: 0; + -webkit-transition: .75s width ease-in; + -moz-transition: .75s width ease-in; + -o-transition: .75s width ease-in; + transition: .75s width ease-in; +} + +.btn-demo-text { + position: absolute; + top: 0; + left: 0; + margin: 0; + width: 600px; + padding: 0; + line-height: 46px; + color: #111; + text-align: center; + text-shadow: 0 1px 1px rgba(255,255,255,.75); + background-color: #ddd; + background-image: -moz-linear-gradient(top, #fff, #aaa); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#aaa)); + background-image: -webkit-linear-gradient(top, #fff, #aaa); + background-image: -o-linear-gradient(top, #fff, #aaa); + background-image: linear-gradient(to bottom, #fff, #aaa); + background-repeat: repeat-x; + border: 1px solid #000; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} + +.btn-demo-text:hover { + background-color: #eee; + background-image: none; +} + +.btn-demo-text:active { + background-color: #aaa; + background-image: none; +} + +.typeahead, +.tt-hint { + width: 574px; + height: 30px; + padding: 8px 12px; + font-size: 24px; + line-height: 30px; + border: 1px solid #024e6a; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + outline: none; +} + +.tt-hint { + color: #999 +} + +.tt-dropdown-menu { + width: 600px; + margin-top: 12px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); + -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); + box-shadow: 0 5px 10px rgba(0,0,0,.2); +} + +.tt-suggestion { + padding: 8px 20px; + font-size: 14px; + line-height: 18px; +} + +.tt-suggestion + .tt-suggestion { + font-size: 14px; + border-top: 1px solid #ccc; +} + +.tt-suggestions .repo-language { + float: right; + font-style: italic; +} + +.tt-suggestions .repo-name { + font-size: 20px; + font-weight: bold; +} + +.tt-suggestions .repo-description { + margin: 0; +} + +.twitter-typeahead .tt-suggestion.tt-is-under-cursor { + color: #03739c; +} + +.btn-download { + position: relative; + display: inline-block; + *display: inline; + *zoom: 1; + margin: 150px 0 0 0; + padding: 10px 20px; + color: #fff; + font: inherit; + font-size: 32px; + line-height: 38px; + text-align: center; + text-decoration: none; + text-shadow: 0 1px 1px rgba(0,0,0,.25); + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background-color: #0097cf; + background-image: -moz-linear-gradient(top, #04a2dd, #03739c); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#04a2dd), to(#03739c)); + background-image: -webkit-linear-gradient(top, #04a2dd, #03739c); + background-image: -o-linear-gradient(top, #04a2dd, #03739c); + background-image: linear-gradient(to bottom, #04a2dd, #03739c); + background-repeat: repeat-x; + border: 1px solid #024e6a; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + -webkit-box-shadow: 0 2px 5px -2px #111; + -moz-box-shadow: 0 2px 5px -2px #111; + box-shadow: 0 2px 5px -2px #111; +} + +.btn-download:hover { + background-color: #04a2dd; + background-image: none; +} + +.btn-download:active { + background-color: #03739c; + background-image: none; +} + +.btn:hover, +.btn:focus, +.btn:active { + text-decoration: none; +} + +.btn::-moz-focus-inner { + border: 0; + padding: 0; +} + +.social { + margin: 80px 0 0 0; +} + +.social-btn + .social-btn { + margin-left: 20px; +} + +.links { + margin: 10px 0 0 0; + display: block; + padding: 0; + list-style: none; +} + +.links a { + font-size: 16px; + color: #999; +} + +.footer { + font-size: 12px; +} + +/* narrow screens */ +/* -------------- */ + +@media all and (max-width: 600px) { + .typeahead-demo, + .links-examples { + display: none; + } +} diff --git a/css/normalize.min.css b/css/normalize.min.css new file mode 100644 index 0000000000..0c352ba1e6 --- /dev/null +++ b/css/normalize.min.css @@ -0,0 +1 @@ +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0} diff --git a/css/typeahead.min.css b/css/typeahead.min.css new file mode 100644 index 0000000000..3bcf6a50a0 --- /dev/null +++ b/css/typeahead.min.css @@ -0,0 +1,5 @@ +/*! + * Twitter Typeahead + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */.twitter-typeahead{position:relative;display:inline-block;*display:inline;*zoom:1}.twitter-typeahead .tt-query{*margin-top:-1px;vertical-align:top;background-color:transparent;background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.twitter-typeahead .tt-hint{position:absolute;top:0;left:0;z-index:-1;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.twitter-typeahead .tt-dropdown-menu,.twitter-typeahead .tt-suggestions,.twitter-typeahead .tt-suggestion{padding:0;margin:0}.twitter-typeahead .tt-dropdown-menu,.twitter-typeahead .tt-suggestions{list-style:none}.twitter-typeahead .tt-dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none}.twitter-typeahead .tt-dropdown-menu.tt-show{display:inline-block;*display:inline;*zoom:1}.twitter-typeahead .tt-suggestion{overflow:hidden;white-space:nowrap;cursor:pointer}.twitter-typeahead .tt-suggestion{*zoom:1}.twitter-typeahead .tt-suggestion:before,.twitter-typeahead .tt-suggestion:after{display:table;content:' '}.twitter-typeahead .tt-suggestion:after{clear:both}.twitter-typeahead.tt-rtl{direction:rtl}.twitter-typeahead.tt-rtl .tt-dropdown-menu{left:auto;right:0} \ No newline at end of file diff --git a/data/countries.json b/data/countries.json new file mode 100644 index 0000000000..8ab66c8515 --- /dev/null +++ b/data/countries.json @@ -0,0 +1 @@ +["Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Åland","Azerbaijan","Bosnia and Herzegovina","Barbados","Bangladesh","Belgium","Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Saint Barthélemy","Bermuda","Brunei","Bolivia","Bonaire","Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos [Keeling] Islands","Congo","Central African Republic","Republic of the Congo","Switzerland","Ivory Coast","Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica","Cuba","Cape Verde","Curacao","Christmas Island","Cyprus","Czechia","Germany","Djibouti","Denmark","Dominica","Dominican Republic","Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji","Falkland Islands","Micronesia","Faroe Islands","France","Gabon","United Kingdom","Grenada","Georgia","French Guiana","Guernsey","Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala","Guam","Guinea-Bissau","Guyana","Hong Kong","Heard Island and McDonald Islands","Honduras","Croatia","Haiti","Hungary","Indonesia","Ireland","Israel","Isle of Man","India","British Indian Ocean Territory","Iraq","Iran","Iceland","Italy","Jersey","Jamaica","Jordan","Japan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Comoros","Saint Kitts and Nevis","North Korea","South Korea","Kuwait","Cayman Islands","Kazakhstan","Laos","Lebanon","Saint Lucia","Liechtenstein","Sri Lanka","Liberia","Lesotho","Lithuania","Luxembourg","Latvia","Libya","Morocco","Monaco","Moldova","Montenegro","Saint Martin","Madagascar","Marshall Islands","Macedonia","Mali","Myanmar [Burma]","Mongolia","Macao","Northern Mariana Islands","Martinique","Mauritania","Montserrat","Malta","Mauritius","Maldives","Malawi","Mexico","Malaysia","Mozambique","Namibia","New Caledonia","Niger","Norfolk Island","Nigeria","Nicaragua","Netherlands","Norway","Nepal","Nauru","Niue","New Zealand","Oman","Panama","Peru","French Polynesia","Papua New Guinea","Philippines","Pakistan","Poland","Saint Pierre and Miquelon","Pitcairn Islands","Puerto Rico","Palestine","Portugal","Palau","Paraguay","Qatar","Réunion","Romania","Serbia","Russia","Rwanda","Saudi Arabia","Solomon Islands","Seychelles","Sudan","Sweden","Singapore","Saint Helena","Slovenia","Svalbard and Jan Mayen","Slovakia","Sierra Leone","San Marino","Senegal","Somalia","Suriname","South Sudan","São Tomé and Príncipe","El Salvador","Sint Maarten","Syria","Swaziland","Turks and Caicos Islands","Chad","French Southern Territories","Togo","Thailand","Tajikistan","Tokelau","East Timor","Turkmenistan","Tunisia","Tonga","Turkey","Trinidad and Tobago","Tuvalu","Taiwan","Tanzania","Ukraine","Uganda","U.S. Minor Outlying Islands","United States","Uruguay","Uzbekistan","Vatican City","Saint Vincent and the Grenadines","Venezuela","British Virgin Islands","U.S. Virgin Islands","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Kosovo","Yemen","Mayotte","South Africa","Zambia","Zimbabwe"] diff --git a/data/nba.json b/data/nba.json new file mode 100644 index 0000000000..5bb4a2e0e8 --- /dev/null +++ b/data/nba.json @@ -0,0 +1 @@ +["Boston Celtics", "Dallas Mavericks", "Brooklyn Nets", "Houston Rockets", "New York Knicks", "Memphis Grizzlies", "Philadelphia 76ers", "New Orleans Hornets", "Toronto Raptors", "San Antonio Spurs", "Chicago Bulls", "Denver Nuggets", "Cleveland Cavaliers", "Minnesota Timberwolves", "Detroit Pistons", "Portland Trail Blazers", "Indiana Pacers", "Oklahoma City Thunder", "Milwaukee Bucks", "Utah Jazz", "Atlanta Hawks", "Golden State Warriors", "Charlotte Bobcats", "Los Angeles Clippers", "Miami Heat", "Los Angeles Lakers", "Orlando Magic", "Phoenix Suns", "Washington Wizards", "Sacramento Kings"] \ No newline at end of file diff --git a/data/nhl.json b/data/nhl.json new file mode 100644 index 0000000000..7ee02b7f2c --- /dev/null +++ b/data/nhl.json @@ -0,0 +1 @@ +["New Jersey Devils", "New York Islanders", "New York Rangers", "Philadelphia Flyers", "Pittsburgh Penguins", "Chicago Blackhawks", "Columbus Blue Jackets", "Detroit Red Wings", "Nashville Predators", "St. Louis Blues", "Boston Bruins", "Buffalo Sabres", "Montreal Canadiens", "Ottawa Senators", "Toronto Maple Leafs", "Calgary Flames", "Colorado Avalanche", "Edmonton Oilers", "Minnesota Wild", "Vancouver Canucks", "Carolina Hurricanes", "Florida Panthers", "Tampa Bay Lightning", "Washington Capitals", "Winnipeg Jets", "Anaheim Ducks", "Dallas Stars", "Los Angeles Kings", "Phoenix Coyotes", "San Jose Sharks"] \ No newline at end of file diff --git a/data/repos.json b/data/repos.json new file mode 100644 index 0000000000..86f7612ee6 --- /dev/null +++ b/data/repos.json @@ -0,0 +1,1053 @@ +[ + { + "name": "typeahead.js", + "description": "A fast and fully-featured autocomplete library", + "language": "JavaScript", + "value": "typeahead.js", + "tokens": [ + "typeahead.js", + "JavaScript" + ] + }, + { + "name": "cassandra", + "description": "A Ruby client for the Cassandra distributed database", + "language": "Ruby", + "value": "cassandra", + "tokens": [ + "cassandra", + "Ruby" + ] + }, + { + "name": "hadoop-lzo", + "description": "Refactored version of code.google.com/hadoop-gpl-compression for hadoop 0.20", + "language": "Shell", + "value": "hadoop-lzo", + "tokens": [ + "hadoop", + "lzo", + "Shell" + ] + }, + { + "name": "scribe", + "description": "A Ruby client library for Scribe", + "language": "Ruby", + "value": "scribe", + "tokens": [ + "scribe", + "Ruby" + ] + }, + { + "name": "thrift_client", + "description": "A Thrift client wrapper that encapsulates some common failover behavior", + "language": "Ruby", + "value": "thrift_client", + "tokens": [ + "thrift", + "client", + "Ruby" + ] + }, + { + "name": "mustache.js", + "description": "Minimal templating with {{mustaches}} in JavaScript", + "language": "JavaScript", + "value": "mustache.js", + "tokens": [ + "mustache.js", + "JavaScript" + ] + }, + { + "name": "grabby-hands", + "description": "A JVM Kestrel client that aggregates queues from multiple servers. Implemented in Scala with Java bindings. In use at Twitter for all JVM Search and Streaming Kestrel interactions.", + "language": "Scala", + "value": "grabby-hands", + "tokens": [ + "grabby", + "hands", + "Scala" + ] + }, + { + "name": "gizzard", + "description": "A flexible sharding framework for creating eventually-consistent distributed datastores", + "language": "Scala", + "value": "gizzard", + "tokens": [ + "gizzard", + "Scala" + ] + }, + { + "name": "thrift", + "description": "Twitter's out-of-date, forked thrift", + "language": "C++", + "value": "thrift", + "tokens": [ + "thrift", + "C++" + ] + }, + { + "name": "flockdb", + "description": "A distributed, fault-tolerant graph database", + "language": "Scala", + "value": "flockdb", + "tokens": [ + "flockdb", + "Scala" + ] + }, + { + "name": "flockdb-client", + "description": "A Ruby client library for FlockDB", + "language": "Ruby", + "value": "flockdb-client", + "tokens": [ + "flockdb", + "client", + "Ruby" + ] + }, + { + "name": "standard-project", + "description": "A slightly more standard sbt project plugin library ", + "language": "Scala", + "value": "standard-project", + "tokens": [ + "standard", + "project", + "Scala" + ] + }, + { + "name": "snowflake", + "description": "Snowflake is a network service for generating unique ID numbers at high scale with some simple guarantees.", + "language": "Scala", + "value": "snowflake", + "tokens": [ + "snowflake", + "Scala" + ] + }, + { + "name": "haplocheirus", + "description": "A Redis-backed storage engine for timelines", + "language": "Scala", + "value": "haplocheirus", + "tokens": [ + "haplocheirus", + "Scala" + ] + }, + { + "name": "gizzmo", + "description": "A command-line client for Gizzard", + "language": "Ruby", + "value": "gizzmo", + "tokens": [ + "gizzmo", + "Ruby" + ] + }, + { + "name": "scala-zookeeper-client", + "description": "A Scala client library for ZooKeeper", + "language": "Scala", + "value": "scala-zookeeper-client", + "tokens": [ + "scala", + "zookeeper", + "client", + "Scala" + ] + }, + { + "name": "rpc-client", + "description": "A scala library that encapsulates RPC communications.", + "language": "Scala", + "value": "rpc-client", + "tokens": [ + "rpc", + "client", + "Scala" + ] + }, + { + "name": "twitcher", + "description": "A tool for executing scripts when ZooKeeper nodes change.", + "language": "Python", + "value": "twitcher", + "tokens": [ + "twitcher", + "Python" + ] + }, + { + "name": "killdeer", + "description": "Killdeer is a simple server for replaying a sample of responses to sythentically recreate production response characteristics.", + "language": "Scala", + "value": "killdeer", + "tokens": [ + "killdeer", + "Scala" + ] + }, + { + "name": "ostrich", + "description": "A stats collector & reporter for Scala servers", + "language": "Scala", + "value": "ostrich", + "tokens": [ + "ostrich", + "Scala" + ] + }, + { + "name": "rubyenterpriseedition187-248", + "description": "Twitter's updates to Ruby Enterprise Edition, itself based on MRI 1.8.7-p248", + "language": "Ruby", + "value": "rubyenterpriseedition187-248", + "tokens": [ + "rubyenterpriseedition187", + "248", + "Ruby" + ] + }, + { + "name": "scala_school", + "description": "Lessons in the Fundamentals of Scala", + "language": "Scala", + "value": "scala_school", + "tokens": [ + "scala", + "school", + "Scala" + ] + }, + { + "name": "querulous", + "description": "An agreeable way to talk to your database", + "language": "Scala", + "value": "querulous", + "tokens": [ + "querulous", + "Scala" + ] + }, + { + "name": "xrayspecs", + "description": "extensions to scala specs", + "language": "Scala", + "value": "xrayspecs", + "tokens": [ + "xrayspecs", + "Scala" + ] + }, + { + "name": "kestrel-client", + "description": "A Kestrel client library for Ruby", + "language": "Ruby", + "value": "kestrel-client", + "tokens": [ + "kestrel", + "client", + "Ruby" + ] + }, + { + "name": "finagle", + "description": "A fault tolerant, protocol-agnostic RPC system", + "language": "Scala", + "value": "finagle", + "tokens": [ + "finagle", + "Scala" + ] + }, + { + "name": "naggati2", + "description": "Protocol builder for netty using scala", + "language": "Scala", + "value": "naggati2", + "tokens": [ + "naggati2", + "Scala" + ] + }, + { + "name": "twitter-text-conformance", + "description": "Conformance testing data for the twitter-text-* repositories", + "value": "twitter-text-conformance", + "tokens": [ + "twitter", + "text", + "conformance" + ] + }, + { + "name": "twitter-text-rb", + "description": "A library that does auto linking and extraction of usernames, lists and hashtags in tweets", + "language": "Ruby", + "value": "twitter-text-rb", + "tokens": [ + "twitter", + "text", + "rb", + "Ruby" + ] + }, + { + "name": "twitter-text-java", + "description": "A Java implementation of Twitter's text processing library", + "language": "Java", + "value": "twitter-text-java", + "tokens": [ + "twitter", + "text", + "java", + "Java" + ] + }, + { + "name": "twitter-text-js", + "description": "A JavaScript implementation of Twitter's text processing library", + "language": "JavaScript", + "value": "twitter-text-js", + "tokens": [ + "twitter", + "text", + "js", + "JavaScript" + ] + }, + { + "name": "joauth", + "description": "A Scala library for authenticating HTTP Requests using OAuth", + "language": "Scala", + "value": "joauth", + "tokens": [ + "joauth", + "Scala" + ] + }, + { + "name": "schmemcached", + "description": "A prototype implementation of a Memcached client & server in Scala using Finagle", + "language": "Scala", + "value": "schmemcached", + "tokens": [ + "schmemcached", + "Scala" + ] + }, + { + "name": "chainsaw", + "description": "A thin Scala wrapper for SLF4J", + "language": "Scala", + "value": "chainsaw", + "tokens": [ + "chainsaw", + "Scala" + ] + }, + { + "name": "streamyj", + "description": "Scala sugar for the Jackson JSON parser", + "language": "Scala", + "value": "streamyj", + "tokens": [ + "streamyj", + "Scala" + ] + }, + { + "name": "cloudhopper-commons-util", + "description": "The ch-commons-util package contains common utility classes for Cloudhopper-based Java projects.", + "language": "Java", + "value": "cloudhopper-commons-util", + "tokens": [ + "cloudhopper", + "commons", + "util", + "Java" + ] + }, + { + "name": "twitter.github.com", + "description": "A listing of open source efforts at Twitter on GitHub", + "language": "JavaScript", + "value": "twitter.github.com", + "tokens": [ + "twitter.github.com", + "JavaScript" + ] + }, + { + "name": "time_constants", + "description": "Time constants, in seconds, so you don't have to use slow ActiveSupport helpers", + "language": "Ruby", + "value": "time_constants", + "tokens": [ + "time", + "constants", + "Ruby" + ] + }, + { + "name": "commons", + "description": "Twitter common libraries for python and the JVM", + "language": "Java", + "value": "commons", + "tokens": [ + "commons", + "Java" + ] + }, + { + "name": "scala-bootstrapper", + "description": "initial setup for a scala library or server, using sbt", + "language": "Ruby", + "value": "scala-bootstrapper", + "tokens": [ + "scala", + "bootstrapper", + "Ruby" + ] + }, + { + "name": "sbt-thrift", + "description": "sbt rules for generating source stubs out of thrift IDLs, for java & scala", + "language": "Ruby", + "value": "sbt-thrift", + "tokens": [ + "sbt", + "thrift", + "Ruby" + ] + }, + { + "name": "cloudhopper-smpp", + "description": "Efficient, scalable, and flexible Java implementation of the Short Messaging Peer to Peer Protocol (SMPP)", + "language": "Java", + "value": "cloudhopper-smpp", + "tokens": [ + "cloudhopper", + "smpp", + "Java" + ] + }, + { + "name": "cloudhopper-commons-charset", + "description": "Java utility classes for converting between charsets (mostly \"mobile\" in nature) such as Unicode to GSM-7/GSM-8 and vice versa.", + "language": "Java", + "value": "cloudhopper-commons-charset", + "tokens": [ + "cloudhopper", + "commons", + "charset", + "Java" + ] + }, + { + "name": "cloudhopper-commons-gsm", + "description": "Java utility classes for working with GSM mobile technologies such as SMS and MMS.", + "language": "Java", + "value": "cloudhopper-commons-gsm", + "tokens": [ + "cloudhopper", + "commons", + "gsm", + "Java" + ] + }, + { + "name": "util", + "description": "Wonderful reusable code from Twitter", + "language": "Scala", + "value": "util", + "tokens": [ + "util", + "Scala" + ] + }, + { + "name": "Rowz", + "description": "A sample gizzard application", + "language": "Scala", + "value": "Rowz", + "tokens": [ + "rowz", + "Scala" + ] + }, + { + "name": "scala-json", + "description": "Scala JSON toolkit. Originally from the Odersky \"Stairway\" Book, tightened up and tests added by Twitter", + "language": "Scala", + "value": "scala-json", + "tokens": [ + "scala", + "json", + "Scala" + ] + }, + { + "name": "twui", + "description": "A UI framework for Mac based on Core Animation", + "language": "Objective-C", + "value": "twui", + "tokens": [ + "twui", + "Objective-C" + ] + }, + { + "name": "bootstrap", + "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development.", + "language": "JavaScript", + "value": "bootstrap", + "tokens": [ + "bootstrap", + "JavaScript" + ] + }, + { + "name": "scrooge-runtime", + "description": "Runtime classes for scrooge-generated Thrift code", + "language": "Scala", + "value": "scrooge-runtime", + "tokens": [ + "scrooge", + "runtime", + "Scala" + ] + }, + { + "name": "sbt-scrooge", + "description": "An SBT plugin that adds a mixin for doing Thrift code auto-generation during your compile phase", + "language": "Scala", + "value": "sbt-scrooge", + "tokens": [ + "sbt", + "scrooge", + "Scala" + ] + }, + { + "name": "scrooge", + "description": "A Thrift generator for Scala", + "language": "Scala", + "value": "scrooge", + "tokens": [ + "scrooge", + "Scala" + ] + }, + { + "name": "webrat", + "description": "Webrat - Ruby Acceptance Testing for Web applications", + "language": "Ruby", + "value": "webrat", + "tokens": [ + "webrat", + "Ruby" + ] + }, + { + "name": "twemperf", + "description": "A tool for measuring memcached server performance", + "language": "C", + "value": "twemperf", + "tokens": [ + "twemperf", + "C" + ] + }, + { + "name": "pycascading", + "description": "A Python wrapper for Cascading", + "language": "Python", + "value": "pycascading", + "tokens": [ + "pycascading", + "Python" + ] + }, + { + "name": "hogan.js", + "description": "A compiler for the Mustache templating language", + "language": "JavaScript", + "value": "hogan.js", + "tokens": [ + "hogan.js", + "JavaScript" + ] + }, + { + "name": "mysql", + "description": "MySQL fork maintained and used at Twitter", + "language": "C", + "value": "mysql", + "tokens": [ + "mysql", + "C" + ] + }, + { + "name": "scalding", + "description": "A Scala API for Cascading", + "language": "Scala", + "value": "scalding", + "tokens": [ + "scalding", + "Scala" + ] + }, + { + "name": "cassie", + "description": "A Scala client for Cassandra", + "language": "Scala", + "value": "cassie", + "tokens": [ + "cassie", + "Scala" + ] + }, + { + "name": "effectivescala", + "description": "Twitter's Effective Scala Guide", + "language": "Shell", + "value": "effectivescala", + "tokens": [ + "effectivescala", + "Shell" + ] + }, + { + "name": "twitterActors", + "description": "Improved Scala actors library; used internally at Twitter", + "language": "Scala", + "value": "twitterActors", + "tokens": [ + "twitteractors", + "Scala" + ] + }, + { + "name": "mahout", + "description": "Twitter's fork of Apache Mahout (we intend to push changes upstream)", + "language": "Java", + "value": "mahout", + "tokens": [ + "mahout", + "Java" + ] + }, + { + "name": "cassovary", + "description": "Cassovary is a simple big graph processing library for the JVM", + "language": "Scala", + "value": "cassovary", + "tokens": [ + "cassovary", + "Scala" + ] + }, + { + "name": "twemproxy", + "description": "A fast, light-weight proxy for memcached and redis", + "language": "C", + "value": "twemproxy", + "tokens": [ + "twemproxy", + "C" + ] + }, + { + "name": "jvmgcprof", + "description": "A simple utility for profile allocation and garbage collection activity in the JVM", + "language": "C", + "value": "jvmgcprof", + "tokens": [ + "jvmgcprof", + "C" + ] + }, + { + "name": "twitter-cldr-rb", + "description": "Ruby implementation of the ICU (International Components for Unicode) that uses the Common Locale Data Repository to format dates, plurals, and more.", + "language": "Ruby", + "value": "twitter-cldr-rb", + "tokens": [ + "twitter", + "cldr", + "rb", + "Ruby" + ] + }, + { + "name": "bootstrap-server", + "description": "The node server that powers the bootstrap customize page", + "language": "JavaScript", + "value": "bootstrap-server", + "tokens": [ + "bootstrap", + "server", + "JavaScript" + ] + }, + { + "name": "sbt-package-dist", + "description": "sbt 11 plugin codifying best practices for building, packaging, and publishing", + "language": "Scala", + "value": "sbt-package-dist", + "tokens": [ + "sbt", + "package", + "dist", + "Scala" + ] + }, + { + "name": "ospriet", + "description": "An example audience moderation app built on Twitter", + "language": "JavaScript", + "value": "ospriet", + "tokens": [ + "ospriet", + "JavaScript" + ] + }, + { + "name": "innovators-patent-agreement", + "description": "Innovators Patent Agreement (IPA)", + "value": "innovators-patent-agreement", + "tokens": [ + "innovators", + "patent", + "agreement" + ] + }, + { + "name": "recess", + "description": "A simple and attractive code quality tool for CSS built on top of LESS", + "language": "JavaScript", + "value": "recess", + "tokens": [ + "recess", + "JavaScript" + ] + }, + { + "name": "ambrose", + "description": "A platform for visualization and real-time monitoring of data workflows", + "language": "JavaScript", + "value": "ambrose", + "tokens": [ + "ambrose", + "JavaScript" + ] + }, + { + "name": "twitter-text-objc", + "description": "An Objective-C implementation of Twitter's text processing library", + "language": "Objective-C", + "value": "twitter-text-objc", + "tokens": [ + "twitter", + "text", + "objc", + "Objective-C" + ] + }, + { + "name": "activerecord-reputation-system", + "description": "An Active Record Reputation System for Rails", + "language": "Ruby", + "value": "activerecord-reputation-system", + "tokens": [ + "activerecord", + "reputation", + "system", + "Ruby" + ] + }, + { + "name": "twitter4j", + "description": "Twitter4J is an open-sourced, mavenized and Google App Engine safe Java library for the Twitter API which is released under the APL 2.0.", + "language": "Java", + "value": "twitter4j", + "tokens": [ + "twitter4j", + "Java" + ] + }, + { + "name": "zipkin", + "description": "Zipkin is a distributed tracing system", + "language": "Scala", + "value": "zipkin", + "tokens": [ + "zipkin", + "Scala" + ] + }, + { + "name": "elephant-twin", + "description": "Elephant Twin is a framework for creating indexes in Hadoop", + "language": "Java", + "value": "elephant-twin", + "tokens": [ + "elephant", + "twin", + "Java" + ] + }, + { + "name": "elephant-twin-lzo", + "description": "Elephant Twin LZO uses Elephant Twin to create LZO block indexes", + "language": "Java", + "value": "elephant-twin-lzo", + "tokens": [ + "elephant", + "twin", + "lzo", + "Java" + ] + }, + { + "name": "iago", + "description": "A load generator, built for engineers", + "language": "Scala", + "value": "iago", + "tokens": [ + "iago", + "Scala" + ] + }, + { + "name": "twemcache", + "description": "Twemcache is the Twitter Memcached", + "language": "C", + "value": "twemcache", + "tokens": [ + "twemcache", + "C" + ] + }, + { + "name": "twitter-cldr-js", + "description": "JavaScript implementation of the ICU (International Components for Unicode) that uses the Common Locale Data Repository to format dates, plurals, and more. Based on twitter-cldr-rb.", + "language": "JavaScript", + "value": "twitter-cldr-js", + "tokens": [ + "twitter", + "cldr", + "js", + "JavaScript" + ] + }, + { + "name": "algebird", + "description": "Abstract Algebra for Scala", + "language": "Scala", + "value": "algebird", + "tokens": [ + "algebird", + "Scala" + ] + }, + { + "name": "hdfs-du", + "description": "Visualize your HDFS cluster usage", + "language": "JavaScript", + "value": "hdfs-du", + "tokens": [ + "hdfs", + "du", + "JavaScript" + ] + }, + { + "name": "clockworkraven", + "description": "Human-Powered Data Analysis with Mechanical Turk", + "language": "Ruby", + "value": "clockworkraven", + "tokens": [ + "clockworkraven", + "Ruby" + ] + }, + { + "name": "jerkson", + "description": "The Scala applewood bacon to Jackson's chicken breast: JSON cordon bleu.", + "language": "Scala", + "value": "jerkson", + "tokens": [ + "jerkson", + "Scala" + ] + }, + { + "name": "bower-server", + "description": "The Bower Server", + "language": "Ruby", + "value": "bower-server", + "tokens": [ + "bower", + "server", + "Ruby" + ] + }, + { + "name": "bower", + "description": "A package manager for the web", + "language": "JavaScript", + "value": "bower", + "tokens": [ + "bower", + "JavaScript" + ] + }, + { + "name": "twitter-cldr-npm", + "description": "TwitterCldr npm package", + "language": "JavaScript", + "value": "twitter-cldr-npm", + "tokens": [ + "twitter", + "cldr", + "npm", + "JavaScript" + ] + }, + { + "name": "tormenta", + "description": "Scala extensions for Storm", + "language": "Scala", + "value": "tormenta", + "tokens": [ + "tormenta", + "Scala" + ] + }, + { + "name": "sprockets-commonjs-twitter", + "description": "Adds CommonJS support to Sprockets", + "language": "JavaScript", + "value": "sprockets-commonjs-twitter", + "tokens": [ + "sprockets", + "commonjs", + "twitter", + "JavaScript" + ] + }, + { + "name": "scalding-commons", + "description": "Common extensions to the Scalding MapReduce DSL.", + "language": "Scala", + "value": "scalding-commons", + "tokens": [ + "scalding", + "commons", + "Scala" + ] + }, + { + "name": "captured", + "description": "Quick screen capture sharing utility for Mac OS X.", + "language": "Ruby", + "value": "captured", + "tokens": [ + "captured", + "Ruby" + ] + }, + { + "name": "chill", + "description": "Scala extensions for the Kryo serialization library", + "language": "Scala", + "value": "chill", + "tokens": [ + "chill", + "Scala" + ] + }, + { + "name": "bookkeeper", + "description": "Twitter's fork of Apache BookKeeper (will push changes upstream eventually)", + "language": "Java", + "value": "bookkeeper", + "tokens": [ + "bookkeeper", + "Java" + ] + }, + { + "name": "secureheaders", + "description": "Security related headers all in one gem", + "language": "Ruby", + "value": "secureheaders", + "tokens": [ + "secureheaders", + "Ruby" + ] + }, + { + "name": "RTLtextarea", + "description": "Automatically detects RTL and configures a text input", + "language": "JavaScript", + "value": "RTLtextarea", + "tokens": [ + "rtltextarea", + "JavaScript" + ] + }, + { + "name": "bijection", + "description": "Reversible conversions between types", + "language": "Scala", + "value": "bijection", + "tokens": [ + "bijection", + "Scala" + ] + }, + { + "name": "fatcache", + "description": "Memcache on SSD", + "language": "C", + "value": "fatcache", + "tokens": [ + "fatcache", + "C" + ] + }, + { + "name": "rails", + "description": "Ruby on Rails", + "language": "Ruby", + "value": "rails", + "tokens": [ + "rails", + "Ruby" + ] + }, + { + "name": "flight", + "description": "A lightweight, component-based JavaScript framework", + "language": "JavaScript", + "value": "flight", + "tokens": [ + "flight", + "JavaScript" + ] + } +] diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000000..ec6cb24438 --- /dev/null +++ b/examples/index.html @@ -0,0 +1,75 @@ + + + + + + typeahead.js – examples + + + + + + + +
+

examples

+ +
+

Countries

+

Prefetches data, stores it in localStorage, and searches it on the client

+ +
+ +
+ +
+ +
+
+ +
+

Open Source Projects by Twitter

+

Defines a custom template and template engine for rendering suggestions

+ +
+ +
+ +
+ +
+
+ +
+

Arabic Phrases

+

Hardcoded list showing Right-To-Left (RTL) support

+ +
+ +
+ +
+ +
+
+ +
+

NBA and NHL Teams

+

Two datasets that are prefetched, stored, and searched on the client

+ +
+ +
+ +
+ +
+
+
+ + + + + + + diff --git a/font/Prociono-Regular-webfont.eot b/font/Prociono-Regular-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..9f427769d024d16d3268879f5dcb975681015572 GIT binary patch literal 33742 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 literal 0 HcmV?d00001 diff --git a/font/Prociono-Regular-webfont.svg b/font/Prociono-Regular-webfont.svg new file mode 100755 index 0000000000..c8f67ae0ce --- /dev/null +++ b/font/Prociono-Regular-webfont.svg @@ -0,0 +1,150 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : This font has been released into the public domain by its author Barry Schwartz This applies worldwideIn some countries this may not be legally possible if soBarry Schwartz grants anyone the right to use this work for any purpose without any conditions unless such conditions are required by law +Designer : Barry Schwartz +Foundry : The Crud Factory La Rubejplenigejo +Foundry URL : httpcrudfactorycom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/font/Prociono-Regular-webfont.ttf b/font/Prociono-Regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..235e5edee71ef17a269c48ad55da7fe091af05ef GIT binary patch literal 33556 zcmd44dwg5fnJ&E6*4CCR%d+mWEX$HC%ZiX?#gb*kaU45N;y8|Rjq7?$a6>T0gg^)( zgw#zlX_}@X(3Dcjr8G@xnldz#FSEBSuEWp(WhldNIt)YjD8m3{TFR6%Oo!ocNp{Zj zuI*f)?R@9_e&>%bEnE90?Y-Xh-rwh4W}GqR#ztn*zP{1(S6_4geT?yDoUL22YZjT{WxB{V)!$kedsU#egwxiFeW)yeD-s_SKV^m&5W7u#P#TBKAX*5;Yt1o#}DFo z?WG$ox#s!TFFS-Eufccz?$Yb8i&oXTu4Bynuejbaea+|8GU`+Ai_b$8qlFipJ z6SFX8{SvO*FTZML`rwDQG>-ASYu;XW*(FmafBKbUjLqOTSo=Dh@anc-;P?oR8`o{P z?hCaG!s~JT5BR<4RU0q88_LYCa{XO`PsKuVr)mQ2B=?>|w zxzD%76$g&m=?s&Yf-}ANZz=v~V$0a&*k6bLnb;L<7xur(_TVmh4@rE3e%Z$ASu^8T zU2@&k%qp(2Q>Sn*p1a|aYp=vP;|(~j(Kk8HaQ-kqfbHYV&T?#;UB#|tUtoWZ-@lQ4 zlikktvxDqjc9fOb!|WLQTlV+tAKCxQ{)PQ3`#1J3d!L=)61Q>(_wrgEK{jGJWhn~Y0$(bm)}wrO$ZsMy{r&J2m|G;R5q z*mlrXIw1BZX=}P)Y_nn;q^-37oc-P6OuyK!6X!?7HbYxECCS@y-3T z#Tgr`14n$CA8-NxOr}%(o6O8)bKZOx4qr4rab-$!5>uH?;y(6e#y0ja@Z#LR;pyd5 z;N|GYva(iR3)ymV6_?y}nLh-2G8Pq2r|;8$b>fJzpW=w#st#ki7oSbIPX?d=IlG(v zko}l=ENY8-qrqr6+7NAuW}_EJkHi{YV;{@lV*1s)!HYj;{}1kCQD?L!TKB2@_^DH; z-Z=I6smD$|a_XT|<=3uwZR)j4Uc30Ui(VUlZTPj=t1rB|HoD79((}Lhk1Hf3#y?JS zX2{yvZ{s4kS+Q6vY?byZN43-C_IQ2%KuxeVR2Qy~L}Lx{#za$cUh2GbbEYLbzcrU{ zE3_9EbS&&#)U~*~XG!l;Xvr1*D+g8$o+(# z9kH5iW?y4hv;V;++5PO7Y!f*0dG-){lzoOVl{Kr(vr0X0cw8O0{z8?-yK7V>J>GSp zIJf=6=s&64(^8XBd2{p^sy&@irRG&5J-CjVo`AUqWv}!=Wv`kCUdsjcIVv z0BFbksR7_c<9+c<)~`KxB=l8JGX`A6gq}0-sV}>!+Uyr`Kkw< z>{2GSbo1x%=FuBR#^aNC`*?2%A3WX*%J+Lz;TgXZf+;mx1*gQF{TC!z`GWNJ?&8qBpS++1I z&dW~C%+qC)IMOP3n$2&`yJD_H%oUq9wVljM(Yi8zhYn9a<9r)E^TYJv$^D6O%CQo}YAX&0p+PtD~ zVk#b9UVBSVa4^2KGIJ!j{*G|$>K~gg@;dw{h90UqVv5l?CALl8Ep3JLnOP-U&Qx<& zwdKpuofUGrWKt?}xg1yRS=D^*$SN^1n=!H~yiKL-a?eU8#nKp{7xJ{{0;V_@+il@p zb%hab3-1aSMwC&zU2o+-r>%JQB(s`sHNDQ#EXy-YO=nAW@y2{UUzQYh5uP7x&fxiK zHd`{)w9xq~h4tdR;_!+0nx9ou$IDIPO=hi4DQmi1X<@Y>f0I*-;U(*hOV0WjE_uWy zt(B+M_S%QLZ~oxR%$K&wYO2MoR<)=pr`BlwP_1%miuJ>XyAOP5GA_q(+1H}RoLU_& z`<$8sA1UXolu|tDSrcv5I_GRnoezgW+Tz~Xc+7zv+?EzMG&*OS8>@^<8M-vvB5uI> zES)zoEtYC&;XO{!vC84A34#(rueW^apW0JPG%n_g@nXKc(B91z%b8D0+>*D%m4H&s z+lz6XT4ZqT{7JLULk(7C8H>3Gyz4&LuR7~qbD9Rc^VUhXI^4BNIo zRr51GwEEGD9v!kO%FGY(Az1Fde$HB<9JzDiQQ{vHJ94Vil$Kv% z9c&3(!R}zCM&jIFg~c!pZMjlouPr^>)7VszE+uhAU7S^e`LbDIaa_0NO6J9M-K+Dfot6A4AjLI{Pn zxYy;rznXa>EnO?Xl%Q8zaWO9z^1gg7P%rts4(^M$@MKfcRd4cnEe>w+#S2Y1Zfnoy z>UqE)aJ86_RmW7MP|3%=O-rWkDlV(zb=G3`WR3T$-2)*==h&&I&0X>!e6f1g!1AE> zYpm2tv@R;F0YVYMe#tE1M6EcXHe}25x?0Uu>GC||gd=*~RrVVD(JWVcg<5e53aT!r z76B0hkQ%FT#_H7KIBGMF+Jr=D3vniG(0r*7B(U`y$0R#u zHR9A7Dn2x+4J}|>E#SfgIm{g$+QK&M&1B=hOw#CrFFY+2-@@8md)&4x3O!ycU^BRRS0j9o*z7! z;fJPDli}TaYwc~@md;(jVo5An3`_6bdwwkW=&ru5Q2+2>?Hj*x^orG2TVtO)aZDa* z{rD&!KQt0+I=1u7<&i5_UuBJb7P@re)XPdriLnK&huz6a8O+FRZKlnUE-zAqTB^^g z@q9U=urGr7J=t=Fm<+Bip_$M+EN{&!9So|>=YQ5_|nFZ&y&^65yak-%`{T&@0YK2R+8=}x&Y$_0= z6J?ViXuLu3!LM&mg3k;7Xwl~|S^NQCgCz+C;@}{C(jb13D-(Ox-B^0@I|sH6F1H=( zpW@>@ypb;%8{+jt6T|L-Wsm&Jz3bi{obD}7Zr{3o^jpt7z4zxo&{MzV`yTninvs_e zZFyut$MgYbSK!X^q0Rb2U4QoBfxNO*!T(3L=sOO5f0^}z$-Yc77$3gr?LALE%HO+< z^b99E#f!pDHL#Lo2Ae~Nz({dbImbF_7GY@(6J!`4!|I6Ncvc^k4k_y)K_14{h#-2E zSGsj^ik=LZYf zj3YfDtts&h>-%n>j5lNsy|rCW>zN(;zKqRU-PBs!y<{-4j&Cx?!1Pi6;>NKX4u3+hnhP z$76R#y7d!R$h=4Y{>4#_>i(N$zfK-+TgBd)rvehND*+e0#Cw`Rqe-BDRr0=ccx6<== zo(k~wJd05km|Bq~pUEl<*9jk7b!XM;<7GuiP^nshtzp%yBCXnUnn#Qs?voG%QZNt- zXqTPC{@COXB64VCqHNu~zjZ)A<+n-O+cSIUd2xwJinIsbVUor-H@LYEPW}^|K)8Ki zO-(VVTf}JMbzJk;U;zF(Uf2nLkKWtHT0Y_JebV!*6hAlT`Pomu@M(WPux#Np(yhO@bt0+f&(&( zP#>Qyq_8>W!-Q|AOh>k#7}sC7?Dzn29rRq+sh8mo=fO)2$Qu|&C#qbt_X^UhUZ++IRR*sS?im86v{vhd4RFC4FfAOwu8nn&c5(`pPBt3MA8(M(Rr;o` zyL-Qv*?43sm$EIK+&}un%Qrs0Y5#Q(Z^;zL@<~bNiG3Z*rtW!S{pM@K6Pt&5{-eXs z9eh@OQArIT4G0|qhvgZ(caZh7QZ?C5r@}7ATUX^u5-cZIYqP5Fcp3C=ghe&`glpn} z>*6!huCKZxt%dOJW*_)f63#Az%kA<8>g9khR>(IN!9k`5%QpV%L@+2xmYT(rBPaf& zjk^__eanZY2$$S`{bv2Wnci$N>vWj9yX6b}f7Z<}x(x4!T%+lbTtuYuIaZ3&`_(8c zgf|iUb%Mer2bp+_IM3A>={})D8o(S{O%#M=VOUs8oy%P|+bUfFG7%0#^><5)xzP5O zWYOSy2d{?z2(wxYD887t|KINY(d(U;eIfi&w)^%scind7`eNwL!kguw^~7zRi|*g` zleN!=i=Fq{Z#lU7i5)BZ6Moqp=sRD?eM(VkKoMW78+G!j!16lNW&)ulFeX#N=d0#{8iLW8Mu zskOu@MZ7jEw8a{fcyh6+(AEMGJ~J?LJ%>q)rEIChlYE7KP>EO_+m9>{6bBdCCZ3GG z-r2tI4gKvMsy?ol^+#O_w|?h6X|?w=6Wx*Gcsj6gVcB`l?&o$$>iQS-?||n|eWVYW zUX=^rokn&MD>*ScS|E&=1U8%^j!3R#5iFF*so2Y0fv5QQmnlx?i5Z(>EnX_?+vJdq zA5rf2TO}Uk{BOo}Klm<#x$Bc@WS@uses=EE%52%-I<+QSb_xFDDh7xti(#f{G%*Dp zhQ~`D24=0%n6*lm8pA}n)v6B7RfADFyh6BX${J~=(mW~VkJzpeLsTs7q=lU&QLF8deIBG&Lx!2^=ZQ*mtA?GFZ_u=Yb)Vga;P3 zyj7|Uil8&>)Dlow@Q$-kSO^-mL>NqHa|BYvgf5pR3*D7!!1$S~664oo2ZnDJS`6_Q zMPZ6$ne$Mg%%UKZFHmoS6YGRW1uvFcyh@($zV(4*-=6r!$E~gVZruO3eUrPd$m=6d zASLWyaP8=pt)tVag?*FBT1iSu8J^hK*%SJ+z@UEk=-|*}FYSGP%L<=#z`NL*nArLC zmA~Z+ZizTj$)puBNIGu>eET%Awtj{P8!jg_M-VjdSV*CH{1kQtvRVzvoW+Bo$dXO) zAw@mOqCZBOfmxc8R_;kA6w8QB3J>w?KiU?wpM3eDM25?}YAC3C14||Ka7TAjohb2{?#P{9u)M&@Q461KExOeK=;dsYC?|e-E*Wdp2%%jJ4Zr!^u zJ#^IMn0%;^{r33QJsXH8`}H-Z1JIGR$at({B_y`fnn!udFrXGPFquDGChN2GPslGeiNe+XMa4=qj0O3=xb%+*E&unsR9jGf9JAEFq?aL6sb` zCD{xw8fMkwt;boiR-`tS{^5OhPp;oT6kj}f^EZ#~9kg>NPvp0M@z4vZf8q5PZt8YB z(i=zD?v`3_{imz4Yxe)(!u$0Xes0=_u>3yx2>ir$9RR0 zV|oWZjt}11xt)rOx^oi)6~o@%$@CDwz` z)gZL$?NAk0$>gggO()*$Q-0&QFL>64oO{Pld6LrKoq1LGY#*@!(<^cYHM42NB^6oC zX83Bg&L_W4zM4bjPE|UlnJYh3co?KjML1iT5(#o(j|wg97D>SODG#y=dwop zQ^%*hx*`u)D)65YHXW_0Iq^G_r>2H~bTdEX->&~aKe*j5=FiI4ntpCd!q=^UPjc4V zg_m1agj3H|TUJ9l(D2*?7EZpdHEg;i7(Ov3KKNR=yu4>m;2PqI|7NVVC-;BJ8{9JZpxjbutTTW&G-Aky&M%05Gx<-lwRW!!2dxjC9d zo?NH}Qf{(B%FQk{*r7JKOO8NNnA?B}mqK;86roF+gPf*H$ox5C1Kmf`AMjh8v4*5# zNt*ltN}?oN5Z6N?#G6hhi|a1_&gz3}+NBWJ_pcrfC`$v|*WNtib_@^qPUK@&o1CvW z9caiu=`RdU4%l~Ju5TzlAFJYr*Ylfh?ETW}evdaB?y~=o=2~L#2`#PW_mCGHWslE! z+{i@{(Y&PnR~fcwDR~@S3hTjn1(u@RYTVNRe@czy%OeVlk}mul39hyP#$bUFP4pWw z+watdK|>=COsU^ykg*a@1G_gt~_qr>Yuy4`&z@7jFe3Eq9@ z{{MOB(CWJ$eetQ)`}KET*_mAw>bO(qOKxBHi_1R4JN{yy{yydo{}h|~_bh@K?_;Cp zp;qTL4s+#j)gu>Ms-UR~Mp;D_GT!-eP+^~kHm!kEAJ3AVqG+@8s^4@PQf+oZJ!v8P zhib#Ihksgr^KCk9Rx1#N+Hk(Xsx?$Wh53%n`Wui#H_z74hZ=Iu215;=^uwKpfAb=~ zQaM{ohvwNReW(r2*%;kd!da^Q#1*(;9VPt4*(3IVS+V*24Yi>;MS(PX6%x)kR}(}T z_3U|ZU8oH$$iWgGh*E1|u~Y==AkQI02=O2~S>BY4A%pA<_)IarY{|eyplWbx1j3`?yEQ7CEP&aXESx84cZmf5zHIy0dval9h?8=sF z#GclV8&YQS-l1;PF4ujHiRRqGIw3Ngv{bS~%QfS=xgOUSxU@PX-_>4ssitc=^b>q! zBqmYz0tE|BQwy?61^EB%ojgZLcX-FL%Zs490rZSF@UzKXi-JN{PWWQvoKyqU(6wwq zwbVHr-gxA}=X|O42geJp&6~RTnEt{~(w)=28@rEi_t)PXJMh?dA09NDcW+CyZoH&x zwAcB1Z;di2+fxbYN&a#sB1@~RzV?-u56|0iS242r6uV!4-zr;qU~|WjTW|k?{Vl%A z&gIzm*NkpoR96$w1(=2-_x_4mQDl~4ce7H0<|SnKt)T=FI1~key~4E?s!h1o-YT*O z=LwY+0F?ty&3PsPqQ-KwcAFChp~^4=Rax?9sc>j>mZQdAG^?dC15PAI5H6}!E;Zbt z*`qkBfR7tWU?)yGOJe~L+u~Mj!rLphBMFg@M!4665(gDE;!(-vH2aHi_fQN{T(YI1 zg-c`oX>L2Z?gnnXD&SdRU1ay&{$2g$pK|AxeTVjX=hY2b^|ya>*YAEZExn`v#nf*C zj?Tceu7{6FNk>wDRo|(P-qXj|CBAj_sQx$8eCQ}&D0Dvf*!(*9I0`$ula=a-T8)2% zi;1;SHZ9q~(ORYQmav_c<76ShqO<0##fsn(gv&Z9BcS=9&&fQ-1Vct(7*knLpb?}H zycp@wnh|{>HG@m`N?iKmyccCIIKl`(8xVIIOh;)~7W*Wh9ewOS(rG@#^W*y-eqbV< z*Pk0W%AE(_yZz=BBl-vW8&59vyFSfW`h)si59ODE6`rB0$u&d7xDTq)N{tduJv+2kN0cjvV#<*jnmNTNiAj}fh@NS70t zP6q@&VW``Lvy8x@jzoWv5Pb_uwptd%iYK6>%~_!VDB}q_BFZZV4CVqm7ICyd9BEx3 zY!-x7ogHe8OH1ZJ!v!eJAh7Qgo<^<{7bS`+)NF^Api+Yc{zer(y{ARojpX%dAulFi z4B=ZKn=K+;N~uSSmN?`Y*)nJWgB2woNw(E0EgGuZ_?L$!q)<@KNz0Rp-4`gdJ~uHS z$uf_<=!+*FeMymTed57Lz7QT%ss!b^!VmDmQ-)M4lHaKx2|Q;{I`FJedZT`W?T(ON z)}PbgXpICj&t6^7x5eh>fUsW+*kQw}kzQ4cxsp(=zP#oH)#C=$<1V6JJOrxGo6kti z!h0bjH_u7zE2!QfsGb9(HenJ)nlQHjlW5MJp?uCsNyBojL2Fddv>ege)1ii3sMyRg zaC?W^?9!}6`Z&s9kY>$=1d&PstWcqF>fD9@j>MAhG>LuQdLH3|xRQi)^`fEr%|E_- zE&ol8+=_rrv3s41S`VxlkgPoZqA!tn;YEF5^p1frL;dFBgwqh03tW#<`NL3CFc?lNUn0V zO=w9!Xy_M?oz{#zOmi&}usI1@);7~_ZLA_aTh&|(t?4kB*pZ#npIQM#t@VRpEuJiy z9wa=SPzc~ptujNIsTxuinGQATQk%(#hT>2?P@M>xNp+Ibj2f{}ojFS$V~vB!?p?acr4WsRqv~`@pjck)#*s z6E$UcV)N1+Ml)?|1CbH^@lE4fy}O^A8nMAPvZn=dU04|jrzO)DiU z`2bR}Zg`R80KcAmx@%ccK2et2m-c*88LyJ$NJhW?TOV*)aItYbec~fx*+D~ngm~+n z`j}0eF?bmIS=tOb2Pwk~x(lBR9_<+;r8?le;*G+cH3?i8Ytx8@&UvF@Z zzTR`_OIiSd@*kmy>5q-r!T-dtP7g!K9n&{UgklY_E>@}}V`_t_RpC8rvMTC}Zp@ck zrnhjzBPq#l+Ldi6WCS5IZa{aSi11b}B%M!d7n&EzClP$4IJwYH+F2?_3I#w`5^t>5 z%jxmI`I&70N;V9C3Y4vkML$km`sQwcdVnlG^?`W;@6!fUV<`n15@VjHyrl(`;8aeW zT9wxrPS~r#r{-uK2cM#ryA`^EN`!^1+HzcrgQBKfDc(Y_8=r?aZ;8`x3z@RGv)pPC z0Fu_M)^0=^^S2#eKp};yAfm7w(|nE(RnM`9pE>!9`;17V4(G$iG{5CT&F8Tq(0F+M zc`v+7Aq7A^vtFMEQ3ST<#0_QOEyETO6!818Ul&%4BcnQ|#SxiP6-bMo2X?P%f#znU z*z+AKcc~^)DTNrSL+uO^Au8)JAGlvJSv+p&<^~I*h`1M#>gN5c{JO4hlaQ_hM6_C7wMq$OR-a;b z>d)xUY-=5`O22dPoAi~|vwR;nJ%1Q7aoQi*in)pbkzI zN$zhD+>abAd1*e+IouBq?R1@tN@jD_Gny}`7LQX4!v-3FEW(v&^+>0qO2D)L)kEN0 zplCq3^G}Nh7}4ZK%y7nI=v|f^}x>S&uQ#XSW(TXk?G`c`X3d=}pWdZ7O)wB6w7-07D|DlQ~|F36oPoeF9{O5u7O_ zD3swCAi!Z%7DO$-!-XwkN;C*Rzms0!T~Dq1Mq2+i z>Yck^xcLTti0@1ds(bH90WW$PU(LIMvi<_uK}p0Z&mo3Ov+hrL$>-%t9#Y_re7Vy| zK-dAqYhfN}aAZgY3bsdh8dT722KY}H!^Sk`(=5CMGt>bx60k(b@s}4H>4-+B)&|`G zZh=nGmVge8Ml7PWEd~)HP^@!4a!O=6;kvbu>QFmfnk5KH@=)M1r#T2hb2h{ZuHJbF=!3AYu_v8mXV z?Yg8pUF@443b|_n_Xs}GHwixRBijQ{L*zn1zcYN&G{+~YbF&A)vkE>r51%pUj9JCy zwNrkw!lgN!M4|`~6@Yjl!}$k{BLU9^$>7R=%RW#2^pSO)u{!??wD5V{7?-Y!@+F6kOKm`jkYCh z&$?W2o!EV~A?joiZdVKc#1W-tH3zUaC36F!I?PZ8)pr7jxRLPD7|jfdBv!HtDEXrB zac&ljK#s`an*AucTTlZ9@-a^amU5Dm)FrLav}I!N$=NyCKaD8&!j%`~Xxo2je#x*UE?>anK81hf+C&Q0PDSKhfOzTK7;y$=T z->_q1X5z`0uHM*FpIN&@of_$GsqtKmIl(`f`omh#tyHR^I3ox{>Ni{u%9f$9jZgzn zYMP?P3~5WlsKOCxHXM0^K0nJWAFdCkIl)m8(Kt!U#)2EaXc)sj3lDlr8+o5Vv zlOl7Ayg2SQo91k6GdU={Lo)-?A^ciS2{mRS$Haxgp5i;5&`CB};EK#SC#FIUI=2bu zKvw)O-WHHmzpcOEv{pI->o>&n&cXASo!r#gIgn7~e0;yW*?Qr~{!$wb<&^!LkFZz626@s4da?vowfVC=D96EF9jdPAXZyf$=pmC|Hgfk`3k zvvAqM!euL&>LT#sL>$q2oNDDITPqFIhGCXkZM54;RI?d1qy~c&4I~l#yJ7dvhX>44$12dbBH??(#f7kD5@C_2$>qPIVcUmE9sL8y-V|w zl$t2dOzjy>SIZCae?6c`vTNWP_0W|wk4!J~D%QpDI#$Wm$(8!{t%o*k%}!4BWJmA$ z>pMpIzFh;Z&#ZL!Cpu298rXeoL$_z(ioNTyrtRI01}`ZLG^u5OW}sXEGcxGmoTEpz zThJqv)#?nv?5ufngHVZns6^i}t-|#oYA~!+;j=;N_-uvGPdld}fG!$T0BEW}JK$EQ z;}{-?z(|EVIbXG4n)mdq=WmP*uF~swoqQ+MO=Gbyvc^wzU-K(dF_BGFerBch^QDhx z%%NTc*)*5odPQD8|-^vBi&R0r!V$@YrlkAP8N9?O9#JW&?53{TOjM z5N|Yg#h5iO!BOYYlv8!1VxABH5x$|Kca{o@1xK}n7@3Rhc)W=vftHCkarhvTcm1+o zHgs}x-+Tc`2DS|F8#_o<53_2Y}45u=Y zZ7cCeGet90r6c5-6#-7AuST#!OO}d1M6SQ=E5`XOGu{rrKGzrTz7^_ON| zxpzPrU&cR_W{MVye}k?1_(ASm=m*VgHv*2`^V}$MKK86V#h*K20y^g8r^+damdvWrLc_Fp(uut6f?ZTvGrNsKjTc^aq5)1Y5%3kVcJ=-WN-o zZkgT`(;tfDVHTEKc~I^Sp15al%NBlrxY+6)aellpU|wUhO1(9)$F}jX-~VynelHJY zezNNQ$1%=l^$BSLnCAeYkrnC<0LqP8EL>Si=ZjPrkOOwiot@Fh?JgJqB_~o~c2qJo z8PmixCp0{UpeYu7a?&AVOYlDrqLo4#S2)9;reOH!kE=?5i$ zs$IFMkP1pmf&cp;9YE26us%}2^osc-DEjrlqJz=S1vf36`PB(S^#H}hk7*VFew1Sm zKe@*^ZB`{g5Y3`kHHFYk=40$WG_?cqb6Uj^R{hN3X>(=b0Q)2>z-s)^&0Gbb>7f3D z?NZjHhE5cK{viwy(d|@GW~UCL@*ZZYDN8MnKqAh4oSq=$MSTfhOlBw8xI}%LoG0ZO z=_RZRVPQZ-DWc!NMlrq7{RzhkM|1t2gc?8>31nLuNI&s~M9KVMqWIpI($`ZAI0C%U zJ-`#Up_A*Itdt|^L?>50r1L!Nmx2VF21HJ{}H z6B^x`(;DEJ1B=`s%83mLC?@o2X`KZqCPxs(C4pzjh>*IN!&E1zSkhAgA&4|&S_)kv zr&4TNEO&F!4FPZnf!4U& z84QnE*Nm(^V9n(_uk30~<;M%D{rZ7O{+2465)AOpF=--R|J~hp@@f0QOgE1 zfcikaJ!kQm5QqSO=`_07l1)h42>2C8+W_E1?UZ>JfuY5xcxNUqj&tjK{afxBtQ!y9 za?{R{SCT*iOLAh0FZTt%KR7&I>+}>?k7oz(l$5N^=dQo-v`rErByB7Bs zPavNY9dSpd8$SNoi{40Qe!Tcjdfn~I!^3;F3A@mB>J8HnaH#XxMplXw=b>c~VO+^d z#Bm#xb6ZJUxJ7}^NJPN)iT+oZ0|U08Q7(ewu~}x_&t(!=JBI9g@_q-gDqRutz4>ZoB-5}+CQ5B;yK?L5U+5xN#QhVSO zLi%|KC!+<3i-Kfy+7_F-Id~?}hK?i@9;t^n=W`meM>aHxhCBqYEk<)p(J2AtftJXw zV7N09Up~HN%{Ey|CcEXCHEZJ4SHuhQunYL`yROe{-+S?WKiIl?t+Mu8U4sKr{_du~ zm>39pQ-!*rzYF!|8%@$uo5vf~`%fGnFYK29rjp|P4(s6s*ZkraFTD79KFu@M4jvdJ z$kH5bcgR^Fy63Ym%~cSP?<7tVji@amr&Vrp#|Y94iCjuThkQC{N_9mPgwYp7=niz@ zAx$jO3{EjRjoDp&_M0+o3C`$Q)J~3~- zz}<-;Oe*H1MIm2GS0?t+hN)YJ+pT7k)O(vgA=~2%*L0V@ok^{o*xIx0=y>AkE!>%R zrdIdfG|oTx`TD_9VSK|?`MMg9GsS!RujyG5z9pNP7|2}m!@qhpk-p&b9earu9NfiB z)8MlNyI~IX0*ny#7S*H53LeuOh-lotI#2>000|kP*MU9YY7@Fbk82X}8XAy7nhVYC zrGTh*1rUUm;sSIUC(tQS8)yQf<~gW;EeXQeVYW51@Lt>mSwkJg0Th83wW%f2czSH$%V<*4-?Q@2)MY0hA4s&ycGK<4BOmZ< zuG(hLIi$C^{?l^gT75)+wR4`oy1UPRy{OJZ3e6Y~Pw{;b>z4cv{DJb-V351Q6G z5OsJ+sSJperaItMYYEZs12GmSTPbn8SY(p9dOj7F0R9%uK#fkdhwg*sMbDttgAaz| za=QV9N5*(L29GS%?4s~;6kq`uK%G__!pX)SP^1FA8R~M^{hkJN8TSs55H517z791^ z%|mK4>1(u!qnozW%oY((C8_!ZU$$&<^z<&r7c>tPn--`cN(O-Nq@G!H5hUq@dO8B= z@bJZ{lR%_BU>FJ5hC|X~bE1j7l7+fHD8XdlV7%4Y&0`1eU$@#L#Uuaqjct=tm)Z|H zgN5Gpci!8Yd~eU?YZqSk(l?fU^@dTcJbCAB|E?eT%#}~C9J$`+85}$uDGUO_IzCa% zUNLEnY#i!7JR%3|V}U*Sv2BaGV(EeKywtXV;->Y>0{L}2*X-W2VLz8HTC;Wiw|B2` zNVIYldVP?48iB2B$7(mFdC-O`FfS>peg&E+UOa0sk&z{XSxM7ZKZkZHX4UL*N<*u0 zgq8vZP(cWdYy}yMENmvWsMe|#29QHk#6)Vv<-={Yq9RsH6|n`FstV}Kl1UPxUh9G? zWLkX+M0Ye}LJ&t(bZ90xCPqt*P=a1XSW`$jX+xtHR&a@y4NC)nMRRA`+$i@@mr-VB zVoh9<-udpni!6}=ecM1?ak}fT(n@?pU$d+rRogP|#fA~JZmvA}?(WC`rKrC$KAE-l z^*K=>+W6oV?R6)QZtj%(`s7sVF{$g=UoO}XkC5(z0t}jeg?^Se`}#R(fj~}l=xLP> zXY^RMY%`qkm}sPe&~mj=l;xrRV0DOSUS#M>vPfhAXAdBub2j6R061>cL)0M9=SH0b zvVoQ)%?qb}w#rc#1Cuhe3V=XvV6iAFo2!Cwkfep9$7+sd2Cd-FK^cgJLb}$qyHgA6 zVIU^rvZc3Q|K756Wc6qwJkn=PcJafduP4b6#Dc%jul}!8QtmU41i!fI(zR2h>!eff z>yvy2V-LfFID*I$l3sFxO%UvfLEDW%H)W~QPYfCkg!Q=QG5E$RN_$o+0(qQN5~igf z>a*lcP)=h0wZ}7O0t0kCgcOm&sSQyI2ivph2P_>XVL2ob4)AmKMV{DNFE|I*wNxEz zA{&BkR`^;bH~8f=Z3qi!Mt9v=(%9^QVmf0}(kmk}F^|<;>uODWHv0MN`#_?xcz9Ib z?F=njwfQ|B=Gi?1OW}b<^`CCkf4%eJ{%x5xp+V){v$WzYd+G!EF38&jY%eQylf2E# zYduIabe$_}7YK@#J&tY$`%s^!wji#KWYvMwt%O>B0i@G9KrCZj43-%X{@H*Kxq)s- z)MvpP)&UHfAPGI)*b%;cxuRiyo>sxoE>G)5Dx``;C*j-WWOim^A|dtZX}2%g|L5EL64g$xY2@`4{ZckqW#7Mc z|5cso_L@M#A<5QIKBf1?nqwXtJXxQu5Xu@tSCxsJ*vxHxaesA$D@xSvQIy!x{{EBC z2c33Vwm$gf73of^%cg`gy+3egQbDV&ug~rWR;BY9$=Rcfp-fbKHTHApFO zH|Xj>%Z2dL08=nQ%uMiM!AxWjkkOdaN`*pC%!cqkvn(XfJOmd?=DzF|eL$V|kMM2J z^Z#*azHXT#S%0to(aE3wXee%zpDxVeLmh>ix!a!9fGlpG_-fDLM~LO zW6e~J##3OxQOD6TtFbOhuhR(jFUqPH9M@JrxvaQ=IAz5k#&W?5+P#33%L*se#k5x3 z(7K4uwi4iUkw}m)0&G!jb&5n5B(>z3M>lw)xM7}<*m(fpX%qPRiVHvl6HKbBq*V4o zw6K;3)HeBKOzR!OMPM5linHi#1-B7#{9!(4HQ}aF_Z{-)=GoFvINB%Mp@?P7vDZ6#=Q#X%Z6Gwbxt8xeHJ^GrVq-2c^E$R5S zWUXy!)Gr=vkOtSMwj~{od=5%KZA z20+&rCqumNw$6o}z9Id6{ms>*X&Ia+7gxW-yM4Xgtsy-#zImtyW&&n`FTTEvMJ%lL z3h)}{P#(b?7T6D1sfpy>mDiH6uTD>+$j3rYs-`?4$T53rA%_+RW9|@)W<*~tGE=8< zCWzlp<4gcKA)Lv4=ukAPV$YA6fZtrI^3yz3A*EIFSJAE?sc{jn#;Bl!dGeDf1!NrU zL7E+fGt3R(yJu&H?1JyC^(5m#gr_8|VNqpNH6&>u`(Opt6$T(y-26*zRqPU zLXyoItgVzKBc6E0^bT?&9%N)s<0pVfqH3jxClJDmupOz`xd;N`1K}sEaGNRr8ba(K zR+vHUmKG@!ztSlNdl$S?#10dUA&qebpneLpu{G;{6HRh?JPj4yoR z@WHO|zKKm8g;csPk#b7j@{MEr-unHCy$AF0z{;)9A9(+mt;jbYJs3x$Pj+N4`2_k} zxdZQ?Mz!@pR`QYNL04-x-akg(a1?4Eev^HU1=>WYG@G`!A*F--6TB_1qWU`TxK@jK zwKlhdVaj16)C>!03_}D<^F;P`p3waB8o(B{P7yf)>PPGIXkoyIMVdm()lw`)2|i3e zC8yP<4y}#6F84g@V^q^rEmawzja9pWzY@lQbUuaY$oV*hJ6izk^^6n(ZPOH=YuIq2 z?&p=dkhVxzoL||o#JgzY*wX*}$!!96a#{^%<1VwTK)%hz!W4*!M#21n0~bnYGypGs@Id3K1nG@DOFo8U!>= zP2~tyj4V*eA?WLXmr4s%g++`XrmQJ?!jVH3EyrOhJR@KL(3o2J1@t1+p(dzFL!D1q zWQdosmIYRZ5V$|Yq^I>=QnAdfY*B14xC$-k4e$D!tvkCy+GE!f#rT>MK8wN)D{2|HS*XtO(b?n=>a2|i@ zkt5x)35msm4b`;TYaX#_R_+9@=ga5V#)Y|36LDfRUq+x#%S^NglvYbKVY1OpU^%X} z86I1kXlZHd1oK(iNX1}%6XZffcI@agL5EXzG1&yYkCYD#%S_ZNt2p6!LD;5Gkagqls4M zvv*xG+@a?a;YOd^TG>s$!^Ejqq?f^0UF-=XCMsi%1teZe1rj<|$YR`rjnG1ja`RkT z2mmLFVi2+tI1ot>>LI4M9H}7kWB={c6La0Wi=67hV_F?*YxT!w!*%tjr!8{Mb}m{7 zhZcut9oiDkp`OO>!wR2R#&a&u{fQ&t+b%#IUYPHtQYf z@4H}raR<>G`C92N`3<1tCg*Y`hL%UYhH@jwdLuVNOX?thQsN?J+46w~cp@ki<^tx~=9vkg7hZr0V}ftxy0hwl4rC%<$n#*sM% zYX!bpLaTk{$<{ZEH3}&KW+Kr7(5cQuArTD=79TFBx&-xX;qVeJZ$3va`jE9 zJsM#%36^lT&dD{C1AoSAoy#kp&gqMkKDYw`G~9nFo>~8Zl(2dogR%79aA#082(NVSKZk$CG~zPNs@&#}y& zhybk|Oy<93x1ml;3H`C9*N^u;^2DC(ymp5V^)l3DUN^l9U6m)a82L|vl0cz|$TDxx z(4JHCSR0M>IC@8H!hxq%Eo|hqGaKOn&=EpH`1rne>WyGB<5W|}G{yTNTIOd_RDuv@ zoU`X;Qh*{g)3$_@=ZGTCQE40fIrmwtsq?VLt`TQ`;z&qikPsqN0?nfsuGy#`n<3~7 zQsPoG5o*MY4n3- zK%aY&Ek5Q5`?4FBr<;lm&QQ2Em8f0ej^;fJ{N6!gNh_>&QEu*Or&=4F!VjjM7lii< zWPw3@q&eVS8k(?U(E?0DCvA}-ob4Z2fy0%w{nVV`9L-68M+x7>9`q$d1Nrn0)?>F= zef|XK|ZkPgS@fDb{;IJ)6Mk zpO`{1ff4RECRF*vgwncspPW)mFCalQy>O-FpF!!(CdjkPPhjq}Hci_XTHNNqA%yCQvU%Id1EPFc^H_0Da{hqEVR~)O6hE2NGY9t z+B)Wc{fjy4h|X|;kQQK7)yy$KIcF6!8oFmKv_+%;Y<58gheg_=wtr4vHyp1LPSgBn zJE+Oq;>%=<3r<;I<9K zB1-}(U%1sfw&$Iz;@!{QyFWkJC)s0*zV>hXuZ{J4o#v(1)UCgH#S`>9Jc`{V%V|fo z5(}?;R^Rt{JoOHj-W{n8BV7PJsgDUgnWeSDgs}nU9-ZNcBQPh1ZbY2;M|C4XWX~uq zM&ZE!v9c1n3M=Y}z>p``KOmphRL;exHPwpAZ?-1wfj!@PyY-VAYT5Ol&`|H`TMuru zb;f?vJ!tA&IH#YMoq7VXpci@SZ!#!(TDz$Syo8lU;47exR5FXQh}lkl0n*aIhZ$uN zwbDtM#5uQAO*_>LRSwWF1m6tBr*g*d(rV|!eV{C~SbPwTudS~8c%UwtY9sMK&#l&g zNgCR~EdaHcU1eTfcV1dJSVi8Jmf%oT^Y~(p$^i2I{(K@AK+X(!MQ;E}GStIS;6$w) zOKJl6vP`<}Iori`D*_2?=zK|$CA-;cJ#Ysvck-QupFdZ-`+@PIR3)Xxg3{`qn`ZP_ z!L-?06BtR%^zZ9k=5;I9bn?5su$_l%ZM@o+RwDA<%Iklr_+=&IM(Y9iVH*4pQr5wz z>SHAvrML_nNXdeIHI$_iugG{|S-$9TRTi}-^oa=%DuB>XvtYFmlx{;9ahUujjG?`j zi;*A|K%IN!ExG|(vNR@}Y^a1xSM3@Jn8U3%Kjqmp6|{S7cV#pCZSJbz$S%(*Hr5(Z zycbKoOJcP#zK4IKH6C3WjK)tsxUqM=BCqe=c=DlmIJzto$nx9xO<^>c&^YeV*YZB( zOHEiwu7opi0FksKKn7xdT3C@>L*s*%G(=L@4VrQ05y+T?!f=GL$h z*nG8p)0EdzpBp>H^t)npajF06-u1F_<&uq3e>_&RG}h1xi#`)e)b!#{7wB8`E3<(N z#wYU=rsqsD`b>%p$(-!$ntPz)H&jDpc z?k(2#MDsZyD_G~QloH9)6nw9eBG#P%q>oTYb8A>>K=2bhpVm`S&}T(?4GNa5Zlo^} zSYsK`Gi|-1Q=OK$f_ov>7Y@|W`oc8qqZT1g5yV>Hzbnj?8r>d=;Ril5*`@4e&(|VG~s~v!Lq<66g?+il?LJssn*HW z&U?N`*n~$Pd?9Fx?8jVEY`#J6!kX`o7&zED=A?!i)I~}Wf%A?a5lCx`qL)%Zexo+0 z`q29F}!YalKd2HJQ zIV^W-R68L7F<%VLC;42rl=lXR)AAkdt@6x_qJ+Yw#|LI2S#P*^Y42*RFT~gA`|VfG zjNQG?9qX*n*Y7(tvCN)2_LGtB(ZR&KJo`V#mS(1}STjAMpO{hHsa>y+psxYsV*{sN zHotA&&MJWb>}G!{)`5j5f(233g;_#-pzBIaWeEZV?NLez{AP+s3MxW)kf7r#8keA8 z=2qdb8;d0XYmZot0QR&NV54C|P<)195oCz?m)eyQfC=Aks`f=Iauj`GIW`sD{BE~e z1i^BM=+yc@emk`xLvIwRY0HFLkLc9qIsZKxs%9KnIP)1#JvVnF3)S zkFuf{kPX0u5ehO-p*`t@2XS`c94f|H0)EjyjA$Y$e9oo@5Ag*B_0-SiRe;BT^?e@E z|Mq1Vme()&pHDr?PJQs?Bf5U?Fjs2hFhK*8R(Iz`ZJmodQ?0}K12vry>4M->w+2>p z<>$pKM`}^0i@eO2=uiLZ75x}*fAcB*J?{O_!`IZOu8Li9*(cU9s@JE6_`o4ftkc#%m6s_Phuw9i==@qJUR0? zmezi`Bp=-VpT)$}z)b$%;(V-X@!P7XJ0I#4aHa?RAH%t@YAdUf3D%|652-f zT$G84KM@S=xvNeN4vnu2MAn#-egEaP$y@U29X{)ZZwvqI51$KP^~`gP{r`=nyU#oq zPZXg@)1Co;WX*TN^lbAx)~jyK_Py^D&;Bx=3zErGSpS{I8z;m+jS}dWxj{qnKRIpy zHU7l73Ee^_0PFlwsxL&HRxCuFR`mj+K~AYa6r4+w#2=hFhf2K1cx!t9Pf;xUY5M)i zaTtWdA{@pzPSX+N_!CQ@6TX%HObXWfqH)A(XdE$G`0@|OafZfc#&PD%IaKF8H0Q?b ze`*H2pPmoSUgi6w4@~!By^+{yKNeiTVU;z8*8g z;u(1S<>t&h3-BWNgDO~#h{EGguFRP@=NIel|F6ofJ+`UqjDPp~+DVKFPH+;FryVD8 z9>j0Q(C~;Oh(i{FF(`9b7Lt%BO%s~O*a}()TLx=O*MS6TMb~MoSk*{@POP-RSd+<)Q+-u9|3{)+dW9k7H;gmpHu#EfrQ z-Q?{rf&PG5C8rkr?-h399H%)Z8=li-^T zI3JP0PT+tdz@Do4dtGX>@yOVBZRUTsp1IrP(oE6z#p2G6s(O1osKCQ&&)``bph4{2^<9L*On@xu%E`T9D$E5 z2g;?&?bY$I@(`@V$FB3H!sv+zdV&=jVh6oWs4c4VpdZ3wuE|?;tkaM+oB^B8U>>`e z7TNh}X1B_7p!|GmF=L{XUJv%$8EROLNg$=&1(@-yw1;`YzDj3&d0yI#6?{C(1&r1i zC@9PmdnIBM7wnYyl-xU^YLy*M&E_3jEDN_dR+u{aJ0>@j3WTjmDH&Xbuq{7_7qyQ* zxqODPKoTc(&~Ui!)Xsg6KN$z+_W8w`TQRqS$60>JdB1|Sk|g9j9caU%eGfS44{dGl zX1oydmLZ;iA2SrWR)~Hri$0s8iAxwVHRDA(F63WH4R}+1V0S;*oq*uy#nD@dK4x9w z%V2n4g1vo0@cWYBZsJBzGOxaE2Xj~NK=LS(yEY?vbUUYswjufUD0{cZkT5EA(4{>X zF`fvAdIE?L5h{NoL5!GEPXr@IYST>*B3DZSgTlBz9f_jr3ZQi|?cwDrKB^h-K^LwK zN4X0#W2ctYtEF;rJi%gTwUwE^%#0riiO&Bb$IYCW?b zMh-PG)|&FP3!RQDKYG+rhpu#z@8-`H-Mw1J6Ucz z(D9u~?$^$p=+|T?dy@%teCKkBiLu0NL&9c^?=Yrj0? zQt_#{E)EiBDjVwkPn{5cNAOCublK8<47a`QVhqyB>q8Q!2l!vdW* zo}zBkM(R~A&>{6FbOnyIS{lKBU}(J0oMT6 z&hhm$d_P;n`##NN^%9mVaXQvd&BhUw8wM?>X6@V5Y|6#;OVq6X9PXQl(+it}U!&%% zCrC3zsKWRGbsO!7&vXy&)zBQjnIK&oFGn%QjC}GI2Ox~ws6p+eD_mz#*uq`<7<|A) zPjMSwp@bGg{f|MFZv^dmjy9_AfWAyNZJrv{D6X}o54A_ht8S&R={(9h0#}LnlW;o_ z*NgVrsTXy%Y13%`-%$_X{0&bmeaL>zL0b&PGy)!+14a2*I|lDThYW8~5bf?@z8cXt zqE0~3a?cucs#c<(VE#n0N(URwq{Pqws21UL8HYB7(e5zvKE}?_pt}Wn-S`6f0BJZM zlxw!2et2&q?Pav#4ceHs2X312^so{wzms%cd01^V*bFZiu4z@;pmtjOz0qW>H+CD3 z8?Tu{rjyVjcp&Sw?7r+D=TzmK&3Vo2GaojeGrzy$tmVFyfn3Txy{c-}o7R(gEqVXS z@5(>DdSdmPwxb2Mg0C0W7XGlP&t7Z4yryf-)5TrI@0RqITrDjx?J7N6`qwg3S$)~n z^0D$iRXpU#cbs&NRGKS~yUJa!RE4Swt1s5rYA(C`-S5>tRcEQYRKLGrc5TPnXB!iZ zml|L7w0n+vj(R=btG-8k7yUo-U%tcl?SLiV3v>l00#6051>1w?gMSX)CBDyxUJAV$ zeypi8GO`X!9%2+7rvWljKgJs4BUD)O0D-+szG873!8@>`<)BA~a4r1`S#c%(D&?xP zy59i*QQfbRLw!W|8_BMwbU&a^>WjMnMVeIKrrk6K+u$?gKv`3;%{vR<7;42KgEWlq zBz)7L6L1_pOhX767jdWHn??L#&;vAw6cf0!4_8CT?HvUobLc)a;hoh zyB6222${y0omJ1KDz}Czm~mSloVYw?njd6n7@@<+}%PcLv{a(aK>U?zlxG z_~ml$LaCqC4hM~*MFXM^k_VH>l{wC3Wq8Q78%4di7PGkPK&_eMGKQ?JZ1dd+;~tv^ zVA=Ws3SIV?EKT#=k+j$e<-{Fns4`0lvy&xrWUBkpHzC%0=(^oHc$^7xz^%Y~GV zdl7eBT(fk@{+>XLgXobs!l#gvENO}oNHvQ1e194-h7ms_eaquImc{Ny>}k|Y=H2`nG+nJIaLdv+EqsWu{f%|6`^m+?2{n93Q#2nm3nU=~i;h@+}skuiy z7{B7P_!!!CyU%e1@_0Ak@4|>3ORR>#4u=`5;}%%g%Y_{~D^{}dftI$xzDgnXKJ3t3 zT1+Ldcv1!%hZU%a6Z^p~?AcWVQSHWQojT~@YCtbGqI@q-ZTi8NAkLtNvCkd>YI!|m zv>B^`8!>m@Of5jRwZano7FY&uLmS#LW;$Rkz7uOGU09!w<5Wumt=$a_LO1l!B&i4g z3}2yM*pcd^y?AB~C@Ou2=IKFb=y`xn;BCiZJnE*;)|_%J=$7jJwQc0 zKt(-3LqyLgOY8)m8`~gHSz*B3mVoD5J!LQ$-kXGO0ms&qp<#=X L%95U*l&#@^iiP#H literal 0 HcmV?d00001 diff --git a/font/Prociono-Regular-webfont.woff b/font/Prociono-Regular-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..a739e92fc7d5b50f17fc41e3f14387596f099bf1 GIT binary patch literal 22452 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 Pum>PTumdYZS+Eo@(^ literal 0 HcmV?d00001 diff --git a/img/twitter-logo.png b/img/twitter-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..188597e9e02e982451fd977a79ff62c9460134ba GIT binary patch literal 4392 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 J=I + + + + + typeahead.js + + + + + + + + + + + + + + + + + + diff --git a/js/examples.js b/js/examples.js new file mode 100644 index 0000000000..041c18ad04 --- /dev/null +++ b/js/examples.js @@ -0,0 +1,45 @@ +$(document).ready(function() { + $('.example-countries .typeahead').typeahead({ + name: 'countries', + prefetch: '../data/countries.json', + limit: 10 + }); + + $('.example-twitter-oss .typeahead').typeahead({ + name: 'twitter-oss', + prefetch: '../data/repos.json', + template: [ + '

{{language}}

', + '

{{name}}

', + '

{{description}}

' + ].join(''), + engine: Hogan + }); + + $('.example-arabic .typeahead').typeahead({ + name: 'arabic', + local: [ + "الإنجليزية", + "نعم", + "لا", + "مرحبا", + "کيف الحال؟", + "أهلا", + "مع السلامة", + "لا أتكلم العربية", + "لا أفهم", + "أنا جائع" + ] + }); + + $('.example-sports .typeahead').typeahead([ + { + name: 'nba-teams', + prefetch: '../data/nba.json' + }, + { + name: 'nhl-teams', + prefetch: '../data/nhl.json' + } + ]); +}); diff --git a/js/ghostwriter.min.js b/js/ghostwriter.min.js new file mode 100644 index 0000000000..f60df74044 --- /dev/null +++ b/js/ghostwriter.min.js @@ -0,0 +1,295 @@ +// ghostwriter 0.2.0 +// ================= +// * GitHub: https://github.com/jharding/ghostwriter +// * Copyright (c) 2013 Jake Harding +// * Licensed under the MIT license. + +(function(exports, global) { + global["ghostwriter"] = exports; + var utils = function() { + var concat = Array.prototype.concat; + return { + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isFunction: $.isFunction, + isArray: $.isArray, + each: $.each, + map: $.map, + bind: $.proxy, + merge: function(array) { + return concat.apply([], array); + }, + mixin: $.extend, + getKeyEvent: function(type, key) { + var event = $.Event(type); + event.ghostwriter = true; + if (type === "keypress") { + event.which = event.keyCode = event.charCode = utils.isString(key) ? key.charCodeAt(0) : key; + } else if (type === "keydown" || type === "keyup") { + event.charCode = 0; + event.which = event.charCode = utils.isString(key) ? key.toUpperCase().charCodeAt(0) : key; + } else if (type === "textInput") { + if (!utils.isString(key)) { + throw new TypeError("non-string passed for textInput"); + } + event.data = key; + } + return event; + }, + getSelection: function($input) { + var input = $input[0], selectionStart = input.selectionStart, selectionEnd = input.selectionEnd, valueLength, docSelectionRange, selectionRange, endRange, start, end; + if (utils.isNumber(selectionStart)) { + start = selectionStart, end = selectionEnd; + } else if (input.createTextRange && $input.is(":focus")) { + start = end = 0; + valueLength = input.value.length; + docSelectionRange = document.selection.createRange(); + selectionRange = input.createTextRange(); + selectionRange.moveToBookmark(docSelectionRange.getBookmark()); + while (selectionRange.compareEndPoints("EndToStart", selectionRange)) { + selectionRange.moveEnd("character", -1); + end++; + } + selectionRange.setEndPoint("StartToStart", input.createTextRange()); + while (selectionRange.compareEndPoints("EndToStart", selectionRange)) { + selectionRange.moveEnd("character", -1); + start++; + end++; + } + } + return { + start: start, + end: end + }; + }, + setSelection: function($input, start, end) { + var input = $input[0], textRange; + if (input.setSelectionRange) { + input.setSelectionRange(start, end); + } else if (input.createTextRange) { + textRange = input.createTextRange(); + textRange.collapse(true); + textRange.moveEnd("character", start); + textRange.moveStart("character", end); + textRange.select(); + } + }, + getCursorPos: function($input) { + return utils.getSelection($input).start; + }, + setCursorPos: function($input, pos) { + utils.setSelection($input, pos, pos); + } + }; + }(); + var stroke = function() { + function strokeBuilder() { + var strokes = {}; + utils.each(stroke.definitions, function(key, definition) { + strokes[key] = strokeFactory(definition, key); + }); + return strokes; + } + function strokeFactory(definition, name) { + var Stroke = function(args) { + if (!(this instanceof Stroke)) { + return new Stroke([].slice.call(arguments, 0)); + } + this.args = args, this.name = name; + }; + Stroke.repeat = function(times) { + var strokes = [], stroke = new Stroke(); + while (times--) { + strokes.push(stroke); + } + return strokes; + }; + utils.mixin(Stroke.prototype, { + repeat: function(times) { + var strokes = []; + while (times--) { + strokes.push(this); + } + return strokes; + }, + exec: function($input, o) { + definition.apply($input, [ o ].concat(this.args)); + } + }); + return Stroke; + } + return { + builder: strokeBuilder, + factory: strokeFactory + }; + }(); + stroke.definitions = { + character: function(o, char) { + var selStart = o.selection.start, selEnd = o.selection.end, newVal, newCursorPos; + if (selStart === selEnd) { + newVal = o.val.beforeCursor + char + o.val.afterCursor; + newCursorPos = o.cursorPos + 1; + } else { + newVal = o.val.all.slice(0, selStart) + char + o.val.all.slice(selEnd); + newCursorPos = selStart + 1; + } + this.trigger(utils.getKeyEvent("keydown", char)).trigger(utils.getKeyEvent("keypress", char)).trigger(utils.getKeyEvent("textInput", char)).val(newVal); + utils.setCursorPos(this, newCursorPos); + this.trigger(utils.getKeyEvent("keyup", char)).trigger(utils.getKeyEvent("input", char)); + }, + backspace: function(o) { + var keyCode = 8, selStart = o.selection.start, selEnd = o.selection.end, newVal, newCursorPos; + if (selStart === selEnd) { + newVal = o.val.beforeCursor.slice(0, -1) + o.val.afterCursor; + newCursorPos = o.cursorPos === 0 ? 0 : o.cursorPos - 1; + } else { + newVal = o.val.all.slice(0, selStart) + o.val.all.slice(selEnd); + newCursorPos = selStart; + } + this.trigger(utils.getKeyEvent("keydown", keyCode)).val(newVal); + utils.setCursorPos(this, newCursorPos); + this.trigger(utils.getKeyEvent("keyup", keyCode)); + if (this.val() !== o.val.all) { + this.trigger(utils.getKeyEvent("input", keyCode)); + } + }, + right: function(o) { + var keyCode = 39, selStart = o.selection.start, selEnd = o.selection.end, newCursorPos = selStart === selEnd ? o.cursorPos + 1 : selEnd; + this.trigger(utils.getKeyEvent("keydown", keyCode)); + utils.setCursorPos(this, newCursorPos); + this.trigger(utils.getKeyEvent("keyup", keyCode)); + }, + left: function(o) { + var keyCode = 37, selStart = o.selection.start, selEnd = o.selection.end, newCursorPos = selStart === selEnd ? o.cursorPos - 1 : selStart; + this.trigger(utils.getKeyEvent("keydown", keyCode)); + utils.setCursorPos(this, newCursorPos); + this.trigger(utils.getKeyEvent("keyup", keyCode)); + }, + up: function(o) { + var keyCode = 38; + this.trigger(utils.getKeyEvent("keydown", keyCode)).trigger(utils.getKeyEvent("keyup", keyCode)); + }, + down: function(o) { + var keyCode = 40; + this.trigger(utils.getKeyEvent("keydown", keyCode)).trigger(utils.getKeyEvent("keyup", keyCode)); + }, + enter: function(o) { + var keyCode = 13; + this.trigger(utils.getKeyEvent("keydown", keyCode)).trigger(utils.getKeyEvent("keyup", keyCode)); + }, + tab: function(o) { + var keyCode = 9; + this.trigger(utils.getKeyEvent("keydown", keyCode)).trigger(utils.getKeyEvent("keyup", keyCode)); + }, + esc: function(o) { + var keyCode = 27; + this.trigger(utils.getKeyEvent("keydown", keyCode)).trigger(utils.getKeyEvent("keyup", keyCode)); + }, + selectLeft: function(o) { + utils.setSelection(this, o.selection.start - 1, o.selection.end); + }, + selectRight: function(o) { + utils.setSelection(this, o.selection.start, o.selection.end + 1); + }, + selectAll: function(o) { + this.select(); + }, + trigger: function(o, eventType) { + this.trigger(eventType); + }, + noop: function() {} + }; + var Haunt = function() { + function Haunt(o) { + this.loop = !!o.loop; + this.intervalId = null; + this.interval = o.interval || 300; + this.$input = $(o.input).first(); + this.originalInputVal = this.$input.val(); + this.story = []; + this.manuscript = parseManuscript(o.manuscript); + } + utils.mixin(Haunt.prototype, { + start: function(silent) { + var eventType; + if (!this.intervalId) { + eventType = this.story.length ? "resume" : "start"; + this.story = this.story.length ? this.story : this.manuscript.slice(0); + !silent && this.$input.trigger("ghostwriter:" + eventType).focus(); + this.intervalId = setInterval(utils.bind(write, this), this.interval); + } + return this; + }, + pause: function(silent) { + if (this.intervalId) { + !silent && this.$input.trigger("ghostwriter:pause"); + clearInterval(this.intervalId); + this.intervalId = null; + } + return this; + }, + stop: function(silent) { + if (this.intervalId || this.story.length) { + !silent && this.$input.trigger("ghostwriter:stop"); + } + if (this.intervalId) { + clearInterval(this.intervalId); + this.intervalId = null; + } + this.story = []; + this.reset(); + this.$input.blur(); + return this; + }, + restart: function() { + this.stop(); + this.start(); + return this; + }, + reset: function() { + this.$input.val(this.originalInputVal); + } + }); + function parseManuscript(manuscript) { + manuscript = utils.isString(manuscript) ? [ manuscript ] : manuscript; + manuscript = utils.map(manuscript, function(section) { + if (utils.isString(section)) { + return utils.map(section.split(""), function(char) { + return exports.character(char); + }); + } + return section; + }); + return utils.merge(manuscript); + } + function write() { + var next = this.story.shift(), inputVal = this.$input.val(), cursorPos = utils.getCursorPos(this.$input), o = { + cursorPos: cursorPos, + selection: utils.getSelection(this.$input), + val: { + all: inputVal, + beforeCursor: inputVal.substr(0, cursorPos), + afterCursor: inputVal.substr(cursorPos) + } + }; + if (typeof next !== "undefined") { + (utils.isFunction(next) ? next() : next).exec(this.$input, o); + } else { + this.$input.trigger("ghostwriter:finish"); + this.loop ? this.restart() : this.pause(true); + } + } + return Haunt; + }(); + utils.mixin(exports, stroke.builder(), { + haunt: function(o) { + return new Haunt(o); + } + }); +})({}, function() { + return this; +}()); \ No newline at end of file diff --git a/js/hogan-2.0.0.js b/js/hogan-2.0.0.js new file mode 100644 index 0000000000..43a670745b --- /dev/null +++ b/js/hogan-2.0.0.js @@ -0,0 +1,576 @@ +/* + * Copyright 2011 Twitter, Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +var Hogan = {}; + +(function (Hogan, useArrayBuffer) { + Hogan.Template = function (renderFunc, text, compiler, options) { + this.r = renderFunc || this.r; + this.c = compiler; + this.options = options; + this.text = text || ''; + this.buf = (useArrayBuffer) ? [] : ''; + } + + Hogan.Template.prototype = { + // render: replaced by generated code. + r: function (context, partials, indent) { return ''; }, + + // variable escaping + v: hoganEscape, + + // triple stache + t: coerceToString, + + render: function render(context, partials, indent) { + return this.ri([context], partials || {}, indent); + }, + + // render internal -- a hook for overrides that catches partials too + ri: function (context, partials, indent) { + return this.r(context, partials, indent); + }, + + // tries to find a partial in the curent scope and render it + rp: function(name, context, partials, indent) { + var partial = partials[name]; + + if (!partial) { + return ''; + } + + if (this.c && typeof partial == 'string') { + partial = this.c.compile(partial, this.options); + } + + return partial.ri(context, partials, indent); + }, + + // render a section + rs: function(context, partials, section) { + var tail = context[context.length - 1]; + + if (!isArray(tail)) { + section(context, partials, this); + return; + } + + for (var i = 0; i < tail.length; i++) { + context.push(tail[i]); + section(context, partials, this); + context.pop(); + } + }, + + // maybe start a section + s: function(val, ctx, partials, inverted, start, end, tags) { + var pass; + + if (isArray(val) && val.length === 0) { + return false; + } + + if (typeof val == 'function') { + val = this.ls(val, ctx, partials, inverted, start, end, tags); + } + + pass = (val === '') || !!val; + + if (!inverted && pass && ctx) { + ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); + } + + return pass; + }, + + // find values with dotted names + d: function(key, ctx, partials, returnFound) { + var names = key.split('.'), + val = this.f(names[0], ctx, partials, returnFound), + cx = null; + + if (key === '.' && isArray(ctx[ctx.length - 2])) { + return ctx[ctx.length - 1]; + } + + for (var i = 1; i < names.length; i++) { + if (val && typeof val == 'object' && names[i] in val) { + cx = val; + val = val[names[i]]; + } else { + val = ''; + } + } + + if (returnFound && !val) { + return false; + } + + if (!returnFound && typeof val == 'function') { + ctx.push(cx); + val = this.lv(val, ctx, partials); + ctx.pop(); + } + + return val; + }, + + // find values with normal names + f: function(key, ctx, partials, returnFound) { + var val = false, + v = null, + found = false; + + for (var i = ctx.length - 1; i >= 0; i--) { + v = ctx[i]; + if (v && typeof v == 'object' && key in v) { + val = v[key]; + found = true; + break; + } + } + + if (!found) { + return (returnFound) ? false : ""; + } + + if (!returnFound && typeof val == 'function') { + val = this.lv(val, ctx, partials); + } + + return val; + }, + + // higher order templates + ho: function(val, cx, partials, text, tags) { + var compiler = this.c; + var options = this.options; + options.delimiters = tags; + var text = val.call(cx, text); + text = (text == null) ? String(text) : text.toString(); + this.b(compiler.compile(text, options).render(cx, partials)); + return false; + }, + + // template result buffering + b: (useArrayBuffer) ? function(s) { this.buf.push(s); } : + function(s) { this.buf += s; }, + fl: (useArrayBuffer) ? function() { var r = this.buf.join(''); this.buf = []; return r; } : + function() { var r = this.buf; this.buf = ''; return r; }, + + // lambda replace section + ls: function(val, ctx, partials, inverted, start, end, tags) { + var cx = ctx[ctx.length - 1], + t = null; + + if (!inverted && this.c && val.length > 0) { + return this.ho(val, cx, partials, this.text.substring(start, end), tags); + } + + t = val.call(cx); + + if (typeof t == 'function') { + if (inverted) { + return true; + } else if (this.c) { + return this.ho(t, cx, partials, this.text.substring(start, end), tags); + } + } + + return t; + }, + + // lambda replace variable + lv: function(val, ctx, partials) { + var cx = ctx[ctx.length - 1]; + var result = val.call(cx); + + if (typeof result == 'function') { + result = coerceToString(result.call(cx)); + if (this.c && ~result.indexOf("{\u007B")) { + return this.c.compile(result, this.options).render(cx, partials); + } + } + + return coerceToString(result); + } + + }; + + var rAmp = /&/g, + rLt = //g, + rApos =/\'/g, + rQuot = /\"/g, + hChars =/[&<>\"\']/; + + + function coerceToString(val) { + return String((val === null || val === undefined) ? '' : val); + } + + function hoganEscape(str) { + str = coerceToString(str); + return hChars.test(str) ? + str + .replace(rAmp,'&') + .replace(rLt,'<') + .replace(rGt,'>') + .replace(rApos,''') + .replace(rQuot, '"') : + str; + } + + var isArray = Array.isArray || function(a) { + return Object.prototype.toString.call(a) === '[object Array]'; + }; + +})(typeof exports !== 'undefined' ? exports : Hogan); + + + + +(function (Hogan) { + // Setup regex assignments + // remove whitespace according to Mustache spec + var rIsWhitespace = /\S/, + rQuot = /\"/g, + rNewline = /\n/g, + rCr = /\r/g, + rSlash = /\\/g, + tagTypes = { + '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, + '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 + }; + + Hogan.scan = function scan(text, delimiters) { + var len = text.length, + IN_TEXT = 0, + IN_TAG_TYPE = 1, + IN_TAG = 2, + state = IN_TEXT, + tagType = null, + tag = null, + buf = '', + tokens = [], + seenTag = false, + i = 0, + lineStart = 0, + otag = '{{', + ctag = '}}'; + + function addBuf() { + if (buf.length > 0) { + tokens.push(new String(buf)); + buf = ''; + } + } + + function lineIsWhitespace() { + var isAllWhitespace = true; + for (var j = lineStart; j < tokens.length; j++) { + isAllWhitespace = + (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || + (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); + if (!isAllWhitespace) { + return false; + } + } + + return isAllWhitespace; + } + + function filterLine(haveSeenTag, noNewLine) { + addBuf(); + + if (haveSeenTag && lineIsWhitespace()) { + for (var j = lineStart, next; j < tokens.length; j++) { + if (!tokens[j].tag) { + if ((next = tokens[j+1]) && next.tag == '>') { + // set indent to token value + next.indent = tokens[j].toString() + } + tokens.splice(j, 1); + } + } + } else if (!noNewLine) { + tokens.push({tag:'\n'}); + } + + seenTag = false; + lineStart = tokens.length; + } + + function changeDelimiters(text, index) { + var close = '=' + ctag, + closeIndex = text.indexOf(close, index), + delimiters = trim( + text.substring(text.indexOf('=', index) + 1, closeIndex) + ).split(' '); + + otag = delimiters[0]; + ctag = delimiters[1]; + + return closeIndex + close.length - 1; + } + + if (delimiters) { + delimiters = delimiters.split(' '); + otag = delimiters[0]; + ctag = delimiters[1]; + } + + for (i = 0; i < len; i++) { + if (state == IN_TEXT) { + if (tagChange(otag, text, i)) { + --i; + addBuf(); + state = IN_TAG_TYPE; + } else { + if (text.charAt(i) == '\n') { + filterLine(seenTag); + } else { + buf += text.charAt(i); + } + } + } else if (state == IN_TAG_TYPE) { + i += otag.length - 1; + tag = tagTypes[text.charAt(i + 1)]; + tagType = tag ? text.charAt(i + 1) : '_v'; + if (tagType == '=') { + i = changeDelimiters(text, i); + state = IN_TEXT; + } else { + if (tag) { + i++; + } + state = IN_TAG; + } + seenTag = i; + } else { + if (tagChange(ctag, text, i)) { + tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, + i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); + buf = ''; + i += ctag.length - 1; + state = IN_TEXT; + if (tagType == '{') { + if (ctag == '}}') { + i++; + } else { + cleanTripleStache(tokens[tokens.length - 1]); + } + } + } else { + buf += text.charAt(i); + } + } + } + + filterLine(seenTag, true); + + return tokens; + } + + function cleanTripleStache(token) { + if (token.n.substr(token.n.length - 1) === '}') { + token.n = token.n.substring(0, token.n.length - 1); + } + } + + function trim(s) { + if (s.trim) { + return s.trim(); + } + + return s.replace(/^\s*|\s*$/g, ''); + } + + function tagChange(tag, text, index) { + if (text.charAt(index) != tag.charAt(0)) { + return false; + } + + for (var i = 1, l = tag.length; i < l; i++) { + if (text.charAt(index + i) != tag.charAt(i)) { + return false; + } + } + + return true; + } + + function buildTree(tokens, kind, stack, customTags) { + var instructions = [], + opener = null, + token = null; + + while (tokens.length > 0) { + token = tokens.shift(); + if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { + stack.push(token); + token.nodes = buildTree(tokens, token.tag, stack, customTags); + instructions.push(token); + } else if (token.tag == '/') { + if (stack.length === 0) { + throw new Error('Closing tag without opener: /' + token.n); + } + opener = stack.pop(); + if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { + throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); + } + opener.end = token.i; + return instructions; + } else { + instructions.push(token); + } + } + + if (stack.length > 0) { + throw new Error('missing closing tag: ' + stack.pop().n); + } + + return instructions; + } + + function isOpener(token, tags) { + for (var i = 0, l = tags.length; i < l; i++) { + if (tags[i].o == token.n) { + token.tag = '#'; + return true; + } + } + } + + function isCloser(close, open, tags) { + for (var i = 0, l = tags.length; i < l; i++) { + if (tags[i].c == close && tags[i].o == open) { + return true; + } + } + } + + Hogan.generate = function (tree, text, options) { + var code = 'var _=this;_.b(i=i||"");' + walk(tree) + 'return _.fl();'; + if (options.asString) { + return 'function(c,p,i){' + code + ';}'; + } + + return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan, options); + } + + function esc(s) { + return s.replace(rSlash, '\\\\') + .replace(rQuot, '\\\"') + .replace(rNewline, '\\n') + .replace(rCr, '\\r'); + } + + function chooseMethod(s) { + return (~s.indexOf('.')) ? 'd' : 'f'; + } + + function walk(tree) { + var code = ''; + for (var i = 0, l = tree.length; i < l; i++) { + var tag = tree[i].tag; + if (tag == '#') { + code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), + tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); + } else if (tag == '^') { + code += invertedSection(tree[i].nodes, tree[i].n, + chooseMethod(tree[i].n)); + } else if (tag == '<' || tag == '>') { + code += partial(tree[i]); + } else if (tag == '{' || tag == '&') { + code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); + } else if (tag == '\n') { + code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); + } else if (tag == '_v') { + code += variable(tree[i].n, chooseMethod(tree[i].n)); + } else if (tag === undefined) { + code += text('"' + esc(tree[i]) + '"'); + } + } + return code; + } + + function section(nodes, id, method, start, end, tags) { + return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + + 'c,p,0,' + start + ',' + end + ',"' + tags + '")){' + + '_.rs(c,p,' + + 'function(c,p,_){' + + walk(nodes) + + '});c.pop();}'; + } + + function invertedSection(nodes, id, method) { + return 'if(!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + + walk(nodes) + + '};'; + } + + function partial(tok) { + return '_.b(_.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '"));'; + } + + function tripleStache(id, method) { + return '_.b(_.t(_.' + method + '("' + esc(id) + '",c,p,0)));'; + } + + function variable(id, method) { + return '_.b(_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; + } + + function text(id) { + return '_.b(' + id + ');'; + } + + Hogan.parse = function(tokens, text, options) { + options = options || {}; + return buildTree(tokens, '', [], options.sectionTags || []); + }, + + Hogan.cache = {}; + + Hogan.compile = function(text, options) { + // options + // + // asString: false (default) + // + // sectionTags: [{o: '_foo', c: 'foo'}] + // An array of object with o and c fields that indicate names for custom + // section tags. The example above allows parsing of {{_foo}}{{/foo}}. + // + // delimiters: A string that overrides the default delimiters. + // Example: "<% %>" + // + options = options || {}; + + var key = text + '||' + !!options.asString; + + var t = this.cache[key]; + + if (t) { + return t; + } + + t = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options); + return this.cache[key] = t; + }; +})(typeof exports !== 'undefined' ? exports : Hogan); + diff --git a/js/jquery-1.9.1.min.js b/js/jquery-1.9.1.min.js new file mode 100644 index 0000000000..006e953102 --- /dev/null +++ b/js/jquery-1.9.1.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="
t
",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; +return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="
",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b(" + From 8abc8b76d51a42797b38e6be05d05fa36a066f05 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sun, 24 Feb 2013 15:48:35 -0800 Subject: [PATCH 12/44] Update repos.json. --- data/repos.json | 116 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 38 deletions(-) diff --git a/data/repos.json b/data/repos.json index 86f7612ee6..8cc954f909 100644 --- a/data/repos.json +++ b/data/repos.json @@ -27,7 +27,8 @@ "tokens": [ "hadoop", "lzo", - "Shell" + "Shell", + "hadoop-lzo" ] }, { @@ -48,7 +49,8 @@ "tokens": [ "thrift", "client", - "Ruby" + "Ruby", + "thrift_client" ] }, { @@ -69,7 +71,8 @@ "tokens": [ "grabby", "hands", - "Scala" + "Scala", + "grabby-hands" ] }, { @@ -110,7 +113,8 @@ "tokens": [ "flockdb", "client", - "Ruby" + "Ruby", + "flockdb-client" ] }, { @@ -121,7 +125,8 @@ "tokens": [ "standard", "project", - "Scala" + "Scala", + "standard-project" ] }, { @@ -163,7 +168,8 @@ "scala", "zookeeper", "client", - "Scala" + "Scala", + "scala-zookeeper-client" ] }, { @@ -174,7 +180,8 @@ "tokens": [ "rpc", "client", - "Scala" + "Scala", + "rpc-client" ] }, { @@ -215,7 +222,8 @@ "tokens": [ "rubyenterpriseedition187", "248", - "Ruby" + "Ruby", + "rubyenterpriseedition187-248" ] }, { @@ -226,7 +234,8 @@ "tokens": [ "scala", "school", - "Scala" + "Scala", + "scala_school" ] }, { @@ -257,7 +266,8 @@ "tokens": [ "kestrel", "client", - "Ruby" + "Ruby", + "kestrel-client" ] }, { @@ -283,11 +293,13 @@ { "name": "twitter-text-conformance", "description": "Conformance testing data for the twitter-text-* repositories", + "language": null, "value": "twitter-text-conformance", "tokens": [ "twitter", "text", - "conformance" + "conformance", + "twitter-text-conformance" ] }, { @@ -299,7 +311,8 @@ "twitter", "text", "rb", - "Ruby" + "Ruby", + "twitter-text-rb" ] }, { @@ -311,7 +324,8 @@ "twitter", "text", "java", - "Java" + "Java", + "twitter-text-java" ] }, { @@ -323,7 +337,8 @@ "twitter", "text", "js", - "JavaScript" + "JavaScript", + "twitter-text-js" ] }, { @@ -375,7 +390,8 @@ "cloudhopper", "commons", "util", - "Java" + "Java", + "cloudhopper-commons-util" ] }, { @@ -396,7 +412,8 @@ "tokens": [ "time", "constants", - "Ruby" + "Ruby", + "time_constants" ] }, { @@ -417,7 +434,8 @@ "tokens": [ "scala", "bootstrapper", - "Ruby" + "Ruby", + "scala-bootstrapper" ] }, { @@ -428,7 +446,8 @@ "tokens": [ "sbt", "thrift", - "Ruby" + "Ruby", + "sbt-thrift" ] }, { @@ -439,7 +458,8 @@ "tokens": [ "cloudhopper", "smpp", - "Java" + "Java", + "cloudhopper-smpp" ] }, { @@ -451,7 +471,8 @@ "cloudhopper", "commons", "charset", - "Java" + "Java", + "cloudhopper-commons-charset" ] }, { @@ -463,7 +484,8 @@ "cloudhopper", "commons", "gsm", - "Java" + "Java", + "cloudhopper-commons-gsm" ] }, { @@ -494,7 +516,8 @@ "tokens": [ "scala", "json", - "Scala" + "Scala", + "scala-json" ] }, { @@ -525,7 +548,8 @@ "tokens": [ "scrooge", "runtime", - "Scala" + "Scala", + "scrooge-runtime" ] }, { @@ -536,7 +560,8 @@ "tokens": [ "sbt", "scrooge", - "Scala" + "Scala", + "sbt-scrooge" ] }, { @@ -688,7 +713,8 @@ "twitter", "cldr", "rb", - "Ruby" + "Ruby", + "twitter-cldr-rb" ] }, { @@ -699,7 +725,8 @@ "tokens": [ "bootstrap", "server", - "JavaScript" + "JavaScript", + "bootstrap-server" ] }, { @@ -711,7 +738,8 @@ "sbt", "package", "dist", - "Scala" + "Scala", + "sbt-package-dist" ] }, { @@ -727,11 +755,13 @@ { "name": "innovators-patent-agreement", "description": "Innovators Patent Agreement (IPA)", + "language": null, "value": "innovators-patent-agreement", "tokens": [ "innovators", "patent", - "agreement" + "agreement", + "innovators-patent-agreement" ] }, { @@ -763,7 +793,8 @@ "twitter", "text", "objc", - "Objective-C" + "Objective-C", + "twitter-text-objc" ] }, { @@ -775,7 +806,8 @@ "activerecord", "reputation", "system", - "Ruby" + "Ruby", + "activerecord-reputation-system" ] }, { @@ -806,7 +838,8 @@ "tokens": [ "elephant", "twin", - "Java" + "Java", + "elephant-twin" ] }, { @@ -818,7 +851,8 @@ "elephant", "twin", "lzo", - "Java" + "Java", + "elephant-twin-lzo" ] }, { @@ -850,7 +884,8 @@ "twitter", "cldr", "js", - "JavaScript" + "JavaScript", + "twitter-cldr-js" ] }, { @@ -871,7 +906,8 @@ "tokens": [ "hdfs", "du", - "JavaScript" + "JavaScript", + "hdfs-du" ] }, { @@ -902,7 +938,8 @@ "tokens": [ "bower", "server", - "Ruby" + "Ruby", + "bower-server" ] }, { @@ -924,7 +961,8 @@ "twitter", "cldr", "npm", - "JavaScript" + "JavaScript", + "twitter-cldr-npm" ] }, { @@ -946,7 +984,8 @@ "sprockets", "commonjs", "twitter", - "JavaScript" + "JavaScript", + "sprockets-commonjs-twitter" ] }, { @@ -957,7 +996,8 @@ "tokens": [ "scalding", "commons", - "Scala" + "Scala", + "scalding-commons" ] }, { From 12dd756083774e06d51ca74221f8d082324f61b8 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sun, 24 Feb 2013 21:04:54 -0800 Subject: [PATCH 13/44] Add remote example. --- css/examples.css | 4 + css/main.css | 4 + data/films/post_1960.json | 452 ++++++++++++++++++++++++++++ data/films/queries/8.json | 14 + data/films/queries/80.json | 14 + data/films/queries/a.json | 71 +++++ data/films/queries/ab.json | 11 + data/films/queries/abo.json | 11 + data/films/queries/abou.json | 11 + data/films/queries/about.json | 11 + data/films/queries/ag.json | 10 + data/films/queries/agr.json | 10 + data/films/queries/agre.json | 10 + data/films/queries/agree.json | 10 + data/films/queries/agreem.json | 10 + data/films/queries/agreeme.json | 10 + data/films/queries/agreemen.json | 10 + data/films/queries/agreement.json | 10 + data/films/queries/al.json | 33 ++ data/films/queries/all.json | 33 ++ data/films/queries/am.json | 12 + data/films/queries/ame.json | 12 + data/films/queries/amer.json | 12 + data/films/queries/ameri.json | 12 + data/films/queries/americ.json | 12 + data/films/queries/america.json | 12 + data/films/queries/american.json | 12 + data/films/queries/an.json | 12 + data/films/queries/ap.json | 10 + data/films/queries/apa.json | 10 + data/films/queries/apar.json | 10 + data/films/queries/apart.json | 10 + data/films/queries/apartm.json | 10 + data/films/queries/apartme.json | 10 + data/films/queries/apartmen.json | 10 + data/films/queries/apartment.json | 10 + data/films/queries/ar.json | 14 + data/films/queries/aro.json | 14 + data/films/queries/arou.json | 14 + data/films/queries/aroun.json | 14 + data/films/queries/around.json | 14 + data/films/queries/b.json | 52 ++++ data/films/queries/be.json | 21 ++ data/films/queries/ben-h.json | 9 + data/films/queries/ben-hu.json | 9 + data/films/queries/ben-hur.json | 9 + data/films/queries/ben.json | 9 + data/films/queries/bes.json | 14 + data/films/queries/best.json | 14 + data/films/queries/bo.json | 12 + data/films/queries/bou.json | 12 + data/films/queries/boun.json | 12 + data/films/queries/bount.json | 12 + data/films/queries/bounty.json | 12 + data/films/queries/br.json | 23 ++ data/films/queries/bri.json | 14 + data/films/queries/brid.json | 14 + data/films/queries/bridg.json | 14 + data/films/queries/bridge.json | 14 + data/films/queries/bro.json | 11 + data/films/queries/broa.json | 11 + data/films/queries/broad.json | 11 + data/films/queries/broadw.json | 11 + data/films/queries/broadwa.json | 11 + data/films/queries/broadway.json | 11 + data/films/queries/c.json | 35 +++ data/films/queries/ca.json | 28 ++ data/films/queries/can't.json | 14 + data/films/queries/can.json | 14 + data/films/queries/cas.json | 9 + data/films/queries/casa.json | 9 + data/films/queries/casab.json | 9 + data/films/queries/casabl.json | 9 + data/films/queries/casabla.json | 9 + data/films/queries/casablan.json | 9 + data/films/queries/casablanc.json | 9 + data/films/queries/casablanca.json | 9 + data/films/queries/cav.json | 9 + data/films/queries/cava.json | 9 + data/films/queries/caval.json | 9 + data/films/queries/cavalc.json | 9 + data/films/queries/cavalca.json | 9 + data/films/queries/cavalcad.json | 9 + data/films/queries/cavalcade.json | 9 + data/films/queries/ci.json | 9 + data/films/queries/cim.json | 9 + data/films/queries/cima.json | 9 + data/films/queries/cimar.json | 9 + data/films/queries/cimarr.json | 9 + data/films/queries/cimarro.json | 9 + data/films/queries/cimarron.json | 9 + data/films/queries/d.json | 14 + data/films/queries/da.json | 14 + data/films/queries/day.json | 14 + data/films/queries/days.json | 14 + data/films/queries/e.json | 43 +++ data/films/queries/ea.json | 13 + data/films/queries/ear.json | 13 + data/films/queries/eart.json | 13 + data/films/queries/earth.json | 13 + data/films/queries/em.json | 13 + data/films/queries/emi.json | 13 + data/films/queries/emil.json | 13 + data/films/queries/emile.json | 13 + data/films/queries/et.json | 12 + data/films/queries/ete.json | 12 + data/films/queries/eter.json | 12 + data/films/queries/etern.json | 12 + data/films/queries/eterni.json | 12 + data/films/queries/eternit.json | 12 + data/films/queries/eternity.json | 12 + data/films/queries/ev.json | 11 + data/films/queries/eve.json | 11 + data/films/queries/f.json | 24 ++ data/films/queries/fr.json | 24 ++ data/films/queries/fro.json | 24 ++ data/films/queries/from.json | 12 + data/films/queries/fron.json | 14 + data/films/queries/front.json | 14 + data/films/queries/g.json | 75 +++++ data/films/queries/ge.json | 10 + data/films/queries/gen.json | 10 + data/films/queries/gent.json | 10 + data/films/queries/gentl.json | 10 + data/films/queries/gentle.json | 10 + data/films/queries/gentlem.json | 10 + data/films/queries/gentlema.json | 10 + data/films/queries/gentleman's.json | 10 + data/films/queries/gentleman.json | 10 + data/films/queries/gi.json | 9 + data/films/queries/gig.json | 9 + data/films/queries/gigi.json | 9 + data/films/queries/go.json | 21 ++ data/films/queries/goi.json | 11 + data/films/queries/goin.json | 11 + data/films/queries/going.json | 11 + data/films/queries/gon.json | 12 + data/films/queries/gone.json | 12 + data/films/queries/gr.json | 41 +++ data/films/queries/gra.json | 10 + data/films/queries/gran.json | 10 + data/films/queries/grand.json | 10 + data/films/queries/gre.json | 33 ++ data/films/queries/grea.json | 22 ++ data/films/queries/great.json | 22 ++ data/films/queries/greate.json | 13 + data/films/queries/greates.json | 13 + data/films/queries/greatest.json | 13 + data/films/queries/gree.json | 13 + data/films/queries/green.json | 13 + data/films/queries/h.json | 48 +++ data/films/queries/ha.json | 19 ++ data/films/queries/ham.json | 9 + data/films/queries/haml.json | 9 + data/films/queries/hamle.json | 9 + data/films/queries/hamlet.json | 9 + data/films/queries/hap.json | 12 + data/films/queries/happ.json | 12 + data/films/queries/happe.json | 12 + data/films/queries/happen.json | 12 + data/films/queries/happene.json | 12 + data/films/queries/happened.json | 12 + data/films/queries/he.json | 12 + data/films/queries/her.json | 12 + data/films/queries/here.json | 12 + data/films/queries/ho.json | 21 ++ data/films/queries/hot.json | 10 + data/films/queries/hote.json | 10 + data/films/queries/hotel.json | 10 + data/films/queries/how.json | 13 + data/films/queries/i.json | 46 +++ data/films/queries/in.json | 24 ++ data/films/queries/it.json | 24 ++ data/films/queries/k.json | 24 ++ data/films/queries/ki.json | 12 + data/films/queries/kin.json | 12 + data/films/queries/king.json | 12 + data/films/queries/kings.json | 12 + data/films/queries/kw.json | 14 + data/films/queries/kwa.json | 14 + data/films/queries/kwai.json | 14 + data/films/queries/l.json | 34 +++ data/films/queries/li.json | 25 ++ data/films/queries/lif.json | 13 + data/films/queries/life.json | 13 + data/films/queries/liv.json | 14 + data/films/queries/live.json | 14 + data/films/queries/lives.json | 14 + data/films/queries/lo.json | 11 + data/films/queries/los.json | 11 + data/films/queries/lost.json | 11 + data/films/queries/m.json | 66 ++++ data/films/queries/ma.json | 9 + data/films/queries/mar.json | 9 + data/films/queries/mart.json | 9 + data/films/queries/marty.json | 9 + data/films/queries/me.json | 21 ++ data/films/queries/mel.json | 11 + data/films/queries/melo.json | 11 + data/films/queries/melod.json | 11 + data/films/queries/melody.json | 11 + data/films/queries/men.json | 12 + data/films/queries/mi.json | 10 + data/films/queries/min.json | 10 + data/films/queries/mini.json | 10 + data/films/queries/miniv.json | 10 + data/films/queries/minive.json | 10 + data/films/queries/miniver.json | 10 + data/films/queries/mr.json | 10 + data/films/queries/mrs.json | 10 + data/films/queries/mu.json | 12 + data/films/queries/mut.json | 12 + data/films/queries/muti.json | 12 + data/films/queries/mutin.json | 12 + data/films/queries/mutiny.json | 12 + data/films/queries/my.json | 22 ++ data/films/queries/n.json | 12 + data/films/queries/ni.json | 12 + data/films/queries/nig.json | 12 + data/films/queries/nigh.json | 12 + data/films/queries/night.json | 12 + data/films/queries/o.json | 89 ++++++ data/films/queries/of.json | 25 ++ data/films/queries/on.json | 66 ++++ data/films/queries/one.json | 12 + data/films/queries/ou.json | 14 + data/films/queries/our.json | 14 + data/films/queries/p.json | 12 + data/films/queries/pa.json | 12 + data/films/queries/par.json | 12 + data/films/queries/pari.json | 12 + data/films/queries/paris.json | 12 + data/films/queries/q.json | 14 + data/films/queries/qu.json | 14 + data/films/queries/qui.json | 14 + data/films/queries/quie.json | 14 + data/films/queries/quiet.json | 14 + data/films/queries/r.json | 21 ++ data/films/queries/re.json | 9 + data/films/queries/reb.json | 9 + data/films/queries/rebe.json | 9 + data/films/queries/rebec.json | 9 + data/films/queries/rebecc.json | 9 + data/films/queries/rebecca.json | 9 + data/films/queries/ri.json | 14 + data/films/queries/riv.json | 14 + data/films/queries/rive.json | 14 + data/films/queries/river.json | 14 + data/films/queries/s.json | 13 + data/films/queries/sh.json | 13 + data/films/queries/sho.json | 13 + data/films/queries/show.json | 13 + data/films/queries/t.json | 168 +++++++++++ data/films/queries/ta.json | 14 + data/films/queries/tak.json | 14 + data/films/queries/take.json | 14 + data/films/queries/th.json | 146 +++++++++ data/films/queries/the.json | 146 +++++++++ data/films/queries/to.json | 12 + data/films/queries/v.json | 13 + data/films/queries/va.json | 13 + data/films/queries/val.json | 13 + data/films/queries/vall.json | 13 + data/films/queries/valle.json | 13 + data/films/queries/valley.json | 13 + data/films/queries/w.json | 93 ++++++ data/films/queries/wa.json | 31 ++ data/films/queries/was.json | 13 + data/films/queries/wat.json | 11 + data/films/queries/wate.json | 11 + data/films/queries/water.json | 11 + data/films/queries/waterf.json | 11 + data/films/queries/waterfr.json | 11 + data/films/queries/waterfro.json | 11 + data/films/queries/waterfron.json | 11 + data/films/queries/waterfront.json | 11 + data/films/queries/way.json | 11 + data/films/queries/we.json | 23 ++ data/films/queries/wee.json | 11 + data/films/queries/week.json | 11 + data/films/queries/weeke.json | 11 + data/films/queries/weeken.json | 11 + data/films/queries/weekend.json | 11 + data/films/queries/wes.json | 14 + data/films/queries/west.json | 14 + data/films/queries/weste.json | 14 + data/films/queries/wester.json | 14 + data/films/queries/western.json | 14 + data/films/queries/wi.json | 31 ++ data/films/queries/win.json | 19 ++ data/films/queries/wind.json | 12 + data/films/queries/wing.json | 9 + data/films/queries/wings.json | 9 + data/films/queries/wit.json | 24 ++ data/films/queries/with.json | 24 ++ data/films/queries/wo.json | 14 + data/films/queries/wor.json | 14 + data/films/queries/worl.json | 14 + data/films/queries/world.json | 14 + data/films/queries/y.json | 26 ++ data/films/queries/ye.json | 14 + data/films/queries/yea.json | 14 + data/films/queries/year.json | 14 + data/films/queries/years.json | 14 + data/films/queries/yo.json | 14 + data/films/queries/you.json | 14 + data/films/queries/z.json | 22 ++ data/films/queries/zi.json | 11 + data/films/queries/zie.json | 11 + data/films/queries/zieg.json | 11 + data/films/queries/ziegf.json | 11 + data/films/queries/ziegfe.json | 11 + data/films/queries/ziegfel.json | 11 + data/films/queries/ziegfeld.json | 11 + data/films/queries/zo.json | 13 + data/films/queries/zol.json | 13 + data/films/queries/zola.json | 13 + examples/index.html | 13 + js/examples.js | 10 + 319 files changed, 5538 insertions(+) create mode 100644 data/films/post_1960.json create mode 100644 data/films/queries/8.json create mode 100644 data/films/queries/80.json create mode 100644 data/films/queries/a.json create mode 100644 data/films/queries/ab.json create mode 100644 data/films/queries/abo.json create mode 100644 data/films/queries/abou.json create mode 100644 data/films/queries/about.json create mode 100644 data/films/queries/ag.json create mode 100644 data/films/queries/agr.json create mode 100644 data/films/queries/agre.json create mode 100644 data/films/queries/agree.json create mode 100644 data/films/queries/agreem.json create mode 100644 data/films/queries/agreeme.json create mode 100644 data/films/queries/agreemen.json create mode 100644 data/films/queries/agreement.json create mode 100644 data/films/queries/al.json create mode 100644 data/films/queries/all.json create mode 100644 data/films/queries/am.json create mode 100644 data/films/queries/ame.json create mode 100644 data/films/queries/amer.json create mode 100644 data/films/queries/ameri.json create mode 100644 data/films/queries/americ.json create mode 100644 data/films/queries/america.json create mode 100644 data/films/queries/american.json create mode 100644 data/films/queries/an.json create mode 100644 data/films/queries/ap.json create mode 100644 data/films/queries/apa.json create mode 100644 data/films/queries/apar.json create mode 100644 data/films/queries/apart.json create mode 100644 data/films/queries/apartm.json create mode 100644 data/films/queries/apartme.json create mode 100644 data/films/queries/apartmen.json create mode 100644 data/films/queries/apartment.json create mode 100644 data/films/queries/ar.json create mode 100644 data/films/queries/aro.json create mode 100644 data/films/queries/arou.json create mode 100644 data/films/queries/aroun.json create mode 100644 data/films/queries/around.json create mode 100644 data/films/queries/b.json create mode 100644 data/films/queries/be.json create mode 100644 data/films/queries/ben-h.json create mode 100644 data/films/queries/ben-hu.json create mode 100644 data/films/queries/ben-hur.json create mode 100644 data/films/queries/ben.json create mode 100644 data/films/queries/bes.json create mode 100644 data/films/queries/best.json create mode 100644 data/films/queries/bo.json create mode 100644 data/films/queries/bou.json create mode 100644 data/films/queries/boun.json create mode 100644 data/films/queries/bount.json create mode 100644 data/films/queries/bounty.json create mode 100644 data/films/queries/br.json create mode 100644 data/films/queries/bri.json create mode 100644 data/films/queries/brid.json create mode 100644 data/films/queries/bridg.json create mode 100644 data/films/queries/bridge.json create mode 100644 data/films/queries/bro.json create mode 100644 data/films/queries/broa.json create mode 100644 data/films/queries/broad.json create mode 100644 data/films/queries/broadw.json create mode 100644 data/films/queries/broadwa.json create mode 100644 data/films/queries/broadway.json create mode 100644 data/films/queries/c.json create mode 100644 data/films/queries/ca.json create mode 100644 data/films/queries/can't.json create mode 100644 data/films/queries/can.json create mode 100644 data/films/queries/cas.json create mode 100644 data/films/queries/casa.json create mode 100644 data/films/queries/casab.json create mode 100644 data/films/queries/casabl.json create mode 100644 data/films/queries/casabla.json create mode 100644 data/films/queries/casablan.json create mode 100644 data/films/queries/casablanc.json create mode 100644 data/films/queries/casablanca.json create mode 100644 data/films/queries/cav.json create mode 100644 data/films/queries/cava.json create mode 100644 data/films/queries/caval.json create mode 100644 data/films/queries/cavalc.json create mode 100644 data/films/queries/cavalca.json create mode 100644 data/films/queries/cavalcad.json create mode 100644 data/films/queries/cavalcade.json create mode 100644 data/films/queries/ci.json create mode 100644 data/films/queries/cim.json create mode 100644 data/films/queries/cima.json create mode 100644 data/films/queries/cimar.json create mode 100644 data/films/queries/cimarr.json create mode 100644 data/films/queries/cimarro.json create mode 100644 data/films/queries/cimarron.json create mode 100644 data/films/queries/d.json create mode 100644 data/films/queries/da.json create mode 100644 data/films/queries/day.json create mode 100644 data/films/queries/days.json create mode 100644 data/films/queries/e.json create mode 100644 data/films/queries/ea.json create mode 100644 data/films/queries/ear.json create mode 100644 data/films/queries/eart.json create mode 100644 data/films/queries/earth.json create mode 100644 data/films/queries/em.json create mode 100644 data/films/queries/emi.json create mode 100644 data/films/queries/emil.json create mode 100644 data/films/queries/emile.json create mode 100644 data/films/queries/et.json create mode 100644 data/films/queries/ete.json create mode 100644 data/films/queries/eter.json create mode 100644 data/films/queries/etern.json create mode 100644 data/films/queries/eterni.json create mode 100644 data/films/queries/eternit.json create mode 100644 data/films/queries/eternity.json create mode 100644 data/films/queries/ev.json create mode 100644 data/films/queries/eve.json create mode 100644 data/films/queries/f.json create mode 100644 data/films/queries/fr.json create mode 100644 data/films/queries/fro.json create mode 100644 data/films/queries/from.json create mode 100644 data/films/queries/fron.json create mode 100644 data/films/queries/front.json create mode 100644 data/films/queries/g.json create mode 100644 data/films/queries/ge.json create mode 100644 data/films/queries/gen.json create mode 100644 data/films/queries/gent.json create mode 100644 data/films/queries/gentl.json create mode 100644 data/films/queries/gentle.json create mode 100644 data/films/queries/gentlem.json create mode 100644 data/films/queries/gentlema.json create mode 100644 data/films/queries/gentleman's.json create mode 100644 data/films/queries/gentleman.json create mode 100644 data/films/queries/gi.json create mode 100644 data/films/queries/gig.json create mode 100644 data/films/queries/gigi.json create mode 100644 data/films/queries/go.json create mode 100644 data/films/queries/goi.json create mode 100644 data/films/queries/goin.json create mode 100644 data/films/queries/going.json create mode 100644 data/films/queries/gon.json create mode 100644 data/films/queries/gone.json create mode 100644 data/films/queries/gr.json create mode 100644 data/films/queries/gra.json create mode 100644 data/films/queries/gran.json create mode 100644 data/films/queries/grand.json create mode 100644 data/films/queries/gre.json create mode 100644 data/films/queries/grea.json create mode 100644 data/films/queries/great.json create mode 100644 data/films/queries/greate.json create mode 100644 data/films/queries/greates.json create mode 100644 data/films/queries/greatest.json create mode 100644 data/films/queries/gree.json create mode 100644 data/films/queries/green.json create mode 100644 data/films/queries/h.json create mode 100644 data/films/queries/ha.json create mode 100644 data/films/queries/ham.json create mode 100644 data/films/queries/haml.json create mode 100644 data/films/queries/hamle.json create mode 100644 data/films/queries/hamlet.json create mode 100644 data/films/queries/hap.json create mode 100644 data/films/queries/happ.json create mode 100644 data/films/queries/happe.json create mode 100644 data/films/queries/happen.json create mode 100644 data/films/queries/happene.json create mode 100644 data/films/queries/happened.json create mode 100644 data/films/queries/he.json create mode 100644 data/films/queries/her.json create mode 100644 data/films/queries/here.json create mode 100644 data/films/queries/ho.json create mode 100644 data/films/queries/hot.json create mode 100644 data/films/queries/hote.json create mode 100644 data/films/queries/hotel.json create mode 100644 data/films/queries/how.json create mode 100644 data/films/queries/i.json create mode 100644 data/films/queries/in.json create mode 100644 data/films/queries/it.json create mode 100644 data/films/queries/k.json create mode 100644 data/films/queries/ki.json create mode 100644 data/films/queries/kin.json create mode 100644 data/films/queries/king.json create mode 100644 data/films/queries/kings.json create mode 100644 data/films/queries/kw.json create mode 100644 data/films/queries/kwa.json create mode 100644 data/films/queries/kwai.json create mode 100644 data/films/queries/l.json create mode 100644 data/films/queries/li.json create mode 100644 data/films/queries/lif.json create mode 100644 data/films/queries/life.json create mode 100644 data/films/queries/liv.json create mode 100644 data/films/queries/live.json create mode 100644 data/films/queries/lives.json create mode 100644 data/films/queries/lo.json create mode 100644 data/films/queries/los.json create mode 100644 data/films/queries/lost.json create mode 100644 data/films/queries/m.json create mode 100644 data/films/queries/ma.json create mode 100644 data/films/queries/mar.json create mode 100644 data/films/queries/mart.json create mode 100644 data/films/queries/marty.json create mode 100644 data/films/queries/me.json create mode 100644 data/films/queries/mel.json create mode 100644 data/films/queries/melo.json create mode 100644 data/films/queries/melod.json create mode 100644 data/films/queries/melody.json create mode 100644 data/films/queries/men.json create mode 100644 data/films/queries/mi.json create mode 100644 data/films/queries/min.json create mode 100644 data/films/queries/mini.json create mode 100644 data/films/queries/miniv.json create mode 100644 data/films/queries/minive.json create mode 100644 data/films/queries/miniver.json create mode 100644 data/films/queries/mr.json create mode 100644 data/films/queries/mrs.json create mode 100644 data/films/queries/mu.json create mode 100644 data/films/queries/mut.json create mode 100644 data/films/queries/muti.json create mode 100644 data/films/queries/mutin.json create mode 100644 data/films/queries/mutiny.json create mode 100644 data/films/queries/my.json create mode 100644 data/films/queries/n.json create mode 100644 data/films/queries/ni.json create mode 100644 data/films/queries/nig.json create mode 100644 data/films/queries/nigh.json create mode 100644 data/films/queries/night.json create mode 100644 data/films/queries/o.json create mode 100644 data/films/queries/of.json create mode 100644 data/films/queries/on.json create mode 100644 data/films/queries/one.json create mode 100644 data/films/queries/ou.json create mode 100644 data/films/queries/our.json create mode 100644 data/films/queries/p.json create mode 100644 data/films/queries/pa.json create mode 100644 data/films/queries/par.json create mode 100644 data/films/queries/pari.json create mode 100644 data/films/queries/paris.json create mode 100644 data/films/queries/q.json create mode 100644 data/films/queries/qu.json create mode 100644 data/films/queries/qui.json create mode 100644 data/films/queries/quie.json create mode 100644 data/films/queries/quiet.json create mode 100644 data/films/queries/r.json create mode 100644 data/films/queries/re.json create mode 100644 data/films/queries/reb.json create mode 100644 data/films/queries/rebe.json create mode 100644 data/films/queries/rebec.json create mode 100644 data/films/queries/rebecc.json create mode 100644 data/films/queries/rebecca.json create mode 100644 data/films/queries/ri.json create mode 100644 data/films/queries/riv.json create mode 100644 data/films/queries/rive.json create mode 100644 data/films/queries/river.json create mode 100644 data/films/queries/s.json create mode 100644 data/films/queries/sh.json create mode 100644 data/films/queries/sho.json create mode 100644 data/films/queries/show.json create mode 100644 data/films/queries/t.json create mode 100644 data/films/queries/ta.json create mode 100644 data/films/queries/tak.json create mode 100644 data/films/queries/take.json create mode 100644 data/films/queries/th.json create mode 100644 data/films/queries/the.json create mode 100644 data/films/queries/to.json create mode 100644 data/films/queries/v.json create mode 100644 data/films/queries/va.json create mode 100644 data/films/queries/val.json create mode 100644 data/films/queries/vall.json create mode 100644 data/films/queries/valle.json create mode 100644 data/films/queries/valley.json create mode 100644 data/films/queries/w.json create mode 100644 data/films/queries/wa.json create mode 100644 data/films/queries/was.json create mode 100644 data/films/queries/wat.json create mode 100644 data/films/queries/wate.json create mode 100644 data/films/queries/water.json create mode 100644 data/films/queries/waterf.json create mode 100644 data/films/queries/waterfr.json create mode 100644 data/films/queries/waterfro.json create mode 100644 data/films/queries/waterfron.json create mode 100644 data/films/queries/waterfront.json create mode 100644 data/films/queries/way.json create mode 100644 data/films/queries/we.json create mode 100644 data/films/queries/wee.json create mode 100644 data/films/queries/week.json create mode 100644 data/films/queries/weeke.json create mode 100644 data/films/queries/weeken.json create mode 100644 data/films/queries/weekend.json create mode 100644 data/films/queries/wes.json create mode 100644 data/films/queries/west.json create mode 100644 data/films/queries/weste.json create mode 100644 data/films/queries/wester.json create mode 100644 data/films/queries/western.json create mode 100644 data/films/queries/wi.json create mode 100644 data/films/queries/win.json create mode 100644 data/films/queries/wind.json create mode 100644 data/films/queries/wing.json create mode 100644 data/films/queries/wings.json create mode 100644 data/films/queries/wit.json create mode 100644 data/films/queries/with.json create mode 100644 data/films/queries/wo.json create mode 100644 data/films/queries/wor.json create mode 100644 data/films/queries/worl.json create mode 100644 data/films/queries/world.json create mode 100644 data/films/queries/y.json create mode 100644 data/films/queries/ye.json create mode 100644 data/films/queries/yea.json create mode 100644 data/films/queries/year.json create mode 100644 data/films/queries/years.json create mode 100644 data/films/queries/yo.json create mode 100644 data/films/queries/you.json create mode 100644 data/films/queries/z.json create mode 100644 data/films/queries/zi.json create mode 100644 data/films/queries/zie.json create mode 100644 data/films/queries/zieg.json create mode 100644 data/films/queries/ziegf.json create mode 100644 data/films/queries/ziegfe.json create mode 100644 data/films/queries/ziegfel.json create mode 100644 data/films/queries/ziegfeld.json create mode 100644 data/films/queries/zo.json create mode 100644 data/films/queries/zol.json create mode 100644 data/films/queries/zola.json diff --git a/css/examples.css b/css/examples.css index ac32d985b7..59d401f013 100644 --- a/css/examples.css +++ b/css/examples.css @@ -82,6 +82,10 @@ p { outline: none; } +.typeahead { + background-color: #fff; +} + .typeahead:focus { border: 2px solid #0097cf; } diff --git a/css/main.css b/css/main.css index f2bfa9831d..77ea1ca83c 100644 --- a/css/main.css +++ b/css/main.css @@ -179,6 +179,10 @@ p { outline: none; } +.typeahead { + background-color: #fff; +} + .tt-hint { color: #999 } diff --git a/data/films/post_1960.json b/data/films/post_1960.json new file mode 100644 index 0000000000..e5d1d6b5c3 --- /dev/null +++ b/data/films/post_1960.json @@ -0,0 +1,452 @@ +[ + { + "year": "1961", + "value": "West Side Story", + "tokens": [ + "West", + "Side", + "Story" + ] + }, + { + "year": "1962", + "value": "Lawrence of Arabia", + "tokens": [ + "Lawrence", + "of", + "Arabia" + ] + }, + { + "year": "1963", + "value": "Tom Jones", + "tokens": [ + "Tom", + "Jones" + ] + }, + { + "year": "1964", + "value": "My Fair Lady", + "tokens": [ + "My", + "Fair", + "Lady" + ] + }, + { + "year": "1965", + "value": "The Sound of Music", + "tokens": [ + "The", + "Sound", + "of", + "Music" + ] + }, + { + "year": "1966", + "value": "A Man for All Seasons", + "tokens": [ + "A", + "Man", + "for", + "All", + "Seasons" + ] + }, + { + "year": "1967", + "value": "In the Heat of the Night", + "tokens": [ + "In", + "the", + "Heat", + "of", + "the", + "Night" + ] + }, + { + "year": "1968", + "value": "Oliver!", + "tokens": [ + "Oliver!" + ] + }, + { + "year": "1969", + "value": "Midnight Cowboy", + "tokens": [ + "Midnight", + "Cowboy" + ] + }, + { + "year": "1970", + "value": "Patton", + "tokens": [ + "Patton" + ] + }, + { + "year": "1971", + "value": "The French Connection", + "tokens": [ + "The", + "French", + "Connection" + ] + }, + { + "year": "1972", + "value": "The Godfather", + "tokens": [ + "The", + "Godfather" + ] + }, + { + "year": "1973", + "value": "The Sting", + "tokens": [ + "The", + "Sting" + ] + }, + { + "year": "1974", + "value": "The Godfather Part II", + "tokens": [ + "The", + "Godfather", + "Part", + "II" + ] + }, + { + "year": "1975", + "value": "One Flew over the Cuckoo's Nest", + "tokens": [ + "One", + "Flew", + "over", + "the", + "Cuckoo's", + "Nest" + ] + }, + { + "year": "1976", + "value": "Rocky", + "tokens": [ + "Rocky" + ] + }, + { + "year": "1977", + "value": "Annie Hall", + "tokens": [ + "Annie", + "Hall" + ] + }, + { + "year": "1978", + "value": "The Deer Hunter", + "tokens": [ + "The", + "Deer", + "Hunter" + ] + }, + { + "year": "1979", + "value": "Kramer vs. Kramer", + "tokens": [ + "Kramer", + "vs.", + "Kramer" + ] + }, + { + "year": "1980", + "value": "Ordinary People", + "tokens": [ + "Ordinary", + "People" + ] + }, + { + "year": "1981", + "value": "Chariots of Fire", + "tokens": [ + "Chariots", + "of", + "Fire" + ] + }, + { + "year": "1982", + "value": "Gandhi", + "tokens": [ + "Gandhi" + ] + }, + { + "year": "1983", + "value": "Terms of Endearment", + "tokens": [ + "Terms", + "of", + "Endearment" + ] + }, + { + "year": "1984", + "value": "Amadeus", + "tokens": [ + "Amadeus" + ] + }, + { + "year": "1985", + "value": "Out of Africa", + "tokens": [ + "Out", + "of", + "Africa" + ] + }, + { + "year": "1986", + "value": "Platoon", + "tokens": [ + "Platoon" + ] + }, + { + "year": "1987", + "value": "The Last Emperor", + "tokens": [ + "The", + "Last", + "Emperor" + ] + }, + { + "year": "1988", + "value": "Rain Man", + "tokens": [ + "Rain", + "Man" + ] + }, + { + "year": "1989", + "value": "Driving Miss Daisy", + "tokens": [ + "Driving", + "Miss", + "Daisy" + ] + }, + { + "year": "1990", + "value": "Dances With Wolves", + "tokens": [ + "Dances", + "With", + "Wolves" + ] + }, + { + "year": "1991", + "value": "The Silence of the Lambs", + "tokens": [ + "The", + "Silence", + "of", + "the", + "Lambs" + ] + }, + { + "year": "1992", + "value": "Unforgiven", + "tokens": [ + "Unforgiven" + ] + }, + { + "year": "1993", + "value": "Schindler’s List", + "tokens": [ + "Schindler’s", + "List" + ] + }, + { + "year": "1994", + "value": "Forrest Gump", + "tokens": [ + "Forrest", + "Gump" + ] + }, + { + "year": "1995", + "value": "Braveheart", + "tokens": [ + "Braveheart" + ] + }, + { + "year": "1996", + "value": "The English Patient", + "tokens": [ + "The", + "English", + "Patient" + ] + }, + { + "year": "1997", + "value": "Titanic", + "tokens": [ + "Titanic" + ] + }, + { + "year": "1998", + "value": "Shakespeare in Love", + "tokens": [ + "Shakespeare", + "in", + "Love" + ] + }, + { + "year": "1999", + "value": "American Beauty", + "tokens": [ + "American", + "Beauty" + ] + }, + { + "year": "2000", + "value": "Gladiator", + "tokens": [ + "Gladiator" + ] + }, + { + "year": "2001", + "value": "A Beautiful Mind", + "tokens": [ + "A", + "Beautiful", + "Mind" + ] + }, + { + "year": "2002", + "value": "Chicago", + "tokens": [ + "Chicago" + ] + }, + { + "year": "2003", + "value": "The Lord of the Rings: The Return of the King", + "tokens": [ + "The", + "Lord", + "of", + "the", + "Rings:", + "The", + "Return", + "of", + "the", + "King" + ] + }, + { + "year": "2004", + "value": "Million Dollar Baby", + "tokens": [ + "Million", + "Dollar", + "Baby" + ] + }, + { + "year": "2005", + "value": "Crash", + "tokens": [ + "Crash" + ] + }, + { + "year": "2006", + "value": "The Departed", + "tokens": [ + "The", + "Departed" + ] + }, + { + "year": "2007", + "value": "No Country for Old Men", + "tokens": [ + "No", + "Country", + "for", + "Old", + "Men" + ] + }, + { + "year": "2008", + "value": "Slumdog Millionaire", + "tokens": [ + "Slumdog", + "Millionaire" + ] + }, + { + "year": "2009", + "value": "The Hurt Locker", + "tokens": [ + "The", + "Hurt", + "Locker" + ] + }, + { + "year": "2010", + "value": "The King's Speech", + "tokens": [ + "The", + "King's", + "Speech" + ] + }, + { + "year": "2011", + "value": "The Artist", + "tokens": [ + "The", + "Artist" + ] + }, + { + "year": "2012", + "value": "Argo", + "tokens": [ + "Argo" + ] + } +] diff --git a/data/films/queries/8.json b/data/films/queries/8.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/8.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/80.json b/data/films/queries/80.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/80.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/a.json b/data/films/queries/a.json new file mode 100644 index 0000000000..a1f6fef1e5 --- /dev/null +++ b/data/films/queries/a.json @@ -0,0 +1,71 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + }, + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + }, + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + }, + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ab.json b/data/films/queries/ab.json new file mode 100644 index 0000000000..c3e337e2f9 --- /dev/null +++ b/data/films/queries/ab.json @@ -0,0 +1,11 @@ +[ + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/abo.json b/data/films/queries/abo.json new file mode 100644 index 0000000000..c3e337e2f9 --- /dev/null +++ b/data/films/queries/abo.json @@ -0,0 +1,11 @@ +[ + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/abou.json b/data/films/queries/abou.json new file mode 100644 index 0000000000..c3e337e2f9 --- /dev/null +++ b/data/films/queries/abou.json @@ -0,0 +1,11 @@ +[ + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/about.json b/data/films/queries/about.json new file mode 100644 index 0000000000..c3e337e2f9 --- /dev/null +++ b/data/films/queries/about.json @@ -0,0 +1,11 @@ +[ + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ag.json b/data/films/queries/ag.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/ag.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/agr.json b/data/films/queries/agr.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/agr.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/agre.json b/data/films/queries/agre.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/agre.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/agree.json b/data/films/queries/agree.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/agree.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/agreem.json b/data/films/queries/agreem.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/agreem.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/agreeme.json b/data/films/queries/agreeme.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/agreeme.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/agreemen.json b/data/films/queries/agreemen.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/agreemen.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/agreement.json b/data/films/queries/agreement.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/agreement.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/al.json b/data/films/queries/al.json new file mode 100644 index 0000000000..803d8f27ea --- /dev/null +++ b/data/films/queries/al.json @@ -0,0 +1,33 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/all.json b/data/films/queries/all.json new file mode 100644 index 0000000000..803d8f27ea --- /dev/null +++ b/data/films/queries/all.json @@ -0,0 +1,33 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/am.json b/data/films/queries/am.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/am.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ame.json b/data/films/queries/ame.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/ame.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/amer.json b/data/films/queries/amer.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/amer.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ameri.json b/data/films/queries/ameri.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/ameri.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/americ.json b/data/films/queries/americ.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/americ.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/america.json b/data/films/queries/america.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/america.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/american.json b/data/films/queries/american.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/american.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/an.json b/data/films/queries/an.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/an.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ap.json b/data/films/queries/ap.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/ap.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/apa.json b/data/films/queries/apa.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/apa.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/apar.json b/data/films/queries/apar.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/apar.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/apart.json b/data/films/queries/apart.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/apart.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/apartm.json b/data/films/queries/apartm.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/apartm.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/apartme.json b/data/films/queries/apartme.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/apartme.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/apartmen.json b/data/films/queries/apartmen.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/apartmen.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/apartment.json b/data/films/queries/apartment.json new file mode 100644 index 0000000000..29978ac525 --- /dev/null +++ b/data/films/queries/apartment.json @@ -0,0 +1,10 @@ +[ + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ar.json b/data/films/queries/ar.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/ar.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/aro.json b/data/films/queries/aro.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/aro.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/arou.json b/data/films/queries/arou.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/arou.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/aroun.json b/data/films/queries/aroun.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/aroun.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/around.json b/data/films/queries/around.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/around.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/b.json b/data/films/queries/b.json new file mode 100644 index 0000000000..ed0567f279 --- /dev/null +++ b/data/films/queries/b.json @@ -0,0 +1,52 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + }, + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + }, + { + "year": "1959", + "value": "Ben-Hur", + "tokens": [ + "Ben-Hur" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/be.json b/data/films/queries/be.json new file mode 100644 index 0000000000..f8e753f858 --- /dev/null +++ b/data/films/queries/be.json @@ -0,0 +1,21 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + }, + { + "year": "1959", + "value": "Ben-Hur", + "tokens": [ + "Ben-Hur" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ben-h.json b/data/films/queries/ben-h.json new file mode 100644 index 0000000000..63ed61112e --- /dev/null +++ b/data/films/queries/ben-h.json @@ -0,0 +1,9 @@ +[ + { + "year": "1959", + "value": "Ben-Hur", + "tokens": [ + "Ben-Hur" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ben-hu.json b/data/films/queries/ben-hu.json new file mode 100644 index 0000000000..63ed61112e --- /dev/null +++ b/data/films/queries/ben-hu.json @@ -0,0 +1,9 @@ +[ + { + "year": "1959", + "value": "Ben-Hur", + "tokens": [ + "Ben-Hur" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ben-hur.json b/data/films/queries/ben-hur.json new file mode 100644 index 0000000000..63ed61112e --- /dev/null +++ b/data/films/queries/ben-hur.json @@ -0,0 +1,9 @@ +[ + { + "year": "1959", + "value": "Ben-Hur", + "tokens": [ + "Ben-Hur" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ben.json b/data/films/queries/ben.json new file mode 100644 index 0000000000..63ed61112e --- /dev/null +++ b/data/films/queries/ben.json @@ -0,0 +1,9 @@ +[ + { + "year": "1959", + "value": "Ben-Hur", + "tokens": [ + "Ben-Hur" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bes.json b/data/films/queries/bes.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/bes.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/best.json b/data/films/queries/best.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/best.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bo.json b/data/films/queries/bo.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/bo.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bou.json b/data/films/queries/bou.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/bou.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/boun.json b/data/films/queries/boun.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/boun.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bount.json b/data/films/queries/bount.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/bount.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bounty.json b/data/films/queries/bounty.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/bounty.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/br.json b/data/films/queries/br.json new file mode 100644 index 0000000000..2fb85e755d --- /dev/null +++ b/data/films/queries/br.json @@ -0,0 +1,23 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bri.json b/data/films/queries/bri.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/bri.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/brid.json b/data/films/queries/brid.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/brid.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bridg.json b/data/films/queries/bridg.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/bridg.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bridge.json b/data/films/queries/bridge.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/bridge.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/bro.json b/data/films/queries/bro.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/bro.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/broa.json b/data/films/queries/broa.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/broa.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/broad.json b/data/films/queries/broad.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/broad.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/broadw.json b/data/films/queries/broadw.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/broadw.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/broadwa.json b/data/films/queries/broadwa.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/broadwa.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/broadway.json b/data/films/queries/broadway.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/broadway.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/c.json b/data/films/queries/c.json new file mode 100644 index 0000000000..aaedda1227 --- /dev/null +++ b/data/films/queries/c.json @@ -0,0 +1,35 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + }, + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + }, + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ca.json b/data/films/queries/ca.json new file mode 100644 index 0000000000..a4fdc1e33d --- /dev/null +++ b/data/films/queries/ca.json @@ -0,0 +1,28 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + }, + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/can't.json b/data/films/queries/can't.json new file mode 100644 index 0000000000..febdb06f65 --- /dev/null +++ b/data/films/queries/can't.json @@ -0,0 +1,14 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/can.json b/data/films/queries/can.json new file mode 100644 index 0000000000..febdb06f65 --- /dev/null +++ b/data/films/queries/can.json @@ -0,0 +1,14 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cas.json b/data/films/queries/cas.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/cas.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/casa.json b/data/films/queries/casa.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/casa.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/casab.json b/data/films/queries/casab.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/casab.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/casabl.json b/data/films/queries/casabl.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/casabl.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/casabla.json b/data/films/queries/casabla.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/casabla.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/casablan.json b/data/films/queries/casablan.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/casablan.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/casablanc.json b/data/films/queries/casablanc.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/casablanc.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/casablanca.json b/data/films/queries/casablanca.json new file mode 100644 index 0000000000..46833d9156 --- /dev/null +++ b/data/films/queries/casablanca.json @@ -0,0 +1,9 @@ +[ + { + "year": "1943", + "value": "Casablanca", + "tokens": [ + "Casablanca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cav.json b/data/films/queries/cav.json new file mode 100644 index 0000000000..10f62bfbc5 --- /dev/null +++ b/data/films/queries/cav.json @@ -0,0 +1,9 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cava.json b/data/films/queries/cava.json new file mode 100644 index 0000000000..10f62bfbc5 --- /dev/null +++ b/data/films/queries/cava.json @@ -0,0 +1,9 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/caval.json b/data/films/queries/caval.json new file mode 100644 index 0000000000..10f62bfbc5 --- /dev/null +++ b/data/films/queries/caval.json @@ -0,0 +1,9 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cavalc.json b/data/films/queries/cavalc.json new file mode 100644 index 0000000000..10f62bfbc5 --- /dev/null +++ b/data/films/queries/cavalc.json @@ -0,0 +1,9 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cavalca.json b/data/films/queries/cavalca.json new file mode 100644 index 0000000000..10f62bfbc5 --- /dev/null +++ b/data/films/queries/cavalca.json @@ -0,0 +1,9 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cavalcad.json b/data/films/queries/cavalcad.json new file mode 100644 index 0000000000..10f62bfbc5 --- /dev/null +++ b/data/films/queries/cavalcad.json @@ -0,0 +1,9 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cavalcade.json b/data/films/queries/cavalcade.json new file mode 100644 index 0000000000..10f62bfbc5 --- /dev/null +++ b/data/films/queries/cavalcade.json @@ -0,0 +1,9 @@ +[ + { + "year": "1932/1933", + "value": "Cavalcade", + "tokens": [ + "Cavalcade" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ci.json b/data/films/queries/ci.json new file mode 100644 index 0000000000..d0aa42474b --- /dev/null +++ b/data/films/queries/ci.json @@ -0,0 +1,9 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cim.json b/data/films/queries/cim.json new file mode 100644 index 0000000000..d0aa42474b --- /dev/null +++ b/data/films/queries/cim.json @@ -0,0 +1,9 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cima.json b/data/films/queries/cima.json new file mode 100644 index 0000000000..d0aa42474b --- /dev/null +++ b/data/films/queries/cima.json @@ -0,0 +1,9 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cimar.json b/data/films/queries/cimar.json new file mode 100644 index 0000000000..d0aa42474b --- /dev/null +++ b/data/films/queries/cimar.json @@ -0,0 +1,9 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cimarr.json b/data/films/queries/cimarr.json new file mode 100644 index 0000000000..d0aa42474b --- /dev/null +++ b/data/films/queries/cimarr.json @@ -0,0 +1,9 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cimarro.json b/data/films/queries/cimarro.json new file mode 100644 index 0000000000..d0aa42474b --- /dev/null +++ b/data/films/queries/cimarro.json @@ -0,0 +1,9 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/cimarron.json b/data/films/queries/cimarron.json new file mode 100644 index 0000000000..d0aa42474b --- /dev/null +++ b/data/films/queries/cimarron.json @@ -0,0 +1,9 @@ +[ + { + "year": "1930/1931", + "value": "Cimarron", + "tokens": [ + "Cimarron" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/d.json b/data/films/queries/d.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/d.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/da.json b/data/films/queries/da.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/da.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/day.json b/data/films/queries/day.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/day.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/days.json b/data/films/queries/days.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/days.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/e.json b/data/films/queries/e.json new file mode 100644 index 0000000000..9c0b3fa5e7 --- /dev/null +++ b/data/films/queries/e.json @@ -0,0 +1,43 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + }, + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ea.json b/data/films/queries/ea.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/ea.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ear.json b/data/films/queries/ear.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/ear.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/eart.json b/data/films/queries/eart.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/eart.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/earth.json b/data/films/queries/earth.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/earth.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/em.json b/data/films/queries/em.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/em.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/emi.json b/data/films/queries/emi.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/emi.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/emil.json b/data/films/queries/emil.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/emil.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/emile.json b/data/films/queries/emile.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/emile.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/et.json b/data/films/queries/et.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/et.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ete.json b/data/films/queries/ete.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/ete.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/eter.json b/data/films/queries/eter.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/eter.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/etern.json b/data/films/queries/etern.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/etern.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/eterni.json b/data/films/queries/eterni.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/eterni.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/eternit.json b/data/films/queries/eternit.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/eternit.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/eternity.json b/data/films/queries/eternity.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/eternity.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ev.json b/data/films/queries/ev.json new file mode 100644 index 0000000000..c3e337e2f9 --- /dev/null +++ b/data/films/queries/ev.json @@ -0,0 +1,11 @@ +[ + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/eve.json b/data/films/queries/eve.json new file mode 100644 index 0000000000..c3e337e2f9 --- /dev/null +++ b/data/films/queries/eve.json @@ -0,0 +1,11 @@ +[ + { + "year": "1950", + "value": "All About Eve", + "tokens": [ + "All", + "About", + "Eve" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/f.json b/data/films/queries/f.json new file mode 100644 index 0000000000..d7fca64acc --- /dev/null +++ b/data/films/queries/f.json @@ -0,0 +1,24 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/fr.json b/data/films/queries/fr.json new file mode 100644 index 0000000000..d7fca64acc --- /dev/null +++ b/data/films/queries/fr.json @@ -0,0 +1,24 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/fro.json b/data/films/queries/fro.json new file mode 100644 index 0000000000..d7fca64acc --- /dev/null +++ b/data/films/queries/fro.json @@ -0,0 +1,24 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/from.json b/data/films/queries/from.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/from.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/fron.json b/data/films/queries/fron.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/fron.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/front.json b/data/films/queries/front.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/front.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/g.json b/data/films/queries/g.json new file mode 100644 index 0000000000..6b511a3249 --- /dev/null +++ b/data/films/queries/g.json @@ -0,0 +1,75 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + }, + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + }, + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + }, + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + }, + { + "year": "1958", + "value": "Gigi", + "tokens": [ + "Gigi" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ge.json b/data/films/queries/ge.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/ge.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gen.json b/data/films/queries/gen.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gen.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gent.json b/data/films/queries/gent.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gent.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gentl.json b/data/films/queries/gentl.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gentl.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gentle.json b/data/films/queries/gentle.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gentle.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gentlem.json b/data/films/queries/gentlem.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gentlem.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gentlema.json b/data/films/queries/gentlema.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gentlema.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gentleman's.json b/data/films/queries/gentleman's.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gentleman's.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gentleman.json b/data/films/queries/gentleman.json new file mode 100644 index 0000000000..c2a189671c --- /dev/null +++ b/data/films/queries/gentleman.json @@ -0,0 +1,10 @@ +[ + { + "year": "1947", + "value": "Gentleman's Agreement", + "tokens": [ + "Gentleman's", + "Agreement" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gi.json b/data/films/queries/gi.json new file mode 100644 index 0000000000..e83bb5e276 --- /dev/null +++ b/data/films/queries/gi.json @@ -0,0 +1,9 @@ +[ + { + "year": "1958", + "value": "Gigi", + "tokens": [ + "Gigi" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gig.json b/data/films/queries/gig.json new file mode 100644 index 0000000000..e83bb5e276 --- /dev/null +++ b/data/films/queries/gig.json @@ -0,0 +1,9 @@ +[ + { + "year": "1958", + "value": "Gigi", + "tokens": [ + "Gigi" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gigi.json b/data/films/queries/gigi.json new file mode 100644 index 0000000000..e83bb5e276 --- /dev/null +++ b/data/films/queries/gigi.json @@ -0,0 +1,9 @@ +[ + { + "year": "1958", + "value": "Gigi", + "tokens": [ + "Gigi" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/go.json b/data/films/queries/go.json new file mode 100644 index 0000000000..49323c11fe --- /dev/null +++ b/data/films/queries/go.json @@ -0,0 +1,21 @@ +[ + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + }, + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/goi.json b/data/films/queries/goi.json new file mode 100644 index 0000000000..e5485922b1 --- /dev/null +++ b/data/films/queries/goi.json @@ -0,0 +1,11 @@ +[ + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/goin.json b/data/films/queries/goin.json new file mode 100644 index 0000000000..e5485922b1 --- /dev/null +++ b/data/films/queries/goin.json @@ -0,0 +1,11 @@ +[ + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/going.json b/data/films/queries/going.json new file mode 100644 index 0000000000..e5485922b1 --- /dev/null +++ b/data/films/queries/going.json @@ -0,0 +1,11 @@ +[ + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gon.json b/data/films/queries/gon.json new file mode 100644 index 0000000000..d896f41aa9 --- /dev/null +++ b/data/films/queries/gon.json @@ -0,0 +1,12 @@ +[ + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gone.json b/data/films/queries/gone.json new file mode 100644 index 0000000000..d896f41aa9 --- /dev/null +++ b/data/films/queries/gone.json @@ -0,0 +1,12 @@ +[ + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gr.json b/data/films/queries/gr.json new file mode 100644 index 0000000000..0680d24c80 --- /dev/null +++ b/data/films/queries/gr.json @@ -0,0 +1,41 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + }, + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gra.json b/data/films/queries/gra.json new file mode 100644 index 0000000000..a2309d0474 --- /dev/null +++ b/data/films/queries/gra.json @@ -0,0 +1,10 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gran.json b/data/films/queries/gran.json new file mode 100644 index 0000000000..a2309d0474 --- /dev/null +++ b/data/films/queries/gran.json @@ -0,0 +1,10 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/grand.json b/data/films/queries/grand.json new file mode 100644 index 0000000000..a2309d0474 --- /dev/null +++ b/data/films/queries/grand.json @@ -0,0 +1,10 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gre.json b/data/films/queries/gre.json new file mode 100644 index 0000000000..67c290b037 --- /dev/null +++ b/data/films/queries/gre.json @@ -0,0 +1,33 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/grea.json b/data/films/queries/grea.json new file mode 100644 index 0000000000..a73e7ceaf0 --- /dev/null +++ b/data/films/queries/grea.json @@ -0,0 +1,22 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/great.json b/data/films/queries/great.json new file mode 100644 index 0000000000..a73e7ceaf0 --- /dev/null +++ b/data/films/queries/great.json @@ -0,0 +1,22 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/greate.json b/data/films/queries/greate.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/greate.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/greates.json b/data/films/queries/greates.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/greates.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/greatest.json b/data/films/queries/greatest.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/greatest.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/gree.json b/data/films/queries/gree.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/gree.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/green.json b/data/films/queries/green.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/green.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/h.json b/data/films/queries/h.json new file mode 100644 index 0000000000..ff77350f20 --- /dev/null +++ b/data/films/queries/h.json @@ -0,0 +1,48 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + }, + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + }, + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1948", + "value": "Hamlet", + "tokens": [ + "Hamlet" + ] + }, + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ha.json b/data/films/queries/ha.json new file mode 100644 index 0000000000..2411f92a0a --- /dev/null +++ b/data/films/queries/ha.json @@ -0,0 +1,19 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + }, + { + "year": "1948", + "value": "Hamlet", + "tokens": [ + "Hamlet" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ham.json b/data/films/queries/ham.json new file mode 100644 index 0000000000..101dbf618c --- /dev/null +++ b/data/films/queries/ham.json @@ -0,0 +1,9 @@ +[ + { + "year": "1948", + "value": "Hamlet", + "tokens": [ + "Hamlet" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/haml.json b/data/films/queries/haml.json new file mode 100644 index 0000000000..101dbf618c --- /dev/null +++ b/data/films/queries/haml.json @@ -0,0 +1,9 @@ +[ + { + "year": "1948", + "value": "Hamlet", + "tokens": [ + "Hamlet" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/hamle.json b/data/films/queries/hamle.json new file mode 100644 index 0000000000..101dbf618c --- /dev/null +++ b/data/films/queries/hamle.json @@ -0,0 +1,9 @@ +[ + { + "year": "1948", + "value": "Hamlet", + "tokens": [ + "Hamlet" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/hamlet.json b/data/films/queries/hamlet.json new file mode 100644 index 0000000000..101dbf618c --- /dev/null +++ b/data/films/queries/hamlet.json @@ -0,0 +1,9 @@ +[ + { + "year": "1948", + "value": "Hamlet", + "tokens": [ + "Hamlet" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/hap.json b/data/films/queries/hap.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/hap.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/happ.json b/data/films/queries/happ.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/happ.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/happe.json b/data/films/queries/happe.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/happe.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/happen.json b/data/films/queries/happen.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/happen.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/happene.json b/data/films/queries/happene.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/happene.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/happened.json b/data/films/queries/happened.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/happened.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/he.json b/data/films/queries/he.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/he.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/her.json b/data/films/queries/her.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/her.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/here.json b/data/films/queries/here.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/here.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ho.json b/data/films/queries/ho.json new file mode 100644 index 0000000000..ee23b19230 --- /dev/null +++ b/data/films/queries/ho.json @@ -0,0 +1,21 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + }, + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/hot.json b/data/films/queries/hot.json new file mode 100644 index 0000000000..a2309d0474 --- /dev/null +++ b/data/films/queries/hot.json @@ -0,0 +1,10 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/hote.json b/data/films/queries/hote.json new file mode 100644 index 0000000000..a2309d0474 --- /dev/null +++ b/data/films/queries/hote.json @@ -0,0 +1,10 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/hotel.json b/data/films/queries/hotel.json new file mode 100644 index 0000000000..a2309d0474 --- /dev/null +++ b/data/films/queries/hotel.json @@ -0,0 +1,10 @@ +[ + { + "year": "1931/1932", + "value": "Grand Hotel", + "tokens": [ + "Grand", + "Hotel" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/how.json b/data/films/queries/how.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/how.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/i.json b/data/films/queries/i.json new file mode 100644 index 0000000000..6d55a441fc --- /dev/null +++ b/data/films/queries/i.json @@ -0,0 +1,46 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + }, + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + }, + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/in.json b/data/films/queries/in.json new file mode 100644 index 0000000000..2d2002ba34 --- /dev/null +++ b/data/films/queries/in.json @@ -0,0 +1,24 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + }, + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/it.json b/data/films/queries/it.json new file mode 100644 index 0000000000..eef6012d42 --- /dev/null +++ b/data/films/queries/it.json @@ -0,0 +1,24 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + }, + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/k.json b/data/films/queries/k.json new file mode 100644 index 0000000000..a3c19e3e49 --- /dev/null +++ b/data/films/queries/k.json @@ -0,0 +1,24 @@ +[ + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ki.json b/data/films/queries/ki.json new file mode 100644 index 0000000000..9617ef925c --- /dev/null +++ b/data/films/queries/ki.json @@ -0,0 +1,12 @@ +[ + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/kin.json b/data/films/queries/kin.json new file mode 100644 index 0000000000..9617ef925c --- /dev/null +++ b/data/films/queries/kin.json @@ -0,0 +1,12 @@ +[ + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/king.json b/data/films/queries/king.json new file mode 100644 index 0000000000..9617ef925c --- /dev/null +++ b/data/films/queries/king.json @@ -0,0 +1,12 @@ +[ + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/kings.json b/data/films/queries/kings.json new file mode 100644 index 0000000000..9617ef925c --- /dev/null +++ b/data/films/queries/kings.json @@ -0,0 +1,12 @@ +[ + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/kw.json b/data/films/queries/kw.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/kw.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/kwa.json b/data/films/queries/kwa.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/kwa.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/kwai.json b/data/films/queries/kwai.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/kwai.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/l.json b/data/films/queries/l.json new file mode 100644 index 0000000000..6ceaa04b72 --- /dev/null +++ b/data/films/queries/l.json @@ -0,0 +1,34 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/li.json b/data/films/queries/li.json new file mode 100644 index 0000000000..9d524c1098 --- /dev/null +++ b/data/films/queries/li.json @@ -0,0 +1,25 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/lif.json b/data/films/queries/lif.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/lif.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/life.json b/data/films/queries/life.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/life.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/liv.json b/data/films/queries/liv.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/liv.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/live.json b/data/films/queries/live.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/live.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/lives.json b/data/films/queries/lives.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/lives.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/lo.json b/data/films/queries/lo.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/lo.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/los.json b/data/films/queries/los.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/los.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/lost.json b/data/films/queries/lost.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/lost.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/m.json b/data/films/queries/m.json new file mode 100644 index 0000000000..cca4d5ceb2 --- /dev/null +++ b/data/films/queries/m.json @@ -0,0 +1,66 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + }, + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + }, + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + }, + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1955", + "value": "Marty", + "tokens": [ + "Marty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ma.json b/data/films/queries/ma.json new file mode 100644 index 0000000000..900a8f9c20 --- /dev/null +++ b/data/films/queries/ma.json @@ -0,0 +1,9 @@ +[ + { + "year": "1955", + "value": "Marty", + "tokens": [ + "Marty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mar.json b/data/films/queries/mar.json new file mode 100644 index 0000000000..900a8f9c20 --- /dev/null +++ b/data/films/queries/mar.json @@ -0,0 +1,9 @@ +[ + { + "year": "1955", + "value": "Marty", + "tokens": [ + "Marty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mart.json b/data/films/queries/mart.json new file mode 100644 index 0000000000..900a8f9c20 --- /dev/null +++ b/data/films/queries/mart.json @@ -0,0 +1,9 @@ +[ + { + "year": "1955", + "value": "Marty", + "tokens": [ + "Marty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/marty.json b/data/films/queries/marty.json new file mode 100644 index 0000000000..900a8f9c20 --- /dev/null +++ b/data/films/queries/marty.json @@ -0,0 +1,9 @@ +[ + { + "year": "1955", + "value": "Marty", + "tokens": [ + "Marty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/me.json b/data/films/queries/me.json new file mode 100644 index 0000000000..30bbc0c5d2 --- /dev/null +++ b/data/films/queries/me.json @@ -0,0 +1,21 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mel.json b/data/films/queries/mel.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/mel.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/melo.json b/data/films/queries/melo.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/melo.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/melod.json b/data/films/queries/melod.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/melod.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/melody.json b/data/films/queries/melody.json new file mode 100644 index 0000000000..9d074167d6 --- /dev/null +++ b/data/films/queries/melody.json @@ -0,0 +1,11 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/men.json b/data/films/queries/men.json new file mode 100644 index 0000000000..9617ef925c --- /dev/null +++ b/data/films/queries/men.json @@ -0,0 +1,12 @@ +[ + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mi.json b/data/films/queries/mi.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/mi.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/min.json b/data/films/queries/min.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/min.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mini.json b/data/films/queries/mini.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/mini.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/miniv.json b/data/films/queries/miniv.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/miniv.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/minive.json b/data/films/queries/minive.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/minive.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/miniver.json b/data/films/queries/miniver.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/miniver.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mr.json b/data/films/queries/mr.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/mr.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mrs.json b/data/films/queries/mrs.json new file mode 100644 index 0000000000..a890fe8d09 --- /dev/null +++ b/data/films/queries/mrs.json @@ -0,0 +1,10 @@ +[ + { + "year": "1942", + "value": "Mrs. Miniver", + "tokens": [ + "Mrs.", + "Miniver" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mu.json b/data/films/queries/mu.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/mu.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mut.json b/data/films/queries/mut.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/mut.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/muti.json b/data/films/queries/muti.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/muti.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mutin.json b/data/films/queries/mutin.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/mutin.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/mutiny.json b/data/films/queries/mutiny.json new file mode 100644 index 0000000000..43f38c2887 --- /dev/null +++ b/data/films/queries/mutiny.json @@ -0,0 +1,12 @@ +[ + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/my.json b/data/films/queries/my.json new file mode 100644 index 0000000000..d3df1d79bf --- /dev/null +++ b/data/films/queries/my.json @@ -0,0 +1,22 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/n.json b/data/films/queries/n.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/n.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ni.json b/data/films/queries/ni.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/ni.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/nig.json b/data/films/queries/nig.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/nig.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/nigh.json b/data/films/queries/nigh.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/nigh.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/night.json b/data/films/queries/night.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/night.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/o.json b/data/films/queries/o.json new file mode 100644 index 0000000000..5618228a83 --- /dev/null +++ b/data/films/queries/o.json @@ -0,0 +1,89 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + }, + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + }, + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + }, + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/of.json b/data/films/queries/of.json new file mode 100644 index 0000000000..9d524c1098 --- /dev/null +++ b/data/films/queries/of.json @@ -0,0 +1,25 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/on.json b/data/films/queries/on.json new file mode 100644 index 0000000000..129244bb6d --- /dev/null +++ b/data/films/queries/on.json @@ -0,0 +1,66 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + }, + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + }, + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/one.json b/data/films/queries/one.json new file mode 100644 index 0000000000..4151b2a21b --- /dev/null +++ b/data/films/queries/one.json @@ -0,0 +1,12 @@ +[ + { + "year": "1934", + "value": "It Happened One Night", + "tokens": [ + "It", + "Happened", + "One", + "Night" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ou.json b/data/films/queries/ou.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/ou.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/our.json b/data/films/queries/our.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/our.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/p.json b/data/films/queries/p.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/p.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/pa.json b/data/films/queries/pa.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/pa.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/par.json b/data/films/queries/par.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/par.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/pari.json b/data/films/queries/pari.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/pari.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/paris.json b/data/films/queries/paris.json new file mode 100644 index 0000000000..9841d9825b --- /dev/null +++ b/data/films/queries/paris.json @@ -0,0 +1,12 @@ +[ + { + "year": "1951", + "value": "An American in Paris", + "tokens": [ + "An", + "American", + "in", + "Paris" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/q.json b/data/films/queries/q.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/q.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/qu.json b/data/films/queries/qu.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/qu.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/qui.json b/data/films/queries/qui.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/qui.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/quie.json b/data/films/queries/quie.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/quie.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/quiet.json b/data/films/queries/quiet.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/quiet.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/r.json b/data/films/queries/r.json new file mode 100644 index 0000000000..44ba9268cc --- /dev/null +++ b/data/films/queries/r.json @@ -0,0 +1,21 @@ +[ + { + "year": "1940", + "value": "Rebecca", + "tokens": [ + "Rebecca" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/re.json b/data/films/queries/re.json new file mode 100644 index 0000000000..02359a7520 --- /dev/null +++ b/data/films/queries/re.json @@ -0,0 +1,9 @@ +[ + { + "year": "1940", + "value": "Rebecca", + "tokens": [ + "Rebecca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/reb.json b/data/films/queries/reb.json new file mode 100644 index 0000000000..02359a7520 --- /dev/null +++ b/data/films/queries/reb.json @@ -0,0 +1,9 @@ +[ + { + "year": "1940", + "value": "Rebecca", + "tokens": [ + "Rebecca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/rebe.json b/data/films/queries/rebe.json new file mode 100644 index 0000000000..02359a7520 --- /dev/null +++ b/data/films/queries/rebe.json @@ -0,0 +1,9 @@ +[ + { + "year": "1940", + "value": "Rebecca", + "tokens": [ + "Rebecca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/rebec.json b/data/films/queries/rebec.json new file mode 100644 index 0000000000..02359a7520 --- /dev/null +++ b/data/films/queries/rebec.json @@ -0,0 +1,9 @@ +[ + { + "year": "1940", + "value": "Rebecca", + "tokens": [ + "Rebecca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/rebecc.json b/data/films/queries/rebecc.json new file mode 100644 index 0000000000..02359a7520 --- /dev/null +++ b/data/films/queries/rebecc.json @@ -0,0 +1,9 @@ +[ + { + "year": "1940", + "value": "Rebecca", + "tokens": [ + "Rebecca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/rebecca.json b/data/films/queries/rebecca.json new file mode 100644 index 0000000000..02359a7520 --- /dev/null +++ b/data/films/queries/rebecca.json @@ -0,0 +1,9 @@ +[ + { + "year": "1940", + "value": "Rebecca", + "tokens": [ + "Rebecca" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ri.json b/data/films/queries/ri.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/ri.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/riv.json b/data/films/queries/riv.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/riv.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/rive.json b/data/films/queries/rive.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/rive.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/river.json b/data/films/queries/river.json new file mode 100644 index 0000000000..d93459030e --- /dev/null +++ b/data/films/queries/river.json @@ -0,0 +1,14 @@ +[ + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/s.json b/data/films/queries/s.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/s.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/sh.json b/data/films/queries/sh.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/sh.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/sho.json b/data/films/queries/sho.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/sho.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/show.json b/data/films/queries/show.json new file mode 100644 index 0000000000..43b6eacb1d --- /dev/null +++ b/data/films/queries/show.json @@ -0,0 +1,13 @@ +[ + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/t.json b/data/films/queries/t.json new file mode 100644 index 0000000000..58190f774c --- /dev/null +++ b/data/films/queries/t.json @@ -0,0 +1,168 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + }, + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + }, + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + }, + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + }, + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + }, + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + }, + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + }, + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ta.json b/data/films/queries/ta.json new file mode 100644 index 0000000000..febdb06f65 --- /dev/null +++ b/data/films/queries/ta.json @@ -0,0 +1,14 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/tak.json b/data/films/queries/tak.json new file mode 100644 index 0000000000..febdb06f65 --- /dev/null +++ b/data/films/queries/tak.json @@ -0,0 +1,14 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/take.json b/data/films/queries/take.json new file mode 100644 index 0000000000..febdb06f65 --- /dev/null +++ b/data/films/queries/take.json @@ -0,0 +1,14 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/th.json b/data/films/queries/th.json new file mode 100644 index 0000000000..a81a2c801b --- /dev/null +++ b/data/films/queries/th.json @@ -0,0 +1,146 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + }, + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + }, + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + }, + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + }, + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + }, + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + }, + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/the.json b/data/films/queries/the.json new file mode 100644 index 0000000000..a81a2c801b --- /dev/null +++ b/data/films/queries/the.json @@ -0,0 +1,146 @@ +[ + { + "year": "1928/1929", + "value": "The Broadway Melody", + "tokens": [ + "The", + "Broadway", + "Melody" + ] + }, + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1935", + "value": "Mutiny on the Bounty", + "tokens": [ + "Mutiny", + "on", + "the", + "Bounty" + ] + }, + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + }, + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + }, + { + "year": "1949", + "value": "All the Kings Men", + "tokens": [ + "All", + "the", + "Kings", + "Men" + ] + }, + { + "year": "1952", + "value": "The Greatest Show on Earth", + "tokens": [ + "The", + "Greatest", + "Show", + "on", + "Earth" + ] + }, + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + }, + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + }, + { + "year": "1957", + "value": "The Bridge on the River Kwai", + "tokens": [ + "The", + "Bridge", + "on", + "the", + "River", + "Kwai" + ] + }, + { + "year": "1960", + "value": "The Apartment", + "tokens": [ + "The", + "Apartment" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/to.json b/data/films/queries/to.json new file mode 100644 index 0000000000..0b9c7452c1 --- /dev/null +++ b/data/films/queries/to.json @@ -0,0 +1,12 @@ +[ + { + "year": "1953", + "value": "From Here to Eternity", + "tokens": [ + "From", + "Here", + "to", + "Eternity" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/v.json b/data/films/queries/v.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/v.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/va.json b/data/films/queries/va.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/va.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/val.json b/data/films/queries/val.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/val.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/vall.json b/data/films/queries/vall.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/vall.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/valle.json b/data/films/queries/valle.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/valle.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/valley.json b/data/films/queries/valley.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/valley.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/w.json b/data/films/queries/w.json new file mode 100644 index 0000000000..65191b8a9b --- /dev/null +++ b/data/films/queries/w.json @@ -0,0 +1,93 @@ +[ + { + "year": "1927/1928", + "value": "Wings", + "tokens": [ + "Wings" + ] + }, + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + }, + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + }, + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + }, + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + }, + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wa.json b/data/films/queries/wa.json new file mode 100644 index 0000000000..b3d07e9ec7 --- /dev/null +++ b/data/films/queries/wa.json @@ -0,0 +1,31 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + }, + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + }, + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/was.json b/data/films/queries/was.json new file mode 100644 index 0000000000..685a907be1 --- /dev/null +++ b/data/films/queries/was.json @@ -0,0 +1,13 @@ +[ + { + "year": "1941", + "value": "How Green Was My Valley", + "tokens": [ + "How", + "Green", + "Was", + "My", + "Valley" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wat.json b/data/films/queries/wat.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/wat.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wate.json b/data/films/queries/wate.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/wate.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/water.json b/data/films/queries/water.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/water.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/waterf.json b/data/films/queries/waterf.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/waterf.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/waterfr.json b/data/films/queries/waterfr.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/waterfr.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/waterfro.json b/data/films/queries/waterfro.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/waterfro.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/waterfron.json b/data/films/queries/waterfron.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/waterfron.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/waterfront.json b/data/films/queries/waterfront.json new file mode 100644 index 0000000000..ccffaa1795 --- /dev/null +++ b/data/films/queries/waterfront.json @@ -0,0 +1,11 @@ +[ + { + "year": "1954", + "value": "On the Waterfront", + "tokens": [ + "On", + "the", + "Waterfront" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/way.json b/data/films/queries/way.json new file mode 100644 index 0000000000..e5485922b1 --- /dev/null +++ b/data/films/queries/way.json @@ -0,0 +1,11 @@ +[ + { + "year": "1944", + "value": "Going My Way", + "tokens": [ + "Going", + "My", + "Way" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/we.json b/data/films/queries/we.json new file mode 100644 index 0000000000..ae20710a4e --- /dev/null +++ b/data/films/queries/we.json @@ -0,0 +1,23 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + }, + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wee.json b/data/films/queries/wee.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/wee.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/week.json b/data/films/queries/week.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/week.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/weeke.json b/data/films/queries/weeke.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/weeke.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/weeken.json b/data/films/queries/weeken.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/weeken.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/weekend.json b/data/films/queries/weekend.json new file mode 100644 index 0000000000..5546fc077d --- /dev/null +++ b/data/films/queries/weekend.json @@ -0,0 +1,11 @@ +[ + { + "year": "1945", + "value": "The Lost Weekend", + "tokens": [ + "The", + "Lost", + "Weekend" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wes.json b/data/films/queries/wes.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/wes.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/west.json b/data/films/queries/west.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/west.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/weste.json b/data/films/queries/weste.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/weste.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wester.json b/data/films/queries/wester.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/wester.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/western.json b/data/films/queries/western.json new file mode 100644 index 0000000000..ae07bea96a --- /dev/null +++ b/data/films/queries/western.json @@ -0,0 +1,14 @@ +[ + { + "year": "1929/1930", + "value": "All Quiet on the Western Front", + "tokens": [ + "All", + "Quiet", + "on", + "the", + "Western", + "Front" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wi.json b/data/films/queries/wi.json new file mode 100644 index 0000000000..be9479e7aa --- /dev/null +++ b/data/films/queries/wi.json @@ -0,0 +1,31 @@ +[ + { + "year": "1927/1928", + "value": "Wings", + "tokens": [ + "Wings" + ] + }, + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/win.json b/data/films/queries/win.json new file mode 100644 index 0000000000..b629eac2e4 --- /dev/null +++ b/data/films/queries/win.json @@ -0,0 +1,19 @@ +[ + { + "year": "1927/1928", + "value": "Wings", + "tokens": [ + "Wings" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wind.json b/data/films/queries/wind.json new file mode 100644 index 0000000000..d896f41aa9 --- /dev/null +++ b/data/films/queries/wind.json @@ -0,0 +1,12 @@ +[ + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wing.json b/data/films/queries/wing.json new file mode 100644 index 0000000000..ce1c2e595f --- /dev/null +++ b/data/films/queries/wing.json @@ -0,0 +1,9 @@ +[ + { + "year": "1927/1928", + "value": "Wings", + "tokens": [ + "Wings" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wings.json b/data/films/queries/wings.json new file mode 100644 index 0000000000..ce1c2e595f --- /dev/null +++ b/data/films/queries/wings.json @@ -0,0 +1,9 @@ +[ + { + "year": "1927/1928", + "value": "Wings", + "tokens": [ + "Wings" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wit.json b/data/films/queries/wit.json new file mode 100644 index 0000000000..b35031bfa7 --- /dev/null +++ b/data/films/queries/wit.json @@ -0,0 +1,24 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/with.json b/data/films/queries/with.json new file mode 100644 index 0000000000..b35031bfa7 --- /dev/null +++ b/data/films/queries/with.json @@ -0,0 +1,24 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1939", + "value": "Gone with the Wind", + "tokens": [ + "Gone", + "with", + "the", + "Wind" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wo.json b/data/films/queries/wo.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/wo.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/wor.json b/data/films/queries/wor.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/wor.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/worl.json b/data/films/queries/worl.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/worl.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/world.json b/data/films/queries/world.json new file mode 100644 index 0000000000..b02ce37ec2 --- /dev/null +++ b/data/films/queries/world.json @@ -0,0 +1,14 @@ +[ + { + "year": "1956", + "value": "Around the World in 80 Days", + "tokens": [ + "Around", + "the", + "World", + "in", + "80", + "Days" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/y.json b/data/films/queries/y.json new file mode 100644 index 0000000000..1d3abb5060 --- /dev/null +++ b/data/films/queries/y.json @@ -0,0 +1,26 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + }, + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ye.json b/data/films/queries/ye.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/ye.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/yea.json b/data/films/queries/yea.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/yea.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/year.json b/data/films/queries/year.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/year.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/years.json b/data/films/queries/years.json new file mode 100644 index 0000000000..06e1119e52 --- /dev/null +++ b/data/films/queries/years.json @@ -0,0 +1,14 @@ +[ + { + "year": "1946", + "value": "The Best Years of Our Lives", + "tokens": [ + "The", + "Best", + "Years", + "of", + "Our", + "Lives" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/yo.json b/data/films/queries/yo.json new file mode 100644 index 0000000000..febdb06f65 --- /dev/null +++ b/data/films/queries/yo.json @@ -0,0 +1,14 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/you.json b/data/films/queries/you.json new file mode 100644 index 0000000000..febdb06f65 --- /dev/null +++ b/data/films/queries/you.json @@ -0,0 +1,14 @@ +[ + { + "year": "1938", + "value": "You Can't Take It with You", + "tokens": [ + "You", + "Can't", + "Take", + "It", + "with", + "You" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/z.json b/data/films/queries/z.json new file mode 100644 index 0000000000..27ce084df8 --- /dev/null +++ b/data/films/queries/z.json @@ -0,0 +1,22 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + }, + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/zi.json b/data/films/queries/zi.json new file mode 100644 index 0000000000..479f24e134 --- /dev/null +++ b/data/films/queries/zi.json @@ -0,0 +1,11 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/zie.json b/data/films/queries/zie.json new file mode 100644 index 0000000000..479f24e134 --- /dev/null +++ b/data/films/queries/zie.json @@ -0,0 +1,11 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/zieg.json b/data/films/queries/zieg.json new file mode 100644 index 0000000000..479f24e134 --- /dev/null +++ b/data/films/queries/zieg.json @@ -0,0 +1,11 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ziegf.json b/data/films/queries/ziegf.json new file mode 100644 index 0000000000..479f24e134 --- /dev/null +++ b/data/films/queries/ziegf.json @@ -0,0 +1,11 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ziegfe.json b/data/films/queries/ziegfe.json new file mode 100644 index 0000000000..479f24e134 --- /dev/null +++ b/data/films/queries/ziegfe.json @@ -0,0 +1,11 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ziegfel.json b/data/films/queries/ziegfel.json new file mode 100644 index 0000000000..479f24e134 --- /dev/null +++ b/data/films/queries/ziegfel.json @@ -0,0 +1,11 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/ziegfeld.json b/data/films/queries/ziegfeld.json new file mode 100644 index 0000000000..479f24e134 --- /dev/null +++ b/data/films/queries/ziegfeld.json @@ -0,0 +1,11 @@ +[ + { + "year": "1936", + "value": "The Great Ziegfeld", + "tokens": [ + "The", + "Great", + "Ziegfeld" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/zo.json b/data/films/queries/zo.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/zo.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/zol.json b/data/films/queries/zol.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/zol.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/data/films/queries/zola.json b/data/films/queries/zola.json new file mode 100644 index 0000000000..667be801a0 --- /dev/null +++ b/data/films/queries/zola.json @@ -0,0 +1,13 @@ +[ + { + "year": "1937", + "value": "The Life of Emile Zola", + "tokens": [ + "The", + "Life", + "of", + "Emile", + "Zola" + ] + } +] \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index f291172ffd..886fc5e8df 100644 --- a/examples/index.html +++ b/examples/index.html @@ -65,6 +65,19 @@

NBA and NHL Teams

+ +
+

Best Picture Winners

+

Prefetches some data then relies on remote requests for suggestions when prefetched data is insufficient

+ +
+ +
+ +
+ +
+
diff --git a/js/examples.js b/js/examples.js index 041c18ad04..56b60a43d5 100644 --- a/js/examples.js +++ b/js/examples.js @@ -42,4 +42,14 @@ $(document).ready(function() { prefetch: '../data/nhl.json' } ]); + + $('.example-films .typeahead').typeahead([ + { + name: 'best-picture-winners', + remote: '../data/films/queries/%QUERY.json', + prefetch: '../data/films/post_1960.json', + template: '

{{value}} – {{year}}

', + engine: Hogan + } + ]); }); From 9cda95c375fcfbac8c637ef0aa30e9193c7465f3 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sun, 24 Feb 2013 22:32:29 -0800 Subject: [PATCH 14/44] Add assets for 0.8.1. --- index.html | 2 +- releases/0.8.1/typeahead.css | 72 +++ releases/0.8.1/typeahead.js | 966 ++++++++++++++++++++++++++++++ releases/0.8.1/typeahead.js.zip | Bin 0 -> 16419 bytes releases/0.8.1/typeahead.min.css | 7 + releases/0.8.1/typeahead.min.js | 7 + releases/latest/typeahead.css | 2 +- releases/latest/typeahead.js | 362 ++++++----- releases/latest/typeahead.js.zip | Bin 15625 -> 16419 bytes releases/latest/typeahead.min.css | 2 +- releases/latest/typeahead.min.js | 4 +- 11 files changed, 1229 insertions(+), 195 deletions(-) create mode 100644 releases/0.8.1/typeahead.css create mode 100644 releases/0.8.1/typeahead.js create mode 100644 releases/0.8.1/typeahead.js.zip create mode 100644 releases/0.8.1/typeahead.min.css create mode 100644 releases/0.8.1/typeahead.min.js diff --git a/index.html b/index.html index 2fe7882367..3d6b7bb962 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@

typeahea
- download v0.8.0 + download v0.8.1 project & docs on GitHub · changelog diff --git a/releases/0.8.1/typeahead.css b/releases/0.8.1/typeahead.css new file mode 100644 index 0000000000..1fa961b00f --- /dev/null +++ b/releases/0.8.1/typeahead.css @@ -0,0 +1,72 @@ +/*! + * typeahead.js 0.8.1 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +.twitter-typeahead { + position: relative !important; + display: inline-block; + *display: inline; + *zoom: 1; +} +.tt-query { + position: relative !important; + /* for unknown reasons, this fixes alignment issues in ie7 */ + + *margin-top: -1px !important; + vertical-align: top !important; + background-color: transparent !important; + /* ie6-8 doesn't fire hover and click events for transparent elements + for a workaround, use a 1x1 transparent gif */ + + background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) !important; +} +.tt-hint { + position: absolute !important; + top: 0 !important; + left: 0 !important; + border-color: transparent !important; + -webkit-box-shadow: none !important; + -moz-box-shadow: none !important; + box-shadow: none !important; +} +.tt-dropdown-menu, +.tt-suggestions, +.tt-suggestion { + padding: 0; + margin: 0; + list-style: none; +} +.tt-dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 100; + /* TODO: need default z-index, should be configurable */ + + display: none; +} +.tt-dropdown-menu.tt-is-open { + display: block; +} +.tt-dropdown-menu.tt-is-empty { + display: none; +} +.tt-suggestion { + display: block; + white-space: nowrap; + cursor: pointer; +} +.tt-suggestion * { + white-space: normal; +} +/* rtl support */ +/* ----------- */ +.twitter-typeahead.tt-rtl { + direction: rtl; +} +.twitter-typeahead.tt-rtl .tt-dropdown-menu { + left: auto; + right: 0; +} diff --git a/releases/0.8.1/typeahead.js b/releases/0.8.1/typeahead.js new file mode 100644 index 0000000000..93d1d8431c --- /dev/null +++ b/releases/0.8.1/typeahead.js @@ -0,0 +1,966 @@ +/*! + * typeahead.js 0.8.1 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function() { + var VERSION = "0.8.1"; + var utils = { + isMsie: function() { + return /msie [\w.]+/i.test(navigator.userAgent); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: function(obj) { + return obj === Object(obj); + }, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + bind: $.proxy, + bindAll: function(obj) { + var val; + for (var key in obj) { + utils.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); + } + }, + indexOf: function(haystack, needle) { + for (var i = 0; i < haystack.length; i++) { + if (haystack[i] === needle) { + return i; + } + } + return -1; + }, + each: $.each, + map: $.map, + filter: function(obj, test) { + var results = []; + $.each(obj, function(key, val) { + if (test(val, key, obj)) { + results.push(val); + } + }); + return results; + }, + 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; + }, + mixin: $.extend, + getUniqueId: function() { + var counter = 0; + return function() { + return counter++; + }; + }(), + 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; + }; + }, + uniqueArray: function(array) { + var u = {}, a = []; + for (var i = 0, l = array.length; i < l; ++i) { + if (u.hasOwnProperty(array[i])) { + continue; + } + a.push(array[i]); + u[array[i]] = 1; + } + return a; + }, + tokenizeQuery: function(str) { + return $.trim(str).toLowerCase().split(/[\s]+/); + }, + tokenizeText: function(str) { + return $.trim(str).toLowerCase().split(/[\s\-_]+/); + }, + getProtocol: function() { + return location.protocol; + }, + noop: function() {} + }; + var EventTarget = function() { + var eventSplitter = /\s+/; + return { + on: function(events, callback) { + var event; + if (!callback) { + return this; + } + this._callbacks = this._callbacks || {}; + events = events.split(eventSplitter); + while (event = events.shift()) { + this._callbacks[event] = this._callbacks[event] || []; + this._callbacks[event].push(callback); + } + return this; + }, + trigger: function(events, data) { + var event, callbacks; + if (!this._callbacks) { + return this; + } + events = events.split(eventSplitter); + while (event = events.shift()) { + if (callbacks = this._callbacks[event]) { + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i].call(this, { + type: event, + data: data + }); + } + } + } + return this; + } + }; + }(); + var PersistentStorage = function() { + var ls = window.localStorage, methods; + function PersistentStorage(namespace) { + this.prefix = [ "__", namespace, "__" ].join(""); + this.ttlKey = "__ttl__"; + this.keyMatcher = new RegExp("^" + this.prefix); + } + if (window.localStorage && window.JSON) { + methods = { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, + get: function(key) { + if (this.isExpired(key)) { + this.remove(key); + } + return decode(ls.getItem(this._prefix(key))); + }, + set: function(key, val, ttl) { + if (utils.isNumber(ttl)) { + ls.setItem(this._ttlKey(key), encode(now() + ttl)); + } else { + ls.removeItem(this._ttlKey(key)); + } + return ls.setItem(this._prefix(key), encode(val)); + }, + remove: function(key) { + ls.removeItem(this._ttlKey(key)); + ls.removeItem(this._prefix(key)); + return this; + }, + clear: function() { + var i, key, keys = [], len = ls.length; + for (i = 0; i < len; i++) { + if ((key = ls.key(i)).match(this.keyMatcher)) { + keys.push(key.replace(this.keyMatcher, "")); + } + } + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } + return this; + }, + isExpired: function(key) { + var ttl = decode(ls.getItem(this._ttlKey(key))); + return utils.isNumber(ttl) && now() > ttl ? true : false; + } + }; + } else { + methods = { + get: utils.noop, + set: utils.noop, + remove: utils.noop, + clear: utils.noop, + isExpired: utils.noop + }; + } + utils.mixin(PersistentStorage.prototype, methods); + return PersistentStorage; + function now() { + return new Date().getTime(); + } + function encode(val) { + return JSON.stringify(utils.isUndefined(val) ? null : val); + } + function decode(val) { + return JSON.parse(val); + } + }(); + var RequestCache = function() { + function RequestCache(o) { + utils.bindAll(this); + o = o || {}; + this.sizeLimit = o.sizeLimit || 10; + this.cache = {}; + this.cachedKeysByAge = []; + } + utils.mixin(RequestCache.prototype, { + get: function(url) { + return this.cache[url]; + }, + set: function(url, resp) { + var requestToEvict; + if (this.cachedKeysByAge.length === this.sizeLimit) { + requestToEvict = this.cachedKeysByAge.shift(); + delete this.cache[requestToEvict]; + } + this.cache[url] = resp; + this.cachedKeysByAge.push(url); + } + }); + return RequestCache; + }(); + var Transport = function() { + function Transport(o) { + var rateLimitFn; + utils.bindAll(this); + o = o || {}; + rateLimitFn = /^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce; + this.wait = o.wait || 300; + this.wildcard = o.wildcard || "%QUERY"; + this.maxConcurrentRequests = o.maxConcurrentRequests || 6; + this.concurrentRequests = 0; + this.onDeckRequestArgs = null; + this.cache = new RequestCache(); + this.get = rateLimitFn(this.get, this.wait); + } + utils.mixin(Transport.prototype, { + _incrementConcurrentRequests: function() { + this.concurrentRequests++; + }, + _decrementConcurrentRequests: function() { + this.concurrentRequests--; + }, + _belowConcurrentRequestsThreshold: function() { + return this.concurrentRequests < this.maxConcurrentRequests; + }, + get: function(url, query, cb) { + var that = this, resp; + url = url.replace(this.wildcard, encodeURIComponent(query || "")); + if (resp = this.cache.get(url)) { + cb && cb(resp); + } else if (this._belowConcurrentRequestsThreshold()) { + $.ajax({ + url: url, + type: "GET", + dataType: "json", + beforeSend: function() { + that._incrementConcurrentRequests(); + }, + success: function(resp) { + cb && cb(resp); + that.cache.set(url, resp); + }, + complete: function() { + that._decrementConcurrentRequests(); + if (that.onDeckRequestArgs) { + that.get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } + }); + } else { + this.onDeckRequestArgs = [].slice.call(arguments, 0); + } + } + }); + return Transport; + }(); + var Dataset = function() { + function Dataset(o) { + utils.bindAll(this); + this.storage = new PersistentStorage(o.name); + this.adjacencyList = {}; + this.itemHash = {}; + this.name = o.name; + this.resetDataOnProtocolSwitch = o.resetDataOnProtocolSwitch || false; + this.queryUrl = o.remote; + this.transport = o.transport; + this.limit = o.limit || 10; + this._customMatcher = o.matcher || null; + this._customRanker = o.ranker || null; + this._ttl_ms = o.ttl_ms || 3 * 24 * 60 * 60 * 1e3; + this.keys = { + version: "version", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; + o.local && this._processLocalData(o.local); + o.prefetch && this._loadPrefetchData(o.prefetch); + } + utils.mixin(Dataset.prototype, { + _processLocalData: function(data) { + data && this._mergeProcessedData(this._processData(data)); + }, + _loadPrefetchData: function(url) { + var that = this, itemHash = this.storage.get(this.keys.itemHash), adjacencyList = this.storage.get(this.keys.adjacencyList), protocol = this.storage.get(this.keys.protocol), version = this.storage.get(this.keys.version), isExpired = version !== VERSION || protocol !== utils.getProtocol(); + if (itemHash && adjacencyList && !isExpired) { + this._mergeProcessedData({ + itemHash: itemHash, + adjacencyList: adjacencyList + }); + } else { + $.getJSON(url).done(processPrefetchData); + } + function processPrefetchData(data) { + var processedData = that._processData(data), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + that.storage.set(that.keys.itemHash, itemHash, that._ttl_ms); + that.storage.set(that.keys.adjacencyList, adjacencyList, that._ttl_ms); + that.storage.set(that.keys.version, VERSION, that._ttl_ms); + that.storage.set(that.keys.protocol, utils.getProtocol(), that._ttl_ms); + that._mergeProcessedData(processedData); + } + }, + _processData: function(data) { + var itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, item) { + var id; + if (utils.isString(item)) { + item = { + value: item, + tokens: utils.tokenizeText(item) + }; + } + item.tokens = utils.map(item.tokens || [], function(token) { + return token.toLowerCase(); + }); + itemHash[id = utils.getUniqueId(item.value)] = item; + utils.each(item.tokens, function(i, token) { + var char = token.charAt(0), adjacency = adjacencyList[char] || (adjacencyList[char] = [ id ]); + !~utils.indexOf(adjacency, id) && adjacency.push(id); + }); + }); + return { + itemHash: itemHash, + adjacencyList: adjacencyList + }; + }, + _mergeProcessedData: function(processedData) { + var that = this; + utils.mixin(this.itemHash, processedData.itemHash); + utils.each(processedData.adjacencyList, function(char, adjacency) { + var masterAdjacency = that.adjacencyList[char]; + that.adjacencyList[char] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + }); + }, + _getPotentiallyMatchingIds: function(terms) { + var potentiallyMatchingIds = []; + var lists = []; + utils.map(terms, utils.bind(function(term) { + var list = this.adjacencyList[term.charAt(0)]; + if (!list) { + return; + } + lists.push(list); + }, this)); + if (lists.length === 1) { + return lists[0]; + } + var listLengths = []; + $.each(lists, function(i, list) { + listLengths.push(list.length); + }); + var shortestListIndex = utils.indexOf(listLengths, Math.min.apply(null, listLengths)) || 0; + var shortestList = lists[shortestListIndex] || []; + potentiallyMatchingIds = utils.map(shortestList, function(item) { + var idInEveryList = utils.every(lists, function(list) { + return utils.indexOf(list, item) > -1; + }); + if (idInEveryList) { + return item; + } + }); + return potentiallyMatchingIds; + }, + _getItemsFromIds: function(ids) { + var items = []; + utils.map(ids, utils.bind(function(id) { + var item = this.itemHash[id]; + if (item) { + items.push(item); + } + }, this)); + return items; + }, + _matcher: function(terms) { + if (this._customMatcher) { + var customMatcher = this._customMatcher; + return function(item) { + return customMatcher(item); + }; + } else { + return function(item) { + var tokens = item.tokens; + var allTermsMatched = utils.every(terms, function(term) { + var tokensMatched = utils.filter(tokens, function(token) { + return token.indexOf(term) === 0; + }); + return tokensMatched.length; + }); + if (allTermsMatched) { + return item; + } + }; + } + }, + _compareItems: function(a, b, areLocalItems) { + var aScoreBoost = !a.score_boost ? 0 : a.score_boost, bScoreBoost = !b.score_boost ? 0 : b.score_boost, aScore = !a.score ? 0 : a.score, bScore = !b.score ? 0 : b.score; + if (areLocalItems) { + return b.weight + bScoreBoost - (a.weight + aScoreBoost); + } else { + return bScore + bScoreBoost - (aScore + aScoreBoost); + } + }, + _ranker: function(a, b) { + if (this._customRanker) { + return this._customRanker(a, b); + } else { + var aIsLocal = a.weight && a.weight !== 0; + var bIsLocal = b.weight && b.weight !== 0; + if (aIsLocal && !bIsLocal) { + return -1; + } else if (bIsLocal && !aIsLocal) { + return 1; + } else { + return aIsLocal && bIsLocal ? this._compareItems(a, b, true) : this._compareItems(a, b, false); + } + } + }, + _processRemoteSuggestions: function(callback, matchedItems) { + var that = this; + return function(data) { + utils.each(data, function(i, remoteItem) { + var isDuplicate = false; + remoteItem = utils.isString(remoteItem) ? { + value: remoteItem + } : remoteItem; + utils.each(matchedItems, function(i, localItem) { + if (remoteItem.value === localItem.value) { + isDuplicate = true; + return false; + } + }); + !isDuplicate && matchedItems.push(remoteItem); + return matchedItems.length < that.limit; + }); + callback && callback(matchedItems); + }; + }, + getSuggestions: function(query, callback) { + var terms = utils.tokenizeQuery(query); + var potentiallyMatchingIds = this._getPotentiallyMatchingIds(terms); + var potentiallyMatchingItems = this._getItemsFromIds(potentiallyMatchingIds); + var matchedItems = utils.filter(potentiallyMatchingItems, this._matcher(terms)); + matchedItems.sort(this._ranker); + callback && callback(matchedItems); + if (matchedItems.length < this.limit && this.queryUrl) { + this.transport.get(this.queryUrl, query, this._processRemoteSuggestions(callback, matchedItems)); + } + } + }); + return Dataset; + }(); + var InputView = function() { + function InputView(o) { + var that = this; + utils.bindAll(this); + this.specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + this.query = ""; + this.$hint = $(o.hint); + this.$input = $(o.input).on("blur", this._handleBlur).on("focus", this._handleFocus).on("keydown", this._handleSpecialKeyEvent); + if (!utils.isMsie()) { + this.$input.on("input", this._compareQueryToInputValue); + } else { + this.$input.on("keydown keypress cut paste", function(e) { + if (that.specialKeyCodeMap[e.which || e.keyCode]) { + return; + } + setTimeout(that._compareQueryToInputValue, 0); + }); + } + this.$overflowHelper = buildOverflowHelper(this.$input); + } + utils.mixin(InputView.prototype, EventTarget, { + _handleFocus: function() { + this.trigger("focus"); + }, + _handleBlur: function() { + this.trigger("blur"); + }, + _handleSpecialKeyEvent: function($e) { + var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; + keyName && this.trigger(keyName, $e); + }, + _compareQueryToInputValue: function() { + var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; + if (isSameQueryExceptWhitespace) { + this.trigger("whitespaceChange", { + value: this.query + }); + } else if (!isSameQuery) { + this.trigger("queryChange", { + value: this.query = inputValue + }); + } + }, + focus: function() { + this.$input.focus(); + }, + blur: function() { + this.$input.blur(); + }, + getQuery: function() { + return this.query; + }, + getInputValue: function() { + return this.$input.val(); + }, + setInputValue: function(value, silent) { + this.$input.val(value); + if (silent !== true) { + this._compareQueryToInputValue(); + } + }, + getHintValue: function() { + return this.$hint.val(); + }, + setHintValue: function(value) { + this.$hint.val(value); + }, + getLanguageDirection: function() { + return (this.$input.css("direction") || "ltr").toLowerCase(); + }, + isOverflow: function() { + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() > this.$input.width(); + }, + isCursorAtEnd: function() { + var valueLength = this.$input.val().length, selectionStart = this.$input[0].selectionStart, range; + if (utils.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + } + }); + return InputView; + function buildOverflowHelper($input) { + return $("").css({ + position: "absolute", + left: "-9999px", + visibility: "hidden", + whiteSpace: "nowrap", + 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 compareQueries(a, b) { + a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); + b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); + return a === b; + } + }(); + var DropdownView = function() { + function DropdownView(o) { + utils.bindAll(this); + this.isMouseOverDropdown; + this.$menu = $(o.menu).on("mouseenter", this._handleMouseenter).on("mouseleave", this._handleMouseleave).on("mouseover", ".tt-suggestions > .tt-suggestion", this._handleMouseover).on("click", ".tt-suggestions > .tt-suggestion", this._handleSelection); + } + utils.mixin(DropdownView.prototype, EventTarget, { + _handleMouseenter: function() { + this.isMouseOverDropdown = true; + }, + _handleMouseleave: function() { + this.isMouseOverDropdown = false; + }, + _handleMouseover: function($e) { + this._getSuggestions().removeClass("tt-is-under-cursor"); + $($e.currentTarget).addClass("tt-is-under-cursor"); + }, + _handleSelection: function($e) { + this.trigger("select", formatDataForSuggestion($($e.currentTarget))); + }, + _moveCursor: function(increment) { + var $suggestions, $cur, nextIndex, $underCursor; + if (!this.$menu.hasClass("tt-is-open")) { + return; + } + $suggestions = this._getSuggestions(); + $cur = $suggestions.filter(".tt-is-under-cursor"); + $cur.removeClass("tt-is-under-cursor"); + nextIndex = $suggestions.index($cur) + increment; + nextIndex = (nextIndex + 1) % ($suggestions.length + 1) - 1; + if (nextIndex === -1) { + this.trigger("cursorOff"); + return; + } else if (nextIndex < -1) { + nextIndex = $suggestions.length - 1; + } + $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); + this.trigger("cursorOn", { + value: $underCursor.data("value") + }); + }, + _getSuggestions: function() { + return this.$menu.find(".tt-suggestions > .tt-suggestion"); + }, + hideUnlessMouseIsOverDropdown: function() { + if (!this.isMouseOverDropdown) { + this.hide(); + } + }, + hide: function() { + if (this.$menu.hasClass("tt-is-open")) { + this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); + this.trigger("hide"); + } + }, + show: function() { + if (!this.$menu.hasClass("tt-is-open")) { + this.$menu.addClass("tt-is-open"); + this.trigger("show"); + } + }, + isOpen: function() { + return this.$menu.hasClass("tt-is-open"); + }, + moveCursorUp: function() { + this._moveCursor(-1); + }, + moveCursorDown: function() { + this._moveCursor(+1); + }, + getSuggestionUnderCursor: function() { + var $suggestion = this._getSuggestions().filter(".tt-is-under-cursor").first(); + return $suggestion.length > 0 ? formatDataForSuggestion($suggestion) : null; + }, + getFirstSuggestion: function() { + var $suggestion = this._getSuggestions().first(); + return $suggestion.length > 0 ? formatDataForSuggestion($suggestion) : null; + }, + renderSuggestions: function(query, dataset, suggestions) { + var datasetClassName = "tt-dataset-" + dataset.name, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, el; + if ($dataset.length === 0) { + $dataset = $('
    1. ').addClass(datasetClassName).appendTo(this.$menu); + } + elBuilder = document.createElement("div"); + fragment = document.createDocumentFragment(); + this.clearSuggestions(dataset.name); + if (suggestions.length > 0) { + this.$menu.removeClass("tt-is-empty"); + utils.each(suggestions, function(i, suggestion) { + elBuilder.innerHTML = dataset.template.render(suggestion); + el = elBuilder.firstChild; + el.setAttribute("data-value", suggestion.value); + fragment.appendChild(el); + }); + } + $dataset.find("> .tt-suggestions").data({ + query: query, + dataset: dataset.name + }).append(fragment); + this.trigger("suggestionsRender"); + }, + clearSuggestions: function(datasetName) { + var $suggestions = datasetName ? this.$menu.find(".tt-dataset-" + datasetName + " .tt-suggestions") : this.$menu.find(".tt-suggestions"); + $suggestions.empty(); + this._getSuggestions().length === 0 && this.$menu.addClass("tt-is-empty"); + } + }); + return DropdownView; + function formatDataForSuggestion($suggestion) { + var $suggestions = $suggestion.parents(".tt-suggestions").first(); + return { + value: $suggestion.data("value"), + query: $suggestions.data("query"), + dataset: $suggestions.data("dataset") + }; + } + }(); + var TypeaheadView = function() { + var html = { + wrapper: '', + hint: '', + dropdown: '
        ' + }; + function TypeaheadView(o) { + utils.bindAll(this); + this.$node = wrapInput(o.input); + this.datasets = o.datasets; + utils.each(this.datasets, function(key, dataset) { + var parentTemplate = '
      1. %body
      2. '; + if (dataset.template) { + dataset.template = dataset.engine.compile(parentTemplate.replace("%body", dataset.template)); + } else { + dataset.template = { + render: function(context) { + return parentTemplate.replace("%body", "

        " + context.value + "

        "); + } + }; + } + }); + this.inputView = new InputView({ + input: this.$node.find(".tt-query"), + hint: this.$node.find(".tt-hint") + }); + this.dropdownView = new DropdownView({ + menu: this.$node.find(".tt-dropdown-menu") + }); + this.dropdownView.on("select", this._handleSelection).on("cursorOn", this._clearHint).on("cursorOn", this._setInputValueToSuggestionUnderCursor).on("cursorOff", this._setInputValueToQuery).on("cursorOff", this._updateHint).on("suggestionsRender", this._updateHint).on("show", this._updateHint).on("hide", this._clearHint); + this.inputView.on("focus", this._showDropdown).on("blur", this._hideDropdown).on("blur", this._setInputValueToQuery).on("enter", this._handleSelection).on("queryChange", this._clearHint).on("queryChange", this._clearSuggestions).on("queryChange", this._getSuggestions).on("whitespaceChange", this._updateHint).on("queryChange whitespaceChange", this._showDropdown).on("queryChange whitespaceChange", this._setLanguageDirection).on("esc", this._hideDropdown).on("esc", this._setInputValueToQuery).on("tab up down", this._managePreventDefault).on("up down", this._moveDropdownCursor).on("up down", this._showDropdown).on("tab left right", this._autocomplete); + } + utils.mixin(TypeaheadView.prototype, EventTarget, { + _managePreventDefault: function(e) { + var $e = e.data, hint, inputValue, preventDefault = false; + switch (e.type) { + case "tab": + hint = this.inputView.getHintValue(); + inputValue = this.inputView.getInputValue(); + preventDefault = hint && hint !== inputValue; + break; + + case "up": + case "down": + preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; + break; + } + preventDefault && $e.preventDefault(); + }, + _setLanguageDirection: function() { + var dirClassName = "tt-" + this.inputView.getLanguageDirection(); + if (!this.$node.hasClass(dirClassName)) { + this.$node.removeClass("tt-ltr tt-rtl").addClass(dirClassName); + } + }, + _updateHint: function() { + var dataForFirstSuggestion = this.dropdownView.getFirstSuggestion(), hint = dataForFirstSuggestion ? dataForFirstSuggestion.value : null, inputValue, query, beginsWithQuery, match; + if (hint && this.dropdownView.isOpen() && !this.inputView.isOverflow()) { + inputValue = this.inputView.getInputValue(); + query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); + beginsWithQuery = new RegExp("^(?:" + query + ")(.*$)", "i"); + match = beginsWithQuery.exec(hint); + this.inputView.setHintValue(inputValue + (match ? match[1] : "")); + } + }, + _clearHint: function() { + this.inputView.setHintValue(""); + }, + _clearSuggestions: function() { + this.dropdownView.clearSuggestions(); + }, + _setInputValueToQuery: function() { + this.inputView.setInputValue(this.inputView.getQuery()); + }, + _setInputValueToSuggestionUnderCursor: function(e) { + var suggestion = e.data; + this.inputView.setInputValue(suggestion.value, true); + }, + _showDropdown: function() { + this.dropdownView.show(); + }, + _hideDropdown: function(e) { + this.dropdownView[e.type === "blur" ? "hideUnlessMouseIsOverDropdown" : "hide"](); + }, + _moveDropdownCursor: function(e) { + var $e = e.data; + if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { + this.dropdownView[e.type === "up" ? "moveCursorUp" : "moveCursorDown"](); + } + }, + _handleSelection: function(e) { + var byClick = e.type === "select", suggestionData = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); + if (suggestionData) { + this.inputView.setInputValue(suggestionData.value); + byClick ? this.inputView.focus() : e.data.preventDefault(); + byClick && utils.isMsie() ? setTimeout(this.dropdownView.hide, 0) : this.dropdownView.hide(); + } + }, + _getSuggestions: function() { + var that = this, query = this.inputView.getQuery(); + utils.each(this.datasets, function(i, dataset) { + dataset.getSuggestions(query, function(suggestions) { + that._renderSuggestions(query, dataset, suggestions); + }); + }); + }, + _renderSuggestions: function(query, dataset, suggestions) { + if (query !== this.inputView.getQuery()) { + return; + } + suggestions = suggestions.slice(0, dataset.limit); + this.dropdownView.renderSuggestions(query, dataset, suggestions); + }, + _autocomplete: function(e) { + var isCursorAtEnd, ignoreEvent, query, hint; + if (e.type === "right" || e.type === "left") { + isCursorAtEnd = this.inputView.isCursorAtEnd(); + ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "left" : e.type === "right"; + if (!isCursorAtEnd || ignoreEvent) { + return; + } + } + query = this.inputView.getQuery(); + hint = this.inputView.getHintValue(); + if (hint !== "" && query !== hint) { + this.inputView.setInputValue(hint); + } + } + }); + return TypeaheadView; + function wrapInput(input) { + var $input = $(input), $hint = $(html.hint).css({ + "background-color": $input.css("background-color") + }); + if ($input.length === 0) { + return null; + } + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input.attr({ + autocomplete: "off", + spellcheck: false + }).addClass("tt-query").wrap(html.wrapper).parent().prepend($hint).append(html.dropdown); + } + }(); + (function() { + var initializedDatasets = {}, transportOptions = {}, transport, methods; + jQuery.fn.typeahead = typeahead; + typeahead.configureTransport = configureTransport; + methods = { + initialize: function(datasetDefs) { + var datasets = {}; + datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; + if (datasetDefs.length === 0) { + throw new Error("no datasets provided"); + } + delete typeahead.configureTransport; + transport = transport || new Transport(transportOptions); + utils.each(datasetDefs, function(i, datasetDef) { + var dataset, name = datasetDef.name = datasetDef.name || utils.getUniqueId(); + if (initializedDatasets[name]) { + dataset = initializedDatasets[name]; + } else { + datasetDef.limit = datasetDef.limit || 5; + datasetDef.template = datasetDef.template; + datasetDef.engine = datasetDef.engine; + if (datasetDef.template && !datasetDef.engine) { + throw new Error("no template engine specified for " + name); + } + dataset = initializedDatasets[name] = new Dataset({ + name: datasetDef.name, + limit: datasetDef.limit, + local: datasetDef.local, + prefetch: datasetDef.prefetch, + ttl_ms: datasetDef.ttl_ms, + remote: datasetDef.remote, + matcher: datasetDef.matcher, + ranker: datasetDef.ranker, + transport: transport + }); + } + datasets[name] = { + name: datasetDef.name, + limit: datasetDef.limit, + template: datasetDef.template, + engine: datasetDef.engine, + getSuggestions: dataset.getSuggestions + }; + }); + return this.each(function() { + $(this).data({ + typeahead: new TypeaheadView({ + input: this, + datasets: datasets + }) + }); + }); + } + }; + function typeahead(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + } + function configureTransport(o) { + transportOptions = o; + } + })(); +})(); \ No newline at end of file diff --git a/releases/0.8.1/typeahead.js.zip b/releases/0.8.1/typeahead.js.zip new file mode 100644 index 0000000000000000000000000000000000000000..332b65e5a920f7c7a3f84727ddd76ea7bf6ab318 GIT binary patch literal 16419 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[n]===e)return n;return-1},each:$.each,map:$.map,filter:function(t,e){var n=[];return $.each(t,function(i,s){e(s,i,t)&&n.push(s)}),n},every:function(t,e){var n=!0;return t?($.each(t,function(i,s){return(n=e.call(null,s,i,t))?void 0:!1}),!!n):n},mixin:$.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,c=e-(a-o);return n=this,i=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,c)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeQuery:function(t){return $.trim(t).toLowerCase().split(/[\s]+/)},tokenizeText:function(t){return $.trim(t).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),i=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function n(){return(new Date).getTime()}function i(t){return JSON.stringify(e.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return e.isNumber(r)?o.setItem(this._ttlKey(t),i(n()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),i(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,n=[],i=o.length;for(t=0;i>t;t++)(e=o.key(t)).match(this.keyMatcher)&&n.push(e.replace(this.keyMatcher,""));for(t=n.length;t--;)this.remove(n[t]);return this},isExpired:function(t){var i=s(o.getItem(this._ttlKey(t)));return e.isNumber(i)&&n()>i?!0:!1}}:{get:e.noop,set:e.noop,remove:e.noop,clear:e.noop,isExpired:e.noop},e.mixin(t.prototype,r),t}(),s=function(){function t(t){e.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return e.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),r=function(){function t(t){var n;e.bindAll(this),t=t||{},n=/^throttle$/i.test(t.rateLimitFn)?e.throttle:e.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new s,this.get=n(this.get,this.wait)}return e.mixin(t.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return n?t:void 0})},_getItemsFromIds:function(t){var n=[];return e.map(t,e.bind(function(t){var e=this.itemHash[t];e&&n.push(e)},this)),n},_matcher:function(t){if(this._customMatcher){var n=this._customMatcher;return function(t){return n(t)}}return function(n){var i=n.tokens,s=e.every(t,function(t){var n=e.filter(i,function(e){return 0===e.indexOf(t)});return n.length});return s?n:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRemoteSuggestions:function(t,n){var i=this;return function(s){e.each(s,function(t,s){var r=!1;return s=e.isString(s)?{value:s}:s,e.each(n,function(t,e){return s.value===e.value?(r=!0,!1):void 0}),!r&&n.push(s),n.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:t.css("font-family"),fontSize:t.css("font-size"),fontStyle:t.css("font-style"),fontVariant:t.css("font-variant"),fontWeight:t.css("font-weight"),wordSpacing:t.css("word-spacing"),letterSpacing:t.css("letter-spacing"),textIndent:t.css("text-indent"),textRendering:t.css("text-rendering"),textTransform:t.css("text-transform")}).insertAfter(t)}function s(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),t===e}return e.mixin(t.prototype,n,{_handleFocus:function(){this.trigger("focus")},_handleBlur:function(){this.trigger("blur")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e,t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=s(this.query,t),n=e?this.query.length!==t.length:!1;n?this.trigger("whitespaceChange",{value:this.query}):e||this.trigger("queryChange",{value:this.query=t})},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,n=this.$input.val().length,i=this.$input[0].selectionStart;return e.isNumber(i)?i===n:document.selection?(t=document.selection.createRange(),t.moveStart("character",-n),n===t.text.length):!0}}),t}(),a=function(){function t(t){e.bindAll(this),this.isMouseOverDropdown,this.$menu=$(t.menu).on("mouseenter",this._handleMouseenter).on("mouseleave",this._handleMouseleave).on("mouseover",".tt-suggestions > .tt-suggestion",this._handleMouseover).on("click",".tt-suggestions > .tt-suggestion",this._handleSelection)}function i(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return e.mixin(t.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(t){this._getSuggestions().removeClass("tt-is-under-cursor"),$(t.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(t){this.trigger("select",i($(t.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?i(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?i(t):null},renderSuggestions:function(t,n,i){var s,r,o,u="tt-dataset-"+n.name,a=this.$menu.find("."+u);0===a.length&&(a=$('
        1. ').addClass(u).appendTo(this.$menu)),s=document.createElement("div"),r=document.createDocumentFragment(),this.clearSuggestions(n.name),i.length>0&&(this.$menu.removeClass("tt-is-empty"),e.each(i,function(t,e){s.innerHTML=n.template.render(e),o=s.firstChild,o.setAttribute("data-value",e.value),r.appendChild(o)})),a.find("> .tt-suggestions").data({query:t,dataset:n.name}).append(r),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),t}(),c=function(){function t(t){e.bindAll(this),this.$node=i(t.input),this.datasets=t.datasets,e.each(this.datasets,function(t,e){var n='
        2. %body
        3. ';e.template=e.template?e.engine.compile(n.replace("%body",e.template)):{render:function(t){return n.replace("%body","

          "+t.value+"

          ")}}}),this.inputView=new u({input:this.$node.find(".tt-query"),hint:this.$node.find(".tt-hint")}),this.dropdownView=new a({menu:this.$node.find(".tt-dropdown-menu")}),this.dropdownView.on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView.on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("tab up down",this._managePreventDefault).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab left right",this._autocomplete)}function i(t){var e=$(t),n=$(s.hint).css({"background-color":e.css("background-color")});if(0===e.length)return null;try{!e.attr("dir")&&e.attr("dir","auto")}catch(i){}return e.attr({autocomplete:"off",spellcheck:!1}).addClass("tt-query").wrap(s.wrapper).parent().prepend(n).append(s.dropdown)}var s={wrapper:'',hint:'',dropdown:'
            '};return e.mixin(t.prototype,n,{_managePreventDefault:function(t){var e,n,i=t.data,s=!1;switch(t.type){case"tab":e=this.inputView.getHintValue(),n=this.inputView.getInputValue(),s=e&&e!==n;break;case"up":case"down":s=!i.shiftKey&&!i.ctrlKey&&!i.metaKey}s&&i.preventDefault()},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,n,i,s=this.dropdownView.getFirstSuggestion(),r=s?s.value:null;r&&this.dropdownView.isOpen()&&!this.inputView.isOverflow()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=RegExp("^(?:"+e+")(.*$)","i"),i=n.exec(r),this.inputView.setHintValue(t+(i?i[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var n="select"===t.type,i=n?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),n?this.inputView.focus():t.data.preventDefault(),n&&e.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,n=this.inputView.getQuery();e.each(this.datasets,function(e,i){i.getSuggestions(n,function(e){t._renderSuggestions(n,i,e)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))}}),t}();(function(){function t(t){return s[t]?s[t].apply(this,[].slice.call(arguments,1)):s.initialize.apply(this,arguments)}function n(t){a=t}var i,s,u={},a={};jQuery.fn.typeahead=t,t.configureTransport=n,s={initialize:function(n){var s={};if(n=e.isArray(n)?n:[n],0===n.length)throw Error("no datasets provided");return delete t.configureTransport,i=i||new r(a),e.each(n,function(t,n){var r,a=n.name=n.name||e.getUniqueId();if(u[a])r=u[a];else{if(n.limit=n.limit||5,n.template=n.template,n.engine=n.engine,n.template&&!n.engine)throw Error("no template engine specified for "+a);r=u[a]=new o({name:n.name,limit:n.limit,local:n.local,prefetch:n.prefetch,ttl_ms:n.ttl_ms,remote:n.remote,matcher:n.matcher,ranker:n.ranker,transport:i})}s[a]={name:n.name,limit:n.limit,template:n.template,engine:n.engine,getSuggestions:r.getSuggestions}}),this.each(function(){$(this).data({typeahead:new c({input:this,datasets:s})})})}}})()})(); \ No newline at end of file diff --git a/releases/latest/typeahead.css b/releases/latest/typeahead.css index a65c080030..1fa961b00f 100644 --- a/releases/latest/typeahead.css +++ b/releases/latest/typeahead.css @@ -1,5 +1,5 @@ /*! - * Twitter Typeahead 0.8.0 + * typeahead.js 0.8.1 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ diff --git a/releases/latest/typeahead.js b/releases/latest/typeahead.js index 3660611cb9..93d1d8431c 100644 --- a/releases/latest/typeahead.js +++ b/releases/latest/typeahead.js @@ -1,11 +1,11 @@ /*! - * Twitter Typeahead 0.8.0 + * typeahead.js 0.8.1 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ (function() { - var VERSION = "0.8.0"; + var VERSION = "0.8.1"; var utils = { isMsie: function() { return /msie [\w.]+/i.test(navigator.userAgent); @@ -19,7 +19,7 @@ isArray: $.isArray, isFunction: $.isFunction, isObject: function(obj) { - return obj !== Object(obj); + return obj === Object(obj); }, isUndefined: function(obj) { return typeof obj === "undefined"; @@ -62,14 +62,6 @@ }); return !!result; }, - keys: function(obj) { - if (!utils.isObject(obj)) { - throw new TypeError("invalid object"); - } - return $.map(obj, function(val, key) { - return key; - }); - }, mixin: $.extend, getUniqueId: function() { var counter = 0; @@ -130,6 +122,9 @@ } return a; }, + tokenizeQuery: function(str) { + return $.trim(str).toLowerCase().split(/[\s]+/); + }, tokenizeText: function(str) { return $.trim(str).toLowerCase().split(/[\s\-_]+/); }, @@ -183,40 +178,45 @@ } if (window.localStorage && window.JSON) { methods = { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, get: function(key) { - var ttl = decode(ls.getItem(this.prefix + key)); - if (utils.isNumber(ttl) && now() > ttl) { - ls.removeItem(this.prefix + key + this.ttlKey); + if (this.isExpired(key)) { + this.remove(key); } - return decode(ls.getItem(this.prefix + key)); + return decode(ls.getItem(this._prefix(key))); }, set: function(key, val, ttl) { if (utils.isNumber(ttl)) { - ls.setItem(this.prefix + key + this.ttlKey, encode(now() + ttl)); + ls.setItem(this._ttlKey(key), encode(now() + ttl)); } else { - ls.removeItem(this.prefix + key + this.ttlKey); + ls.removeItem(this._ttlKey(key)); } - return ls.setItem(this.prefix + key, encode(val)); + return ls.setItem(this._prefix(key), encode(val)); }, remove: function(key) { - ls.removeItem(this.prefix + key + this.ttlKey); - ls.removeItem(this.prefix + key); + ls.removeItem(this._ttlKey(key)); + ls.removeItem(this._prefix(key)); return this; }, clear: function() { - var i, key, len = ls.length; - for (i = 0; i < len; i += 1) { - key = ls.key(i); - if (key.match(this.keyMatcher)) { - i -= 1; - len -= 1; - this.remove(key.replace(this.keyMatcher, "")); + var i, key, keys = [], len = ls.length; + for (i = 0; i < len; i++) { + if ((key = ls.key(i)).match(this.keyMatcher)) { + keys.push(key.replace(this.keyMatcher, "")); } } + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } return this; }, isExpired: function(key) { - var ttl = decode(ls.getItem(this.prefix + key + this.ttlKey)); + var ttl = decode(ls.getItem(this._ttlKey(key))); return utils.isNumber(ttl) && now() > ttl ? true : false; } }; @@ -235,10 +235,10 @@ return new Date().getTime(); } function encode(val) { - return JSON.stringify(val); + return JSON.stringify(utils.isUndefined(val) ? null : val); } function decode(val) { - return utils.isUndefined(val) ? undefined : JSON.parse(val); + return JSON.parse(val); } }(); var RequestCache = function() { @@ -329,40 +329,75 @@ this.itemHash = {}; this.name = o.name; this.resetDataOnProtocolSwitch = o.resetDataOnProtocolSwitch || false; - this.prefetchUrl = o.prefetch; this.queryUrl = o.remote; - this.rawData = o.local; this.transport = o.transport; this.limit = o.limit || 10; this._customMatcher = o.matcher || null; this._customRanker = o.ranker || null; this._ttl_ms = o.ttl_ms || 3 * 24 * 60 * 60 * 1e3; - this.storageAdjacencyList = "adjacencyList"; - this.storageHash = "itemHash"; - this.storageProtocol = "protocol"; - this.storageVersion = "version"; - this._loadData(); + this.keys = { + version: "version", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; + o.local && this._processLocalData(o.local); + o.prefetch && this._loadPrefetchData(o.prefetch); } utils.mixin(Dataset.prototype, { - _isMetadataExpired: function() { - var isExpired = this.storage.isExpired(this.storageProtocol); - var isCacheStale = this.storage.isExpired(this.storageAdjacencyList) || this.storage.isExpired(this.storageHash); - var resetForProtocolSwitch = this.resetDataOnProtocolSwitch && this.storage.get(this.storageProtocol) != utils.getProtocol(); - if (VERSION == this.storage.get(this.storageVersion) && !resetForProtocolSwitch && !isExpired && !isCacheStale) { - return false; - } - return true; - }, - _loadData: function() { - this.rawData && this._processRawData(this.rawData); - this._getDataFromLocalStorage(); - if (this._isMetadataExpired() || this.itemHash === {}) { - this.prefetchUrl && this._prefetch(this.prefetchUrl); - } + _processLocalData: function(data) { + data && this._mergeProcessedData(this._processData(data)); + }, + _loadPrefetchData: function(url) { + var that = this, itemHash = this.storage.get(this.keys.itemHash), adjacencyList = this.storage.get(this.keys.adjacencyList), protocol = this.storage.get(this.keys.protocol), version = this.storage.get(this.keys.version), isExpired = version !== VERSION || protocol !== utils.getProtocol(); + if (itemHash && adjacencyList && !isExpired) { + this._mergeProcessedData({ + itemHash: itemHash, + adjacencyList: adjacencyList + }); + } else { + $.getJSON(url).done(processPrefetchData); + } + function processPrefetchData(data) { + var processedData = that._processData(data), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + that.storage.set(that.keys.itemHash, itemHash, that._ttl_ms); + that.storage.set(that.keys.adjacencyList, adjacencyList, that._ttl_ms); + that.storage.set(that.keys.version, VERSION, that._ttl_ms); + that.storage.set(that.keys.protocol, utils.getProtocol(), that._ttl_ms); + that._mergeProcessedData(processedData); + } + }, + _processData: function(data) { + var itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, item) { + var id; + if (utils.isString(item)) { + item = { + value: item, + tokens: utils.tokenizeText(item) + }; + } + item.tokens = utils.map(item.tokens || [], function(token) { + return token.toLowerCase(); + }); + itemHash[id = utils.getUniqueId(item.value)] = item; + utils.each(item.tokens, function(i, token) { + var char = token.charAt(0), adjacency = adjacencyList[char] || (adjacencyList[char] = [ id ]); + !~utils.indexOf(adjacency, id) && adjacency.push(id); + }); + }); + return { + itemHash: itemHash, + adjacencyList: adjacencyList + }; }, - _getDataFromLocalStorage: function() { - this.itemHash = this.storage.get(this.storageHash) || this.itemHash; - this.adjacencyList = this.storage.get(this.storageAdjacencyList) || this.adjacencyList; + _mergeProcessedData: function(processedData) { + var that = this; + utils.mixin(this.itemHash, processedData.itemHash); + utils.each(processedData.adjacencyList, function(char, adjacency) { + var masterAdjacency = that.adjacencyList[char]; + that.adjacencyList[char] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + }); }, _getPotentiallyMatchingIds: function(terms) { var potentiallyMatchingIds = []; @@ -447,99 +482,28 @@ } } }, - _processRawData: function(data) { - this.itemHash = {}; - this.adjacencyList = {}; - utils.map(data, utils.bind(function(item) { - var tokens; - if (item.tokens) { - tokens = item.tokens; - } else { - item = { - tokens: utils.tokenizeText(item), - value: item - }; - tokens = item.tokens; - } - item.id = utils.getUniqueId(item.value); - utils.map(tokens, utils.bind(function(token) { - var firstChar = token.charAt(0); - if (!this.adjacencyList[firstChar]) { - this.adjacencyList[firstChar] = [ item.id ]; - } else { - if (utils.indexOf(this.adjacencyList[firstChar], item.id) === -1) { - this.adjacencyList[firstChar].push(item.id); - } - } - }, this)); - this.itemHash[item.id] = item; - }, this)); - this.storage.set(this.storageHash, this.itemHash, this._ttl_ms); - this.storage.set(this.storageAdjacencyList, this.adjacencyList, this._ttl_ms); - this.storage.set(this.storageVersion, VERSION, this._ttl_ms); - this.storage.set(this.storageProtocol, utils.getProtocol(), this._ttl_ms); - }, - _prefetch: function(url) { - var processPrefetchSuccess = function(data) { - if (!data) { - return; - } - utils.map(data, function(item) { - if (utils.isString(item)) { - return { - value: item, - tokens: utils.tokenizeText(item.toLowerCase()) - }; - } else { - utils.map(item.tokens, function(token, i) { - item.tokens[i] = token.toLowerCase(); - }); - return item; - } - }); - this._processRawData(data); - }; - var processPrefetchError = function() { - this._getDataFromLocalStorage(); - }; - $.ajax({ - url: url, - success: utils.bind(processPrefetchSuccess, this), - error: utils.bind(processPrefetchError, this) - }); - }, _processRemoteSuggestions: function(callback, matchedItems) { + var that = this; return function(data) { - var remoteAndLocalSuggestions = {}, dedupedSuggestions = []; - utils.each(data, function(index, item) { - if (utils.isString(item)) { - remoteAndLocalSuggestions[item] = { - value: item - }; - } else { - remoteAndLocalSuggestions[item.value] = item; - } - }); - utils.each(matchedItems, function(index, item) { - if (remoteAndLocalSuggestions[item.value]) { - return true; - } - if (utils.isString(item)) { - remoteAndLocalSuggestions[item] = { - value: item - }; - } else { - remoteAndLocalSuggestions[item.value] = item; - } - }); - utils.each(remoteAndLocalSuggestions, function(index, item) { - dedupedSuggestions.push(item); + utils.each(data, function(i, remoteItem) { + var isDuplicate = false; + remoteItem = utils.isString(remoteItem) ? { + value: remoteItem + } : remoteItem; + utils.each(matchedItems, function(i, localItem) { + if (remoteItem.value === localItem.value) { + isDuplicate = true; + return false; + } + }); + !isDuplicate && matchedItems.push(remoteItem); + return matchedItems.length < that.limit; }); - callback && callback(dedupedSuggestions); + callback && callback(matchedItems); }; }, getSuggestions: function(query, callback) { - var terms = utils.tokenizeText(query); + var terms = utils.tokenizeQuery(query); var potentiallyMatchingIds = this._getPotentiallyMatchingIds(terms); var potentiallyMatchingItems = this._getItemsFromIds(potentiallyMatchingIds); var matchedItems = utils.filter(potentiallyMatchingItems, this._matcher(terms)); @@ -557,29 +521,13 @@ var that = this; utils.bindAll(this); this.specialKeyCodeMap = { - 9: { - event: "tab" - }, - 27: { - event: "esc" - }, - 37: { - event: "left" - }, - 39: { - event: "right" - }, - 13: { - event: "enter" - }, - 38: { - event: "up", - preventDefault: true - }, - 40: { - event: "down", - preventDefault: true - } + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" }; this.query = ""; this.$hint = $(o.hint); @@ -594,6 +542,7 @@ setTimeout(that._compareQueryToInputValue, 0); }); } + this.$overflowHelper = buildOverflowHelper(this.$input); } utils.mixin(InputView.prototype, EventTarget, { _handleFocus: function() { @@ -602,12 +551,9 @@ _handleBlur: function() { this.trigger("blur"); }, - _handleSpecialKeyEvent: function(e) { - var keyCode = this.specialKeyCodeMap[e.which || e.keyCode]; - if (keyCode) { - this.trigger(keyCode.event, e); - keyCode.preventDefault && e.preventDefault(); - } + _handleSpecialKeyEvent: function($e) { + var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; + keyName && this.trigger(keyName, $e); }, _compareQueryToInputValue: function() { var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; @@ -627,9 +573,6 @@ blur: function() { this.$input.blur(); }, - setPreventDefaultValueForKey: function(key, value) { - this.specialKeyCodeMap[key].preventDefault = !!value; - }, getQuery: function() { return this.query; }, @@ -651,9 +594,13 @@ getLanguageDirection: function() { return (this.$input.css("direction") || "ltr").toLowerCase(); }, + isOverflow: function() { + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() > this.$input.width(); + }, isCursorAtEnd: function() { var valueLength = this.$input.val().length, selectionStart = this.$input[0].selectionStart, range; - if (selectionStart) { + if (utils.isNumber(selectionStart)) { return selectionStart === valueLength; } else if (document.selection) { range = document.selection.createRange(); @@ -664,6 +611,24 @@ } }); return InputView; + function buildOverflowHelper($input) { + return $("").css({ + position: "absolute", + left: "-9999px", + visibility: "hidden", + whiteSpace: "nowrap", + 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 compareQueries(a, b) { a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); @@ -683,12 +648,12 @@ _handleMouseleave: function() { this.isMouseOverDropdown = false; }, - _handleMouseover: function(e) { + _handleMouseover: function($e) { this._getSuggestions().removeClass("tt-is-under-cursor"); - $(e.currentTarget).addClass("tt-is-under-cursor"); + $($e.currentTarget).addClass("tt-is-under-cursor"); }, - _handleSelection: function(e) { - this.trigger("select", formatDataForSuggestion($(e.currentTarget))); + _handleSelection: function($e) { + this.trigger("select", formatDataForSuggestion($($e.currentTarget))); }, _moveCursor: function(increment) { var $suggestions, $cur, nextIndex, $underCursor; @@ -790,7 +755,7 @@ var TypeaheadView = function() { var html = { wrapper: '', - hint: '', + hint: '', dropdown: '
              ' }; function TypeaheadView(o) { @@ -817,12 +782,24 @@ menu: this.$node.find(".tt-dropdown-menu") }); this.dropdownView.on("select", this._handleSelection).on("cursorOn", this._clearHint).on("cursorOn", this._setInputValueToSuggestionUnderCursor).on("cursorOff", this._setInputValueToQuery).on("cursorOff", this._updateHint).on("suggestionsRender", this._updateHint).on("show", this._updateHint).on("hide", this._clearHint); - this.inputView.on("focus", this._showDropdown).on("blur", this._hideDropdown).on("blur", this._setInputValueToQuery).on("enter", this._handleSelection).on("queryChange", this._clearHint).on("queryChange", this._clearSuggestions).on("queryChange", this._getSuggestions).on("whitespaceChange", this._updateHint).on("queryChange whitespaceChange", this._showDropdown).on("queryChange whitespaceChange", this._setLanguageDirection).on("esc", this._hideDropdown).on("esc", this._setInputValueToQuery).on("up down", this._moveDropdownCursor).on("up down", this._showDropdown).on("tab", this._setPreventDefaultValueForTab).on("tab left right", this._autocomplete); + this.inputView.on("focus", this._showDropdown).on("blur", this._hideDropdown).on("blur", this._setInputValueToQuery).on("enter", this._handleSelection).on("queryChange", this._clearHint).on("queryChange", this._clearSuggestions).on("queryChange", this._getSuggestions).on("whitespaceChange", this._updateHint).on("queryChange whitespaceChange", this._showDropdown).on("queryChange whitespaceChange", this._setLanguageDirection).on("esc", this._hideDropdown).on("esc", this._setInputValueToQuery).on("tab up down", this._managePreventDefault).on("up down", this._moveDropdownCursor).on("up down", this._showDropdown).on("tab left right", this._autocomplete); } utils.mixin(TypeaheadView.prototype, EventTarget, { - _setPreventDefaultValueForTab: function(e) { - var hint = this.inputView.getHintValue(), inputValue = this.inputView.getInputValue(), preventDefault = hint && hint !== inputValue; - this.inputView.setPreventDefaultValueForKey("9", preventDefault); + _managePreventDefault: function(e) { + var $e = e.data, hint, inputValue, preventDefault = false; + switch (e.type) { + case "tab": + hint = this.inputView.getHintValue(); + inputValue = this.inputView.getInputValue(); + preventDefault = hint && hint !== inputValue; + break; + + case "up": + case "down": + preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; + break; + } + preventDefault && $e.preventDefault(); }, _setLanguageDirection: function() { var dirClassName = "tt-" + this.inputView.getLanguageDirection(); @@ -832,7 +809,7 @@ }, _updateHint: function() { var dataForFirstSuggestion = this.dropdownView.getFirstSuggestion(), hint = dataForFirstSuggestion ? dataForFirstSuggestion.value : null, inputValue, query, beginsWithQuery, match; - if (hint && this.dropdownView.isOpen()) { + if (hint && this.dropdownView.isOpen() && !this.inputView.isOverflow()) { inputValue = this.inputView.getInputValue(); query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); beginsWithQuery = new RegExp("^(?:" + query + ")(.*$)", "i"); @@ -850,7 +827,8 @@ this.inputView.setInputValue(this.inputView.getQuery()); }, _setInputValueToSuggestionUnderCursor: function(e) { - this.inputView.setInputValue(e.data.value, true); + var suggestion = e.data; + this.inputView.setInputValue(suggestion.value, true); }, _showDropdown: function() { this.dropdownView.show(); @@ -859,7 +837,10 @@ this.dropdownView[e.type === "blur" ? "hideUnlessMouseIsOverDropdown" : "hide"](); }, _moveDropdownCursor: function(e) { - this.dropdownView[e.type === "up" ? "moveCursorUp" : "moveCursorDown"](); + var $e = e.data; + if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { + this.dropdownView[e.type === "up" ? "moveCursorUp" : "moveCursorDown"](); + } }, _handleSelection: function(e) { var byClick = e.type === "select", suggestionData = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); @@ -912,7 +893,7 @@ !$input.attr("dir") && $input.attr("dir", "auto"); } catch (e) {} return $input.attr({ - autocomplete: false, + autocomplete: "off", spellcheck: false }).addClass("tt-query").wrap(html.wrapper).parent().prepend($hint).append(html.dropdown); } @@ -946,6 +927,7 @@ limit: datasetDef.limit, local: datasetDef.local, prefetch: datasetDef.prefetch, + ttl_ms: datasetDef.ttl_ms, remote: datasetDef.remote, matcher: datasetDef.matcher, ranker: datasetDef.ranker, @@ -972,9 +954,9 @@ }; function typeahead(method) { if (methods[method]) { - methods[method].apply(this, [].slice.call(arguments, 1)); + return methods[method].apply(this, [].slice.call(arguments, 1)); } else { - methods.initialize.apply(this, arguments); + return methods.initialize.apply(this, arguments); } } function configureTransport(o) { diff --git a/releases/latest/typeahead.js.zip b/releases/latest/typeahead.js.zip index fea512866a66137f48de38a2a8fbcd81d16f543e..332b65e5a920f7c7a3f84727ddd76ea7bf6ab318 100644 GIT binary patch literal 16419 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 DRFJ;j diff --git a/releases/latest/typeahead.min.css b/releases/latest/typeahead.min.css index 528024686b..87b44b65da 100644 --- a/releases/latest/typeahead.min.css +++ b/releases/latest/typeahead.min.css @@ -1,5 +1,5 @@ /*! - * Twitter Typeahead 0.8.0 + * typeahead.js 0.8.1 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ diff --git a/releases/latest/typeahead.min.js b/releases/latest/typeahead.min.js index 6c7bcdfd59..3d17a03f33 100644 --- a/releases/latest/typeahead.min.js +++ b/releases/latest/typeahead.min.js @@ -1,7 +1,7 @@ /*! - * Twitter Typeahead 0.8.0 + * typeahead.js 0.8.1 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ -(function(){var t="0.8.0",e={isMsie:function(){return/msie [\w.]+/i.test(navigator.userAgent)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:$.isArray,isFunction:$.isFunction,isObject:function(t){return t!==Object(t)},isUndefined:function(t){return t===void 0},bind:$.proxy,bindAll:function(t){var n;for(var i in t)e.isFunction(n=t[i])&&(t[i]=$.proxy(n,t))},indexOf:function(t,e){for(var n=0;t.length>n;n++)if(t[n]===e)return n;return-1},each:$.each,map:$.map,filter:function(t,e){var n=[];return $.each(t,function(i,s){e(s,i,t)&&n.push(s)}),n},every:function(t,e){var n=!0;return t?($.each(t,function(i,s){return(n=e.call(null,s,i,t))?void 0:!1}),!!n):n},keys:function(t){if(!e.isObject(t))throw new TypeError("invalid object");return $.map(t,function(t,e){return e})},mixin:$.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,h=e-(a-o);return n=this,i=arguments,0>=h?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,h)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeText:function(t){return $.trim(t).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),i=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function n(){return(new Date).getTime()}function i(t){return JSON.stringify(t)}function s(t){return e.isUndefined(t)?void 0:JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{get:function(t){var i=s(o.getItem(this.prefix+t));return e.isNumber(i)&&n()>i&&o.removeItem(this.prefix+t+this.ttlKey),s(o.getItem(this.prefix+t))},set:function(t,s,r){return e.isNumber(r)?o.setItem(this.prefix+t+this.ttlKey,i(n()+r)):o.removeItem(this.prefix+t+this.ttlKey),o.setItem(this.prefix+t,i(s))},remove:function(t){return o.removeItem(this.prefix+t+this.ttlKey),o.removeItem(this.prefix+t),this},clear:function(){var t,e,n=o.length;for(t=0;n>t;t+=1)e=o.key(t),e.match(this.keyMatcher)&&(t-=1,n-=1,this.remove(e.replace(this.keyMatcher,"")));return this},isExpired:function(t){var i=s(o.getItem(this.prefix+t+this.ttlKey));return e.isNumber(i)&&n()>i?!0:!1}}:{get:e.noop,set:e.noop,remove:e.noop,clear:e.noop,isExpired:e.noop},e.mixin(t.prototype,r),t}(),s=function(){function t(t){e.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return e.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),r=function(){function t(t){var n;e.bindAll(this),t=t||{},n=/^throttle$/i.test(t.rateLimitFn)?e.throttle:e.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new s,this.get=n(this.get,this.wait)}return e.mixin(t.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return n?t:void 0})},_getItemsFromIds:function(t){var n=[];return e.map(t,e.bind(function(t){var e=this.itemHash[t];e&&n.push(e)},this)),n},_matcher:function(t){if(this._customMatcher){var n=this._customMatcher;return function(t){return n(t)}}return function(n){var i=n.tokens,s=e.every(t,function(t){var n=e.filter(i,function(e){return 0===e.indexOf(t)});return n.length});return s?n:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRawData:function(n){this.itemHash={},this.adjacencyList={},e.map(n,e.bind(function(t){var n;t.tokens?n=t.tokens:(t={tokens:e.tokenizeText(t),value:t},n=t.tokens),t.id=e.getUniqueId(t.value),e.map(n,e.bind(function(n){var i=n.charAt(0);this.adjacencyList[i]?-1===e.indexOf(this.adjacencyList[i],t.id)&&this.adjacencyList[i].push(t.id):this.adjacencyList[i]=[t.id]},this)),this.itemHash[t.id]=t},this)),this.storage.set(this.storageHash,this.itemHash,this._ttl_ms),this.storage.set(this.storageAdjacencyList,this.adjacencyList,this._ttl_ms),this.storage.set(this.storageVersion,t,this._ttl_ms),this.storage.set(this.storageProtocol,e.getProtocol(),this._ttl_ms)},_prefetch:function(t){var n=function(t){t&&(e.map(t,function(t){return e.isString(t)?{value:t,tokens:e.tokenizeText(t.toLowerCase())}:(e.map(t.tokens,function(e,n){t.tokens[n]=e.toLowerCase()}),t)}),this._processRawData(t))},i=function(){this._getDataFromLocalStorage()};$.ajax({url:t,success:e.bind(n,this),error:e.bind(i,this)})},_processRemoteSuggestions:function(t,n){return function(i){var s={},r=[];e.each(i,function(t,n){e.isString(n)?s[n]={value:n}:s[n.value]=n}),e.each(n,function(t,n){return s[n.value]?!0:(e.isString(n)?s[n]={value:n}:s[n.value]=n,void 0)}),e.each(s,function(t,e){r.push(e)}),t&&t(r)}},getSuggestions:function(t,n){var i=e.tokenizeText(t),s=this._getPotentiallyMatchingIds(i),r=this._getItemsFromIds(s),o=e.filter(r,this._matcher(i));o.sort(this._ranker),n&&n(o),o.length .tt-suggestion",this._handleMouseover).on("click",".tt-suggestions > .tt-suggestion",this._handleSelection)}function i(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return e.mixin(t.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(t){this._getSuggestions().removeClass("tt-is-under-cursor"),$(t.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(t){this.trigger("select",i($(t.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?i(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?i(t):null},renderSuggestions:function(t,n,i){var s,r,o,u="tt-dataset-"+n.name,a=this.$menu.find("."+u);0===a.length&&(a=$('
              1. ').addClass(u).appendTo(this.$menu)),s=document.createElement("div"),r=document.createDocumentFragment(),this.clearSuggestions(n.name),i.length>0&&(this.$menu.removeClass("tt-is-empty"),e.each(i,function(t,e){s.innerHTML=n.template.render(e),o=s.firstChild,o.setAttribute("data-value",e.value),r.appendChild(o)})),a.find("> .tt-suggestions").data({query:t,dataset:n.name}).append(r),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),t}(),h=function(){function t(t){e.bindAll(this),this.$node=i(t.input),this.datasets=t.datasets,e.each(this.datasets,function(t,e){var n='
              2. %body
              3. ';e.template=e.template?e.engine.compile(n.replace("%body",e.template)):{render:function(t){return n.replace("%body","

                "+t.value+"

                ")}}}),this.inputView=new u({input:this.$node.find(".tt-query"),hint:this.$node.find(".tt-hint")}),this.dropdownView=new a({menu:this.$node.find(".tt-dropdown-menu")}),this.dropdownView.on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView.on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab",this._setPreventDefaultValueForTab).on("tab left right",this._autocomplete)}function i(t){var e=$(t),n=$(s.hint).css({"background-color":e.css("background-color")});if(0===e.length)return null;try{!e.attr("dir")&&e.attr("dir","auto")}catch(i){}return e.attr({autocomplete:!1,spellcheck:!1}).addClass("tt-query").wrap(s.wrapper).parent().prepend(n).append(s.dropdown)}var s={wrapper:'',hint:'',dropdown:'
                  '};return e.mixin(t.prototype,n,{_setPreventDefaultValueForTab:function(){var t=this.inputView.getHintValue(),e=this.inputView.getInputValue(),n=t&&t!==e;this.inputView.setPreventDefaultValueForKey("9",n)},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,n,i,s=this.dropdownView.getFirstSuggestion(),r=s?s.value:null;r&&this.dropdownView.isOpen()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=RegExp("^(?:"+e+")(.*$)","i"),i=n.exec(r),this.inputView.setHintValue(t+(i?i[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){this.inputView.setInputValue(t.data.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var n="select"===t.type,i=n?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),n?this.inputView.focus():t.data.preventDefault(),n&&e.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,n=this.inputView.getQuery();e.each(this.datasets,function(e,i){i.getSuggestions(n,function(e){t._renderSuggestions(n,i,e)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))}}),t}();(function(){function t(t){s[t]?s[t].apply(this,[].slice.call(arguments,1)):s.initialize.apply(this,arguments)}function n(t){a=t}var i,s,u={},a={};jQuery.fn.typeahead=t,t.configureTransport=n,s={initialize:function(n){var s={};if(n=e.isArray(n)?n:[n],0===n.length)throw Error("no datasets provided");return delete t.configureTransport,i=i||new r(a),e.each(n,function(t,n){var r,a=n.name=n.name||e.getUniqueId();if(u[a])r=u[a];else{if(n.limit=n.limit||5,n.template=n.template,n.engine=n.engine,n.template&&!n.engine)throw Error("no template engine specified for "+a);r=u[a]=new o({name:n.name,limit:n.limit,local:n.local,prefetch:n.prefetch,remote:n.remote,matcher:n.matcher,ranker:n.ranker,transport:i})}s[a]={name:n.name,limit:n.limit,template:n.template,engine:n.engine,getSuggestions:r.getSuggestions}}),this.each(function(){$(this).data({typeahead:new h({input:this,datasets:s})})})}}})()})(); \ No newline at end of file +(function(){var t="0.8.1",e={isMsie:function(){return/msie [\w.]+/i.test(navigator.userAgent)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:$.isArray,isFunction:$.isFunction,isObject:function(t){return t===Object(t)},isUndefined:function(t){return t===void 0},bind:$.proxy,bindAll:function(t){var n;for(var i in t)e.isFunction(n=t[i])&&(t[i]=$.proxy(n,t))},indexOf:function(t,e){for(var n=0;t.length>n;n++)if(t[n]===e)return n;return-1},each:$.each,map:$.map,filter:function(t,e){var n=[];return $.each(t,function(i,s){e(s,i,t)&&n.push(s)}),n},every:function(t,e){var n=!0;return t?($.each(t,function(i,s){return(n=e.call(null,s,i,t))?void 0:!1}),!!n):n},mixin:$.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,c=e-(a-o);return n=this,i=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,c)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeQuery:function(t){return $.trim(t).toLowerCase().split(/[\s]+/)},tokenizeText:function(t){return $.trim(t).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),i=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function n(){return(new Date).getTime()}function i(t){return JSON.stringify(e.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return e.isNumber(r)?o.setItem(this._ttlKey(t),i(n()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),i(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,n=[],i=o.length;for(t=0;i>t;t++)(e=o.key(t)).match(this.keyMatcher)&&n.push(e.replace(this.keyMatcher,""));for(t=n.length;t--;)this.remove(n[t]);return this},isExpired:function(t){var i=s(o.getItem(this._ttlKey(t)));return e.isNumber(i)&&n()>i?!0:!1}}:{get:e.noop,set:e.noop,remove:e.noop,clear:e.noop,isExpired:e.noop},e.mixin(t.prototype,r),t}(),s=function(){function t(t){e.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return e.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),r=function(){function t(t){var n;e.bindAll(this),t=t||{},n=/^throttle$/i.test(t.rateLimitFn)?e.throttle:e.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new s,this.get=n(this.get,this.wait)}return e.mixin(t.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return n?t:void 0})},_getItemsFromIds:function(t){var n=[];return e.map(t,e.bind(function(t){var e=this.itemHash[t];e&&n.push(e)},this)),n},_matcher:function(t){if(this._customMatcher){var n=this._customMatcher;return function(t){return n(t)}}return function(n){var i=n.tokens,s=e.every(t,function(t){var n=e.filter(i,function(e){return 0===e.indexOf(t)});return n.length});return s?n:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRemoteSuggestions:function(t,n){var i=this;return function(s){e.each(s,function(t,s){var r=!1;return s=e.isString(s)?{value:s}:s,e.each(n,function(t,e){return s.value===e.value?(r=!0,!1):void 0}),!r&&n.push(s),n.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:t.css("font-family"),fontSize:t.css("font-size"),fontStyle:t.css("font-style"),fontVariant:t.css("font-variant"),fontWeight:t.css("font-weight"),wordSpacing:t.css("word-spacing"),letterSpacing:t.css("letter-spacing"),textIndent:t.css("text-indent"),textRendering:t.css("text-rendering"),textTransform:t.css("text-transform")}).insertAfter(t)}function s(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),t===e}return e.mixin(t.prototype,n,{_handleFocus:function(){this.trigger("focus")},_handleBlur:function(){this.trigger("blur")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e,t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=s(this.query,t),n=e?this.query.length!==t.length:!1;n?this.trigger("whitespaceChange",{value:this.query}):e||this.trigger("queryChange",{value:this.query=t})},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,n=this.$input.val().length,i=this.$input[0].selectionStart;return e.isNumber(i)?i===n:document.selection?(t=document.selection.createRange(),t.moveStart("character",-n),n===t.text.length):!0}}),t}(),a=function(){function t(t){e.bindAll(this),this.isMouseOverDropdown,this.$menu=$(t.menu).on("mouseenter",this._handleMouseenter).on("mouseleave",this._handleMouseleave).on("mouseover",".tt-suggestions > .tt-suggestion",this._handleMouseover).on("click",".tt-suggestions > .tt-suggestion",this._handleSelection)}function i(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return e.mixin(t.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(t){this._getSuggestions().removeClass("tt-is-under-cursor"),$(t.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(t){this.trigger("select",i($(t.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?i(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?i(t):null},renderSuggestions:function(t,n,i){var s,r,o,u="tt-dataset-"+n.name,a=this.$menu.find("."+u);0===a.length&&(a=$('
                  1. ').addClass(u).appendTo(this.$menu)),s=document.createElement("div"),r=document.createDocumentFragment(),this.clearSuggestions(n.name),i.length>0&&(this.$menu.removeClass("tt-is-empty"),e.each(i,function(t,e){s.innerHTML=n.template.render(e),o=s.firstChild,o.setAttribute("data-value",e.value),r.appendChild(o)})),a.find("> .tt-suggestions").data({query:t,dataset:n.name}).append(r),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),t}(),c=function(){function t(t){e.bindAll(this),this.$node=i(t.input),this.datasets=t.datasets,e.each(this.datasets,function(t,e){var n='
                  2. %body
                  3. ';e.template=e.template?e.engine.compile(n.replace("%body",e.template)):{render:function(t){return n.replace("%body","

                    "+t.value+"

                    ")}}}),this.inputView=new u({input:this.$node.find(".tt-query"),hint:this.$node.find(".tt-hint")}),this.dropdownView=new a({menu:this.$node.find(".tt-dropdown-menu")}),this.dropdownView.on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView.on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("tab up down",this._managePreventDefault).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab left right",this._autocomplete)}function i(t){var e=$(t),n=$(s.hint).css({"background-color":e.css("background-color")});if(0===e.length)return null;try{!e.attr("dir")&&e.attr("dir","auto")}catch(i){}return e.attr({autocomplete:"off",spellcheck:!1}).addClass("tt-query").wrap(s.wrapper).parent().prepend(n).append(s.dropdown)}var s={wrapper:'',hint:'',dropdown:'
                      '};return e.mixin(t.prototype,n,{_managePreventDefault:function(t){var e,n,i=t.data,s=!1;switch(t.type){case"tab":e=this.inputView.getHintValue(),n=this.inputView.getInputValue(),s=e&&e!==n;break;case"up":case"down":s=!i.shiftKey&&!i.ctrlKey&&!i.metaKey}s&&i.preventDefault()},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,n,i,s=this.dropdownView.getFirstSuggestion(),r=s?s.value:null;r&&this.dropdownView.isOpen()&&!this.inputView.isOverflow()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=RegExp("^(?:"+e+")(.*$)","i"),i=n.exec(r),this.inputView.setHintValue(t+(i?i[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var n="select"===t.type,i=n?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),n?this.inputView.focus():t.data.preventDefault(),n&&e.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,n=this.inputView.getQuery();e.each(this.datasets,function(e,i){i.getSuggestions(n,function(e){t._renderSuggestions(n,i,e)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))}}),t}();(function(){function t(t){return s[t]?s[t].apply(this,[].slice.call(arguments,1)):s.initialize.apply(this,arguments)}function n(t){a=t}var i,s,u={},a={};jQuery.fn.typeahead=t,t.configureTransport=n,s={initialize:function(n){var s={};if(n=e.isArray(n)?n:[n],0===n.length)throw Error("no datasets provided");return delete t.configureTransport,i=i||new r(a),e.each(n,function(t,n){var r,a=n.name=n.name||e.getUniqueId();if(u[a])r=u[a];else{if(n.limit=n.limit||5,n.template=n.template,n.engine=n.engine,n.template&&!n.engine)throw Error("no template engine specified for "+a);r=u[a]=new o({name:n.name,limit:n.limit,local:n.local,prefetch:n.prefetch,ttl_ms:n.ttl_ms,remote:n.remote,matcher:n.matcher,ranker:n.ranker,transport:i})}s[a]={name:n.name,limit:n.limit,template:n.template,engine:n.engine,getSuggestions:r.getSuggestions}}),this.each(function(){$(this).data({typeahead:new c({input:this,datasets:s})})})}}})()})(); \ No newline at end of file From 475bdc7ac543a60204856b6791ea5c2ab3e5635a Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sun, 3 Mar 2013 17:31:01 -0800 Subject: [PATCH 15/44] Add assets for 0.8.2. --- index.html | 2 +- releases/0.8.2/typeahead.css | 72 ++ releases/0.8.2/typeahead.js | 1014 +++++++++++++++++++++++++++++ releases/0.8.2/typeahead.js.zip | Bin 0 -> 17220 bytes releases/0.8.2/typeahead.min.css | 7 + releases/0.8.2/typeahead.min.js | 7 + releases/latest/typeahead.css | 2 +- releases/latest/typeahead.js | 138 ++-- releases/latest/typeahead.js.zip | Bin 16419 -> 17220 bytes releases/latest/typeahead.min.css | 2 +- releases/latest/typeahead.min.js | 4 +- 11 files changed, 1198 insertions(+), 50 deletions(-) create mode 100644 releases/0.8.2/typeahead.css create mode 100644 releases/0.8.2/typeahead.js create mode 100644 releases/0.8.2/typeahead.js.zip create mode 100644 releases/0.8.2/typeahead.min.css create mode 100644 releases/0.8.2/typeahead.min.js diff --git a/index.html b/index.html index 3d6b7bb962..aac93a53f7 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@

                      typeahea
                      - download v0.8.1 + download v0.8.2 project & docs on GitHub · changelog diff --git a/releases/0.8.2/typeahead.css b/releases/0.8.2/typeahead.css new file mode 100644 index 0000000000..2551c21de7 --- /dev/null +++ b/releases/0.8.2/typeahead.css @@ -0,0 +1,72 @@ +/*! + * typeahead.js 0.8.2 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +.twitter-typeahead { + position: relative !important; + display: inline-block; + *display: inline; + *zoom: 1; +} +.tt-query { + position: relative !important; + /* for unknown reasons, this fixes alignment issues in ie7 */ + + *margin-top: -1px !important; + vertical-align: top !important; + background-color: transparent !important; + /* ie6-8 doesn't fire hover and click events for transparent elements + for a workaround, use a 1x1 transparent gif */ + + background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) !important; +} +.tt-hint { + position: absolute !important; + top: 0 !important; + left: 0 !important; + border-color: transparent !important; + -webkit-box-shadow: none !important; + -moz-box-shadow: none !important; + box-shadow: none !important; +} +.tt-dropdown-menu, +.tt-suggestions, +.tt-suggestion { + padding: 0; + margin: 0; + list-style: none; +} +.tt-dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 100; + /* TODO: need default z-index, should be configurable */ + + display: none; +} +.tt-dropdown-menu.tt-is-open { + display: block; +} +.tt-dropdown-menu.tt-is-empty { + display: none; +} +.tt-suggestion { + display: block; + white-space: nowrap; + cursor: pointer; +} +.tt-suggestion * { + white-space: normal; +} +/* rtl support */ +/* ----------- */ +.twitter-typeahead.tt-rtl { + direction: rtl; +} +.twitter-typeahead.tt-rtl .tt-dropdown-menu { + left: auto; + right: 0; +} diff --git a/releases/0.8.2/typeahead.js b/releases/0.8.2/typeahead.js new file mode 100644 index 0000000000..5bd00d1f2d --- /dev/null +++ b/releases/0.8.2/typeahead.js @@ -0,0 +1,1014 @@ +/*! + * typeahead.js 0.8.2 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function($) { + var VERSION = "0.8.2"; + var utils = { + isMsie: function() { + return /msie [\w.]+/i.test(navigator.userAgent); + }, + 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"; + }, + bind: $.proxy, + bindAll: function(obj) { + var val; + for (var key in obj) { + $.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); + } + }, + indexOf: function(haystack, needle) { + for (var i = 0; i < haystack.length; i++) { + if (haystack[i] === needle) { + return i; + } + } + return -1; + }, + each: $.each, + map: $.map, + filter: function(obj, test) { + var results = []; + $.each(obj, function(key, val) { + if (test(val, key, obj)) { + results.push(val); + } + }); + return results; + }, + 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; + }, + mixin: $.extend, + getUniqueId: function() { + var counter = 0; + return function() { + return counter++; + }; + }(), + 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; + }; + }, + uniqueArray: function(array) { + var u = {}, a = []; + for (var i = 0, l = array.length; i < l; ++i) { + if (u.hasOwnProperty(array[i])) { + continue; + } + a.push(array[i]); + u[array[i]] = 1; + } + return a; + }, + tokenizeQuery: function(str) { + return $.trim(str).toLowerCase().split(/[\s]+/); + }, + tokenizeText: function(str) { + return $.trim(str).toLowerCase().split(/[\s\-_]+/); + }, + getProtocol: function() { + return location.protocol; + }, + noop: function() {} + }; + var EventTarget = function() { + var eventSplitter = /\s+/; + return { + on: function(events, callback) { + var event; + if (!callback) { + return this; + } + this._callbacks = this._callbacks || {}; + events = events.split(eventSplitter); + while (event = events.shift()) { + this._callbacks[event] = this._callbacks[event] || []; + this._callbacks[event].push(callback); + } + return this; + }, + trigger: function(events, data) { + var event, callbacks; + if (!this._callbacks) { + return this; + } + events = events.split(eventSplitter); + while (event = events.shift()) { + if (callbacks = this._callbacks[event]) { + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i].call(this, { + type: event, + data: data + }); + } + } + } + return this; + } + }; + }(); + var PersistentStorage = function() { + var ls = window.localStorage, methods; + function PersistentStorage(namespace) { + this.prefix = [ "__", namespace, "__" ].join(""); + this.ttlKey = "__ttl__"; + this.keyMatcher = new RegExp("^" + this.prefix); + } + if (window.localStorage && window.JSON) { + methods = { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, + get: function(key) { + if (this.isExpired(key)) { + this.remove(key); + } + return decode(ls.getItem(this._prefix(key))); + }, + set: function(key, val, ttl) { + if (utils.isNumber(ttl)) { + ls.setItem(this._ttlKey(key), encode(now() + ttl)); + } else { + ls.removeItem(this._ttlKey(key)); + } + return ls.setItem(this._prefix(key), encode(val)); + }, + remove: function(key) { + ls.removeItem(this._ttlKey(key)); + ls.removeItem(this._prefix(key)); + return this; + }, + clear: function() { + var i, key, keys = [], len = ls.length; + for (i = 0; i < len; i++) { + if ((key = ls.key(i)).match(this.keyMatcher)) { + keys.push(key.replace(this.keyMatcher, "")); + } + } + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } + return this; + }, + isExpired: function(key) { + var ttl = decode(ls.getItem(this._ttlKey(key))); + return utils.isNumber(ttl) && now() > ttl ? true : false; + } + }; + } else { + methods = { + get: utils.noop, + set: utils.noop, + remove: utils.noop, + clear: utils.noop, + isExpired: utils.noop + }; + } + utils.mixin(PersistentStorage.prototype, methods); + return PersistentStorage; + function now() { + return new Date().getTime(); + } + function encode(val) { + return JSON.stringify(utils.isUndefined(val) ? null : val); + } + function decode(val) { + return JSON.parse(val); + } + }(); + var RequestCache = function() { + function RequestCache(o) { + utils.bindAll(this); + o = o || {}; + this.sizeLimit = o.sizeLimit || 10; + this.cache = {}; + this.cachedKeysByAge = []; + } + utils.mixin(RequestCache.prototype, { + get: function(url) { + return this.cache[url]; + }, + set: function(url, resp) { + var requestToEvict; + if (this.cachedKeysByAge.length === this.sizeLimit) { + requestToEvict = this.cachedKeysByAge.shift(); + delete this.cache[requestToEvict]; + } + this.cache[url] = resp; + this.cachedKeysByAge.push(url); + } + }); + return RequestCache; + }(); + var Transport = function() { + function Transport(o) { + var rateLimitFn; + utils.bindAll(this); + o = o || {}; + rateLimitFn = /^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce; + this.wait = o.wait || 300; + this.wildcard = o.wildcard || "%QUERY"; + this.maxConcurrentRequests = o.maxConcurrentRequests || 6; + this.concurrentRequests = 0; + this.onDeckRequestArgs = null; + this.cache = new RequestCache(); + this.get = rateLimitFn(this.get, this.wait); + } + utils.mixin(Transport.prototype, { + _incrementConcurrentRequests: function() { + this.concurrentRequests++; + }, + _decrementConcurrentRequests: function() { + this.concurrentRequests--; + }, + _belowConcurrentRequestsThreshold: function() { + return this.concurrentRequests < this.maxConcurrentRequests; + }, + get: function(url, query, cb) { + var that = this, resp; + url = url.replace(this.wildcard, encodeURIComponent(query || "")); + if (resp = this.cache.get(url)) { + cb && cb(resp); + } else if (this._belowConcurrentRequestsThreshold()) { + $.ajax({ + url: url, + type: "GET", + dataType: "json", + beforeSend: function() { + that._incrementConcurrentRequests(); + }, + success: function(resp) { + cb && cb(resp); + that.cache.set(url, resp); + }, + complete: function() { + that._decrementConcurrentRequests(); + if (that.onDeckRequestArgs) { + that.get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } + }); + } else { + this.onDeckRequestArgs = [].slice.call(arguments, 0); + } + } + }); + return Transport; + }(); + var Dataset = function() { + function Dataset(o) { + utils.bindAll(this); + this.storage = new PersistentStorage(o.name); + this.adjacencyList = {}; + this.itemHash = {}; + this.name = o.name; + this.resetDataOnProtocolSwitch = o.resetDataOnProtocolSwitch || false; + this.queryUrl = o.remote; + this.transport = o.transport; + this.limit = o.limit || 10; + this._customMatcher = o.matcher || null; + this._customRanker = o.ranker || null; + this._ttl_ms = utils.isNumber(o.ttl_ms) ? o.ttl_ms : 24 * 60 * 60 * 1e3; + this.keys = { + version: "version", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; + o.local && this._processLocalData(o.local); + o.prefetch && this._loadPrefetchData(o.prefetch); + } + utils.mixin(Dataset.prototype, { + _processLocalData: function(data) { + data && this._mergeProcessedData(this._processData(data)); + }, + _loadPrefetchData: function(url) { + var that = this, itemHash = this.storage.get(this.keys.itemHash), adjacencyList = this.storage.get(this.keys.adjacencyList), protocol = this.storage.get(this.keys.protocol), version = this.storage.get(this.keys.version), isExpired = version !== VERSION || protocol !== utils.getProtocol(); + if (itemHash && adjacencyList && !isExpired) { + this._mergeProcessedData({ + itemHash: itemHash, + adjacencyList: adjacencyList + }); + } else { + $.getJSON(url).done(processPrefetchData); + } + function processPrefetchData(data) { + var processedData = that._processData(data), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + that.storage.set(that.keys.itemHash, itemHash, that._ttl_ms); + that.storage.set(that.keys.adjacencyList, adjacencyList, that._ttl_ms); + that.storage.set(that.keys.version, VERSION, that._ttl_ms); + that.storage.set(that.keys.protocol, utils.getProtocol(), that._ttl_ms); + that._mergeProcessedData(processedData); + } + }, + _processData: function(data) { + var itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, item) { + var id; + if (utils.isString(item)) { + item = { + value: item, + tokens: utils.tokenizeText(item) + }; + } + item.tokens = utils.filter(item.tokens || [], function(token) { + return !utils.isBlankString(token); + }); + item.tokens = utils.map(item.tokens, function(token) { + return token.toLowerCase(); + }); + itemHash[id = utils.getUniqueId(item.value)] = item; + utils.each(item.tokens, function(i, token) { + var character = token.charAt(0), adjacency = adjacencyList[character] || (adjacencyList[character] = [ id ]); + !~utils.indexOf(adjacency, id) && adjacency.push(id); + }); + }); + return { + itemHash: itemHash, + adjacencyList: adjacencyList + }; + }, + _mergeProcessedData: function(processedData) { + var that = this; + utils.mixin(this.itemHash, processedData.itemHash); + utils.each(processedData.adjacencyList, function(character, adjacency) { + var masterAdjacency = that.adjacencyList[character]; + that.adjacencyList[character] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + }); + }, + _getPotentiallyMatchingIds: function(terms) { + var potentiallyMatchingIds = []; + var lists = []; + utils.map(terms, utils.bind(function(term) { + var list = this.adjacencyList[term.charAt(0)]; + if (!list) { + return; + } + lists.push(list); + }, this)); + if (lists.length === 1) { + return lists[0]; + } + var listLengths = []; + $.each(lists, function(i, list) { + listLengths.push(list.length); + }); + var shortestListIndex = utils.indexOf(listLengths, Math.min.apply(null, listLengths)) || 0; + var shortestList = lists[shortestListIndex] || []; + potentiallyMatchingIds = utils.map(shortestList, function(item) { + var idInEveryList = utils.every(lists, function(list) { + return utils.indexOf(list, item) > -1; + }); + if (idInEveryList) { + return item; + } + }); + return potentiallyMatchingIds; + }, + _getItemsFromIds: function(ids) { + var items = []; + utils.map(ids, utils.bind(function(id) { + var item = this.itemHash[id]; + if (item) { + items.push(item); + } + }, this)); + return items; + }, + _matcher: function(terms) { + if (this._customMatcher) { + var customMatcher = this._customMatcher; + return function(item) { + return customMatcher(item); + }; + } else { + return function(item) { + var tokens = item.tokens; + var allTermsMatched = utils.every(terms, function(term) { + var tokensMatched = utils.filter(tokens, function(token) { + return token.indexOf(term) === 0; + }); + return tokensMatched.length; + }); + if (allTermsMatched) { + return item; + } + }; + } + }, + _compareItems: function(a, b, areLocalItems) { + var aScoreBoost = !a.score_boost ? 0 : a.score_boost, bScoreBoost = !b.score_boost ? 0 : b.score_boost, aScore = !a.score ? 0 : a.score, bScore = !b.score ? 0 : b.score; + if (areLocalItems) { + return b.weight + bScoreBoost - (a.weight + aScoreBoost); + } else { + return bScore + bScoreBoost - (aScore + aScoreBoost); + } + }, + _ranker: function(a, b) { + if (this._customRanker) { + return this._customRanker(a, b); + } else { + var aIsLocal = a.weight && a.weight !== 0; + var bIsLocal = b.weight && b.weight !== 0; + if (aIsLocal && !bIsLocal) { + return -1; + } else if (bIsLocal && !aIsLocal) { + return 1; + } else { + return aIsLocal && bIsLocal ? this._compareItems(a, b, true) : this._compareItems(a, b, false); + } + } + }, + _processRemoteSuggestions: function(callback, matchedItems) { + var that = this; + return function(data) { + utils.each(data, function(i, remoteItem) { + var isDuplicate = false; + remoteItem = utils.isString(remoteItem) ? { + value: remoteItem + } : remoteItem; + utils.each(matchedItems, function(i, localItem) { + if (remoteItem.value === localItem.value) { + isDuplicate = true; + return false; + } + }); + !isDuplicate && matchedItems.push(remoteItem); + return matchedItems.length < that.limit; + }); + callback && callback(matchedItems); + }; + }, + getSuggestions: function(query, callback) { + var terms = utils.tokenizeQuery(query); + var potentiallyMatchingIds = this._getPotentiallyMatchingIds(terms); + var potentiallyMatchingItems = this._getItemsFromIds(potentiallyMatchingIds); + var matchedItems = utils.filter(potentiallyMatchingItems, this._matcher(terms)); + matchedItems.sort(this._ranker); + callback && callback(matchedItems); + if (matchedItems.length < this.limit && this.queryUrl) { + this.transport.get(this.queryUrl, query, this._processRemoteSuggestions(callback, matchedItems)); + } + } + }); + return Dataset; + }(); + var InputView = function() { + function InputView(o) { + var that = this; + utils.bindAll(this); + this.specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + this.query = ""; + this.$hint = $(o.hint); + this.$input = $(o.input).on("blur.tt", this._handleBlur).on("focus.tt", this._handleFocus).on("keydown.tt", this._handleSpecialKeyEvent); + if (!utils.isMsie()) { + this.$input.on("input.tt", this._compareQueryToInputValue); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (that.specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + setTimeout(that._compareQueryToInputValue, 0); + }); + } + this.$overflowHelper = buildOverflowHelper(this.$input); + } + utils.mixin(InputView.prototype, EventTarget, { + _handleFocus: function() { + this.trigger("focus"); + }, + _handleBlur: function() { + this.trigger("blur"); + }, + _handleSpecialKeyEvent: function($e) { + var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; + keyName && this.trigger(keyName, $e); + }, + _compareQueryToInputValue: function() { + var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; + if (isSameQueryExceptWhitespace) { + this.trigger("whitespaceChange", { + value: this.query + }); + } else if (!isSameQuery) { + this.trigger("queryChange", { + value: this.query = inputValue + }); + } + }, + destroy: function() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$hint = this.$input = this.$overflowHelper = null; + }, + focus: function() { + this.$input.focus(); + }, + blur: function() { + this.$input.blur(); + }, + getQuery: function() { + return this.query; + }, + getInputValue: function() { + return this.$input.val(); + }, + setInputValue: function(value, silent) { + this.$input.val(value); + if (silent !== true) { + this._compareQueryToInputValue(); + } + }, + getHintValue: function() { + return this.$hint.val(); + }, + setHintValue: function(value) { + this.$hint.val(value); + }, + getLanguageDirection: function() { + return (this.$input.css("direction") || "ltr").toLowerCase(); + }, + isOverflow: function() { + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() > this.$input.width(); + }, + isCursorAtEnd: function() { + var valueLength = this.$input.val().length, selectionStart = this.$input[0].selectionStart, range; + if (utils.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + } + }); + return InputView; + function buildOverflowHelper($input) { + return $("").css({ + position: "absolute", + left: "-9999px", + visibility: "hidden", + whiteSpace: "nowrap", + 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 compareQueries(a, b) { + a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); + b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); + return a === b; + } + }(); + var DropdownView = function() { + function DropdownView(o) { + utils.bindAll(this); + this.isMouseOverDropdown; + this.$menu = $(o.menu).on("mouseenter.tt", this._handleMouseenter).on("mouseleave.tt", this._handleMouseleave).on("click.tt", ".tt-suggestion", this._handleSelection).on("mouseover.tt", ".tt-suggestion", this._handleMouseover); + } + utils.mixin(DropdownView.prototype, EventTarget, { + _handleMouseenter: function() { + this.isMouseOverDropdown = true; + }, + _handleMouseleave: function() { + this.isMouseOverDropdown = false; + }, + _handleMouseover: function($e) { + this._getSuggestions().removeClass("tt-is-under-cursor"); + $($e.currentTarget).addClass("tt-is-under-cursor"); + }, + _handleSelection: function($e) { + this.trigger("select", formatDataForSuggestion($($e.currentTarget))); + }, + _moveCursor: function(increment) { + var $suggestions, $cur, nextIndex, $underCursor; + if (!this.$menu.hasClass("tt-is-open")) { + return; + } + $suggestions = this._getSuggestions(); + $cur = $suggestions.filter(".tt-is-under-cursor"); + $cur.removeClass("tt-is-under-cursor"); + nextIndex = $suggestions.index($cur) + increment; + nextIndex = (nextIndex + 1) % ($suggestions.length + 1) - 1; + if (nextIndex === -1) { + this.trigger("cursorOff"); + return; + } else if (nextIndex < -1) { + nextIndex = $suggestions.length - 1; + } + $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); + this.trigger("cursorOn", { + value: $underCursor.data("value") + }); + }, + _getSuggestions: function() { + return this.$menu.find(".tt-suggestions > .tt-suggestion"); + }, + destroy: function() { + this.$menu.off(".tt"); + this.$menu = null; + }, + hideUnlessMouseIsOverDropdown: function() { + if (!this.isMouseOverDropdown) { + this.hide(); + } + }, + hide: function() { + if (this.$menu.hasClass("tt-is-open")) { + this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); + this.trigger("hide"); + } + }, + show: function() { + if (!this.$menu.hasClass("tt-is-open")) { + this.$menu.addClass("tt-is-open"); + this.trigger("show"); + } + }, + isOpen: function() { + return this.$menu.hasClass("tt-is-open"); + }, + moveCursorUp: function() { + this._moveCursor(-1); + }, + moveCursorDown: function() { + this._moveCursor(+1); + }, + getSuggestionUnderCursor: function() { + var $suggestion = this._getSuggestions().filter(".tt-is-under-cursor").first(); + return $suggestion.length > 0 ? formatDataForSuggestion($suggestion) : null; + }, + getFirstSuggestion: function() { + var $suggestion = this._getSuggestions().first(); + return $suggestion.length > 0 ? formatDataForSuggestion($suggestion) : null; + }, + renderSuggestions: function(query, dataset, suggestions) { + var datasetClassName = "tt-dataset-" + dataset.name, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, el; + if ($dataset.length === 0) { + $dataset = $('
                      1. ').addClass(datasetClassName).appendTo(this.$menu); + } + elBuilder = document.createElement("div"); + fragment = document.createDocumentFragment(); + this.clearSuggestions(dataset.name); + if (suggestions.length > 0) { + this.$menu.removeClass("tt-is-empty"); + utils.each(suggestions, function(i, suggestion) { + elBuilder.innerHTML = dataset.template.render(suggestion); + el = elBuilder.firstChild; + el.setAttribute("data-value", suggestion.value); + fragment.appendChild(el); + }); + } + $dataset.find("> .tt-suggestions").data({ + query: query, + dataset: dataset.name + }).append(fragment); + this.trigger("suggestionsRender"); + }, + clearSuggestions: function(datasetName) { + var $suggestions = datasetName ? this.$menu.find(".tt-dataset-" + datasetName + " .tt-suggestions") : this.$menu.find(".tt-suggestions"); + $suggestions.empty(); + this._getSuggestions().length === 0 && this.$menu.addClass("tt-is-empty"); + } + }); + return DropdownView; + function formatDataForSuggestion($suggestion) { + var $suggestions = $suggestion.parents(".tt-suggestions").first(); + return { + value: $suggestion.data("value"), + query: $suggestions.data("query"), + dataset: $suggestions.data("dataset") + }; + } + }(); + var TypeaheadView = function() { + var html = { + wrapper: '', + hint: '', + dropdown: '
                          ' + }; + function TypeaheadView(o) { + var $menu, $input, $hint; + utils.bindAll(this); + this.$node = wrapInput(o.input); + this.datasets = o.datasets; + $menu = this.$node.find(".tt-dropdown-menu"); + $input = this.$node.find(".tt-query"); + $hint = this.$node.find(".tt-hint"); + this.dropdownView = new DropdownView({ + menu: $menu + }).on("select", this._handleSelection).on("cursorOn", this._clearHint).on("cursorOn", this._setInputValueToSuggestionUnderCursor).on("cursorOff", this._setInputValueToQuery).on("cursorOff", this._updateHint).on("suggestionsRender", this._updateHint).on("show", this._updateHint).on("hide", this._clearHint); + this.inputView = new InputView({ + input: $input, + hint: $hint + }).on("focus", this._showDropdown).on("blur", this._hideDropdown).on("blur", this._setInputValueToQuery).on("enter", this._handleSelection).on("queryChange", this._clearHint).on("queryChange", this._clearSuggestions).on("queryChange", this._getSuggestions).on("whitespaceChange", this._updateHint).on("queryChange whitespaceChange", this._showDropdown).on("queryChange whitespaceChange", this._setLanguageDirection).on("esc", this._hideDropdown).on("esc", this._setInputValueToQuery).on("tab up down", this._managePreventDefault).on("up down", this._moveDropdownCursor).on("up down", this._showDropdown).on("tab left right", this._autocomplete); + } + utils.mixin(TypeaheadView.prototype, EventTarget, { + _managePreventDefault: function(e) { + var $e = e.data, hint, inputValue, preventDefault = false; + switch (e.type) { + case "tab": + hint = this.inputView.getHintValue(); + inputValue = this.inputView.getInputValue(); + preventDefault = hint && hint !== inputValue; + break; + + case "up": + case "down": + preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; + break; + } + preventDefault && $e.preventDefault(); + }, + _setLanguageDirection: function() { + var dirClassName = "tt-" + this.inputView.getLanguageDirection(); + if (!this.$node.hasClass(dirClassName)) { + this.$node.removeClass("tt-ltr tt-rtl").addClass(dirClassName); + } + }, + _updateHint: function() { + var dataForFirstSuggestion = this.dropdownView.getFirstSuggestion(), hint = dataForFirstSuggestion ? dataForFirstSuggestion.value : null, inputValue, query, escapedQuery, beginsWithQuery, match; + if (hint && this.dropdownView.isOpen() && !this.inputView.isOverflow()) { + inputValue = this.inputView.getInputValue(); + query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); + escapedQuery = utils.escapeRegExChars(query); + beginsWithQuery = new RegExp("^(?:" + escapedQuery + ")(.*$)", "i"); + match = beginsWithQuery.exec(hint); + this.inputView.setHintValue(inputValue + (match ? match[1] : "")); + } + }, + _clearHint: function() { + this.inputView.setHintValue(""); + }, + _clearSuggestions: function() { + this.dropdownView.clearSuggestions(); + }, + _setInputValueToQuery: function() { + this.inputView.setInputValue(this.inputView.getQuery()); + }, + _setInputValueToSuggestionUnderCursor: function(e) { + var suggestion = e.data; + this.inputView.setInputValue(suggestion.value, true); + }, + _showDropdown: function() { + this.dropdownView.show(); + }, + _hideDropdown: function(e) { + this.dropdownView[e.type === "blur" ? "hideUnlessMouseIsOverDropdown" : "hide"](); + }, + _moveDropdownCursor: function(e) { + var $e = e.data; + if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { + this.dropdownView[e.type === "up" ? "moveCursorUp" : "moveCursorDown"](); + } + }, + _handleSelection: function(e) { + var byClick = e.type === "select", suggestionData = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); + if (suggestionData) { + this.inputView.setInputValue(suggestionData.value); + byClick ? this.inputView.focus() : e.data.preventDefault(); + byClick && utils.isMsie() ? setTimeout(this.dropdownView.hide, 0) : this.dropdownView.hide(); + } + }, + _getSuggestions: function() { + var that = this, query = this.inputView.getQuery(); + if (utils.isBlankString(query)) { + return; + } + utils.each(this.datasets, function(i, dataset) { + dataset.getSuggestions(query, function(suggestions) { + that._renderSuggestions(query, dataset, suggestions); + }); + }); + }, + _renderSuggestions: function(query, dataset, suggestions) { + if (query !== this.inputView.getQuery()) { + return; + } + suggestions = suggestions.slice(0, dataset.limit); + this.dropdownView.renderSuggestions(query, dataset, suggestions); + }, + _autocomplete: function(e) { + var isCursorAtEnd, ignoreEvent, query, hint; + if (e.type === "right" || e.type === "left") { + isCursorAtEnd = this.inputView.isCursorAtEnd(); + ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "left" : e.type === "right"; + if (!isCursorAtEnd || ignoreEvent) { + return; + } + } + query = this.inputView.getQuery(); + hint = this.inputView.getHintValue(); + if (hint !== "" && query !== hint) { + this.inputView.setInputValue(hint); + } + }, + destroy: function() { + this.inputView.destroy(); + this.dropdownView.destroy(); + destroyDomStructure(this.$node); + this.$node = null; + } + }); + return TypeaheadView; + function wrapInput(input) { + var $input = $(input), $hint = $(html.hint).css({ + "background-color": $input.css("background-color") + }); + if ($input.length === 0) { + return null; + } + $input.data("ttAttrs", { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck") + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input.attr({ + autocomplete: "off", + spellcheck: false + }).addClass("tt-query").wrap(html.wrapper).parent().prepend($hint).append(html.dropdown); + } + function destroyDomStructure($node) { + var $input = $node.find(".tt-query"); + utils.each($input.data("ttAttrs"), function(key, val) { + utils.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.detach().removeClass("tt-query").insertAfter($node); + $node.remove(); + } + }(); + (function() { + var initializedDatasets = {}, transportOptions = {}, transport, methods; + jQuery.fn.typeahead = typeahead; + typeahead.configureTransport = configureTransport; + methods = { + initialize: function(datasetDefs) { + var datasets = {}; + datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; + if (datasetDefs.length === 0) { + throw new Error("no datasets provided"); + } + delete typeahead.configureTransport; + transport = transport || new Transport(transportOptions); + utils.each(datasetDefs, function(i, datasetDef) { + var dataset, name = datasetDef.name = datasetDef.name || utils.getUniqueId(); + if (initializedDatasets[name]) { + dataset = initializedDatasets[name]; + } else { + datasetDef.limit = datasetDef.limit || 5; + if (datasetDef.template && !datasetDef.engine) { + throw new Error("no template engine specified for " + name); + } + dataset = initializedDatasets[name] = new Dataset({ + name: datasetDef.name, + limit: datasetDef.limit, + local: datasetDef.local, + prefetch: datasetDef.prefetch, + ttl_ms: datasetDef.ttl_ms, + remote: datasetDef.remote, + matcher: datasetDef.matcher, + ranker: datasetDef.ranker, + transport: transport + }); + } + datasets[name] = { + name: datasetDef.name, + limit: datasetDef.limit, + template: compileTemplate(datasetDef.template, datasetDef.engine), + getSuggestions: dataset.getSuggestions + }; + }); + return this.each(function() { + $(this).data({ + typeahead: new TypeaheadView({ + input: this, + datasets: datasets + }) + }); + }); + }, + destroy: function() { + this.each(function() { + var $this = $(this), view = $this.data("typeahead"); + if (view) { + view.destroy(); + $this.removeData("typeahead"); + } + }); + } + }; + function typeahead(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + } + function configureTransport(o) { + transportOptions = o; + } + function compileTemplate(template, engine) { + var wrapper = '
                        1. %body
                        2. ', compiledTemplate; + if (template) { + compiledTemplate = engine.compile(wrapper.replace("%body", template)); + } else { + compiledTemplate = { + render: function(context) { + return wrapper.replace("%body", "

                          " + context.value + "

                          "); + } + }; + } + return compiledTemplate; + } + })(); +})(window.jQuery); \ No newline at end of file diff --git a/releases/0.8.2/typeahead.js.zip b/releases/0.8.2/typeahead.js.zip new file mode 100644 index 0000000000000000000000000000000000000000..e208bf69474645020991a67077850b51932fb5ea GIT binary patch literal 17220 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 Xz~>EC;E@.HzS6Byi~;0Oc&o?8Fx literal 0 HcmV?d00001 diff --git a/releases/0.8.2/typeahead.min.css b/releases/0.8.2/typeahead.min.css new file mode 100644 index 0000000000..4ccaed614c --- /dev/null +++ b/releases/0.8.2/typeahead.min.css @@ -0,0 +1,7 @@ +/*! + * typeahead.js 0.8.2 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +.twitter-typeahead{position:relative!important;display:inline-block;*display:inline;*zoom:1}.tt-query{position:relative!important;*margin-top:-1px!important;vertical-align:top!important;background-color:transparent!important;background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)!important}.tt-hint{position:absolute!important;top:0!important;left:0!important;border-color:transparent!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important}.tt-dropdown-menu,.tt-suggestions,.tt-suggestion{padding:0;margin:0;list-style:none}.tt-dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none}.tt-dropdown-menu.tt-is-open{display:block}.tt-dropdown-menu.tt-is-empty{display:none}.tt-suggestion{display:block;white-space:nowrap;cursor:pointer}.tt-suggestion *{white-space:normal}.twitter-typeahead.tt-rtl{direction:rtl}.twitter-typeahead.tt-rtl .tt-dropdown-menu{left:auto;right:0} \ No newline at end of file diff --git a/releases/0.8.2/typeahead.min.js b/releases/0.8.2/typeahead.min.js new file mode 100644 index 0000000000..d2f5458478 --- /dev/null +++ b/releases/0.8.2/typeahead.min.js @@ -0,0 +1,7 @@ +/*! + * typeahead.js 0.8.2 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function(t){var e="0.8.2",n={isMsie:function(){return/msie [\w.]+/i.test(navigator.userAgent)},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var n;for(var i in e)t.isFunction(n=e[i])&&(e[i]=t.proxy(n,e))},indexOf:function(t,e){for(var n=0;t.length>n;n++)if(t[n]===e)return n;return-1},each:t.each,map:t.map,filter:function(e,n){var i=[];return t.each(e,function(t,s){n(s,t,e)&&i.push(s)}),i},every:function(e,n){var i=!0;return e?(t.each(e,function(t,s){return(i=n.call(null,s,t,e))?void 0:!1}),!!i):i},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,c=e-(a-o);return n=this,i=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,c)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},i=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),s=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function i(t){return JSON.stringify(n.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return n.isNumber(r)?o.setItem(this._ttlKey(t),i(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),i(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,n=[],i=o.length;for(t=0;i>t;t++)(e=o.key(t)).match(this.keyMatcher)&&n.push(e.replace(this.keyMatcher,""));for(t=n.length;t--;)this.remove(n[t]);return this},isExpired:function(t){var i=s(o.getItem(this._ttlKey(t)));return n.isNumber(i)&&e()>i?!0:!1}}:{get:n.noop,set:n.noop,remove:n.noop,clear:n.noop,isExpired:n.noop},n.mixin(t.prototype,r),t}(),r=function(){function t(t){n.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return n.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),o=function(){function e(t){var e;n.bindAll(this),t=t||{},e=/^throttle$/i.test(t.rateLimitFn)?n.throttle:n.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new r,this.get=e(this.get,this.wait)}return n.mixin(e.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return e?t:void 0})},_getItemsFromIds:function(t){var e=[];return n.map(t,n.bind(function(t){var n=this.itemHash[t];n&&e.push(n)},this)),e},_matcher:function(t){if(this._customMatcher){var e=this._customMatcher;return function(t){return e(t)}}return function(e){var i=e.tokens,s=n.every(t,function(t){var e=n.filter(i,function(e){return 0===e.indexOf(t)});return e.length});return s?e:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRemoteSuggestions:function(t,e){var i=this;return function(s){n.each(s,function(t,s){var r=!1;return s=n.isString(s)?{value:s}:s,n.each(e,function(t,e){return s.value===e.value?(r=!0,!1):void 0}),!r&&e.push(s),e.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),t===e}return n.mixin(e.prototype,i,{_handleFocus:function(){this.trigger("focus")},_handleBlur:function(){this.trigger("blur")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e,t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),n=e?this.query.length!==t.length:!1;n?this.trigger("whitespaceChange",{value:this.query}):e||this.trigger("queryChange",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,i=this.$input[0].selectionStart;return n.isNumber(i)?i===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),c=function(){function e(e){n.bindAll(this),this.isMouseOverDropdown,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return n.mixin(e.prototype,i,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){this._getSuggestions().removeClass("tt-is-under-cursor"),t(e.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(e){this.trigger("select",s(t(e.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,i,s){var r,o,u,a="tt-dataset-"+i.name,c=this.$menu.find("."+a);0===c.length&&(c=t('
                          1. ').addClass(a).appendTo(this.$menu)),r=document.createElement("div"),o=document.createDocumentFragment(),this.clearSuggestions(i.name),s.length>0&&(this.$menu.removeClass("tt-is-empty"),n.each(s,function(t,e){r.innerHTML=i.template.render(e),u=r.firstChild,u.setAttribute("data-value",e.value),o.appendChild(u)})),c.find("> .tt-suggestions").data({query:e,dataset:i.name}).append(o),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),e}(),h=function(){function e(t){var e,i,r;n.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,e=this.$node.find(".tt-dropdown-menu"),i=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new c({menu:e}).on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView=new a({input:i,hint:r}).on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("tab up down",this._managePreventDefault).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab left right",this._autocomplete)}function s(e){var n=t(e),i=t(o.hint).css({"background-color":n.css("background-color")});if(0===n.length)return null;n.data("ttAttrs",{dir:n.attr("dir"),autocomplete:n.attr("autocomplete"),spellcheck:n.attr("spellcheck")});try{!n.attr("dir")&&n.attr("dir","auto")}catch(s){}return n.attr({autocomplete:"off",spellcheck:!1}).addClass("tt-query").wrap(o.wrapper).parent().prepend(i).append(o.dropdown)}function r(t){var e=t.find(".tt-query");n.each(e.data("ttAttrs"),function(t,i){n.isUndefined(i)?e.removeAttr(t):e.attr(t,i)}),e.detach().removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:'
                              '};return n.mixin(e.prototype,i,{_managePreventDefault:function(t){var e,n,i=t.data,s=!1;switch(t.type){case"tab":e=this.inputView.getHintValue(),n=this.inputView.getInputValue(),s=e&&e!==n;break;case"up":case"down":s=!i.shiftKey&&!i.ctrlKey&&!i.metaKey}s&&i.preventDefault()},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,i,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null;u&&this.dropdownView.isOpen()&&!this.inputView.isOverflow()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),i=n.escapeRegExChars(e),s=RegExp("^(?:"+i+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="select"===t.type,i=e?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),e?this.inputView.focus():t.data.preventDefault(),e&&n.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();n.isBlankString(e)||n.each(this.datasets,function(n,i){i.getSuggestions(e,function(n){t._renderSuggestions(e,i,n)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null}}),e}();(function(){function e(t){return a[t]?a[t].apply(this,[].slice.call(arguments,1)):a.initialize.apply(this,arguments)}function i(t){l=t}function s(t,e){var n,i='
                            1. %body
                            2. ';return n=t?e.compile(i.replace("%body",t)):{render:function(t){return i.replace("%body","

                              "+t.value+"

                              ")}}}var r,a,c={},l={};jQuery.fn.typeahead=e,e.configureTransport=i,a={initialize:function(i){var a={};if(i=n.isArray(i)?i:[i],0===i.length)throw Error("no datasets provided");return delete e.configureTransport,r=r||new o(l),n.each(i,function(t,e){var i,o=e.name=e.name||n.getUniqueId();if(c[o])i=c[o];else{if(e.limit=e.limit||5,e.template&&!e.engine)throw Error("no template engine specified for "+o);i=c[o]=new u({name:e.name,limit:e.limit,local:e.local,prefetch:e.prefetch,ttl_ms:e.ttl_ms,remote:e.remote,matcher:e.matcher,ranker:e.ranker,transport:r})}a[o]={name:e.name,limit:e.limit,template:s(e.template,e.engine),getSuggestions:i.getSuggestions}}),this.each(function(){t(this).data({typeahead:new h({input:this,datasets:a})})})},destroy:function(){this.each(function(){var e=t(this),n=e.data("typeahead");n&&(n.destroy(),e.removeData("typeahead"))})}}})()})(window.jQuery); \ No newline at end of file diff --git a/releases/latest/typeahead.css b/releases/latest/typeahead.css index 1fa961b00f..2551c21de7 100644 --- a/releases/latest/typeahead.css +++ b/releases/latest/typeahead.css @@ -1,5 +1,5 @@ /*! - * typeahead.js 0.8.1 + * typeahead.js 0.8.2 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ diff --git a/releases/latest/typeahead.js b/releases/latest/typeahead.js index 93d1d8431c..5bd00d1f2d 100644 --- a/releases/latest/typeahead.js +++ b/releases/latest/typeahead.js @@ -1,15 +1,21 @@ /*! - * typeahead.js 0.8.1 + * typeahead.js 0.8.2 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ -(function() { - var VERSION = "0.8.1"; +(function($) { + var VERSION = "0.8.2"; var utils = { isMsie: function() { return /msie [\w.]+/i.test(navigator.userAgent); }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, isString: function(obj) { return typeof obj === "string"; }, @@ -18,9 +24,7 @@ }, isArray: $.isArray, isFunction: $.isFunction, - isObject: function(obj) { - return obj === Object(obj); - }, + isObject: $.isPlainObject, isUndefined: function(obj) { return typeof obj === "undefined"; }, @@ -28,7 +32,7 @@ bindAll: function(obj) { var val; for (var key in obj) { - utils.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); + $.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); } }, indexOf: function(haystack, needle) { @@ -334,7 +338,7 @@ this.limit = o.limit || 10; this._customMatcher = o.matcher || null; this._customRanker = o.ranker || null; - this._ttl_ms = o.ttl_ms || 3 * 24 * 60 * 60 * 1e3; + this._ttl_ms = utils.isNumber(o.ttl_ms) ? o.ttl_ms : 24 * 60 * 60 * 1e3; this.keys = { version: "version", protocol: "protocol", @@ -377,12 +381,15 @@ tokens: utils.tokenizeText(item) }; } - item.tokens = utils.map(item.tokens || [], function(token) { + item.tokens = utils.filter(item.tokens || [], function(token) { + return !utils.isBlankString(token); + }); + item.tokens = utils.map(item.tokens, function(token) { return token.toLowerCase(); }); itemHash[id = utils.getUniqueId(item.value)] = item; utils.each(item.tokens, function(i, token) { - var char = token.charAt(0), adjacency = adjacencyList[char] || (adjacencyList[char] = [ id ]); + var character = token.charAt(0), adjacency = adjacencyList[character] || (adjacencyList[character] = [ id ]); !~utils.indexOf(adjacency, id) && adjacency.push(id); }); }); @@ -394,9 +401,9 @@ _mergeProcessedData: function(processedData) { var that = this; utils.mixin(this.itemHash, processedData.itemHash); - utils.each(processedData.adjacencyList, function(char, adjacency) { - var masterAdjacency = that.adjacencyList[char]; - that.adjacencyList[char] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + utils.each(processedData.adjacencyList, function(character, adjacency) { + var masterAdjacency = that.adjacencyList[character]; + that.adjacencyList[character] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; }); }, _getPotentiallyMatchingIds: function(terms) { @@ -531,12 +538,12 @@ }; this.query = ""; this.$hint = $(o.hint); - this.$input = $(o.input).on("blur", this._handleBlur).on("focus", this._handleFocus).on("keydown", this._handleSpecialKeyEvent); + this.$input = $(o.input).on("blur.tt", this._handleBlur).on("focus.tt", this._handleFocus).on("keydown.tt", this._handleSpecialKeyEvent); if (!utils.isMsie()) { - this.$input.on("input", this._compareQueryToInputValue); + this.$input.on("input.tt", this._compareQueryToInputValue); } else { - this.$input.on("keydown keypress cut paste", function(e) { - if (that.specialKeyCodeMap[e.which || e.keyCode]) { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (that.specialKeyCodeMap[$e.which || $e.keyCode]) { return; } setTimeout(that._compareQueryToInputValue, 0); @@ -567,6 +574,11 @@ }); } }, + destroy: function() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$hint = this.$input = this.$overflowHelper = null; + }, focus: function() { this.$input.focus(); }, @@ -639,7 +651,7 @@ function DropdownView(o) { utils.bindAll(this); this.isMouseOverDropdown; - this.$menu = $(o.menu).on("mouseenter", this._handleMouseenter).on("mouseleave", this._handleMouseleave).on("mouseover", ".tt-suggestions > .tt-suggestion", this._handleMouseover).on("click", ".tt-suggestions > .tt-suggestion", this._handleSelection); + this.$menu = $(o.menu).on("mouseenter.tt", this._handleMouseenter).on("mouseleave.tt", this._handleMouseleave).on("click.tt", ".tt-suggestion", this._handleSelection).on("mouseover.tt", ".tt-suggestion", this._handleMouseover); } utils.mixin(DropdownView.prototype, EventTarget, { _handleMouseenter: function() { @@ -679,6 +691,10 @@ _getSuggestions: function() { return this.$menu.find(".tt-suggestions > .tt-suggestion"); }, + destroy: function() { + this.$menu.off(".tt"); + this.$menu = null; + }, hideUnlessMouseIsOverDropdown: function() { if (!this.isMouseOverDropdown) { this.hide(); @@ -759,30 +775,20 @@ dropdown: '
                                ' }; function TypeaheadView(o) { + var $menu, $input, $hint; utils.bindAll(this); this.$node = wrapInput(o.input); this.datasets = o.datasets; - utils.each(this.datasets, function(key, dataset) { - var parentTemplate = '
                              1. %body
                              2. '; - if (dataset.template) { - dataset.template = dataset.engine.compile(parentTemplate.replace("%body", dataset.template)); - } else { - dataset.template = { - render: function(context) { - return parentTemplate.replace("%body", "

                                " + context.value + "

                                "); - } - }; - } - }); - this.inputView = new InputView({ - input: this.$node.find(".tt-query"), - hint: this.$node.find(".tt-hint") - }); + $menu = this.$node.find(".tt-dropdown-menu"); + $input = this.$node.find(".tt-query"); + $hint = this.$node.find(".tt-hint"); this.dropdownView = new DropdownView({ - menu: this.$node.find(".tt-dropdown-menu") - }); - this.dropdownView.on("select", this._handleSelection).on("cursorOn", this._clearHint).on("cursorOn", this._setInputValueToSuggestionUnderCursor).on("cursorOff", this._setInputValueToQuery).on("cursorOff", this._updateHint).on("suggestionsRender", this._updateHint).on("show", this._updateHint).on("hide", this._clearHint); - this.inputView.on("focus", this._showDropdown).on("blur", this._hideDropdown).on("blur", this._setInputValueToQuery).on("enter", this._handleSelection).on("queryChange", this._clearHint).on("queryChange", this._clearSuggestions).on("queryChange", this._getSuggestions).on("whitespaceChange", this._updateHint).on("queryChange whitespaceChange", this._showDropdown).on("queryChange whitespaceChange", this._setLanguageDirection).on("esc", this._hideDropdown).on("esc", this._setInputValueToQuery).on("tab up down", this._managePreventDefault).on("up down", this._moveDropdownCursor).on("up down", this._showDropdown).on("tab left right", this._autocomplete); + menu: $menu + }).on("select", this._handleSelection).on("cursorOn", this._clearHint).on("cursorOn", this._setInputValueToSuggestionUnderCursor).on("cursorOff", this._setInputValueToQuery).on("cursorOff", this._updateHint).on("suggestionsRender", this._updateHint).on("show", this._updateHint).on("hide", this._clearHint); + this.inputView = new InputView({ + input: $input, + hint: $hint + }).on("focus", this._showDropdown).on("blur", this._hideDropdown).on("blur", this._setInputValueToQuery).on("enter", this._handleSelection).on("queryChange", this._clearHint).on("queryChange", this._clearSuggestions).on("queryChange", this._getSuggestions).on("whitespaceChange", this._updateHint).on("queryChange whitespaceChange", this._showDropdown).on("queryChange whitespaceChange", this._setLanguageDirection).on("esc", this._hideDropdown).on("esc", this._setInputValueToQuery).on("tab up down", this._managePreventDefault).on("up down", this._moveDropdownCursor).on("up down", this._showDropdown).on("tab left right", this._autocomplete); } utils.mixin(TypeaheadView.prototype, EventTarget, { _managePreventDefault: function(e) { @@ -808,11 +814,12 @@ } }, _updateHint: function() { - var dataForFirstSuggestion = this.dropdownView.getFirstSuggestion(), hint = dataForFirstSuggestion ? dataForFirstSuggestion.value : null, inputValue, query, beginsWithQuery, match; + var dataForFirstSuggestion = this.dropdownView.getFirstSuggestion(), hint = dataForFirstSuggestion ? dataForFirstSuggestion.value : null, inputValue, query, escapedQuery, beginsWithQuery, match; if (hint && this.dropdownView.isOpen() && !this.inputView.isOverflow()) { inputValue = this.inputView.getInputValue(); query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); - beginsWithQuery = new RegExp("^(?:" + query + ")(.*$)", "i"); + escapedQuery = utils.escapeRegExChars(query); + beginsWithQuery = new RegExp("^(?:" + escapedQuery + ")(.*$)", "i"); match = beginsWithQuery.exec(hint); this.inputView.setHintValue(inputValue + (match ? match[1] : "")); } @@ -852,6 +859,9 @@ }, _getSuggestions: function() { var that = this, query = this.inputView.getQuery(); + if (utils.isBlankString(query)) { + return; + } utils.each(this.datasets, function(i, dataset) { dataset.getSuggestions(query, function(suggestions) { that._renderSuggestions(query, dataset, suggestions); @@ -879,6 +889,12 @@ if (hint !== "" && query !== hint) { this.inputView.setInputValue(hint); } + }, + destroy: function() { + this.inputView.destroy(); + this.dropdownView.destroy(); + destroyDomStructure(this.$node); + this.$node = null; } }); return TypeaheadView; @@ -889,6 +905,11 @@ if ($input.length === 0) { return null; } + $input.data("ttAttrs", { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck") + }); try { !$input.attr("dir") && $input.attr("dir", "auto"); } catch (e) {} @@ -897,6 +918,14 @@ spellcheck: false }).addClass("tt-query").wrap(html.wrapper).parent().prepend($hint).append(html.dropdown); } + function destroyDomStructure($node) { + var $input = $node.find(".tt-query"); + utils.each($input.data("ttAttrs"), function(key, val) { + utils.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.detach().removeClass("tt-query").insertAfter($node); + $node.remove(); + } }(); (function() { var initializedDatasets = {}, transportOptions = {}, transport, methods; @@ -917,8 +946,6 @@ dataset = initializedDatasets[name]; } else { datasetDef.limit = datasetDef.limit || 5; - datasetDef.template = datasetDef.template; - datasetDef.engine = datasetDef.engine; if (datasetDef.template && !datasetDef.engine) { throw new Error("no template engine specified for " + name); } @@ -937,8 +964,7 @@ datasets[name] = { name: datasetDef.name, limit: datasetDef.limit, - template: datasetDef.template, - engine: datasetDef.engine, + template: compileTemplate(datasetDef.template, datasetDef.engine), getSuggestions: dataset.getSuggestions }; }); @@ -950,6 +976,15 @@ }) }); }); + }, + destroy: function() { + this.each(function() { + var $this = $(this), view = $this.data("typeahead"); + if (view) { + view.destroy(); + $this.removeData("typeahead"); + } + }); } }; function typeahead(method) { @@ -962,5 +997,18 @@ function configureTransport(o) { transportOptions = o; } + function compileTemplate(template, engine) { + var wrapper = '
                              3. %body
                              4. ', compiledTemplate; + if (template) { + compiledTemplate = engine.compile(wrapper.replace("%body", template)); + } else { + compiledTemplate = { + render: function(context) { + return wrapper.replace("%body", "

                                " + context.value + "

                                "); + } + }; + } + return compiledTemplate; + } })(); -})(); \ No newline at end of file +})(window.jQuery); \ No newline at end of file diff --git a/releases/latest/typeahead.js.zip b/releases/latest/typeahead.js.zip index 332b65e5a920f7c7a3f84727ddd76ea7bf6ab318..e208bf69474645020991a67077850b51932fb5ea 100644 GIT binary patch literal 17220 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 Xz~>EC;E@.HzS6Byi~;0Oc&o?8Fx literal 16419 zcma*OW03FeoAvu`d$(=dwr$(C?cH|w?(W^TZQHhO+wMNU|2$8f!Ks-uNhP`SBA+Ws z0oMTVQOeXXXQ+Rx0IdIt`FEzVv-AJNj8WNeT3|r% zol&QOhmDWe50>6=%*GiPFdIkV`T|J-z9^~Xq!rXOAiSYB=>ll>EEb9L{Smp)iMrnNY>O>oOs?p9G&PTQF!v(slg zg4rj8X1rSuYHGcxKw-&xG)-k|<{%0t6-4TzyXi$fX27t`Y3_Y;YYmvC68@VcBUrHe z_ZmS@VS&oFt&v%tVyyAEy)pr%1kpqYmD--+s&~X{my#^>!rE>hjMno)-u8En98+-7 z{O+MtdDA0}T@nj%Ei0zRJUE<#V6u&Z7J+dlgaq)Or_78syN)_ZnyM|d&AOczuzM*j zs!r`G8Q9DPqmy1GRaGX9W?t}oc0n5p?TX-oVr#JZC9qV8Sa&_2NQ?q?4N`^@B$Zl# z`}X|c;4j_0-uTcvzfY(doMovR4;1`B=F@~TGcOa>Ij59!!Q91LXk`bjPP(=u%g&E9 zt!XE_+sm(0Ga^2H{Yb8l?5PIPZ%q(>&5UcqI;&2_4k}%+2x**^Edj?6}`@aoidKbqdkepyQj3kp6c+gw1%fD`Xn0f*6 zhUG(adtF0z<}sA^-sMzn=nD|Kki8;{9^pWQ*;2sfmBujM0f3k?Uw_x$x;? z!C%=Vlf~xlxXI3#T9|a;kz$!wnO}8uclQ4PBA`qllCa#|%<_{MMgjUw02x3af$QJ! zqWUPixM?HOj&x@9o);@u?4P|oG_Sf~bG~qJFj1*#Yrf#w#%EXEP>i_b2ovy>os^M5 z)uF>W*Fx^z6E$s`CHa`2Dqqm3A!6Eqq{>1cRXlFCQCxZMJvU)P7pX;)uTDP=G$dh$216oA&l3Vr~@kv7nVD zozfhihnBEl+!Pcw9|ArXo;7e7Z;;<^g;{Y6+EFlv3* zk2xyc1eMh7l(-|Z>Ea9@4j;)MaC9IN2&j;CbinI1!TSJyzQ_+4JxYj%tq=$Nr5S%i zXHd7lR~L&{os|7KS(bmMNC-ld&ZDGt*-Y+KqWA62m&AaKv!V_gH3bjPVS5s70osq~ zbL{F&%RF}dW%k2!Ly0r^;+(FVfGC&#Ucmm3?itsX0paILGHpZW*-V~fuyQ8$snp^| zry#A<-E^^fGijc-4ucIc$}ju^iNsk0C0Q&*`jpb6Gc)ZPghPXP-7c(1LumM!CThj4 z%VFqU5oOzuEfhD~8RC01OunocCIhr-okPQf%Ay!c_$^p*X;G}{{& zFVnksTpvjZ*C;tyiZt!$Dfyn-COvjTQKG#>geNCQ&49F`wy~xgFt&3FoUpJiLIw-D zUtIfWM&JPF1-1P+NtZ0MDU$JJ>$=hT;j{w@yTmHdwh*n&)Hp)TXUx$rk%RW}bIByN z6b_iZo+~UF`lLfjPehJ={=X~Nvvb}6D7KKeeDw1C-PZ71Ld}Qg_3PX};x_K-c5H95 z`CP=_eKICKd>!>CYARV^m$bANOwTIl7y&wkOKmhT^C>%$jb($XYIaSNYb>WJ*Oxe?0pK2l)deMh zL{NzElsR3^uQ#`bdV;kJNKw41g-SpU>UcuWoMMteRY9}4jQ!=7N zPsoWJm2VAN2~0!REd88j&&B}(`+$<3aWcMW!WWs}_WCzQB{=Uz))yrW%8H8NdJ_GF zwIZ*ib!x(bSE9MBlh2(roVB{2V^Ib-MBt}U)tA%b_69*K7lVi_C;h|Tkh|WrvQL~e zKCq!8nrT~|qokkz_43b5wSar(fDdwvJd81G;L>z0zLGBfj}ktfyDe3@jglklCJ_l} z)1!!4E%ZI5eECR4eHTKdAXp8Z?%a^q!V8vV6-t%neT_fRh>l7Azxf1G13zIi8Wl5{0TGR`_ewDj?PB41T9E3 z%S3Rn+(hI!&5etvW0;7+pS@A5m04nMD-R(#7W8U(8{qroCd3r@tslI0#R`{PkiZM)v@}C~`n%%61c*G_>rz(V_9T}i|lUHB<@OQKn zN+d18%j(5hpD$}q5uT=ofWBe5_sv;=+ zDjr&7ct!&Kn%oka5JH-0m8x8N5p#9{QH1{a}Yl?-U=@YMame5CU za83qMwLJo?#rMpZ?9mc5+JsyDS376#^i;1gNUZEFIj3h$ccgpC^lE(tXuWq(tactu)f02HI%Y{wS-y1+yt1+?)yi^ z$YFd&l%C$^2v@N{8+{+TYZYm!5BzR2km= zggE3$;3Z$C8CQPj%QliV!XFk(T7T7(U=pIlQZH*0nC>9u8H$a`5Pp9e8hzq;nlL)n zc3yC)C#2r@R=!VHG?ucP9>qj9EfiOsO=Dt7&9boo&qR6aTL@uNFrvJ`ccnDcEI5pp zDS{=(*+{QMHO?<%r%s|2*g|KPKZ1n6UI%9suV{9smMjUWE%^&PyKE)ur<`AeuA zv=Bj;?ZRV{+*OvMb$3Ty^rFcK(E-Qn+Qz(#;LUM#>9DbW&Wn*pzd^u})CX=(L|?Nt zJguG!re=z_{y8!-KU%G`2@k0kPd9=ildtdiVTd$k&bPHyId3PPt!@+mY1P})9944? zr+3)p`>-$Bww(kPpP|sf(x7pofBm$CEge)q^GEOT`f+kLC2IzfrE`z$>p0KxeuVp_ zex z$fad-KqLLLmooUxuEWBEk#euq73IFbHFGQ^_8P;Im$*0B z7Eiyl&M=(tdr3{}gB@L)U23Ugs9%_?-PQ)rwgp>>z668xgkWI^Vzzha^O#iNRSidz zc$vTOY5WB*ArU5sKlO!SP9#XzNB2~AyWyfTtp;-R2kns;S%o0U1Y!FRDJ3P^f@Q1o>-5_YSuwq;Eu_T7k{Mo=dF<1G&zUec$*iv8*Tr*y=1thE}>exBSWd zGAeCXdHf1l<&LXVD?h;_qKJYnqI^!DW41X=;LTF-fl2qXPztrQn&mXVybRMp;UgGR zt*>Pz>Im1EeVfaR2+Ukg3N&$4i(N*MDJ#ak$pjTT zd(B_0)jSpYfR(BUKe)EBR_y=QmAIYR@cqfe=7ygZoX3GwaR!|EC^A+~=~sY6rG-68 za666fqu|0$_8~ztJK%sh-$XvlBZZ*`p@mGQhRqduC9NoOeaoF+#{ zV0LgSL^ed&n$oh1X><)eFM%s7jDF>Q+W9e}%GQw?~zwdaJ>OLSlcM4Q85FY;z=B#0vNATSn& z_&r5J!!d9hNKI?ilS;a!=K7L&2l(;W$095X8AFzn)?g|{(ww2xV=dWcId{Iv_`H9r z4i&N~FJ=QA=zr0`Pzo<8aAi;FU}o5_;U^Lbw%C<$;nDXNKkSL_J}&bCa%2*wKH zq>=y16IoE%pXZc*&^g8lu=A~BFjk)ZPKRrc7w;EhUc15~n6Y|(%w@dKy(yiFK>Q^^ z<0LeYi0#)lWg2|h7;NrBv4`RaYrUw8!tJU}1u8TRo4hG;JLF9YY&P_&NWC6V!z_Ql#qahFjk>%8uFpb@rPdFrI}2^+NdB;612Y+ z7+0wjkjn$GTm;MjMfZ+5Xs4bDXSzV%k{NiPh>-7)F(oDkUC%}BW8x{QCQ-76kxth} zCmM!^txJ1b;L_q@5&KwFS^VM1_w7mPEqr^gBA$5=JPOkkdU`0=*`T7=_CUp(=dSDl z0M&Fc-B4)~ue49xHUpPakua)2jH$*#s^Lyq^{_F4+XeJdsc;Pcb?J~(8)O`;^t1Q_ zbmG0izrj8z>}#+(h;w)xyBDH+MhGueg9r<;e$z+N57-Ie z^-dA0>1DdsujONA9zRNoBx!qJEqdOJl;qcLnz75vq6MrUKmLN>;&V`5d1jaf&4gyK zgOj20wiu_jgIGm@Q^NxvvO!zS;KpoSXfCufd7|Hl24~wCm8-0=r5Ood4%l-?AhMt% zT6Rs3VxG~%$s4Q%a{Q?Pq@UPmf&?$Z76gZg>b9r~^Dpli{uxA{<-i%(+ciiBBpA3@ zM4K4vV8q*Y5#9U2Ns+8raok}ZNW14!(!B&cMq!Xr&p6A;REtQc5*}e&-)yTHZ6S_`|-@57Ou!VyefFB=`g!ctZv}UdH{Po46EE4@%no_gnl9&tq zw2jBlE_1ozCrJH{&uQ8M7q$Vi5Oa_#jNOz3F6@yTGDocSrq-I0$pf5D22s^;%NC}Z?`{Iw6X zAhoV&)HvMtruajjLdwz7)iP5j)BR0h7w*;3ugNXoG9VU*5lLZ99k*h8@7Vx8wTSX% zg{}0BX*uzrG>)A%ojv}{8RdIfPV9l=pxkE?b=+GHXU8@eTKA%L%*MTtFa^WdrDw{N zA-n6x@fV_oZIw6GZu6elecX5Rj)dDQF4iTJsz#(~a^eDCq&x3)-X`NHYDLY`h{2Vi zrd$=#%q-cFFe=f^baXqF#m5yW?C)-%Z;srhd%vu*Im-EV5`)&7d5F{&%6oxK)#1|i zP&c9WN0vhyaV4WAND+7LI5~iK7A8jot~Tl~u&wD9@+0Ybe=t+ibU<`YawzlqxQK1) za75rlsMoV49oy87x+XDwP_IC4;6p;5P}9*cm}8h+iq}k?lEd20Za|s(z0=mRKd_Nw zL_29?G|{(PQrxrqR7F2*`pBGw>{e*!=;4WnmatI^4);bfS;_ksODx{>+Nfl;g3%LD zG{N+jcU$Q68Nxtld~CKUnVBeC^fX|psU(ovlH#03e1W$Y*XB5~uH!ZLRg#8f#l(k{ zAW#o?;OGc+2;AcZghPHjh=wt<5e}dR4tZ?vkXu04O4-v6Tk0Dy)w4p|Os#FFz#JQpGpT`3|$b zP@MLZR(S{+)&dy8gIa)VM3@1WR+lZ|okvkH2xFEyk?kOM<*sxt@hRnYmjDYHBUx6V zvlfl0IC#_E21R9p=dD1VDAa?U+8cep6R=sIsN+SIoBjF_-3b&md1}v~0e{3z5V8VK zr@zckpUYs{xs#vra$4rQBUir|=G_73z^|vJ=d*sV2+Jg6rRd5dbW0(2=;b7b5?0}29k(g(IXiNE%8n?_KFot$AM+Ydekf;^ znms4ao_*z;1{g*v@l%yP8;L=hU*((2z)dM)BcibaNA{|_kpAPVGgySGqZ80SomTo7 zsLly`P}M|T3{?4hVP1EQfu7r7+Empinfb9d&^ z;zO{A9eV>KxLjyE-Lz(+I2N!Y1`M5Z*OaMymmsbc%ZWUsO~CDyeEm0#D&o#gd+&K@ zKF@g}Wn9v|8USsPlJAYGC6=`2{S!f*e31F`;8FY^?8g+WXmI{3^Oq0g=5 zmhr7OjIzC(0_~IbD8r~q6mcediRX*ucpk7Li5IOgd#Ph2c2%1PgA8;5eAhfGN-NtN zwax+zLgISjlY*!wa)xM3T= zoP2h`hqD}T>=~9)oAXNjJ1a}=gUntBdM0|-lWzy+fe_{~7f==l(#yi0L>i;?YSKp9^8qRhjFpz{iN` zuOERT?$CnW*{G4ifU%PzLs2nZ^I5kA*uUclXAPM=LeZo8j?nTALm@up-#*n=wLAX# zQ8TyqTFM$zjt{nTt$1s~{0#%mik0kBG4fZ~ZAr`PgEB=dP(qDwn9q%IQ*ZG z(u&{L0jRHa1!b9JV#a})!hsPBxO(aP@@lu@kf1l59-E`~^UxUT1Oj3W#tr1kJK$-4 zkG<4+1!l;7zB7n9d$KA%>zE|wraSayg2MEl>am|xEzCu9hSn61C4bEfaP*f-L|zc)XSHqqaxuV%IY_`!qfO7{$9x>`lyagEjI40TMv7viX?gzE%&>fU+hx6pr41OL2 zr2>aLHjbXV{EZUr$r9}t?=;r7``QoRpDCV{;`S>!z$K1Gd$7YM*r6W>;}RK_UI(>t zCQlo;3O{PHeUI~&sW1VhjsHfsRc(7o2TDgf8J`#QK7Fa>lmEQE&}?f>po6~wdW0*P zd3?UWWJ7n6Q-l2M{~((XHA-BuOCJ=G;&EiCqnyZd=7Xj5a~FIEI-bLND;r7>M+)OY z-r3<1vCge6H^w!9zs4VknuROq^u^bKZouXgvt!c(UNbddj`H(yw;F9ROzSL{r2;_< zeH8RxiOaxyzDDzn?cE%3q8#$Pv0R*o>u8qK7O}0&-uX$`kkDmNIHJhw2wdaOeo<3f z@*JbP11oC9K{!tctip+mViBZu5nM!bv2Hm2KSPCmX@Rg6e#3 z2;8u_giFop8jVeBiQE%^vtIxHTRBqbdVk4^Af`u<;(gGYn#nlC#&f=V)b+MJ^G=o} zx*=;q`cbn$G!zwg`r$4=#I$u>o+Br#L2<4&#W`DZ;)c611ezj&+o^ym8)ocKvg`yp zY`5f;#oTjzs;ihwi=^!7hQwNs)=1NXvPJlaA5(dR+8U8cRMuIP9t4$St|O-@oj)D? zSX_~Yb0)p&q})vV>R?62C&wOvrV%sy<95y(XQ&qOc+geTxwUP#syC5BqQaw$GyeR% zM9z0R5#S+$$!?KB#r~}mMP}M#YL2i@?-t`-W7^vlhi}XX1EGYu#>q!i-Zon9=TP&N zl*d~8%V`I$)H_txF6i8h8N?eLbQPZ92+ptVywvJ`HF_#d!+n#C0p%8hZOql0-m20( z;E2Dq&y;64mn;)vhIj_%h+(|7rixaD!JVwPqxvVCwIat92>0bcTuh!N#jMTz&uo^D zcURrbA0H5W+pjLEK3>vY*%Bt_nqR8d$>#5Coe^F+moj)+`K1%ZedPQS#XFbyxhvUk z3`ov*!HF@RRD2Ph{W#SN@^PeQe?5$DuN81fiY6|1f1)~W3@+c`wPAIP^S{y+%XoPV zf9bD@4d2Lh7@Z6jhPh@Q1YK?l3S;O>CW}{w&D#xo+#BNnTZ>C_foE%E*FbzJ)VEg{ z1^5gkuX|1+cvxi0$UB9@%fX<}*W^(YJ$@T<4ff##bNpGGAo61uNx!hWK5g@i-nNh@ zwD|1w0i=Mp8C-KHmt5HzwR{ZzzSZzdT<_dW-Qwv(kus7LH|j9EHc`^;s=DA;qFKzl z>0UEANtl_c)rN9%^|+t)Ey?Rjt%l)^KG(o>k$kr8wZ1q2S*wlX7KT|)*y77j7{4o} zn;6h8n!NmLbm)UBplw$}=Q@UocslvpP|n9CwWeh(Z!;flt{1Px?{Lk+{DG&{w0i(= zGeGJ6cg8aZ>tXyQFC^^v&CE>Wi|HgU+QoffGON_?32U7chXd;30PwsCDzujh?^jN5nVVuI!nSsyA> zDNJ+L=-0wyJ8>{*MxOftE~Y8N#$*Eu;s)hrLhSu?=s zDfN)BD=f+P{xD>xm4y2@RM08#MTOXMLB$1wtr)CU8Jb#1g>2f1BE5tO0U~Mb>db~7 zBypp&D%Zj~>CM5lL%qBj|I~4MyH#DAMH$DD)5facMd0c$ImBtM!un7*j$(4KU~&_k zTYvG@wDbO!*>ohVz16s1V#`QHm)s|kn0Ln9MGPCdn&XG+MfDQAlV%r9@s%8locdQs z#VXpK?ajoclQz@?Op~1<#Q8_I#|k35K4@oqo=V&LLlrzokYnQ3LAjK@&1GC=dC6SJ z6T5RzSe<;7su=0;9=UxDCC+_idGAA zu3fwhP8aOrIoz)V?h?rMSNm^UtAh592m8OVLWIm`xGcgQ@0*nt zj8x~ROfRWp(0L!S_8_K80RqM~}1EI8TpY*qPlD zzZX*^O^O<{oaNALDQ*kXvXGPRgjQrUc3NawV-K~_?j64VInMaW--TD^L|L_b8>eEj zXW6==KbkOQ^g&J5%{z?4r%5jp-R@Z!Ju_PCRWjVFwycZ!&&>TtK^K&5ZQ;=`I$YOp zKwh|yH$VTy?ZfmHPVx4S5y$`(0Koh2tq!)9c69$gjvrr@4Z95n*nb>9rSKrl1oc^4 zhWwlxwO|%?Rj2TyXx7#VqO$oJt%Bda^$SIE3&ZmJdwYbxC^@tBWLA?D%>@?;OddxX zNZxU#yc@~t`C<;F6t~b6BV=W)MM3HKP#!z!Ex1d{(^of4zGJs8IhmVTOb3G#V9UTq zq*xAB=8(8@>ZDbF-w~`W-IIk6CQ3dMOvCSMN9iR9C34OFUc}WY9nL2?4PBa|*p| zR^z;xyqs8BoNKLJ4V0%c?-H&mt5$Q33xC;|u@ZYT(TQyfFQrxNbnDFeq5|h^c1p0# zpU5S2MDBzGRyr6W8?GmaW$g>(KYM51v6Y$C(E$KC2><~1fBvBUXa7tgkG1m#$Df@S z^--EQp;!W~^tP^zJfVtu&&@-!wMnvRJzY*bbXh?pB?gX6o<$vYswZPE^ckcw(YH8%Wlp@cNr;b)8CKe{%r?kCY&!pU$#oHCYO{-JVFP&$o60b2_Q-eZPc%8;OP)4IoJIabC@us zsPiXdwA!Q$vaQIC9?khW;Nty*5UJTUR5};bxawY+d08;%OTHMTF zaPO$Nk;F7u=5ci=-)VCn7U)%^+gs|~1n^J;z6JP$vxHd^U68(4VYV?eygho&dYNU9 z*u+yPx|+$;Ks+#CQVe3ERb_ny@WEeUJe${p>*#%q1USX*MMJ*i(}@v7lqY`hT5y2P zJi~O8v>A6zu}7Icod$lcw0;?Ka-ML5cDRpmhnX{V$+zE?rJti~H{9=Dh)pD&nLVVd zAe>mZaee}5k7QwTTH1g;ED(j&Kp=1EKZ&|DD>CsUa*<1RAXW;%=yf2|MonaX9Ir%w z4ePheUcO^VTCY4O!v>JW=A+4mz&2)m$bHce&|s*pyn%2?IU(hYIS@yP6E28Sm2oRvN9eq(EN<=JKqMT6C5J=cC^5sC5G9!LW(;!h<)}ghLgeFdS zCC)v~Jcz4h_Z*fo=psUOW13&Fg|&;of7_KmD&Ybvyw#+8V{xIRm=qWYM`@}UnH{Ii z3J^hjb;$R(aDSRcTN>kEq>w>UXC)fFNFR~>YxXUh=nR~{L!6%F-(PffSEW6<;QB^w za|x5)GCpI`W{?HH2v9bnC4VmO69F(-D&cejem|@{Im0VhsNsB-BFC25O|&lr6APf) zv(pq9yRzB#x}(JP6-6xOIfJK@G`{f1O`xTVM&Qd3i*w~jHtkHluLybtSUV(V=!opw z@DQu`(2>=h?2J_RG*p5*WP-$YoN`0=wA53=sc7RHeW(F{|G4|t%QE^>hwK! zzBlalhr6(`M=r@SZ)#6L4n?So?z^ePLqAV@TRTEm&ujPF;^G?bT7Zm#cky{ln)IL+ zNgyY9g5mXH_g$ig4um1D55SyweSUJ=)hW&|S>pVRo0_L~E?nQHOTUT7eK@#`ZRee> zr<2Qoo{UbM!0mVdv{Q=ti0HwbNCnaD@#=ywU_#BBf9A;`fnuOwt?bPI9MsiGo3*?a zby{JhIazDp5pdisPpk1z&T(Xn#w+l1m_Hz+KH(JbN}X73ZQQk5PWI$Cr`&K`P)oUmc7@#a+$Sd zCFGe-e>(C~lXH?`I}KDNZ}`&(j+Dbm6*wtw&3a;yrh#C|{JaYMW#ETJmXlcX?WZ14 zLQb`K_x*4bQqrFV^YpHHxJk^8Qc3p(7|WbMOFazidYq%bo=<`{m+u9opd!?+UxX>d zvjOoy*B~!%&cHe-YnE>0~Jb?I~YrP3d}OmMCkI#HouLc{7=n<%78MsmYK z*twuZEnFf@Sfq}S9m2Dwu#il{7o>9g_zj0#-?#|NvosT-kpjm-v$4QuJeRR~}WEJt_(*DvHWI(=ebaY9W5G zlnKklgc}P=HwF=bsm&BqcMYXow%3b&Y`LYT959EPwS2*q=Wm5?|U!>tdNlW2ZnmV)tH|=_3)7El*Yh|AlHc7 zzBUUtuYOL|o{#1*b&%Cx23l?;?!A*JcSVmMBYLHY=B#r`+ z!flta)nu2zbsOCK-HVXxR1Nds2o=rq@f!$iT=-p91FPk0uc(s4pS56ska^8GcZ*0w zQdxp5b&T3(EnHWw+RW?1z)Jbn42}*mBRsus#Gv>>bjb`FI7%C2p^Y}CJl_KW=NB?5 zWJr0Cs;PR{U}obR06XZ&GX?tkFZ^V*2ecz!wi+u1UrGY!Cqv~3iCQPsy)6C!weBaH zpY~ecSBa{Z9%E`jxK)l`#xHojb)W$1nwV-eupT9?>iY&W{u+@biV})93U1HJ8C4y! z1*cdjyt$<4zkvhB#K5Xism>Fw8oZ&El6h8S`P|bZhuk5%Z|`I?A(<=N`4L1LS0ypu z{jn{?#3=M2rg;UDq{u9t1s+J8NXE0S53rJgv2a5YYqq#1tV$2V#b@C(rK(Gtc&rv? zZi|!5IC8TPY3#p;G+G9_lLz=_E~P49z4)$l9#yDvw}xsS{p= zZCQZ{a??~d(=HX~PT4@CX6Iri?i>~FCt6a1I!+l*RW)#l6|L;TWf+ND{p5qn@lN>) z@bs}JjmyYEpMb_`VET-^1jM9)g9he;h$rjwH7}1lmnR~sPP0g@T36o%RFnqj4E!cJ zN)|#TlVW!RfP**ipu}TiIL`NjPxN-uk8l-e$|ZB9#xIlM9XH7^mB)_=AtZV{+HuwL z!>cF_Gg5BwDy`JP=nWvz_#s?o?qGry~Wa+klauWfI>jwIvto9o9Im`{$+` zMB2gz2uFL>Tc2TDai#^iYnZ)l&9H0;Rgd{VXwP7dmEG{7ZUpD>^D6V}AruR}e%R8b zwy*4xvJ=g?wR)fgjAH+Q{xs|JI!%Cf7-A;AB(#`Cfq`WYoC`{|APkD&&D=zSni!=y zzfrB#Uh@5cZVRJ5D6+Z-UitxYX<3e1QrsZFX%HiCPTlq=0h4a6eA+o@1G(E7Cs_eB zCWn4^bZQW^d6*9Z3>Gv_*#br>^js`^PsJdlga*H{I;}+^o1@dLn7(c(J5hh3fhn!3 zfw%^;8K$9UU?nwH;Xy*3M&yS0G>cp;a`ZUC)W75&QP$A%I~{4LuyoHN&FxY`TonfdYP| zARNiZduF|L_Njlsk}nt0A7|Ffg-VQaE%^mwMQ`O z(r(4&^g-5>bv7EBS_sXwl(GCWKM$tYX^#-S@(Vj+k)Q*2NsE>YsGC)x>aX3+qUpxH z#~F99L8+NT>FsW8QJLz)>%0Wp{!O}3OJPCgu2py@N|Temqs+jjy*XeL#EIpl_%`|j zH|tb1mV`%MDc4v;YKQ$+ftUD=9UCkMXL z78is51T4k$y2lB8vHL!!9?S#`=I9i<+tEJzeXupXdZFDRbZ7d})G`EkXCL{lKy=k% z5O@OB3a=nFp9S-k_N`8D)$^}f=knGqCOg~?D6t|JUeuo++rvgaq_?eR{FSH1QTWND zfD_I9-{9fAgC1ddLmaBmkTe2yOe50hl0cBZ88m6|FcdxIJIrl`q~PMJc7(z)OL?+~w{!^P2t~%^GhjZkIfiWNK$T_@i{JRL zWrJ?Uy)ZkYOH3-q?VEsw#^7Skx169>U6#4A2$XA7DY9zHZV483TJY!2dukFdY40}X&6 z1+=74r^aqA8tily+9QN>y(AdPZ$)aYY@HVr;{T#Mo1$G|h#7PE#fs_Sbn5Sc-eJ!B zN9u*oP8*av{VcA8^%PxK`@CO1NGt^0eic=gwPvWxcHt?vpDp@3xAQk&TERwmElrh$ zM~DOJK0m_;`|gURmOf!5gR@pXJ=e&n?}5SacKAi2wez^DGP`{vjG0EJ>|`au2Gr{h zxjeJmH_Hq-<#loYiI>pm@&oKQU>14ANuW30#&853y^Yw+L%ajp&t>$1N%;ki;dkd# zEyD7tzoDK!>X;PJ`h}RsScO^$)5u%p;d;TkB)fJ5UfMIREW@ZC^Xv*(j^x)G)KaW(m~z zLNJXnMAvG;QN4bnOOsH3gYRM&*-X3BjAsdHwTMJ)CtLEI@$m+XS+9u+`{mA{9*?zk z0BRS6OyXK2)4uGF!Jzjzq4RKL66O7wT7y96y8-@$GEYm-0c_kzDRI{OUY5UmBK>uf z7XYFXc4+AU$83*!n9}dA(G>H^Q*-)u(E?4 zgzlKD_5+VB*d)Y=u_DEDMxg8K>Z3Ds&yt_gm|%%=@6z#QZvl7hcmgfOx#bx?0he}O z-|>$YwYAlCw>&Jxb;#0!VK|8o?~jzt1avmGVzsri%?v)s5s63OW!ngF>y+Gf%(GnV z#~4fJs|+#MMP=BYTb6>jBRO;a5mP7TRa=N_%mK1JsBNQM4J{wRlrcJHX&d0*^o`2x zOxpl!dMxsx`;T6nE{j%^uoeBsV-; zRl%~QK=Pq@`?H6GcTo`7XtVm(ot#+)pr49yMU1SDnn7VAAldTjLE%i5q77)P8#OC99lIJmo-4=8rmeIm$}~i*?9gMjJ!89jaR-L zzZ82uzcp@3PPf;y&S6AzuY5KYocm@hQ_uOqx<>MOS71l32CanxEyeR+NwQLQ4TgkG z6BnRVTE~Dcw7aFshu)_Fu5a)CO`dZ)T^A@b_j_9&29Zeeg*1g1QXp(1=x54T16MqZ zHEZOeWao-}st>!D6|2qo>)$?^gN!*_0=aLd#SS;kdWCpNNFo9t3+_Aqc`qKn@rvt5 zFCRk3LHS(~&xK@cEmLLP&i%O21-{emW2_dNLxqfXTc??N{sfL0xq35CPMHK^tBp=N z52|M&si@UHFe4k?$gXrbaQ7&tybW#Qv{bNw+4nVtop;Vb4Dnc2wv@wtP?h=Fyp%d8 zb~v6MWW&ciz9C2mziFoM$8{nG3kBl)`C|pB8kCRs3%@59o8stBU82qSa^A0H>dMs+ zbz)V^X;p$)r(m}$dgyUhmJrP!Yg4Z<&M)1=z$5QD)K2O7>Jy&!eoBa4ElMleo5N3A z&l7YS{zm59J~I48P^i^(LA60D;67OttL@T+Q#rEfU8{2_%9YuEZyQp3jrV~rBMsxo zprST>ra4dWKNw%BHm zpC)TQm8TD8F1I5?+i8k+XBFvu(AO3}ONQ_gv|1rig-2WQ6*5#lKYs=r-8q9NcTcgb ztg$+(?0IFB0b8TZiuvh<-O~WM=-LM%&368t-bm?)9&_G6Q{5AKOCAqb9>t@Jsg&_6 z20x-yl-<|VerL0kvyO-b=X`_BbYO3{#mD~2LY7nC6?nC+_*VXb~%XthGj}91@_18mgKvZre!{p~Sa8Q?p8)eP$>&T|Os?f^I*EmYgd6*}r z9;oq8;dLrf`EwVeOw!=J1)nJqcjr~suI&Vu`v#x#dj8+yY9abnS~aSo9QY5Dn_ufn;n++)if(t[n]===e)return n;return-1},each:$.each,map:$.map,filter:function(t,e){var n=[];return $.each(t,function(i,s){e(s,i,t)&&n.push(s)}),n},every:function(t,e){var n=!0;return t?($.each(t,function(i,s){return(n=e.call(null,s,i,t))?void 0:!1}),!!n):n},mixin:$.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,c=e-(a-o);return n=this,i=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,c)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeQuery:function(t){return $.trim(t).toLowerCase().split(/[\s]+/)},tokenizeText:function(t){return $.trim(t).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),i=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function n(){return(new Date).getTime()}function i(t){return JSON.stringify(e.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return e.isNumber(r)?o.setItem(this._ttlKey(t),i(n()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),i(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,n=[],i=o.length;for(t=0;i>t;t++)(e=o.key(t)).match(this.keyMatcher)&&n.push(e.replace(this.keyMatcher,""));for(t=n.length;t--;)this.remove(n[t]);return this},isExpired:function(t){var i=s(o.getItem(this._ttlKey(t)));return e.isNumber(i)&&n()>i?!0:!1}}:{get:e.noop,set:e.noop,remove:e.noop,clear:e.noop,isExpired:e.noop},e.mixin(t.prototype,r),t}(),s=function(){function t(t){e.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return e.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),r=function(){function t(t){var n;e.bindAll(this),t=t||{},n=/^throttle$/i.test(t.rateLimitFn)?e.throttle:e.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new s,this.get=n(this.get,this.wait)}return e.mixin(t.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return n?t:void 0})},_getItemsFromIds:function(t){var n=[];return e.map(t,e.bind(function(t){var e=this.itemHash[t];e&&n.push(e)},this)),n},_matcher:function(t){if(this._customMatcher){var n=this._customMatcher;return function(t){return n(t)}}return function(n){var i=n.tokens,s=e.every(t,function(t){var n=e.filter(i,function(e){return 0===e.indexOf(t)});return n.length});return s?n:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRemoteSuggestions:function(t,n){var i=this;return function(s){e.each(s,function(t,s){var r=!1;return s=e.isString(s)?{value:s}:s,e.each(n,function(t,e){return s.value===e.value?(r=!0,!1):void 0}),!r&&n.push(s),n.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:t.css("font-family"),fontSize:t.css("font-size"),fontStyle:t.css("font-style"),fontVariant:t.css("font-variant"),fontWeight:t.css("font-weight"),wordSpacing:t.css("word-spacing"),letterSpacing:t.css("letter-spacing"),textIndent:t.css("text-indent"),textRendering:t.css("text-rendering"),textTransform:t.css("text-transform")}).insertAfter(t)}function s(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),t===e}return e.mixin(t.prototype,n,{_handleFocus:function(){this.trigger("focus")},_handleBlur:function(){this.trigger("blur")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e,t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=s(this.query,t),n=e?this.query.length!==t.length:!1;n?this.trigger("whitespaceChange",{value:this.query}):e||this.trigger("queryChange",{value:this.query=t})},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,n=this.$input.val().length,i=this.$input[0].selectionStart;return e.isNumber(i)?i===n:document.selection?(t=document.selection.createRange(),t.moveStart("character",-n),n===t.text.length):!0}}),t}(),a=function(){function t(t){e.bindAll(this),this.isMouseOverDropdown,this.$menu=$(t.menu).on("mouseenter",this._handleMouseenter).on("mouseleave",this._handleMouseleave).on("mouseover",".tt-suggestions > .tt-suggestion",this._handleMouseover).on("click",".tt-suggestions > .tt-suggestion",this._handleSelection)}function i(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return e.mixin(t.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(t){this._getSuggestions().removeClass("tt-is-under-cursor"),$(t.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(t){this.trigger("select",i($(t.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?i(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?i(t):null},renderSuggestions:function(t,n,i){var s,r,o,u="tt-dataset-"+n.name,a=this.$menu.find("."+u);0===a.length&&(a=$('
                                1. ').addClass(u).appendTo(this.$menu)),s=document.createElement("div"),r=document.createDocumentFragment(),this.clearSuggestions(n.name),i.length>0&&(this.$menu.removeClass("tt-is-empty"),e.each(i,function(t,e){s.innerHTML=n.template.render(e),o=s.firstChild,o.setAttribute("data-value",e.value),r.appendChild(o)})),a.find("> .tt-suggestions").data({query:t,dataset:n.name}).append(r),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),t}(),c=function(){function t(t){e.bindAll(this),this.$node=i(t.input),this.datasets=t.datasets,e.each(this.datasets,function(t,e){var n='
                                2. %body
                                3. ';e.template=e.template?e.engine.compile(n.replace("%body",e.template)):{render:function(t){return n.replace("%body","

                                  "+t.value+"

                                  ")}}}),this.inputView=new u({input:this.$node.find(".tt-query"),hint:this.$node.find(".tt-hint")}),this.dropdownView=new a({menu:this.$node.find(".tt-dropdown-menu")}),this.dropdownView.on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView.on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("tab up down",this._managePreventDefault).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab left right",this._autocomplete)}function i(t){var e=$(t),n=$(s.hint).css({"background-color":e.css("background-color")});if(0===e.length)return null;try{!e.attr("dir")&&e.attr("dir","auto")}catch(i){}return e.attr({autocomplete:"off",spellcheck:!1}).addClass("tt-query").wrap(s.wrapper).parent().prepend(n).append(s.dropdown)}var s={wrapper:'',hint:'',dropdown:'
                                    '};return e.mixin(t.prototype,n,{_managePreventDefault:function(t){var e,n,i=t.data,s=!1;switch(t.type){case"tab":e=this.inputView.getHintValue(),n=this.inputView.getInputValue(),s=e&&e!==n;break;case"up":case"down":s=!i.shiftKey&&!i.ctrlKey&&!i.metaKey}s&&i.preventDefault()},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,n,i,s=this.dropdownView.getFirstSuggestion(),r=s?s.value:null;r&&this.dropdownView.isOpen()&&!this.inputView.isOverflow()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=RegExp("^(?:"+e+")(.*$)","i"),i=n.exec(r),this.inputView.setHintValue(t+(i?i[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var n="select"===t.type,i=n?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),n?this.inputView.focus():t.data.preventDefault(),n&&e.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,n=this.inputView.getQuery();e.each(this.datasets,function(e,i){i.getSuggestions(n,function(e){t._renderSuggestions(n,i,e)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))}}),t}();(function(){function t(t){return s[t]?s[t].apply(this,[].slice.call(arguments,1)):s.initialize.apply(this,arguments)}function n(t){a=t}var i,s,u={},a={};jQuery.fn.typeahead=t,t.configureTransport=n,s={initialize:function(n){var s={};if(n=e.isArray(n)?n:[n],0===n.length)throw Error("no datasets provided");return delete t.configureTransport,i=i||new r(a),e.each(n,function(t,n){var r,a=n.name=n.name||e.getUniqueId();if(u[a])r=u[a];else{if(n.limit=n.limit||5,n.template=n.template,n.engine=n.engine,n.template&&!n.engine)throw Error("no template engine specified for "+a);r=u[a]=new o({name:n.name,limit:n.limit,local:n.local,prefetch:n.prefetch,ttl_ms:n.ttl_ms,remote:n.remote,matcher:n.matcher,ranker:n.ranker,transport:i})}s[a]={name:n.name,limit:n.limit,template:n.template,engine:n.engine,getSuggestions:r.getSuggestions}}),this.each(function(){$(this).data({typeahead:new c({input:this,datasets:s})})})}}})()})(); \ No newline at end of file +(function(t){var e="0.8.2",n={isMsie:function(){return/msie [\w.]+/i.test(navigator.userAgent)},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var n;for(var i in e)t.isFunction(n=e[i])&&(e[i]=t.proxy(n,e))},indexOf:function(t,e){for(var n=0;t.length>n;n++)if(t[n]===e)return n;return-1},each:t.each,map:t.map,filter:function(e,n){var i=[];return t.each(e,function(t,s){n(s,t,e)&&i.push(s)}),i},every:function(e,n){var i=!0;return e?(t.each(e,function(t,s){return(i=n.call(null,s,t,e))?void 0:!1}),!!i):i},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,c=e-(a-o);return n=this,i=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,c)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},i=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),s=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function i(t){return JSON.stringify(n.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return n.isNumber(r)?o.setItem(this._ttlKey(t),i(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),i(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,n=[],i=o.length;for(t=0;i>t;t++)(e=o.key(t)).match(this.keyMatcher)&&n.push(e.replace(this.keyMatcher,""));for(t=n.length;t--;)this.remove(n[t]);return this},isExpired:function(t){var i=s(o.getItem(this._ttlKey(t)));return n.isNumber(i)&&e()>i?!0:!1}}:{get:n.noop,set:n.noop,remove:n.noop,clear:n.noop,isExpired:n.noop},n.mixin(t.prototype,r),t}(),r=function(){function t(t){n.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return n.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),o=function(){function e(t){var e;n.bindAll(this),t=t||{},e=/^throttle$/i.test(t.rateLimitFn)?n.throttle:n.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new r,this.get=e(this.get,this.wait)}return n.mixin(e.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return e?t:void 0})},_getItemsFromIds:function(t){var e=[];return n.map(t,n.bind(function(t){var n=this.itemHash[t];n&&e.push(n)},this)),e},_matcher:function(t){if(this._customMatcher){var e=this._customMatcher;return function(t){return e(t)}}return function(e){var i=e.tokens,s=n.every(t,function(t){var e=n.filter(i,function(e){return 0===e.indexOf(t)});return e.length});return s?e:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRemoteSuggestions:function(t,e){var i=this;return function(s){n.each(s,function(t,s){var r=!1;return s=n.isString(s)?{value:s}:s,n.each(e,function(t,e){return s.value===e.value?(r=!0,!1):void 0}),!r&&e.push(s),e.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),t===e}return n.mixin(e.prototype,i,{_handleFocus:function(){this.trigger("focus")},_handleBlur:function(){this.trigger("blur")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e,t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),n=e?this.query.length!==t.length:!1;n?this.trigger("whitespaceChange",{value:this.query}):e||this.trigger("queryChange",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,i=this.$input[0].selectionStart;return n.isNumber(i)?i===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),c=function(){function e(e){n.bindAll(this),this.isMouseOverDropdown,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return n.mixin(e.prototype,i,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){this._getSuggestions().removeClass("tt-is-under-cursor"),t(e.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(e){this.trigger("select",s(t(e.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,i,s){var r,o,u,a="tt-dataset-"+i.name,c=this.$menu.find("."+a);0===c.length&&(c=t('
                                    1. ').addClass(a).appendTo(this.$menu)),r=document.createElement("div"),o=document.createDocumentFragment(),this.clearSuggestions(i.name),s.length>0&&(this.$menu.removeClass("tt-is-empty"),n.each(s,function(t,e){r.innerHTML=i.template.render(e),u=r.firstChild,u.setAttribute("data-value",e.value),o.appendChild(u)})),c.find("> .tt-suggestions").data({query:e,dataset:i.name}).append(o),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),e}(),h=function(){function e(t){var e,i,r;n.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,e=this.$node.find(".tt-dropdown-menu"),i=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new c({menu:e}).on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView=new a({input:i,hint:r}).on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("tab up down",this._managePreventDefault).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab left right",this._autocomplete)}function s(e){var n=t(e),i=t(o.hint).css({"background-color":n.css("background-color")});if(0===n.length)return null;n.data("ttAttrs",{dir:n.attr("dir"),autocomplete:n.attr("autocomplete"),spellcheck:n.attr("spellcheck")});try{!n.attr("dir")&&n.attr("dir","auto")}catch(s){}return n.attr({autocomplete:"off",spellcheck:!1}).addClass("tt-query").wrap(o.wrapper).parent().prepend(i).append(o.dropdown)}function r(t){var e=t.find(".tt-query");n.each(e.data("ttAttrs"),function(t,i){n.isUndefined(i)?e.removeAttr(t):e.attr(t,i)}),e.detach().removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:'
                                        '};return n.mixin(e.prototype,i,{_managePreventDefault:function(t){var e,n,i=t.data,s=!1;switch(t.type){case"tab":e=this.inputView.getHintValue(),n=this.inputView.getInputValue(),s=e&&e!==n;break;case"up":case"down":s=!i.shiftKey&&!i.ctrlKey&&!i.metaKey}s&&i.preventDefault()},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,i,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null;u&&this.dropdownView.isOpen()&&!this.inputView.isOverflow()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),i=n.escapeRegExChars(e),s=RegExp("^(?:"+i+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="select"===t.type,i=e?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),e?this.inputView.focus():t.data.preventDefault(),e&&n.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();n.isBlankString(e)||n.each(this.datasets,function(n,i){i.getSuggestions(e,function(n){t._renderSuggestions(e,i,n)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null}}),e}();(function(){function e(t){return a[t]?a[t].apply(this,[].slice.call(arguments,1)):a.initialize.apply(this,arguments)}function i(t){l=t}function s(t,e){var n,i='
                                      1. %body
                                      2. ';return n=t?e.compile(i.replace("%body",t)):{render:function(t){return i.replace("%body","

                                        "+t.value+"

                                        ")}}}var r,a,c={},l={};jQuery.fn.typeahead=e,e.configureTransport=i,a={initialize:function(i){var a={};if(i=n.isArray(i)?i:[i],0===i.length)throw Error("no datasets provided");return delete e.configureTransport,r=r||new o(l),n.each(i,function(t,e){var i,o=e.name=e.name||n.getUniqueId();if(c[o])i=c[o];else{if(e.limit=e.limit||5,e.template&&!e.engine)throw Error("no template engine specified for "+o);i=c[o]=new u({name:e.name,limit:e.limit,local:e.local,prefetch:e.prefetch,ttl_ms:e.ttl_ms,remote:e.remote,matcher:e.matcher,ranker:e.ranker,transport:r})}a[o]={name:e.name,limit:e.limit,template:s(e.template,e.engine),getSuggestions:i.getSuggestions}}),this.each(function(){t(this).data({typeahead:new h({input:this,datasets:a})})})},destroy:function(){this.each(function(){var e=t(this),n=e.data("typeahead");n&&(n.destroy(),e.removeData("typeahead"))})}}})()})(window.jQuery); \ No newline at end of file From 3aa474e78f7bbde7818017ecfc37bb17df6edd2c Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sat, 23 Mar 2013 22:08:17 -0700 Subject: [PATCH 16/44] Update for v0.9.0 compatibility. --- css/examples.css | 6 ++++++ css/typeahead.min.css | 5 ----- examples/index.html | 1 - index.html | 1 - js/examples.js | 6 ++++-- js/main.js | 2 +- 6 files changed, 11 insertions(+), 10 deletions(-) delete mode 100644 css/typeahead.min.css diff --git a/css/examples.css b/css/examples.css index 59d401f013..a30c00b890 100644 --- a/css/examples.css +++ b/css/examples.css @@ -159,6 +159,12 @@ p { font-size: 14px; } +.example-sports .league-name { + margin: 0 20px 5px 20px; + padding: 3px 0; + border-bottom: 1px solid #ccc; +} + .example-arabic .tt-dropdown-menu { text-align: right; } diff --git a/css/typeahead.min.css b/css/typeahead.min.css deleted file mode 100644 index 3bcf6a50a0..0000000000 --- a/css/typeahead.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Twitter Typeahead - * https://github.com/twitter/typeahead - * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT - */.twitter-typeahead{position:relative;display:inline-block;*display:inline;*zoom:1}.twitter-typeahead .tt-query{*margin-top:-1px;vertical-align:top;background-color:transparent;background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.twitter-typeahead .tt-hint{position:absolute;top:0;left:0;z-index:-1;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.twitter-typeahead .tt-dropdown-menu,.twitter-typeahead .tt-suggestions,.twitter-typeahead .tt-suggestion{padding:0;margin:0}.twitter-typeahead .tt-dropdown-menu,.twitter-typeahead .tt-suggestions{list-style:none}.twitter-typeahead .tt-dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none}.twitter-typeahead .tt-dropdown-menu.tt-show{display:inline-block;*display:inline;*zoom:1}.twitter-typeahead .tt-suggestion{overflow:hidden;white-space:nowrap;cursor:pointer}.twitter-typeahead .tt-suggestion{*zoom:1}.twitter-typeahead .tt-suggestion:before,.twitter-typeahead .tt-suggestion:after{display:table;content:' '}.twitter-typeahead .tt-suggestion:after{clear:both}.twitter-typeahead.tt-rtl{direction:rtl}.twitter-typeahead.tt-rtl .tt-dropdown-menu{left:auto;right:0} \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 886fc5e8df..895772df9d 100644 --- a/examples/index.html +++ b/examples/index.html @@ -7,7 +7,6 @@ - diff --git a/index.html b/index.html index aac93a53f7..376e37b96c 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,6 @@ - diff --git a/js/examples.js b/js/examples.js index 56b60a43d5..aad66b8ee8 100644 --- a/js/examples.js +++ b/js/examples.js @@ -35,11 +35,13 @@ $(document).ready(function() { $('.example-sports .typeahead').typeahead([ { name: 'nba-teams', - prefetch: '../data/nba.json' + prefetch: '../data/nba.json', + header: '

                                        NBA Teams

                                        ' }, { name: 'nhl-teams', - prefetch: '../data/nhl.json' + prefetch: '../data/nhl.json', + header: '

                                        NHL Teams

                                        ' } ]); diff --git a/js/main.js b/js/main.js index ef713af6e1..056db2284b 100644 --- a/js/main.js +++ b/js/main.js @@ -23,7 +23,7 @@ $(document).ready(function() { , ghostwriter.selectAll , 'FlIgHt' , ghostwriter.selectAll - , ' type' + , 'type' , ghostwriter.right , ghostwriter.esc , ghostwriter.selectAll From 4f22e63554718ab660b6df67419a76f204375571 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sat, 23 Mar 2013 23:02:25 -0700 Subject: [PATCH 17/44] Add assets for 0.9.0. --- index.html | 2 +- releases/0.9.0/typeahead.js | 1081 ++++++++++++++++++++++++++++++ releases/0.9.0/typeahead.js.zip | Bin 0 -> 16775 bytes releases/0.9.0/typeahead.min.js | 7 + releases/latest/typeahead.js | 799 ++++++++++++---------- releases/latest/typeahead.js.zip | Bin 17220 -> 16775 bytes releases/latest/typeahead.min.js | 4 +- 7 files changed, 1524 insertions(+), 369 deletions(-) create mode 100644 releases/0.9.0/typeahead.js create mode 100644 releases/0.9.0/typeahead.js.zip create mode 100644 releases/0.9.0/typeahead.min.js diff --git a/index.html b/index.html index 376e37b96c..e5a038bfcb 100644 --- a/index.html +++ b/index.html @@ -27,7 +27,7 @@

                                        typeahea
                                        - download v0.8.2 + download v0.9.0 project & docs on GitHub · changelog diff --git a/releases/0.9.0/typeahead.js b/releases/0.9.0/typeahead.js new file mode 100644 index 0000000000..3cdfba943a --- /dev/null +++ b/releases/0.9.0/typeahead.js @@ -0,0 +1,1081 @@ +/*! + * typeahead.js 0.9.0 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function($) { + var VERSION = "0.9.0"; + var utils = { + isMsie: function() { + var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); + return match ? parseInt(match[2], 10) : 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"; + }, + bind: $.proxy, + bindAll: function(obj) { + var val; + for (var key in obj) { + $.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); + } + }, + indexOf: function(haystack, needle) { + for (var i = 0; i < haystack.length; i++) { + if (haystack[i] === needle) { + return i; + } + } + return -1; + }, + each: $.each, + 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, + getUniqueId: function() { + var counter = 0; + return function() { + return counter++; + }; + }(), + 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; + }; + }, + tokenizeQuery: function(str) { + return $.trim(str).toLowerCase().split(/[\s]+/); + }, + tokenizeText: function(str) { + return $.trim(str).toLowerCase().split(/[\s\-_]+/); + }, + getProtocol: function() { + return location.protocol; + }, + noop: function() {} + }; + var EventTarget = function() { + var eventSplitter = /\s+/; + return { + on: function(events, callback) { + var event; + if (!callback) { + return this; + } + this._callbacks = this._callbacks || {}; + events = events.split(eventSplitter); + while (event = events.shift()) { + this._callbacks[event] = this._callbacks[event] || []; + this._callbacks[event].push(callback); + } + return this; + }, + trigger: function(events, data) { + var event, callbacks; + if (!this._callbacks) { + return this; + } + events = events.split(eventSplitter); + while (event = events.shift()) { + if (callbacks = this._callbacks[event]) { + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i].call(this, { + type: event, + data: data + }); + } + } + } + return this; + } + }; + }(); + var EventBus = function() { + var namespace = "typeahead:"; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + utils.mixin(EventBus.prototype, { + trigger: function(type) { + var args = [].slice.call(arguments, 1); + this.$el.trigger(namespace + type, args); + } + }); + return EventBus; + }(); + var PersistentStorage = function() { + var ls = window.localStorage, methods; + function PersistentStorage(namespace) { + this.prefix = [ "__", namespace, "__" ].join(""); + this.ttlKey = "__ttl__"; + this.keyMatcher = new RegExp("^" + this.prefix); + } + if (window.localStorage && window.JSON) { + methods = { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, + get: function(key) { + if (this.isExpired(key)) { + this.remove(key); + } + return decode(ls.getItem(this._prefix(key))); + }, + set: function(key, val, ttl) { + if (utils.isNumber(ttl)) { + ls.setItem(this._ttlKey(key), encode(now() + ttl)); + } else { + ls.removeItem(this._ttlKey(key)); + } + return ls.setItem(this._prefix(key), encode(val)); + }, + remove: function(key) { + ls.removeItem(this._ttlKey(key)); + ls.removeItem(this._prefix(key)); + return this; + }, + clear: function() { + var i, key, keys = [], len = ls.length; + for (i = 0; i < len; i++) { + if ((key = ls.key(i)).match(this.keyMatcher)) { + keys.push(key.replace(this.keyMatcher, "")); + } + } + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } + return this; + }, + isExpired: function(key) { + var ttl = decode(ls.getItem(this._ttlKey(key))); + return utils.isNumber(ttl) && now() > ttl ? true : false; + } + }; + } else { + methods = { + get: utils.noop, + set: utils.noop, + remove: utils.noop, + clear: utils.noop, + isExpired: utils.noop + }; + } + utils.mixin(PersistentStorage.prototype, methods); + return PersistentStorage; + function now() { + return new Date().getTime(); + } + function encode(val) { + return JSON.stringify(utils.isUndefined(val) ? null : val); + } + function decode(val) { + return JSON.parse(val); + } + }(); + var RequestCache = function() { + function RequestCache(o) { + utils.bindAll(this); + o = o || {}; + this.sizeLimit = o.sizeLimit || 10; + this.cache = {}; + this.cachedKeysByAge = []; + } + utils.mixin(RequestCache.prototype, { + get: function(url) { + return this.cache[url]; + }, + set: function(url, resp) { + var requestToEvict; + if (this.cachedKeysByAge.length === this.sizeLimit) { + requestToEvict = this.cachedKeysByAge.shift(); + delete this.cache[requestToEvict]; + } + this.cache[url] = resp; + this.cachedKeysByAge.push(url); + } + }); + return RequestCache; + }(); + var Transport = function() { + var pendingRequests = 0, maxParallelRequests, requestCache; + function Transport(o) { + utils.bindAll(this); + o = utils.isString(o) ? { + url: o + } : o; + requestCache = requestCache || new RequestCache(); + maxParallelRequests = utils.isNumber(o.maxParallelRequests) ? o.maxParallelRequests : maxParallelRequests || 6; + this.url = o.url; + this.wildcard = o.wildcard || "%QUERY"; + this.filter = o.filter; + this.replace = o.replace; + this.ajaxSettings = { + type: "get", + cache: o.cache, + timeout: o.timeout, + dataType: o.dataType || "json", + beforeSend: o.beforeSend + }; + this.get = (/^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce)(this.get, o.rateLimitWait || 300); + } + utils.mixin(Transport.prototype, { + get: function(query, cb) { + var that = this, encodedQuery = encodeURIComponent(query || ""), url, resp; + url = this.replace ? this.replace(this.url, encodedQuery) : this.url.replace(this.wildcard, encodedQuery); + if (resp = requestCache.get(url)) { + cb && cb(resp); + } else if (belowPendingRequestsThreshold()) { + incrementPendingRequests(); + $.ajax(url, this.ajaxSettings).done(done).always(always); + } else { + this.onDeckRequestArgs = [].slice.call(arguments, 0); + } + function done(resp) { + resp = that.filter ? that.filter(resp) : resp; + cb && cb(resp); + requestCache.set(url, resp); + } + function always() { + decrementPendingRequests(); + if (that.onDeckRequestArgs) { + that.get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } + } + }); + return Transport; + function incrementPendingRequests() { + pendingRequests++; + } + function decrementPendingRequests() { + pendingRequests--; + } + function belowPendingRequestsThreshold() { + return pendingRequests < maxParallelRequests; + } + }(); + var Dataset = function() { + function Dataset(o) { + utils.bindAll(this); + if (o.template && !o.engine) { + $.error("no template engine specified"); + } + if (!o.local && !o.prefetch && !o.remote) { + $.error("one of local, prefetch, or remote is requried"); + } + this.name = o.name || utils.getUniqueId(); + this.limit = o.limit || 5; + this.header = o.header; + this.footer = o.footer; + this.valueKey = o.valueKey || "value"; + this.template = compileTemplate(o.template, o.engine, this.valueKey); + this.local = o.local; + this.prefetch = o.prefetch; + this.remote = o.remote; + this.keys = { + version: "version", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; + this.itemHash = {}; + this.adjacencyList = {}; + this.storage = o.name ? new PersistentStorage(o.name) : null; + } + utils.mixin(Dataset.prototype, { + _processLocalData: function(data) { + this._mergeProcessedData(this._processData(data)); + }, + _loadPrefetchData: function(o) { + var that = this, deferred, version, protocol, itemHash, adjacencyList, isExpired; + if (this.storage) { + version = this.storage.get(this.keys.version); + protocol = this.storage.get(this.keys.protocol); + itemHash = this.storage.get(this.keys.itemHash); + adjacencyList = this.storage.get(this.keys.adjacencyList); + isExpired = version !== VERSION || protocol !== utils.getProtocol(); + } + o = utils.isString(o) ? { + url: o + } : o; + o.ttl = utils.isNumber(o.ttl) ? o.ttl : 24 * 60 * 60 * 1e3; + if (itemHash && adjacencyList && !isExpired) { + this._mergeProcessedData({ + itemHash: itemHash, + adjacencyList: adjacencyList + }); + deferred = $.Deferred().resolve(); + } else { + deferred = $.getJSON(o.url).done(processPrefetchData); + } + return deferred; + function processPrefetchData(data) { + var filteredData = o.filter ? o.filter(data) : data, processedData = that._processData(filteredData), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + if (that.storage) { + that.storage.set(that.keys.itemHash, itemHash, o.ttl); + that.storage.set(that.keys.adjacencyList, adjacencyList, o.ttl); + that.storage.set(that.keys.version, VERSION, o.ttl); + that.storage.set(that.keys.protocol, utils.getProtocol(), o.ttl); + } + that._mergeProcessedData(processedData); + } + }, + _transformDatum: function(datum) { + var value = utils.isString(datum) ? datum : datum[this.valueKey], tokens = datum.tokens || utils.tokenizeText(value), item = { + value: value, + tokens: tokens + }; + if (utils.isString(datum)) { + item.datum = {}; + item.datum[this.valueKey] = datum; + } else { + item.datum = datum; + } + item.tokens = utils.filter(item.tokens, function(token) { + return !utils.isBlankString(token); + }); + item.tokens = utils.map(item.tokens, function(token) { + return token.toLowerCase(); + }); + return item; + }, + _processData: function(data) { + var that = this, itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), id = utils.getUniqueId(item.value); + itemHash[id] = item; + utils.each(item.tokens, function(i, token) { + var character = token.charAt(0), adjacency = adjacencyList[character] || (adjacencyList[character] = [ id ]); + !~utils.indexOf(adjacency, id) && adjacency.push(id); + }); + }); + return { + itemHash: itemHash, + adjacencyList: adjacencyList + }; + }, + _mergeProcessedData: function(processedData) { + var that = this; + utils.mixin(this.itemHash, processedData.itemHash); + utils.each(processedData.adjacencyList, function(character, adjacency) { + var masterAdjacency = that.adjacencyList[character]; + that.adjacencyList[character] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + }); + }, + _getLocalSuggestions: function(terms) { + var that = this, firstChars = [], lists = [], shortestList, suggestions = []; + utils.each(terms, function(i, term) { + var firstChar = term.charAt(0); + !~utils.indexOf(firstChars, firstChar) && firstChars.push(firstChar); + }); + utils.each(firstChars, function(i, firstChar) { + var list = that.adjacencyList[firstChar]; + if (!list) { + return false; + } + lists.push(list); + if (!shortestList || list.length < shortestList.length) { + shortestList = list; + } + }); + if (lists.length < firstChars.length) { + return []; + } + utils.each(shortestList, function(i, id) { + var item = that.itemHash[id], isCandidate, isMatch; + isCandidate = utils.every(lists, function(list) { + return ~utils.indexOf(list, id); + }); + isMatch = isCandidate && utils.every(terms, function(term) { + return utils.some(item.tokens, function(token) { + return token.indexOf(term) === 0; + }); + }); + isMatch && suggestions.push(item); + }); + return suggestions; + }, + initialize: function() { + var deferred; + this.local && this._processLocalData(this.local); + this.transport = this.remote ? new Transport(this.remote) : null; + deferred = this.prefetch ? this._loadPrefetchData(this.prefetch) : $.Deferred().resolve(); + this.local = this.prefetch = this.remote = null; + this.initialize = function() { + return deferred; + }; + return deferred; + }, + getSuggestions: function(query, cb) { + var that = this, terms = utils.tokenizeQuery(query), suggestions = this._getLocalSuggestions(terms).slice(0, this.limit); + cb && cb(suggestions); + if (suggestions.length < this.limit && this.transport) { + this.transport.get(query, processRemoteData); + } + function processRemoteData(data) { + suggestions = suggestions.slice(0); + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), isDuplicate; + isDuplicate = utils.some(suggestions, function(suggestion) { + return item.value === suggestion.value; + }); + !isDuplicate && suggestions.push(item); + return suggestions.length < that.limit; + }); + cb && cb(suggestions); + } + } + }); + return Dataset; + function compileTemplate(template, engine, valueKey) { + var wrapper = '
                                        %body
                                        ', compiledTemplate; + if (template) { + compiledTemplate = engine.compile(wrapper.replace("%body", template)); + } else { + compiledTemplate = { + render: function(context) { + return wrapper.replace("%body", "

                                        " + context[valueKey] + "

                                        "); + } + }; + } + return compiledTemplate; + } + }(); + var InputView = function() { + function InputView(o) { + var that = this; + utils.bindAll(this); + this.specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + this.$hint = $(o.hint); + this.$input = $(o.input).on("blur.tt", this._handleBlur).on("focus.tt", this._handleFocus).on("keydown.tt", this._handleSpecialKeyEvent); + if (!utils.isMsie()) { + this.$input.on("input.tt", this._compareQueryToInputValue); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (that.specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + utils.defer(that._compareQueryToInputValue); + }); + } + this.query = this.$input.val(); + this.$overflowHelper = buildOverflowHelper(this.$input); + } + utils.mixin(InputView.prototype, EventTarget, { + _handleFocus: function() { + this.trigger("focused"); + }, + _handleBlur: function() { + this.trigger("blured"); + }, + _handleSpecialKeyEvent: function($e) { + var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; + keyName && this.trigger(keyName + "Keyed", $e); + }, + _compareQueryToInputValue: function() { + var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; + if (isSameQueryExceptWhitespace) { + this.trigger("whitespaceChanged", { + value: this.query + }); + } else if (!isSameQuery) { + this.trigger("queryChanged", { + value: this.query = inputValue + }); + } + }, + destroy: function() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$hint = this.$input = this.$overflowHelper = null; + }, + focus: function() { + this.$input.focus(); + }, + blur: function() { + this.$input.blur(); + }, + getQuery: function() { + return this.query; + }, + getInputValue: function() { + return this.$input.val(); + }, + setInputValue: function(value, silent) { + this.$input.val(value); + if (silent !== true) { + this._compareQueryToInputValue(); + } + }, + getHintValue: function() { + return this.$hint.val(); + }, + setHintValue: function(value) { + this.$hint.val(value); + }, + getLanguageDirection: function() { + return (this.$input.css("direction") || "ltr").toLowerCase(); + }, + isOverflow: function() { + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() > this.$input.width(); + }, + isCursorAtEnd: function() { + var valueLength = this.$input.val().length, selectionStart = this.$input[0].selectionStart, range; + if (utils.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + } + }); + return InputView; + function buildOverflowHelper($input) { + return $("").css({ + position: "absolute", + left: "-9999px", + visibility: "hidden", + whiteSpace: "nowrap", + 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 compareQueries(a, b) { + a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + return a === b; + } + }(); + var DropdownView = function() { + var html = { + suggestionsList: '' + }, css = { + suggestionsList: { + display: "block" + }, + suggestion: { + whiteSpace: "nowrap", + cursor: "pointer" + }, + suggestionChild: { + whiteSpace: "normal" + } + }; + function DropdownView(o) { + utils.bindAll(this); + this.isOpen = false; + this.isEmpty = true; + this.isMouseOverDropdown = false; + this.$menu = $(o.menu).on("mouseenter.tt", this._handleMouseenter).on("mouseleave.tt", this._handleMouseleave).on("click.tt", ".tt-suggestion", this._handleSelection).on("mouseover.tt", ".tt-suggestion", this._handleMouseover); + } + utils.mixin(DropdownView.prototype, EventTarget, { + _handleMouseenter: function() { + this.isMouseOverDropdown = true; + }, + _handleMouseleave: function() { + this.isMouseOverDropdown = false; + }, + _handleMouseover: function($e) { + var $suggestion = $($e.currentTarget); + this._getSuggestions().removeClass("tt-is-under-cursor"); + $suggestion.addClass("tt-is-under-cursor"); + }, + _handleSelection: function($e) { + var $suggestion = $($e.currentTarget); + this.trigger("suggestionSelected", extractSuggestion($suggestion)); + }, + _show: function() { + this.$menu.css("display", "block"); + }, + _hide: function() { + this.$menu.hide(); + }, + _moveCursor: function(increment) { + var $suggestions, $cur, nextIndex, $underCursor; + if (!this.isVisible()) { + return; + } + $suggestions = this._getSuggestions(); + $cur = $suggestions.filter(".tt-is-under-cursor"); + $cur.removeClass("tt-is-under-cursor"); + nextIndex = $suggestions.index($cur) + increment; + nextIndex = (nextIndex + 1) % ($suggestions.length + 1) - 1; + if (nextIndex === -1) { + this.trigger("cursorRemoved"); + return; + } else if (nextIndex < -1) { + nextIndex = $suggestions.length - 1; + } + $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); + this.trigger("cursorMoved", extractSuggestion($underCursor)); + }, + _getSuggestions: function() { + return this.$menu.find(".tt-suggestions > .tt-suggestion"); + }, + destroy: function() { + this.$menu.off(".tt"); + this.$menu = null; + }, + isVisible: function() { + return this.isOpen && !this.isEmpty; + }, + closeUnlessMouseIsOverDropdown: function() { + if (!this.isMouseOverDropdown) { + this.close(); + } + }, + close: function() { + if (this.isOpen) { + this.isOpen = false; + this._hide(); + this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); + this.trigger("closed"); + } + }, + open: function() { + if (!this.isOpen) { + this.isOpen = true; + !this.isEmpty && this._show(); + this.trigger("opened"); + } + }, + setLanguageDirection: function(dir) { + var ltrCss = { + left: "0", + right: "auto" + }, rtlCss = { + left: "auto", + right: " 0" + }; + dir === "ltr" ? this.$menu.css(ltrCss) : this.$menu.css(rtlCss); + }, + moveCursorUp: function() { + this._moveCursor(-1); + }, + moveCursorDown: function() { + this._moveCursor(+1); + }, + getSuggestionUnderCursor: function() { + var $suggestion = this._getSuggestions().filter(".tt-is-under-cursor").first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + getFirstSuggestion: function() { + var $suggestion = this._getSuggestions().first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + renderSuggestions: function(dataset, suggestions) { + var datasetClassName = "tt-dataset-" + dataset.name, $suggestionsList, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, $el; + if ($dataset.length === 0) { + $suggestionsList = $(html.suggestionsList).css(css.suggestionsList); + $dataset = $("
                                        ").addClass(datasetClassName).append(dataset.header).append($suggestionsList).append(dataset.footer).appendTo(this.$menu); + } + if (suggestions.length > 0) { + this.isEmpty = false; + this.isOpen && this._show(); + elBuilder = document.createElement("div"); + fragment = document.createDocumentFragment(); + utils.each(suggestions, function(i, suggestion) { + elBuilder.innerHTML = dataset.template.render(suggestion.datum); + $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); + $el.children().each(function() { + $(this).css(css.suggestionChild); + }); + fragment.appendChild($el[0]); + }); + $dataset.show().find(".tt-suggestions").html(fragment); + } else { + this.clearSuggestions(dataset.name); + } + this.trigger("suggestionsRendered"); + }, + clearSuggestions: function(datasetName) { + var $datasets = datasetName ? this.$menu.find(".tt-dataset-" + datasetName) : this.$menu.find('[class^="tt-dataset-"]'), $suggestions = $datasets.find(".tt-suggestions"); + $datasets.hide(); + $suggestions.empty(); + if (this._getSuggestions().length === 0) { + this.isEmpty = true; + this._hide(); + } + } + }); + return DropdownView; + function extractSuggestion($el) { + return $el.data("suggestion"); + } + }(); + var TypeaheadView = function() { + var html = { + wrapper: '', + hint: '', + dropdown: '' + }, css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none" + }, + query: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + dropdown: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + } + }; + if (utils.isMsie()) { + utils.mixin(css.query, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + if (utils.isMsie() && utils.isMsie() <= 7) { + utils.mixin(css.wrapper, { + display: "inline", + zoom: "1" + }); + utils.mixin(css.query, { + marginTop: "-1px" + }); + } + function TypeaheadView(o) { + var $menu, $input, $hint; + utils.bindAll(this); + this.$node = buildDomStructure(o.input); + this.datasets = o.datasets; + this.dir = null; + this.eventBus = o.eventBus; + $menu = this.$node.find(".tt-dropdown-menu"); + $input = this.$node.find(".tt-query"); + $hint = this.$node.find(".tt-hint"); + this.dropdownView = new DropdownView({ + menu: $menu + }).on("suggestionSelected", this._handleSelection).on("cursorMoved", this._clearHint).on("cursorMoved", this._setInputValueToSuggestionUnderCursor).on("cursorRemoved", this._setInputValueToQuery).on("cursorRemoved", this._updateHint).on("suggestionsRendered", this._updateHint).on("opened", this._updateHint).on("closed", this._clearHint).on("opened closed", this._propagateEvent); + this.inputView = new InputView({ + input: $input, + hint: $hint + }).on("focused", this._openDropdown).on("blured", this._closeDropdown).on("blured", this._setInputValueToQuery).on("enterKeyed", this._handleSelection).on("queryChanged", this._clearHint).on("queryChanged", this._clearSuggestions).on("queryChanged", this._getSuggestions).on("whitespaceChanged", this._updateHint).on("queryChanged whitespaceChanged", this._openDropdown).on("queryChanged whitespaceChanged", this._setLanguageDirection).on("escKeyed", this._closeDropdown).on("escKeyed", this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed", this._managePreventDefault).on("upKeyed downKeyed", this._moveDropdownCursor).on("upKeyed downKeyed", this._openDropdown).on("tabKeyed leftKeyed rightKeyed", this._autocomplete); + } + utils.mixin(TypeaheadView.prototype, EventTarget, { + _managePreventDefault: function(e) { + var $e = e.data, hint, inputValue, preventDefault = false; + switch (e.type) { + case "tabKeyed": + hint = this.inputView.getHintValue(); + inputValue = this.inputView.getInputValue(); + preventDefault = hint && hint !== inputValue; + break; + + case "upKeyed": + case "downKeyed": + preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; + break; + } + preventDefault && $e.preventDefault(); + }, + _setLanguageDirection: function() { + var dir = this.inputView.getLanguageDirection(); + if (dir !== this.dir) { + this.dir = dir; + this.$node.css("direction", dir); + this.dropdownView.setLanguageDirection(dir); + } + }, + _updateHint: function() { + var suggestion = this.dropdownView.getFirstSuggestion(), hint = suggestion ? suggestion.value : null, dropdownIsVisible = this.dropdownView.isVisible(), inputHasOverflow = this.inputView.isOverflow(), inputValue, query, escapedQuery, beginsWithQuery, match; + if (hint && dropdownIsVisible && !inputHasOverflow) { + inputValue = this.inputView.getInputValue(); + query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); + escapedQuery = utils.escapeRegExChars(query); + beginsWithQuery = new RegExp("^(?:" + escapedQuery + ")(.*$)", "i"); + match = beginsWithQuery.exec(hint); + this.inputView.setHintValue(inputValue + (match ? match[1] : "")); + } + }, + _clearHint: function() { + this.inputView.setHintValue(""); + }, + _clearSuggestions: function() { + this.dropdownView.clearSuggestions(); + }, + _setInputValueToQuery: function() { + this.inputView.setInputValue(this.inputView.getQuery()); + }, + _setInputValueToSuggestionUnderCursor: function(e) { + var suggestion = e.data; + this.inputView.setInputValue(suggestion.value, true); + }, + _openDropdown: function() { + this.dropdownView.open(); + }, + _closeDropdown: function(e) { + this.dropdownView[e.type === "blured" ? "closeUnlessMouseIsOverDropdown" : "close"](); + }, + _moveDropdownCursor: function(e) { + var $e = e.data; + if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { + this.dropdownView[e.type === "upKeyed" ? "moveCursorUp" : "moveCursorDown"](); + } + }, + _handleSelection: function(e) { + var byClick = e.type === "suggestionSelected", suggestion = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); + if (suggestion) { + this.inputView.setInputValue(suggestion.value); + byClick ? this.inputView.focus() : e.data.preventDefault(); + byClick && utils.isMsie() ? utils.defer(this.dropdownView.close) : this.dropdownView.close(); + this.eventBus.trigger("selected", suggestion.datum); + } + }, + _getSuggestions: function() { + var that = this, query = this.inputView.getQuery(); + if (utils.isBlankString(query)) { + return; + } + utils.each(this.datasets, function(i, dataset) { + dataset.getSuggestions(query, function(suggestions) { + if (query === that.inputView.getQuery()) { + that.dropdownView.renderSuggestions(dataset, suggestions); + } + }); + }); + }, + _autocomplete: function(e) { + var isCursorAtEnd, ignoreEvent, query, hint, suggestion; + if (e.type === "rightKeyed" || e.type === "leftKeyed") { + isCursorAtEnd = this.inputView.isCursorAtEnd(); + ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "leftKeyed" : e.type === "rightKeyed"; + if (!isCursorAtEnd || ignoreEvent) { + return; + } + } + query = this.inputView.getQuery(); + hint = this.inputView.getHintValue(); + if (hint !== "" && query !== hint) { + suggestion = this.dropdownView.getFirstSuggestion(); + this.inputView.setInputValue(suggestion.value); + } + }, + _propagateEvent: function(e) { + this.eventBus.trigger(e.type); + }, + destroy: function() { + this.inputView.destroy(); + this.dropdownView.destroy(); + destroyDomStructure(this.$node); + this.$node = null; + } + }); + return TypeaheadView; + function buildDomStructure(input) { + var $wrapper = $(html.wrapper), $dropdown = $(html.dropdown), $input = $(input), $hint = $(html.hint); + $wrapper = $wrapper.css(css.wrapper); + $dropdown = $dropdown.css(css.dropdown); + $hint.css(css.hint).css({ + backgroundAttachment: $input.css("background-attachment"), + backgroundClip: $input.css("background-clip"), + backgroundColor: $input.css("background-color"), + backgroundImage: $input.css("background-image"), + backgroundOrigin: $input.css("background-origin"), + backgroundPosition: $input.css("background-position"), + backgroundRepeat: $input.css("background-repeat"), + backgroundSize: $input.css("background-size") + }); + $input.data("ttAttrs", { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass("tt-query").attr({ + autocomplete: "off", + spellcheck: false + }).css(css.query); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input.wrap($wrapper).parent().prepend($hint).append($dropdown); + } + function destroyDomStructure($node) { + var $input = $node.find(".tt-query"); + utils.each($input.data("ttAttrs"), function(key, val) { + utils.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter($node); + $node.remove(); + } + }(); + (function() { + var cache = {}, viewKey = "ttView", methods; + methods = { + initialize: function(datasetDefs) { + var datasets; + datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; + if (this.length === 0) { + $.error("typeahead initialized without DOM element"); + } + if (datasetDefs.length === 0) { + $.error("no datasets provided"); + } + datasets = utils.map(datasetDefs, function(o) { + var dataset = cache[o.name] ? cache[o.name] : new Dataset(o); + if (o.name) { + cache[o.name] = dataset; + } + return dataset; + }); + return this.each(initialize); + function initialize() { + var $input = $(this), deferreds, eventBus = new EventBus({ + el: $input + }); + deferreds = utils.map(datasets, function(dataset) { + return dataset.initialize(); + }); + $input.data(viewKey, new TypeaheadView({ + input: $input, + eventBus: eventBus = new EventBus({ + el: $input + }), + datasets: datasets + })); + $.when.apply($, deferreds).always(function() { + utils.defer(function() { + eventBus.trigger("initialized"); + }); + }); + } + }, + destroy: function() { + this.each(function() { + var $this = $(this), view = $this.data(viewKey); + if (view) { + view.destroy(); + $this.removeData(viewKey); + } + }); + } + }; + jQuery.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + })(); +})(window.jQuery); \ No newline at end of file diff --git a/releases/0.9.0/typeahead.js.zip b/releases/0.9.0/typeahead.js.zip new file mode 100644 index 0000000000000000000000000000000000000000..b5ecc8d48e060d21be6a8b98ec935ba14565a312 GIT binary patch literal 16775 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 literal 0 HcmV?d00001 diff --git a/releases/0.9.0/typeahead.min.js b/releases/0.9.0/typeahead.min.js new file mode 100644 index 0000000000..c7b7687029 --- /dev/null +++ b/releases/0.9.0/typeahead.min.js @@ -0,0 +1,7 @@ +/*! + * typeahead.js 0.9.0 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function(t){var e="0.9.0",i={isMsie:function(){var t=/(msie) ([\w.]+)/i.exec(navigator.userAgent);return t?parseInt(t[2],10):!1},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var i;for(var n in e)t.isFunction(i=e[n])&&(e[n]=t.proxy(i,e))},indexOf:function(t,e){for(var i=0;t.length>i;i++)if(t[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,a=this,u=arguments;return r=function(){n=null,i||(s=t.apply(a,u))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(a,u)),s}},throttle:function(t,e){var i,n,s,r,o,a;return o=0,a=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var u=new Date,c=e-(u-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=u,r=t.apply(i,n)):s||(s=setTimeout(a,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return i.isNumber(r)?o.setItem(this._ttlKey(t),n(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),n(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=o.length;for(t=0;n>t;t++)(e=o.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(o.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,r),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),a=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,u=u||new o,a=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:a||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this.get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this.get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return a>c}var a,u,c=0;return i.mixin(e.prototype,{get:function(e,i){function o(t){t=l.filter?l.filter(t):t,i&&i(t),u.set(c,t)}function a(){s(),l.onDeckRequestArgs&&(l.get.apply(l,l.onDeckRequestArgs),l.onDeckRequestArgs=null)}var c,h,l=this,d=encodeURIComponent(e||"");c=this.replace?this.replace(this.url,d):this.url.replace(this.wildcard,d),(h=u.get(c))?i&&i(h):r()?(n(),t.ajax(c,this.ajaxSettings).done(o).always(a)):this.onDeckRequestArgs=[].slice.call(arguments,0)}}),e}(),u=function(){function n(e){i.bindAll(this),e.template&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is requried"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.keys={version:"version",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"},this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,i){var n,s='
                                        %body
                                        ';return n=t?e.compile(s.replace("%body",t)):{render:function(t){return s.replace("%body","

                                        "+t[i]+"

                                        ")}}}return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var s=n.filter?n.filter(t):t,r=l._processData(s),o=r.itemHash,a=r.adjacencyList;l.storage&&(l.storage.set(l.keys.itemHash,o,n.ttl),l.storage.set(l.keys.adjacencyList,a,n.ttl),l.storage.set(l.keys.version,e,n.ttl),l.storage.set(l.keys.protocol,i.getProtocol(),n.ttl)),l._mergeProcessedData(r)}var r,o,a,u,c,h,l=this;return this.storage&&(o=this.storage.get(this.keys.version),a=this.storage.get(this.keys.protocol),u=this.storage.get(this.keys.itemHash),c=this.storage.get(this.keys.adjacencyList),h=o!==e||a!==i.getProtocol()),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,u&&c&&!h?(this._mergeProcessedData({itemHash:u,adjacencyList:c}),r=t.Deferred().resolve()):r=t.getJSON(n.url).done(s),r},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),a=i.getUniqueId(o.value);n[a]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[a]);!~i.indexOf(r,a)&&r.push(a)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,a,u,c,h="tt-dataset-"+e.name,l=this.$menu.find("."+h);0===l.length&&(s=t(r.suggestionsList).css(o.suggestionsList),l=t("
                                        ").addClass(h).append(e.header).append(s).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),a=document.createElement("div"),u=document.createDocumentFragment(),i.each(n,function(i,n){a.innerHTML=e.template.render(n.datum),c=t(a.firstChild).css(o.suggestion).data("suggestion",n),c.children().each(function(){t(this).css(o.suggestionChild)}),u.appendChild(c[0])}),l.show().find(".tt-suggestions").html(u)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(a.wrapper),n=n.css(a.dropdown),r.css(a.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(a.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(u){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(a.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(a.wrapper,{display:"inline",zoom:"1"}),i.mixin(a.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),a=o?o.value:null,u=this.dropdownView.isVisible(),c=this.inputView.isOverflow();a&&u&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(a),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(a,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:a})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var a;return e=i.isArray(e)?e:[e],0===this.length&&t.error("typeahead initialized without DOM element"),0===e.length&&t.error("no datasets provided"),a=i.map(e,function(t){var e=n[t.name]?n[t.name]:new u(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){this.each(function(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))})}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file diff --git a/releases/latest/typeahead.js b/releases/latest/typeahead.js index 5bd00d1f2d..3cdfba943a 100644 --- a/releases/latest/typeahead.js +++ b/releases/latest/typeahead.js @@ -1,14 +1,15 @@ /*! - * typeahead.js 0.8.2 + * typeahead.js 0.9.0 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ (function($) { - var VERSION = "0.8.2"; + var VERSION = "0.9.0"; var utils = { isMsie: function() { - return /msie [\w.]+/i.test(navigator.userAgent); + var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); + return match ? parseInt(match[2], 10) : false; }, isBlankString: function(str) { return !str || /^\s*$/.test(str); @@ -45,22 +46,26 @@ }, each: $.each, map: $.map, - filter: function(obj, test) { - var results = []; + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } $.each(obj, function(key, val) { - if (test(val, key, obj)) { - results.push(val); + if (!(result = test.call(null, val, key, obj))) { + return false; } }); - return results; + return !!result; }, - every: function(obj, test) { - var result = true; + some: function(obj, test) { + var result = false; if (!obj) { return result; } $.each(obj, function(key, val) { - if (!(result = test.call(null, val, key, obj))) { + if (result = test.call(null, val, key, obj)) { return false; } }); @@ -73,6 +78,9 @@ return counter++; }; }(), + defer: function(fn) { + setTimeout(fn, 0); + }, debounce: function(func, wait, immediate) { var timeout, result; return function() { @@ -115,17 +123,6 @@ return result; }; }, - uniqueArray: function(array) { - var u = {}, a = []; - for (var i = 0, l = array.length; i < l; ++i) { - if (u.hasOwnProperty(array[i])) { - continue; - } - a.push(array[i]); - u[array[i]] = 1; - } - return a; - }, tokenizeQuery: function(str) { return $.trim(str).toLowerCase().split(/[\s]+/); }, @@ -173,6 +170,22 @@ } }; }(); + var EventBus = function() { + var namespace = "typeahead:"; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + utils.mixin(EventBus.prototype, { + trigger: function(type) { + var args = [].slice.call(arguments, 1); + this.$el.trigger(namespace + type, args); + } + }); + return EventBus; + }(); var PersistentStorage = function() { var ls = window.localStorage, methods; function PersistentStorage(namespace) { @@ -270,124 +283,154 @@ return RequestCache; }(); var Transport = function() { + var pendingRequests = 0, maxParallelRequests, requestCache; function Transport(o) { - var rateLimitFn; utils.bindAll(this); - o = o || {}; - rateLimitFn = /^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce; - this.wait = o.wait || 300; + o = utils.isString(o) ? { + url: o + } : o; + requestCache = requestCache || new RequestCache(); + maxParallelRequests = utils.isNumber(o.maxParallelRequests) ? o.maxParallelRequests : maxParallelRequests || 6; + this.url = o.url; this.wildcard = o.wildcard || "%QUERY"; - this.maxConcurrentRequests = o.maxConcurrentRequests || 6; - this.concurrentRequests = 0; - this.onDeckRequestArgs = null; - this.cache = new RequestCache(); - this.get = rateLimitFn(this.get, this.wait); + this.filter = o.filter; + this.replace = o.replace; + this.ajaxSettings = { + type: "get", + cache: o.cache, + timeout: o.timeout, + dataType: o.dataType || "json", + beforeSend: o.beforeSend + }; + this.get = (/^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce)(this.get, o.rateLimitWait || 300); } utils.mixin(Transport.prototype, { - _incrementConcurrentRequests: function() { - this.concurrentRequests++; - }, - _decrementConcurrentRequests: function() { - this.concurrentRequests--; - }, - _belowConcurrentRequestsThreshold: function() { - return this.concurrentRequests < this.maxConcurrentRequests; - }, - get: function(url, query, cb) { - var that = this, resp; - url = url.replace(this.wildcard, encodeURIComponent(query || "")); - if (resp = this.cache.get(url)) { + get: function(query, cb) { + var that = this, encodedQuery = encodeURIComponent(query || ""), url, resp; + url = this.replace ? this.replace(this.url, encodedQuery) : this.url.replace(this.wildcard, encodedQuery); + if (resp = requestCache.get(url)) { cb && cb(resp); - } else if (this._belowConcurrentRequestsThreshold()) { - $.ajax({ - url: url, - type: "GET", - dataType: "json", - beforeSend: function() { - that._incrementConcurrentRequests(); - }, - success: function(resp) { - cb && cb(resp); - that.cache.set(url, resp); - }, - complete: function() { - that._decrementConcurrentRequests(); - if (that.onDeckRequestArgs) { - that.get.apply(that, that.onDeckRequestArgs); - that.onDeckRequestArgs = null; - } - } - }); + } else if (belowPendingRequestsThreshold()) { + incrementPendingRequests(); + $.ajax(url, this.ajaxSettings).done(done).always(always); } else { this.onDeckRequestArgs = [].slice.call(arguments, 0); } + function done(resp) { + resp = that.filter ? that.filter(resp) : resp; + cb && cb(resp); + requestCache.set(url, resp); + } + function always() { + decrementPendingRequests(); + if (that.onDeckRequestArgs) { + that.get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } } }); return Transport; + function incrementPendingRequests() { + pendingRequests++; + } + function decrementPendingRequests() { + pendingRequests--; + } + function belowPendingRequestsThreshold() { + return pendingRequests < maxParallelRequests; + } }(); var Dataset = function() { function Dataset(o) { utils.bindAll(this); - this.storage = new PersistentStorage(o.name); - this.adjacencyList = {}; - this.itemHash = {}; - this.name = o.name; - this.resetDataOnProtocolSwitch = o.resetDataOnProtocolSwitch || false; - this.queryUrl = o.remote; - this.transport = o.transport; - this.limit = o.limit || 10; - this._customMatcher = o.matcher || null; - this._customRanker = o.ranker || null; - this._ttl_ms = utils.isNumber(o.ttl_ms) ? o.ttl_ms : 24 * 60 * 60 * 1e3; + if (o.template && !o.engine) { + $.error("no template engine specified"); + } + if (!o.local && !o.prefetch && !o.remote) { + $.error("one of local, prefetch, or remote is requried"); + } + this.name = o.name || utils.getUniqueId(); + this.limit = o.limit || 5; + this.header = o.header; + this.footer = o.footer; + this.valueKey = o.valueKey || "value"; + this.template = compileTemplate(o.template, o.engine, this.valueKey); + this.local = o.local; + this.prefetch = o.prefetch; + this.remote = o.remote; this.keys = { version: "version", protocol: "protocol", itemHash: "itemHash", adjacencyList: "adjacencyList" }; - o.local && this._processLocalData(o.local); - o.prefetch && this._loadPrefetchData(o.prefetch); + this.itemHash = {}; + this.adjacencyList = {}; + this.storage = o.name ? new PersistentStorage(o.name) : null; } utils.mixin(Dataset.prototype, { _processLocalData: function(data) { - data && this._mergeProcessedData(this._processData(data)); + this._mergeProcessedData(this._processData(data)); }, - _loadPrefetchData: function(url) { - var that = this, itemHash = this.storage.get(this.keys.itemHash), adjacencyList = this.storage.get(this.keys.adjacencyList), protocol = this.storage.get(this.keys.protocol), version = this.storage.get(this.keys.version), isExpired = version !== VERSION || protocol !== utils.getProtocol(); + _loadPrefetchData: function(o) { + var that = this, deferred, version, protocol, itemHash, adjacencyList, isExpired; + if (this.storage) { + version = this.storage.get(this.keys.version); + protocol = this.storage.get(this.keys.protocol); + itemHash = this.storage.get(this.keys.itemHash); + adjacencyList = this.storage.get(this.keys.adjacencyList); + isExpired = version !== VERSION || protocol !== utils.getProtocol(); + } + o = utils.isString(o) ? { + url: o + } : o; + o.ttl = utils.isNumber(o.ttl) ? o.ttl : 24 * 60 * 60 * 1e3; if (itemHash && adjacencyList && !isExpired) { this._mergeProcessedData({ itemHash: itemHash, adjacencyList: adjacencyList }); + deferred = $.Deferred().resolve(); } else { - $.getJSON(url).done(processPrefetchData); + deferred = $.getJSON(o.url).done(processPrefetchData); } + return deferred; function processPrefetchData(data) { - var processedData = that._processData(data), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; - that.storage.set(that.keys.itemHash, itemHash, that._ttl_ms); - that.storage.set(that.keys.adjacencyList, adjacencyList, that._ttl_ms); - that.storage.set(that.keys.version, VERSION, that._ttl_ms); - that.storage.set(that.keys.protocol, utils.getProtocol(), that._ttl_ms); + var filteredData = o.filter ? o.filter(data) : data, processedData = that._processData(filteredData), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + if (that.storage) { + that.storage.set(that.keys.itemHash, itemHash, o.ttl); + that.storage.set(that.keys.adjacencyList, adjacencyList, o.ttl); + that.storage.set(that.keys.version, VERSION, o.ttl); + that.storage.set(that.keys.protocol, utils.getProtocol(), o.ttl); + } that._mergeProcessedData(processedData); } }, + _transformDatum: function(datum) { + var value = utils.isString(datum) ? datum : datum[this.valueKey], tokens = datum.tokens || utils.tokenizeText(value), item = { + value: value, + tokens: tokens + }; + if (utils.isString(datum)) { + item.datum = {}; + item.datum[this.valueKey] = datum; + } else { + item.datum = datum; + } + item.tokens = utils.filter(item.tokens, function(token) { + return !utils.isBlankString(token); + }); + item.tokens = utils.map(item.tokens, function(token) { + return token.toLowerCase(); + }); + return item; + }, _processData: function(data) { - var itemHash = {}, adjacencyList = {}; - utils.each(data, function(i, item) { - var id; - if (utils.isString(item)) { - item = { - value: item, - tokens: utils.tokenizeText(item) - }; - } - item.tokens = utils.filter(item.tokens || [], function(token) { - return !utils.isBlankString(token); - }); - item.tokens = utils.map(item.tokens, function(token) { - return token.toLowerCase(); - }); - itemHash[id = utils.getUniqueId(item.value)] = item; + var that = this, itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), id = utils.getUniqueId(item.value); + itemHash[id] = item; utils.each(item.tokens, function(i, token) { var character = token.charAt(0), adjacency = adjacencyList[character] || (adjacencyList[character] = [ id ]); !~utils.indexOf(adjacency, id) && adjacency.push(id); @@ -406,122 +449,84 @@ that.adjacencyList[character] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; }); }, - _getPotentiallyMatchingIds: function(terms) { - var potentiallyMatchingIds = []; - var lists = []; - utils.map(terms, utils.bind(function(term) { - var list = this.adjacencyList[term.charAt(0)]; + _getLocalSuggestions: function(terms) { + var that = this, firstChars = [], lists = [], shortestList, suggestions = []; + utils.each(terms, function(i, term) { + var firstChar = term.charAt(0); + !~utils.indexOf(firstChars, firstChar) && firstChars.push(firstChar); + }); + utils.each(firstChars, function(i, firstChar) { + var list = that.adjacencyList[firstChar]; if (!list) { - return; + return false; } lists.push(list); - }, this)); - if (lists.length === 1) { - return lists[0]; - } - var listLengths = []; - $.each(lists, function(i, list) { - listLengths.push(list.length); - }); - var shortestListIndex = utils.indexOf(listLengths, Math.min.apply(null, listLengths)) || 0; - var shortestList = lists[shortestListIndex] || []; - potentiallyMatchingIds = utils.map(shortestList, function(item) { - var idInEveryList = utils.every(lists, function(list) { - return utils.indexOf(list, item) > -1; - }); - if (idInEveryList) { - return item; + if (!shortestList || list.length < shortestList.length) { + shortestList = list; } }); - return potentiallyMatchingIds; - }, - _getItemsFromIds: function(ids) { - var items = []; - utils.map(ids, utils.bind(function(id) { - var item = this.itemHash[id]; - if (item) { - items.push(item); - } - }, this)); - return items; - }, - _matcher: function(terms) { - if (this._customMatcher) { - var customMatcher = this._customMatcher; - return function(item) { - return customMatcher(item); - }; - } else { - return function(item) { - var tokens = item.tokens; - var allTermsMatched = utils.every(terms, function(term) { - var tokensMatched = utils.filter(tokens, function(token) { - return token.indexOf(term) === 0; - }); - return tokensMatched.length; - }); - if (allTermsMatched) { - return item; - } - }; + if (lists.length < firstChars.length) { + return []; } + utils.each(shortestList, function(i, id) { + var item = that.itemHash[id], isCandidate, isMatch; + isCandidate = utils.every(lists, function(list) { + return ~utils.indexOf(list, id); + }); + isMatch = isCandidate && utils.every(terms, function(term) { + return utils.some(item.tokens, function(token) { + return token.indexOf(term) === 0; + }); + }); + isMatch && suggestions.push(item); + }); + return suggestions; }, - _compareItems: function(a, b, areLocalItems) { - var aScoreBoost = !a.score_boost ? 0 : a.score_boost, bScoreBoost = !b.score_boost ? 0 : b.score_boost, aScore = !a.score ? 0 : a.score, bScore = !b.score ? 0 : b.score; - if (areLocalItems) { - return b.weight + bScoreBoost - (a.weight + aScoreBoost); - } else { - return bScore + bScoreBoost - (aScore + aScoreBoost); - } + initialize: function() { + var deferred; + this.local && this._processLocalData(this.local); + this.transport = this.remote ? new Transport(this.remote) : null; + deferred = this.prefetch ? this._loadPrefetchData(this.prefetch) : $.Deferred().resolve(); + this.local = this.prefetch = this.remote = null; + this.initialize = function() { + return deferred; + }; + return deferred; }, - _ranker: function(a, b) { - if (this._customRanker) { - return this._customRanker(a, b); - } else { - var aIsLocal = a.weight && a.weight !== 0; - var bIsLocal = b.weight && b.weight !== 0; - if (aIsLocal && !bIsLocal) { - return -1; - } else if (bIsLocal && !aIsLocal) { - return 1; - } else { - return aIsLocal && bIsLocal ? this._compareItems(a, b, true) : this._compareItems(a, b, false); - } + getSuggestions: function(query, cb) { + var that = this, terms = utils.tokenizeQuery(query), suggestions = this._getLocalSuggestions(terms).slice(0, this.limit); + cb && cb(suggestions); + if (suggestions.length < this.limit && this.transport) { + this.transport.get(query, processRemoteData); } - }, - _processRemoteSuggestions: function(callback, matchedItems) { - var that = this; - return function(data) { - utils.each(data, function(i, remoteItem) { - var isDuplicate = false; - remoteItem = utils.isString(remoteItem) ? { - value: remoteItem - } : remoteItem; - utils.each(matchedItems, function(i, localItem) { - if (remoteItem.value === localItem.value) { - isDuplicate = true; - return false; - } + function processRemoteData(data) { + suggestions = suggestions.slice(0); + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), isDuplicate; + isDuplicate = utils.some(suggestions, function(suggestion) { + return item.value === suggestion.value; }); - !isDuplicate && matchedItems.push(remoteItem); - return matchedItems.length < that.limit; + !isDuplicate && suggestions.push(item); + return suggestions.length < that.limit; }); - callback && callback(matchedItems); - }; - }, - getSuggestions: function(query, callback) { - var terms = utils.tokenizeQuery(query); - var potentiallyMatchingIds = this._getPotentiallyMatchingIds(terms); - var potentiallyMatchingItems = this._getItemsFromIds(potentiallyMatchingIds); - var matchedItems = utils.filter(potentiallyMatchingItems, this._matcher(terms)); - matchedItems.sort(this._ranker); - callback && callback(matchedItems); - if (matchedItems.length < this.limit && this.queryUrl) { - this.transport.get(this.queryUrl, query, this._processRemoteSuggestions(callback, matchedItems)); + cb && cb(suggestions); } } }); return Dataset; + function compileTemplate(template, engine, valueKey) { + var wrapper = '
                                        %body
                                        ', compiledTemplate; + if (template) { + compiledTemplate = engine.compile(wrapper.replace("%body", template)); + } else { + compiledTemplate = { + render: function(context) { + return wrapper.replace("%body", "

                                        " + context[valueKey] + "

                                        "); + } + }; + } + return compiledTemplate; + } }(); var InputView = function() { function InputView(o) { @@ -536,7 +541,6 @@ 38: "up", 40: "down" }; - this.query = ""; this.$hint = $(o.hint); this.$input = $(o.input).on("blur.tt", this._handleBlur).on("focus.tt", this._handleFocus).on("keydown.tt", this._handleSpecialKeyEvent); if (!utils.isMsie()) { @@ -546,30 +550,31 @@ if (that.specialKeyCodeMap[$e.which || $e.keyCode]) { return; } - setTimeout(that._compareQueryToInputValue, 0); + utils.defer(that._compareQueryToInputValue); }); } + this.query = this.$input.val(); this.$overflowHelper = buildOverflowHelper(this.$input); } utils.mixin(InputView.prototype, EventTarget, { _handleFocus: function() { - this.trigger("focus"); + this.trigger("focused"); }, _handleBlur: function() { - this.trigger("blur"); + this.trigger("blured"); }, _handleSpecialKeyEvent: function($e) { var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; - keyName && this.trigger(keyName, $e); + keyName && this.trigger(keyName + "Keyed", $e); }, _compareQueryToInputValue: function() { var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; if (isSameQueryExceptWhitespace) { - this.trigger("whitespaceChange", { + this.trigger("whitespaceChanged", { value: this.query }); } else if (!isSameQuery) { - this.trigger("queryChange", { + this.trigger("queryChanged", { value: this.query = inputValue }); } @@ -642,15 +647,31 @@ }).insertAfter($input); } function compareQueries(a, b) { - a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); - b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ").toLowerCase(); + a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); return a === b; } }(); var DropdownView = function() { + var html = { + suggestionsList: '' + }, css = { + suggestionsList: { + display: "block" + }, + suggestion: { + whiteSpace: "nowrap", + cursor: "pointer" + }, + suggestionChild: { + whiteSpace: "normal" + } + }; function DropdownView(o) { utils.bindAll(this); - this.isMouseOverDropdown; + this.isOpen = false; + this.isEmpty = true; + this.isMouseOverDropdown = false; this.$menu = $(o.menu).on("mouseenter.tt", this._handleMouseenter).on("mouseleave.tt", this._handleMouseleave).on("click.tt", ".tt-suggestion", this._handleSelection).on("mouseover.tt", ".tt-suggestion", this._handleMouseover); } utils.mixin(DropdownView.prototype, EventTarget, { @@ -661,15 +682,23 @@ this.isMouseOverDropdown = false; }, _handleMouseover: function($e) { + var $suggestion = $($e.currentTarget); this._getSuggestions().removeClass("tt-is-under-cursor"); - $($e.currentTarget).addClass("tt-is-under-cursor"); + $suggestion.addClass("tt-is-under-cursor"); }, _handleSelection: function($e) { - this.trigger("select", formatDataForSuggestion($($e.currentTarget))); + var $suggestion = $($e.currentTarget); + this.trigger("suggestionSelected", extractSuggestion($suggestion)); + }, + _show: function() { + this.$menu.css("display", "block"); + }, + _hide: function() { + this.$menu.hide(); }, _moveCursor: function(increment) { var $suggestions, $cur, nextIndex, $underCursor; - if (!this.$menu.hasClass("tt-is-open")) { + if (!this.isVisible()) { return; } $suggestions = this._getSuggestions(); @@ -678,15 +707,13 @@ nextIndex = $suggestions.index($cur) + increment; nextIndex = (nextIndex + 1) % ($suggestions.length + 1) - 1; if (nextIndex === -1) { - this.trigger("cursorOff"); + this.trigger("cursorRemoved"); return; } else if (nextIndex < -1) { nextIndex = $suggestions.length - 1; } $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); - this.trigger("cursorOn", { - value: $underCursor.data("value") - }); + this.trigger("cursorMoved", extractSuggestion($underCursor)); }, _getSuggestions: function() { return this.$menu.find(".tt-suggestions > .tt-suggestion"); @@ -695,25 +722,38 @@ this.$menu.off(".tt"); this.$menu = null; }, - hideUnlessMouseIsOverDropdown: function() { + isVisible: function() { + return this.isOpen && !this.isEmpty; + }, + closeUnlessMouseIsOverDropdown: function() { if (!this.isMouseOverDropdown) { - this.hide(); + this.close(); } }, - hide: function() { - if (this.$menu.hasClass("tt-is-open")) { - this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); - this.trigger("hide"); + close: function() { + if (this.isOpen) { + this.isOpen = false; + this._hide(); + this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); + this.trigger("closed"); } }, - show: function() { - if (!this.$menu.hasClass("tt-is-open")) { - this.$menu.addClass("tt-is-open"); - this.trigger("show"); + open: function() { + if (!this.isOpen) { + this.isOpen = true; + !this.isEmpty && this._show(); + this.trigger("opened"); } }, - isOpen: function() { - return this.$menu.hasClass("tt-is-open"); + setLanguageDirection: function(dir) { + var ltrCss = { + left: "0", + right: "auto" + }, rtlCss = { + left: "auto", + right: " 0" + }; + dir === "ltr" ? this.$menu.css(ltrCss) : this.$menu.css(rtlCss); }, moveCursorUp: function() { this._moveCursor(-1); @@ -723,99 +763,142 @@ }, getSuggestionUnderCursor: function() { var $suggestion = this._getSuggestions().filter(".tt-is-under-cursor").first(); - return $suggestion.length > 0 ? formatDataForSuggestion($suggestion) : null; + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; }, getFirstSuggestion: function() { var $suggestion = this._getSuggestions().first(); - return $suggestion.length > 0 ? formatDataForSuggestion($suggestion) : null; + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; }, - renderSuggestions: function(query, dataset, suggestions) { - var datasetClassName = "tt-dataset-" + dataset.name, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, el; + renderSuggestions: function(dataset, suggestions) { + var datasetClassName = "tt-dataset-" + dataset.name, $suggestionsList, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, $el; if ($dataset.length === 0) { - $dataset = $('
                                        1. ').addClass(datasetClassName).appendTo(this.$menu); + $suggestionsList = $(html.suggestionsList).css(css.suggestionsList); + $dataset = $("
                                          ").addClass(datasetClassName).append(dataset.header).append($suggestionsList).append(dataset.footer).appendTo(this.$menu); } - elBuilder = document.createElement("div"); - fragment = document.createDocumentFragment(); - this.clearSuggestions(dataset.name); if (suggestions.length > 0) { - this.$menu.removeClass("tt-is-empty"); + this.isEmpty = false; + this.isOpen && this._show(); + elBuilder = document.createElement("div"); + fragment = document.createDocumentFragment(); utils.each(suggestions, function(i, suggestion) { - elBuilder.innerHTML = dataset.template.render(suggestion); - el = elBuilder.firstChild; - el.setAttribute("data-value", suggestion.value); - fragment.appendChild(el); + elBuilder.innerHTML = dataset.template.render(suggestion.datum); + $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); + $el.children().each(function() { + $(this).css(css.suggestionChild); + }); + fragment.appendChild($el[0]); }); + $dataset.show().find(".tt-suggestions").html(fragment); + } else { + this.clearSuggestions(dataset.name); } - $dataset.find("> .tt-suggestions").data({ - query: query, - dataset: dataset.name - }).append(fragment); - this.trigger("suggestionsRender"); + this.trigger("suggestionsRendered"); }, clearSuggestions: function(datasetName) { - var $suggestions = datasetName ? this.$menu.find(".tt-dataset-" + datasetName + " .tt-suggestions") : this.$menu.find(".tt-suggestions"); + var $datasets = datasetName ? this.$menu.find(".tt-dataset-" + datasetName) : this.$menu.find('[class^="tt-dataset-"]'), $suggestions = $datasets.find(".tt-suggestions"); + $datasets.hide(); $suggestions.empty(); - this._getSuggestions().length === 0 && this.$menu.addClass("tt-is-empty"); + if (this._getSuggestions().length === 0) { + this.isEmpty = true; + this._hide(); + } } }); return DropdownView; - function formatDataForSuggestion($suggestion) { - var $suggestions = $suggestion.parents(".tt-suggestions").first(); - return { - value: $suggestion.data("value"), - query: $suggestions.data("query"), - dataset: $suggestions.data("dataset") - }; + function extractSuggestion($el) { + return $el.data("suggestion"); } }(); var TypeaheadView = function() { var html = { wrapper: '', - hint: '', - dropdown: '
                                            ' + hint: '', + dropdown: '' + }, css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none" + }, + query: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + dropdown: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + } }; + if (utils.isMsie()) { + utils.mixin(css.query, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + if (utils.isMsie() && utils.isMsie() <= 7) { + utils.mixin(css.wrapper, { + display: "inline", + zoom: "1" + }); + utils.mixin(css.query, { + marginTop: "-1px" + }); + } function TypeaheadView(o) { var $menu, $input, $hint; utils.bindAll(this); - this.$node = wrapInput(o.input); + this.$node = buildDomStructure(o.input); this.datasets = o.datasets; + this.dir = null; + this.eventBus = o.eventBus; $menu = this.$node.find(".tt-dropdown-menu"); $input = this.$node.find(".tt-query"); $hint = this.$node.find(".tt-hint"); this.dropdownView = new DropdownView({ menu: $menu - }).on("select", this._handleSelection).on("cursorOn", this._clearHint).on("cursorOn", this._setInputValueToSuggestionUnderCursor).on("cursorOff", this._setInputValueToQuery).on("cursorOff", this._updateHint).on("suggestionsRender", this._updateHint).on("show", this._updateHint).on("hide", this._clearHint); + }).on("suggestionSelected", this._handleSelection).on("cursorMoved", this._clearHint).on("cursorMoved", this._setInputValueToSuggestionUnderCursor).on("cursorRemoved", this._setInputValueToQuery).on("cursorRemoved", this._updateHint).on("suggestionsRendered", this._updateHint).on("opened", this._updateHint).on("closed", this._clearHint).on("opened closed", this._propagateEvent); this.inputView = new InputView({ input: $input, hint: $hint - }).on("focus", this._showDropdown).on("blur", this._hideDropdown).on("blur", this._setInputValueToQuery).on("enter", this._handleSelection).on("queryChange", this._clearHint).on("queryChange", this._clearSuggestions).on("queryChange", this._getSuggestions).on("whitespaceChange", this._updateHint).on("queryChange whitespaceChange", this._showDropdown).on("queryChange whitespaceChange", this._setLanguageDirection).on("esc", this._hideDropdown).on("esc", this._setInputValueToQuery).on("tab up down", this._managePreventDefault).on("up down", this._moveDropdownCursor).on("up down", this._showDropdown).on("tab left right", this._autocomplete); + }).on("focused", this._openDropdown).on("blured", this._closeDropdown).on("blured", this._setInputValueToQuery).on("enterKeyed", this._handleSelection).on("queryChanged", this._clearHint).on("queryChanged", this._clearSuggestions).on("queryChanged", this._getSuggestions).on("whitespaceChanged", this._updateHint).on("queryChanged whitespaceChanged", this._openDropdown).on("queryChanged whitespaceChanged", this._setLanguageDirection).on("escKeyed", this._closeDropdown).on("escKeyed", this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed", this._managePreventDefault).on("upKeyed downKeyed", this._moveDropdownCursor).on("upKeyed downKeyed", this._openDropdown).on("tabKeyed leftKeyed rightKeyed", this._autocomplete); } utils.mixin(TypeaheadView.prototype, EventTarget, { _managePreventDefault: function(e) { var $e = e.data, hint, inputValue, preventDefault = false; switch (e.type) { - case "tab": + case "tabKeyed": hint = this.inputView.getHintValue(); inputValue = this.inputView.getInputValue(); preventDefault = hint && hint !== inputValue; break; - case "up": - case "down": + case "upKeyed": + case "downKeyed": preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; break; } preventDefault && $e.preventDefault(); }, _setLanguageDirection: function() { - var dirClassName = "tt-" + this.inputView.getLanguageDirection(); - if (!this.$node.hasClass(dirClassName)) { - this.$node.removeClass("tt-ltr tt-rtl").addClass(dirClassName); + var dir = this.inputView.getLanguageDirection(); + if (dir !== this.dir) { + this.dir = dir; + this.$node.css("direction", dir); + this.dropdownView.setLanguageDirection(dir); } }, _updateHint: function() { - var dataForFirstSuggestion = this.dropdownView.getFirstSuggestion(), hint = dataForFirstSuggestion ? dataForFirstSuggestion.value : null, inputValue, query, escapedQuery, beginsWithQuery, match; - if (hint && this.dropdownView.isOpen() && !this.inputView.isOverflow()) { + var suggestion = this.dropdownView.getFirstSuggestion(), hint = suggestion ? suggestion.value : null, dropdownIsVisible = this.dropdownView.isVisible(), inputHasOverflow = this.inputView.isOverflow(), inputValue, query, escapedQuery, beginsWithQuery, match; + if (hint && dropdownIsVisible && !inputHasOverflow) { inputValue = this.inputView.getInputValue(); query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); escapedQuery = utils.escapeRegExChars(query); @@ -837,24 +920,25 @@ var suggestion = e.data; this.inputView.setInputValue(suggestion.value, true); }, - _showDropdown: function() { - this.dropdownView.show(); + _openDropdown: function() { + this.dropdownView.open(); }, - _hideDropdown: function(e) { - this.dropdownView[e.type === "blur" ? "hideUnlessMouseIsOverDropdown" : "hide"](); + _closeDropdown: function(e) { + this.dropdownView[e.type === "blured" ? "closeUnlessMouseIsOverDropdown" : "close"](); }, _moveDropdownCursor: function(e) { var $e = e.data; if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { - this.dropdownView[e.type === "up" ? "moveCursorUp" : "moveCursorDown"](); + this.dropdownView[e.type === "upKeyed" ? "moveCursorUp" : "moveCursorDown"](); } }, _handleSelection: function(e) { - var byClick = e.type === "select", suggestionData = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); - if (suggestionData) { - this.inputView.setInputValue(suggestionData.value); + var byClick = e.type === "suggestionSelected", suggestion = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); + if (suggestion) { + this.inputView.setInputValue(suggestion.value); byClick ? this.inputView.focus() : e.data.preventDefault(); - byClick && utils.isMsie() ? setTimeout(this.dropdownView.hide, 0) : this.dropdownView.hide(); + byClick && utils.isMsie() ? utils.defer(this.dropdownView.close) : this.dropdownView.close(); + this.eventBus.trigger("selected", suggestion.datum); } }, _getSuggestions: function() { @@ -864,22 +948,17 @@ } utils.each(this.datasets, function(i, dataset) { dataset.getSuggestions(query, function(suggestions) { - that._renderSuggestions(query, dataset, suggestions); + if (query === that.inputView.getQuery()) { + that.dropdownView.renderSuggestions(dataset, suggestions); + } }); }); }, - _renderSuggestions: function(query, dataset, suggestions) { - if (query !== this.inputView.getQuery()) { - return; - } - suggestions = suggestions.slice(0, dataset.limit); - this.dropdownView.renderSuggestions(query, dataset, suggestions); - }, _autocomplete: function(e) { - var isCursorAtEnd, ignoreEvent, query, hint; - if (e.type === "right" || e.type === "left") { + var isCursorAtEnd, ignoreEvent, query, hint, suggestion; + if (e.type === "rightKeyed" || e.type === "leftKeyed") { isCursorAtEnd = this.inputView.isCursorAtEnd(); - ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "left" : e.type === "right"; + ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "leftKeyed" : e.type === "rightKeyed"; if (!isCursorAtEnd || ignoreEvent) { return; } @@ -887,9 +966,13 @@ query = this.inputView.getQuery(); hint = this.inputView.getHintValue(); if (hint !== "" && query !== hint) { - this.inputView.setInputValue(hint); + suggestion = this.dropdownView.getFirstSuggestion(); + this.inputView.setInputValue(suggestion.value); } }, + _propagateEvent: function(e) { + this.eventBus.trigger(e.type); + }, destroy: function() { this.inputView.destroy(); this.dropdownView.destroy(); @@ -898,117 +981,101 @@ } }); return TypeaheadView; - function wrapInput(input) { - var $input = $(input), $hint = $(html.hint).css({ - "background-color": $input.css("background-color") + function buildDomStructure(input) { + var $wrapper = $(html.wrapper), $dropdown = $(html.dropdown), $input = $(input), $hint = $(html.hint); + $wrapper = $wrapper.css(css.wrapper); + $dropdown = $dropdown.css(css.dropdown); + $hint.css(css.hint).css({ + backgroundAttachment: $input.css("background-attachment"), + backgroundClip: $input.css("background-clip"), + backgroundColor: $input.css("background-color"), + backgroundImage: $input.css("background-image"), + backgroundOrigin: $input.css("background-origin"), + backgroundPosition: $input.css("background-position"), + backgroundRepeat: $input.css("background-repeat"), + backgroundSize: $input.css("background-size") }); - if ($input.length === 0) { - return null; - } $input.data("ttAttrs", { dir: $input.attr("dir"), autocomplete: $input.attr("autocomplete"), - spellcheck: $input.attr("spellcheck") + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") }); + $input.addClass("tt-query").attr({ + autocomplete: "off", + spellcheck: false + }).css(css.query); try { !$input.attr("dir") && $input.attr("dir", "auto"); } catch (e) {} - return $input.attr({ - autocomplete: "off", - spellcheck: false - }).addClass("tt-query").wrap(html.wrapper).parent().prepend($hint).append(html.dropdown); + return $input.wrap($wrapper).parent().prepend($hint).append($dropdown); } function destroyDomStructure($node) { var $input = $node.find(".tt-query"); utils.each($input.data("ttAttrs"), function(key, val) { utils.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); }); - $input.detach().removeClass("tt-query").insertAfter($node); + $input.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter($node); $node.remove(); } }(); (function() { - var initializedDatasets = {}, transportOptions = {}, transport, methods; - jQuery.fn.typeahead = typeahead; - typeahead.configureTransport = configureTransport; + var cache = {}, viewKey = "ttView", methods; methods = { initialize: function(datasetDefs) { - var datasets = {}; + var datasets; datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; + if (this.length === 0) { + $.error("typeahead initialized without DOM element"); + } if (datasetDefs.length === 0) { - throw new Error("no datasets provided"); - } - delete typeahead.configureTransport; - transport = transport || new Transport(transportOptions); - utils.each(datasetDefs, function(i, datasetDef) { - var dataset, name = datasetDef.name = datasetDef.name || utils.getUniqueId(); - if (initializedDatasets[name]) { - dataset = initializedDatasets[name]; - } else { - datasetDef.limit = datasetDef.limit || 5; - if (datasetDef.template && !datasetDef.engine) { - throw new Error("no template engine specified for " + name); - } - dataset = initializedDatasets[name] = new Dataset({ - name: datasetDef.name, - limit: datasetDef.limit, - local: datasetDef.local, - prefetch: datasetDef.prefetch, - ttl_ms: datasetDef.ttl_ms, - remote: datasetDef.remote, - matcher: datasetDef.matcher, - ranker: datasetDef.ranker, - transport: transport - }); + $.error("no datasets provided"); + } + datasets = utils.map(datasetDefs, function(o) { + var dataset = cache[o.name] ? cache[o.name] : new Dataset(o); + if (o.name) { + cache[o.name] = dataset; } - datasets[name] = { - name: datasetDef.name, - limit: datasetDef.limit, - template: compileTemplate(datasetDef.template, datasetDef.engine), - getSuggestions: dataset.getSuggestions - }; + return dataset; }); - return this.each(function() { - $(this).data({ - typeahead: new TypeaheadView({ - input: this, - datasets: datasets - }) + return this.each(initialize); + function initialize() { + var $input = $(this), deferreds, eventBus = new EventBus({ + el: $input }); - }); + deferreds = utils.map(datasets, function(dataset) { + return dataset.initialize(); + }); + $input.data(viewKey, new TypeaheadView({ + input: $input, + eventBus: eventBus = new EventBus({ + el: $input + }), + datasets: datasets + })); + $.when.apply($, deferreds).always(function() { + utils.defer(function() { + eventBus.trigger("initialized"); + }); + }); + } }, destroy: function() { this.each(function() { - var $this = $(this), view = $this.data("typeahead"); + var $this = $(this), view = $this.data(viewKey); if (view) { view.destroy(); - $this.removeData("typeahead"); + $this.removeData(viewKey); } }); } }; - function typeahead(method) { + jQuery.fn.typeahead = function(method) { if (methods[method]) { return methods[method].apply(this, [].slice.call(arguments, 1)); } else { return methods.initialize.apply(this, arguments); } - } - function configureTransport(o) { - transportOptions = o; - } - function compileTemplate(template, engine) { - var wrapper = '
                                          1. %body
                                          2. ', compiledTemplate; - if (template) { - compiledTemplate = engine.compile(wrapper.replace("%body", template)); - } else { - compiledTemplate = { - render: function(context) { - return wrapper.replace("%body", "

                                            " + context.value + "

                                            "); - } - }; - } - return compiledTemplate; - } + }; })(); })(window.jQuery); \ No newline at end of file diff --git a/releases/latest/typeahead.js.zip b/releases/latest/typeahead.js.zip index e208bf69474645020991a67077850b51932fb5ea..b5ecc8d48e060d21be6a8b98ec935ba14565a312 100644 GIT binary patch literal 16775 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 literal 17220 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 Xz~>EC;E@.HzS6Byi~;0Oc&o?8Fx diff --git a/releases/latest/typeahead.min.js b/releases/latest/typeahead.min.js index d2f5458478..c7b7687029 100644 --- a/releases/latest/typeahead.min.js +++ b/releases/latest/typeahead.min.js @@ -1,7 +1,7 @@ /*! - * typeahead.js 0.8.2 + * typeahead.js 0.9.0 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ -(function(t){var e="0.8.2",n={isMsie:function(){return/msie [\w.]+/i.test(navigator.userAgent)},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var n;for(var i in e)t.isFunction(n=e[i])&&(e[i]=t.proxy(n,e))},indexOf:function(t,e){for(var n=0;t.length>n;n++)if(t[n]===e)return n;return-1},each:t.each,map:t.map,filter:function(e,n){var i=[];return t.each(e,function(t,s){n(s,t,e)&&i.push(s)}),i},every:function(e,n){var i=!0;return e?(t.each(e,function(t,s){return(i=n.call(null,s,t,e))?void 0:!1}),!!i):i},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,c=e-(a-o);return n=this,i=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,c)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},i=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),s=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function i(t){return JSON.stringify(n.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return n.isNumber(r)?o.setItem(this._ttlKey(t),i(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),i(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,n=[],i=o.length;for(t=0;i>t;t++)(e=o.key(t)).match(this.keyMatcher)&&n.push(e.replace(this.keyMatcher,""));for(t=n.length;t--;)this.remove(n[t]);return this},isExpired:function(t){var i=s(o.getItem(this._ttlKey(t)));return n.isNumber(i)&&e()>i?!0:!1}}:{get:n.noop,set:n.noop,remove:n.noop,clear:n.noop,isExpired:n.noop},n.mixin(t.prototype,r),t}(),r=function(){function t(t){n.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return n.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),o=function(){function e(t){var e;n.bindAll(this),t=t||{},e=/^throttle$/i.test(t.rateLimitFn)?n.throttle:n.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new r,this.get=e(this.get,this.wait)}return n.mixin(e.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return e?t:void 0})},_getItemsFromIds:function(t){var e=[];return n.map(t,n.bind(function(t){var n=this.itemHash[t];n&&e.push(n)},this)),e},_matcher:function(t){if(this._customMatcher){var e=this._customMatcher;return function(t){return e(t)}}return function(e){var i=e.tokens,s=n.every(t,function(t){var e=n.filter(i,function(e){return 0===e.indexOf(t)});return e.length});return s?e:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRemoteSuggestions:function(t,e){var i=this;return function(s){n.each(s,function(t,s){var r=!1;return s=n.isString(s)?{value:s}:s,n.each(e,function(t,e){return s.value===e.value?(r=!0,!1):void 0}),!r&&e.push(s),e.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ").toLowerCase(),t===e}return n.mixin(e.prototype,i,{_handleFocus:function(){this.trigger("focus")},_handleBlur:function(){this.trigger("blur")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e,t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),n=e?this.query.length!==t.length:!1;n?this.trigger("whitespaceChange",{value:this.query}):e||this.trigger("queryChange",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,i=this.$input[0].selectionStart;return n.isNumber(i)?i===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),c=function(){function e(e){n.bindAll(this),this.isMouseOverDropdown,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return n.mixin(e.prototype,i,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){this._getSuggestions().removeClass("tt-is-under-cursor"),t(e.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(e){this.trigger("select",s(t(e.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,i,s){var r,o,u,a="tt-dataset-"+i.name,c=this.$menu.find("."+a);0===c.length&&(c=t('
                                            1. ').addClass(a).appendTo(this.$menu)),r=document.createElement("div"),o=document.createDocumentFragment(),this.clearSuggestions(i.name),s.length>0&&(this.$menu.removeClass("tt-is-empty"),n.each(s,function(t,e){r.innerHTML=i.template.render(e),u=r.firstChild,u.setAttribute("data-value",e.value),o.appendChild(u)})),c.find("> .tt-suggestions").data({query:e,dataset:i.name}).append(o),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),e}(),h=function(){function e(t){var e,i,r;n.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,e=this.$node.find(".tt-dropdown-menu"),i=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new c({menu:e}).on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView=new a({input:i,hint:r}).on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("tab up down",this._managePreventDefault).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab left right",this._autocomplete)}function s(e){var n=t(e),i=t(o.hint).css({"background-color":n.css("background-color")});if(0===n.length)return null;n.data("ttAttrs",{dir:n.attr("dir"),autocomplete:n.attr("autocomplete"),spellcheck:n.attr("spellcheck")});try{!n.attr("dir")&&n.attr("dir","auto")}catch(s){}return n.attr({autocomplete:"off",spellcheck:!1}).addClass("tt-query").wrap(o.wrapper).parent().prepend(i).append(o.dropdown)}function r(t){var e=t.find(".tt-query");n.each(e.data("ttAttrs"),function(t,i){n.isUndefined(i)?e.removeAttr(t):e.attr(t,i)}),e.detach().removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:'
                                                '};return n.mixin(e.prototype,i,{_managePreventDefault:function(t){var e,n,i=t.data,s=!1;switch(t.type){case"tab":e=this.inputView.getHintValue(),n=this.inputView.getInputValue(),s=e&&e!==n;break;case"up":case"down":s=!i.shiftKey&&!i.ctrlKey&&!i.metaKey}s&&i.preventDefault()},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,i,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null;u&&this.dropdownView.isOpen()&&!this.inputView.isOverflow()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),i=n.escapeRegExChars(e),s=RegExp("^(?:"+i+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="select"===t.type,i=e?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),e?this.inputView.focus():t.data.preventDefault(),e&&n.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();n.isBlankString(e)||n.each(this.datasets,function(n,i){i.getSuggestions(e,function(n){t._renderSuggestions(e,i,n)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null}}),e}();(function(){function e(t){return a[t]?a[t].apply(this,[].slice.call(arguments,1)):a.initialize.apply(this,arguments)}function i(t){l=t}function s(t,e){var n,i='
                                              1. %body
                                              2. ';return n=t?e.compile(i.replace("%body",t)):{render:function(t){return i.replace("%body","

                                                "+t.value+"

                                                ")}}}var r,a,c={},l={};jQuery.fn.typeahead=e,e.configureTransport=i,a={initialize:function(i){var a={};if(i=n.isArray(i)?i:[i],0===i.length)throw Error("no datasets provided");return delete e.configureTransport,r=r||new o(l),n.each(i,function(t,e){var i,o=e.name=e.name||n.getUniqueId();if(c[o])i=c[o];else{if(e.limit=e.limit||5,e.template&&!e.engine)throw Error("no template engine specified for "+o);i=c[o]=new u({name:e.name,limit:e.limit,local:e.local,prefetch:e.prefetch,ttl_ms:e.ttl_ms,remote:e.remote,matcher:e.matcher,ranker:e.ranker,transport:r})}a[o]={name:e.name,limit:e.limit,template:s(e.template,e.engine),getSuggestions:i.getSuggestions}}),this.each(function(){t(this).data({typeahead:new h({input:this,datasets:a})})})},destroy:function(){this.each(function(){var e=t(this),n=e.data("typeahead");n&&(n.destroy(),e.removeData("typeahead"))})}}})()})(window.jQuery); \ No newline at end of file +(function(t){var e="0.9.0",i={isMsie:function(){var t=/(msie) ([\w.]+)/i.exec(navigator.userAgent);return t?parseInt(t[2],10):!1},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var i;for(var n in e)t.isFunction(i=e[n])&&(e[n]=t.proxy(i,e))},indexOf:function(t,e){for(var i=0;t.length>i;i++)if(t[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,a=this,u=arguments;return r=function(){n=null,i||(s=t.apply(a,u))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(a,u)),s}},throttle:function(t,e){var i,n,s,r,o,a;return o=0,a=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var u=new Date,c=e-(u-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=u,r=t.apply(i,n)):s||(s=setTimeout(a,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return i.isNumber(r)?o.setItem(this._ttlKey(t),n(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),n(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=o.length;for(t=0;n>t;t++)(e=o.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(o.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,r),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),a=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,u=u||new o,a=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:a||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this.get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this.get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return a>c}var a,u,c=0;return i.mixin(e.prototype,{get:function(e,i){function o(t){t=l.filter?l.filter(t):t,i&&i(t),u.set(c,t)}function a(){s(),l.onDeckRequestArgs&&(l.get.apply(l,l.onDeckRequestArgs),l.onDeckRequestArgs=null)}var c,h,l=this,d=encodeURIComponent(e||"");c=this.replace?this.replace(this.url,d):this.url.replace(this.wildcard,d),(h=u.get(c))?i&&i(h):r()?(n(),t.ajax(c,this.ajaxSettings).done(o).always(a)):this.onDeckRequestArgs=[].slice.call(arguments,0)}}),e}(),u=function(){function n(e){i.bindAll(this),e.template&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is requried"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.keys={version:"version",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"},this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,i){var n,s='
                                                %body
                                                ';return n=t?e.compile(s.replace("%body",t)):{render:function(t){return s.replace("%body","

                                                "+t[i]+"

                                                ")}}}return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var s=n.filter?n.filter(t):t,r=l._processData(s),o=r.itemHash,a=r.adjacencyList;l.storage&&(l.storage.set(l.keys.itemHash,o,n.ttl),l.storage.set(l.keys.adjacencyList,a,n.ttl),l.storage.set(l.keys.version,e,n.ttl),l.storage.set(l.keys.protocol,i.getProtocol(),n.ttl)),l._mergeProcessedData(r)}var r,o,a,u,c,h,l=this;return this.storage&&(o=this.storage.get(this.keys.version),a=this.storage.get(this.keys.protocol),u=this.storage.get(this.keys.itemHash),c=this.storage.get(this.keys.adjacencyList),h=o!==e||a!==i.getProtocol()),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,u&&c&&!h?(this._mergeProcessedData({itemHash:u,adjacencyList:c}),r=t.Deferred().resolve()):r=t.getJSON(n.url).done(s),r},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),a=i.getUniqueId(o.value);n[a]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[a]);!~i.indexOf(r,a)&&r.push(a)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,a,u,c,h="tt-dataset-"+e.name,l=this.$menu.find("."+h);0===l.length&&(s=t(r.suggestionsList).css(o.suggestionsList),l=t("
                                                ").addClass(h).append(e.header).append(s).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),a=document.createElement("div"),u=document.createDocumentFragment(),i.each(n,function(i,n){a.innerHTML=e.template.render(n.datum),c=t(a.firstChild).css(o.suggestion).data("suggestion",n),c.children().each(function(){t(this).css(o.suggestionChild)}),u.appendChild(c[0])}),l.show().find(".tt-suggestions").html(u)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(a.wrapper),n=n.css(a.dropdown),r.css(a.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(a.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(u){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(a.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(a.wrapper,{display:"inline",zoom:"1"}),i.mixin(a.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),a=o?o.value:null,u=this.dropdownView.isVisible(),c=this.inputView.isOverflow();a&&u&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(a),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(a,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:a})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var a;return e=i.isArray(e)?e:[e],0===this.length&&t.error("typeahead initialized without DOM element"),0===e.length&&t.error("no datasets provided"),a=i.map(e,function(t){var e=n[t.name]?n[t.name]:new u(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){this.each(function(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))})}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file From 0cfa275dde993f0543de16f764240b1af92ca089 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sun, 31 Mar 2013 17:45:46 -0700 Subject: [PATCH 18/44] Add assets for 0.9.1. --- index.html | 2 +- releases/0.9.1/typeahead.js | 1121 ++++++++++++++++++++++++++++++ releases/0.9.1/typeahead.js.zip | Bin 0 -> 17247 bytes releases/0.9.1/typeahead.min.js | 7 + releases/latest/typeahead.js | 160 +++-- releases/latest/typeahead.js.zip | Bin 16775 -> 17247 bytes releases/latest/typeahead.min.js | 4 +- 7 files changed, 1231 insertions(+), 63 deletions(-) create mode 100644 releases/0.9.1/typeahead.js create mode 100644 releases/0.9.1/typeahead.js.zip create mode 100644 releases/0.9.1/typeahead.min.js diff --git a/index.html b/index.html index e5a038bfcb..c68b69321d 100644 --- a/index.html +++ b/index.html @@ -27,7 +27,7 @@

                                                typeahea
                                                - download v0.9.0 + download v0.9.1 project & docs on GitHub · changelog diff --git a/releases/0.9.1/typeahead.js b/releases/0.9.1/typeahead.js new file mode 100644 index 0000000000..6ff5f71544 --- /dev/null +++ b/releases/0.9.1/typeahead.js @@ -0,0 +1,1121 @@ +/*! + * typeahead.js 0.9.1 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function($) { + var VERSION = "0.9.1"; + var utils = { + isMsie: function() { + var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); + return match ? parseInt(match[2], 10) : 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"; + }, + bind: $.proxy, + bindAll: function(obj) { + var val; + for (var key in obj) { + $.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); + } + }, + indexOf: function(haystack, needle) { + for (var i = 0; i < haystack.length; i++) { + if (haystack[i] === needle) { + return i; + } + } + return -1; + }, + each: $.each, + 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, + getUniqueId: function() { + var counter = 0; + return function() { + return counter++; + }; + }(), + 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; + }; + }, + tokenizeQuery: function(str) { + return $.trim(str).toLowerCase().split(/[\s]+/); + }, + tokenizeText: function(str) { + return $.trim(str).toLowerCase().split(/[\s\-_]+/); + }, + getProtocol: function() { + return location.protocol; + }, + noop: function() {} + }; + var EventTarget = function() { + var eventSplitter = /\s+/; + return { + on: function(events, callback) { + var event; + if (!callback) { + return this; + } + this._callbacks = this._callbacks || {}; + events = events.split(eventSplitter); + while (event = events.shift()) { + this._callbacks[event] = this._callbacks[event] || []; + this._callbacks[event].push(callback); + } + return this; + }, + trigger: function(events, data) { + var event, callbacks; + if (!this._callbacks) { + return this; + } + events = events.split(eventSplitter); + while (event = events.shift()) { + if (callbacks = this._callbacks[event]) { + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i].call(this, { + type: event, + data: data + }); + } + } + } + return this; + } + }; + }(); + var EventBus = function() { + var namespace = "typeahead:"; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + utils.mixin(EventBus.prototype, { + trigger: function(type) { + var args = [].slice.call(arguments, 1); + this.$el.trigger(namespace + type, args); + } + }); + return EventBus; + }(); + var PersistentStorage = function() { + var ls = window.localStorage, methods; + function PersistentStorage(namespace) { + this.prefix = [ "__", namespace, "__" ].join(""); + this.ttlKey = "__ttl__"; + this.keyMatcher = new RegExp("^" + this.prefix); + } + if (window.localStorage && window.JSON) { + methods = { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, + get: function(key) { + if (this.isExpired(key)) { + this.remove(key); + } + return decode(ls.getItem(this._prefix(key))); + }, + set: function(key, val, ttl) { + if (utils.isNumber(ttl)) { + ls.setItem(this._ttlKey(key), encode(now() + ttl)); + } else { + ls.removeItem(this._ttlKey(key)); + } + return ls.setItem(this._prefix(key), encode(val)); + }, + remove: function(key) { + ls.removeItem(this._ttlKey(key)); + ls.removeItem(this._prefix(key)); + return this; + }, + clear: function() { + var i, key, keys = [], len = ls.length; + for (i = 0; i < len; i++) { + if ((key = ls.key(i)).match(this.keyMatcher)) { + keys.push(key.replace(this.keyMatcher, "")); + } + } + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } + return this; + }, + isExpired: function(key) { + var ttl = decode(ls.getItem(this._ttlKey(key))); + return utils.isNumber(ttl) && now() > ttl ? true : false; + } + }; + } else { + methods = { + get: utils.noop, + set: utils.noop, + remove: utils.noop, + clear: utils.noop, + isExpired: utils.noop + }; + } + utils.mixin(PersistentStorage.prototype, methods); + return PersistentStorage; + function now() { + return new Date().getTime(); + } + function encode(val) { + return JSON.stringify(utils.isUndefined(val) ? null : val); + } + function decode(val) { + return JSON.parse(val); + } + }(); + var RequestCache = function() { + function RequestCache(o) { + utils.bindAll(this); + o = o || {}; + this.sizeLimit = o.sizeLimit || 10; + this.cache = {}; + this.cachedKeysByAge = []; + } + utils.mixin(RequestCache.prototype, { + get: function(url) { + return this.cache[url]; + }, + set: function(url, resp) { + var requestToEvict; + if (this.cachedKeysByAge.length === this.sizeLimit) { + requestToEvict = this.cachedKeysByAge.shift(); + delete this.cache[requestToEvict]; + } + this.cache[url] = resp; + this.cachedKeysByAge.push(url); + } + }); + return RequestCache; + }(); + var Transport = function() { + var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests, requestCache; + function Transport(o) { + utils.bindAll(this); + o = utils.isString(o) ? { + url: o + } : o; + requestCache = requestCache || new RequestCache(); + maxPendingRequests = utils.isNumber(o.maxParallelRequests) ? o.maxParallelRequests : maxPendingRequests || 6; + this.url = o.url; + this.wildcard = o.wildcard || "%QUERY"; + this.filter = o.filter; + this.replace = o.replace; + this.ajaxSettings = { + type: "get", + cache: o.cache, + timeout: o.timeout, + dataType: o.dataType || "json", + beforeSend: o.beforeSend + }; + this._get = (/^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce)(this._get, o.rateLimitWait || 300); + } + utils.mixin(Transport.prototype, { + _get: function(url, cb) { + var that = this; + if (belowPendingRequestsThreshold()) { + this._sendRequest(url).done(done); + } else { + this.onDeckRequestArgs = [].slice.call(arguments, 0); + } + function done(resp) { + var data = that.filter ? that.filter(resp) : resp; + cb && cb(data); + requestCache.set(url, resp); + } + }, + _sendRequest: function(url) { + var that = this, jqXhr = pendingRequests[url]; + if (!jqXhr) { + incrementPendingRequests(); + jqXhr = pendingRequests[url] = $.ajax(url, this.ajaxSettings).always(always); + } + return jqXhr; + function always() { + decrementPendingRequests(); + pendingRequests[url] = null; + if (that.onDeckRequestArgs) { + that._get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } + }, + get: function(query, cb) { + var that = this, encodedQuery = encodeURIComponent(query || ""), url, resp; + cb = cb || utils.noop; + url = this.replace ? this.replace(this.url, encodedQuery) : this.url.replace(this.wildcard, encodedQuery); + if (resp = requestCache.get(url)) { + utils.defer(function() { + cb(that.filter ? that.filter(resp) : resp); + }); + } else { + this._get(url, cb); + } + return !!resp; + } + }); + return Transport; + function incrementPendingRequests() { + pendingRequestsCount++; + } + function decrementPendingRequests() { + pendingRequestsCount--; + } + function belowPendingRequestsThreshold() { + return pendingRequestsCount < maxPendingRequests; + } + }(); + var Dataset = function() { + var keys = { + thumbprint: "thumbprint", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; + function Dataset(o) { + utils.bindAll(this); + if (utils.isString(o.template) && !o.engine) { + $.error("no template engine specified"); + } + if (!o.local && !o.prefetch && !o.remote) { + $.error("one of local, prefetch, or remote is required"); + } + this.name = o.name || utils.getUniqueId(); + this.limit = o.limit || 5; + this.minLength = o.minLength || 1; + this.header = o.header; + this.footer = o.footer; + this.valueKey = o.valueKey || "value"; + this.template = compileTemplate(o.template, o.engine, this.valueKey); + this.local = o.local; + this.prefetch = o.prefetch; + this.remote = o.remote; + this.itemHash = {}; + this.adjacencyList = {}; + this.storage = o.name ? new PersistentStorage(o.name) : null; + } + utils.mixin(Dataset.prototype, { + _processLocalData: function(data) { + this._mergeProcessedData(this._processData(data)); + }, + _loadPrefetchData: function(o) { + var that = this, thumbprint = VERSION + (o.thumbprint || ""), storedThumbprint, storedProtocol, storedItemHash, storedAdjacencyList, isExpired, deferred; + if (this.storage) { + storedThumbprint = this.storage.get(keys.thumbprint); + storedProtocol = this.storage.get(keys.protocol); + storedItemHash = this.storage.get(keys.itemHash); + storedAdjacencyList = this.storage.get(keys.adjacencyList); + } + isExpired = storedThumbprint !== thumbprint || storedProtocol !== utils.getProtocol(); + o = utils.isString(o) ? { + url: o + } : o; + o.ttl = utils.isNumber(o.ttl) ? o.ttl : 24 * 60 * 60 * 1e3; + if (storedItemHash && storedAdjacencyList && !isExpired) { + this._mergeProcessedData({ + itemHash: storedItemHash, + adjacencyList: storedAdjacencyList + }); + deferred = $.Deferred().resolve(); + } else { + deferred = $.getJSON(o.url).done(processPrefetchData); + } + return deferred; + function processPrefetchData(data) { + var filteredData = o.filter ? o.filter(data) : data, processedData = that._processData(filteredData), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + if (that.storage) { + that.storage.set(keys.itemHash, itemHash, o.ttl); + that.storage.set(keys.adjacencyList, adjacencyList, o.ttl); + that.storage.set(keys.thumbprint, thumbprint, o.ttl); + that.storage.set(keys.protocol, utils.getProtocol(), o.ttl); + } + that._mergeProcessedData(processedData); + } + }, + _transformDatum: function(datum) { + var value = utils.isString(datum) ? datum : datum[this.valueKey], tokens = datum.tokens || utils.tokenizeText(value), item = { + value: value, + tokens: tokens + }; + if (utils.isString(datum)) { + item.datum = {}; + item.datum[this.valueKey] = datum; + } else { + item.datum = datum; + } + item.tokens = utils.filter(item.tokens, function(token) { + return !utils.isBlankString(token); + }); + item.tokens = utils.map(item.tokens, function(token) { + return token.toLowerCase(); + }); + return item; + }, + _processData: function(data) { + var that = this, itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), id = utils.getUniqueId(item.value); + itemHash[id] = item; + utils.each(item.tokens, function(i, token) { + var character = token.charAt(0), adjacency = adjacencyList[character] || (adjacencyList[character] = [ id ]); + !~utils.indexOf(adjacency, id) && adjacency.push(id); + }); + }); + return { + itemHash: itemHash, + adjacencyList: adjacencyList + }; + }, + _mergeProcessedData: function(processedData) { + var that = this; + utils.mixin(this.itemHash, processedData.itemHash); + utils.each(processedData.adjacencyList, function(character, adjacency) { + var masterAdjacency = that.adjacencyList[character]; + that.adjacencyList[character] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + }); + }, + _getLocalSuggestions: function(terms) { + var that = this, firstChars = [], lists = [], shortestList, suggestions = []; + utils.each(terms, function(i, term) { + var firstChar = term.charAt(0); + !~utils.indexOf(firstChars, firstChar) && firstChars.push(firstChar); + }); + utils.each(firstChars, function(i, firstChar) { + var list = that.adjacencyList[firstChar]; + if (!list) { + return false; + } + lists.push(list); + if (!shortestList || list.length < shortestList.length) { + shortestList = list; + } + }); + if (lists.length < firstChars.length) { + return []; + } + utils.each(shortestList, function(i, id) { + var item = that.itemHash[id], isCandidate, isMatch; + isCandidate = utils.every(lists, function(list) { + return ~utils.indexOf(list, id); + }); + isMatch = isCandidate && utils.every(terms, function(term) { + return utils.some(item.tokens, function(token) { + return token.indexOf(term) === 0; + }); + }); + isMatch && suggestions.push(item); + }); + return suggestions; + }, + initialize: function() { + var deferred; + this.local && this._processLocalData(this.local); + this.transport = this.remote ? new Transport(this.remote) : null; + deferred = this.prefetch ? this._loadPrefetchData(this.prefetch) : $.Deferred().resolve(); + this.local = this.prefetch = this.remote = null; + this.initialize = function() { + return deferred; + }; + return deferred; + }, + getSuggestions: function(query, cb) { + var that = this, terms, suggestions, cacheHit = false; + if (query.length < this.minLength) { + return; + } + terms = utils.tokenizeQuery(query); + suggestions = this._getLocalSuggestions(terms).slice(0, this.limit); + if (suggestions.length < this.limit && this.transport) { + cacheHit = this.transport.get(query, processRemoteData); + } + !cacheHit && cb && cb(suggestions); + function processRemoteData(data) { + suggestions = suggestions.slice(0); + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), isDuplicate; + isDuplicate = utils.some(suggestions, function(suggestion) { + return item.value === suggestion.value; + }); + !isDuplicate && suggestions.push(item); + return suggestions.length < that.limit; + }); + cb && cb(suggestions); + } + } + }); + return Dataset; + function compileTemplate(template, engine, valueKey) { + var wrapper = '
                                                %body
                                                ', renderFn, wrappedTemplate, compiledTemplate; + if (utils.isFunction(template)) { + renderFn = template; + } else if (utils.isString(template)) { + wrappedTemplate = wrapper.replace("%body", template); + compiledTemplate = engine.compile(wrappedTemplate); + renderFn = utils.bind(compiledTemplate.render, compiledTemplate); + } else { + renderFn = function(context) { + return wrapper.replace("%body", "

                                                " + context[valueKey] + "

                                                "); + }; + } + return renderFn; + } + }(); + var InputView = function() { + function InputView(o) { + var that = this; + utils.bindAll(this); + this.specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + this.$hint = $(o.hint); + this.$input = $(o.input).on("blur.tt", this._handleBlur).on("focus.tt", this._handleFocus).on("keydown.tt", this._handleSpecialKeyEvent); + if (!utils.isMsie()) { + this.$input.on("input.tt", this._compareQueryToInputValue); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (that.specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + utils.defer(that._compareQueryToInputValue); + }); + } + this.query = this.$input.val(); + this.$overflowHelper = buildOverflowHelper(this.$input); + } + utils.mixin(InputView.prototype, EventTarget, { + _handleFocus: function() { + this.trigger("focused"); + }, + _handleBlur: function() { + this.trigger("blured"); + }, + _handleSpecialKeyEvent: function($e) { + var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; + keyName && this.trigger(keyName + "Keyed", $e); + }, + _compareQueryToInputValue: function() { + var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; + if (isSameQueryExceptWhitespace) { + this.trigger("whitespaceChanged", { + value: this.query + }); + } else if (!isSameQuery) { + this.trigger("queryChanged", { + value: this.query = inputValue + }); + } + }, + destroy: function() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$hint = this.$input = this.$overflowHelper = null; + }, + focus: function() { + this.$input.focus(); + }, + blur: function() { + this.$input.blur(); + }, + getQuery: function() { + return this.query; + }, + setQuery: function(query) { + this.query = query; + }, + getInputValue: function() { + return this.$input.val(); + }, + setInputValue: function(value, silent) { + this.$input.val(value); + !silent && this._compareQueryToInputValue(); + }, + getHintValue: function() { + return this.$hint.val(); + }, + setHintValue: function(value) { + this.$hint.val(value); + }, + getLanguageDirection: function() { + return (this.$input.css("direction") || "ltr").toLowerCase(); + }, + isOverflow: function() { + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() > this.$input.width(); + }, + isCursorAtEnd: function() { + var valueLength = this.$input.val().length, selectionStart = this.$input[0].selectionStart, range; + if (utils.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + } + }); + return InputView; + function buildOverflowHelper($input) { + return $("").css({ + position: "absolute", + left: "-9999px", + visibility: "hidden", + whiteSpace: "nowrap", + 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 compareQueries(a, b) { + a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + return a === b; + } + }(); + var DropdownView = function() { + var html = { + suggestionsList: '' + }, css = { + suggestionsList: { + display: "block" + }, + suggestion: { + whiteSpace: "nowrap", + cursor: "pointer" + }, + suggestionChild: { + whiteSpace: "normal" + } + }; + function DropdownView(o) { + utils.bindAll(this); + this.isOpen = false; + this.isEmpty = true; + this.isMouseOverDropdown = false; + this.$menu = $(o.menu).on("mouseenter.tt", this._handleMouseenter).on("mouseleave.tt", this._handleMouseleave).on("click.tt", ".tt-suggestion", this._handleSelection).on("mouseover.tt", ".tt-suggestion", this._handleMouseover); + } + utils.mixin(DropdownView.prototype, EventTarget, { + _handleMouseenter: function() { + this.isMouseOverDropdown = true; + }, + _handleMouseleave: function() { + this.isMouseOverDropdown = false; + }, + _handleMouseover: function($e) { + var $suggestion = $($e.currentTarget); + this._getSuggestions().removeClass("tt-is-under-cursor"); + $suggestion.addClass("tt-is-under-cursor"); + }, + _handleSelection: function($e) { + var $suggestion = $($e.currentTarget); + this.trigger("suggestionSelected", extractSuggestion($suggestion)); + }, + _show: function() { + this.$menu.css("display", "block"); + }, + _hide: function() { + this.$menu.hide(); + }, + _moveCursor: function(increment) { + var $suggestions, $cur, nextIndex, $underCursor; + if (!this.isVisible()) { + return; + } + $suggestions = this._getSuggestions(); + $cur = $suggestions.filter(".tt-is-under-cursor"); + $cur.removeClass("tt-is-under-cursor"); + nextIndex = $suggestions.index($cur) + increment; + nextIndex = (nextIndex + 1) % ($suggestions.length + 1) - 1; + if (nextIndex === -1) { + this.trigger("cursorRemoved"); + return; + } else if (nextIndex < -1) { + nextIndex = $suggestions.length - 1; + } + $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); + this.trigger("cursorMoved", extractSuggestion($underCursor)); + }, + _getSuggestions: function() { + return this.$menu.find(".tt-suggestions > .tt-suggestion"); + }, + destroy: function() { + this.$menu.off(".tt"); + this.$menu = null; + }, + isVisible: function() { + return this.isOpen && !this.isEmpty; + }, + closeUnlessMouseIsOverDropdown: function() { + if (!this.isMouseOverDropdown) { + this.close(); + } + }, + close: function() { + if (this.isOpen) { + this.isOpen = false; + this._hide(); + this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); + this.trigger("closed"); + } + }, + open: function() { + if (!this.isOpen) { + this.isOpen = true; + !this.isEmpty && this._show(); + this.trigger("opened"); + } + }, + setLanguageDirection: function(dir) { + var ltrCss = { + left: "0", + right: "auto" + }, rtlCss = { + left: "auto", + right: " 0" + }; + dir === "ltr" ? this.$menu.css(ltrCss) : this.$menu.css(rtlCss); + }, + moveCursorUp: function() { + this._moveCursor(-1); + }, + moveCursorDown: function() { + this._moveCursor(+1); + }, + getSuggestionUnderCursor: function() { + var $suggestion = this._getSuggestions().filter(".tt-is-under-cursor").first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + getFirstSuggestion: function() { + var $suggestion = this._getSuggestions().first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + renderSuggestions: function(dataset, suggestions) { + var datasetClassName = "tt-dataset-" + dataset.name, $suggestionsList, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, $el; + if ($dataset.length === 0) { + $suggestionsList = $(html.suggestionsList).css(css.suggestionsList); + $dataset = $("
                                                ").addClass(datasetClassName).append(dataset.header).append($suggestionsList).append(dataset.footer).appendTo(this.$menu); + } + if (suggestions.length > 0) { + this.isEmpty = false; + this.isOpen && this._show(); + elBuilder = document.createElement("div"); + fragment = document.createDocumentFragment(); + utils.each(suggestions, function(i, suggestion) { + elBuilder.innerHTML = dataset.template(suggestion.datum); + $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); + $el.children().each(function() { + $(this).css(css.suggestionChild); + }); + fragment.appendChild($el[0]); + }); + $dataset.show().find(".tt-suggestions").html(fragment); + } else { + this.clearSuggestions(dataset.name); + } + this.trigger("suggestionsRendered"); + }, + clearSuggestions: function(datasetName) { + var $datasets = datasetName ? this.$menu.find(".tt-dataset-" + datasetName) : this.$menu.find('[class^="tt-dataset-"]'), $suggestions = $datasets.find(".tt-suggestions"); + $datasets.hide(); + $suggestions.empty(); + if (this._getSuggestions().length === 0) { + this.isEmpty = true; + this._hide(); + } + } + }); + return DropdownView; + function extractSuggestion($el) { + return $el.data("suggestion"); + } + }(); + var TypeaheadView = function() { + var html = { + wrapper: '', + hint: '', + dropdown: '' + }, css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none" + }, + query: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + dropdown: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + } + }; + if (utils.isMsie()) { + utils.mixin(css.query, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + if (utils.isMsie() && utils.isMsie() <= 7) { + utils.mixin(css.wrapper, { + display: "inline", + zoom: "1" + }); + utils.mixin(css.query, { + marginTop: "-1px" + }); + } + function TypeaheadView(o) { + var $menu, $input, $hint; + utils.bindAll(this); + this.$node = buildDomStructure(o.input); + this.datasets = o.datasets; + this.dir = null; + this.eventBus = o.eventBus; + $menu = this.$node.find(".tt-dropdown-menu"); + $input = this.$node.find(".tt-query"); + $hint = this.$node.find(".tt-hint"); + this.dropdownView = new DropdownView({ + menu: $menu + }).on("suggestionSelected", this._handleSelection).on("cursorMoved", this._clearHint).on("cursorMoved", this._setInputValueToSuggestionUnderCursor).on("cursorRemoved", this._setInputValueToQuery).on("cursorRemoved", this._updateHint).on("suggestionsRendered", this._updateHint).on("opened", this._updateHint).on("closed", this._clearHint).on("opened closed", this._propagateEvent); + this.inputView = new InputView({ + input: $input, + hint: $hint + }).on("focused", this._openDropdown).on("blured", this._closeDropdown).on("blured", this._setInputValueToQuery).on("enterKeyed", this._handleSelection).on("queryChanged", this._clearHint).on("queryChanged", this._clearSuggestions).on("queryChanged", this._getSuggestions).on("whitespaceChanged", this._updateHint).on("queryChanged whitespaceChanged", this._openDropdown).on("queryChanged whitespaceChanged", this._setLanguageDirection).on("escKeyed", this._closeDropdown).on("escKeyed", this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed", this._managePreventDefault).on("upKeyed downKeyed", this._moveDropdownCursor).on("upKeyed downKeyed", this._openDropdown).on("tabKeyed leftKeyed rightKeyed", this._autocomplete); + } + utils.mixin(TypeaheadView.prototype, EventTarget, { + _managePreventDefault: function(e) { + var $e = e.data, hint, inputValue, preventDefault = false; + switch (e.type) { + case "tabKeyed": + hint = this.inputView.getHintValue(); + inputValue = this.inputView.getInputValue(); + preventDefault = hint && hint !== inputValue; + break; + + case "upKeyed": + case "downKeyed": + preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; + break; + } + preventDefault && $e.preventDefault(); + }, + _setLanguageDirection: function() { + var dir = this.inputView.getLanguageDirection(); + if (dir !== this.dir) { + this.dir = dir; + this.$node.css("direction", dir); + this.dropdownView.setLanguageDirection(dir); + } + }, + _updateHint: function() { + var suggestion = this.dropdownView.getFirstSuggestion(), hint = suggestion ? suggestion.value : null, dropdownIsVisible = this.dropdownView.isVisible(), inputHasOverflow = this.inputView.isOverflow(), inputValue, query, escapedQuery, beginsWithQuery, match; + if (hint && dropdownIsVisible && !inputHasOverflow) { + inputValue = this.inputView.getInputValue(); + query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); + escapedQuery = utils.escapeRegExChars(query); + beginsWithQuery = new RegExp("^(?:" + escapedQuery + ")(.*$)", "i"); + match = beginsWithQuery.exec(hint); + this.inputView.setHintValue(inputValue + (match ? match[1] : "")); + } + }, + _clearHint: function() { + this.inputView.setHintValue(""); + }, + _clearSuggestions: function() { + this.dropdownView.clearSuggestions(); + }, + _setInputValueToQuery: function() { + this.inputView.setInputValue(this.inputView.getQuery()); + }, + _setInputValueToSuggestionUnderCursor: function(e) { + var suggestion = e.data; + this.inputView.setInputValue(suggestion.value, true); + }, + _openDropdown: function() { + this.dropdownView.open(); + }, + _closeDropdown: function(e) { + this.dropdownView[e.type === "blured" ? "closeUnlessMouseIsOverDropdown" : "close"](); + }, + _moveDropdownCursor: function(e) { + var $e = e.data; + if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { + this.dropdownView[e.type === "upKeyed" ? "moveCursorUp" : "moveCursorDown"](); + } + }, + _handleSelection: function(e) { + var byClick = e.type === "suggestionSelected", suggestion = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); + if (suggestion) { + this.inputView.setInputValue(suggestion.value); + byClick ? this.inputView.focus() : e.data.preventDefault(); + byClick && utils.isMsie() ? utils.defer(this.dropdownView.close) : this.dropdownView.close(); + this.eventBus.trigger("selected", suggestion.datum); + } + }, + _getSuggestions: function() { + var that = this, query = this.inputView.getQuery(); + if (utils.isBlankString(query)) { + return; + } + utils.each(this.datasets, function(i, dataset) { + dataset.getSuggestions(query, function(suggestions) { + if (query === that.inputView.getQuery()) { + that.dropdownView.renderSuggestions(dataset, suggestions); + } + }); + }); + }, + _autocomplete: function(e) { + var isCursorAtEnd, ignoreEvent, query, hint, suggestion; + if (e.type === "rightKeyed" || e.type === "leftKeyed") { + isCursorAtEnd = this.inputView.isCursorAtEnd(); + ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "leftKeyed" : e.type === "rightKeyed"; + if (!isCursorAtEnd || ignoreEvent) { + return; + } + } + query = this.inputView.getQuery(); + hint = this.inputView.getHintValue(); + if (hint !== "" && query !== hint) { + suggestion = this.dropdownView.getFirstSuggestion(); + this.inputView.setInputValue(suggestion.value); + this.eventBus.trigger("autocompleted", suggestion.datum); + } + }, + _propagateEvent: function(e) { + this.eventBus.trigger(e.type); + }, + destroy: function() { + this.inputView.destroy(); + this.dropdownView.destroy(); + destroyDomStructure(this.$node); + this.$node = null; + }, + setQuery: function(query) { + this.inputView.setQuery(query); + this.inputView.setInputValue(query); + this._clearHint(); + this._clearSuggestions(); + this._getSuggestions(); + } + }); + return TypeaheadView; + function buildDomStructure(input) { + var $wrapper = $(html.wrapper), $dropdown = $(html.dropdown), $input = $(input), $hint = $(html.hint); + $wrapper = $wrapper.css(css.wrapper); + $dropdown = $dropdown.css(css.dropdown); + $hint.css(css.hint).css({ + backgroundAttachment: $input.css("background-attachment"), + backgroundClip: $input.css("background-clip"), + backgroundColor: $input.css("background-color"), + backgroundImage: $input.css("background-image"), + backgroundOrigin: $input.css("background-origin"), + backgroundPosition: $input.css("background-position"), + backgroundRepeat: $input.css("background-repeat"), + backgroundSize: $input.css("background-size") + }); + $input.data("ttAttrs", { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass("tt-query").attr({ + autocomplete: "off", + spellcheck: false + }).css(css.query); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input.wrap($wrapper).parent().prepend($hint).append($dropdown); + } + function destroyDomStructure($node) { + var $input = $node.find(".tt-query"); + utils.each($input.data("ttAttrs"), function(key, val) { + utils.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter($node); + $node.remove(); + } + }(); + (function() { + var cache = {}, viewKey = "ttView", methods; + methods = { + initialize: function(datasetDefs) { + var datasets; + datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; + if (datasetDefs.length === 0) { + $.error("no datasets provided"); + } + datasets = utils.map(datasetDefs, function(o) { + var dataset = cache[o.name] ? cache[o.name] : new Dataset(o); + if (o.name) { + cache[o.name] = dataset; + } + return dataset; + }); + return this.each(initialize); + function initialize() { + var $input = $(this), deferreds, eventBus = new EventBus({ + el: $input + }); + deferreds = utils.map(datasets, function(dataset) { + return dataset.initialize(); + }); + $input.data(viewKey, new TypeaheadView({ + input: $input, + eventBus: eventBus = new EventBus({ + el: $input + }), + datasets: datasets + })); + $.when.apply($, deferreds).always(function() { + utils.defer(function() { + eventBus.trigger("initialized"); + }); + }); + } + }, + destroy: function() { + return this.each(destroy); + function destroy() { + var $this = $(this), view = $this.data(viewKey); + if (view) { + view.destroy(); + $this.removeData(viewKey); + } + } + }, + setQuery: function(query) { + return this.each(setQuery); + function setQuery() { + var view = $(this).data(viewKey); + view && view.setQuery(query); + } + } + }; + jQuery.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + })(); +})(window.jQuery); \ No newline at end of file diff --git a/releases/0.9.1/typeahead.js.zip b/releases/0.9.1/typeahead.js.zip new file mode 100644 index 0000000000000000000000000000000000000000..7762b06681a89e40c81e369f639861e7df53c562 GIT binary patch literal 17247 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[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,u=this,a=arguments;return r=function(){n=null,i||(s=t.apply(u,a))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var i,n,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var a=new Date,c=e-(a-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(i,n)):s||(s=setTimeout(u,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return i.isNumber(r)?o.setItem(this._ttlKey(t),n(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),n(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=o.length;for(t=0;n>t;t++)(e=o.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(o.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,r),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),u=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,a=a||new o,u=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:u||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this._get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this._get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return u>c}var u,a,c=0,h={};return i.mixin(e.prototype,{_get:function(t,e){function i(i){var s=n.filter?n.filter(i):i;e&&e(s),a.set(t,i)}var n=this;r()?this._sendRequest(t).done(i):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(e){function i(){s(),h[e]=null,r.onDeckRequestArgs&&(r._get.apply(r,r.onDeckRequestArgs),r.onDeckRequestArgs=null)}var r=this,o=h[e];return o||(n(),o=h[e]=t.ajax(e,this.ajaxSettings).always(i)),o},get:function(t,e){var n,s,r=this,o=encodeURIComponent(t||"");return e=e||i.noop,n=this.replace?this.replace(this.url,o):this.url.replace(this.wildcard,o),(s=a.get(n))?i.defer(function(){e(r.filter?r.filter(s):s)}):this._get(n,e),!!s}}),e}(),a=function(){function n(e){i.bindAll(this),i.isString(e.template)&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is required"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.minLength=e.minLength||1,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,n){var s,r,o,u='
                                                %body
                                                ';return i.isFunction(t)?s=t:i.isString(t)?(r=u.replace("%body",t),o=e.compile(r),s=i.bind(o.render,o)):s=function(t){return u.replace("%body","

                                                "+t[n]+"

                                                ")},s}var o={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var e=n.filter?n.filter(t):t,s=d._processData(e),r=s.itemHash,u=s.adjacencyList;d.storage&&(d.storage.set(o.itemHash,r,n.ttl),d.storage.set(o.adjacencyList,u,n.ttl),d.storage.set(o.thumbprint,p,n.ttl),d.storage.set(o.protocol,i.getProtocol(),n.ttl)),d._mergeProcessedData(s)}var r,u,a,c,h,l,d=this,p=e+(n.thumbprint||"");return this.storage&&(r=this.storage.get(o.thumbprint),u=this.storage.get(o.protocol),a=this.storage.get(o.itemHash),c=this.storage.get(o.adjacencyList)),h=r!==p||u!==i.getProtocol(),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,a&&c&&!h?(this._mergeProcessedData({itemHash:a,adjacencyList:c}),l=t.Deferred().resolve()):l=t.getJSON(n.url).done(s),l},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),u=i.getUniqueId(o.value);n[u]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[u]);!~i.indexOf(r,u)&&r.push(u)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),!e&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,u,a,c,h="tt-dataset-"+e.name,l=this.$menu.find("."+h);0===l.length&&(s=t(r.suggestionsList).css(o.suggestionsList),l=t("
                                                ").addClass(h).append(e.header).append(s).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),u=document.createElement("div"),a=document.createDocumentFragment(),i.each(n,function(i,n){u.innerHTML=e.template(n.datum),c=t(u.firstChild).css(o.suggestion).data("suggestion",n),c.children().each(function(){t(this).css(o.suggestionChild)}),a.appendChild(c[0])}),l.show().find(".tt-suggestions").html(a)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(u.wrapper),n=n.css(u.dropdown),r.css(u.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(u.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(a){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},u={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(u.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(u.wrapper,{display:"inline",zoom:"1"}),i.mixin(u.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null,a=this.dropdownView.isVisible(),c=this.inputView.isOverflow();u&&a&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.datum)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null},setQuery:function(t){this.inputView.setQuery(t),this.inputView.setInputValue(t),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(u,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:u})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var u;return e=i.isArray(e)?e:[e],0===e.length&&t.error("no datasets provided"),u=i.map(e,function(t){var e=n[t.name]?n[t.name]:new a(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){function e(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))}return this.each(e)},setQuery:function(e){function i(){var i=t(this).data(r);i&&i.setQuery(e)}return this.each(i)}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file diff --git a/releases/latest/typeahead.js b/releases/latest/typeahead.js index 3cdfba943a..6ff5f71544 100644 --- a/releases/latest/typeahead.js +++ b/releases/latest/typeahead.js @@ -1,11 +1,11 @@ /*! - * typeahead.js 0.9.0 + * typeahead.js 0.9.1 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ (function($) { - var VERSION = "0.9.0"; + var VERSION = "0.9.1"; var utils = { isMsie: function() { var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); @@ -283,14 +283,14 @@ return RequestCache; }(); var Transport = function() { - var pendingRequests = 0, maxParallelRequests, requestCache; + var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests, requestCache; function Transport(o) { utils.bindAll(this); o = utils.isString(o) ? { url: o } : o; requestCache = requestCache || new RequestCache(); - maxParallelRequests = utils.isNumber(o.maxParallelRequests) ? o.maxParallelRequests : maxParallelRequests || 6; + maxPendingRequests = utils.isNumber(o.maxParallelRequests) ? o.maxParallelRequests : maxPendingRequests || 6; this.url = o.url; this.wildcard = o.wildcard || "%QUERY"; this.filter = o.filter; @@ -302,56 +302,81 @@ dataType: o.dataType || "json", beforeSend: o.beforeSend }; - this.get = (/^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce)(this.get, o.rateLimitWait || 300); + this._get = (/^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce)(this._get, o.rateLimitWait || 300); } utils.mixin(Transport.prototype, { - get: function(query, cb) { - var that = this, encodedQuery = encodeURIComponent(query || ""), url, resp; - url = this.replace ? this.replace(this.url, encodedQuery) : this.url.replace(this.wildcard, encodedQuery); - if (resp = requestCache.get(url)) { - cb && cb(resp); - } else if (belowPendingRequestsThreshold()) { - incrementPendingRequests(); - $.ajax(url, this.ajaxSettings).done(done).always(always); + _get: function(url, cb) { + var that = this; + if (belowPendingRequestsThreshold()) { + this._sendRequest(url).done(done); } else { this.onDeckRequestArgs = [].slice.call(arguments, 0); } function done(resp) { - resp = that.filter ? that.filter(resp) : resp; - cb && cb(resp); + var data = that.filter ? that.filter(resp) : resp; + cb && cb(data); requestCache.set(url, resp); } + }, + _sendRequest: function(url) { + var that = this, jqXhr = pendingRequests[url]; + if (!jqXhr) { + incrementPendingRequests(); + jqXhr = pendingRequests[url] = $.ajax(url, this.ajaxSettings).always(always); + } + return jqXhr; function always() { decrementPendingRequests(); + pendingRequests[url] = null; if (that.onDeckRequestArgs) { - that.get.apply(that, that.onDeckRequestArgs); + that._get.apply(that, that.onDeckRequestArgs); that.onDeckRequestArgs = null; } } + }, + get: function(query, cb) { + var that = this, encodedQuery = encodeURIComponent(query || ""), url, resp; + cb = cb || utils.noop; + url = this.replace ? this.replace(this.url, encodedQuery) : this.url.replace(this.wildcard, encodedQuery); + if (resp = requestCache.get(url)) { + utils.defer(function() { + cb(that.filter ? that.filter(resp) : resp); + }); + } else { + this._get(url, cb); + } + return !!resp; } }); return Transport; function incrementPendingRequests() { - pendingRequests++; + pendingRequestsCount++; } function decrementPendingRequests() { - pendingRequests--; + pendingRequestsCount--; } function belowPendingRequestsThreshold() { - return pendingRequests < maxParallelRequests; + return pendingRequestsCount < maxPendingRequests; } }(); var Dataset = function() { + var keys = { + thumbprint: "thumbprint", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; function Dataset(o) { utils.bindAll(this); - if (o.template && !o.engine) { + if (utils.isString(o.template) && !o.engine) { $.error("no template engine specified"); } if (!o.local && !o.prefetch && !o.remote) { - $.error("one of local, prefetch, or remote is requried"); + $.error("one of local, prefetch, or remote is required"); } this.name = o.name || utils.getUniqueId(); this.limit = o.limit || 5; + this.minLength = o.minLength || 1; this.header = o.header; this.footer = o.footer; this.valueKey = o.valueKey || "value"; @@ -359,12 +384,6 @@ this.local = o.local; this.prefetch = o.prefetch; this.remote = o.remote; - this.keys = { - version: "version", - protocol: "protocol", - itemHash: "itemHash", - adjacencyList: "adjacencyList" - }; this.itemHash = {}; this.adjacencyList = {}; this.storage = o.name ? new PersistentStorage(o.name) : null; @@ -374,22 +393,22 @@ this._mergeProcessedData(this._processData(data)); }, _loadPrefetchData: function(o) { - var that = this, deferred, version, protocol, itemHash, adjacencyList, isExpired; + var that = this, thumbprint = VERSION + (o.thumbprint || ""), storedThumbprint, storedProtocol, storedItemHash, storedAdjacencyList, isExpired, deferred; if (this.storage) { - version = this.storage.get(this.keys.version); - protocol = this.storage.get(this.keys.protocol); - itemHash = this.storage.get(this.keys.itemHash); - adjacencyList = this.storage.get(this.keys.adjacencyList); - isExpired = version !== VERSION || protocol !== utils.getProtocol(); + storedThumbprint = this.storage.get(keys.thumbprint); + storedProtocol = this.storage.get(keys.protocol); + storedItemHash = this.storage.get(keys.itemHash); + storedAdjacencyList = this.storage.get(keys.adjacencyList); } + isExpired = storedThumbprint !== thumbprint || storedProtocol !== utils.getProtocol(); o = utils.isString(o) ? { url: o } : o; o.ttl = utils.isNumber(o.ttl) ? o.ttl : 24 * 60 * 60 * 1e3; - if (itemHash && adjacencyList && !isExpired) { + if (storedItemHash && storedAdjacencyList && !isExpired) { this._mergeProcessedData({ - itemHash: itemHash, - adjacencyList: adjacencyList + itemHash: storedItemHash, + adjacencyList: storedAdjacencyList }); deferred = $.Deferred().resolve(); } else { @@ -399,10 +418,10 @@ function processPrefetchData(data) { var filteredData = o.filter ? o.filter(data) : data, processedData = that._processData(filteredData), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; if (that.storage) { - that.storage.set(that.keys.itemHash, itemHash, o.ttl); - that.storage.set(that.keys.adjacencyList, adjacencyList, o.ttl); - that.storage.set(that.keys.version, VERSION, o.ttl); - that.storage.set(that.keys.protocol, utils.getProtocol(), o.ttl); + that.storage.set(keys.itemHash, itemHash, o.ttl); + that.storage.set(keys.adjacencyList, adjacencyList, o.ttl); + that.storage.set(keys.thumbprint, thumbprint, o.ttl); + that.storage.set(keys.protocol, utils.getProtocol(), o.ttl); } that._mergeProcessedData(processedData); } @@ -494,11 +513,16 @@ return deferred; }, getSuggestions: function(query, cb) { - var that = this, terms = utils.tokenizeQuery(query), suggestions = this._getLocalSuggestions(terms).slice(0, this.limit); - cb && cb(suggestions); + var that = this, terms, suggestions, cacheHit = false; + if (query.length < this.minLength) { + return; + } + terms = utils.tokenizeQuery(query); + suggestions = this._getLocalSuggestions(terms).slice(0, this.limit); if (suggestions.length < this.limit && this.transport) { - this.transport.get(query, processRemoteData); + cacheHit = this.transport.get(query, processRemoteData); } + !cacheHit && cb && cb(suggestions); function processRemoteData(data) { suggestions = suggestions.slice(0); utils.each(data, function(i, datum) { @@ -515,17 +539,19 @@ }); return Dataset; function compileTemplate(template, engine, valueKey) { - var wrapper = '
                                                %body
                                                ', compiledTemplate; - if (template) { - compiledTemplate = engine.compile(wrapper.replace("%body", template)); + var wrapper = '
                                                %body
                                                ', renderFn, wrappedTemplate, compiledTemplate; + if (utils.isFunction(template)) { + renderFn = template; + } else if (utils.isString(template)) { + wrappedTemplate = wrapper.replace("%body", template); + compiledTemplate = engine.compile(wrappedTemplate); + renderFn = utils.bind(compiledTemplate.render, compiledTemplate); } else { - compiledTemplate = { - render: function(context) { - return wrapper.replace("%body", "

                                                " + context[valueKey] + "

                                                "); - } + renderFn = function(context) { + return wrapper.replace("%body", "

                                                " + context[valueKey] + "

                                                "); }; } - return compiledTemplate; + return renderFn; } }(); var InputView = function() { @@ -593,14 +619,15 @@ getQuery: function() { return this.query; }, + setQuery: function(query) { + this.query = query; + }, getInputValue: function() { return this.$input.val(); }, setInputValue: function(value, silent) { this.$input.val(value); - if (silent !== true) { - this._compareQueryToInputValue(); - } + !silent && this._compareQueryToInputValue(); }, getHintValue: function() { return this.$hint.val(); @@ -781,7 +808,7 @@ elBuilder = document.createElement("div"); fragment = document.createDocumentFragment(); utils.each(suggestions, function(i, suggestion) { - elBuilder.innerHTML = dataset.template.render(suggestion.datum); + elBuilder.innerHTML = dataset.template(suggestion.datum); $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); $el.children().each(function() { $(this).css(css.suggestionChild); @@ -968,6 +995,7 @@ if (hint !== "" && query !== hint) { suggestion = this.dropdownView.getFirstSuggestion(); this.inputView.setInputValue(suggestion.value); + this.eventBus.trigger("autocompleted", suggestion.datum); } }, _propagateEvent: function(e) { @@ -978,6 +1006,13 @@ this.dropdownView.destroy(); destroyDomStructure(this.$node); this.$node = null; + }, + setQuery: function(query) { + this.inputView.setQuery(query); + this.inputView.setInputValue(query); + this._clearHint(); + this._clearSuggestions(); + this._getSuggestions(); } }); return TypeaheadView; @@ -1025,9 +1060,6 @@ initialize: function(datasetDefs) { var datasets; datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; - if (this.length === 0) { - $.error("typeahead initialized without DOM element"); - } if (datasetDefs.length === 0) { $.error("no datasets provided"); } @@ -1061,13 +1093,21 @@ } }, destroy: function() { - this.each(function() { + return this.each(destroy); + function destroy() { var $this = $(this), view = $this.data(viewKey); if (view) { view.destroy(); $this.removeData(viewKey); } - }); + } + }, + setQuery: function(query) { + return this.each(setQuery); + function setQuery() { + var view = $(this).data(viewKey); + view && view.setQuery(query); + } } }; jQuery.fn.typeahead = function(method) { diff --git a/releases/latest/typeahead.js.zip b/releases/latest/typeahead.js.zip index b5ecc8d48e060d21be6a8b98ec935ba14565a312..7762b06681a89e40c81e369f639861e7df53c562 100644 GIT binary patch literal 17247 zcmaI6Q?M{v%%-_*+qP}nwr$(CZQHhuZ`-zQYtG*_7c*VeovM|rn>=?(Rgzah8W;o$ z;D4+=)?es8vp?Ff5-fPng2KBD6h5iHe1r(6LkgUO&D@41?R?i zt&KP-ztcl*u8FPbTOG-$=!^i?CXSPk)AM@lT|0i)0|6dvLh-R(`M*_|1q&9eSTXlv zKs=wuC(TFE#hrT1K9dikuX(cY4gDtZdzTH@tJm}W{jT%0>?s?)dbqBwqALyO0&0Nm zCokVUl(i|kkH`B3^~uVBOw#%)&$QzeqRMVk>m*NIS6Ro-i_0?KoF2N<8mkQ=&!@{2 zV$S#L=4UJAneL*x#U0DXxjCfY&dKa!d-}aT@0TC<$t9DZ6j{8hB3bnmT6%GYMDQ`7O6t z=_VVSaCFlC?~}CR8(!Ai1*kk*(HBX6=)0Jon`m8*Q4a7n05%}BQknh!Tzdj zlF+31Yd*@VkP2}8WPF^S6N&MRz#U08zq}acj4uRFBT8?2= zo>wV;P%iW3O@9&j1E0Q-!I1u+CDp#L@NfCQ>naNF4A|}s*8D!OFznUstztfD0ec1G zy#_aBw;WB~W7AS5@d9-rw>@(9$wd|%5 zt!9v`Vg%TjnBquFB>n{}KlAaMTt+F|UL)=1jDl1B@uNnZUvx$f)os)Yrw!flDp7rh znJ)b5!!ua#Rt$~%vzM|%WDr!q6~BfiKw`)18_sWb3%PP$M;%%1t0mQwLpx1(ts0Hq z3y%XD&XTox(C%Z{Ia$PD`sQOc`YuhS8Z{fmBmzn8MVf2C84o4|b^^}SD`fD?k}#5I|mNn1=+IFhuey0C5t| z1IjL5Y9F?d76i)fou%mr+3r>~P+lk(Df`%lO- zUkM2D*#JhFuy{_rlvTuSpMY)h7zkNxKXnWtD*8$RQo9Tx*#ktn#9`no2FHq-J{bl z8#WSnZ0jg%YiXhtAqI)=o+Vf~wcRVJdp4#mw}Xi$$Vsg&UHSxt8N1>B~5<4C2P_6mzzVN7*7Yxpf@ZHlr#Z0>K>DsUs$RNo!kU6} zZFb?N7P8G&Yov$5DS6{l3XFG68)`=@FrrAD(-@+@hIPwP#-S2GGl+7CEQEoWU$o&3 zS;xBtPiDD6SjHK55ZLE9@Yb-a&?++s{aQ{FJbeYyxs2c|;kN{voTvSftEFoW)e`*H zE}tT3qQg=SM;tZ``XapmUWE8TU4Kh!$&_Q-g_XrI#YWNi1n3!tKiPY+FAfg1ev^!- z9PgkJm2=0?T1z|n|2Z~=iUDdr5GL_?UANX@laFEi-3(MgUeGF696d@>;Au>R+`eOF zbB^f}`;TXz24XH1v`E|Fj;IPLfZ+KGbdLd~utf|`WTF8xf|YP zLE@e#Ak!^DVVZLDo$}jlX!FiruTN|T?`#Vnv$d^u%G|}kTNAB=-^A7^+#JnsRow?Rs_iUVLkQLq}DccAy$#E1Q zUp=H~Tpf*e{BfP2wgPD^f0@cQ!h;A>%t^q)dAqi43zyYsCPnpiSojA4R!f0iV}i@P zVMt6`q!5UpGbbYlaZkSg)p>jn1sU8LI&S_C_~0d%&2y#hiVO={x7lj&tXE`(FI-oN z0nf}15{hZf>SG7qZBPa_KoH#Lxn$Xe$3cwBmn10>V3Ls#GRIw9(v~@%x_WbLZGCg( zbMmb59vK$*FyZKJw?Lk*-W5#2GdZ1<8Wm$+2F(EpvLq*kA5kj!4bc_;Pda56?ZhaL z9U5eTpQCE>?)UR(s{K#abCT!@#5$rLB&Ov6LBfx`;1T{~hkMnv2m5)5-pCrcE{|-) z3wHaonDjJMpRU~sKBCgQ)qRSmrxe2LD=GD*mbkfGy6z^;wG$)iue~R)CIpIJdl^;wp#R=Z z4@6(L*Wf80>0nZT;x@r*$a@i+NkG#gQF$9kQP}PzH%o5(lsEx8e2i*vUV`-ujTawZ zygwZ>OQ9z>R;%mTc#8?N7650l8`fO!cZ0SYDo^ zV5iY;Kz)P~FA1!bPS-J(6{7&DMq>P;M?vF6@bdSkRms=qzCEKaqv$+FWw~Run#yn? zOf^lI%TzZTGot0`+hP0bOK}_citVN*8E*)A$SSt$f&Ts9>ev#KNy*X<-J#k`7WS{t zr~D^=9B2D#CmHg~N+1PS+b5fSI*yR9E5YL^INw&)$Ilhe>S*MP_u^Y@0{BKJ_&fV) zU%;b%2Wh8PdIl~eWu)sE?qLy8JN^rrl`46a8qq+q+sx^x>LA*~k8-0TwOgl&H^RG_ z1C!WyhzE9VRb}>>7E5J4Lt^;|3xCZV?IsywYjTmOE676|;#X$_Zp1H`-@?Du2@JP2 z*&4OWbD2saW`B|aHPII>Fw6nUrGA10;eg@W_UFVA^?&hI);Hn@>OiMt^z1S=I;%hM z8ZP(XCwUi)C(&^FHBm{q|H#8K0*(mAe9YKInjpq8H9__uAb39kO8gS+2;pk(p$@14 zi_5eqpv-0(5frN5YD#%Np|&s7MIc~ zy1_AK(8{|6coj2!F5jp*t1jOnIis5S8u*YkpTD(9zRAVeO)NWDD4V6!gqy+G{XTy| zu3@|B1$nG~B8)s&rdVS|A^lLMB8h)ksI22+m^_~W1k9?Z`f+2bvyAT;zyMmhROKnz zO?_KNKHN@RR71_;IWL@EYqa6rICj>1~z~2E58M z(c_H}lzD8Z-p0b21A|y`j6(?AT4Z7IS>YG>{RsU_lko~!W`0NY3+)R zsg^bFYr3=ur;*%enh$Cg0p%<0*oEUPn_BA4$XDd2gT2_Mzi3U|hXF zE|G>W2V*`U$(mee)`gw(Dj5`-Kt7#@Ahj4YKl3kHj*bTN(isqgDLE%Ms?X)$A)>=X zn`z)eK+{KTeZk?TkJs|ZKU5yjPm0MjpqGQ+cxU!CpX$s9mB9@%4;v7j#uEl;MZhpZ z$yTfGIT;`i8##c1mPDfkT%f`!-I{3pBFSD`;ki=^HZisdADzP0K1@O( zh#P)|3dTcr_j}W2>GBfzWgvlGIT}AQ zUSl&jn<(cv4q_(7RhTEqKmvrq+E?{jMV8h(Uc%@_YbuYhejYP0$d+~yMK*!)$-$ZA zlB)O_gLP~$kDx>lWzgEMdpX^NDQr6PY^6ZM7^T&kj)Q}dfUk@N>cJCp7$h(++2?qw zL@DgHMH3ZV#rDKZmn6s!B@3&bhfxfib(Ly zhqOrfc<_2*ERuPh4cV4{8#<~41&bIL>#pfVbjKdqy)CdrMN7nsp64THoIhYB%!#wW zotoyd7`iyu`h$x`tO0;%6P*R)n2zy;)VaWd-@&BVdg*;(jd z+>$xX!AwEc*!HmAGhx}ZdfG6FGqDs1=i9Cfo3j}2@@>>~=5lghTKvWk(3)^yY%&w_ zPY?6sauU7V@z9C*{5(8(y+ZPFlc{Rgh``wdTAbF5TI|{B;!s)?Lcc-m<#xq9_pB-j7DZPMH3=iCR-_lNT| z+Ag!`t2AqRJyc<*j9iev=F4`RvG-b%DD#^SXA@CAXHuky?Y7T}utcdB=D_(wiU?~zEo}9b@8WOzuAYRguNg~5Fr)_ z&Xh5F!g7jp;z)n*(Q9D;$l9iShc0nCNf(j&P4_<)t;t0e)fZHptgBc8)&~^p8O)&Y zc}Cq2>He$8`Wu60w=Oz{5AQKi+*3pLj)~B_qZ2g(+U9S3Mn(XU0gOo(c=yeEV9e4< z%O<<(iezEjrSC*mZ8HC^r0B0Y%U%V42g8Goh`+|0csAU<7#yf3jF@KbRR&0>Tk`w@ zdsxqUH){cPX0Q+0aMgl-ATnAS>^x_icLzrT>O|cYdQ0YP%c>!qC(F9C&xX4Vc;zmw z)5*JOx^~l?X1s{@|D%v9QeO_CQNGq2$wK689U{P-q!r=JA$x0{wqWy|K!wl5Zr66! z|E{XB?>8;gIHF@0?R?+$%EHP3o6EIOH7ZlURCn?+86N)0PM@y&GP0seu6Jd7X^ zDhyQ3-#6&;%P0!`i9;?yx{YmvS}p56pM}wJt4()zZoB>MJ3g)IikcYlw3+Biz8J!*Qq$KhMV@~j)J{3xWQ1sESpd5Rc#OQ*W#Dwd!U5-tYI#Zg#YqyAP771ijxvER8n(`t=iUgI(2&%+l~pN$ z-)BSK^xs3I_$08BSb&S)Zr9OkHv^f?RP-sBkJcL{H>r5@1J`p-ZJw;(h%PdG9ECRK zGQuL<=&@az6e7%!Vbtur&YEONlRF%n&^A4d$g&6D99xJr4@b|`<&(zJ5I!$m zmRxSNhTGx2TO3q(Du!M-aTt7|%1OJlglz*I5q3&bC(dT4xm(u;fXE#m*~HZ031%rn z&P5zZU-k{&d{^aJow&DyY9TNjl+GP;=l8nvi~yTy>68nZp->m_0(>rP*l~Fb+2UPU zlZU&9&yQnJ_MNT2YC}-=PttF5?YzJ^unE?mBYgcE;=kes+Ap(+o+_f@>bsOl8#NlN zK>o3a>jid>5msddv4*Iq?z-%oR2PN3i)3tp;o0jS3Ytu*dxdM?=#g>|m28l5*H3cY z_pDgldn}t6?7y$tiAYiy?Prb%LU^%j45)I`W{2L#>^mQ?0SEo6r6{CIgQ-g(t&S?v zFh%%KUkU2W4LSP)MGL9w9gWCXBU`mm(X4o^+(aaxy4nevT+UNls;SUgbs<;R#BVZe>7&y^p*;h( zNSJEM^LGLAZU*3jTH+989v8))Em;K}!yjjT_nAz6h)~N`)#IY@CPS3k#c2h{QAOq6 zzIn6m2~D`KA|04o=^8FbY3Gp)V1FqyZCIxWB06{bkm^lTRDP!t%A+0#Ak^i*{18jW zY#^Po*8o790=e#?ImHLX=tw%Pi$~U4857$B)9^OF>{A>F24r&{Xp3%qk-;#&UlbO~ zKsS-8F+UvMA`0VQ#9**jIk#=c2T3W^O?%+nu(%Bs0=>IghLphtT)N||s6bIsS-2gp z-p=x69Iq@0UhqhxM=QPpBZ`+g{FUdfGZyppU0@K4d&hz#v!BacwlF`Zuk-^{m+X=@;WXIj^M(z;LI);nPkargCu%rLIzQAt4rre%;2TW5 z*4^oQAx~@zwn^qC;TE5WCM=;Ndv%tda-rTqGn&OVfvq%z;R;icVK}g5unL1ZfO3M( zY3-KnlgnA*ksD!qu(fgJu%neN7))qcMc01T*>rxtWFGd3ZeymuO8e1BtwFW^s9x2X z0mour$u@@+IYVZX&cntgaRZSBV=qz}fiZx-=WXrNK-iMp5mu?NtID?O9BJyfmIP#+L(UCis1a zu`Tl`t1j=8WG=asN<44;;sHHL7`S(abXVzN&M30A5@&6n8@YQ4J@pABXs#pu>b4Sp z#aOk-FtX_T=1V2GO&_+B818Ei(A_%ryj6 zHc5!z({UkZw*Q6u2d3q34kG4PP4_p&MLHDPve1AaS*CXCeXkQ5AbLWR%qt)|HU5== zLD7GND#|>Shcq7PhW;7G;_u3UaL%?bigm&au`Nt>teUJ}e{X8s9mA0au&LQoyz4B^|xjS#G?61K+4dwpt`wm$5oSws)g_ar+(q)>FY_TL=k zM@%RLl3{*0Ve&qd!`hg`wS#)QqFVFu`aEOp=noW^^^c8B3(=iMglT=HdcbS?QHS79 zaPku6E{cs94>|hXLV5#d-idZ-C4+;J>-1EnhDN9cL@;R4p}FzdpS4A47E$%z1rIk& z-?oWCmYEQOC3C90rUGQ8mD`qeNQv&8lQL*|Ss4y1r*L7l+BFI+*;^;ddo;jh!8{hZ z;ijHLKXUtWq8eW#nGd;rt@8mt|1fW2ex8=~8zrB`oeUoT z{p+;dgKgf|r)lg@TPE#=bdUJU6FJdW?Ve-s8FEkIAEjNW9MV0p0W$J#^n;6%zOL-P z&_YuV{l<5(PXoo~casTpduk{gsE4+9l?8r@&-ZEGtvkzLfuT<$g zuVLpQ5p(e1;NWk2zYiOe(%&CiJicy0{rbG#-cFBal}n^f(u;S>{sa2_ zo{uaaPYUWMG-X^@v+`CImtLU2sAQhhuXT^7T@`YQcCYxgcViAk{-v>%qZi349dUCe zNsxcgmmx&17URC{Rp>Igs~(E=yAPyJv+DR|bBKtkFv%sW{1hEQa&BWntNqj+tNb<` zsM)uathBh&YuqMWkn3`)IIQ(isRK951E?`3p}EyT_VUcggb2rh{nAWf;(|OK$ zPeo40fK{KEN9%iw$Y$%urqJJM;utIcrbGxi;mm*UkE+ocmx_HAi0WtYD7FHPyG`@u z?=^UjeIkTI#lf1`ml*OQH95+-B-X z9EaFpA2(iQjQkm{CbhQ4OK}yy*mf@Ko@2&`nH^V#k!wA#NL`m>k-%`-0;5`@ybo( zywP_9E%|VyPBGUvpvPVp#2&?$hf$;A0D^E|*ro=434LIqWB%~BIK;NbIWd`or5a-u zmk|C@=#{Vpy|<3`F5(YL`Lj7_ z@8lyohIjM#krxtear2U3! z)vxsaUdk)XaikvfktfRlZ=-~%dv;$v7;eA*Ji*mlLGP)Aj+t_ z=ZTl6x1EpuS6d4C1Quaq;&Yn9pWlP<+d%dzQ(MbzA<;_zc!<_8n6r$?w~9eMwrD++ z_3+p_>3 z2^hinIni}LH+y?cbtgiipsiE1q2LaJR=SLf8Hm_HYmsJgAz5;MgpIOD2c(z-gXp}Q zakaRGiNP{TQ8BR>MuCtnk+FNY({TQEYbWr8-!nkULqkH0TYcYCo~$5Ebn70Q_Iof} zTKucR*f;bBy)qz*y?n{O==_{QGK zz=XJgTr6L+0m(H-WwVo=qIu!#Gpvv|ifC7a$sBYz6?97c!cPS(ae`zVAP9yd z!nl3!y6`Bfh{CZ$jwpPWI!S;?DY3|6`zaPgACLk_6FB1GW84!e;&ujAJ)8M!Mi zI&xX*-Jdp!PsO96MFWY8Z0wJ)mC{NXR23F6V|I!6iwmnET*!%)lQL21%ifm zod)jk4ciC1eZCao(7f&xq1%p&gZAztXS{Z{?Q&+%hH=%7NgnhsJssJkcJONHvW_gN z)W<9{B2wzyAZzN!v(PTZjpvXsqCJ(n`f?-6QkS;X9%Ch581~qd-+mUg!b44e!AF?{BQQvkvlkG(G7q+jeRhD6Ec)O_44CfHB z@ar`)EEfzT>AwCgL(J`5sA6}rT^ql_4}(8Gqz@UOtYR2%pUa(d!?oG58t0AiPp^AL zdveH?n4Vj)ca(QBAzCw#7BxOzmHUd&S~rm(-9ITOJ~Xi)?1qQZZ%ofbX6n>13|y?h zc)R2zXk`j8AbGHU6_|g=!Uh#WmaLfUN)~lV$P4d5ib3@xZSEr*b6=Yh`yH70_y_4BE@5ec=lctSg+JY z;CS7tCm8*%F@$3dqxzm4wjkk+VCf<1SwF@J8gnRsWtX(VjA5805D31~{af zPh`GH?H|))oC!|0(Y(>j(GOuoH+bl$SnTT_1W4#Tj%~@p_vnn;j4Ujw31hi%L=Zvq z%Lr1x|FrFx*V;G0IhX&S|Nq*tCW|M2Eo=aQ7-awe-2bz7%+}KGKTX>IO+QwmedWHz zmiD*XFLWr0+Z1NenVXp_Rp`3NBiEcQ!|drYi#PRBNVzT~1V{t8`5?8~?|U~I41({p zwBZvm5FNcX>ibOxknh9(YxcY&v4hT{yX1oEpHyu5ZR``Z+^Q6slbf^6&{|h_C}ShH zjH?`#M(zrH>`fN+m9$f{a{hI30bdLs79OMbK!aE6!-`}jJEch0LA9Y;DnfZyyhc;3 zv$%3TQw={qImx~kvW7Z`g3P0`@XAIj&I0+Y12mLGn`}=~+?+MuP;pGM4Zw>PdN$Sl ze#pUP$oM1FoKW6=O%~dCD7E-_0eeD~m9C;nieD+3n3mLcNTqVNr=PH7$%37K3z^J+ zLizWNS2k&H_Uj@u+_-ro=coPe4lj2kO3DKF1~OGsYu^3&bTr-E`rNHxM`Dze_K~Id zVDiJMiAP_LMm}xp#1E6M_{4qc=)?$@COtkb2*TXOfhlmARWNDa zEaECr=+$2(n_3I5(OGxN&|fR<;zwq*4J0MKt(2?_zTnU4CDKevdGD0+=oFiZ?-8}v zET;|(J&$Cv)}VU9MZOM0U+}94MgR6?e2K??Q=z%g#*g+Ng0#=bdxY38i%{CUvmYWZ zZs>dV`mB(cMaWQ4rq9R8W;XbIdmVq8%o)`zWxwJTGn@JNIAV9$k2yMnIMxOvb2Txt z0(h30bq2$4f~=MR;xG9c4fsu1JodV>kiDhnU2PCUGhALwx!le<5lgQ?D?9r|3Cd&0 zsAkp~Vf|x{M9@C(DsH(P$W4yxZp=j;#+@GxkbMo1s1i70^!+g?=J- z6`#|qx2S&Yr<+FoYPF-3gHO+1I3ghLMMYW3CGeJlVjyKArOiQ<9%My%EpLsw+iwp7* z;z1<)0@8>mNQFT;XW|#H;*}Cb>QWq>)ekX)f06km8Cepg%vN@e1V=A6uRJR0;&gKj zc;G9;=PFmyoBU4-zY`F97S;+oz@+oveC6 zp}irn2-%~iKD={csf1vCq33G|wBmbC16|&;@w5_NzDA?nAS)ckK90|11}A+`&{`Y} z^aH8ZmTH!7n&g>x`&Ll4WQ8uY2t^#ewOj3w1)gh1>(o`ETlW+6BKf!|=^CN65uQUp z4WZoLyVyDtosMvM`EC^49Gcb}TEy-q=RT58hzndtPWt$yCCS_r^ifPpogE|F42NbZ zRc@oN_v2=`gulCvqllvJ`2u3BW#3ldFqJe0i-#k$)}JydVG_gWB2J18E09YQm@M7` zPejc2e_oNWE%tRR8;rFt6SS3cbQ2dSUk(2_;KS`iQ#k!8TH`dparzPqnJ4ztZhpND z?t{@QlGj5o%9;jzEdprovP={b@J-qYPe%`IzxUyc=$FL6E>Iikz2L9t4N^r=vYGIO zxz|6r3T8l~=s^k*tRHk-FMnYd*%FzdCOYyE`v^iPelGs?@8iFX{s>rFgS7);V>n!Z zZJ?c5Sy}nqeR>1=!D{1 ztP?8-Jxy_FglRQ8Gb0Y53u{cAw8PO*9QO#=V9k;+FZ{XSp^nT^q3N&Uc<-iJ?1%>m zZj6@$P%vKx0*A37ZW7|1NM&(2VmL2MG%d@TGWf5^1w|=3(O__&88+BRS1_D`fm;#$aGuM<0M({Pjz(-2WAQK)4aymQj zN!^!e;ix6R>J1r<4q%m;P24^Bf=|>gjutbx8H-D>C+##7X~fJW2!&=3QjQULm(u+i z%a@IHep-WnxB(2AwVyie{_PBw6Awes3ukY`hm1cA!?=?4o*CW=f-;N9vaVK*K@x7_ zzJjYC=mzxKt(?4oW0 z6A5%yqqUeifNEu+T{rHEK#Y*Y7*iOhC@&8DA#S8~ZvTnNvBsptK%ez4VzR<#?-0N_ z0fRhyM)f}YZLqrsqE?)aIFps1dv`z9W!S?SncaLD4CCywksLr=!e-D*oDhX93#f39 z>{ApGM7b;CvoLzCvTG6Gz`R5f2Vd#O&rE15I)jTeQF%ppnQ{nFo_@1C9#* zlW=i8p^Z4hmwF+P#$RQTmd?U2Q`BLXR%V>n67_ZXJbE(@hY~~?tFV#d|g7N*mjl~ zMZ_t+b7I}Dma66381GTKEZtT-2UHK_gxAV#p3&{*ImWr5c>gJNx#s@!RTG>>k);|^ z+y&}D1Dtp@y%MgGwOcq!xW~30;tl3@A)*J^a6D|72$il`RWO%ka!!qm2nCWCO!sQc z4is3QqG6A;PtfbxZws+^#)hGTvzR-t!p$){;3h_e9V9$jhulBMB$RGlP<~#@cZC#f zihpm+cE?A?3d9YeznMQj_Wp(bq!$Z{V1S0b5b&3$ZET4x#+aBRBq8Nhc( zzZ)b~>;PIbT*asBN^dY2m_N)^OBZG%}{Aj z(Y7t|?k(`}58%%)0UW2UWLM*A6GT|rE{_)+^!AE1nkv!YNz`n%O8J#Wa!EJMnPvNVsMy#P`=d{ zvvu9&CM~GCEF>-EF}wo^Y&5qa7&lD_rBXZ%6@hxFUMRt@5sGhE2Ae8P&?G}>$O0jP z5?)c%GQWYD7-sjSf*4p5*xt4GPHQ_l{FY}FpI&v4%Aa&_ z@OHEV7)~$@9moOcV4lcU|DD&YQ~{w|21>{*9SZO35@H4^u92P}(8ouZxPA1Ga^;@o zhFE+CWf(_;m&_9^`z51IzK8|xo~a1-{>Etvn4l-%6(%lN2k!9;rU*lT zUhbL;sDK{RFK9F(x$)M&PZzKZ()yk?t$R!(V$f3yFO^V+Yl5qLr~tRtb8eh+A64c2 zfr={o&@@TCU+5F9F!+|daXQBz`}Feq%9tWq`y3s~S-uo}tujSx-I5U-+tAcH1 zf9@pYzvTw#a+p0x22%CT4sXq~&=Vx5=8bK3&^_0N4DUtIDEYmeiu{8pW=mk&Llb29 z4Ime(?>SO~T(DJ5&}95V{72IRwwWgDG-j87Xf&Evq8>OhC1CY-Lh-2kDWZ>^gMe`oV#}UZUH(&O^ z*v5*(1D^*PBYrozDX4wTe>vB?XR1DhR9t>F4Q8|A2{nx5U0FuKmK?+QkwF~T%%R;x znnw$dlE@DPv2$=@>$LI$>JJ7Ftaa-;bVwGtc@ZY6lycll?sxlc?C667e%7U(+au4W zI2aEjv@e|-o_HznThDVPJ=Q$7lAxqPUJX4(l|ECH{bHMz0IMJ3vbklLm<()TyH#-S z<6iBBV_i7iFb$8z=a%KJP<9jLXZ{6Wn&)1cHYy0TvMtICy!~dS5Ki5lKdUJ@eKE2} z;4i{>YjK(u1o0zQH=Xx13~BG_U$5okxN4&tIe!`=EXIs;dBD}Kbj8U1Xl`b~`PEdF z0*qXP-t~7n6X@*sU)|mg4X)(M*BePXHEX<6)v6klJ_i*y=geP$+nH;$gJgeo{h-$hO)QZwQeB=ApsxX%n=AMfXOyk<~qEJZ0%E9j@v6*I*XV zz;8|GLh<|Ijt#=R6_U$;u9``cfjO84T1*YfiuH0s8p@i?nvnpV9-=PNvr_Vd~ zme^aig_?|@2`Hf}DE5YV?>fx51s7N)Q~gXs0kVX#WB*_?^QhXc*(v#C@VCEWiCmgZ zd*!(yIGVBg(7rKPZ|%8h7pcAAKU3ohs|KSX=_?_95Bd7BX3A~4^1+BT&%7Os@D?yB z846%+1cGJ|lu)Mz&%mNEWVw=`p@6HGy~D6$kg$SY>~YX-=RGu5kt4nG51`7rMNmGn z_7jQKwgKvAyHu}pA^Nuwl`n_(!M128S|73Z>|Ci`pk%Uv2QjH5S;baD`0?8~)7f1N z7>Of{haK|c!SdPmT&{HA*hz}4eE*>1Ppv7j{Ngef50ajI=3&Lh$!m--f9zLQK3Q32 z%TmT4T>l%KTQ)4rqZmA(ckzS0lgEW(5z@emyzb#&&5`}_xy|x}06ZY|jy$}eWwt1iH2skUVe^ye2_s zT?)Y7j85#YTWYaoL%y{{XrljuBl0pX*)j?kvZc?!cu~8_oN$N%1>f5fA?f{xeDN$G zVV@*z_ib6~{d4bAa2|-2bfkU3)w;Dlr#w1F(o87l>;dT`EAC(9LVuBeay)!ik2}9T zJ)LWYcnH83KV;m@3ST356YURN+}Z*Te6=%o)yGnJLkzdZKu&)I9;P=eun&TRncWZY zTyHJ0&kHa!{7!OI7C|r7Q^ODC7bd@6JeDP{yF;$5S|aee$WL_{5BDeqRABb#pb=zwCzJ60O;Bn+SqSDasKkshae`quSaz#gHjfOkb?fIw zWqsbOro{NDhi=9ZvGe+ZEw9UTBZf;;Y*SU*-#kwI9IMAqZS5+0JT44|&U%g(NYGZq zCs1jnH|-|-kk%LY5*#)`miqU{L3sWv7o6gZLeNu0G%6pI(ksTM!cEnEeVopMTEk*D zZQ-juUce0Ml?dY33#rxc5y(kJ<19fopDe^Bcc>lf=^V?Gu|1FnQ9j_mMjX*LoHGXuUN%$YjmE$tu#$ z0H2E{++B!NJ5XUx%&9LkQduuT4r%=^d=)htM zON|Yya7QG0+`C-Ax8O07F5*$7FklCuF18QXTgaV9if3(@i7zOJ`MY@|0w;ApYI{kU zsU>AsVyEL!ze_hIsKHRVl%R~54MQ>+vE3z^r7q-cQz8G9CgVUZVCM|E(?B(FjD)>o z-{wFatOHX?JBL5uAQRsJm5XTfTWz=cm2)?BJK7(&7JvoTKAo#*w7P!L3+Ie#mfwcS ze1a0effASrv>-fIfP}PfLbSuoQbgB3a-et`i#&7dEZ;g#ETq*d=Qri`F3lEo|GsWISlxYumVA(srA5DF{uGt5Y~Nn0fmCMxtdFg{ zx7q^l^&=x^kkLgY18hM{JcEMZv;zTex_qG@2PN0lvWd`}a7~<__T0yhrXECRKM7k& zqPY5Y9`d~7_Gu0Ca&`lV+=c8Df7(1@hOO+>Q?;JQ7EOwFQ*+=LiJ+#Q-o-Ykjuwp^ zpZQTF<3kHsk~(U$lG^gvt-fq5{jk>G`7-<)L_j ze-$Ga0V{tv1jO?-c~sd6u~&9&`K;r&J5SrQA>BE&6d{T%&OL+V^M2o3z&a5Wa8XsN zxq0a)iDQKP+wr;z{~+M^nTZyJ1z+a+_)kH5dph2;CO_%Ha`T^USKW~43RI9tfj-ni zzOr0Z@QgyqUzZdVP8sy_{jd31+8gA554sv90piRfxctnmMXm@Pz3UXCcm&3weK)hb% zuk)Ly=HwN|(4zovb697GOUFb3sM|Yi+8TIR01>H^!nw~8&5cBDb%5KYYdk9CiYqRj z2+(?T3D3YOM`ma}CjHqzfycI^we&rU^@AmdOE(5#d29;1wq%2UegL9?o2}ZXNRjqE zrJ6pe+vj>F9~`BD-*yj;GZzBCPMu(R{lH=WEmAa-^hXFGHqgpN+7@0M zJ#=!2bb{)Y*{ovL$l}Nqk|beG zVn;tdOO)YOLzEDYIOgq1uqkvKoN^$+tpZ07UQ|}iRZ+T|)b0&9?Zk1-~pQ5smQ*XJexf|a) z2K)cNxn{+5-iH@Y+TT2BZ_N5L&)1zH4#_5GrdH1%C^*} ziOs%O%Ti!)wBng%ykohA+>gS?%E<|9Cm37Isuo!MNbFr+SH@K>FVR^SG!Nx>yRGHh z8N+t&!u<`?eN7fGG2XcCsAD4Ateh#H`L~{bp7lq)B}xqZ4aG7JK@*^Ud)UNnd+5B{Ba`NwPaXXAp-K_tEsu@83SyzUU0Qdi~Y1C07Kb z^B>&261Gct#>)P`d(}kV__nVwGIe)n0XzwE1`xq8m3ea7>!8bEllVZbG9SSM|pAU+V-{ z_`J3Kr2OyF`PKZ%PaB$JrWwrpdhwCGHRlDfv-0m+5<29I{`G0MX0ts{OZ3xHa!mOw zAK=Z%B*%>F)CdXa`4IvPZyiBQ0McPyqibGHq^x|2FvF9V`G2fU}3aiGjI^fibP66P=1OBmnSzimbxFnu|L$03gUS zAOHXe%0C>~(Iwn&h8pGXMbQf5rSq=Kq8o=CN|xVoltAq%Na08H^B3 z&bm5O^({LRqwQ%ls;xG@lvLDSLMY6iCL|{ji`#zl{mjRP2NDK8qFCQ7Z(tE(#@db% zEu1&^2iLpxM)bjLcC$*M)yN>l&pe}lw{nD#OSS2=jfI1&d2nrSmp)m($m<^8Oj!o+ z0P5qZTyb;pZMH77gTwd6&W1|UcxuQZSI{(7SfuiTAm&}Q{go;8EiOv zo>YoG+KZw)7%s_b^-vk2AlgLj!PnT`rYhtPjJ zn!Y466H5?fVS!RFr(pZ z@7m+%>+0*^YyUI*ID2~k{`7VE*!_6;c=Yx4b^5sds7D7^V>*BI<^2keoDtgPuvSUS z=eYqEQ-OvE9*)O%;h^M&Q~=QmL43&h$67>B z*#$*toZJ=t*hF|KD2@^yPWP^Vm~hs;ILhKFj8C}!V;Gvm1%Oq^ySx55{R(5|^*S@8 zzn`(&YQy=*0_|_K3Fu`~G3BgBW*Gc?u2@1v5=vEJVP?1_cK&~XVx z-3raXN0~4%&tl^cb40EMQ*Yzq>C9PiiDrGZh_w9UZPL9u6`PuE7Ww|^dC-o~pct3F9=cX!SgY{sF57!KRw%2yM`XB+lP&Iz@u zjixSp6x=xnvr%f-etWs$oeA1@kq1}Q!*ZmF#|CF8yB+= z&FZiYO**2s^f?-DC+8KAq$!814D^%}S0ZSEVE=;Vb89dW#F?;uSr`ia6T1Q^3DNjH z{QR}Zek7rBi1@Zms>^Z8Tkp7z=?~5k_O%!T|FzW&gzZ)Tb;>I^SGAAMVqDvm zk0iSzNHij&_tZ~8Rc!nT&l9hqHxaU{r~-$1?N)z<$pamh<}$hJ$*;cO<{Dm(pG|A# z9q2L?U}B4>%68p{#)kc}M21U3Yu%0&?F-zQhB%Ac1nFyMvun?9|0Y51=C0$R!gM7O zee2{%q-BmE2MtXfR768nMRSbQ)8Hv>&fP%<^*f~+%*w|Us6PXM7rZw_r=$JO6|S?5 zWQDb&!EzZQQJ|=Fda8HKKK3z$SX_IyyiO35r*pNK*n@zxTsst+pX8RX=nX zx}Nc`CJ|9+-!vngI!Rx2$E5fCh^}0t*gWP+hrNUfXx2d^bX*9b70IPcV|24|D@J=w z8tn8S*yY#7!~?`%Bx8$AFx0$7;M|(+FTtv?;7jZpP<)70oN--jkkDAZf#0CKZ3qN>Y^Sn>=C-u)I2 z&ASMyDBA~D$Rs9evK;_qZ~0|c%-||lBkPGYo+q|wX7Vz9(2e=3bV$;DT;)Oyfq@v??089T^0s=tt#2N z_42Pq!arnmjTdAA>Fx0@rt^{awBuNU@L6D-z8{K0GwqM9V|D`O^GAbW<5i38n7rY% ziE*g66%xI-^{jeHUu>Pg*I#!5ey4XJbL6hCSOxFwgF%Hc^-nI`?;b!zH)RCRpi8Oo zfK`achrgb`Ct< znY@LJOCu(zh8k-G&98{S&fz9-o9e-lHT;5Rh|~$#Jx45=>ahB@o&vP#G;ICx2?Dnj+U zEM;j13z2?=MyEIn2+2c0Xbl%Z7dl{`q>Mn+NE5wWJ`QK+ls?I}mU%|^bJq~vQLp7K ztp$KFoD-GAYxG=ly-bF(TsJ0f!sc#PXt4%tvqb1i+m;+sT*PETy>yrJL&mm+)=KFf zSK_1$|GkeI-mhsI zIVdVAoX<_zCYzRp5FclDy-E&mCVf`*N7cK87ooCek@HWciwd|=zLlz}_m-4$+xviw zn&&5L^*dtg7P}i0a?HOD% zS^lQUMlmP^IpN?p1;ppUEdFk{w`%o@%D4||0Q@ocz7@O8ug)h~)2d>*(WO~c@|G1b4{?@# z?sIPef~8aPJ~3BxioyoP(Gxn2_pw6jJIo87`RIJO7n-AON=>h12 zDNY{*-OdLr?b72E_OC1vJmwz}Rvp4N3%({ML}#@oP~tA|-@CJj{L|XBbL}U|BVF^? z*C2CnYk=;vb1%&}ia3Hcl!MBirh7XZs|S)T9vlXFG2X|9)6xn>s< z%g13}O@GgLJm&B^>;PK?-+iSVgsgba;v!9Os+!v6iX8BfDQY7=^uRM)lp zYCxfM*=*9*!OGk4X?geH$6yz-o;cI*LpkVI%DfC6xY{W55lo$giDp;qN0>c`2pwF2 z;@?wS*-=99YQjF?YbLoP;I?JxKB#=!35ojYskq)PR3Y@!Q=L zXKrf`*-N&<7 zrm4^FPTL@Bt`q1m1%qkSs(K9VL~K$7RB$av&E7y1o<_^If$<}$rgtP&E)@1Kc;47= zXiHvKqP>z8^-MK+Of^AGUD;+k;tdG02)%}}S5c=a!8HU6gDP0K6Zmu5wGgpJ^7Fi7 z#YzJJNuVZzifT&$rP0db$Vhc#CC4pJ?~Qx{qcd5jxwuzVHHtG7bW<)HqT^Wm!ot}J zG}$iv+mI2P+yX%{ocU6Y#pc=kqI+V0yvu&P`g)30B;Am6p=~S%kIF#NX4;5Cb@b`P zH~DyAy6SkS&A*Gj#q7RhV8pm}pR|9%OTCHAD-JTGk6>x7XuP!r2=;J{xJ78Qi~1RC z##qk{p?bAMxD14$buS_C=@krzi95!^m-BYUmgD&e7h+8-5OsicJSQ_UC`y@}*0fxZ zK(8NKz_@fPu-9GL5h^5>tWJ#J6!_^ZefEJ}Ql8*Gt?qO~xX zx@9Pt1M2`(Tj4Hz{eWx@{4z(&L5%3|&4OM? zh)5VoeVVge2=RA}MBIS(7c)zVCOA04;=>r@T~ksmh{-oguJ#6y1lKR_ zj3yMwCOo7J{!|*|i?PqfzFPjl*N&30NQj5dp+!*&vt`K@*%7GJOdS-*K=!(ldOi_0 znKv@bkKQH-HCjXFnPieTQ*#G_cHTW%5Dg~7;Vx;CzI3KtSuLpDAD6(!mxVPLXvb8l zGwZ-IEg9Vr9J4$cxGPTTGduMwUWqcA$E8I$TylIFnj!GJsQ=h3FWJS3zJG6dc;yWX z^XDSPB<|123JnXE+Z~Qv(R7^Uj)f;=650onjnDVjgoI&%f~{1USUrD^$ai2L@Xipi z;;(}eTemxE`z1+NJLa}A3NkLV3tO(-ZS;OJGT-|?xrk&Tz<7Lt+IfhCvE@>=O<0wQ zO4Td-YSq3P8hAC;Sgu1Q_sl!bxG+&f@QFZqnga7fah)Qibf4(ZbpZ>yN&0!aQD;~i zaM<}99ZAEp75V>d0LD8fDJ}O%Mu zLBU*cjSZe~Q(vA!zRw2f^`6^nELg3e4Hbo7aEWkQE&P;F!~O>LlCm3irq9(kB!GyW z!E1QYH<?6Kt>(3ySzg zQPYvWONa#ncl!#QuJfXQuK15!5*HB3m;qO#ac8EWFNel!bWN4^HHn&zh7 zkZl|N%4@4`CmC&3N2StBmJxs+&*bCP`7ZIyllvl@SFQzext^}7hE6eXoV{^1re(vD zj3&&%zE+z2rvg3f$1DFi;gq37vg~ix{u6ShY@L1U=#K(#VJ+UynQoXz`NS@Lqu|NI zV%G=rZxC4xNo6ygHpjSB+`EC#oo%6=-jiEYqKFfd_MIla<11787*U}PuZjM3vK_~y?Xz*p&Nf`^poxz7;X_6W07-umMuBSQV*;lBddeV zd9*VNO=z>DCZr1y5YcXLD11_VK8zm}h2IdRQ_$DB{w2^#*)t5^@PKd zZSb0EZbqUMvXv6e>O;tNZ#&RpM_UXKH_6V?#7D6UZGqsn9xVQ zb=9mOctL_90otzDK#|v(1&@djEvuPJj6pavDS(|+#^z`Yby{OoTSYZ=?K=WMJ8CFD z%5}SMPX)yeFwe|QIV^+%tEt2q3_HN`YB?Hl7c6`JMdL}%j)x$&d)eTT6^qnaJekJ2 z-6ukuMA{p++%~KlPtPIgyR=-SPqRi50Cev3F4-B=r|?Eim_pU>6R*ae@~)nQSqm&) zodS+B0dmzndXxi#Q4K#)6{j<-$d0Ljy?Ys1@~QR*KQuKBvq9&)45lC1FYXMsryG-3 zBOm%~6>;{sk*>#a#Y0 zj8>`#DZD3{ZkTuB0Td~A_*EQnp(v}Q!y55N$R+MSz9vD&zJ|fov`!&b)1#kSZh*gL ziKZ~93nTe!R_H9x3^)gTSp&azz7XlQ`FPRv198sQXr3yCr~63qm96yy;H8&WjIPAx zSoQ^?Yq!5{9}s6(+ONZO<+;F1!$O{%h76Boe3LjS1aE#k5)G{DoO@qLx?+cqJZQ)d z?dEr}17Q^2iSK0}_L8d5C1w3>wC?-le}fK8_?qz2t>&<4BvJPUN4jT?Ul!L&-dSwB z`ccTgsar1rCvgJd!;st*7xBF?&$vC&@*ez%B_gDW5fn>^d?-_Z6`heUpl&}L>E+~x z%oE|+=#ds~GqAFDVb8AF!5@@hYD3qur~Tpd_JBX=1Kq+zR}uQHj#h=}^gcO~H4To% zHl2A02{MYz+UbIWY88_=9xoan84qj?=$m(f4sFO)-5CeDEaNf=J0yUWpNB#{^N5Da zr5jn3RL+~i>*`UnCkj$rp#hq4+i!^+t7XRF5f1>5*!0X~Xi&k+IN~BsgR-v_)i+JD z-LyPJ>VdXw!vMsi3g3!=i}a>L=^#6-#YMPL!>Y)2D{WtC_vaD{B-?;`{auBxW;9K5 z5HafY(+=hCz?auL7U#+fc&(b_WYpFc3-NDjw&ScI@tHQMyLF(VA8HEA3XWrs9}@1v z40Pv>v1;q&o7>!n7cu>VSN)frkz_EmMJXY2daCL`6Pub|Ux7mk2abNh@uANcSn}>Y zV@CS1Tm&&yXL`@>L^duANC#}2WRE*kfET+%YuREYYLBg1Dk9~rezpqq32x)gYxXnb zkO|4qW1?;V#Mh&rETByhEUy7FprVvW;Q5d}DX#8*4cm@d1-~wCG5%}0%ib`H;>EoM zsv9HTU+fzRZNCF_eL5`GBU`8ImB@e#H46-pJL-*hOuC1Qrva9~wjw62Z zR9wT8%F}(LLkEOwij3e*S>m?SLk2_nk0c!p;Y~;&kdoiip^Aqp@KP>f$_%BCS94yI zzkTL1!MqDQRQT=sn1;(&Ew9VsuQ|mfq_HwV9G1}^MCvhX^jOl{mr8pxpyrX@O4-2{ zoZsI9+ESvNpF>M`L0u(P@W0ELwlQB{YZ;2PJsC3}3b-;swYlME(KQEJwQEv-^kyi@ zxu1D-E`PvVFQ_+6ceyiht0M+cp{~ zPNZ0WN$`z5l628%E?X1N!~GivOCw(dCP#1YEqa1Hz*r8QM15tBF`c>mJv5F;H}Q8M zP#QYy427WWu1QwC1CIAhR0cZ=sO%r*v+Sh^-Q@;$dh|*#hgQfB-449lC2RFh-IUPT32~3__V%dsxVw(XzGnThy18h69;Y7- zJsw(+VoP^_ng>EH-tE;>qsg@pBAgjwjZ) za~`ucxML@TUxha;X3teMz8bHpZb|2U9=7lY_%elU6?A4+ux)}@71j0`W_-Ca&{dB0 zE zN+k&Hb))wX!d-wYQ@Nc2qtxV!-Y)~^w~5mQPz2XJvt?5d{jscJ7E>((dQl9W-bx{u zCxnacmD+eh5-6P3`~szMJyy{yv9CqX7(ca6u!W)w;m76uL6JFee_6E`DV6}n7xNx8 z@70-gJ^@dPt7^BgenA}WeP6J@J;0O;B0srVC=i zhdX|PvA**V`Z^5D^3DkM*q1G{Z*Z4HX;tg}=rxyj|oXU<#7V|5jK;l%&uY zVh+5EY0I9+CzNzk8Y7z6wg^lra1_UKiOY@>K1!LDt|if{NQP)2B<`2o$h=kZQ5?Iz zx(QAEulf{YkcVv<-RXQNa>}#tWvB5G(=y64 zc`k+9`Y`osoYQXBIuI}EhKt2Jl$v<>$Ns^UD9)vh6!Uq<91kB~0A<p5F78pD-JI#c zm_?fRBJNhlY~F)BpN8#YJV6%OOfVanqr}liSX{USdyF*@F{l6;x>19(4ZNpRZW8On zVRpuy@=a36!yrF~sUS>)tyz5=BR>a7@xd(iYvj?x4Q7@iQM$DoeZ zeadWsgO;v6E!Y4P%JR{R9}Pueu|e+2u{|K8j5OR=?p_= zWs+1psv%ScGA?Z_Fq__8ShbrZue9LL5aXuLnog{xeQ@8PwsqAEU0w*zsUDOKlMGa$ZAd0%#f}0zD5Hi(LQ>P0@$-inP zSU1b`5%Rk(xH9ndza;_jaI@R++bho!n-A@-$5}781TRXkg1FmkiBOT=*CLFkA;8Nb zvVpa{$)Sj2I_~g5TZ!<*?t@`Ex}FTm>NukJs^miM@nzN#^cil^l^wlemNamM_H;w^ z2;o)?o>~@5KebaimRdFBE<(CIDaSgs4l3mgCld3fpBSpJjo}p=Calj?uAs&&m!a?) zLR&Wsp>CI7SzGsL>e`fRQwAR@X|P)q=L-3ww5U#2?^|arorjWmMz`OkOdbHmeCfiE z%GOi%OcJ_=m9#O$Y@aBv8>%b5SYMC8k>)ClcMyi zh{a`curB@OuHb5oOUPuKR{~5J>=I2Ffbgi>!yEPdk>~bI-b2q=PQnUDuz-asXPfw1 zAzfqBDPx*!`3X;S2WPzlIv>R2cbX3z5 zJc#hwH3E;c(2g>~YInlm91v=i7^%dzKR;zJIJ+AW@wM{A=F^`u+sc(nr(-#j@^{{< zk-1@Y8_&p2AND#vzosw4Bb)#ROLtKa!Lm2!6;(Cu?Hztxa$-1~&BT{|?Xm^J7+l9z zu?9!a*xL9|l+UEQ?%o64Lcc%7jla)U2R~OuF84 z%wjw!CSWPS<;~Qh7oOPUutk@teYZcK7{9LN&F5LQH5Lgck%o0ELFw!_Uj*h!NOh z-oe#zPy`?rf8qSuj|=d`xtrK7Ob_oSa>nu5Hbt zV3q7M?qbHoVg>L55AvngxNVB(-S^p5SUgVw?|8`f!7DDGu3&= z6f{<@?o?=F)cWz2b4&KM**#6V4;xpyjM=$0>!;0&c}pjEH{rbX%Ne_5d|}X(@I;fa zMrbA>8gR_f?^;z&`4#bLNwLU}^2C>Km6BRuMruuI`4hhU@8mPNrn%B*%M@no?%Z9% z?0KLA=dF%=ib-qWGo86h^qJ7h$D0tjJp`jXLB8EIwOZY4DDs2Yyu`eJ5NFZcJClyoI$`z==QGaWTqc zbg_tT3d3$PsRGEmY>BFESsEk<=fQZ|Z3Gha2H)oTuTx85WBq2CXAA1*fIQ+Ey3Bjl zmi%`@<1X9Na+eoeL_Oi90O^YLVs+A-a zW=Pfv!tvaTQYB+#lgHDhprhSHDH{AUOpVqpo5N5j6neFjpX}t=$^;4Zhlj+nk%=b@ zOe4qxjs6Od2Sh;1b<5dh-#KT+D4MBF#X+LK5O;Dgr8x`&dp$hb4 z3x$R}LCI~p=z6PaTza)`2BwdfX+gVF#Ntb}%sDVhXfBN$xm37zMoBGH%dTQKM{8U^ z`U4rm`hJjc2geMCSeeHxY0Mkg=DV2%m{)fLrsxwVv-LR=$u%?z>x@ZRMMu}z&a=gE zq@Qx)H~J)b7zru2arLn0mC-)ErIj>oUH9orKqiUO*$Q0xZBX2iNH=zYkY>UIWYY*F zfj31XQMZaUO*u#VBy~5JD1_LJD7a)P8o>q3l))}rTD+$~7bpEAY|Z*s+$86r84VF7XANB8{v_5PjYQ-qdU1CkcU z$^$0IEJ(+^%xkoCV{L;m_}h4~j?3=ika{rxXBRkQ($3sw#S1GgPKOkZZCiKUNPO&2)?}H@1j)4RGlOB}Obb;pQZB1FC1F5x5u)r|j!MpgJ%68hnN1SCu zWL6<2#<7{5E@fP~sDdHV1jY?YUM&(3 zS?PmNQ(rP39L~*4*C?H{$rQrsmKLWcKpJP)mK2HW>`R%WK8mX)j$AyJA@!Jypk>!jn-|fUp_e^FCdPcuq|WhqZyaB>|^F&N;IUcgjWtP_!o&ErznH z$=~bMSYTu5qH|Q3pUB+TUtIaUDL`*2wd?%WUvV1$y)?9$w%qd{k z#;7XOWD z+b~lM1KT_fj0A6wOeuSYCT}so4C?Ac3%h6b-RmDyk5C5#;C;PMkI@N_gh`I2_XAsW zpU>Gix}ERVM;z8OKp-uG8|O5pzbf<9)iZp@dOJ$h2B=hxcszmAG2w`)!N@16=1~;; zn}4HMfBla*pGEc#laRQHR#D(6edJ^yH2m0Ag7zEVp4j4g@Ut1wb4!uFQr4eRxzh!! zM^9;<^F@(93B~z;YH?6M!~QwuFA{A4>!tU4@(kIlsEuJ+A0G$U8Ny)!GUD)r5n-3v z!mF?pFluxE%HApI`CHCGL#SbFoWp9~wGrgoO$VUs$0wKX&05^ApZ6Lc{Tsk5oq`N+g6-Fv9W~)4Kp$KS!COO053=>H_KG626IpnmRcT94D zY>2Y3Z$9OiA=fs|GJ%q6_ggaOB@+9m`bV;(P`ghI_aVbrAM#gQ^rJ=35MSB)Puq&Y zO6Tv@)kVwlF9IA7T!0xG6l5mCa8qJJ@XLp~_Ms&E?uv8OXmHJ{g&*CUwHjFdVh zFuUe#>~7!GwxBUEU;te}&2U2G%M|}vo7n8yk_X9eq6(BuD`2AXz2Bp^Qb43DJE6#- z)HXgL5u$q_(@*MZ~wEFiJNmyISg}?@t3(KPTx4(fNxLQ{}`xlCzT7w znM+u1{NPJ1WtAr$nlz9#k{wXj&jhR|JWL%Uzn!fh5qVU0D6 zy~R@H4K>6lJD`jOyoQl-BA@u>6H4+PAysY15RQ2+WB{-Ymq9Hr<|Ne?(TJ8x3QurX ze}M>^Dn_Pu_Mcgcg9iujGVW4yIedc0L}~GR1P!4?NDb2iipjp3q>Z)AtU5E8ZM2@D*1r4cM6}?G!H&<8?fv!W5w)kXh8E zk`N4gUk1>3kpa|GFxnim#q_&i_vKUVKwFK060DUu(L%`FKy@AF>hdrp09FPKGWp~1 zi?(~+5E&vQxJsD`N(9OD>g8czpA2GnbBXPSRuwQaDdd4`%hOOe9fhY>;;Sn-``Z01 zFox$OIEH^~@h{@e2k2$Ovjsf+5pNN*rIHUk_i{a#$zo~-nLC$*@1njKk%wX^I<7v&!I&(E8B^t4xCKq>F?-gIe)OY_9iMs$2)yPIr4ohCC~T$@ z1{DqJn_uozUJQIY#Ps09jTAvG@}+>YRB|Qga#Kj5(S|QXSj-80Gn^|K;l!#Dy2f0l zkfweC2MJ^k8F$q1WL-E!mq-2xgMbSL`GI^r&hfrPbP{UKfyY-jG#pcCuti^J5Ok!T zSgNyhW{lW|?GcQM>8E%jJw?RHPlu?2O}~JV)w}U7Bzb(C4y7plftqaxFk);Ut# zDWySk<)+w>`F#2nd9Ohu9EP+N1QtTDVhPoF~9pu+`@upj97Vt>e@so39dH; zOT-V?Ey@j2E@O{Hq{vjwqxu(Mplm?z=$i1L@5`|FBC~T^6iwB5Ae7FW6Hn2zi5mA& zBngYAg9pv$ldf83uqyJ;eh6VLtD50Pt*SN*9=-DbOllqbpe_;sd^0?wn>fZ8r}@0w zg@JKz2LZnXneCb9O2>S;bTRz39W?QsF0A?y#x`nLEqYbEeM$Y_HikJ6p;nwn?^yyg z-=x~c>$pSl(^bUxAHESp6%k=ye?bX!EXg_39ckgCD{%AUJ+%Cn+e7ol*fBlPLvz}j zwm1sBKbWg0u|Uv28-e%FBP$t-K!7$lI;q%@?!zJKYLi*BQXk058z&(YtQCttNLGIU z0jRRtg&uk|bJ|q|KpW*434q|&EMge^iLwAgl;EJuLvvkfm{|_PHikQay5`Qe6AhLs z5l;=SNr}*%;$RTYp$^lvHLu?Zboak{vHUvS5PkcS{w!B=uC2EG#y)GXL!5Q+?Zttl zjfzm-_?8@F0qLQF2gh8-?4dEm=9Ib2%;sig&3BR+bC&YxFVW=46 z!1@LMuILdtPNH<0k}kd;nvb72LETe9hz{oXk79~xZ;j(LnG&}7rq`-_@RgX}L0E-C zD}e^^`F4vLVYe8nF14P2HY|s;)I6_hH)LIkepXjIq5Kw<&A|q8DS=+Q3C<+wcuyWc z)LE8UqC`;jL1mKEAG za7~juLNEsx<8-c^d0NL7vjV5b1wp86K@2;euVNn4df5Yr{OS;jVeMkT<%!4xp9;g2 zalET?)yscVwv|CHEZY|8;#dN)Q9DsgC>i01C4Mq*fdH@`D3O6oLk^1+&kX>vjpsn8 zUnUON?w`^w%(YxW8C2JN&>;Bjm zWsO1LO1R`LwijMQ+Z02uW+RxM#HPkvSok(@qyQ9}zr<+S?cT37 zs<)+!chu3oPKnjrcB}l<+3*xQ{mdvkBXpyUEBk9r{MX<79Q2kK@KKy|OUNxp+xsMg zRy4J|pjhY1D_d&Yi<0x${CdP`PGo9eRi~tWrlZ+{(4yv?i`)D}5a3pF`phAiP*)ct zoTbPd;jXOE+#7(E7fS{6=hy&d4f;!8X$3`Z?|l}%vbhIb=4sasBu#Ux?NqS}5ksXZ zP9G9GXs=Ema1E*)7Vk>Gj!i|0UvuFrfNbJ%0fvkp_Wdx& zj{7{|6!%4zE;jIo_BzexlGB6{H4awsLdLFg47hCcO}BQ@h06>|o1CE73Sy8K*uREy zWRrJE8RIXWm{mUv1iTlwR)gct4Vjt;=JhN5_Sv#++fG9)=Cw++!m<7(?pH^S*>p}D z>h@~0=&JrOK_}vvw;2XwhD>3XW{ja#v2iMvG-HUDp8*0DO|lF?C1Txg8AzGaH9MZ zF&$wA3;Fe5DENa_993|{Y5p?1lDWlsS^QUzbn42=quuy*HFFIst^^)=RBu99ZXA8* zRx3tMBG`5h^-wWZ+gbm?4$P&XvvMff7FJO_ks)IR0?!?Dz?RH+w8v{~@IrGwhIlBR z-zF2XvRO1`78s0jo4!#Ov+;nC@cq2trP{v62y7u>c^lI5Y6HN zw)VfbF15B|O3vdij+h?q5zfzjeugi#7`tFw-C}s$MN(Ox*kXq#h=hGV@P)`;us1b? znIE{>G)a)AX;N&JK9Ts7O(CGxfg;Wo4omC<&`(ZYQh1;zHtBnX7<=3=ayS)GsLbnO za6Jb>;a0r&k@YEJI5`0T#2ba%>_{H4mVc6c6coP%*<7&=EPIxJwtRY$-(v`?8hW~9 ztM|EnY~XlQC{A8VX0#hd+PAfXygQJjJ1F2r$VD^>c%s244A>#y z{Xr+Q>#tDUnf8XvsSbb!fUEu}QK$NLf_b$pRWk0pjdGu`7?%~_kcvz$fC#NIC&*Yf zdA$}hm2|hXtY~c06Net$hxFI=vNV4_)QbUkLubl^3){0P*yJ%k#9?%r)pLS$&xbuC zKYtcK+<6JR{SDnKp_}m-8pheZFi*8@X|`2)8>R0#!%Bm(U{GbPuiXm!Sb;cYqVrp2e2I4fRFUai0J63r6#fi5p+>#dj3*iT&q$BIF8Vbd zYH=>l=kj*8W9i4TTHrUf29WDnUh1DkmQ)iRNiP#qT~ZC^A{KG=ig4@xa{+LKa^`n! zj6X}^6_iyVSj{CS8Z;L7?FD6(b=%rgDl#vMGgG?|li6ZT#+xHUh#&(B?C?GG4pc@R zq{x46Tg6~^?%$=pC9K8&UO_*$vSu20*6M~8SPISs`}LUEQ}lSzi?@r;c6s=y=2z5+ z<-U>A{y8VxR|1P2U%Q)~bZ0E4Z4hyU5h^?0(Y`x$y5JCzsa4dP%`9{qFr=HgLqgb2 z{jDU(>_J&y!JTs5SopC+2wl!aT1l6>Ji_B+;Jy9DYTwvtalrUeQ{1PmtJU2A@&dFr z4voTX0b;wl?m_+DYuPx-zJ!t0bWVNljVq#vXh?ScoEvVTQA!q$fXA2Y%W5*qAH+yO ziBV=+kC3_;O1~BEaoDcjoYd75>R!Pcg0O5WN5ZhYJVviSQwR#0+qO_)=WfRKlz&2o zu2e)$oWGpD;Nm!$5$e^BX&WRI%7=Lm9D(F*|9xr(ZAVbUWmcAwl#_A<@1E0X_E~h( z+XM6#6>+5~`{}43#zf)1$K9+YGWyBIVUq^{7@4HVNxs`~c|t4-%XQ1l8yIwlvKVfPuyLtyN;nzmo# zr?vq8&aqaq;~~lyk_eXU6WVqU6CkQ`dTn!;O`n~9-H9icxKyVldGFvmO~t<$1WAm} zL_ZXMZ4o%rDx1@}m~{X$a|Aj{W?){UsL1f8YnQ!*k?uV!&_vq=1{2Y?z9Rk162ql6 zf(=yKwtY(%mA48K%KY?EYwiP;^`~AJt=$Z{Lb$Jjow*9Cz*jELiebqt6)tR3i{c^ex*h?TjFL+EiS8C)nm8A1 z0eo(!}-DBna1Ati|$d|oO7JpKvLiT-+p#abK zh4yDy8G4K=`RW&;&kAPHr4VSO5Z>V%RVy=X`j99a=pW<70mJ}#UaRV0f23qE2f?NE z;|)xw$5ATMJGfUw7=~rhD@F^zL|i!J)i5g8r<*?Ox4?0>9-K!R_IoDAdU1SIXQ4>| z>1mL&9Bx9^Fik-k$-F?g=X!PX9ya}BSkDB_a`y)1MP;yTVxRdtM^aZ-0jscKkRxQ{ zTiRW$7r~35G%XBfuE4#<{Il>_*lB2-VCOXCl>jQGfoYz)LStUF8Tc1Bzn>{0ACMwM z%?=%c6F0OWP4Cf|dBur;{+FLRm(v3+He+)`voC=f*E1LfvzfgUCUR|;wbN_L$0=VAdi9( z=COZZN*uQ~tuwD~W;j@x*o1b-iDq1kc%a)t)NaBqMPBAdZl;}m4hg&aqkoI!o*kCP zU3#+I*~(-?BrpL2C<+k!ugL$%|Nq7R=ZC!igeUzk f9{*qb|9RH??;-#N`&YQY|5Vg}T-E0P*X(}*Je60N diff --git a/releases/latest/typeahead.min.js b/releases/latest/typeahead.min.js index c7b7687029..86019271dc 100644 --- a/releases/latest/typeahead.min.js +++ b/releases/latest/typeahead.min.js @@ -1,7 +1,7 @@ /*! - * typeahead.js 0.9.0 + * typeahead.js 0.9.1 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ -(function(t){var e="0.9.0",i={isMsie:function(){var t=/(msie) ([\w.]+)/i.exec(navigator.userAgent);return t?parseInt(t[2],10):!1},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var i;for(var n in e)t.isFunction(i=e[n])&&(e[n]=t.proxy(i,e))},indexOf:function(t,e){for(var i=0;t.length>i;i++)if(t[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,a=this,u=arguments;return r=function(){n=null,i||(s=t.apply(a,u))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(a,u)),s}},throttle:function(t,e){var i,n,s,r,o,a;return o=0,a=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var u=new Date,c=e-(u-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=u,r=t.apply(i,n)):s||(s=setTimeout(a,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return i.isNumber(r)?o.setItem(this._ttlKey(t),n(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),n(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=o.length;for(t=0;n>t;t++)(e=o.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(o.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,r),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),a=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,u=u||new o,a=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:a||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this.get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this.get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return a>c}var a,u,c=0;return i.mixin(e.prototype,{get:function(e,i){function o(t){t=l.filter?l.filter(t):t,i&&i(t),u.set(c,t)}function a(){s(),l.onDeckRequestArgs&&(l.get.apply(l,l.onDeckRequestArgs),l.onDeckRequestArgs=null)}var c,h,l=this,d=encodeURIComponent(e||"");c=this.replace?this.replace(this.url,d):this.url.replace(this.wildcard,d),(h=u.get(c))?i&&i(h):r()?(n(),t.ajax(c,this.ajaxSettings).done(o).always(a)):this.onDeckRequestArgs=[].slice.call(arguments,0)}}),e}(),u=function(){function n(e){i.bindAll(this),e.template&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is requried"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.keys={version:"version",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"},this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,i){var n,s='
                                                %body
                                                ';return n=t?e.compile(s.replace("%body",t)):{render:function(t){return s.replace("%body","

                                                "+t[i]+"

                                                ")}}}return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var s=n.filter?n.filter(t):t,r=l._processData(s),o=r.itemHash,a=r.adjacencyList;l.storage&&(l.storage.set(l.keys.itemHash,o,n.ttl),l.storage.set(l.keys.adjacencyList,a,n.ttl),l.storage.set(l.keys.version,e,n.ttl),l.storage.set(l.keys.protocol,i.getProtocol(),n.ttl)),l._mergeProcessedData(r)}var r,o,a,u,c,h,l=this;return this.storage&&(o=this.storage.get(this.keys.version),a=this.storage.get(this.keys.protocol),u=this.storage.get(this.keys.itemHash),c=this.storage.get(this.keys.adjacencyList),h=o!==e||a!==i.getProtocol()),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,u&&c&&!h?(this._mergeProcessedData({itemHash:u,adjacencyList:c}),r=t.Deferred().resolve()):r=t.getJSON(n.url).done(s),r},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),a=i.getUniqueId(o.value);n[a]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[a]);!~i.indexOf(r,a)&&r.push(a)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),e!==!0&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,a,u,c,h="tt-dataset-"+e.name,l=this.$menu.find("."+h);0===l.length&&(s=t(r.suggestionsList).css(o.suggestionsList),l=t("
                                                ").addClass(h).append(e.header).append(s).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),a=document.createElement("div"),u=document.createDocumentFragment(),i.each(n,function(i,n){a.innerHTML=e.template.render(n.datum),c=t(a.firstChild).css(o.suggestion).data("suggestion",n),c.children().each(function(){t(this).css(o.suggestionChild)}),u.appendChild(c[0])}),l.show().find(".tt-suggestions").html(u)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(a.wrapper),n=n.css(a.dropdown),r.css(a.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(a.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(u){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(a.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(a.wrapper,{display:"inline",zoom:"1"}),i.mixin(a.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),a=o?o.value:null,u=this.dropdownView.isVisible(),c=this.inputView.isOverflow();a&&u&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(a),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(a,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:a})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var a;return e=i.isArray(e)?e:[e],0===this.length&&t.error("typeahead initialized without DOM element"),0===e.length&&t.error("no datasets provided"),a=i.map(e,function(t){var e=n[t.name]?n[t.name]:new u(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){this.each(function(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))})}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file +(function(t){var e="0.9.1",i={isMsie:function(){var t=/(msie) ([\w.]+)/i.exec(navigator.userAgent);return t?parseInt(t[2],10):!1},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var i;for(var n in e)t.isFunction(i=e[n])&&(e[n]=t.proxy(i,e))},indexOf:function(t,e){for(var i=0;t.length>i;i++)if(t[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,u=this,a=arguments;return r=function(){n=null,i||(s=t.apply(u,a))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var i,n,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var a=new Date,c=e-(a-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(i,n)):s||(s=setTimeout(u,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return i.isNumber(r)?o.setItem(this._ttlKey(t),n(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),n(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=o.length;for(t=0;n>t;t++)(e=o.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(o.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,r),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),u=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,a=a||new o,u=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:u||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this._get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this._get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return u>c}var u,a,c=0,h={};return i.mixin(e.prototype,{_get:function(t,e){function i(i){var s=n.filter?n.filter(i):i;e&&e(s),a.set(t,i)}var n=this;r()?this._sendRequest(t).done(i):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(e){function i(){s(),h[e]=null,r.onDeckRequestArgs&&(r._get.apply(r,r.onDeckRequestArgs),r.onDeckRequestArgs=null)}var r=this,o=h[e];return o||(n(),o=h[e]=t.ajax(e,this.ajaxSettings).always(i)),o},get:function(t,e){var n,s,r=this,o=encodeURIComponent(t||"");return e=e||i.noop,n=this.replace?this.replace(this.url,o):this.url.replace(this.wildcard,o),(s=a.get(n))?i.defer(function(){e(r.filter?r.filter(s):s)}):this._get(n,e),!!s}}),e}(),a=function(){function n(e){i.bindAll(this),i.isString(e.template)&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is required"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.minLength=e.minLength||1,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,n){var s,r,o,u='
                                                %body
                                                ';return i.isFunction(t)?s=t:i.isString(t)?(r=u.replace("%body",t),o=e.compile(r),s=i.bind(o.render,o)):s=function(t){return u.replace("%body","

                                                "+t[n]+"

                                                ")},s}var o={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var e=n.filter?n.filter(t):t,s=d._processData(e),r=s.itemHash,u=s.adjacencyList;d.storage&&(d.storage.set(o.itemHash,r,n.ttl),d.storage.set(o.adjacencyList,u,n.ttl),d.storage.set(o.thumbprint,p,n.ttl),d.storage.set(o.protocol,i.getProtocol(),n.ttl)),d._mergeProcessedData(s)}var r,u,a,c,h,l,d=this,p=e+(n.thumbprint||"");return this.storage&&(r=this.storage.get(o.thumbprint),u=this.storage.get(o.protocol),a=this.storage.get(o.itemHash),c=this.storage.get(o.adjacencyList)),h=r!==p||u!==i.getProtocol(),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,a&&c&&!h?(this._mergeProcessedData({itemHash:a,adjacencyList:c}),l=t.Deferred().resolve()):l=t.getJSON(n.url).done(s),l},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),u=i.getUniqueId(o.value);n[u]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[u]);!~i.indexOf(r,u)&&r.push(u)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),!e&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,u,a,c,h="tt-dataset-"+e.name,l=this.$menu.find("."+h);0===l.length&&(s=t(r.suggestionsList).css(o.suggestionsList),l=t("
                                                ").addClass(h).append(e.header).append(s).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),u=document.createElement("div"),a=document.createDocumentFragment(),i.each(n,function(i,n){u.innerHTML=e.template(n.datum),c=t(u.firstChild).css(o.suggestion).data("suggestion",n),c.children().each(function(){t(this).css(o.suggestionChild)}),a.appendChild(c[0])}),l.show().find(".tt-suggestions").html(a)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(u.wrapper),n=n.css(u.dropdown),r.css(u.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(u.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(a){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},u={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(u.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(u.wrapper,{display:"inline",zoom:"1"}),i.mixin(u.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null,a=this.dropdownView.isVisible(),c=this.inputView.isOverflow();u&&a&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.datum)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null},setQuery:function(t){this.inputView.setQuery(t),this.inputView.setInputValue(t),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(u,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:u})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var u;return e=i.isArray(e)?e:[e],0===e.length&&t.error("no datasets provided"),u=i.map(e,function(t){var e=n[t.name]?n[t.name]:new a(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){function e(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))}return this.each(e)},setQuery:function(e){function i(){var i=t(this).data(r);i&&i.setQuery(e)}return this.each(i)}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file From a25af962c7121d91aebb134607a6a76f6be774a3 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sun, 14 Apr 2013 18:45:00 -0700 Subject: [PATCH 19/44] Add assets for 0.9.2. --- index.html | 2 +- releases/0.9.2/typeahead.js | 1126 ++++++++++++++++++++++++++++++ releases/0.9.2/typeahead.js.zip | Bin 0 -> 17267 bytes releases/0.9.2/typeahead.min.js | 7 + releases/latest/typeahead.js | 25 +- releases/latest/typeahead.js.zip | Bin 17247 -> 17267 bytes releases/latest/typeahead.min.js | 4 +- 7 files changed, 1151 insertions(+), 13 deletions(-) create mode 100644 releases/0.9.2/typeahead.js create mode 100644 releases/0.9.2/typeahead.js.zip create mode 100644 releases/0.9.2/typeahead.min.js diff --git a/index.html b/index.html index c68b69321d..d54408fd12 100644 --- a/index.html +++ b/index.html @@ -27,7 +27,7 @@

                                                typeahea
                                                - download v0.9.1 + download v0.9.2 project & docs on GitHub · changelog diff --git a/releases/0.9.2/typeahead.js b/releases/0.9.2/typeahead.js new file mode 100644 index 0000000000..70244deee0 --- /dev/null +++ b/releases/0.9.2/typeahead.js @@ -0,0 +1,1126 @@ +/*! + * typeahead.js 0.9.2 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function($) { + var VERSION = "0.9.2"; + var utils = { + isMsie: function() { + var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); + return match ? parseInt(match[2], 10) : 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"; + }, + bind: $.proxy, + bindAll: function(obj) { + var val; + for (var key in obj) { + $.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); + } + }, + indexOf: function(haystack, needle) { + for (var i = 0; i < haystack.length; i++) { + if (haystack[i] === needle) { + return i; + } + } + return -1; + }, + each: $.each, + 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, + getUniqueId: function() { + var counter = 0; + return function() { + return counter++; + }; + }(), + 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; + }; + }, + tokenizeQuery: function(str) { + return $.trim(str).toLowerCase().split(/[\s]+/); + }, + tokenizeText: function(str) { + return $.trim(str).toLowerCase().split(/[\s\-_]+/); + }, + getProtocol: function() { + return location.protocol; + }, + noop: function() {} + }; + var EventTarget = function() { + var eventSplitter = /\s+/; + return { + on: function(events, callback) { + var event; + if (!callback) { + return this; + } + this._callbacks = this._callbacks || {}; + events = events.split(eventSplitter); + while (event = events.shift()) { + this._callbacks[event] = this._callbacks[event] || []; + this._callbacks[event].push(callback); + } + return this; + }, + trigger: function(events, data) { + var event, callbacks; + if (!this._callbacks) { + return this; + } + events = events.split(eventSplitter); + while (event = events.shift()) { + if (callbacks = this._callbacks[event]) { + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i].call(this, { + type: event, + data: data + }); + } + } + } + return this; + } + }; + }(); + var EventBus = function() { + var namespace = "typeahead:"; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + utils.mixin(EventBus.prototype, { + trigger: function(type) { + var args = [].slice.call(arguments, 1); + this.$el.trigger(namespace + type, args); + } + }); + return EventBus; + }(); + var PersistentStorage = function() { + var ls, methods; + try { + ls = window.localStorage; + } catch (err) { + ls = null; + } + function PersistentStorage(namespace) { + this.prefix = [ "__", namespace, "__" ].join(""); + this.ttlKey = "__ttl__"; + this.keyMatcher = new RegExp("^" + this.prefix); + } + if (ls && window.JSON) { + methods = { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, + get: function(key) { + if (this.isExpired(key)) { + this.remove(key); + } + return decode(ls.getItem(this._prefix(key))); + }, + set: function(key, val, ttl) { + if (utils.isNumber(ttl)) { + ls.setItem(this._ttlKey(key), encode(now() + ttl)); + } else { + ls.removeItem(this._ttlKey(key)); + } + return ls.setItem(this._prefix(key), encode(val)); + }, + remove: function(key) { + ls.removeItem(this._ttlKey(key)); + ls.removeItem(this._prefix(key)); + return this; + }, + clear: function() { + var i, key, keys = [], len = ls.length; + for (i = 0; i < len; i++) { + if ((key = ls.key(i)).match(this.keyMatcher)) { + keys.push(key.replace(this.keyMatcher, "")); + } + } + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } + return this; + }, + isExpired: function(key) { + var ttl = decode(ls.getItem(this._ttlKey(key))); + return utils.isNumber(ttl) && now() > ttl ? true : false; + } + }; + } else { + methods = { + get: utils.noop, + set: utils.noop, + remove: utils.noop, + clear: utils.noop, + isExpired: utils.noop + }; + } + utils.mixin(PersistentStorage.prototype, methods); + return PersistentStorage; + function now() { + return new Date().getTime(); + } + function encode(val) { + return JSON.stringify(utils.isUndefined(val) ? null : val); + } + function decode(val) { + return JSON.parse(val); + } + }(); + var RequestCache = function() { + function RequestCache(o) { + utils.bindAll(this); + o = o || {}; + this.sizeLimit = o.sizeLimit || 10; + this.cache = {}; + this.cachedKeysByAge = []; + } + utils.mixin(RequestCache.prototype, { + get: function(url) { + return this.cache[url]; + }, + set: function(url, resp) { + var requestToEvict; + if (this.cachedKeysByAge.length === this.sizeLimit) { + requestToEvict = this.cachedKeysByAge.shift(); + delete this.cache[requestToEvict]; + } + this.cache[url] = resp; + this.cachedKeysByAge.push(url); + } + }); + return RequestCache; + }(); + var Transport = function() { + var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests, requestCache; + function Transport(o) { + utils.bindAll(this); + o = utils.isString(o) ? { + url: o + } : o; + requestCache = requestCache || new RequestCache(); + maxPendingRequests = utils.isNumber(o.maxParallelRequests) ? o.maxParallelRequests : maxPendingRequests || 6; + this.url = o.url; + this.wildcard = o.wildcard || "%QUERY"; + this.filter = o.filter; + this.replace = o.replace; + this.ajaxSettings = { + type: "get", + cache: o.cache, + timeout: o.timeout, + dataType: o.dataType || "json", + beforeSend: o.beforeSend + }; + this._get = (/^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce)(this._get, o.rateLimitWait || 300); + } + utils.mixin(Transport.prototype, { + _get: function(url, cb) { + var that = this; + if (belowPendingRequestsThreshold()) { + this._sendRequest(url).done(done); + } else { + this.onDeckRequestArgs = [].slice.call(arguments, 0); + } + function done(resp) { + var data = that.filter ? that.filter(resp) : resp; + cb && cb(data); + requestCache.set(url, resp); + } + }, + _sendRequest: function(url) { + var that = this, jqXhr = pendingRequests[url]; + if (!jqXhr) { + incrementPendingRequests(); + jqXhr = pendingRequests[url] = $.ajax(url, this.ajaxSettings).always(always); + } + return jqXhr; + function always() { + decrementPendingRequests(); + pendingRequests[url] = null; + if (that.onDeckRequestArgs) { + that._get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } + }, + get: function(query, cb) { + var that = this, encodedQuery = encodeURIComponent(query || ""), url, resp; + cb = cb || utils.noop; + url = this.replace ? this.replace(this.url, encodedQuery) : this.url.replace(this.wildcard, encodedQuery); + if (resp = requestCache.get(url)) { + utils.defer(function() { + cb(that.filter ? that.filter(resp) : resp); + }); + } else { + this._get(url, cb); + } + return !!resp; + } + }); + return Transport; + function incrementPendingRequests() { + pendingRequestsCount++; + } + function decrementPendingRequests() { + pendingRequestsCount--; + } + function belowPendingRequestsThreshold() { + return pendingRequestsCount < maxPendingRequests; + } + }(); + var Dataset = function() { + var keys = { + thumbprint: "thumbprint", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; + function Dataset(o) { + utils.bindAll(this); + if (utils.isString(o.template) && !o.engine) { + $.error("no template engine specified"); + } + if (!o.local && !o.prefetch && !o.remote) { + $.error("one of local, prefetch, or remote is required"); + } + this.name = o.name || utils.getUniqueId(); + this.limit = o.limit || 5; + this.minLength = o.minLength || 1; + this.header = o.header; + this.footer = o.footer; + this.valueKey = o.valueKey || "value"; + this.template = compileTemplate(o.template, o.engine, this.valueKey); + this.local = o.local; + this.prefetch = o.prefetch; + this.remote = o.remote; + this.itemHash = {}; + this.adjacencyList = {}; + this.storage = o.name ? new PersistentStorage(o.name) : null; + } + utils.mixin(Dataset.prototype, { + _processLocalData: function(data) { + this._mergeProcessedData(this._processData(data)); + }, + _loadPrefetchData: function(o) { + var that = this, thumbprint = VERSION + (o.thumbprint || ""), storedThumbprint, storedProtocol, storedItemHash, storedAdjacencyList, isExpired, deferred; + if (this.storage) { + storedThumbprint = this.storage.get(keys.thumbprint); + storedProtocol = this.storage.get(keys.protocol); + storedItemHash = this.storage.get(keys.itemHash); + storedAdjacencyList = this.storage.get(keys.adjacencyList); + } + isExpired = storedThumbprint !== thumbprint || storedProtocol !== utils.getProtocol(); + o = utils.isString(o) ? { + url: o + } : o; + o.ttl = utils.isNumber(o.ttl) ? o.ttl : 24 * 60 * 60 * 1e3; + if (storedItemHash && storedAdjacencyList && !isExpired) { + this._mergeProcessedData({ + itemHash: storedItemHash, + adjacencyList: storedAdjacencyList + }); + deferred = $.Deferred().resolve(); + } else { + deferred = $.getJSON(o.url).done(processPrefetchData); + } + return deferred; + function processPrefetchData(data) { + var filteredData = o.filter ? o.filter(data) : data, processedData = that._processData(filteredData), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + if (that.storage) { + that.storage.set(keys.itemHash, itemHash, o.ttl); + that.storage.set(keys.adjacencyList, adjacencyList, o.ttl); + that.storage.set(keys.thumbprint, thumbprint, o.ttl); + that.storage.set(keys.protocol, utils.getProtocol(), o.ttl); + } + that._mergeProcessedData(processedData); + } + }, + _transformDatum: function(datum) { + var value = utils.isString(datum) ? datum : datum[this.valueKey], tokens = datum.tokens || utils.tokenizeText(value), item = { + value: value, + tokens: tokens + }; + if (utils.isString(datum)) { + item.datum = {}; + item.datum[this.valueKey] = datum; + } else { + item.datum = datum; + } + item.tokens = utils.filter(item.tokens, function(token) { + return !utils.isBlankString(token); + }); + item.tokens = utils.map(item.tokens, function(token) { + return token.toLowerCase(); + }); + return item; + }, + _processData: function(data) { + var that = this, itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), id = utils.getUniqueId(item.value); + itemHash[id] = item; + utils.each(item.tokens, function(i, token) { + var character = token.charAt(0), adjacency = adjacencyList[character] || (adjacencyList[character] = [ id ]); + !~utils.indexOf(adjacency, id) && adjacency.push(id); + }); + }); + return { + itemHash: itemHash, + adjacencyList: adjacencyList + }; + }, + _mergeProcessedData: function(processedData) { + var that = this; + utils.mixin(this.itemHash, processedData.itemHash); + utils.each(processedData.adjacencyList, function(character, adjacency) { + var masterAdjacency = that.adjacencyList[character]; + that.adjacencyList[character] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + }); + }, + _getLocalSuggestions: function(terms) { + var that = this, firstChars = [], lists = [], shortestList, suggestions = []; + utils.each(terms, function(i, term) { + var firstChar = term.charAt(0); + !~utils.indexOf(firstChars, firstChar) && firstChars.push(firstChar); + }); + utils.each(firstChars, function(i, firstChar) { + var list = that.adjacencyList[firstChar]; + if (!list) { + return false; + } + lists.push(list); + if (!shortestList || list.length < shortestList.length) { + shortestList = list; + } + }); + if (lists.length < firstChars.length) { + return []; + } + utils.each(shortestList, function(i, id) { + var item = that.itemHash[id], isCandidate, isMatch; + isCandidate = utils.every(lists, function(list) { + return ~utils.indexOf(list, id); + }); + isMatch = isCandidate && utils.every(terms, function(term) { + return utils.some(item.tokens, function(token) { + return token.indexOf(term) === 0; + }); + }); + isMatch && suggestions.push(item); + }); + return suggestions; + }, + initialize: function() { + var deferred; + this.local && this._processLocalData(this.local); + this.transport = this.remote ? new Transport(this.remote) : null; + deferred = this.prefetch ? this._loadPrefetchData(this.prefetch) : $.Deferred().resolve(); + this.local = this.prefetch = this.remote = null; + this.initialize = function() { + return deferred; + }; + return deferred; + }, + getSuggestions: function(query, cb) { + var that = this, terms, suggestions, cacheHit = false; + if (query.length < this.minLength) { + return; + } + terms = utils.tokenizeQuery(query); + suggestions = this._getLocalSuggestions(terms).slice(0, this.limit); + if (suggestions.length < this.limit && this.transport) { + cacheHit = this.transport.get(query, processRemoteData); + } + !cacheHit && cb && cb(suggestions); + function processRemoteData(data) { + suggestions = suggestions.slice(0); + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), isDuplicate; + isDuplicate = utils.some(suggestions, function(suggestion) { + return item.value === suggestion.value; + }); + !isDuplicate && suggestions.push(item); + return suggestions.length < that.limit; + }); + cb && cb(suggestions); + } + } + }); + return Dataset; + function compileTemplate(template, engine, valueKey) { + var renderFn, compiledTemplate; + if (utils.isFunction(template)) { + renderFn = template; + } else if (utils.isString(template)) { + compiledTemplate = engine.compile(template); + renderFn = utils.bind(compiledTemplate.render, compiledTemplate); + } else { + renderFn = function(context) { + return "

                                                " + context[valueKey] + "

                                                "; + }; + } + return renderFn; + } + }(); + var InputView = function() { + function InputView(o) { + var that = this; + utils.bindAll(this); + this.specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + this.$hint = $(o.hint); + this.$input = $(o.input).on("blur.tt", this._handleBlur).on("focus.tt", this._handleFocus).on("keydown.tt", this._handleSpecialKeyEvent); + if (!utils.isMsie()) { + this.$input.on("input.tt", this._compareQueryToInputValue); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (that.specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + utils.defer(that._compareQueryToInputValue); + }); + } + this.query = this.$input.val(); + this.$overflowHelper = buildOverflowHelper(this.$input); + } + utils.mixin(InputView.prototype, EventTarget, { + _handleFocus: function() { + this.trigger("focused"); + }, + _handleBlur: function() { + this.trigger("blured"); + }, + _handleSpecialKeyEvent: function($e) { + var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; + keyName && this.trigger(keyName + "Keyed", $e); + }, + _compareQueryToInputValue: function() { + var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; + if (isSameQueryExceptWhitespace) { + this.trigger("whitespaceChanged", { + value: this.query + }); + } else if (!isSameQuery) { + this.trigger("queryChanged", { + value: this.query = inputValue + }); + } + }, + destroy: function() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$hint = this.$input = this.$overflowHelper = null; + }, + focus: function() { + this.$input.focus(); + }, + blur: function() { + this.$input.blur(); + }, + getQuery: function() { + return this.query; + }, + setQuery: function(query) { + this.query = query; + }, + getInputValue: function() { + return this.$input.val(); + }, + setInputValue: function(value, silent) { + this.$input.val(value); + !silent && this._compareQueryToInputValue(); + }, + getHintValue: function() { + return this.$hint.val(); + }, + setHintValue: function(value) { + this.$hint.val(value); + }, + getLanguageDirection: function() { + return (this.$input.css("direction") || "ltr").toLowerCase(); + }, + isOverflow: function() { + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() > this.$input.width(); + }, + isCursorAtEnd: function() { + var valueLength = this.$input.val().length, selectionStart = this.$input[0].selectionStart, range; + if (utils.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + } + }); + return InputView; + function buildOverflowHelper($input) { + return $("").css({ + position: "absolute", + left: "-9999px", + visibility: "hidden", + whiteSpace: "nowrap", + 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 compareQueries(a, b) { + a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + return a === b; + } + }(); + var DropdownView = function() { + var html = { + suggestionsList: '' + }, css = { + suggestionsList: { + display: "block" + }, + suggestion: { + whiteSpace: "nowrap", + cursor: "pointer" + }, + suggestionChild: { + whiteSpace: "normal" + } + }; + function DropdownView(o) { + utils.bindAll(this); + this.isOpen = false; + this.isEmpty = true; + this.isMouseOverDropdown = false; + this.$menu = $(o.menu).on("mouseenter.tt", this._handleMouseenter).on("mouseleave.tt", this._handleMouseleave).on("click.tt", ".tt-suggestion", this._handleSelection).on("mouseover.tt", ".tt-suggestion", this._handleMouseover); + } + utils.mixin(DropdownView.prototype, EventTarget, { + _handleMouseenter: function() { + this.isMouseOverDropdown = true; + }, + _handleMouseleave: function() { + this.isMouseOverDropdown = false; + }, + _handleMouseover: function($e) { + var $suggestion = $($e.currentTarget); + this._getSuggestions().removeClass("tt-is-under-cursor"); + $suggestion.addClass("tt-is-under-cursor"); + }, + _handleSelection: function($e) { + var $suggestion = $($e.currentTarget); + this.trigger("suggestionSelected", extractSuggestion($suggestion)); + }, + _show: function() { + this.$menu.css("display", "block"); + }, + _hide: function() { + this.$menu.hide(); + }, + _moveCursor: function(increment) { + var $suggestions, $cur, nextIndex, $underCursor; + if (!this.isVisible()) { + return; + } + $suggestions = this._getSuggestions(); + $cur = $suggestions.filter(".tt-is-under-cursor"); + $cur.removeClass("tt-is-under-cursor"); + nextIndex = $suggestions.index($cur) + increment; + nextIndex = (nextIndex + 1) % ($suggestions.length + 1) - 1; + if (nextIndex === -1) { + this.trigger("cursorRemoved"); + return; + } else if (nextIndex < -1) { + nextIndex = $suggestions.length - 1; + } + $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); + this.trigger("cursorMoved", extractSuggestion($underCursor)); + }, + _getSuggestions: function() { + return this.$menu.find(".tt-suggestions > .tt-suggestion"); + }, + destroy: function() { + this.$menu.off(".tt"); + this.$menu = null; + }, + isVisible: function() { + return this.isOpen && !this.isEmpty; + }, + closeUnlessMouseIsOverDropdown: function() { + if (!this.isMouseOverDropdown) { + this.close(); + } + }, + close: function() { + if (this.isOpen) { + this.isOpen = false; + this._hide(); + this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); + this.trigger("closed"); + } + }, + open: function() { + if (!this.isOpen) { + this.isOpen = true; + !this.isEmpty && this._show(); + this.trigger("opened"); + } + }, + setLanguageDirection: function(dir) { + var ltrCss = { + left: "0", + right: "auto" + }, rtlCss = { + left: "auto", + right: " 0" + }; + dir === "ltr" ? this.$menu.css(ltrCss) : this.$menu.css(rtlCss); + }, + moveCursorUp: function() { + this._moveCursor(-1); + }, + moveCursorDown: function() { + this._moveCursor(+1); + }, + getSuggestionUnderCursor: function() { + var $suggestion = this._getSuggestions().filter(".tt-is-under-cursor").first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + getFirstSuggestion: function() { + var $suggestion = this._getSuggestions().first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + renderSuggestions: function(dataset, suggestions) { + var datasetClassName = "tt-dataset-" + dataset.name, wrapper = '
                                                %body
                                                ', compiledHtml, $suggestionsList, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, $el; + if ($dataset.length === 0) { + $suggestionsList = $(html.suggestionsList).css(css.suggestionsList); + $dataset = $("
                                                ").addClass(datasetClassName).append(dataset.header).append($suggestionsList).append(dataset.footer).appendTo(this.$menu); + } + if (suggestions.length > 0) { + this.isEmpty = false; + this.isOpen && this._show(); + elBuilder = document.createElement("div"); + fragment = document.createDocumentFragment(); + utils.each(suggestions, function(i, suggestion) { + compiledHtml = dataset.template(suggestion.datum); + elBuilder.innerHTML = wrapper.replace("%body", compiledHtml); + $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); + $el.children().each(function() { + $(this).css(css.suggestionChild); + }); + fragment.appendChild($el[0]); + }); + $dataset.show().find(".tt-suggestions").html(fragment); + } else { + this.clearSuggestions(dataset.name); + } + this.trigger("suggestionsRendered"); + }, + clearSuggestions: function(datasetName) { + var $datasets = datasetName ? this.$menu.find(".tt-dataset-" + datasetName) : this.$menu.find('[class^="tt-dataset-"]'), $suggestions = $datasets.find(".tt-suggestions"); + $datasets.hide(); + $suggestions.empty(); + if (this._getSuggestions().length === 0) { + this.isEmpty = true; + this._hide(); + } + } + }); + return DropdownView; + function extractSuggestion($el) { + return $el.data("suggestion"); + } + }(); + var TypeaheadView = function() { + var html = { + wrapper: '', + hint: '', + dropdown: '' + }, css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none" + }, + query: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + dropdown: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + } + }; + if (utils.isMsie()) { + utils.mixin(css.query, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + if (utils.isMsie() && utils.isMsie() <= 7) { + utils.mixin(css.wrapper, { + display: "inline", + zoom: "1" + }); + utils.mixin(css.query, { + marginTop: "-1px" + }); + } + function TypeaheadView(o) { + var $menu, $input, $hint; + utils.bindAll(this); + this.$node = buildDomStructure(o.input); + this.datasets = o.datasets; + this.dir = null; + this.eventBus = o.eventBus; + $menu = this.$node.find(".tt-dropdown-menu"); + $input = this.$node.find(".tt-query"); + $hint = this.$node.find(".tt-hint"); + this.dropdownView = new DropdownView({ + menu: $menu + }).on("suggestionSelected", this._handleSelection).on("cursorMoved", this._clearHint).on("cursorMoved", this._setInputValueToSuggestionUnderCursor).on("cursorRemoved", this._setInputValueToQuery).on("cursorRemoved", this._updateHint).on("suggestionsRendered", this._updateHint).on("opened", this._updateHint).on("closed", this._clearHint).on("opened closed", this._propagateEvent); + this.inputView = new InputView({ + input: $input, + hint: $hint + }).on("focused", this._openDropdown).on("blured", this._closeDropdown).on("blured", this._setInputValueToQuery).on("enterKeyed", this._handleSelection).on("queryChanged", this._clearHint).on("queryChanged", this._clearSuggestions).on("queryChanged", this._getSuggestions).on("whitespaceChanged", this._updateHint).on("queryChanged whitespaceChanged", this._openDropdown).on("queryChanged whitespaceChanged", this._setLanguageDirection).on("escKeyed", this._closeDropdown).on("escKeyed", this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed", this._managePreventDefault).on("upKeyed downKeyed", this._moveDropdownCursor).on("upKeyed downKeyed", this._openDropdown).on("tabKeyed leftKeyed rightKeyed", this._autocomplete); + } + utils.mixin(TypeaheadView.prototype, EventTarget, { + _managePreventDefault: function(e) { + var $e = e.data, hint, inputValue, preventDefault = false; + switch (e.type) { + case "tabKeyed": + hint = this.inputView.getHintValue(); + inputValue = this.inputView.getInputValue(); + preventDefault = hint && hint !== inputValue; + break; + + case "upKeyed": + case "downKeyed": + preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; + break; + } + preventDefault && $e.preventDefault(); + }, + _setLanguageDirection: function() { + var dir = this.inputView.getLanguageDirection(); + if (dir !== this.dir) { + this.dir = dir; + this.$node.css("direction", dir); + this.dropdownView.setLanguageDirection(dir); + } + }, + _updateHint: function() { + var suggestion = this.dropdownView.getFirstSuggestion(), hint = suggestion ? suggestion.value : null, dropdownIsVisible = this.dropdownView.isVisible(), inputHasOverflow = this.inputView.isOverflow(), inputValue, query, escapedQuery, beginsWithQuery, match; + if (hint && dropdownIsVisible && !inputHasOverflow) { + inputValue = this.inputView.getInputValue(); + query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); + escapedQuery = utils.escapeRegExChars(query); + beginsWithQuery = new RegExp("^(?:" + escapedQuery + ")(.*$)", "i"); + match = beginsWithQuery.exec(hint); + this.inputView.setHintValue(inputValue + (match ? match[1] : "")); + } + }, + _clearHint: function() { + this.inputView.setHintValue(""); + }, + _clearSuggestions: function() { + this.dropdownView.clearSuggestions(); + }, + _setInputValueToQuery: function() { + this.inputView.setInputValue(this.inputView.getQuery()); + }, + _setInputValueToSuggestionUnderCursor: function(e) { + var suggestion = e.data; + this.inputView.setInputValue(suggestion.value, true); + }, + _openDropdown: function() { + this.dropdownView.open(); + }, + _closeDropdown: function(e) { + this.dropdownView[e.type === "blured" ? "closeUnlessMouseIsOverDropdown" : "close"](); + }, + _moveDropdownCursor: function(e) { + var $e = e.data; + if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { + this.dropdownView[e.type === "upKeyed" ? "moveCursorUp" : "moveCursorDown"](); + } + }, + _handleSelection: function(e) { + var byClick = e.type === "suggestionSelected", suggestion = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); + if (suggestion) { + this.inputView.setInputValue(suggestion.value); + byClick ? this.inputView.focus() : e.data.preventDefault(); + byClick && utils.isMsie() ? utils.defer(this.dropdownView.close) : this.dropdownView.close(); + this.eventBus.trigger("selected", suggestion.datum); + } + }, + _getSuggestions: function() { + var that = this, query = this.inputView.getQuery(); + if (utils.isBlankString(query)) { + return; + } + utils.each(this.datasets, function(i, dataset) { + dataset.getSuggestions(query, function(suggestions) { + if (query === that.inputView.getQuery()) { + that.dropdownView.renderSuggestions(dataset, suggestions); + } + }); + }); + }, + _autocomplete: function(e) { + var isCursorAtEnd, ignoreEvent, query, hint, suggestion; + if (e.type === "rightKeyed" || e.type === "leftKeyed") { + isCursorAtEnd = this.inputView.isCursorAtEnd(); + ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "leftKeyed" : e.type === "rightKeyed"; + if (!isCursorAtEnd || ignoreEvent) { + return; + } + } + query = this.inputView.getQuery(); + hint = this.inputView.getHintValue(); + if (hint !== "" && query !== hint) { + suggestion = this.dropdownView.getFirstSuggestion(); + this.inputView.setInputValue(suggestion.value); + this.eventBus.trigger("autocompleted", suggestion.datum); + } + }, + _propagateEvent: function(e) { + this.eventBus.trigger(e.type); + }, + destroy: function() { + this.inputView.destroy(); + this.dropdownView.destroy(); + destroyDomStructure(this.$node); + this.$node = null; + }, + setQuery: function(query) { + this.inputView.setQuery(query); + this.inputView.setInputValue(query); + this._clearHint(); + this._clearSuggestions(); + this._getSuggestions(); + } + }); + return TypeaheadView; + function buildDomStructure(input) { + var $wrapper = $(html.wrapper), $dropdown = $(html.dropdown), $input = $(input), $hint = $(html.hint); + $wrapper = $wrapper.css(css.wrapper); + $dropdown = $dropdown.css(css.dropdown); + $hint.css(css.hint).css({ + backgroundAttachment: $input.css("background-attachment"), + backgroundClip: $input.css("background-clip"), + backgroundColor: $input.css("background-color"), + backgroundImage: $input.css("background-image"), + backgroundOrigin: $input.css("background-origin"), + backgroundPosition: $input.css("background-position"), + backgroundRepeat: $input.css("background-repeat"), + backgroundSize: $input.css("background-size") + }); + $input.data("ttAttrs", { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass("tt-query").attr({ + autocomplete: "off", + spellcheck: false + }).css(css.query); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input.wrap($wrapper).parent().prepend($hint).append($dropdown); + } + function destroyDomStructure($node) { + var $input = $node.find(".tt-query"); + utils.each($input.data("ttAttrs"), function(key, val) { + utils.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter($node); + $node.remove(); + } + }(); + (function() { + var cache = {}, viewKey = "ttView", methods; + methods = { + initialize: function(datasetDefs) { + var datasets; + datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; + if (datasetDefs.length === 0) { + $.error("no datasets provided"); + } + datasets = utils.map(datasetDefs, function(o) { + var dataset = cache[o.name] ? cache[o.name] : new Dataset(o); + if (o.name) { + cache[o.name] = dataset; + } + return dataset; + }); + return this.each(initialize); + function initialize() { + var $input = $(this), deferreds, eventBus = new EventBus({ + el: $input + }); + deferreds = utils.map(datasets, function(dataset) { + return dataset.initialize(); + }); + $input.data(viewKey, new TypeaheadView({ + input: $input, + eventBus: eventBus = new EventBus({ + el: $input + }), + datasets: datasets + })); + $.when.apply($, deferreds).always(function() { + utils.defer(function() { + eventBus.trigger("initialized"); + }); + }); + } + }, + destroy: function() { + return this.each(destroy); + function destroy() { + var $this = $(this), view = $this.data(viewKey); + if (view) { + view.destroy(); + $this.removeData(viewKey); + } + } + }, + setQuery: function(query) { + return this.each(setQuery); + function setQuery() { + var view = $(this).data(viewKey); + view && view.setQuery(query); + } + } + }; + jQuery.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + })(); +})(window.jQuery); \ No newline at end of file diff --git a/releases/0.9.2/typeahead.js.zip b/releases/0.9.2/typeahead.js.zip new file mode 100644 index 0000000000000000000000000000000000000000..8397c7c9d2d6c9fead0d2b8b5c710a3eadd459e8 GIT binary patch literal 17267 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[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,u=this,a=arguments;return r=function(){n=null,i||(s=t.apply(u,a))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var i,n,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var a=new Date,c=e-(a-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(i,n)):s||(s=setTimeout(u,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o;try{r=window.localStorage}catch(u){r=null}return o=r&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(r.getItem(this._prefix(t)))},set:function(t,s,o){return i.isNumber(o)?r.setItem(this._ttlKey(t),n(e()+o)):r.removeItem(this._ttlKey(t)),r.setItem(this._prefix(t),n(s))},remove:function(t){return r.removeItem(this._ttlKey(t)),r.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=r.length;for(t=0;n>t;t++)(e=r.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(r.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,o),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),u=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,a=a||new o,u=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:u||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this._get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this._get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return u>c}var u,a,c=0,h={};return i.mixin(e.prototype,{_get:function(t,e){function i(i){var s=n.filter?n.filter(i):i;e&&e(s),a.set(t,i)}var n=this;r()?this._sendRequest(t).done(i):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(e){function i(){s(),h[e]=null,r.onDeckRequestArgs&&(r._get.apply(r,r.onDeckRequestArgs),r.onDeckRequestArgs=null)}var r=this,o=h[e];return o||(n(),o=h[e]=t.ajax(e,this.ajaxSettings).always(i)),o},get:function(t,e){var n,s,r=this,o=encodeURIComponent(t||"");return e=e||i.noop,n=this.replace?this.replace(this.url,o):this.url.replace(this.wildcard,o),(s=a.get(n))?i.defer(function(){e(r.filter?r.filter(s):s)}):this._get(n,e),!!s}}),e}(),a=function(){function n(e){i.bindAll(this),i.isString(e.template)&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is required"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.minLength=e.minLength||1,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,n){var s,r;return i.isFunction(t)?s=t:i.isString(t)?(r=e.compile(t),s=i.bind(r.render,r)):s=function(t){return"

                                                "+t[n]+"

                                                "},s}var o={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var e=n.filter?n.filter(t):t,s=d._processData(e),r=s.itemHash,u=s.adjacencyList;d.storage&&(d.storage.set(o.itemHash,r,n.ttl),d.storage.set(o.adjacencyList,u,n.ttl),d.storage.set(o.thumbprint,p,n.ttl),d.storage.set(o.protocol,i.getProtocol(),n.ttl)),d._mergeProcessedData(s)}var r,u,a,c,h,l,d=this,p=e+(n.thumbprint||"");return this.storage&&(r=this.storage.get(o.thumbprint),u=this.storage.get(o.protocol),a=this.storage.get(o.itemHash),c=this.storage.get(o.adjacencyList)),h=r!==p||u!==i.getProtocol(),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,a&&c&&!h?(this._mergeProcessedData({itemHash:a,adjacencyList:c}),l=t.Deferred().resolve()):l=t.getJSON(n.url).done(s),l},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),u=i.getUniqueId(o.value);n[u]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[u]);!~i.indexOf(r,u)&&r.push(u)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),!e&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,u,a,c,h,l="tt-dataset-"+e.name,d='
                                                %body
                                                ',p=this.$menu.find("."+l);0===p.length&&(u=t(r.suggestionsList).css(o.suggestionsList),p=t("
                                                ").addClass(l).append(e.header).append(u).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),a=document.createElement("div"),c=document.createDocumentFragment(),i.each(n,function(i,n){s=e.template(n.datum),a.innerHTML=d.replace("%body",s),h=t(a.firstChild).css(o.suggestion).data("suggestion",n),h.children().each(function(){t(this).css(o.suggestionChild)}),c.appendChild(h[0])}),p.show().find(".tt-suggestions").html(c)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(u.wrapper),n=n.css(u.dropdown),r.css(u.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(u.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(a){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},u={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(u.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(u.wrapper,{display:"inline",zoom:"1"}),i.mixin(u.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null,a=this.dropdownView.isVisible(),c=this.inputView.isOverflow();u&&a&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.datum)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null},setQuery:function(t){this.inputView.setQuery(t),this.inputView.setInputValue(t),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(u,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:u})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var u;return e=i.isArray(e)?e:[e],0===e.length&&t.error("no datasets provided"),u=i.map(e,function(t){var e=n[t.name]?n[t.name]:new a(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){function e(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))}return this.each(e)},setQuery:function(e){function i(){var i=t(this).data(r);i&&i.setQuery(e)}return this.each(i)}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file diff --git a/releases/latest/typeahead.js b/releases/latest/typeahead.js index 6ff5f71544..70244deee0 100644 --- a/releases/latest/typeahead.js +++ b/releases/latest/typeahead.js @@ -1,11 +1,11 @@ /*! - * typeahead.js 0.9.1 + * typeahead.js 0.9.2 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ (function($) { - var VERSION = "0.9.1"; + var VERSION = "0.9.2"; var utils = { isMsie: function() { var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); @@ -187,13 +187,18 @@ return EventBus; }(); var PersistentStorage = function() { - var ls = window.localStorage, methods; + var ls, methods; + try { + ls = window.localStorage; + } catch (err) { + ls = null; + } function PersistentStorage(namespace) { this.prefix = [ "__", namespace, "__" ].join(""); this.ttlKey = "__ttl__"; this.keyMatcher = new RegExp("^" + this.prefix); } - if (window.localStorage && window.JSON) { + if (ls && window.JSON) { methods = { _prefix: function(key) { return this.prefix + key; @@ -539,16 +544,15 @@ }); return Dataset; function compileTemplate(template, engine, valueKey) { - var wrapper = '
                                                %body
                                                ', renderFn, wrappedTemplate, compiledTemplate; + var renderFn, compiledTemplate; if (utils.isFunction(template)) { renderFn = template; } else if (utils.isString(template)) { - wrappedTemplate = wrapper.replace("%body", template); - compiledTemplate = engine.compile(wrappedTemplate); + compiledTemplate = engine.compile(template); renderFn = utils.bind(compiledTemplate.render, compiledTemplate); } else { renderFn = function(context) { - return wrapper.replace("%body", "

                                                " + context[valueKey] + "

                                                "); + return "

                                                " + context[valueKey] + "

                                                "; }; } return renderFn; @@ -797,7 +801,7 @@ return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; }, renderSuggestions: function(dataset, suggestions) { - var datasetClassName = "tt-dataset-" + dataset.name, $suggestionsList, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, $el; + var datasetClassName = "tt-dataset-" + dataset.name, wrapper = '
                                                %body
                                                ', compiledHtml, $suggestionsList, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, $el; if ($dataset.length === 0) { $suggestionsList = $(html.suggestionsList).css(css.suggestionsList); $dataset = $("
                                                ").addClass(datasetClassName).append(dataset.header).append($suggestionsList).append(dataset.footer).appendTo(this.$menu); @@ -808,7 +812,8 @@ elBuilder = document.createElement("div"); fragment = document.createDocumentFragment(); utils.each(suggestions, function(i, suggestion) { - elBuilder.innerHTML = dataset.template(suggestion.datum); + compiledHtml = dataset.template(suggestion.datum); + elBuilder.innerHTML = wrapper.replace("%body", compiledHtml); $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); $el.children().each(function() { $(this).css(css.suggestionChild); diff --git a/releases/latest/typeahead.js.zip b/releases/latest/typeahead.js.zip index 7762b06681a89e40c81e369f639861e7df53c562..8397c7c9d2d6c9fead0d2b8b5c710a3eadd459e8 100644 GIT binary patch literal 17267 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[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,u=this,a=arguments;return r=function(){n=null,i||(s=t.apply(u,a))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var i,n,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var a=new Date,c=e-(a-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(i,n)):s||(s=setTimeout(u,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(o.getItem(this._prefix(t)))},set:function(t,s,r){return i.isNumber(r)?o.setItem(this._ttlKey(t),n(e()+r)):o.removeItem(this._ttlKey(t)),o.setItem(this._prefix(t),n(s))},remove:function(t){return o.removeItem(this._ttlKey(t)),o.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=o.length;for(t=0;n>t;t++)(e=o.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(o.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,r),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),u=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,a=a||new o,u=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:u||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this._get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this._get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return u>c}var u,a,c=0,h={};return i.mixin(e.prototype,{_get:function(t,e){function i(i){var s=n.filter?n.filter(i):i;e&&e(s),a.set(t,i)}var n=this;r()?this._sendRequest(t).done(i):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(e){function i(){s(),h[e]=null,r.onDeckRequestArgs&&(r._get.apply(r,r.onDeckRequestArgs),r.onDeckRequestArgs=null)}var r=this,o=h[e];return o||(n(),o=h[e]=t.ajax(e,this.ajaxSettings).always(i)),o},get:function(t,e){var n,s,r=this,o=encodeURIComponent(t||"");return e=e||i.noop,n=this.replace?this.replace(this.url,o):this.url.replace(this.wildcard,o),(s=a.get(n))?i.defer(function(){e(r.filter?r.filter(s):s)}):this._get(n,e),!!s}}),e}(),a=function(){function n(e){i.bindAll(this),i.isString(e.template)&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is required"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.minLength=e.minLength||1,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,n){var s,r,o,u='
                                                %body
                                                ';return i.isFunction(t)?s=t:i.isString(t)?(r=u.replace("%body",t),o=e.compile(r),s=i.bind(o.render,o)):s=function(t){return u.replace("%body","

                                                "+t[n]+"

                                                ")},s}var o={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var e=n.filter?n.filter(t):t,s=d._processData(e),r=s.itemHash,u=s.adjacencyList;d.storage&&(d.storage.set(o.itemHash,r,n.ttl),d.storage.set(o.adjacencyList,u,n.ttl),d.storage.set(o.thumbprint,p,n.ttl),d.storage.set(o.protocol,i.getProtocol(),n.ttl)),d._mergeProcessedData(s)}var r,u,a,c,h,l,d=this,p=e+(n.thumbprint||"");return this.storage&&(r=this.storage.get(o.thumbprint),u=this.storage.get(o.protocol),a=this.storage.get(o.itemHash),c=this.storage.get(o.adjacencyList)),h=r!==p||u!==i.getProtocol(),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,a&&c&&!h?(this._mergeProcessedData({itemHash:a,adjacencyList:c}),l=t.Deferred().resolve()):l=t.getJSON(n.url).done(s),l},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),u=i.getUniqueId(o.value);n[u]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[u]);!~i.indexOf(r,u)&&r.push(u)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),!e&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,u,a,c,h="tt-dataset-"+e.name,l=this.$menu.find("."+h);0===l.length&&(s=t(r.suggestionsList).css(o.suggestionsList),l=t("
                                                ").addClass(h).append(e.header).append(s).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),u=document.createElement("div"),a=document.createDocumentFragment(),i.each(n,function(i,n){u.innerHTML=e.template(n.datum),c=t(u.firstChild).css(o.suggestion).data("suggestion",n),c.children().each(function(){t(this).css(o.suggestionChild)}),a.appendChild(c[0])}),l.show().find(".tt-suggestions").html(a)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(u.wrapper),n=n.css(u.dropdown),r.css(u.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(u.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(a){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},u={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(u.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(u.wrapper,{display:"inline",zoom:"1"}),i.mixin(u.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null,a=this.dropdownView.isVisible(),c=this.inputView.isOverflow();u&&a&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.datum)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null},setQuery:function(t){this.inputView.setQuery(t),this.inputView.setInputValue(t),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(u,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:u})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var u;return e=i.isArray(e)?e:[e],0===e.length&&t.error("no datasets provided"),u=i.map(e,function(t){var e=n[t.name]?n[t.name]:new a(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){function e(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))}return this.each(e)},setQuery:function(e){function i(){var i=t(this).data(r);i&&i.setQuery(e)}return this.each(i)}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file +(function(t){var e="0.9.2",i={isMsie:function(){var t=/(msie) ([\w.]+)/i.exec(navigator.userAgent);return t?parseInt(t[2],10):!1},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return t===void 0},bind:t.proxy,bindAll:function(e){var i;for(var n in e)t.isFunction(i=e[n])&&(e[n]=t.proxy(i,e))},indexOf:function(t,e){for(var i=0;t.length>i;i++)if(t[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,u=this,a=arguments;return r=function(){n=null,i||(s=t.apply(u,a))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var i,n,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var a=new Date,c=e-(a-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(i,n)):s||(s=setTimeout(u,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o;try{r=window.localStorage}catch(u){r=null}return o=r&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(r.getItem(this._prefix(t)))},set:function(t,s,o){return i.isNumber(o)?r.setItem(this._ttlKey(t),n(e()+o)):r.removeItem(this._ttlKey(t)),r.setItem(this._prefix(t),n(s))},remove:function(t){return r.removeItem(this._ttlKey(t)),r.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=r.length;for(t=0;n>t;t++)(e=r.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(r.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,o),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),u=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,a=a||new o,u=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:u||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this._get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this._get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return u>c}var u,a,c=0,h={};return i.mixin(e.prototype,{_get:function(t,e){function i(i){var s=n.filter?n.filter(i):i;e&&e(s),a.set(t,i)}var n=this;r()?this._sendRequest(t).done(i):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(e){function i(){s(),h[e]=null,r.onDeckRequestArgs&&(r._get.apply(r,r.onDeckRequestArgs),r.onDeckRequestArgs=null)}var r=this,o=h[e];return o||(n(),o=h[e]=t.ajax(e,this.ajaxSettings).always(i)),o},get:function(t,e){var n,s,r=this,o=encodeURIComponent(t||"");return e=e||i.noop,n=this.replace?this.replace(this.url,o):this.url.replace(this.wildcard,o),(s=a.get(n))?i.defer(function(){e(r.filter?r.filter(s):s)}):this._get(n,e),!!s}}),e}(),a=function(){function n(e){i.bindAll(this),i.isString(e.template)&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is required"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.minLength=e.minLength||1,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,n){var s,r;return i.isFunction(t)?s=t:i.isString(t)?(r=e.compile(t),s=i.bind(r.render,r)):s=function(t){return"

                                                "+t[n]+"

                                                "},s}var o={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var e=n.filter?n.filter(t):t,s=d._processData(e),r=s.itemHash,u=s.adjacencyList;d.storage&&(d.storage.set(o.itemHash,r,n.ttl),d.storage.set(o.adjacencyList,u,n.ttl),d.storage.set(o.thumbprint,p,n.ttl),d.storage.set(o.protocol,i.getProtocol(),n.ttl)),d._mergeProcessedData(s)}var r,u,a,c,h,l,d=this,p=e+(n.thumbprint||"");return this.storage&&(r=this.storage.get(o.thumbprint),u=this.storage.get(o.protocol),a=this.storage.get(o.itemHash),c=this.storage.get(o.adjacencyList)),h=r!==p||u!==i.getProtocol(),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,a&&c&&!h?(this._mergeProcessedData({itemHash:a,adjacencyList:c}),l=t.Deferred().resolve()):l=t.getJSON(n.url).done(s),l},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),u=i.getUniqueId(o.value);n[u]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[u]);!~i.indexOf(r,u)&&r.push(u)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),!e&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,u,a,c,h,l="tt-dataset-"+e.name,d='
                                                %body
                                                ',p=this.$menu.find("."+l);0===p.length&&(u=t(r.suggestionsList).css(o.suggestionsList),p=t("
                                                ").addClass(l).append(e.header).append(u).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),a=document.createElement("div"),c=document.createDocumentFragment(),i.each(n,function(i,n){s=e.template(n.datum),a.innerHTML=d.replace("%body",s),h=t(a.firstChild).css(o.suggestion).data("suggestion",n),h.children().each(function(){t(this).css(o.suggestionChild)}),c.appendChild(h[0])}),p.show().find(".tt-suggestions").html(c)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(u.wrapper),n=n.css(u.dropdown),r.css(u.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(u.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(a){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},u={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(u.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(u.wrapper,{display:"inline",zoom:"1"}),i.mixin(u.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null,a=this.dropdownView.isVisible(),c=this.inputView.isOverflow();u&&a&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.datum)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null},setQuery:function(t){this.inputView.setQuery(t),this.inputView.setInputValue(t),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(u,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:u})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var u;return e=i.isArray(e)?e:[e],0===e.length&&t.error("no datasets provided"),u=i.map(e,function(t){var e=n[t.name]?n[t.name]:new a(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){function e(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))}return this.each(e)},setQuery:function(e){function i(){var i=t(this).data(r);i&&i.setQuery(e)}return this.each(i)}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file From c74c18da8bce272488d736c609133ee1182c99e2 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Tue, 25 Jun 2013 17:05:26 -0700 Subject: [PATCH 20/44] Add assets for 0.9.3. --- index.html | 2 +- releases/0.9.3/typeahead.js | 1139 ++++++++++++++++++++++++++++++ releases/0.9.3/typeahead.js.zip | Bin 0 -> 17667 bytes releases/0.9.3/typeahead.min.js | 7 + releases/latest/typeahead.js | 23 +- releases/latest/typeahead.js.zip | Bin 17267 -> 17667 bytes releases/latest/typeahead.min.js | 4 +- 7 files changed, 1167 insertions(+), 8 deletions(-) create mode 100644 releases/0.9.3/typeahead.js create mode 100644 releases/0.9.3/typeahead.js.zip create mode 100644 releases/0.9.3/typeahead.min.js diff --git a/index.html b/index.html index d54408fd12..8399225c93 100644 --- a/index.html +++ b/index.html @@ -27,7 +27,7 @@

                                                typeahea
                                                - download v0.9.2 + download v0.9.3 project & docs on GitHub · changelog diff --git a/releases/0.9.3/typeahead.js b/releases/0.9.3/typeahead.js new file mode 100644 index 0000000000..9365bd62a1 --- /dev/null +++ b/releases/0.9.3/typeahead.js @@ -0,0 +1,1139 @@ +/*! + * typeahead.js 0.9.3 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function($) { + var VERSION = "0.9.3"; + var utils = { + isMsie: function() { + var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); + return match ? parseInt(match[2], 10) : 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"; + }, + bind: $.proxy, + bindAll: function(obj) { + var val; + for (var key in obj) { + $.isFunction(val = obj[key]) && (obj[key] = $.proxy(val, obj)); + } + }, + indexOf: function(haystack, needle) { + for (var i = 0; i < haystack.length; i++) { + if (haystack[i] === needle) { + return i; + } + } + return -1; + }, + each: $.each, + 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, + getUniqueId: function() { + var counter = 0; + return function() { + return counter++; + }; + }(), + 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; + }; + }, + tokenizeQuery: function(str) { + return $.trim(str).toLowerCase().split(/[\s]+/); + }, + tokenizeText: function(str) { + return $.trim(str).toLowerCase().split(/[\s\-_]+/); + }, + getProtocol: function() { + return location.protocol; + }, + noop: function() {} + }; + var EventTarget = function() { + var eventSplitter = /\s+/; + return { + on: function(events, callback) { + var event; + if (!callback) { + return this; + } + this._callbacks = this._callbacks || {}; + events = events.split(eventSplitter); + while (event = events.shift()) { + this._callbacks[event] = this._callbacks[event] || []; + this._callbacks[event].push(callback); + } + return this; + }, + trigger: function(events, data) { + var event, callbacks; + if (!this._callbacks) { + return this; + } + events = events.split(eventSplitter); + while (event = events.shift()) { + if (callbacks = this._callbacks[event]) { + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i].call(this, { + type: event, + data: data + }); + } + } + } + return this; + } + }; + }(); + var EventBus = function() { + var namespace = "typeahead:"; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + utils.mixin(EventBus.prototype, { + trigger: function(type) { + var args = [].slice.call(arguments, 1); + this.$el.trigger(namespace + type, args); + } + }); + return EventBus; + }(); + var PersistentStorage = function() { + var ls, methods; + try { + ls = window.localStorage; + ls.setItem("~~~", "!"); + ls.removeItem("~~~"); + } catch (err) { + ls = null; + } + function PersistentStorage(namespace) { + this.prefix = [ "__", namespace, "__" ].join(""); + this.ttlKey = "__ttl__"; + this.keyMatcher = new RegExp("^" + this.prefix); + } + if (ls && window.JSON) { + methods = { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, + get: function(key) { + if (this.isExpired(key)) { + this.remove(key); + } + return decode(ls.getItem(this._prefix(key))); + }, + set: function(key, val, ttl) { + if (utils.isNumber(ttl)) { + ls.setItem(this._ttlKey(key), encode(now() + ttl)); + } else { + ls.removeItem(this._ttlKey(key)); + } + return ls.setItem(this._prefix(key), encode(val)); + }, + remove: function(key) { + ls.removeItem(this._ttlKey(key)); + ls.removeItem(this._prefix(key)); + return this; + }, + clear: function() { + var i, key, keys = [], len = ls.length; + for (i = 0; i < len; i++) { + if ((key = ls.key(i)).match(this.keyMatcher)) { + keys.push(key.replace(this.keyMatcher, "")); + } + } + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } + return this; + }, + isExpired: function(key) { + var ttl = decode(ls.getItem(this._ttlKey(key))); + return utils.isNumber(ttl) && now() > ttl ? true : false; + } + }; + } else { + methods = { + get: utils.noop, + set: utils.noop, + remove: utils.noop, + clear: utils.noop, + isExpired: utils.noop + }; + } + utils.mixin(PersistentStorage.prototype, methods); + return PersistentStorage; + function now() { + return new Date().getTime(); + } + function encode(val) { + return JSON.stringify(utils.isUndefined(val) ? null : val); + } + function decode(val) { + return JSON.parse(val); + } + }(); + var RequestCache = function() { + function RequestCache(o) { + utils.bindAll(this); + o = o || {}; + this.sizeLimit = o.sizeLimit || 10; + this.cache = {}; + this.cachedKeysByAge = []; + } + utils.mixin(RequestCache.prototype, { + get: function(url) { + return this.cache[url]; + }, + set: function(url, resp) { + var requestToEvict; + if (this.cachedKeysByAge.length === this.sizeLimit) { + requestToEvict = this.cachedKeysByAge.shift(); + delete this.cache[requestToEvict]; + } + this.cache[url] = resp; + this.cachedKeysByAge.push(url); + } + }); + return RequestCache; + }(); + var Transport = function() { + var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests, requestCache; + function Transport(o) { + utils.bindAll(this); + o = utils.isString(o) ? { + url: o + } : o; + requestCache = requestCache || new RequestCache(); + maxPendingRequests = utils.isNumber(o.maxParallelRequests) ? o.maxParallelRequests : maxPendingRequests || 6; + this.url = o.url; + this.wildcard = o.wildcard || "%QUERY"; + this.filter = o.filter; + this.replace = o.replace; + this.ajaxSettings = { + type: "get", + cache: o.cache, + timeout: o.timeout, + dataType: o.dataType || "json", + beforeSend: o.beforeSend + }; + this._get = (/^throttle$/i.test(o.rateLimitFn) ? utils.throttle : utils.debounce)(this._get, o.rateLimitWait || 300); + } + utils.mixin(Transport.prototype, { + _get: function(url, cb) { + var that = this; + if (belowPendingRequestsThreshold()) { + this._sendRequest(url).done(done); + } else { + this.onDeckRequestArgs = [].slice.call(arguments, 0); + } + function done(resp) { + var data = that.filter ? that.filter(resp) : resp; + cb && cb(data); + requestCache.set(url, resp); + } + }, + _sendRequest: function(url) { + var that = this, jqXhr = pendingRequests[url]; + if (!jqXhr) { + incrementPendingRequests(); + jqXhr = pendingRequests[url] = $.ajax(url, this.ajaxSettings).always(always); + } + return jqXhr; + function always() { + decrementPendingRequests(); + pendingRequests[url] = null; + if (that.onDeckRequestArgs) { + that._get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } + }, + get: function(query, cb) { + var that = this, encodedQuery = encodeURIComponent(query || ""), url, resp; + cb = cb || utils.noop; + url = this.replace ? this.replace(this.url, encodedQuery) : this.url.replace(this.wildcard, encodedQuery); + if (resp = requestCache.get(url)) { + utils.defer(function() { + cb(that.filter ? that.filter(resp) : resp); + }); + } else { + this._get(url, cb); + } + return !!resp; + } + }); + return Transport; + function incrementPendingRequests() { + pendingRequestsCount++; + } + function decrementPendingRequests() { + pendingRequestsCount--; + } + function belowPendingRequestsThreshold() { + return pendingRequestsCount < maxPendingRequests; + } + }(); + var Dataset = function() { + var keys = { + thumbprint: "thumbprint", + protocol: "protocol", + itemHash: "itemHash", + adjacencyList: "adjacencyList" + }; + function Dataset(o) { + utils.bindAll(this); + if (utils.isString(o.template) && !o.engine) { + $.error("no template engine specified"); + } + if (!o.local && !o.prefetch && !o.remote) { + $.error("one of local, prefetch, or remote is required"); + } + this.name = o.name || utils.getUniqueId(); + this.limit = o.limit || 5; + this.minLength = o.minLength || 1; + this.header = o.header; + this.footer = o.footer; + this.valueKey = o.valueKey || "value"; + this.template = compileTemplate(o.template, o.engine, this.valueKey); + this.local = o.local; + this.prefetch = o.prefetch; + this.remote = o.remote; + this.itemHash = {}; + this.adjacencyList = {}; + this.storage = o.name ? new PersistentStorage(o.name) : null; + } + utils.mixin(Dataset.prototype, { + _processLocalData: function(data) { + this._mergeProcessedData(this._processData(data)); + }, + _loadPrefetchData: function(o) { + var that = this, thumbprint = VERSION + (o.thumbprint || ""), storedThumbprint, storedProtocol, storedItemHash, storedAdjacencyList, isExpired, deferred; + if (this.storage) { + storedThumbprint = this.storage.get(keys.thumbprint); + storedProtocol = this.storage.get(keys.protocol); + storedItemHash = this.storage.get(keys.itemHash); + storedAdjacencyList = this.storage.get(keys.adjacencyList); + } + isExpired = storedThumbprint !== thumbprint || storedProtocol !== utils.getProtocol(); + o = utils.isString(o) ? { + url: o + } : o; + o.ttl = utils.isNumber(o.ttl) ? o.ttl : 24 * 60 * 60 * 1e3; + if (storedItemHash && storedAdjacencyList && !isExpired) { + this._mergeProcessedData({ + itemHash: storedItemHash, + adjacencyList: storedAdjacencyList + }); + deferred = $.Deferred().resolve(); + } else { + deferred = $.getJSON(o.url).done(processPrefetchData); + } + return deferred; + function processPrefetchData(data) { + var filteredData = o.filter ? o.filter(data) : data, processedData = that._processData(filteredData), itemHash = processedData.itemHash, adjacencyList = processedData.adjacencyList; + if (that.storage) { + that.storage.set(keys.itemHash, itemHash, o.ttl); + that.storage.set(keys.adjacencyList, adjacencyList, o.ttl); + that.storage.set(keys.thumbprint, thumbprint, o.ttl); + that.storage.set(keys.protocol, utils.getProtocol(), o.ttl); + } + that._mergeProcessedData(processedData); + } + }, + _transformDatum: function(datum) { + var value = utils.isString(datum) ? datum : datum[this.valueKey], tokens = datum.tokens || utils.tokenizeText(value), item = { + value: value, + tokens: tokens + }; + if (utils.isString(datum)) { + item.datum = {}; + item.datum[this.valueKey] = datum; + } else { + item.datum = datum; + } + item.tokens = utils.filter(item.tokens, function(token) { + return !utils.isBlankString(token); + }); + item.tokens = utils.map(item.tokens, function(token) { + return token.toLowerCase(); + }); + return item; + }, + _processData: function(data) { + var that = this, itemHash = {}, adjacencyList = {}; + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), id = utils.getUniqueId(item.value); + itemHash[id] = item; + utils.each(item.tokens, function(i, token) { + var character = token.charAt(0), adjacency = adjacencyList[character] || (adjacencyList[character] = [ id ]); + !~utils.indexOf(adjacency, id) && adjacency.push(id); + }); + }); + return { + itemHash: itemHash, + adjacencyList: adjacencyList + }; + }, + _mergeProcessedData: function(processedData) { + var that = this; + utils.mixin(this.itemHash, processedData.itemHash); + utils.each(processedData.adjacencyList, function(character, adjacency) { + var masterAdjacency = that.adjacencyList[character]; + that.adjacencyList[character] = masterAdjacency ? masterAdjacency.concat(adjacency) : adjacency; + }); + }, + _getLocalSuggestions: function(terms) { + var that = this, firstChars = [], lists = [], shortestList, suggestions = []; + utils.each(terms, function(i, term) { + var firstChar = term.charAt(0); + !~utils.indexOf(firstChars, firstChar) && firstChars.push(firstChar); + }); + utils.each(firstChars, function(i, firstChar) { + var list = that.adjacencyList[firstChar]; + if (!list) { + return false; + } + lists.push(list); + if (!shortestList || list.length < shortestList.length) { + shortestList = list; + } + }); + if (lists.length < firstChars.length) { + return []; + } + utils.each(shortestList, function(i, id) { + var item = that.itemHash[id], isCandidate, isMatch; + isCandidate = utils.every(lists, function(list) { + return ~utils.indexOf(list, id); + }); + isMatch = isCandidate && utils.every(terms, function(term) { + return utils.some(item.tokens, function(token) { + return token.indexOf(term) === 0; + }); + }); + isMatch && suggestions.push(item); + }); + return suggestions; + }, + initialize: function() { + var deferred; + this.local && this._processLocalData(this.local); + this.transport = this.remote ? new Transport(this.remote) : null; + deferred = this.prefetch ? this._loadPrefetchData(this.prefetch) : $.Deferred().resolve(); + this.local = this.prefetch = this.remote = null; + this.initialize = function() { + return deferred; + }; + return deferred; + }, + getSuggestions: function(query, cb) { + var that = this, terms, suggestions, cacheHit = false; + if (query.length < this.minLength) { + return; + } + terms = utils.tokenizeQuery(query); + suggestions = this._getLocalSuggestions(terms).slice(0, this.limit); + if (suggestions.length < this.limit && this.transport) { + cacheHit = this.transport.get(query, processRemoteData); + } + !cacheHit && cb && cb(suggestions); + function processRemoteData(data) { + suggestions = suggestions.slice(0); + utils.each(data, function(i, datum) { + var item = that._transformDatum(datum), isDuplicate; + isDuplicate = utils.some(suggestions, function(suggestion) { + return item.value === suggestion.value; + }); + !isDuplicate && suggestions.push(item); + return suggestions.length < that.limit; + }); + cb && cb(suggestions); + } + } + }); + return Dataset; + function compileTemplate(template, engine, valueKey) { + var renderFn, compiledTemplate; + if (utils.isFunction(template)) { + renderFn = template; + } else if (utils.isString(template)) { + compiledTemplate = engine.compile(template); + renderFn = utils.bind(compiledTemplate.render, compiledTemplate); + } else { + renderFn = function(context) { + return "

                                                " + context[valueKey] + "

                                                "; + }; + } + return renderFn; + } + }(); + var InputView = function() { + function InputView(o) { + var that = this; + utils.bindAll(this); + this.specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + this.$hint = $(o.hint); + this.$input = $(o.input).on("blur.tt", this._handleBlur).on("focus.tt", this._handleFocus).on("keydown.tt", this._handleSpecialKeyEvent); + if (!utils.isMsie()) { + this.$input.on("input.tt", this._compareQueryToInputValue); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (that.specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + utils.defer(that._compareQueryToInputValue); + }); + } + this.query = this.$input.val(); + this.$overflowHelper = buildOverflowHelper(this.$input); + } + utils.mixin(InputView.prototype, EventTarget, { + _handleFocus: function() { + this.trigger("focused"); + }, + _handleBlur: function() { + this.trigger("blured"); + }, + _handleSpecialKeyEvent: function($e) { + var keyName = this.specialKeyCodeMap[$e.which || $e.keyCode]; + keyName && this.trigger(keyName + "Keyed", $e); + }, + _compareQueryToInputValue: function() { + var inputValue = this.getInputValue(), isSameQuery = compareQueries(this.query, inputValue), isSameQueryExceptWhitespace = isSameQuery ? this.query.length !== inputValue.length : false; + if (isSameQueryExceptWhitespace) { + this.trigger("whitespaceChanged", { + value: this.query + }); + } else if (!isSameQuery) { + this.trigger("queryChanged", { + value: this.query = inputValue + }); + } + }, + destroy: function() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$hint = this.$input = this.$overflowHelper = null; + }, + focus: function() { + this.$input.focus(); + }, + blur: function() { + this.$input.blur(); + }, + getQuery: function() { + return this.query; + }, + setQuery: function(query) { + this.query = query; + }, + getInputValue: function() { + return this.$input.val(); + }, + setInputValue: function(value, silent) { + this.$input.val(value); + !silent && this._compareQueryToInputValue(); + }, + getHintValue: function() { + return this.$hint.val(); + }, + setHintValue: function(value) { + this.$hint.val(value); + }, + getLanguageDirection: function() { + return (this.$input.css("direction") || "ltr").toLowerCase(); + }, + isOverflow: function() { + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() > this.$input.width(); + }, + isCursorAtEnd: function() { + var valueLength = this.$input.val().length, selectionStart = this.$input[0].selectionStart, range; + if (utils.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + } + }); + return InputView; + function buildOverflowHelper($input) { + return $("").css({ + position: "absolute", + left: "-9999px", + visibility: "hidden", + whiteSpace: "nowrap", + 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 compareQueries(a, b) { + a = (a || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + b = (b || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + return a === b; + } + }(); + var DropdownView = function() { + var html = { + suggestionsList: '' + }, css = { + suggestionsList: { + display: "block" + }, + suggestion: { + whiteSpace: "nowrap", + cursor: "pointer" + }, + suggestionChild: { + whiteSpace: "normal" + } + }; + function DropdownView(o) { + utils.bindAll(this); + this.isOpen = false; + this.isEmpty = true; + this.isMouseOverDropdown = false; + this.$menu = $(o.menu).on("mouseenter.tt", this._handleMouseenter).on("mouseleave.tt", this._handleMouseleave).on("click.tt", ".tt-suggestion", this._handleSelection).on("mouseover.tt", ".tt-suggestion", this._handleMouseover); + } + utils.mixin(DropdownView.prototype, EventTarget, { + _handleMouseenter: function() { + this.isMouseOverDropdown = true; + }, + _handleMouseleave: function() { + this.isMouseOverDropdown = false; + }, + _handleMouseover: function($e) { + var $suggestion = $($e.currentTarget); + this._getSuggestions().removeClass("tt-is-under-cursor"); + $suggestion.addClass("tt-is-under-cursor"); + }, + _handleSelection: function($e) { + var $suggestion = $($e.currentTarget); + this.trigger("suggestionSelected", extractSuggestion($suggestion)); + }, + _show: function() { + this.$menu.css("display", "block"); + }, + _hide: function() { + this.$menu.hide(); + }, + _moveCursor: function(increment) { + var $suggestions, $cur, nextIndex, $underCursor; + if (!this.isVisible()) { + return; + } + $suggestions = this._getSuggestions(); + $cur = $suggestions.filter(".tt-is-under-cursor"); + $cur.removeClass("tt-is-under-cursor"); + nextIndex = $suggestions.index($cur) + increment; + nextIndex = (nextIndex + 1) % ($suggestions.length + 1) - 1; + if (nextIndex === -1) { + this.trigger("cursorRemoved"); + return; + } else if (nextIndex < -1) { + nextIndex = $suggestions.length - 1; + } + $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); + this._ensureVisibility($underCursor); + this.trigger("cursorMoved", extractSuggestion($underCursor)); + }, + _getSuggestions: function() { + return this.$menu.find(".tt-suggestions > .tt-suggestion"); + }, + _ensureVisibility: function($el) { + var menuHeight = this.$menu.height() + parseInt(this.$menu.css("paddingTop"), 10) + parseInt(this.$menu.css("paddingBottom"), 10), menuScrollTop = this.$menu.scrollTop(), elTop = $el.position().top, elBottom = elTop + $el.outerHeight(true); + if (elTop < 0) { + this.$menu.scrollTop(menuScrollTop + elTop); + } else if (menuHeight < elBottom) { + this.$menu.scrollTop(menuScrollTop + (elBottom - menuHeight)); + } + }, + destroy: function() { + this.$menu.off(".tt"); + this.$menu = null; + }, + isVisible: function() { + return this.isOpen && !this.isEmpty; + }, + closeUnlessMouseIsOverDropdown: function() { + if (!this.isMouseOverDropdown) { + this.close(); + } + }, + close: function() { + if (this.isOpen) { + this.isOpen = false; + this.isMouseOverDropdown = false; + this._hide(); + this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); + this.trigger("closed"); + } + }, + open: function() { + if (!this.isOpen) { + this.isOpen = true; + !this.isEmpty && this._show(); + this.trigger("opened"); + } + }, + setLanguageDirection: function(dir) { + var ltrCss = { + left: "0", + right: "auto" + }, rtlCss = { + left: "auto", + right: " 0" + }; + dir === "ltr" ? this.$menu.css(ltrCss) : this.$menu.css(rtlCss); + }, + moveCursorUp: function() { + this._moveCursor(-1); + }, + moveCursorDown: function() { + this._moveCursor(+1); + }, + getSuggestionUnderCursor: function() { + var $suggestion = this._getSuggestions().filter(".tt-is-under-cursor").first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + getFirstSuggestion: function() { + var $suggestion = this._getSuggestions().first(); + return $suggestion.length > 0 ? extractSuggestion($suggestion) : null; + }, + renderSuggestions: function(dataset, suggestions) { + var datasetClassName = "tt-dataset-" + dataset.name, wrapper = '
                                                %body
                                                ', compiledHtml, $suggestionsList, $dataset = this.$menu.find("." + datasetClassName), elBuilder, fragment, $el; + if ($dataset.length === 0) { + $suggestionsList = $(html.suggestionsList).css(css.suggestionsList); + $dataset = $("
                                                ").addClass(datasetClassName).append(dataset.header).append($suggestionsList).append(dataset.footer).appendTo(this.$menu); + } + if (suggestions.length > 0) { + this.isEmpty = false; + this.isOpen && this._show(); + elBuilder = document.createElement("div"); + fragment = document.createDocumentFragment(); + utils.each(suggestions, function(i, suggestion) { + suggestion.dataset = dataset.name; + compiledHtml = dataset.template(suggestion.datum); + elBuilder.innerHTML = wrapper.replace("%body", compiledHtml); + $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); + $el.children().each(function() { + $(this).css(css.suggestionChild); + }); + fragment.appendChild($el[0]); + }); + $dataset.show().find(".tt-suggestions").html(fragment); + } else { + this.clearSuggestions(dataset.name); + } + this.trigger("suggestionsRendered"); + }, + clearSuggestions: function(datasetName) { + var $datasets = datasetName ? this.$menu.find(".tt-dataset-" + datasetName) : this.$menu.find('[class^="tt-dataset-"]'), $suggestions = $datasets.find(".tt-suggestions"); + $datasets.hide(); + $suggestions.empty(); + if (this._getSuggestions().length === 0) { + this.isEmpty = true; + this._hide(); + } + } + }); + return DropdownView; + function extractSuggestion($el) { + return $el.data("suggestion"); + } + }(); + var TypeaheadView = function() { + var html = { + wrapper: '', + hint: '', + dropdown: '' + }, css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none" + }, + query: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + dropdown: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + } + }; + if (utils.isMsie()) { + utils.mixin(css.query, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + if (utils.isMsie() && utils.isMsie() <= 7) { + utils.mixin(css.wrapper, { + display: "inline", + zoom: "1" + }); + utils.mixin(css.query, { + marginTop: "-1px" + }); + } + function TypeaheadView(o) { + var $menu, $input, $hint; + utils.bindAll(this); + this.$node = buildDomStructure(o.input); + this.datasets = o.datasets; + this.dir = null; + this.eventBus = o.eventBus; + $menu = this.$node.find(".tt-dropdown-menu"); + $input = this.$node.find(".tt-query"); + $hint = this.$node.find(".tt-hint"); + this.dropdownView = new DropdownView({ + menu: $menu + }).on("suggestionSelected", this._handleSelection).on("cursorMoved", this._clearHint).on("cursorMoved", this._setInputValueToSuggestionUnderCursor).on("cursorRemoved", this._setInputValueToQuery).on("cursorRemoved", this._updateHint).on("suggestionsRendered", this._updateHint).on("opened", this._updateHint).on("closed", this._clearHint).on("opened closed", this._propagateEvent); + this.inputView = new InputView({ + input: $input, + hint: $hint + }).on("focused", this._openDropdown).on("blured", this._closeDropdown).on("blured", this._setInputValueToQuery).on("enterKeyed tabKeyed", this._handleSelection).on("queryChanged", this._clearHint).on("queryChanged", this._clearSuggestions).on("queryChanged", this._getSuggestions).on("whitespaceChanged", this._updateHint).on("queryChanged whitespaceChanged", this._openDropdown).on("queryChanged whitespaceChanged", this._setLanguageDirection).on("escKeyed", this._closeDropdown).on("escKeyed", this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed", this._managePreventDefault).on("upKeyed downKeyed", this._moveDropdownCursor).on("upKeyed downKeyed", this._openDropdown).on("tabKeyed leftKeyed rightKeyed", this._autocomplete); + } + utils.mixin(TypeaheadView.prototype, EventTarget, { + _managePreventDefault: function(e) { + var $e = e.data, hint, inputValue, preventDefault = false; + switch (e.type) { + case "tabKeyed": + hint = this.inputView.getHintValue(); + inputValue = this.inputView.getInputValue(); + preventDefault = hint && hint !== inputValue; + break; + + case "upKeyed": + case "downKeyed": + preventDefault = !$e.shiftKey && !$e.ctrlKey && !$e.metaKey; + break; + } + preventDefault && $e.preventDefault(); + }, + _setLanguageDirection: function() { + var dir = this.inputView.getLanguageDirection(); + if (dir !== this.dir) { + this.dir = dir; + this.$node.css("direction", dir); + this.dropdownView.setLanguageDirection(dir); + } + }, + _updateHint: function() { + var suggestion = this.dropdownView.getFirstSuggestion(), hint = suggestion ? suggestion.value : null, dropdownIsVisible = this.dropdownView.isVisible(), inputHasOverflow = this.inputView.isOverflow(), inputValue, query, escapedQuery, beginsWithQuery, match; + if (hint && dropdownIsVisible && !inputHasOverflow) { + inputValue = this.inputView.getInputValue(); + query = inputValue.replace(/\s{2,}/g, " ").replace(/^\s+/g, ""); + escapedQuery = utils.escapeRegExChars(query); + beginsWithQuery = new RegExp("^(?:" + escapedQuery + ")(.*$)", "i"); + match = beginsWithQuery.exec(hint); + this.inputView.setHintValue(inputValue + (match ? match[1] : "")); + } + }, + _clearHint: function() { + this.inputView.setHintValue(""); + }, + _clearSuggestions: function() { + this.dropdownView.clearSuggestions(); + }, + _setInputValueToQuery: function() { + this.inputView.setInputValue(this.inputView.getQuery()); + }, + _setInputValueToSuggestionUnderCursor: function(e) { + var suggestion = e.data; + this.inputView.setInputValue(suggestion.value, true); + }, + _openDropdown: function() { + this.dropdownView.open(); + }, + _closeDropdown: function(e) { + this.dropdownView[e.type === "blured" ? "closeUnlessMouseIsOverDropdown" : "close"](); + }, + _moveDropdownCursor: function(e) { + var $e = e.data; + if (!$e.shiftKey && !$e.ctrlKey && !$e.metaKey) { + this.dropdownView[e.type === "upKeyed" ? "moveCursorUp" : "moveCursorDown"](); + } + }, + _handleSelection: function(e) { + var byClick = e.type === "suggestionSelected", suggestion = byClick ? e.data : this.dropdownView.getSuggestionUnderCursor(); + if (suggestion) { + this.inputView.setInputValue(suggestion.value); + byClick ? this.inputView.focus() : e.data.preventDefault(); + byClick && utils.isMsie() ? utils.defer(this.dropdownView.close) : this.dropdownView.close(); + this.eventBus.trigger("selected", suggestion.datum, suggestion.dataset); + } + }, + _getSuggestions: function() { + var that = this, query = this.inputView.getQuery(); + if (utils.isBlankString(query)) { + return; + } + utils.each(this.datasets, function(i, dataset) { + dataset.getSuggestions(query, function(suggestions) { + if (query === that.inputView.getQuery()) { + that.dropdownView.renderSuggestions(dataset, suggestions); + } + }); + }); + }, + _autocomplete: function(e) { + var isCursorAtEnd, ignoreEvent, query, hint, suggestion; + if (e.type === "rightKeyed" || e.type === "leftKeyed") { + isCursorAtEnd = this.inputView.isCursorAtEnd(); + ignoreEvent = this.inputView.getLanguageDirection() === "ltr" ? e.type === "leftKeyed" : e.type === "rightKeyed"; + if (!isCursorAtEnd || ignoreEvent) { + return; + } + } + query = this.inputView.getQuery(); + hint = this.inputView.getHintValue(); + if (hint !== "" && query !== hint) { + suggestion = this.dropdownView.getFirstSuggestion(); + this.inputView.setInputValue(suggestion.value); + this.eventBus.trigger("autocompleted", suggestion.datum, suggestion.dataset); + } + }, + _propagateEvent: function(e) { + this.eventBus.trigger(e.type); + }, + destroy: function() { + this.inputView.destroy(); + this.dropdownView.destroy(); + destroyDomStructure(this.$node); + this.$node = null; + }, + setQuery: function(query) { + this.inputView.setQuery(query); + this.inputView.setInputValue(query); + this._clearHint(); + this._clearSuggestions(); + this._getSuggestions(); + } + }); + return TypeaheadView; + function buildDomStructure(input) { + var $wrapper = $(html.wrapper), $dropdown = $(html.dropdown), $input = $(input), $hint = $(html.hint); + $wrapper = $wrapper.css(css.wrapper); + $dropdown = $dropdown.css(css.dropdown); + $hint.css(css.hint).css({ + backgroundAttachment: $input.css("background-attachment"), + backgroundClip: $input.css("background-clip"), + backgroundColor: $input.css("background-color"), + backgroundImage: $input.css("background-image"), + backgroundOrigin: $input.css("background-origin"), + backgroundPosition: $input.css("background-position"), + backgroundRepeat: $input.css("background-repeat"), + backgroundSize: $input.css("background-size") + }); + $input.data("ttAttrs", { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass("tt-query").attr({ + autocomplete: "off", + spellcheck: false + }).css(css.query); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input.wrap($wrapper).parent().prepend($hint).append($dropdown); + } + function destroyDomStructure($node) { + var $input = $node.find(".tt-query"); + utils.each($input.data("ttAttrs"), function(key, val) { + utils.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter($node); + $node.remove(); + } + }(); + (function() { + var cache = {}, viewKey = "ttView", methods; + methods = { + initialize: function(datasetDefs) { + var datasets; + datasetDefs = utils.isArray(datasetDefs) ? datasetDefs : [ datasetDefs ]; + if (datasetDefs.length === 0) { + $.error("no datasets provided"); + } + datasets = utils.map(datasetDefs, function(o) { + var dataset = cache[o.name] ? cache[o.name] : new Dataset(o); + if (o.name) { + cache[o.name] = dataset; + } + return dataset; + }); + return this.each(initialize); + function initialize() { + var $input = $(this), deferreds, eventBus = new EventBus({ + el: $input + }); + deferreds = utils.map(datasets, function(dataset) { + return dataset.initialize(); + }); + $input.data(viewKey, new TypeaheadView({ + input: $input, + eventBus: eventBus = new EventBus({ + el: $input + }), + datasets: datasets + })); + $.when.apply($, deferreds).always(function() { + utils.defer(function() { + eventBus.trigger("initialized"); + }); + }); + } + }, + destroy: function() { + return this.each(destroy); + function destroy() { + var $this = $(this), view = $this.data(viewKey); + if (view) { + view.destroy(); + $this.removeData(viewKey); + } + } + }, + setQuery: function(query) { + return this.each(setQuery); + function setQuery() { + var view = $(this).data(viewKey); + view && view.setQuery(query); + } + } + }; + jQuery.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + })(); +})(window.jQuery); \ No newline at end of file diff --git a/releases/0.9.3/typeahead.js.zip b/releases/0.9.3/typeahead.js.zip new file mode 100644 index 0000000000000000000000000000000000000000..a90397fba2779648994595655234e57fafa459c2 GIT binary patch literal 17667 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 P-em?tQJ_cqVGG(i literal 0 HcmV?d00001 diff --git a/releases/0.9.3/typeahead.min.js b/releases/0.9.3/typeahead.min.js new file mode 100644 index 0000000000..c085f8a820 --- /dev/null +++ b/releases/0.9.3/typeahead.min.js @@ -0,0 +1,7 @@ +/*! + * typeahead.js 0.9.3 + * https://github.com/twitter/typeahead + * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT + */ + +!function(a){var b="0.9.3",c={isMsie:function(){var a=/(msie) ([\w.]+)/i.exec(navigator.userAgent);return a?parseInt(a[2],10):!1},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},bind:a.proxy,bindAll:function(b){var c;for(var d in b)a.isFunction(c=b[d])&&(b[d]=a.proxy(c,b))},indexOf:function(a,b){for(var c=0;c=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},tokenizeQuery:function(b){return a.trim(b).toLowerCase().split(/[\s]+/)},tokenizeText:function(b){return a.trim(b).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},d=function(){var a=/\s+/;return{on:function(b,c){var d;if(!c)return this;for(this._callbacks=this._callbacks||{},b=b.split(a);d=b.shift();)this._callbacks[d]=this._callbacks[d]||[],this._callbacks[d].push(c);return this},trigger:function(b,c){var d,e;if(!this._callbacks)return this;for(b=b.split(a);d=b.shift();)if(e=this._callbacks[d])for(var f=0;fa;a++)(b=f.key(a)).match(this.keyMatcher)&&c.push(b.replace(this.keyMatcher,""));for(a=c.length;a--;)this.remove(c[a]);return this},isExpired:function(a){var d=e(f.getItem(this._ttlKey(a)));return c.isNumber(d)&&b()>d?!0:!1}}:{get:c.noop,set:c.noop,remove:c.noop,clear:c.noop,isExpired:c.noop},c.mixin(a.prototype,g),a}(),g=function(){function a(a){c.bindAll(this),a=a||{},this.sizeLimit=a.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return c.mixin(a.prototype,{get:function(a){return this.cache[a]},set:function(a,b){var c;this.cachedKeysByAge.length===this.sizeLimit&&(c=this.cachedKeysByAge.shift(),delete this.cache[c]),this.cache[a]=b,this.cachedKeysByAge.push(a)}}),a}(),h=function(){function b(a){c.bindAll(this),a=c.isString(a)?{url:a}:a,i=i||new g,h=c.isNumber(a.maxParallelRequests)?a.maxParallelRequests:h||6,this.url=a.url,this.wildcard=a.wildcard||"%QUERY",this.filter=a.filter,this.replace=a.replace,this.ajaxSettings={type:"get",cache:a.cache,timeout:a.timeout,dataType:a.dataType||"json",beforeSend:a.beforeSend},this._get=(/^throttle$/i.test(a.rateLimitFn)?c.throttle:c.debounce)(this._get,a.rateLimitWait||300)}function d(){j++}function e(){j--}function f(){return h>j}var h,i,j=0,k={};return c.mixin(b.prototype,{_get:function(a,b){function c(c){var e=d.filter?d.filter(c):c;b&&b(e),i.set(a,c)}var d=this;f()?this._sendRequest(a).done(c):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(b){function c(){e(),k[b]=null,f.onDeckRequestArgs&&(f._get.apply(f,f.onDeckRequestArgs),f.onDeckRequestArgs=null)}var f=this,g=k[b];return g||(d(),g=k[b]=a.ajax(b,this.ajaxSettings).always(c)),g},get:function(a,b){var d,e,f=this,g=encodeURIComponent(a||"");return b=b||c.noop,d=this.replace?this.replace(this.url,g):this.url.replace(this.wildcard,g),(e=i.get(d))?c.defer(function(){b(f.filter?f.filter(e):e)}):this._get(d,b),!!e}}),b}(),i=function(){function d(b){c.bindAll(this),c.isString(b.template)&&!b.engine&&a.error("no template engine specified"),b.local||b.prefetch||b.remote||a.error("one of local, prefetch, or remote is required"),this.name=b.name||c.getUniqueId(),this.limit=b.limit||5,this.minLength=b.minLength||1,this.header=b.header,this.footer=b.footer,this.valueKey=b.valueKey||"value",this.template=e(b.template,b.engine,this.valueKey),this.local=b.local,this.prefetch=b.prefetch,this.remote=b.remote,this.itemHash={},this.adjacencyList={},this.storage=b.name?new f(b.name):null}function e(a,b,d){var e,f;return c.isFunction(a)?e=a:c.isString(a)?(f=b.compile(a),e=c.bind(f.render,f)):e=function(a){return"

                                                "+a[d]+"

                                                "},e}var g={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return c.mixin(d.prototype,{_processLocalData:function(a){this._mergeProcessedData(this._processData(a))},_loadPrefetchData:function(d){function e(a){var b=d.filter?d.filter(a):a,e=m._processData(b),f=e.itemHash,h=e.adjacencyList;m.storage&&(m.storage.set(g.itemHash,f,d.ttl),m.storage.set(g.adjacencyList,h,d.ttl),m.storage.set(g.thumbprint,n,d.ttl),m.storage.set(g.protocol,c.getProtocol(),d.ttl)),m._mergeProcessedData(e)}var f,h,i,j,k,l,m=this,n=b+(d.thumbprint||"");return this.storage&&(f=this.storage.get(g.thumbprint),h=this.storage.get(g.protocol),i=this.storage.get(g.itemHash),j=this.storage.get(g.adjacencyList)),k=f!==n||h!==c.getProtocol(),d=c.isString(d)?{url:d}:d,d.ttl=c.isNumber(d.ttl)?d.ttl:864e5,i&&j&&!k?(this._mergeProcessedData({itemHash:i,adjacencyList:j}),l=a.Deferred().resolve()):l=a.getJSON(d.url).done(e),l},_transformDatum:function(a){var b=c.isString(a)?a:a[this.valueKey],d=a.tokens||c.tokenizeText(b),e={value:b,tokens:d};return c.isString(a)?(e.datum={},e.datum[this.valueKey]=a):e.datum=a,e.tokens=c.filter(e.tokens,function(a){return!c.isBlankString(a)}),e.tokens=c.map(e.tokens,function(a){return a.toLowerCase()}),e},_processData:function(a){var b=this,d={},e={};return c.each(a,function(a,f){var g=b._transformDatum(f),h=c.getUniqueId(g.value);d[h]=g,c.each(g.tokens,function(a,b){var d=b.charAt(0),f=e[d]||(e[d]=[h]);!~c.indexOf(f,h)&&f.push(h)})}),{itemHash:d,adjacencyList:e}},_mergeProcessedData:function(a){var b=this;c.mixin(this.itemHash,a.itemHash),c.each(a.adjacencyList,function(a,c){var d=b.adjacencyList[a];b.adjacencyList[a]=d?d.concat(c):c})},_getLocalSuggestions:function(a){var b,d=this,e=[],f=[],g=[];return c.each(a,function(a,b){var d=b.charAt(0);!~c.indexOf(e,d)&&e.push(d)}),c.each(e,function(a,c){var e=d.adjacencyList[c];return e?(f.push(e),(!b||e.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:b.css("font-family"),fontSize:b.css("font-size"),fontStyle:b.css("font-style"),fontVariant:b.css("font-variant"),fontWeight:b.css("font-weight"),wordSpacing:b.css("word-spacing"),letterSpacing:b.css("letter-spacing"),textIndent:b.css("text-indent"),textRendering:b.css("text-rendering"),textTransform:b.css("text-transform")}).insertAfter(b)}function f(a,b){return a=(a||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),b=(b||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),a===b}return c.mixin(b.prototype,d,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(a){var b=this.specialKeyCodeMap[a.which||a.keyCode];b&&this.trigger(b+"Keyed",a)},_compareQueryToInputValue:function(){var a=this.getInputValue(),b=f(this.query,a),c=b?this.query.length!==a.length:!1;c?this.trigger("whitespaceChanged",{value:this.query}):b||this.trigger("queryChanged",{value:this.query=a})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){this.$input.val(a),!b&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(a){this.$hint.val(a)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var a,b=this.$input.val().length,d=this.$input[0].selectionStart;return c.isNumber(d)?d===b:document.selection?(a=document.selection.createRange(),a.moveStart("character",-b),b===a.text.length):!0}}),b}(),k=function(){function b(b){c.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=a(b.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function e(a){return a.data("suggestion")}var f={suggestionsList:''},g={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return c.mixin(b.prototype,d,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(b){var c=a(b.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),c.addClass("tt-is-under-cursor")},_handleSelection:function(b){var c=a(b.currentTarget);this.trigger("suggestionSelected",e(c))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(a){var b,c,d,f;if(this.isVisible()){if(b=this._getSuggestions(),c=b.filter(".tt-is-under-cursor"),c.removeClass("tt-is-under-cursor"),d=b.index(c)+a,d=(d+1)%(b.length+1)-1,-1===d)return this.trigger("cursorRemoved"),void 0;-1>d&&(d=b.length-1),f=b.eq(d).addClass("tt-is-under-cursor"),this._ensureVisibility(f),this.trigger("cursorMoved",e(f))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},_ensureVisibility:function(a){var b=this.$menu.height()+parseInt(this.$menu.css("paddingTop"),10)+parseInt(this.$menu.css("paddingBottom"),10),c=this.$menu.scrollTop(),d=a.position().top,e=d+a.outerHeight(!0);0>d?this.$menu.scrollTop(c+d):e>b&&this.$menu.scrollTop(c+(e-b))},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this.isMouseOverDropdown=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(a){var b={left:"0",right:"auto"},c={left:"auto",right:" 0"};"ltr"===a?this.$menu.css(b):this.$menu.css(c)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var a=this._getSuggestions().filter(".tt-is-under-cursor").first();return a.length>0?e(a):null},getFirstSuggestion:function(){var a=this._getSuggestions().first();return a.length>0?e(a):null},renderSuggestions:function(b,d){var e,h,i,j,k,l="tt-dataset-"+b.name,m='
                                                %body
                                                ',n=this.$menu.find("."+l);0===n.length&&(h=a(f.suggestionsList).css(g.suggestionsList),n=a("
                                                ").addClass(l).append(b.header).append(h).append(b.footer).appendTo(this.$menu)),d.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),i=document.createElement("div"),j=document.createDocumentFragment(),c.each(d,function(c,d){d.dataset=b.name,e=b.template(d.datum),i.innerHTML=m.replace("%body",e),k=a(i.firstChild).css(g.suggestion).data("suggestion",d),k.children().each(function(){a(this).css(g.suggestionChild)}),j.appendChild(k[0])}),n.show().find(".tt-suggestions").html(j)):this.clearSuggestions(b.name),this.trigger("suggestionsRendered")},clearSuggestions:function(a){var b=a?this.$menu.find(".tt-dataset-"+a):this.$menu.find('[class^="tt-dataset-"]'),c=b.find(".tt-suggestions");b.hide(),c.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),b}(),l=function(){function b(a){var b,d,f;c.bindAll(this),this.$node=e(a.input),this.datasets=a.datasets,this.dir=null,this.eventBus=a.eventBus,b=this.$node.find(".tt-dropdown-menu"),d=this.$node.find(".tt-query"),f=this.$node.find(".tt-hint"),this.dropdownView=new k({menu:b}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new j({input:d,hint:f}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed tabKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function e(b){var c=a(g.wrapper),d=a(g.dropdown),e=a(b),f=a(g.hint);c=c.css(h.wrapper),d=d.css(h.dropdown),f.css(h.hint).css({backgroundAttachment:e.css("background-attachment"),backgroundClip:e.css("background-clip"),backgroundColor:e.css("background-color"),backgroundImage:e.css("background-image"),backgroundOrigin:e.css("background-origin"),backgroundPosition:e.css("background-position"),backgroundRepeat:e.css("background-repeat"),backgroundSize:e.css("background-size")}),e.data("ttAttrs",{dir:e.attr("dir"),autocomplete:e.attr("autocomplete"),spellcheck:e.attr("spellcheck"),style:e.attr("style")}),e.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(h.query);try{!e.attr("dir")&&e.attr("dir","auto")}catch(i){}return e.wrap(c).parent().prepend(f).append(d)}function f(a){var b=a.find(".tt-query");c.each(b.data("ttAttrs"),function(a,d){c.isUndefined(d)?b.removeAttr(a):b.attr(a,d)}),b.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(a),a.remove()}var g={wrapper:'',hint:'',dropdown:''},h={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return c.isMsie()&&c.mixin(h.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),c.isMsie()&&c.isMsie()<=7&&(c.mixin(h.wrapper,{display:"inline",zoom:"1"}),c.mixin(h.query,{marginTop:"-1px"})),c.mixin(b.prototype,d,{_managePreventDefault:function(a){var b,c,d=a.data,e=!1;switch(a.type){case"tabKeyed":b=this.inputView.getHintValue(),c=this.inputView.getInputValue(),e=b&&b!==c;break;case"upKeyed":case"downKeyed":e=!d.shiftKey&&!d.ctrlKey&&!d.metaKey}e&&d.preventDefault()},_setLanguageDirection:function(){var a=this.inputView.getLanguageDirection();a!==this.dir&&(this.dir=a,this.$node.css("direction",a),this.dropdownView.setLanguageDirection(a))},_updateHint:function(){var a,b,d,e,f,g=this.dropdownView.getFirstSuggestion(),h=g?g.value:null,i=this.dropdownView.isVisible(),j=this.inputView.isOverflow();h&&i&&!j&&(a=this.inputView.getInputValue(),b=a.replace(/\s{2,}/g," ").replace(/^\s+/g,""),d=c.escapeRegExChars(b),e=new RegExp("^(?:"+d+")(.*$)","i"),f=e.exec(h),this.inputView.setHintValue(a+(f?f[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(a){var b=a.data;this.inputView.setInputValue(b.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(a){this.dropdownView["blured"===a.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(a){var b=a.data;b.shiftKey||b.ctrlKey||b.metaKey||this.dropdownView["upKeyed"===a.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(a){var b="suggestionSelected"===a.type,d=b?a.data:this.dropdownView.getSuggestionUnderCursor();d&&(this.inputView.setInputValue(d.value),b?this.inputView.focus():a.data.preventDefault(),b&&c.isMsie()?c.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",d.datum,d.dataset))},_getSuggestions:function(){var a=this,b=this.inputView.getQuery();c.isBlankString(b)||c.each(this.datasets,function(c,d){d.getSuggestions(b,function(c){b===a.inputView.getQuery()&&a.dropdownView.renderSuggestions(d,c)})})},_autocomplete:function(a){var b,c,d,e,f;("rightKeyed"!==a.type&&"leftKeyed"!==a.type||(b=this.inputView.isCursorAtEnd(),c="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===a.type:"rightKeyed"===a.type,b&&!c))&&(d=this.inputView.getQuery(),e=this.inputView.getHintValue(),""!==e&&d!==e&&(f=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(f.value),this.eventBus.trigger("autocompleted",f.datum,f.dataset)))},_propagateEvent:function(a){this.eventBus.trigger(a.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),f(this.$node),this.$node=null},setQuery:function(a){this.inputView.setQuery(a),this.inputView.setInputValue(a),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),b}();!function(){var b,d={},f="ttView";b={initialize:function(b){function g(){var b,d=a(this),g=new e({el:d});b=c.map(h,function(a){return a.initialize()}),d.data(f,new l({input:d,eventBus:g=new e({el:d}),datasets:h})),a.when.apply(a,b).always(function(){c.defer(function(){g.trigger("initialized")})})}var h;return b=c.isArray(b)?b:[b],0===b.length&&a.error("no datasets provided"),h=c.map(b,function(a){var b=d[a.name]?d[a.name]:new i(a);return a.name&&(d[a.name]=b),b}),this.each(g)},destroy:function(){function b(){var b=a(this),c=b.data(f);c&&(c.destroy(),b.removeData(f))}return this.each(b)},setQuery:function(b){function c(){var c=a(this).data(f);c&&c.setQuery(b)}return this.each(c)}},jQuery.fn.typeahead=function(a){return b[a]?b[a].apply(this,[].slice.call(arguments,1)):b.initialize.apply(this,arguments)}}()}(window.jQuery); \ No newline at end of file diff --git a/releases/latest/typeahead.js b/releases/latest/typeahead.js index 70244deee0..9365bd62a1 100644 --- a/releases/latest/typeahead.js +++ b/releases/latest/typeahead.js @@ -1,11 +1,11 @@ /*! - * typeahead.js 0.9.2 + * typeahead.js 0.9.3 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ (function($) { - var VERSION = "0.9.2"; + var VERSION = "0.9.3"; var utils = { isMsie: function() { var match = /(msie) ([\w.]+)/i.exec(navigator.userAgent); @@ -190,6 +190,8 @@ var ls, methods; try { ls = window.localStorage; + ls.setItem("~~~", "!"); + ls.removeItem("~~~"); } catch (err) { ls = null; } @@ -744,11 +746,20 @@ nextIndex = $suggestions.length - 1; } $underCursor = $suggestions.eq(nextIndex).addClass("tt-is-under-cursor"); + this._ensureVisibility($underCursor); this.trigger("cursorMoved", extractSuggestion($underCursor)); }, _getSuggestions: function() { return this.$menu.find(".tt-suggestions > .tt-suggestion"); }, + _ensureVisibility: function($el) { + var menuHeight = this.$menu.height() + parseInt(this.$menu.css("paddingTop"), 10) + parseInt(this.$menu.css("paddingBottom"), 10), menuScrollTop = this.$menu.scrollTop(), elTop = $el.position().top, elBottom = elTop + $el.outerHeight(true); + if (elTop < 0) { + this.$menu.scrollTop(menuScrollTop + elTop); + } else if (menuHeight < elBottom) { + this.$menu.scrollTop(menuScrollTop + (elBottom - menuHeight)); + } + }, destroy: function() { this.$menu.off(".tt"); this.$menu = null; @@ -764,6 +775,7 @@ close: function() { if (this.isOpen) { this.isOpen = false; + this.isMouseOverDropdown = false; this._hide(); this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"); this.trigger("closed"); @@ -812,6 +824,7 @@ elBuilder = document.createElement("div"); fragment = document.createDocumentFragment(); utils.each(suggestions, function(i, suggestion) { + suggestion.dataset = dataset.name; compiledHtml = dataset.template(suggestion.datum); elBuilder.innerHTML = wrapper.replace("%body", compiledHtml); $el = $(elBuilder.firstChild).css(css.suggestion).data("suggestion", suggestion); @@ -901,7 +914,7 @@ this.inputView = new InputView({ input: $input, hint: $hint - }).on("focused", this._openDropdown).on("blured", this._closeDropdown).on("blured", this._setInputValueToQuery).on("enterKeyed", this._handleSelection).on("queryChanged", this._clearHint).on("queryChanged", this._clearSuggestions).on("queryChanged", this._getSuggestions).on("whitespaceChanged", this._updateHint).on("queryChanged whitespaceChanged", this._openDropdown).on("queryChanged whitespaceChanged", this._setLanguageDirection).on("escKeyed", this._closeDropdown).on("escKeyed", this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed", this._managePreventDefault).on("upKeyed downKeyed", this._moveDropdownCursor).on("upKeyed downKeyed", this._openDropdown).on("tabKeyed leftKeyed rightKeyed", this._autocomplete); + }).on("focused", this._openDropdown).on("blured", this._closeDropdown).on("blured", this._setInputValueToQuery).on("enterKeyed tabKeyed", this._handleSelection).on("queryChanged", this._clearHint).on("queryChanged", this._clearSuggestions).on("queryChanged", this._getSuggestions).on("whitespaceChanged", this._updateHint).on("queryChanged whitespaceChanged", this._openDropdown).on("queryChanged whitespaceChanged", this._setLanguageDirection).on("escKeyed", this._closeDropdown).on("escKeyed", this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed", this._managePreventDefault).on("upKeyed downKeyed", this._moveDropdownCursor).on("upKeyed downKeyed", this._openDropdown).on("tabKeyed leftKeyed rightKeyed", this._autocomplete); } utils.mixin(TypeaheadView.prototype, EventTarget, { _managePreventDefault: function(e) { @@ -970,7 +983,7 @@ this.inputView.setInputValue(suggestion.value); byClick ? this.inputView.focus() : e.data.preventDefault(); byClick && utils.isMsie() ? utils.defer(this.dropdownView.close) : this.dropdownView.close(); - this.eventBus.trigger("selected", suggestion.datum); + this.eventBus.trigger("selected", suggestion.datum, suggestion.dataset); } }, _getSuggestions: function() { @@ -1000,7 +1013,7 @@ if (hint !== "" && query !== hint) { suggestion = this.dropdownView.getFirstSuggestion(); this.inputView.setInputValue(suggestion.value); - this.eventBus.trigger("autocompleted", suggestion.datum); + this.eventBus.trigger("autocompleted", suggestion.datum, suggestion.dataset); } }, _propagateEvent: function(e) { diff --git a/releases/latest/typeahead.js.zip b/releases/latest/typeahead.js.zip index 8397c7c9d2d6c9fead0d2b8b5c710a3eadd459e8..a90397fba2779648994595655234e57fafa459c2 100644 GIT binary patch literal 17667 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 P-em?tQJ_cqVGG(i literal 17267 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[i]===e)return i;return-1},each:t.each,map:t.map,filter:t.grep,every:function(e,i){var n=!0;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?void 0:!1}),!!n):n},some:function(e,i){var n=!1;return e?(t.each(e,function(t,s){return(n=i.call(null,s,t,e))?!1:void 0}),!!n):n},mixin:t.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),defer:function(t){setTimeout(t,0)},debounce:function(t,e,i){var n,s;return function(){var r,o,u=this,a=arguments;return r=function(){n=null,i||(s=t.apply(u,a))},o=i&&!n,clearTimeout(n),n=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var i,n,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(i,n)},function(){var a=new Date,c=e-(a-o);return i=this,n=arguments,0>=c?(clearTimeout(s),s=null,o=a,r=t.apply(i,n)):s||(s=setTimeout(u,c)),r}},tokenizeQuery:function(e){return t.trim(e).toLowerCase().split(/[\s]+/)},tokenizeText:function(e){return t.trim(e).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,i){var n;if(!i)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);n=e.shift();)this._callbacks[n]=this._callbacks[n]||[],this._callbacks[n].push(i);return this},trigger:function(e,i){var n,s;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)if(s=this._callbacks[n])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:n,data:i});return this}}}(),s=function(){function e(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var n="typeahead:";return i.mixin(e.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(n+t,e)}}),e}(),r=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function e(){return(new Date).getTime()}function n(t){return JSON.stringify(i.isUndefined(t)?null:t)}function s(t){return JSON.parse(t)}var r,o;try{r=window.localStorage}catch(u){r=null}return o=r&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),s(r.getItem(this._prefix(t)))},set:function(t,s,o){return i.isNumber(o)?r.setItem(this._ttlKey(t),n(e()+o)):r.removeItem(this._ttlKey(t)),r.setItem(this._prefix(t),n(s))},remove:function(t){return r.removeItem(this._ttlKey(t)),r.removeItem(this._prefix(t)),this},clear:function(){var t,e,i=[],n=r.length;for(t=0;n>t;t++)(e=r.key(t)).match(this.keyMatcher)&&i.push(e.replace(this.keyMatcher,""));for(t=i.length;t--;)this.remove(i[t]);return this},isExpired:function(t){var n=s(r.getItem(this._ttlKey(t)));return i.isNumber(n)&&e()>n?!0:!1}}:{get:i.noop,set:i.noop,remove:i.noop,clear:i.noop,isExpired:i.noop},i.mixin(t.prototype,o),t}(),o=function(){function t(t){i.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return i.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var i;this.cachedKeysByAge.length===this.sizeLimit&&(i=this.cachedKeysByAge.shift(),delete this.cache[i]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),u=function(){function e(t){i.bindAll(this),t=i.isString(t)?{url:t}:t,a=a||new o,u=i.isNumber(t.maxParallelRequests)?t.maxParallelRequests:u||6,this.url=t.url,this.wildcard=t.wildcard||"%QUERY",this.filter=t.filter,this.replace=t.replace,this.ajaxSettings={type:"get",cache:t.cache,timeout:t.timeout,dataType:t.dataType||"json",beforeSend:t.beforeSend},this._get=(/^throttle$/i.test(t.rateLimitFn)?i.throttle:i.debounce)(this._get,t.rateLimitWait||300)}function n(){c++}function s(){c--}function r(){return u>c}var u,a,c=0,h={};return i.mixin(e.prototype,{_get:function(t,e){function i(i){var s=n.filter?n.filter(i):i;e&&e(s),a.set(t,i)}var n=this;r()?this._sendRequest(t).done(i):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(e){function i(){s(),h[e]=null,r.onDeckRequestArgs&&(r._get.apply(r,r.onDeckRequestArgs),r.onDeckRequestArgs=null)}var r=this,o=h[e];return o||(n(),o=h[e]=t.ajax(e,this.ajaxSettings).always(i)),o},get:function(t,e){var n,s,r=this,o=encodeURIComponent(t||"");return e=e||i.noop,n=this.replace?this.replace(this.url,o):this.url.replace(this.wildcard,o),(s=a.get(n))?i.defer(function(){e(r.filter?r.filter(s):s)}):this._get(n,e),!!s}}),e}(),a=function(){function n(e){i.bindAll(this),i.isString(e.template)&&!e.engine&&t.error("no template engine specified"),e.local||e.prefetch||e.remote||t.error("one of local, prefetch, or remote is required"),this.name=e.name||i.getUniqueId(),this.limit=e.limit||5,this.minLength=e.minLength||1,this.header=e.header,this.footer=e.footer,this.valueKey=e.valueKey||"value",this.template=s(e.template,e.engine,this.valueKey),this.local=e.local,this.prefetch=e.prefetch,this.remote=e.remote,this.itemHash={},this.adjacencyList={},this.storage=e.name?new r(e.name):null}function s(t,e,n){var s,r;return i.isFunction(t)?s=t:i.isString(t)?(r=e.compile(t),s=i.bind(r.render,r)):s=function(t){return"

                                                "+t[n]+"

                                                "},s}var o={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return i.mixin(n.prototype,{_processLocalData:function(t){this._mergeProcessedData(this._processData(t))},_loadPrefetchData:function(n){function s(t){var e=n.filter?n.filter(t):t,s=d._processData(e),r=s.itemHash,u=s.adjacencyList;d.storage&&(d.storage.set(o.itemHash,r,n.ttl),d.storage.set(o.adjacencyList,u,n.ttl),d.storage.set(o.thumbprint,p,n.ttl),d.storage.set(o.protocol,i.getProtocol(),n.ttl)),d._mergeProcessedData(s)}var r,u,a,c,h,l,d=this,p=e+(n.thumbprint||"");return this.storage&&(r=this.storage.get(o.thumbprint),u=this.storage.get(o.protocol),a=this.storage.get(o.itemHash),c=this.storage.get(o.adjacencyList)),h=r!==p||u!==i.getProtocol(),n=i.isString(n)?{url:n}:n,n.ttl=i.isNumber(n.ttl)?n.ttl:864e5,a&&c&&!h?(this._mergeProcessedData({itemHash:a,adjacencyList:c}),l=t.Deferred().resolve()):l=t.getJSON(n.url).done(s),l},_transformDatum:function(t){var e=i.isString(t)?t:t[this.valueKey],n=t.tokens||i.tokenizeText(e),s={value:e,tokens:n};return i.isString(t)?(s.datum={},s.datum[this.valueKey]=t):s.datum=t,s.tokens=i.filter(s.tokens,function(t){return!i.isBlankString(t)}),s.tokens=i.map(s.tokens,function(t){return t.toLowerCase()}),s},_processData:function(t){var e=this,n={},s={};return i.each(t,function(t,r){var o=e._transformDatum(r),u=i.getUniqueId(o.value);n[u]=o,i.each(o.tokens,function(t,e){var n=e.charAt(0),r=s[n]||(s[n]=[u]);!~i.indexOf(r,u)&&r.push(u)})}),{itemHash:n,adjacencyList:s}},_mergeProcessedData:function(t){var e=this;i.mixin(this.itemHash,t.itemHash),i.each(t.adjacencyList,function(t,i){var n=e.adjacencyList[t];e.adjacencyList[t]=n?n.concat(i):i})},_getLocalSuggestions:function(t){var e,n=this,s=[],r=[],o=[];return i.each(t,function(t,e){var n=e.charAt(0);!~i.indexOf(s,n)&&s.push(n)}),i.each(s,function(t,i){var s=n.adjacencyList[i];return s?(r.push(s),(!e||s.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function r(t,e){return t=(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),e=(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),t===e}return i.mixin(e.prototype,n,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(t){var e=this.specialKeyCodeMap[t.which||t.keyCode];e&&this.trigger(e+"Keyed",t)},_compareQueryToInputValue:function(){var t=this.getInputValue(),e=r(this.query,t),i=e?this.query.length!==t.length:!1;i?this.trigger("whitespaceChanged",{value:this.query}):e||this.trigger("queryChanged",{value:this.query=t})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){this.$input.val(t),!e&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(t){this.$hint.val(t)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var t,e=this.$input.val().length,n=this.$input[0].selectionStart;return i.isNumber(n)?n===e:document.selection?(t=document.selection.createRange(),t.moveStart("character",-e),e===t.text.length):!0}}),e}(),h=function(){function e(e){i.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=t(e.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function s(t){return t.data("suggestion")}var r={suggestionsList:''},o={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return i.mixin(e.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(e){var i=t(e.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),i.addClass("tt-is-under-cursor")},_handleSelection:function(e){var i=t(e.currentTarget);this.trigger("suggestionSelected",s(i))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(t){var e,i,n,r;if(this.isVisible()){if(e=this._getSuggestions(),i=e.filter(".tt-is-under-cursor"),i.removeClass("tt-is-under-cursor"),n=e.index(i)+t,n=(n+1)%(e.length+1)-1,-1===n)return this.trigger("cursorRemoved"),void 0;-1>n&&(n=e.length-1),r=e.eq(n).addClass("tt-is-under-cursor"),this.trigger("cursorMoved",s(r))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(t){var e={left:"0",right:"auto"},i={left:"auto",right:" 0"};"ltr"===t?this.$menu.css(e):this.$menu.css(i)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?s(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?s(t):null},renderSuggestions:function(e,n){var s,u,a,c,h,l="tt-dataset-"+e.name,d='
                                                %body
                                                ',p=this.$menu.find("."+l);0===p.length&&(u=t(r.suggestionsList).css(o.suggestionsList),p=t("
                                                ").addClass(l).append(e.header).append(u).append(e.footer).appendTo(this.$menu)),n.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),a=document.createElement("div"),c=document.createDocumentFragment(),i.each(n,function(i,n){s=e.template(n.datum),a.innerHTML=d.replace("%body",s),h=t(a.firstChild).css(o.suggestion).data("suggestion",n),h.children().each(function(){t(this).css(o.suggestionChild)}),c.appendChild(h[0])}),p.show().find(".tt-suggestions").html(c)):this.clearSuggestions(e.name),this.trigger("suggestionsRendered")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t):this.$menu.find('[class^="tt-dataset-"]'),i=e.find(".tt-suggestions");e.hide(),i.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),e}(),l=function(){function e(t){var e,n,r;i.bindAll(this),this.$node=s(t.input),this.datasets=t.datasets,this.dir=null,this.eventBus=t.eventBus,e=this.$node.find(".tt-dropdown-menu"),n=this.$node.find(".tt-query"),r=this.$node.find(".tt-hint"),this.dropdownView=new h({menu:e}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new c({input:n,hint:r}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function s(e){var i=t(o.wrapper),n=t(o.dropdown),s=t(e),r=t(o.hint);i=i.css(u.wrapper),n=n.css(u.dropdown),r.css(u.hint).css({backgroundAttachment:s.css("background-attachment"),backgroundClip:s.css("background-clip"),backgroundColor:s.css("background-color"),backgroundImage:s.css("background-image"),backgroundOrigin:s.css("background-origin"),backgroundPosition:s.css("background-position"),backgroundRepeat:s.css("background-repeat"),backgroundSize:s.css("background-size")}),s.data("ttAttrs",{dir:s.attr("dir"),autocomplete:s.attr("autocomplete"),spellcheck:s.attr("spellcheck"),style:s.attr("style")}),s.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(u.query);try{!s.attr("dir")&&s.attr("dir","auto")}catch(a){}return s.wrap(i).parent().prepend(r).append(n)}function r(t){var e=t.find(".tt-query");i.each(e.data("ttAttrs"),function(t,n){i.isUndefined(n)?e.removeAttr(t):e.attr(t,n)}),e.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(t),t.remove()}var o={wrapper:'',hint:'',dropdown:''},u={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return i.isMsie()&&i.mixin(u.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&(i.mixin(u.wrapper,{display:"inline",zoom:"1"}),i.mixin(u.query,{marginTop:"-1px"})),i.mixin(e.prototype,n,{_managePreventDefault:function(t){var e,i,n=t.data,s=!1;switch(t.type){case"tabKeyed":e=this.inputView.getHintValue(),i=this.inputView.getInputValue(),s=e&&e!==i;break;case"upKeyed":case"downKeyed":s=!n.shiftKey&&!n.ctrlKey&&!n.metaKey}s&&n.preventDefault()},_setLanguageDirection:function(){var t=this.inputView.getLanguageDirection();t!==this.dir&&(this.dir=t,this.$node.css("direction",t),this.dropdownView.setLanguageDirection(t))},_updateHint:function(){var t,e,n,s,r,o=this.dropdownView.getFirstSuggestion(),u=o?o.value:null,a=this.dropdownView.isVisible(),c=this.inputView.isOverflow();u&&a&&!c&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=i.escapeRegExChars(e),s=RegExp("^(?:"+n+")(.*$)","i"),r=s.exec(u),this.inputView.setHintValue(t+(r?r[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){var e=t.data;this.inputView.setInputValue(e.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(t){this.dropdownView["blured"===t.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(t){var e=t.data;e.shiftKey||e.ctrlKey||e.metaKey||this.dropdownView["upKeyed"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var e="suggestionSelected"===t.type,n=e?t.data:this.dropdownView.getSuggestionUnderCursor();n&&(this.inputView.setInputValue(n.value),e?this.inputView.focus():t.data.preventDefault(),e&&i.isMsie()?i.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",n.datum))},_getSuggestions:function(){var t=this,e=this.inputView.getQuery();i.isBlankString(e)||i.each(this.datasets,function(i,n){n.getSuggestions(e,function(i){e===t.inputView.getQuery()&&t.dropdownView.renderSuggestions(n,i)})})},_autocomplete:function(t){var e,i,n,s,r;("rightKeyed"!==t.type&&"leftKeyed"!==t.type||(e=this.inputView.isCursorAtEnd(),i="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===t.type:"rightKeyed"===t.type,e&&!i))&&(n=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&n!==s&&(r=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.datum)))},_propagateEvent:function(t){this.eventBus.trigger(t.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),r(this.$node),this.$node=null},setQuery:function(t){this.inputView.setQuery(t),this.inputView.setInputValue(t),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),e}();(function(){var e,n={},r="ttView";e={initialize:function(e){function o(){var e,n=t(this),o=new s({el:n});e=i.map(u,function(t){return t.initialize()}),n.data(r,new l({input:n,eventBus:o=new s({el:n}),datasets:u})),t.when.apply(t,e).always(function(){i.defer(function(){o.trigger("initialized")})})}var u;return e=i.isArray(e)?e:[e],0===e.length&&t.error("no datasets provided"),u=i.map(e,function(t){var e=n[t.name]?n[t.name]:new a(t);return t.name&&(n[t.name]=e),e}),this.each(o)},destroy:function(){function e(){var e=t(this),i=e.data(r);i&&(i.destroy(),e.removeData(r))}return this.each(e)},setQuery:function(e){function i(){var i=t(this).data(r);i&&i.setQuery(e)}return this.each(i)}},jQuery.fn.typeahead=function(t){return e[t]?e[t].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)}})()})(window.jQuery); \ No newline at end of file +!function(a){var b="0.9.3",c={isMsie:function(){var a=/(msie) ([\w.]+)/i.exec(navigator.userAgent);return a?parseInt(a[2],10):!1},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},bind:a.proxy,bindAll:function(b){var c;for(var d in b)a.isFunction(c=b[d])&&(b[d]=a.proxy(c,b))},indexOf:function(a,b){for(var c=0;c=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},tokenizeQuery:function(b){return a.trim(b).toLowerCase().split(/[\s]+/)},tokenizeText:function(b){return a.trim(b).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},d=function(){var a=/\s+/;return{on:function(b,c){var d;if(!c)return this;for(this._callbacks=this._callbacks||{},b=b.split(a);d=b.shift();)this._callbacks[d]=this._callbacks[d]||[],this._callbacks[d].push(c);return this},trigger:function(b,c){var d,e;if(!this._callbacks)return this;for(b=b.split(a);d=b.shift();)if(e=this._callbacks[d])for(var f=0;fa;a++)(b=f.key(a)).match(this.keyMatcher)&&c.push(b.replace(this.keyMatcher,""));for(a=c.length;a--;)this.remove(c[a]);return this},isExpired:function(a){var d=e(f.getItem(this._ttlKey(a)));return c.isNumber(d)&&b()>d?!0:!1}}:{get:c.noop,set:c.noop,remove:c.noop,clear:c.noop,isExpired:c.noop},c.mixin(a.prototype,g),a}(),g=function(){function a(a){c.bindAll(this),a=a||{},this.sizeLimit=a.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return c.mixin(a.prototype,{get:function(a){return this.cache[a]},set:function(a,b){var c;this.cachedKeysByAge.length===this.sizeLimit&&(c=this.cachedKeysByAge.shift(),delete this.cache[c]),this.cache[a]=b,this.cachedKeysByAge.push(a)}}),a}(),h=function(){function b(a){c.bindAll(this),a=c.isString(a)?{url:a}:a,i=i||new g,h=c.isNumber(a.maxParallelRequests)?a.maxParallelRequests:h||6,this.url=a.url,this.wildcard=a.wildcard||"%QUERY",this.filter=a.filter,this.replace=a.replace,this.ajaxSettings={type:"get",cache:a.cache,timeout:a.timeout,dataType:a.dataType||"json",beforeSend:a.beforeSend},this._get=(/^throttle$/i.test(a.rateLimitFn)?c.throttle:c.debounce)(this._get,a.rateLimitWait||300)}function d(){j++}function e(){j--}function f(){return h>j}var h,i,j=0,k={};return c.mixin(b.prototype,{_get:function(a,b){function c(c){var e=d.filter?d.filter(c):c;b&&b(e),i.set(a,c)}var d=this;f()?this._sendRequest(a).done(c):this.onDeckRequestArgs=[].slice.call(arguments,0)},_sendRequest:function(b){function c(){e(),k[b]=null,f.onDeckRequestArgs&&(f._get.apply(f,f.onDeckRequestArgs),f.onDeckRequestArgs=null)}var f=this,g=k[b];return g||(d(),g=k[b]=a.ajax(b,this.ajaxSettings).always(c)),g},get:function(a,b){var d,e,f=this,g=encodeURIComponent(a||"");return b=b||c.noop,d=this.replace?this.replace(this.url,g):this.url.replace(this.wildcard,g),(e=i.get(d))?c.defer(function(){b(f.filter?f.filter(e):e)}):this._get(d,b),!!e}}),b}(),i=function(){function d(b){c.bindAll(this),c.isString(b.template)&&!b.engine&&a.error("no template engine specified"),b.local||b.prefetch||b.remote||a.error("one of local, prefetch, or remote is required"),this.name=b.name||c.getUniqueId(),this.limit=b.limit||5,this.minLength=b.minLength||1,this.header=b.header,this.footer=b.footer,this.valueKey=b.valueKey||"value",this.template=e(b.template,b.engine,this.valueKey),this.local=b.local,this.prefetch=b.prefetch,this.remote=b.remote,this.itemHash={},this.adjacencyList={},this.storage=b.name?new f(b.name):null}function e(a,b,d){var e,f;return c.isFunction(a)?e=a:c.isString(a)?(f=b.compile(a),e=c.bind(f.render,f)):e=function(a){return"

                                                "+a[d]+"

                                                "},e}var g={thumbprint:"thumbprint",protocol:"protocol",itemHash:"itemHash",adjacencyList:"adjacencyList"};return c.mixin(d.prototype,{_processLocalData:function(a){this._mergeProcessedData(this._processData(a))},_loadPrefetchData:function(d){function e(a){var b=d.filter?d.filter(a):a,e=m._processData(b),f=e.itemHash,h=e.adjacencyList;m.storage&&(m.storage.set(g.itemHash,f,d.ttl),m.storage.set(g.adjacencyList,h,d.ttl),m.storage.set(g.thumbprint,n,d.ttl),m.storage.set(g.protocol,c.getProtocol(),d.ttl)),m._mergeProcessedData(e)}var f,h,i,j,k,l,m=this,n=b+(d.thumbprint||"");return this.storage&&(f=this.storage.get(g.thumbprint),h=this.storage.get(g.protocol),i=this.storage.get(g.itemHash),j=this.storage.get(g.adjacencyList)),k=f!==n||h!==c.getProtocol(),d=c.isString(d)?{url:d}:d,d.ttl=c.isNumber(d.ttl)?d.ttl:864e5,i&&j&&!k?(this._mergeProcessedData({itemHash:i,adjacencyList:j}),l=a.Deferred().resolve()):l=a.getJSON(d.url).done(e),l},_transformDatum:function(a){var b=c.isString(a)?a:a[this.valueKey],d=a.tokens||c.tokenizeText(b),e={value:b,tokens:d};return c.isString(a)?(e.datum={},e.datum[this.valueKey]=a):e.datum=a,e.tokens=c.filter(e.tokens,function(a){return!c.isBlankString(a)}),e.tokens=c.map(e.tokens,function(a){return a.toLowerCase()}),e},_processData:function(a){var b=this,d={},e={};return c.each(a,function(a,f){var g=b._transformDatum(f),h=c.getUniqueId(g.value);d[h]=g,c.each(g.tokens,function(a,b){var d=b.charAt(0),f=e[d]||(e[d]=[h]);!~c.indexOf(f,h)&&f.push(h)})}),{itemHash:d,adjacencyList:e}},_mergeProcessedData:function(a){var b=this;c.mixin(this.itemHash,a.itemHash),c.each(a.adjacencyList,function(a,c){var d=b.adjacencyList[a];b.adjacencyList[a]=d?d.concat(c):c})},_getLocalSuggestions:function(a){var b,d=this,e=[],f=[],g=[];return c.each(a,function(a,b){var d=b.charAt(0);!~c.indexOf(e,d)&&e.push(d)}),c.each(e,function(a,c){var e=d.adjacencyList[c];return e?(f.push(e),(!b||e.length").css({position:"absolute",left:"-9999px",visibility:"hidden",whiteSpace:"nowrap",fontFamily:b.css("font-family"),fontSize:b.css("font-size"),fontStyle:b.css("font-style"),fontVariant:b.css("font-variant"),fontWeight:b.css("font-weight"),wordSpacing:b.css("word-spacing"),letterSpacing:b.css("letter-spacing"),textIndent:b.css("text-indent"),textRendering:b.css("text-rendering"),textTransform:b.css("text-transform")}).insertAfter(b)}function f(a,b){return a=(a||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),b=(b||"").replace(/^\s*/g,"").replace(/\s{2,}/g," "),a===b}return c.mixin(b.prototype,d,{_handleFocus:function(){this.trigger("focused")},_handleBlur:function(){this.trigger("blured")},_handleSpecialKeyEvent:function(a){var b=this.specialKeyCodeMap[a.which||a.keyCode];b&&this.trigger(b+"Keyed",a)},_compareQueryToInputValue:function(){var a=this.getInputValue(),b=f(this.query,a),c=b?this.query.length!==a.length:!1;c?this.trigger("whitespaceChanged",{value:this.query}):b||this.trigger("queryChanged",{value:this.query=a})},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){this.$input.val(a),!b&&this._compareQueryToInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(a){this.$hint.val(a)},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},isOverflow:function(){return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>this.$input.width()},isCursorAtEnd:function(){var a,b=this.$input.val().length,d=this.$input[0].selectionStart;return c.isNumber(d)?d===b:document.selection?(a=document.selection.createRange(),a.moveStart("character",-b),b===a.text.length):!0}}),b}(),k=function(){function b(b){c.bindAll(this),this.isOpen=!1,this.isEmpty=!0,this.isMouseOverDropdown=!1,this.$menu=a(b.menu).on("mouseenter.tt",this._handleMouseenter).on("mouseleave.tt",this._handleMouseleave).on("click.tt",".tt-suggestion",this._handleSelection).on("mouseover.tt",".tt-suggestion",this._handleMouseover)}function e(a){return a.data("suggestion")}var f={suggestionsList:''},g={suggestionsList:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"}};return c.mixin(b.prototype,d,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(b){var c=a(b.currentTarget);this._getSuggestions().removeClass("tt-is-under-cursor"),c.addClass("tt-is-under-cursor")},_handleSelection:function(b){var c=a(b.currentTarget);this.trigger("suggestionSelected",e(c))},_show:function(){this.$menu.css("display","block")},_hide:function(){this.$menu.hide()},_moveCursor:function(a){var b,c,d,f;if(this.isVisible()){if(b=this._getSuggestions(),c=b.filter(".tt-is-under-cursor"),c.removeClass("tt-is-under-cursor"),d=b.index(c)+a,d=(d+1)%(b.length+1)-1,-1===d)return this.trigger("cursorRemoved"),void 0;-1>d&&(d=b.length-1),f=b.eq(d).addClass("tt-is-under-cursor"),this._ensureVisibility(f),this.trigger("cursorMoved",e(f))}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},_ensureVisibility:function(a){var b=this.$menu.height()+parseInt(this.$menu.css("paddingTop"),10)+parseInt(this.$menu.css("paddingBottom"),10),c=this.$menu.scrollTop(),d=a.position().top,e=d+a.outerHeight(!0);0>d?this.$menu.scrollTop(c+d):e>b&&this.$menu.scrollTop(c+(e-b))},destroy:function(){this.$menu.off(".tt"),this.$menu=null},isVisible:function(){return this.isOpen&&!this.isEmpty},closeUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.close()},close:function(){this.isOpen&&(this.isOpen=!1,this.isMouseOverDropdown=!1,this._hide(),this.$menu.find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(a){var b={left:"0",right:"auto"},c={left:"auto",right:" 0"};"ltr"===a?this.$menu.css(b):this.$menu.css(c)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var a=this._getSuggestions().filter(".tt-is-under-cursor").first();return a.length>0?e(a):null},getFirstSuggestion:function(){var a=this._getSuggestions().first();return a.length>0?e(a):null},renderSuggestions:function(b,d){var e,h,i,j,k,l="tt-dataset-"+b.name,m='
                                                %body
                                                ',n=this.$menu.find("."+l);0===n.length&&(h=a(f.suggestionsList).css(g.suggestionsList),n=a("
                                                ").addClass(l).append(b.header).append(h).append(b.footer).appendTo(this.$menu)),d.length>0?(this.isEmpty=!1,this.isOpen&&this._show(),i=document.createElement("div"),j=document.createDocumentFragment(),c.each(d,function(c,d){d.dataset=b.name,e=b.template(d.datum),i.innerHTML=m.replace("%body",e),k=a(i.firstChild).css(g.suggestion).data("suggestion",d),k.children().each(function(){a(this).css(g.suggestionChild)}),j.appendChild(k[0])}),n.show().find(".tt-suggestions").html(j)):this.clearSuggestions(b.name),this.trigger("suggestionsRendered")},clearSuggestions:function(a){var b=a?this.$menu.find(".tt-dataset-"+a):this.$menu.find('[class^="tt-dataset-"]'),c=b.find(".tt-suggestions");b.hide(),c.empty(),0===this._getSuggestions().length&&(this.isEmpty=!0,this._hide())}}),b}(),l=function(){function b(a){var b,d,f;c.bindAll(this),this.$node=e(a.input),this.datasets=a.datasets,this.dir=null,this.eventBus=a.eventBus,b=this.$node.find(".tt-dropdown-menu"),d=this.$node.find(".tt-query"),f=this.$node.find(".tt-hint"),this.dropdownView=new k({menu:b}).on("suggestionSelected",this._handleSelection).on("cursorMoved",this._clearHint).on("cursorMoved",this._setInputValueToSuggestionUnderCursor).on("cursorRemoved",this._setInputValueToQuery).on("cursorRemoved",this._updateHint).on("suggestionsRendered",this._updateHint).on("opened",this._updateHint).on("closed",this._clearHint).on("opened closed",this._propagateEvent),this.inputView=new j({input:d,hint:f}).on("focused",this._openDropdown).on("blured",this._closeDropdown).on("blured",this._setInputValueToQuery).on("enterKeyed tabKeyed",this._handleSelection).on("queryChanged",this._clearHint).on("queryChanged",this._clearSuggestions).on("queryChanged",this._getSuggestions).on("whitespaceChanged",this._updateHint).on("queryChanged whitespaceChanged",this._openDropdown).on("queryChanged whitespaceChanged",this._setLanguageDirection).on("escKeyed",this._closeDropdown).on("escKeyed",this._setInputValueToQuery).on("tabKeyed upKeyed downKeyed",this._managePreventDefault).on("upKeyed downKeyed",this._moveDropdownCursor).on("upKeyed downKeyed",this._openDropdown).on("tabKeyed leftKeyed rightKeyed",this._autocomplete)}function e(b){var c=a(g.wrapper),d=a(g.dropdown),e=a(b),f=a(g.hint);c=c.css(h.wrapper),d=d.css(h.dropdown),f.css(h.hint).css({backgroundAttachment:e.css("background-attachment"),backgroundClip:e.css("background-clip"),backgroundColor:e.css("background-color"),backgroundImage:e.css("background-image"),backgroundOrigin:e.css("background-origin"),backgroundPosition:e.css("background-position"),backgroundRepeat:e.css("background-repeat"),backgroundSize:e.css("background-size")}),e.data("ttAttrs",{dir:e.attr("dir"),autocomplete:e.attr("autocomplete"),spellcheck:e.attr("spellcheck"),style:e.attr("style")}),e.addClass("tt-query").attr({autocomplete:"off",spellcheck:!1}).css(h.query);try{!e.attr("dir")&&e.attr("dir","auto")}catch(i){}return e.wrap(c).parent().prepend(f).append(d)}function f(a){var b=a.find(".tt-query");c.each(b.data("ttAttrs"),function(a,d){c.isUndefined(d)?b.removeAttr(a):b.attr(a,d)}),b.detach().removeData("ttAttrs").removeClass("tt-query").insertAfter(a),a.remove()}var g={wrapper:'',hint:'',dropdown:''},h={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none"},query:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"}};return c.isMsie()&&c.mixin(h.query,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),c.isMsie()&&c.isMsie()<=7&&(c.mixin(h.wrapper,{display:"inline",zoom:"1"}),c.mixin(h.query,{marginTop:"-1px"})),c.mixin(b.prototype,d,{_managePreventDefault:function(a){var b,c,d=a.data,e=!1;switch(a.type){case"tabKeyed":b=this.inputView.getHintValue(),c=this.inputView.getInputValue(),e=b&&b!==c;break;case"upKeyed":case"downKeyed":e=!d.shiftKey&&!d.ctrlKey&&!d.metaKey}e&&d.preventDefault()},_setLanguageDirection:function(){var a=this.inputView.getLanguageDirection();a!==this.dir&&(this.dir=a,this.$node.css("direction",a),this.dropdownView.setLanguageDirection(a))},_updateHint:function(){var a,b,d,e,f,g=this.dropdownView.getFirstSuggestion(),h=g?g.value:null,i=this.dropdownView.isVisible(),j=this.inputView.isOverflow();h&&i&&!j&&(a=this.inputView.getInputValue(),b=a.replace(/\s{2,}/g," ").replace(/^\s+/g,""),d=c.escapeRegExChars(b),e=new RegExp("^(?:"+d+")(.*$)","i"),f=e.exec(h),this.inputView.setHintValue(a+(f?f[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(a){var b=a.data;this.inputView.setInputValue(b.value,!0)},_openDropdown:function(){this.dropdownView.open()},_closeDropdown:function(a){this.dropdownView["blured"===a.type?"closeUnlessMouseIsOverDropdown":"close"]()},_moveDropdownCursor:function(a){var b=a.data;b.shiftKey||b.ctrlKey||b.metaKey||this.dropdownView["upKeyed"===a.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(a){var b="suggestionSelected"===a.type,d=b?a.data:this.dropdownView.getSuggestionUnderCursor();d&&(this.inputView.setInputValue(d.value),b?this.inputView.focus():a.data.preventDefault(),b&&c.isMsie()?c.defer(this.dropdownView.close):this.dropdownView.close(),this.eventBus.trigger("selected",d.datum,d.dataset))},_getSuggestions:function(){var a=this,b=this.inputView.getQuery();c.isBlankString(b)||c.each(this.datasets,function(c,d){d.getSuggestions(b,function(c){b===a.inputView.getQuery()&&a.dropdownView.renderSuggestions(d,c)})})},_autocomplete:function(a){var b,c,d,e,f;("rightKeyed"!==a.type&&"leftKeyed"!==a.type||(b=this.inputView.isCursorAtEnd(),c="ltr"===this.inputView.getLanguageDirection()?"leftKeyed"===a.type:"rightKeyed"===a.type,b&&!c))&&(d=this.inputView.getQuery(),e=this.inputView.getHintValue(),""!==e&&d!==e&&(f=this.dropdownView.getFirstSuggestion(),this.inputView.setInputValue(f.value),this.eventBus.trigger("autocompleted",f.datum,f.dataset)))},_propagateEvent:function(a){this.eventBus.trigger(a.type)},destroy:function(){this.inputView.destroy(),this.dropdownView.destroy(),f(this.$node),this.$node=null},setQuery:function(a){this.inputView.setQuery(a),this.inputView.setInputValue(a),this._clearHint(),this._clearSuggestions(),this._getSuggestions()}}),b}();!function(){var b,d={},f="ttView";b={initialize:function(b){function g(){var b,d=a(this),g=new e({el:d});b=c.map(h,function(a){return a.initialize()}),d.data(f,new l({input:d,eventBus:g=new e({el:d}),datasets:h})),a.when.apply(a,b).always(function(){c.defer(function(){g.trigger("initialized")})})}var h;return b=c.isArray(b)?b:[b],0===b.length&&a.error("no datasets provided"),h=c.map(b,function(a){var b=d[a.name]?d[a.name]:new i(a);return a.name&&(d[a.name]=b),b}),this.each(g)},destroy:function(){function b(){var b=a(this),c=b.data(f);c&&(c.destroy(),b.removeData(f))}return this.each(b)},setQuery:function(b){function c(){var c=a(this).data(f);c&&c.setQuery(b)}return this.each(c)}},jQuery.fn.typeahead=function(a){return b[a]?b[a].apply(this,[].slice.call(arguments,1)):b.initialize.apply(this,arguments)}}()}(window.jQuery); \ No newline at end of file From 80cc8349f8b804612fe6aba14ce9e03667bb7a07 Mon Sep 17 00:00:00 2001 From: Jake Harding Date: Sun, 2 Feb 2014 01:57:32 -0800 Subject: [PATCH 21/44] Prepare for v0.10. --- css/examples.css | 4 +- css/main.css | 2 +- data/nba.json | 2 +- data/nhl.json | 2 +- examples/index.html | 63 +- index.html | 14 +- js/examples.js | 191 ++- js/handlebars-v1.2.0.js | 2610 +++++++++++++++++++++++++++++++++++++++ js/hogan-2.0.0.js | 576 --------- js/jquery-1.10.2.min.js | 6 + js/jquery-1.9.1.min.js | 5 - js/main.js | 33 +- 12 files changed, 2839 insertions(+), 669 deletions(-) create mode 100644 js/handlebars-v1.2.0.js delete mode 100644 js/hogan-2.0.0.js create mode 100644 js/jquery-1.10.2.min.js delete mode 100644 js/jquery-1.9.1.min.js diff --git a/css/examples.css b/css/examples.css index a30c00b890..71c792060a 100644 --- a/css/examples.css +++ b/css/examples.css @@ -15,7 +15,7 @@ html { } .container { - max-width: 700px; + max-width: 750px; margin: 0 auto; text-align: center; } @@ -121,7 +121,7 @@ p { line-height: 24px; } -.tt-suggestion.tt-is-under-cursor { +.tt-suggestion.tt-cursor { color: #fff; background-color: #0097cf; diff --git a/css/main.css b/css/main.css index 77ea1ca83c..d38524c6e7 100644 --- a/css/main.css +++ b/css/main.css @@ -226,7 +226,7 @@ p { margin: 0; } -.twitter-typeahead .tt-suggestion.tt-is-under-cursor { +.twitter-typeahead .tt-suggestion.tt-cursor { color: #03739c; } diff --git a/data/nba.json b/data/nba.json index 5bb4a2e0e8..2a8491a3d7 100644 --- a/data/nba.json +++ b/data/nba.json @@ -1 +1 @@ -["Boston Celtics", "Dallas Mavericks", "Brooklyn Nets", "Houston Rockets", "New York Knicks", "Memphis Grizzlies", "Philadelphia 76ers", "New Orleans Hornets", "Toronto Raptors", "San Antonio Spurs", "Chicago Bulls", "Denver Nuggets", "Cleveland Cavaliers", "Minnesota Timberwolves", "Detroit Pistons", "Portland Trail Blazers", "Indiana Pacers", "Oklahoma City Thunder", "Milwaukee Bucks", "Utah Jazz", "Atlanta Hawks", "Golden State Warriors", "Charlotte Bobcats", "Los Angeles Clippers", "Miami Heat", "Los Angeles Lakers", "Orlando Magic", "Phoenix Suns", "Washington Wizards", "Sacramento Kings"] \ No newline at end of file +[{ "team": "Boston Celtics" },{ "team": "Dallas Mavericks" },{ "team": "Brooklyn Nets" },{ "team": "Houston Rockets" },{ "team": "New York Knicks" },{ "team": "Memphis Grizzlies" },{ "team": "Philadelphia 76ers" },{ "team": "New Orleans Hornets" },{ "team": "Toronto Raptors" },{ "team": "San Antonio Spurs" },{ "team": "Chicago Bulls" },{ "team": "Denver Nuggets" },{ "team": "Cleveland Cavaliers" },{ "team": "Minnesota Timberwolves" },{ "team": "Detroit Pistons" },{ "team": "Portland Trail Blazers" },{ "team": "Indiana Pacers" },{ "team": "Oklahoma City Thunder" },{ "team": "Milwaukee Bucks" },{ "team": "Utah Jazz" },{ "team": "Atlanta Hawks" },{ "team": "Golden State Warriors" },{ "team": "Charlotte Bobcats" },{ "team": "Los Angeles Clippers" },{ "team": "Miami Heat" },{ "team": "Los Angeles Lakers" },{ "team": "Orlando Magic" },{ "team": "Phoenix Suns" },{ "team": "Washington Wizards" },{ "team": "Sacramento Kings" }] diff --git a/data/nhl.json b/data/nhl.json index 7ee02b7f2c..c98903a407 100644 --- a/data/nhl.json +++ b/data/nhl.json @@ -1 +1 @@ -["New Jersey Devils", "New York Islanders", "New York Rangers", "Philadelphia Flyers", "Pittsburgh Penguins", "Chicago Blackhawks", "Columbus Blue Jackets", "Detroit Red Wings", "Nashville Predators", "St. Louis Blues", "Boston Bruins", "Buffalo Sabres", "Montreal Canadiens", "Ottawa Senators", "Toronto Maple Leafs", "Calgary Flames", "Colorado Avalanche", "Edmonton Oilers", "Minnesota Wild", "Vancouver Canucks", "Carolina Hurricanes", "Florida Panthers", "Tampa Bay Lightning", "Washington Capitals", "Winnipeg Jets", "Anaheim Ducks", "Dallas Stars", "Los Angeles Kings", "Phoenix Coyotes", "San Jose Sharks"] \ No newline at end of file +[{ "team": "New Jersey Devils" },{ "team": "New York Islanders" },{ "team": "New York Rangers" },{ "team": "Philadelphia Flyers" },{ "team": "Pittsburgh Penguins" },{ "team": "Chicago Blackhawks" },{ "team": "Columbus Blue Jackets" },{ "team": "Detroit Red Wings" },{ "team": "Nashville Predators" },{ "team": "St. Louis Blues" },{ "team": "Boston Bruins" },{ "team": "Buffalo Sabres" },{ "team": "Montreal Canadiens" },{ "team": "Ottawa Senators" },{ "team": "Toronto Maple Leafs" },{ "team": "Calgary Flames" },{ "team": "Colorado Avalanche" },{ "team": "Edmonton Oilers" },{ "team": "Minnesota Wild" },{ "team": "Vancouver Canucks" },{ "team": "Carolina Hurricanes" },{ "team": "Florida Panthers" },{ "team": "Tampa Bay Lightning" },{ "team": "Washington Capitals" },{ "team": "Winnipeg Jets" },{ "team": "Anaheim Ducks" },{ "team": "Dallas Stars" },{ "team": "Los Angeles Kings" },{ "team": "Phoenix Coyotes" },{ "team": "San Jose Sharks" }] diff --git a/examples/index.html b/examples/index.html index 895772df9d..aaab749f47 100644 --- a/examples/index.html +++ b/examples/index.html @@ -13,75 +13,102 @@

                                                examples

                                                +
                                                +

                                                Dead Simple

                                                +

                                                Suggestions are fetched from the hardcoded local data.

                                                + +
                                                + +
                                                + +
                                                + +
                                                +
                                                +
                                                -

                                                Countries

                                                -

                                                Prefetches data, stores it in localStorage, and searches it on the client

                                                +

                                                Transform Remote Data

                                                +

                                                Prefetches remote data then transforms it into the proper format.

                                                - +
                                                +
                                                -

                                                Open Source Projects by Twitter

                                                -

                                                Defines a custom template and template engine for rendering suggestions

                                                +

                                                Custom Template

                                                +

                                                Uses a precompiled template to customize look of suggestion.

                                                - +
                                                -

                                                Arabic Phrases

                                                -

                                                Hardcoded list showing Right-To-Left (RTL) support

                                                +

                                                RTL Support

                                                +

                                                Hardcoded list showing Right-To-Left (RTL) support. Hint support is disabled.

                                                - +
                                                -

                                                NBA and NHL Teams

                                                -

                                                Two datasets that are prefetched, stored, and searched on the client

                                                +

                                                Multiple Sections with Headers

                                                +

                                                Two datasets that are prefetched, stored, and searched on the client. Highlighting is enabled.

                                                - +
                                                -

                                                Best Picture Winners

                                                -

                                                Prefetches some data then relies on remote requests for suggestions when prefetched data is insufficient

                                                +

                                                Prefetch Backed by Remote

                                                +

                                                Prefetches some data then relies on remote requests for suggestions when prefetched data is insufficient.

                                                - + +
                                                +
                                                + +
                                                +

                                                Custom Source

                                                +

                                                Uses a hand-rolled source rather than a Bloodhound suggestion engine.

                                                + +
                                                + +
                                                + +
                                                +
                                                - - - + + + diff --git a/index.html b/index.html index 8399225c93..07f85564ca 100644 --- a/index.html +++ b/index.html @@ -17,19 +17,19 @@

                                                typeahea

                                                a fast and fully-featured autocomplete library

                                                - +

                                                activate typeahead.js demo

                                                - or see examples + or see examples
                                                - download v0.9.3 + download v0.10.0 - project & docs on GitHub · changelog + project & docs on GitHub · changelog - - + + - + diff --git a/js/examples.js b/js/examples.js index aad66b8ee8..3012d06e91 100644 --- a/js/examples.js +++ b/js/examples.js @@ -1,57 +1,154 @@ $(document).ready(function() { - $('.example-countries .typeahead').typeahead({ - name: 'countries', - prefetch: '../data/countries.json', - limit: 10 + var numbers, countries, repos, arabic, nba, nhl, films, anExcitedSource; + + numbers = new Bloodhound({ + datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.num); }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + local: [ + { num: 'one' }, + { num: 'two' }, + { num: 'three' }, + { num: 'four' }, + { num: 'five' }, + { num: 'six' }, + { num: 'seven' }, + { num: 'eight' }, + { num: 'nine' }, + { num: 'ten' } + ] + }); + + numbers.initialize(); + + $('.example-numbers .typeahead').typeahead(null, { + displayKey: 'num', + source: numbers.ttAdapter() }); - $('.example-twitter-oss .typeahead').typeahead({ - name: 'twitter-oss', - prefetch: '../data/repos.json', - template: [ +var countries = new Bloodhound({ + datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.name); }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + limit: 10, + prefetch: { + url: '../data/countries.json', + filter: function(list) { + return $.map(list, function(country) { return { name: country }; }); + } + } +}); + +countries.initialize(); + +$('.example-countries .typeahead').typeahead(null, { + name: 'countries', + displayKey: 'name', + source: countries.ttAdapter() +}); + +repos = new Bloodhound({ + datumTokenizer: function(d) { return d.tokens; }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + prefetch: '../data/repos.json' +}); + +repos.initialize(); + +$('.example-twitter-oss .typeahead').typeahead(null, { + name: 'twitter-oss', + displayKey: 'name', + source: repos.ttAdapter(), + templates: { + suggestion: Handlebars.compile([ '

                                                {{language}}

                                                ', '

                                                {{name}}

                                                ', '

                                                {{description}}

                                                ' - ].join(''), - engine: Hogan - }); + ].join('')) + } +}); - $('.example-arabic .typeahead').typeahead({ - name: 'arabic', - local: [ - "الإنجليزية", - "نعم", - "لا", - "مرحبا", - "کيف الحال؟", - "أهلا", - "مع السلامة", - "لا أتكلم العربية", - "لا أفهم", - "أنا جائع" - ] +var arabic = new Bloodhound({ + datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.word); }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + local: [ + { word: "الإنجليزية" }, + { word: "نعم" }, + { word: "لا" }, + { word: "مرحبا" }, + { word: "أهلا" } + ] +}); + +arabic.initialize(); + +$('.example-arabic .typeahead').typeahead({ + hint: false +}, +{ + name: 'arabic', + displayKey: 'word', + source: arabic.ttAdapter() +}); + +nba = new Bloodhound({ + datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.team); }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + prefetch: '../data/nba.json' +}); + +nhl = new Bloodhound({ + datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.team); }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + prefetch: '../data/nhl.json' +}); + +nba.initialize(); +nhl.initialize(); + +$('.example-sports .typeahead').typeahead({ + highlight: true +}, +{ + name: 'nba', + displayKey: 'team', + source: nba.ttAdapter() +}, +{ + name: 'nhl', + displayKey: 'team', + source: nhl.ttAdapter() +}); + +films = new Bloodhound({ + datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + remote: '../data/films/queries/%QUERY.json', + prefetch: '../data/films/post_1960.json' +}); + +films.initialize(); + +$('.example-films .typeahead').typeahead(null, { + displayKey: 'value', + source: films.ttAdapter(), + templates: { + suggestion: Handlebars.compile( + '

                                                {{value}} – {{year}}

                                                ' + ) + } +}); + +anExcitedSource = function(query, cb) { + var results = $.map(['!', '!!', '!!!'], function(appendage) { + var datum = { theValue: query + appendage }; + + return datum; }); - $('.example-sports .typeahead').typeahead([ - { - name: 'nba-teams', - prefetch: '../data/nba.json', - header: '

                                                NBA Teams

                                                ' - }, - { - name: 'nhl-teams', - prefetch: '../data/nhl.json', - header: '

                                                NHL Teams

                                                ' - } - ]); - - $('.example-films .typeahead').typeahead([ - { - name: 'best-picture-winners', - remote: '../data/films/queries/%QUERY.json', - prefetch: '../data/films/post_1960.json', - template: '

                                                {{value}} – {{year}}

                                                ', - engine: Hogan - } - ]); + cb(results); +}; + +$('.example-exclaimation .typeahead').typeahead(null, { + displayKey: 'theValue', + source: anExcitedSource +}); }); diff --git a/js/handlebars-v1.2.0.js b/js/handlebars-v1.2.0.js new file mode 100644 index 0000000000..1c64ca507d --- /dev/null +++ b/js/handlebars-v1.2.0.js @@ -0,0 +1,2610 @@ +/*! + + handlebars v1.2.0 + +Copyright (C) 2011 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +@license +*/ +var Handlebars = (function() { +// handlebars/safe-string.js +var __module4__ = (function() { + "use strict"; + var __exports__; + // Build out our basic SafeString type + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = function() { + return "" + this.string; + }; + + __exports__ = SafeString; + return __exports__; +})(); + +// handlebars/utils.js +var __module3__ = (function(__dependency1__) { + "use strict"; + var __exports__ = {}; + /*jshint -W004 */ + var SafeString = __dependency1__; + + var escape = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + "`": "`" + }; + + var badChars = /[&<>"'`]/g; + var possible = /[&<>"'`]/; + + function escapeChar(chr) { + return escape[chr] || "&"; + } + + function extend(obj, value) { + for(var key in value) { + if(Object.prototype.hasOwnProperty.call(value, key)) { + obj[key] = value[key]; + } + } + } + + __exports__.extend = extend;var toString = Object.prototype.toString; + __exports__.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + var isFunction = function(value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + if (isFunction(/x/)) { + isFunction = function(value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + var isFunction; + __exports__.isFunction = isFunction; + var isArray = Array.isArray || function(value) { + return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false; + }; + __exports__.isArray = isArray; + + function escapeExpression(string) { + // don't escape SafeStrings, since they're already safe + if (string instanceof SafeString) { + return string.toString(); + } else if (!string && string !== 0) { + return ""; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = "" + string; + + if(!possible.test(string)) { return string; } + return string.replace(badChars, escapeChar); + } + + __exports__.escapeExpression = escapeExpression;function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + __exports__.isEmpty = isEmpty; + return __exports__; +})(__module4__); + +// handlebars/exception.js +var __module5__ = (function() { + "use strict"; + var __exports__; + + var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(/* message */) { + var tmp = Error.prototype.constructor.apply(this, arguments); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + } + + Exception.prototype = new Error(); + + __exports__ = Exception; + return __exports__; +})(); + +// handlebars/base.js +var __module2__ = (function(__dependency1__, __dependency2__) { + "use strict"; + var __exports__ = {}; + var Utils = __dependency1__; + var Exception = __dependency2__; + + var VERSION = "1.2.0"; + __exports__.VERSION = VERSION;var COMPILER_REVISION = 4; + __exports__.COMPILER_REVISION = COMPILER_REVISION; + var REVISION_CHANGES = { + 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it + 2: '== 1.0.0-rc.3', + 3: '== 1.0.0-rc.4', + 4: '>= 1.0.0' + }; + __exports__.REVISION_CHANGES = REVISION_CHANGES; + var isArray = Utils.isArray, + isFunction = Utils.isFunction, + toString = Utils.toString, + objectType = '[object Object]'; + + function HandlebarsEnvironment(helpers, partials) { + this.helpers = helpers || {}; + this.partials = partials || {}; + + registerDefaultHelpers(this); + } + + __exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: logger, + log: log, + + registerHelper: function(name, fn, inverse) { + if (toString.call(name) === objectType) { + if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); } + Utils.extend(this.helpers, name); + } else { + if (inverse) { fn.not = inverse; } + this.helpers[name] = fn; + } + }, + + registerPartial: function(name, str) { + if (toString.call(name) === objectType) { + Utils.extend(this.partials, name); + } else { + this.partials[name] = str; + } + } + }; + + function registerDefaultHelpers(instance) { + instance.registerHelper('helperMissing', function(arg) { + if(arguments.length === 2) { + return undefined; + } else { + throw new Error("Missing helper: '" + arg + "'"); + } + }); + + instance.registerHelper('blockHelperMissing', function(context, options) { + var inverse = options.inverse || function() {}, fn = options.fn; + + if (isFunction(context)) { context = context.call(this); } + + if(context === true) { + return fn(this); + } else if(context === false || context == null) { + return inverse(this); + } else if (isArray(context)) { + if(context.length > 0) { + return instance.helpers.each(context, options); + } else { + return inverse(this); + } + } else { + return fn(context); + } + }); + + instance.registerHelper('each', function(context, options) { + var fn = options.fn, inverse = options.inverse; + var i = 0, ret = "", data; + + if (isFunction(context)) { context = context.call(this); } + + if (options.data) { + data = createFrame(options.data); + } + + if(context && typeof context === 'object') { + if (isArray(context)) { + for(var j = context.length; i 0) { throw new Exception("Invalid path: " + original); } + else if (part === "..") { depth++; } + else { this.isScoped = true; } + } + else { dig.push(part); } + } + + this.original = original; + this.parts = dig; + this.string = dig.join('.'); + this.depth = depth; + + // an ID is simple if it only has one part, and that part is not + // `..` or `this`. + this.isSimple = parts.length === 1 && !this.isScoped && depth === 0; + + this.stringModeValue = this.string; + }, + + PartialNameNode: function(name) { + this.type = "PARTIAL_NAME"; + this.name = name.original; + }, + + DataNode: function(id) { + this.type = "DATA"; + this.id = id; + }, + + StringNode: function(string) { + this.type = "STRING"; + this.original = + this.string = + this.stringModeValue = string; + }, + + IntegerNode: function(integer) { + this.type = "INTEGER"; + this.original = + this.integer = integer; + this.stringModeValue = Number(integer); + }, + + BooleanNode: function(bool) { + this.type = "BOOLEAN"; + this.bool = bool; + this.stringModeValue = bool === "true"; + }, + + CommentNode: function(comment) { + this.type = "comment"; + this.comment = comment; + } + }; + + // Must be exported as an object rather than the root of the module as the jison lexer + // most modify the object to operate properly. + __exports__ = AST; + return __exports__; +})(__module5__); + +// handlebars/compiler/parser.js +var __module9__ = (function() { + "use strict"; + var __exports__; + /* jshint ignore:start */ + /* Jison generated parser */ + var handlebars = (function(){ + var parser = {trace: function trace() { }, + yy: {}, + symbols_: {"error":2,"root":3,"statements":4,"EOF":5,"program":6,"simpleInverse":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"inMustache":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"CLOSE_UNESCAPED":24,"OPEN_PARTIAL":25,"partialName":26,"partial_option0":27,"inMustache_repetition0":28,"inMustache_option0":29,"dataName":30,"param":31,"STRING":32,"INTEGER":33,"BOOLEAN":34,"hash":35,"hash_repetition_plus0":36,"hashSegment":37,"ID":38,"EQUALS":39,"DATA":40,"pathSegments":41,"SEP":42,"$accept":0,"$end":1}, + terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"CLOSE_UNESCAPED",25:"OPEN_PARTIAL",32:"STRING",33:"INTEGER",34:"BOOLEAN",38:"ID",39:"EQUALS",40:"DATA",42:"SEP"}, + productions_: [0,[3,2],[3,1],[6,2],[6,3],[6,2],[6,1],[6,1],[6,0],[4,1],[4,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,4],[7,2],[17,3],[17,1],[31,1],[31,1],[31,1],[31,1],[31,1],[35,1],[37,3],[26,1],[26,1],[26,1],[30,2],[21,1],[41,3],[41,1],[27,0],[27,1],[28,0],[28,2],[29,0],[29,1],[36,1],[36,2]], + performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) { + + var $0 = $$.length - 1; + switch (yystate) { + case 1: return new yy.ProgramNode($$[$0-1]); + break; + case 2: return new yy.ProgramNode([]); + break; + case 3:this.$ = new yy.ProgramNode([], $$[$0-1], $$[$0]); + break; + case 4:this.$ = new yy.ProgramNode($$[$0-2], $$[$0-1], $$[$0]); + break; + case 5:this.$ = new yy.ProgramNode($$[$0-1], $$[$0], []); + break; + case 6:this.$ = new yy.ProgramNode($$[$0]); + break; + case 7:this.$ = new yy.ProgramNode([]); + break; + case 8:this.$ = new yy.ProgramNode([]); + break; + case 9:this.$ = [$$[$0]]; + break; + case 10: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; + break; + case 11:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0]); + break; + case 12:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0]); + break; + case 13:this.$ = $$[$0]; + break; + case 14:this.$ = $$[$0]; + break; + case 15:this.$ = new yy.ContentNode($$[$0]); + break; + case 16:this.$ = new yy.CommentNode($$[$0]); + break; + case 17:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0])); + break; + case 18:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0])); + break; + case 19:this.$ = {path: $$[$0-1], strip: stripFlags($$[$0-2], $$[$0])}; + break; + case 20:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0])); + break; + case 21:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0])); + break; + case 22:this.$ = new yy.PartialNode($$[$0-2], $$[$0-1], stripFlags($$[$0-3], $$[$0])); + break; + case 23:this.$ = stripFlags($$[$0-1], $$[$0]); + break; + case 24:this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]]; + break; + case 25:this.$ = [[$$[$0]], null]; + break; + case 26:this.$ = $$[$0]; + break; + case 27:this.$ = new yy.StringNode($$[$0]); + break; + case 28:this.$ = new yy.IntegerNode($$[$0]); + break; + case 29:this.$ = new yy.BooleanNode($$[$0]); + break; + case 30:this.$ = $$[$0]; + break; + case 31:this.$ = new yy.HashNode($$[$0]); + break; + case 32:this.$ = [$$[$0-2], $$[$0]]; + break; + case 33:this.$ = new yy.PartialNameNode($$[$0]); + break; + case 34:this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0])); + break; + case 35:this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0])); + break; + case 36:this.$ = new yy.DataNode($$[$0]); + break; + case 37:this.$ = new yy.IdNode($$[$0]); + break; + case 38: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; + break; + case 39:this.$ = [{part: $$[$0]}]; + break; + case 42:this.$ = []; + break; + case 43:$$[$0-1].push($$[$0]); + break; + case 46:this.$ = [$$[$0]]; + break; + case 47:$$[$0-1].push($$[$0]); + break; + } + }, + table: [{3:1,4:2,5:[1,3],8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[3]},{5:[1,16],8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[2,2]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{4:20,6:18,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{4:20,6:22,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{17:23,21:24,30:25,38:[1,28],40:[1,27],41:26},{17:29,21:24,30:25,38:[1,28],40:[1,27],41:26},{17:30,21:24,30:25,38:[1,28],40:[1,27],41:26},{17:31,21:24,30:25,38:[1,28],40:[1,27],41:26},{21:33,26:32,32:[1,34],33:[1,35],38:[1,28],41:26},{1:[2,1]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{10:36,20:[1,37]},{4:38,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,7],22:[1,13],23:[1,14],25:[1,15]},{7:39,8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,6],22:[1,13],23:[1,14],25:[1,15]},{17:23,18:[1,40],21:24,30:25,38:[1,28],40:[1,27],41:26},{10:41,20:[1,37]},{18:[1,42]},{18:[2,42],24:[2,42],28:43,32:[2,42],33:[2,42],34:[2,42],38:[2,42],40:[2,42]},{18:[2,25],24:[2,25]},{18:[2,37],24:[2,37],32:[2,37],33:[2,37],34:[2,37],38:[2,37],40:[2,37],42:[1,44]},{21:45,38:[1,28],41:26},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],38:[2,39],40:[2,39],42:[2,39]},{18:[1,46]},{18:[1,47]},{24:[1,48]},{18:[2,40],21:50,27:49,38:[1,28],41:26},{18:[2,33],38:[2,33]},{18:[2,34],38:[2,34]},{18:[2,35],38:[2,35]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{21:51,38:[1,28],41:26},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,3],22:[1,13],23:[1,14],25:[1,15]},{4:52,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,5],22:[1,13],23:[1,14],25:[1,15]},{14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]},{18:[2,44],21:56,24:[2,44],29:53,30:60,31:54,32:[1,57],33:[1,58],34:[1,59],35:55,36:61,37:62,38:[1,63],40:[1,27],41:26},{38:[1,64]},{18:[2,36],24:[2,36],32:[2,36],33:[2,36],34:[2,36],38:[2,36],40:[2,36]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,65]},{18:[2,41]},{18:[1,66]},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],25:[1,15]},{18:[2,24],24:[2,24]},{18:[2,43],24:[2,43],32:[2,43],33:[2,43],34:[2,43],38:[2,43],40:[2,43]},{18:[2,45],24:[2,45]},{18:[2,26],24:[2,26],32:[2,26],33:[2,26],34:[2,26],38:[2,26],40:[2,26]},{18:[2,27],24:[2,27],32:[2,27],33:[2,27],34:[2,27],38:[2,27],40:[2,27]},{18:[2,28],24:[2,28],32:[2,28],33:[2,28],34:[2,28],38:[2,28],40:[2,28]},{18:[2,29],24:[2,29],32:[2,29],33:[2,29],34:[2,29],38:[2,29],40:[2,29]},{18:[2,30],24:[2,30],32:[2,30],33:[2,30],34:[2,30],38:[2,30],40:[2,30]},{18:[2,31],24:[2,31],37:67,38:[1,68]},{18:[2,46],24:[2,46],38:[2,46]},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],38:[2,39],39:[1,69],40:[2,39],42:[2,39]},{18:[2,38],24:[2,38],32:[2,38],33:[2,38],34:[2,38],38:[2,38],40:[2,38],42:[2,38]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{18:[2,47],24:[2,47],38:[2,47]},{39:[1,69]},{21:56,30:60,31:70,32:[1,57],33:[1,58],34:[1,59],38:[1,28],40:[1,27],41:26},{18:[2,32],24:[2,32],38:[2,32]}], + defaultActions: {3:[2,2],16:[2,1],50:[2,41]}, + parseError: function parseError(str, hash) { + throw new Error(str); + }, + parse: function parse(input) { + var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == "undefined") + this.lexer.yylloc = {}; + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + var ranges = this.lexer.options && this.lexer.options.ranges; + if (typeof this.yy.parseError === "function") + this.parseError = this.yy.parseError; + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + function lex() { + var token; + token = self.lexer.lex() || 1; + if (typeof token !== "number") { + token = self.symbols_[token] || token; + } + return token; + } + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + if (!recovering) { + expected = []; + for (p in table[state]) + if (this.terminals_[p] && p > 2) { + expected.push("'" + this.terminals_[p] + "'"); + } + if (this.lexer.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected}); + } + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) + recovering--; + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column}; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + + + function stripFlags(open, close) { + return { + left: open.charAt(2) === '~', + right: close.charAt(0) === '~' || close.charAt(1) === '~' + }; + } + + /* Jison generated lexer */ + var lexer = (function(){ + var lexer = ({EOF:1, + parseError:function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput:function (input) { + this._input = input; + this._more = this._less = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0}; + if (this.options.ranges) this.yylloc.range = [0,0]; + this.offset = 0; + return this; + }, + input:function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) this.yylloc.range[1]++; + + this._input = this._input.slice(1); + return ch; + }, + unput:function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length-len-1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length-1); + this.matched = this.matched.substr(0, this.matched.length-1); + + if (lines.length-1) this.yylineno -= lines.length-1; + var r = this.yylloc.range; + + this.yylloc = {first_line: this.yylloc.first_line, + last_line: this.yylineno+1, + first_column: this.yylloc.first_column, + last_column: lines ? + (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length: + this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + return this; + }, + more:function () { + this._more = true; + return this; + }, + less:function (n) { + this.unput(this.match.slice(n)); + }, + pastInput:function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput:function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20-next.length); + } + return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, ""); + }, + showPosition:function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c+"^"; + }, + next:function () { + if (this.done) { + return this.EOF; + } + if (!this._input) this.done = true; + + var token, + match, + tempMatch, + index, + col, + lines; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i=0;i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (!this.options.flex) break; + } + } + if (match) { + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) this.yylineno += lines.length; + this.yylloc = {first_line: this.yylloc.last_line, + last_line: this.yylineno+1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length}; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]); + if (this.done && this._input) this.done = false; + if (token) return token; + else return; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(), + {text: "", token: null, line: this.yylineno}); + } + }, + lex:function lex() { + var r = this.next(); + if (typeof r !== 'undefined') { + return r; + } else { + return this.lex(); + } + }, + begin:function begin(condition) { + this.conditionStack.push(condition); + }, + popState:function popState() { + return this.conditionStack.pop(); + }, + _currentRules:function _currentRules() { + return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules; + }, + topState:function () { + return this.conditionStack[this.conditionStack.length-2]; + }, + pushState:function begin(condition) { + this.begin(condition); + }}); + lexer.options = {}; + lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { + + + function strip(start, end) { + return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end); + } + + + var YYSTATE=YY_START + switch($avoiding_name_collisions) { + case 0: + if(yy_.yytext.slice(-2) === "\\\\") { + strip(0,1); + this.begin("mu"); + } else if(yy_.yytext.slice(-1) === "\\") { + strip(0,1); + this.begin("emu"); + } else { + this.begin("mu"); + } + if(yy_.yytext) return 14; + + break; + case 1:return 14; + break; + case 2: + this.popState(); + return 14; + + break; + case 3:strip(0,4); this.popState(); return 15; + break; + case 4:return 25; + break; + case 5:return 16; + break; + case 6:return 20; + break; + case 7:return 19; + break; + case 8:return 19; + break; + case 9:return 23; + break; + case 10:return 22; + break; + case 11:this.popState(); this.begin('com'); + break; + case 12:strip(3,5); this.popState(); return 15; + break; + case 13:return 22; + break; + case 14:return 39; + break; + case 15:return 38; + break; + case 16:return 38; + break; + case 17:return 42; + break; + case 18:// ignore whitespace + break; + case 19:this.popState(); return 24; + break; + case 20:this.popState(); return 18; + break; + case 21:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 32; + break; + case 22:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 32; + break; + case 23:return 40; + break; + case 24:return 34; + break; + case 25:return 34; + break; + case 26:return 33; + break; + case 27:return 38; + break; + case 28:yy_.yytext = strip(1,2); return 38; + break; + case 29:return 'INVALID'; + break; + case 30:return 5; + break; + } + }; + lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s])))/,/^(?:false(?=([~}\s])))/,/^(?:-?[0-9]+(?=([~}\s])))/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/]; + lexer.conditions = {"mu":{"rules":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[3],"inclusive":false},"INITIAL":{"rules":[0,1,30],"inclusive":true}}; + return lexer;})() + parser.lexer = lexer; + function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser; + return new Parser; + })();__exports__ = handlebars; + /* jshint ignore:end */ + return __exports__; +})(); + +// handlebars/compiler/base.js +var __module8__ = (function(__dependency1__, __dependency2__) { + "use strict"; + var __exports__ = {}; + var parser = __dependency1__; + var AST = __dependency2__; + + __exports__.parser = parser; + + function parse(input) { + // Just return if an already-compile AST was passed in. + if(input.constructor === AST.ProgramNode) { return input; } + + parser.yy = AST; + return parser.parse(input); + } + + __exports__.parse = parse; + return __exports__; +})(__module9__, __module7__); + +// handlebars/compiler/javascript-compiler.js +var __module11__ = (function(__dependency1__) { + "use strict"; + var __exports__; + var COMPILER_REVISION = __dependency1__.COMPILER_REVISION; + var REVISION_CHANGES = __dependency1__.REVISION_CHANGES; + var log = __dependency1__.log; + + function Literal(value) { + this.value = value; + } + + function JavaScriptCompiler() {} + + JavaScriptCompiler.prototype = { + // PUBLIC API: You can override these methods in a subclass to provide + // alternative compiled forms for name lookup and buffering semantics + nameLookup: function(parent, name /* , type*/) { + var wrap, + ret; + if (parent.indexOf('depth') === 0) { + wrap = true; + } + + if (/^[0-9]+$/.test(name)) { + ret = parent + "[" + name + "]"; + } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { + ret = parent + "." + name; + } + else { + ret = parent + "['" + name + "']"; + } + + if (wrap) { + return '(' + parent + ' && ' + ret + ')'; + } else { + return ret; + } + }, + + compilerInfo: function() { + var revision = COMPILER_REVISION, + versions = REVISION_CHANGES[revision]; + return "this.compilerInfo = ["+revision+",'"+versions+"'];\n"; + }, + + appendToBuffer: function(string) { + if (this.environment.isSimple) { + return "return " + string + ";"; + } else { + return { + appendToBuffer: true, + content: string, + toString: function() { return "buffer += " + string + ";"; } + }; + } + }, + + initializeBuffer: function() { + return this.quotedString(""); + }, + + namespace: "Handlebars", + // END PUBLIC API + + compile: function(environment, options, context, asObject) { + this.environment = environment; + this.options = options || {}; + + log('debug', this.environment.disassemble() + "\n\n"); + + this.name = this.environment.name; + this.isChild = !!context; + this.context = context || { + programs: [], + environments: [], + aliases: { } + }; + + this.preamble(); + + this.stackSlot = 0; + this.stackVars = []; + this.registers = { list: [] }; + this.compileStack = []; + this.inlineStack = []; + + this.compileChildren(environment, options); + + var opcodes = environment.opcodes, opcode; + + this.i = 0; + + for(var l=opcodes.length; this.i 0) { + this.source[1] = this.source[1] + ", " + locals.join(", "); + } + + // Generate minimizer alias mappings + if (!this.isChild) { + for (var alias in this.context.aliases) { + if (this.context.aliases.hasOwnProperty(alias)) { + this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias]; + } + } + } + + if (this.source[1]) { + this.source[1] = "var " + this.source[1].substring(2) + ";"; + } + + // Merge children + if (!this.isChild) { + this.source[1] += '\n' + this.context.programs.join('\n') + '\n'; + } + + if (!this.environment.isSimple) { + this.pushSource("return buffer;"); + } + + var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"]; + + for(var i=0, l=this.environment.depths.list.length; i this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); } + return this.topStackName(); + }, + topStackName: function() { + return "stack" + this.stackSlot; + }, + flushInline: function() { + var inlineStack = this.inlineStack; + if (inlineStack.length) { + this.inlineStack = []; + for (var i = 0, len = inlineStack.length; i < len; i++) { + var entry = inlineStack[i]; + if (entry instanceof Literal) { + this.compileStack.push(entry); + } else { + this.pushStack(entry); + } + } + } + }, + isInline: function() { + return this.inlineStack.length; + }, + + popStack: function(wrapped) { + var inline = this.isInline(), + item = (inline ? this.inlineStack : this.compileStack).pop(); + + if (!wrapped && (item instanceof Literal)) { + return item.value; + } else { + if (!inline) { + this.stackSlot--; + } + return item; + } + }, + + topStack: function(wrapped) { + var stack = (this.isInline() ? this.inlineStack : this.compileStack), + item = stack[stack.length - 1]; + + if (!wrapped && (item instanceof Literal)) { + return item.value; + } else { + return item; + } + }, + + quotedString: function(str) { + return '"' + str + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 + .replace(/\u2029/g, '\\u2029') + '"'; + }, + + setupHelper: function(paramSize, name, missingParams) { + var params = []; + this.setupParams(paramSize, params, missingParams); + var foundHelper = this.nameLookup('helpers', name, 'helper'); + + return { + params: params, + name: foundHelper, + callParams: ["depth0"].concat(params).join(", "), + helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ") + }; + }, + + // the params and contexts arguments are passed in arrays + // to fill in + setupParams: function(paramSize, params, useRegister) { + var options = [], contexts = [], types = [], param, inverse, program; + + options.push("hash:" + this.popStack()); + + inverse = this.popStack(); + program = this.popStack(); + + // Avoid setting fn and inverse if neither are set. This allows + // helpers to do a check for `if (options.fn)` + if (program || inverse) { + if (!program) { + this.context.aliases.self = "this"; + program = "self.noop"; + } + + if (!inverse) { + this.context.aliases.self = "this"; + inverse = "self.noop"; + } + + options.push("inverse:" + inverse); + options.push("fn:" + program); + } + + for(var i=0; i= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var compiler = this.c; - var options = this.options; - options.delimiters = tags; - var text = val.call(cx, text); - text = (text == null) ? String(text) : text.toString(); - this.b(compiler.compile(text, options).render(cx, partials)); - return false; - }, - - // template result buffering - b: (useArrayBuffer) ? function(s) { this.buf.push(s); } : - function(s) { this.buf += s; }, - fl: (useArrayBuffer) ? function() { var r = this.buf.join(''); this.buf = []; return r; } : - function() { var r = this.buf; this.buf = ''; return r; }, - - // lambda replace section - ls: function(val, ctx, partials, inverted, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = null; - - if (!inverted && this.c && val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - t = val.call(cx); - - if (typeof t == 'function') { - if (inverted) { - return true; - } else if (this.c) { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = val.call(cx); - - if (typeof result == 'function') { - result = coerceToString(result.call(cx)); - if (this.c && ~result.indexOf("{\u007B")) { - return this.c.compile(result, this.options).render(cx, partials); - } - } - - return coerceToString(result); - } - - }; - - var rAmp = /&/g, - rLt = //g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - - function coerceToString(val) { - return String((val === null || val === undefined) ? '' : val); - } - - function hoganEscape(str) { - str = coerceToString(str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - -})(typeof exports !== 'undefined' ? exports : Hogan); - - - - -(function (Hogan) { - // Setup regex assignments - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/, - rQuot = /\"/g, - rNewline = /\n/g, - rCr = /\r/g, - rSlash = /\\/g, - tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - Hogan.scan = function scan(text, delimiters) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - tag = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (!tokens[j].tag) { - if ((next = tokens[j+1]) && next.tag == '>') { - // set indent to token value - next.indent = tokens[j].toString() - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}); - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag, - closeIndex = text.indexOf(close, index), - delimiters = trim( - text.substring(text.indexOf('=', index) + 1, closeIndex) - ).split(' '); - - otag = delimiters[0]; - ctag = delimiters[1]; - - return closeIndex + close.length - 1; - } - - if (delimiters) { - delimiters = delimiters.split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text.charAt(i) == '\n') { - filterLine(seenTag); - } else { - buf += text.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag = tagTypes[text.charAt(i + 1)]; - tagType = tag ? text.charAt(i + 1) : '_v'; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text, i)) { - tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, - i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); - buf = ''; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == '{') { - if (ctag == '}}') { - i++; - } else { - cleanTripleStache(tokens[tokens.length - 1]); - } - } - } else { - buf += text.charAt(i); - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function cleanTripleStache(token) { - if (token.n.substr(token.n.length - 1) === '}') { - token.n = token.n.substring(0, token.n.length - 1); - } - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - function tagChange(tag, text, index) { - if (text.charAt(index) != tag.charAt(0)) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text.charAt(index + i) != tag.charAt(i)) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length === 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - Hogan.generate = function (tree, text, options) { - var code = 'var _=this;_.b(i=i||"");' + walk(tree) + 'return _.fl();'; - if (options.asString) { - return 'function(c,p,i){' + code + ';}'; - } - - return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan, options); - } - - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r'); - } - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i]); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text('"' + esc(tree[i]) + '"'); - } - } - return code; - } - - function section(nodes, id, method, start, end, tags) { - return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + - 'c,p,0,' + start + ',' + end + ',"' + tags + '")){' + - '_.rs(c,p,' + - 'function(c,p,_){' + - walk(nodes) + - '});c.pop();}'; - } - - function invertedSection(nodes, id, method) { - return 'if(!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + - walk(nodes) + - '};'; - } - - function partial(tok) { - return '_.b(_.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '"));'; - } - - function tripleStache(id, method) { - return '_.b(_.t(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function variable(id, method) { - return '_.b(_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return '_.b(' + id + ');'; - } - - Hogan.parse = function(tokens, text, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - Hogan.cache = {}; - - Hogan.compile = function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - // delimiters: A string that overrides the default delimiters. - // Example: "<% %>" - // - options = options || {}; - - var key = text + '||' + !!options.asString; - - var t = this.cache[key]; - - if (t) { - return t; - } - - t = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options); - return this.cache[key] = t; - }; -})(typeof exports !== 'undefined' ? exports : Hogan); - diff --git a/js/jquery-1.10.2.min.js b/js/jquery-1.10.2.min.js new file mode 100644 index 0000000000..da4170647d --- /dev/null +++ b/js/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
                                                ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="

                                                a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
                                                t
                                                ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
                                                ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
                                                ","
                                                "],area:[1,"",""],param:[1,"",""],thead:[1,"","
                                                "],tr:[2,"","
                                                "],col:[2,"","
                                                "],td:[3,"","
                                                "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
                                                ","
                                                "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x(" +