Guest User

bootstrap.js

a guest
Mar 12th, 2012
374
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* ===================================================
  2.  * bootstrap-transition.js v2.0.1
  3.  * http://twitter.github.com/bootstrap/javascript.html#transitions
  4.  * ===================================================
  5.  * Copyright 2012 Twitter, Inc.
  6.  *
  7.  * Licensed under the Apache License, Version 2.0 (the "License");
  8.  * you may not use this file except in compliance with the License.
  9.  * You may obtain a copy of the License at
  10.  *
  11.  * http://www.apache.org/licenses/LICENSE-2.0
  12.  *
  13.  * Unless required by applicable law or agreed to in writing, software
  14.  * distributed under the License is distributed on an "AS IS" BASIS,
  15.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16.  * See the License for the specific language governing permissions and
  17.  * limitations under the License.
  18.  * ========================================================== */
  19.  
  20. !function( $ ) {
  21.  
  22.   $(function () {
  23.  
  24.     "use strict"
  25.  
  26.     /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
  27.      * ======================================================= */
  28.  
  29.     $.support.transition = (function () {
  30.       var thisBody = document.body || document.documentElement
  31.         , thisStyle = thisBody.style
  32.         , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
  33.  
  34.       return support && {
  35.         end: (function () {
  36.           var transitionEnd = "TransitionEnd"
  37.           if ( $.browser.webkit ) {
  38.             transitionEnd = "webkitTransitionEnd"
  39.           } else if ( $.browser.mozilla ) {
  40.             transitionEnd = "transitionend"
  41.           } else if ( $.browser.opera ) {
  42.             transitionEnd = "oTransitionEnd"
  43.           }
  44.           return transitionEnd
  45.         }())
  46.       }
  47.     })()
  48.  
  49.   })
  50.  
  51. }( window.jQuery );/* ==========================================================
  52.  * bootstrap-alert.js v2.0.1
  53.  * http://twitter.github.com/bootstrap/javascript.html#alerts
  54.  * ==========================================================
  55.  * Copyright 2012 Twitter, Inc.
  56.  *
  57.  * Licensed under the Apache License, Version 2.0 (the "License");
  58.  * you may not use this file except in compliance with the License.
  59.  * You may obtain a copy of the License at
  60.  *
  61.  * http://www.apache.org/licenses/LICENSE-2.0
  62.  *
  63.  * Unless required by applicable law or agreed to in writing, software
  64.  * distributed under the License is distributed on an "AS IS" BASIS,
  65.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  66.  * See the License for the specific language governing permissions and
  67.  * limitations under the License.
  68.  * ========================================================== */
  69.  
  70.  
  71. !function( $ ){
  72.  
  73.   "use strict"
  74.  
  75.  /* ALERT CLASS DEFINITION
  76.   * ====================== */
  77.  
  78.   var dismiss = '[data-dismiss="alert"]'
  79.     , Alert = function ( el ) {
  80.         $(el).on('click', dismiss, this.close)
  81.       }
  82.  
  83.   Alert.prototype = {
  84.  
  85.     constructor: Alert
  86.  
  87.   , close: function ( e ) {
  88.       var $this = $(this)
  89.         , selector = $this.attr('data-target')
  90.         , $parent
  91.  
  92.       if (!selector) {
  93.         selector = $this.attr('href')
  94.         selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
  95.       }
  96.  
  97.       $parent = $(selector)
  98.       $parent.trigger('close')
  99.  
  100.       e && e.preventDefault()
  101.  
  102.       $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
  103.  
  104.       $parent
  105.         .trigger('close')
  106.         .removeClass('in')
  107.  
  108.       function removeElement() {
  109.         $parent
  110.           .trigger('closed')
  111.           .remove()
  112.       }
  113.  
  114.       $.support.transition && $parent.hasClass('fade') ?
  115.         $parent.on($.support.transition.end, removeElement) :
  116.         removeElement()
  117.     }
  118.  
  119.   }
  120.  
  121.  
  122.  /* ALERT PLUGIN DEFINITION
  123.   * ======================= */
  124.  
  125.   $.fn.alert = function ( option ) {
  126.     return this.each(function () {
  127.       var $this = $(this)
  128.         , data = $this.data('alert')
  129.       if (!data) $this.data('alert', (data = new Alert(this)))
  130.       if (typeof option == 'string') data[option].call($this)
  131.     })
  132.   }
  133.  
  134.   $.fn.alert.Constructor = Alert
  135.  
  136.  
  137.  /* ALERT DATA-API
  138.   * ============== */
  139.  
  140.   $(function () {
  141.     $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
  142.   })
  143.  
  144. }( window.jQuery );/* ============================================================
  145.  * bootstrap-button.js v2.0.1
  146.  * http://twitter.github.com/bootstrap/javascript.html#buttons
  147.  * ============================================================
  148.  * Copyright 2012 Twitter, Inc.
  149.  *
  150.  * Licensed under the Apache License, Version 2.0 (the "License");
  151.  * you may not use this file except in compliance with the License.
  152.  * You may obtain a copy of the License at
  153.  *
  154.  * http://www.apache.org/licenses/LICENSE-2.0
  155.  *
  156.  * Unless required by applicable law or agreed to in writing, software
  157.  * distributed under the License is distributed on an "AS IS" BASIS,
  158.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  159.  * See the License for the specific language governing permissions and
  160.  * limitations under the License.
  161.  * ============================================================ */
  162.  
  163. !function( $ ){
  164.  
  165.   "use strict"
  166.  
  167.  /* BUTTON PUBLIC CLASS DEFINITION
  168.   * ============================== */
  169.  
  170.   var Button = function ( element, options ) {
  171.     this.$element = $(element)
  172.     this.options = $.extend({}, $.fn.button.defaults, options)
  173.   }
  174.  
  175.   Button.prototype = {
  176.  
  177.       constructor: Button
  178.  
  179.     , setState: function ( state ) {
  180.         var d = 'disabled'
  181.           , $el = this.$element
  182.           , data = $el.data()
  183.           , val = $el.is('input') ? 'val' : 'html'
  184.  
  185.         state = state + 'Text'
  186.         data.resetText || $el.data('resetText', $el[val]())
  187.  
  188.         $el[val](data[state] || this.options[state])
  189.  
  190.         // push to event loop to allow forms to submit
  191.         setTimeout(function () {
  192.           state == 'loadingText' ?
  193.             $el.addClass(d).attr(d, d) :
  194.             $el.removeClass(d).removeAttr(d)
  195.         }, 0)
  196.       }
  197.  
  198.     , toggle: function () {
  199.         var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
  200.  
  201.         $parent && $parent
  202.           .find('.active')
  203.           .removeClass('active')
  204.  
  205.         this.$element.toggleClass('active')
  206.       }
  207.  
  208.   }
  209.  
  210.  
  211.  /* BUTTON PLUGIN DEFINITION
  212.   * ======================== */
  213.  
  214.   $.fn.button = function ( option ) {
  215.     return this.each(function () {
  216.       var $this = $(this)
  217.         , data = $this.data('button')
  218.         , options = typeof option == 'object' && option
  219.       if (!data) $this.data('button', (data = new Button(this, options)))
  220.       if (option == 'toggle') data.toggle()
  221.       else if (option) data.setState(option)
  222.     })
  223.   }
  224.  
  225.   $.fn.button.defaults = {
  226.     loadingText: 'loading...'
  227.   }
  228.  
  229.   $.fn.button.Constructor = Button
  230.  
  231.  
  232.  /* BUTTON DATA-API
  233.   * =============== */
  234.  
  235.   $(function () {
  236.     $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
  237.       var $btn = $(e.target)
  238.       if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
  239.       $btn.button('toggle')
  240.     })
  241.   })
  242.  
  243. }( window.jQuery );/* ==========================================================
  244.  * bootstrap-carousel.js v2.0.1
  245.  * http://twitter.github.com/bootstrap/javascript.html#carousel
  246.  * ==========================================================
  247.  * Copyright 2012 Twitter, Inc.
  248.  *
  249.  * Licensed under the Apache License, Version 2.0 (the "License");
  250.  * you may not use this file except in compliance with the License.
  251.  * You may obtain a copy of the License at
  252.  *
  253.  * http://www.apache.org/licenses/LICENSE-2.0
  254.  *
  255.  * Unless required by applicable law or agreed to in writing, software
  256.  * distributed under the License is distributed on an "AS IS" BASIS,
  257.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  258.  * See the License for the specific language governing permissions and
  259.  * limitations under the License.
  260.  * ========================================================== */
  261.  
  262.  
  263. !function( $ ){
  264.  
  265.   "use strict"
  266.  
  267.  /* CAROUSEL CLASS DEFINITION
  268.   * ========================= */
  269.  
  270.   var Carousel = function (element, options) {
  271.     this.$element = $(element)
  272.     this.options = $.extend({}, $.fn.carousel.defaults, options)
  273.     this.options.slide && this.slide(this.options.slide)
  274.   }
  275.  
  276.   Carousel.prototype = {
  277.  
  278.     cycle: function () {
  279.       this.interval = setInterval($.proxy(this.next, this), this.options.interval)
  280.       return this
  281.     }
  282.  
  283.   , to: function (pos) {
  284.       var $active = this.$element.find('.active')
  285.         , children = $active.parent().children()
  286.         , activePos = children.index($active)
  287.         , that = this
  288.  
  289.       if (pos > (children.length - 1) || pos < 0) return
  290.  
  291.       if (this.sliding) {
  292.         return this.$element.one('slid', function () {
  293.           that.to(pos)
  294.         })
  295.       }
  296.  
  297.       if (activePos == pos) {
  298.         return this.pause().cycle()
  299.       }
  300.  
  301.       return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
  302.     }
  303.  
  304.   , pause: function () {
  305.       clearInterval(this.interval)
  306.       this.interval = null
  307.       return this
  308.     }
  309.  
  310.   , next: function () {
  311.       if (this.sliding) return
  312.       return this.slide('next')
  313.     }
  314.  
  315.   , prev: function () {
  316.       if (this.sliding) return
  317.       return this.slide('prev')
  318.     }
  319.  
  320.   , slide: function (type, next) {
  321.       var $active = this.$element.find('.active')
  322.         , $next = next || $active[type]()
  323.         , isCycling = this.interval
  324.         , direction = type == 'next' ? 'left' : 'right'
  325.         , fallback  = type == 'next' ? 'first' : 'last'
  326.         , that = this
  327.  
  328.       if (!$next.length) return
  329.  
  330.       this.sliding = true
  331.  
  332.       isCycling && this.pause()
  333.  
  334.       $next = $next.length ? $next : this.$element.find('.item')[fallback]()
  335.  
  336.       if (!$.support.transition && this.$element.hasClass('slide')) {
  337.         this.$element.trigger('slide')
  338.         $active.removeClass('active')
  339.         $next.addClass('active')
  340.         this.sliding = false
  341.         this.$element.trigger('slid')
  342.       } else {
  343.         $next.addClass(type)
  344.         $next[0].offsetWidth // force reflow
  345.         $active.addClass(direction)
  346.         $next.addClass(direction)
  347.         this.$element.trigger('slide')
  348.         this.$element.one($.support.transition.end, function () {
  349.           $next.removeClass([type, direction].join(' ')).addClass('active')
  350.           $active.removeClass(['active', direction].join(' '))
  351.           that.sliding = false
  352.           setTimeout(function () { that.$element.trigger('slid') }, 0)
  353.         })
  354.       }
  355.  
  356.       isCycling && this.cycle()
  357.  
  358.       return this
  359.     }
  360.  
  361.   }
  362.  
  363.  
  364.  /* CAROUSEL PLUGIN DEFINITION
  365.   * ========================== */
  366.  
  367.   $.fn.carousel = function ( option ) {
  368.     return this.each(function () {
  369.       var $this = $(this)
  370.         , data = $this.data('carousel')
  371.         , options = typeof option == 'object' && option
  372.       if (!data) $this.data('carousel', (data = new Carousel(this, options)))
  373.       if (typeof option == 'number') data.to(option)
  374.       else if (typeof option == 'string' || (option = options.slide)) data[option]()
  375.       else data.cycle()
  376.     })
  377.   }
  378.  
  379.   $.fn.carousel.defaults = {
  380.     interval: 5000
  381.   }
  382.  
  383.   $.fn.carousel.Constructor = Carousel
  384.  
  385.  
  386.  /* CAROUSEL DATA-API
  387.   * ================= */
  388.  
  389.   $(function () {
  390.     $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
  391.       var $this = $(this), href
  392.         , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
  393.         , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
  394.       $target.carousel(options)
  395.       e.preventDefault()
  396.     })
  397.   })
  398.  
  399. }( window.jQuery );/* =============================================================
  400.  * bootstrap-collapse.js v2.0.1
  401.  * http://twitter.github.com/bootstrap/javascript.html#collapse
  402.  * =============================================================
  403.  * Copyright 2012 Twitter, Inc.
  404.  *
  405.  * Licensed under the Apache License, Version 2.0 (the "License");
  406.  * you may not use this file except in compliance with the License.
  407.  * You may obtain a copy of the License at
  408.  *
  409.  * http://www.apache.org/licenses/LICENSE-2.0
  410.  *
  411.  * Unless required by applicable law or agreed to in writing, software
  412.  * distributed under the License is distributed on an "AS IS" BASIS,
  413.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  414.  * See the License for the specific language governing permissions and
  415.  * limitations under the License.
  416.  * ============================================================ */
  417.  
  418. !function( $ ){
  419.  
  420.   "use strict"
  421.  
  422.   var Collapse = function ( element, options ) {
  423.     this.$element = $(element)
  424.     this.options = $.extend({}, $.fn.collapse.defaults, options)
  425.  
  426.     if (this.options["parent"]) {
  427.       this.$parent = $(this.options["parent"])
  428.     }
  429.  
  430.     this.options.toggle && this.toggle()
  431.   }
  432.  
  433.   Collapse.prototype = {
  434.  
  435.     constructor: Collapse
  436.  
  437.   , dimension: function () {
  438.       var hasWidth = this.$element.hasClass('width')
  439.       return hasWidth ? 'width' : 'height'
  440.     }
  441.  
  442.   , show: function () {
  443.       var dimension = this.dimension()
  444.         , scroll = $.camelCase(['scroll', dimension].join('-'))
  445.         , actives = this.$parent && this.$parent.find('.in')
  446.         , hasData
  447.  
  448.       if (actives && actives.length) {
  449.         hasData = actives.data('collapse')
  450.         actives.collapse('hide')
  451.         hasData || actives.data('collapse', null)
  452.       }
  453.  
  454.       this.$element[dimension](0)
  455.       this.transition('addClass', 'show', 'shown')
  456.       this.$element[dimension](this.$element[0][scroll])
  457.  
  458.     }
  459.  
  460.   , hide: function () {
  461.       var dimension = this.dimension()
  462.       this.reset(this.$element[dimension]())
  463.       this.transition('removeClass', 'hide', 'hidden')
  464.       this.$element[dimension](0)
  465.     }
  466.  
  467.   , reset: function ( size ) {
  468.       var dimension = this.dimension()
  469.  
  470.       this.$element
  471.         .removeClass('collapse')
  472.         [dimension](size || 'auto')
  473.         [0].offsetWidth
  474.  
  475.       this.$element.addClass('collapse')
  476.     }
  477.  
  478.   , transition: function ( method, startEvent, completeEvent ) {
  479.       var that = this
  480.         , complete = function () {
  481.             if (startEvent == 'show') that.reset()
  482.             that.$element.trigger(completeEvent)
  483.           }
  484.  
  485.       this.$element
  486.         .trigger(startEvent)
  487.         [method]('in')
  488.  
  489.       $.support.transition && this.$element.hasClass('collapse') ?
  490.         this.$element.one($.support.transition.end, complete) :
  491.         complete()
  492.     }
  493.  
  494.   , toggle: function () {
  495.       this[this.$element.hasClass('in') ? 'hide' : 'show']()
  496.     }
  497.  
  498.   }
  499.  
  500.   /* COLLAPSIBLE PLUGIN DEFINITION
  501.   * ============================== */
  502.  
  503.   $.fn.collapse = function ( option ) {
  504.     return this.each(function () {
  505.       var $this = $(this)
  506.         , data = $this.data('collapse')
  507.         , options = typeof option == 'object' && option
  508.       if (!data) $this.data('collapse', (data = new Collapse(this, options)))
  509.       if (typeof option == 'string') data[option]()
  510.     })
  511.   }
  512.  
  513.   $.fn.collapse.defaults = {
  514.     toggle: true
  515.   }
  516.  
  517.   $.fn.collapse.Constructor = Collapse
  518.  
  519.  
  520.  /* COLLAPSIBLE DATA-API
  521.   * ==================== */
  522.  
  523.   $(function () {
  524.     $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
  525.       var $this = $(this), href
  526.         , target = $this.attr('data-target')
  527.           || e.preventDefault()
  528.           || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
  529.         , option = $(target).data('collapse') ? 'toggle' : $this.data()
  530.       $(target).collapse(option)
  531.     })
  532.   })
  533.  
  534. }( window.jQuery );/* ============================================================
  535.  * bootstrap-dropdown.js v2.0.1
  536.  * http://twitter.github.com/bootstrap/javascript.html#dropdowns
  537.  * ============================================================
  538.  * Copyright 2012 Twitter, Inc.
  539.  *
  540.  * Licensed under the Apache License, Version 2.0 (the "License");
  541.  * you may not use this file except in compliance with the License.
  542.  * You may obtain a copy of the License at
  543.  *
  544.  * http://www.apache.org/licenses/LICENSE-2.0
  545.  *
  546.  * Unless required by applicable law or agreed to in writing, software
  547.  * distributed under the License is distributed on an "AS IS" BASIS,
  548.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  549.  * See the License for the specific language governing permissions and
  550.  * limitations under the License.
  551.  * ============================================================ */
  552.  
  553.  
  554. !function( $ ){
  555.  
  556.   "use strict"
  557.  
  558.  /* DROPDOWN CLASS DEFINITION
  559.   * ========================= */
  560.  
  561.   var toggle = '[data-toggle="dropdown"]'
  562.     , Dropdown = function ( element ) {
  563.         var $el = $(element).on('click.dropdown.data-api', this.toggle)
  564.         $('html').on('click.dropdown.data-api', function () {
  565.           $el.parent().removeClass('open')
  566.         })
  567.       }
  568.  
  569.   Dropdown.prototype = {
  570.  
  571.     constructor: Dropdown
  572.  
  573.   , toggle: function ( e ) {
  574.       var $this = $(this)
  575.         , selector = $this.attr('data-target')
  576.         , $parent
  577.         , isActive
  578.  
  579.       if (!selector) {
  580.         selector = $this.attr('href')
  581.         selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
  582.       }
  583.  
  584.       $parent = $(selector)
  585.       $parent.length || ($parent = $this.parent())
  586.  
  587.       isActive = $parent.hasClass('open')
  588.  
  589.       clearMenus()
  590.       !isActive && $parent.toggleClass('open')
  591.  
  592.       return false
  593.     }
  594.  
  595.   }
  596.  
  597.   function clearMenus() {
  598.     $(toggle).parent().removeClass('open')
  599.   }
  600.  
  601.  
  602.   /* DROPDOWN PLUGIN DEFINITION
  603.    * ========================== */
  604.  
  605.   $.fn.dropdown = function ( option ) {
  606.     return this.each(function () {
  607.       var $this = $(this)
  608.         , data = $this.data('dropdown')
  609.       if (!data) $this.data('dropdown', (data = new Dropdown(this)))
  610.       if (typeof option == 'string') data[option].call($this)
  611.     })
  612.   }
  613.  
  614.   $.fn.dropdown.Constructor = Dropdown
  615.  
  616.  
  617.   /* APPLY TO STANDARD DROPDOWN ELEMENTS
  618.    * =================================== */
  619.  
  620.   $(function () {
  621.     $('html').on('click.dropdown.data-api', clearMenus)
  622.     $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
  623.   })
  624.  
  625. }( window.jQuery );/* =========================================================
  626.  * bootstrap-modal.js v2.0.1
  627.  * http://twitter.github.com/bootstrap/javascript.html#modals
  628.  * =========================================================
  629.  * Copyright 2012 Twitter, Inc.
  630.  *
  631.  * Licensed under the Apache License, Version 2.0 (the "License");
  632.  * you may not use this file except in compliance with the License.
  633.  * You may obtain a copy of the License at
  634.  *
  635.  * http://www.apache.org/licenses/LICENSE-2.0
  636.  *
  637.  * Unless required by applicable law or agreed to in writing, software
  638.  * distributed under the License is distributed on an "AS IS" BASIS,
  639.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  640.  * See the License for the specific language governing permissions and
  641.  * limitations under the License.
  642.  * ========================================================= */
  643.  
  644.  
  645. !function( $ ){
  646.  
  647.   "use strict"
  648.  
  649.  /* MODAL CLASS DEFINITION
  650.   * ====================== */
  651.  
  652.   var Modal = function ( content, options ) {
  653.     this.options = options
  654.     this.$element = $(content)
  655.       .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
  656.   }
  657.  
  658.   Modal.prototype = {
  659.  
  660.       constructor: Modal
  661.  
  662.     , toggle: function () {
  663.         return this[!this.isShown ? 'show' : 'hide']()
  664.       }
  665.  
  666.     , show: function () {
  667.         var that = this
  668.  
  669.         if (this.isShown) return
  670.  
  671.         $('body').addClass('modal-open')
  672.  
  673.         this.isShown = true
  674.         this.$element.trigger('show')
  675.  
  676.         escape.call(this)
  677.         backdrop.call(this, function () {
  678.           var transition = $.support.transition && that.$element.hasClass('fade')
  679.  
  680.           !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
  681.  
  682.           that.$element
  683.             .show()
  684.  
  685.           if (transition) {
  686.             that.$element[0].offsetWidth // force reflow
  687.           }
  688.  
  689.           that.$element.addClass('in')
  690.  
  691.           transition ?
  692.             that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
  693.             that.$element.trigger('shown')
  694.  
  695.         })
  696.       }
  697.  
  698.     , hide: function ( e ) {
  699.         e && e.preventDefault()
  700.  
  701.         if (!this.isShown) return
  702.  
  703.         var that = this
  704.         this.isShown = false
  705.  
  706.         $('body').removeClass('modal-open')
  707.  
  708.         escape.call(this)
  709.  
  710.         this.$element
  711.           .trigger('hide')
  712.           .removeClass('in')
  713.  
  714.         $.support.transition && this.$element.hasClass('fade') ?
  715.           hideWithTransition.call(this) :
  716.           hideModal.call(this)
  717.       }
  718.  
  719.   }
  720.  
  721.  
  722.  /* MODAL PRIVATE METHODS
  723.   * ===================== */
  724.  
  725.   function hideWithTransition() {
  726.     var that = this
  727.       , timeout = setTimeout(function () {
  728.           that.$element.off($.support.transition.end)
  729.           hideModal.call(that)
  730.         }, 500)
  731.  
  732.     this.$element.one($.support.transition.end, function () {
  733.       clearTimeout(timeout)
  734.       hideModal.call(that)
  735.     })
  736.   }
  737.  
  738.   function hideModal( that ) {
  739.     this.$element
  740.       .hide()
  741.       .trigger('hidden')
  742.  
  743.     backdrop.call(this)
  744.   }
  745.  
  746.   function backdrop( callback ) {
  747.     var that = this
  748.       , animate = this.$element.hasClass('fade') ? 'fade' : ''
  749.  
  750.     if (this.isShown && this.options.backdrop) {
  751.       var doAnimate = $.support.transition && animate
  752.  
  753.       this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
  754.         .appendTo(document.body)
  755.  
  756.       if (this.options.backdrop != 'static') {
  757.         this.$backdrop.click($.proxy(this.hide, this))
  758.       }
  759.  
  760.       if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
  761.  
  762.       this.$backdrop.addClass('in')
  763.  
  764.       doAnimate ?
  765.         this.$backdrop.one($.support.transition.end, callback) :
  766.         callback()
  767.  
  768.     } else if (!this.isShown && this.$backdrop) {
  769.       this.$backdrop.removeClass('in')
  770.  
  771.       $.support.transition && this.$element.hasClass('fade')?
  772.         this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
  773.         removeBackdrop.call(this)
  774.  
  775.     } else if (callback) {
  776.       callback()
  777.     }
  778.   }
  779.  
  780.   function removeBackdrop() {
  781.     this.$backdrop.remove()
  782.     this.$backdrop = null
  783.   }
  784.  
  785.   function escape() {
  786.     var that = this
  787.     if (this.isShown && this.options.keyboard) {
  788.       $(document).on('keyup.dismiss.modal', function ( e ) {
  789.         e.which == 27 && that.hide()
  790.       })
  791.     } else if (!this.isShown) {
  792.       $(document).off('keyup.dismiss.modal')
  793.     }
  794.   }
  795.  
  796.  
  797.  /* MODAL PLUGIN DEFINITION
  798.   * ======================= */
  799.  
  800.   $.fn.modal = function ( option ) {
  801.     return this.each(function () {
  802.       var $this = $(this)
  803.         , data = $this.data('modal')
  804.         , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
  805.       if (!data) $this.data('modal', (data = new Modal(this, options)))
  806.       if (typeof option == 'string') data[option]()
  807.       else if (options.show) data.show()
  808.     })
  809.   }
  810.  
  811.   $.fn.modal.defaults = {
  812.       backdrop: true
  813.     , keyboard: true
  814.     , show: true
  815.   }
  816.  
  817.   $.fn.modal.Constructor = Modal
  818.  
  819.  
  820.  /* MODAL DATA-API
  821.   * ============== */
  822.  
  823.   $(function () {
  824.     $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
  825.       var $this = $(this), href
  826.         , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
  827.         , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
  828.  
  829.       e.preventDefault()
  830.       $target.modal(option)
  831.     })
  832.   })
  833.  
  834. }( window.jQuery );/* ===========================================================
  835.  * bootstrap-tooltip.js v2.0.1
  836.  * http://twitter.github.com/bootstrap/javascript.html#tooltips
  837.  * Inspired by the original jQuery.tipsy by Jason Frame
  838.  * ===========================================================
  839.  * Copyright 2012 Twitter, Inc.
  840.  *
  841.  * Licensed under the Apache License, Version 2.0 (the "License");
  842.  * you may not use this file except in compliance with the License.
  843.  * You may obtain a copy of the License at
  844.  *
  845.  * http://www.apache.org/licenses/LICENSE-2.0
  846.  *
  847.  * Unless required by applicable law or agreed to in writing, software
  848.  * distributed under the License is distributed on an "AS IS" BASIS,
  849.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  850.  * See the License for the specific language governing permissions and
  851.  * limitations under the License.
  852.  * ========================================================== */
  853.  
  854. !function( $ ) {
  855.  
  856.   "use strict"
  857.  
  858.  /* TOOLTIP PUBLIC CLASS DEFINITION
  859.   * =============================== */
  860.  
  861.   var Tooltip = function ( element, options ) {
  862.     this.init('tooltip', element, options)
  863.   }
  864.  
  865.   Tooltip.prototype = {
  866.  
  867.     constructor: Tooltip
  868.  
  869.   , init: function ( type, element, options ) {
  870.       var eventIn
  871.         , eventOut
  872.  
  873.       this.type = type
  874.       this.$element = $(element)
  875.       this.options = this.getOptions(options)
  876.       this.enabled = true
  877.  
  878.       if (this.options.trigger != 'manual') {
  879.         eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
  880.         eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
  881.         this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
  882.         this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
  883.       }
  884.  
  885.       this.options.selector ?
  886.         (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
  887.         this.fixTitle()
  888.     }
  889.  
  890.   , getOptions: function ( options ) {
  891.       options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
  892.  
  893.       if (options.delay && typeof options.delay == 'number') {
  894.         options.delay = {
  895.           show: options.delay
  896.         , hide: options.delay
  897.         }
  898.       }
  899.  
  900.       return options
  901.     }
  902.  
  903.   , enter: function ( e ) {
  904.       var self = $(e.currentTarget)[this.type](this._options).data(this.type)
  905.  
  906.       if (!self.options.delay || !self.options.delay.show) {
  907.         self.show()
  908.       } else {
  909.         self.hoverState = 'in'
  910.         setTimeout(function() {
  911.           if (self.hoverState == 'in') {
  912.             self.show()
  913.           }
  914.         }, self.options.delay.show)
  915.       }
  916.     }
  917.  
  918.   , leave: function ( e ) {
  919.       var self = $(e.currentTarget)[this.type](this._options).data(this.type)
  920.  
  921.       if (!self.options.delay || !self.options.delay.hide) {
  922.         self.hide()
  923.       } else {
  924.         self.hoverState = 'out'
  925.         setTimeout(function() {
  926.           if (self.hoverState == 'out') {
  927.             self.hide()
  928.           }
  929.         }, self.options.delay.hide)
  930.       }
  931.     }
  932.  
  933.   , show: function () {
  934.       var $tip
  935.         , inside
  936.         , pos
  937.         , actualWidth
  938.         , actualHeight
  939.         , placement
  940.         , tp
  941.  
  942.       if (this.hasContent() && this.enabled) {
  943.         $tip = this.tip()
  944.         this.setContent()
  945.  
  946.         if (this.options.animation) {
  947.           $tip.addClass('fade')
  948.         }
  949.  
  950.         placement = typeof this.options.placement == 'function' ?
  951.           this.options.placement.call(this, $tip[0], this.$element[0]) :
  952.           this.options.placement
  953.  
  954.         inside = /in/.test(placement)
  955.  
  956.         $tip
  957.           .remove()
  958.           .css({ top: 0, left: 0, display: 'block' })
  959.           .appendTo(inside ? this.$element : document.body)
  960.  
  961.         pos = this.getPosition(inside)
  962.  
  963.         actualWidth = $tip[0].offsetWidth
  964.         actualHeight = $tip[0].offsetHeight
  965.  
  966.         switch (inside ? placement.split(' ')[1] : placement) {
  967.           case 'bottom':
  968.             tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
  969.             break
  970.           case 'top':
  971.             tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
  972.             break
  973.           case 'left':
  974.             tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
  975.             break
  976.           case 'right':
  977.             tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
  978.             break
  979.         }
  980.  
  981.         $tip
  982.           .css(tp)
  983.           .addClass(placement)
  984.           .addClass('in')
  985.       }
  986.     }
  987.  
  988.   , setContent: function () {
  989.       var $tip = this.tip()
  990.       $tip.find('.tooltip-inner').html(this.getTitle())
  991.       $tip.removeClass('fade in top bottom left right')
  992.     }
  993.  
  994.   , hide: function () {
  995.       var that = this
  996.         , $tip = this.tip()
  997.  
  998.       $tip.removeClass('in')
  999.  
  1000.       function removeWithAnimation() {
  1001.         var timeout = setTimeout(function () {
  1002.           $tip.off($.support.transition.end).remove()
  1003.         }, 500)
  1004.  
  1005.         $tip.one($.support.transition.end, function () {
  1006.           clearTimeout(timeout)
  1007.           $tip.remove()
  1008.         })
  1009.       }
  1010.  
  1011.       $.support.transition && this.$tip.hasClass('fade') ?
  1012.         removeWithAnimation() :
  1013.         $tip.remove()
  1014.     }
  1015.  
  1016.   , fixTitle: function () {
  1017.       var $e = this.$element
  1018.       if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
  1019.         $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
  1020.       }
  1021.     }
  1022.  
  1023.   , hasContent: function () {
  1024.       return this.getTitle()
  1025.     }
  1026.  
  1027.   , getPosition: function (inside) {
  1028.       return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
  1029.         width: this.$element[0].offsetWidth
  1030.       , height: this.$element[0].offsetHeight
  1031.       })
  1032.     }
  1033.  
  1034.   , getTitle: function () {
  1035.       var title
  1036.         , $e = this.$element
  1037.         , o = this.options
  1038.  
  1039.       title = $e.attr('data-original-title')
  1040.         || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
  1041.  
  1042.       title = title.toString().replace(/(^\s*|\s*$)/, "")
  1043.  
  1044.       return title
  1045.     }
  1046.  
  1047.   , tip: function () {
  1048.       return this.$tip = this.$tip || $(this.options.template)
  1049.     }
  1050.  
  1051.   , validate: function () {
  1052.       if (!this.$element[0].parentNode) {
  1053.         this.hide()
  1054.         this.$element = null
  1055.         this.options = null
  1056.       }
  1057.     }
  1058.  
  1059.   , enable: function () {
  1060.       this.enabled = true
  1061.     }
  1062.  
  1063.   , disable: function () {
  1064.       this.enabled = false
  1065.     }
  1066.  
  1067.   , toggleEnabled: function () {
  1068.       this.enabled = !this.enabled
  1069.     }
  1070.  
  1071.   , toggle: function () {
  1072.       this[this.tip().hasClass('in') ? 'hide' : 'show']()
  1073.     }
  1074.  
  1075.   }
  1076.  
  1077.  
  1078.  /* TOOLTIP PLUGIN DEFINITION
  1079.   * ========================= */
  1080.  
  1081.   $.fn.tooltip = function ( option ) {
  1082.     return this.each(function () {
  1083.       var $this = $(this)
  1084.         , data = $this.data('tooltip')
  1085.         , options = typeof option == 'object' && option
  1086.       if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
  1087.       if (typeof option == 'string') data[option]()
  1088.     })
  1089.   }
  1090.  
  1091.   $.fn.tooltip.Constructor = Tooltip
  1092.  
  1093.   $.fn.tooltip.defaults = {
  1094.     animation: true
  1095.   , delay: 0
  1096.   , selector: false
  1097.   , placement: 'top'
  1098.   , trigger: 'hover'
  1099.   , title: ''
  1100.   , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
  1101.   }
  1102.  
  1103. }( window.jQuery );/* ===========================================================
  1104.  * bootstrap-popover.js v2.0.1
  1105.  * http://twitter.github.com/bootstrap/javascript.html#popovers
  1106.  * ===========================================================
  1107.  * Copyright 2012 Twitter, Inc.
  1108.  *
  1109.  * Licensed under the Apache License, Version 2.0 (the "License");
  1110.  * you may not use this file except in compliance with the License.
  1111.  * You may obtain a copy of the License at
  1112.  *
  1113.  * http://www.apache.org/licenses/LICENSE-2.0
  1114.  *
  1115.  * Unless required by applicable law or agreed to in writing, software
  1116.  * distributed under the License is distributed on an "AS IS" BASIS,
  1117.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  1118.  * See the License for the specific language governing permissions and
  1119.  * limitations under the License.
  1120.  * =========================================================== */
  1121.  
  1122.  
  1123. !function( $ ) {
  1124.  
  1125.  "use strict"
  1126.  
  1127.   var Popover = function ( element, options ) {
  1128.     this.init('popover', element, options)
  1129.   }
  1130.  
  1131.   /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
  1132.      ========================================== */
  1133.  
  1134.   Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
  1135.  
  1136.     constructor: Popover
  1137.  
  1138.   , setContent: function () {
  1139.       var $tip = this.tip()
  1140.         , title = this.getTitle()
  1141.         , content = this.getContent()
  1142.  
  1143.       $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
  1144.       $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
  1145.  
  1146.       $tip.removeClass('fade top bottom left right in')
  1147.     }
  1148.  
  1149.   , hasContent: function () {
  1150.       return this.getTitle() || this.getContent()
  1151.     }
  1152.  
  1153.   , getContent: function () {
  1154.       var content
  1155.         , $e = this.$element
  1156.         , o = this.options
  1157.  
  1158.       content = $e.attr('data-content')
  1159.         || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
  1160.  
  1161.       content = content.toString().replace(/(^\s*|\s*$)/, "")
  1162.  
  1163.       return content
  1164.     }
  1165.  
  1166.   , tip: function() {
  1167.       if (!this.$tip) {
  1168.         this.$tip = $(this.options.template)
  1169.       }
  1170.       return this.$tip
  1171.     }
  1172.  
  1173.   })
  1174.  
  1175.  
  1176.  /* POPOVER PLUGIN DEFINITION
  1177.   * ======================= */
  1178.  
  1179.   $.fn.popover = function ( option ) {
  1180.     return this.each(function () {
  1181.       var $this = $(this)
  1182.         , data = $this.data('popover')
  1183.         , options = typeof option == 'object' && option
  1184.       if (!data) $this.data('popover', (data = new Popover(this, options)))
  1185.       if (typeof option == 'string') data[option]()
  1186.     })
  1187.   }
  1188.  
  1189.   $.fn.popover.Constructor = Popover
  1190.  
  1191.   $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
  1192.     placement: 'right'
  1193.   , content: ''
  1194.   , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
  1195.   })
  1196.  
  1197. }( window.jQuery );/* =============================================================
  1198.  * bootstrap-scrollspy.js v2.0.1
  1199.  * http://twitter.github.com/bootstrap/javascript.html#scrollspy
  1200.  * =============================================================
  1201.  * Copyright 2012 Twitter, Inc.
  1202.  *
  1203.  * Licensed under the Apache License, Version 2.0 (the "License");
  1204.  * you may not use this file except in compliance with the License.
  1205.  * You may obtain a copy of the License at
  1206.  *
  1207.  * http://www.apache.org/licenses/LICENSE-2.0
  1208.  *
  1209.  * Unless required by applicable law or agreed to in writing, software
  1210.  * distributed under the License is distributed on an "AS IS" BASIS,
  1211.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  1212.  * See the License for the specific language governing permissions and
  1213.  * limitations under the License.
  1214.  * ============================================================== */
  1215.  
  1216. !function ( $ ) {
  1217.  
  1218.   "use strict"
  1219.  
  1220.   /* SCROLLSPY CLASS DEFINITION
  1221.    * ========================== */
  1222.  
  1223.   function ScrollSpy( element, options) {
  1224.     var process = $.proxy(this.process, this)
  1225.       , $element = $(element).is('body') ? $(window) : $(element)
  1226.       , href
  1227.     this.options = $.extend({}, $.fn.scrollspy.defaults, options)
  1228.     this.$scrollElement = $element.on('scroll.scroll.data-api', process)
  1229.     this.selector = (this.options.target
  1230.       || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
  1231.       || '') + ' .nav li > a'
  1232.     this.$body = $('body').on('click.scroll.data-api', this.selector, process)
  1233.     this.refresh()
  1234.     this.process()
  1235.   }
  1236.  
  1237.   ScrollSpy.prototype = {
  1238.  
  1239.       constructor: ScrollSpy
  1240.  
  1241.     , refresh: function () {
  1242.         this.targets = this.$body
  1243.           .find(this.selector)
  1244.           .map(function () {
  1245.             var href = $(this).attr('href')
  1246.             return /^#\w/.test(href) && $(href).length ? href : null
  1247.           })
  1248.  
  1249.         this.offsets = $.map(this.targets, function (id) {
  1250.           return $(id).position().top
  1251.         })
  1252.       }
  1253.  
  1254.     , process: function () {
  1255.         var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
  1256.           , offsets = this.offsets
  1257.           , targets = this.targets
  1258.           , activeTarget = this.activeTarget
  1259.           , i
  1260.  
  1261.         for (i = offsets.length; i--;) {
  1262.           activeTarget != targets[i]
  1263.             && scrollTop >= offsets[i]
  1264.             && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
  1265.             && this.activate( targets[i] )
  1266.         }
  1267.       }
  1268.  
  1269.     , activate: function (target) {
  1270.         var active
  1271.  
  1272.         this.activeTarget = target
  1273.  
  1274.         this.$body
  1275.           .find(this.selector).parent('.active')
  1276.           .removeClass('active')
  1277.  
  1278.         active = this.$body
  1279.           .find(this.selector + '[href="' + target + '"]')
  1280.           .parent('li')
  1281.           .addClass('active')
  1282.  
  1283.         if ( active.parent('.dropdown-menu') )  {
  1284.           active.closest('li.dropdown').addClass('active')
  1285.         }
  1286.       }
  1287.  
  1288.   }
  1289.  
  1290.  
  1291.  /* SCROLLSPY PLUGIN DEFINITION
  1292.   * =========================== */
  1293.  
  1294.   $.fn.scrollspy = function ( option ) {
  1295.     return this.each(function () {
  1296.       var $this = $(this)
  1297.         , data = $this.data('scrollspy')
  1298.         , options = typeof option == 'object' && option
  1299.       if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
  1300.       if (typeof option == 'string') data[option]()
  1301.     })
  1302.   }
  1303.  
  1304.   $.fn.scrollspy.Constructor = ScrollSpy
  1305.  
  1306.   $.fn.scrollspy.defaults = {
  1307.     offset: 10
  1308.   }
  1309.  
  1310.  
  1311.  /* SCROLLSPY DATA-API
  1312.   * ================== */
  1313.  
  1314.   $(function () {
  1315.     $('[data-spy="scroll"]').each(function () {
  1316.       var $spy = $(this)
  1317.       $spy.scrollspy($spy.data())
  1318.     })
  1319.   })
  1320.  
  1321. }( window.jQuery );/* ========================================================
  1322.  * bootstrap-tab.js v2.0.1
  1323.  * http://twitter.github.com/bootstrap/javascript.html#tabs
  1324.  * ========================================================
  1325.  * Copyright 2012 Twitter, Inc.
  1326.  *
  1327.  * Licensed under the Apache License, Version 2.0 (the "License");
  1328.  * you may not use this file except in compliance with the License.
  1329.  * You may obtain a copy of the License at
  1330.  *
  1331.  * http://www.apache.org/licenses/LICENSE-2.0
  1332.  *
  1333.  * Unless required by applicable law or agreed to in writing, software
  1334.  * distributed under the License is distributed on an "AS IS" BASIS,
  1335.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  1336.  * See the License for the specific language governing permissions and
  1337.  * limitations under the License.
  1338.  * ======================================================== */
  1339.  
  1340.  
  1341. !function( $ ){
  1342.  
  1343.   "use strict"
  1344.  
  1345.  /* TAB CLASS DEFINITION
  1346.   * ==================== */
  1347.  
  1348.   var Tab = function ( element ) {
  1349.     this.element = $(element)
  1350.   }
  1351.  
  1352.   Tab.prototype = {
  1353.  
  1354.     constructor: Tab
  1355.  
  1356.   , show: function () {
  1357.       var $this = this.element
  1358.         , $ul = $this.closest('ul:not(.dropdown-menu)')
  1359.         , selector = $this.attr('data-target')
  1360.         , previous
  1361.         , $target
  1362.  
  1363.       if (!selector) {
  1364.         selector = $this.attr('href')
  1365.         selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
  1366.       }
  1367.  
  1368.       if ( $this.parent('li').hasClass('active') ) return
  1369.  
  1370.       previous = $ul.find('.active a').last()[0]
  1371.  
  1372.       $this.trigger({
  1373.         type: 'show'
  1374.       , relatedTarget: previous
  1375.       })
  1376.  
  1377.       $target = $(selector)
  1378.  
  1379.       this.activate($this.parent('li'), $ul)
  1380.       this.activate($target, $target.parent(), function () {
  1381.         $this.trigger({
  1382.           type: 'shown'
  1383.         , relatedTarget: previous
  1384.         })
  1385.       })
  1386.     }
  1387.  
  1388.   , activate: function ( element, container, callback) {
  1389.       var $active = container.find('> .active')
  1390.         , transition = callback
  1391.             && $.support.transition
  1392.             && $active.hasClass('fade')
  1393.  
  1394.       function next() {
  1395.         $active
  1396.           .removeClass('active')
  1397.           .find('> .dropdown-menu > .active')
  1398.           .removeClass('active')
  1399.  
  1400.         element.addClass('active')
  1401.  
  1402.         if (transition) {
  1403.           element[0].offsetWidth // reflow for transition
  1404.           element.addClass('in')
  1405.         } else {
  1406.           element.removeClass('fade')
  1407.         }
  1408.  
  1409.         if ( element.parent('.dropdown-menu') ) {
  1410.           element.closest('li.dropdown').addClass('active')
  1411.         }
  1412.  
  1413.         callback && callback()
  1414.       }
  1415.  
  1416.       transition ?
  1417.         $active.one($.support.transition.end, next) :
  1418.         next()
  1419.  
  1420.       $active.removeClass('in')
  1421.     }
  1422.   }
  1423.  
  1424.  
  1425.  /* TAB PLUGIN DEFINITION
  1426.   * ===================== */
  1427.  
  1428.   $.fn.tab = function ( option ) {
  1429.     return this.each(function () {
  1430.       var $this = $(this)
  1431.         , data = $this.data('tab')
  1432.       if (!data) $this.data('tab', (data = new Tab(this)))
  1433.       if (typeof option == 'string') data[option]()
  1434.     })
  1435.   }
  1436.  
  1437.   $.fn.tab.Constructor = Tab
  1438.  
  1439.  
  1440.  /* TAB DATA-API
  1441.   * ============ */
  1442.  
  1443.   $(function () {
  1444.     $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
  1445.       e.preventDefault()
  1446.       $(this).tab('show')
  1447.     })
  1448.   })
  1449.  
  1450. }( window.jQuery );/* =============================================================
  1451.  * bootstrap-typeahead.js v2.0.1
  1452.  * http://twitter.github.com/bootstrap/javascript.html#typeahead
  1453.  * =============================================================
  1454.  * Copyright 2012 Twitter, Inc.
  1455.  *
  1456.  * Licensed under the Apache License, Version 2.0 (the "License");
  1457.  * you may not use this file except in compliance with the License.
  1458.  * You may obtain a copy of the License at
  1459.  *
  1460.  * http://www.apache.org/licenses/LICENSE-2.0
  1461.  *
  1462.  * Unless required by applicable law or agreed to in writing, software
  1463.  * distributed under the License is distributed on an "AS IS" BASIS,
  1464.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  1465.  * See the License for the specific language governing permissions and
  1466.  * limitations under the License.
  1467.  * ============================================================ */
  1468.  
  1469. !function( $ ){
  1470.  
  1471.   "use strict"
  1472.  
  1473.   var Typeahead = function ( element, options ) {
  1474.     this.$element = $(element)
  1475.     this.options = $.extend({}, $.fn.typeahead.defaults, options)
  1476.     this.matcher = this.options.matcher || this.matcher
  1477.     this.sorter = this.options.sorter || this.sorter
  1478.     this.highlighter = this.options.highlighter || this.highlighter
  1479.     this.$menu = $(this.options.menu).appendTo('body')
  1480.     this.source = this.options.source
  1481.     this.shown = false
  1482.     this.listen()
  1483.   }
  1484.  
  1485.   Typeahead.prototype = {
  1486.  
  1487.     constructor: Typeahead
  1488.  
  1489.   , select: function () {
  1490.       var val = this.$menu.find('.active').attr('data-value')
  1491.       this.$element.val(val)
  1492.       return this.hide()
  1493.     }
  1494.  
  1495.   , show: function () {
  1496.       var pos = $.extend({}, this.$element.offset(), {
  1497.         height: this.$element[0].offsetHeight
  1498.       })
  1499.  
  1500.       this.$menu.css({
  1501.         top: pos.top + pos.height
  1502.       , left: pos.left
  1503.       })
  1504.  
  1505.       this.$menu.show()
  1506.       this.shown = true
  1507.       return this
  1508.     }
  1509.  
  1510.   , hide: function () {
  1511.       this.$menu.hide()
  1512.       this.shown = false
  1513.       return this
  1514.     }
  1515.  
  1516.   , lookup: function (event) {
  1517.       var that = this
  1518.         , items
  1519.         , q
  1520.  
  1521.       this.query = this.$element.val()
  1522.  
  1523.       if (!this.query) {
  1524.         return this.shown ? this.hide() : this
  1525.       }
  1526.  
  1527.       items = $.grep(this.source, function (item) {
  1528.         if (that.matcher(item)) return item
  1529.       })
  1530.  
  1531.       items = this.sorter(items)
  1532.  
  1533.       if (!items.length) {
  1534.         return this.shown ? this.hide() : this
  1535.       }
  1536.  
  1537.       return this.render(items.slice(0, this.options.items)).show()
  1538.     }
  1539.  
  1540.   , matcher: function (item) {
  1541.       return ~item.toLowerCase().indexOf(this.query.toLowerCase())
  1542.     }
  1543.  
  1544.   , sorter: function (items) {
  1545.       var beginswith = []
  1546.         , caseSensitive = []
  1547.         , caseInsensitive = []
  1548.         , item
  1549.  
  1550.       while (item = items.shift()) {
  1551.         if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
  1552.         else if (~item.indexOf(this.query)) caseSensitive.push(item)
  1553.         else caseInsensitive.push(item)
  1554.       }
  1555.  
  1556.       return beginswith.concat(caseSensitive, caseInsensitive)
  1557.     }
  1558.  
  1559.   , highlighter: function (item) {
  1560.       return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
  1561.         return '<strong>' + match + '</strong>'
  1562.       })
  1563.     }
  1564.  
  1565.   , render: function (items) {
  1566.       var that = this
  1567.  
  1568.       items = $(items).map(function (i, item) {
  1569.         i = $(that.options.item).attr('data-value', item)
  1570.         i.find('a').html(that.highlighter(item))
  1571.         return i[0]
  1572.       })
  1573.  
  1574.       items.first().addClass('active')
  1575.       this.$menu.html(items)
  1576.       return this
  1577.     }
  1578.  
  1579.   , next: function (event) {
  1580.       var active = this.$menu.find('.active').removeClass('active')
  1581.         , next = active.next()
  1582.  
  1583.       if (!next.length) {
  1584.         next = $(this.$menu.find('li')[0])
  1585.       }
  1586.  
  1587.       next.addClass('active')
  1588.     }
  1589.  
  1590.   , prev: function (event) {
  1591.       var active = this.$menu.find('.active').removeClass('active')
  1592.         , prev = active.prev()
  1593.  
  1594.       if (!prev.length) {
  1595.         prev = this.$menu.find('li').last()
  1596.       }
  1597.  
  1598.       prev.addClass('active')
  1599.     }
  1600.  
  1601.   , listen: function () {
  1602.       this.$element
  1603.         .on('blur',     $.proxy(this.blur, this))
  1604.         .on('keypress', $.proxy(this.keypress, this))
  1605.         .on('keyup',    $.proxy(this.keyup, this))
  1606.  
  1607.       if ($.browser.webkit || $.browser.msie) {
  1608.         this.$element.on('keydown', $.proxy(this.keypress, this))
  1609.       }
  1610.  
  1611.       this.$menu
  1612.         .on('click', $.proxy(this.click, this))
  1613.         .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
  1614.     }
  1615.  
  1616.   , keyup: function (e) {
  1617.       e.stopPropagation()
  1618.       e.preventDefault()
  1619.  
  1620.       switch(e.keyCode) {
  1621.         case 40: // down arrow
  1622.         case 38: // up arrow
  1623.           break
  1624.  
  1625.         case 9: // tab
  1626.         case 13: // enter
  1627.           if (!this.shown) return
  1628.           this.select()
  1629.           break
  1630.  
  1631.         case 27: // escape
  1632.           this.hide()
  1633.           break
  1634.  
  1635.         default:
  1636.           this.lookup()
  1637.       }
  1638.  
  1639.   }
  1640.  
  1641.   , keypress: function (e) {
  1642.       e.stopPropagation()
  1643.       if (!this.shown) return
  1644.  
  1645.       switch(e.keyCode) {
  1646.         case 9: // tab
  1647.         case 13: // enter
  1648.         case 27: // escape
  1649.           e.preventDefault()
  1650.           break
  1651.  
  1652.         case 38: // up arrow
  1653.           e.preventDefault()
  1654.           this.prev()
  1655.           break
  1656.  
  1657.         case 40: // down arrow
  1658.           e.preventDefault()
  1659.           this.next()
  1660.           break
  1661.       }
  1662.     }
  1663.  
  1664.   , blur: function (e) {
  1665.       var that = this
  1666.       e.stopPropagation()
  1667.       e.preventDefault()
  1668.       setTimeout(function () { that.hide() }, 150)
  1669.     }
  1670.  
  1671.   , click: function (e) {
  1672.       e.stopPropagation()
  1673.       e.preventDefault()
  1674.       this.select()
  1675.     }
  1676.  
  1677.   , mouseenter: function (e) {
  1678.       this.$menu.find('.active').removeClass('active')
  1679.       $(e.currentTarget).addClass('active')
  1680.     }
  1681.  
  1682.   }
  1683.  
  1684.  
  1685.   /* TYPEAHEAD PLUGIN DEFINITION
  1686.    * =========================== */
  1687.  
  1688.   $.fn.typeahead = function ( option ) {
  1689.     return this.each(function () {
  1690.       var $this = $(this)
  1691.         , data = $this.data('typeahead')
  1692.         , options = typeof option == 'object' && option
  1693.       if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
  1694.       if (typeof option == 'string') data[option]()
  1695.     })
  1696.   }
  1697.  
  1698.   $.fn.typeahead.defaults = {
  1699.     source: []
  1700.   , items: 8
  1701.   , menu: '<ul class="typeahead dropdown-menu"></ul>'
  1702.   , item: '<li><a href="#"></a></li>'
  1703.   }
  1704.  
  1705.   $.fn.typeahead.Constructor = Typeahead
  1706.  
  1707.  
  1708.  /* TYPEAHEAD DATA-API
  1709.   * ================== */
  1710.  
  1711.   $(function () {
  1712.     $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
  1713.       var $this = $(this)
  1714.       if ($this.data('typeahead')) return
  1715.       e.preventDefault()
  1716.       $this.typeahead($this.data())
  1717.     })
  1718.   })
  1719.  
  1720. }( window.jQuery );
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×