Commits

Christoffer Niska committed fb4fbc2 Merge

merged heads

Comments (0)

Files changed (1021)

assets/js/bootstrap.js

+/* ===================================================
+ * bootstrap-transition.js v2.1.0-wip
+ * http://twitter.github.com/bootstrap/javascript.html#transitions
+ * ===================================================
+ * Copyright 2012 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.
+ * ========================================================== */
+
+
+!function ($) {
+
+    $(function () {
+
+        "use strict"; // jshint ;_;
+
+
+        /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
+         * ======================================================= */
+
+        $.support.transition = (function () {
+
+            var transitionEnd = (function () {
+
+                var el = document.createElement('bootstrap')
+                    , transEndEventNames = {
+                        'WebkitTransition' : 'webkitTransitionEnd'
+                        ,  'MozTransition'    : 'transitionend'
+                        ,  'OTransition'      : 'oTransitionEnd otransitionend'
+                        ,  'transition'       : 'transitionend'
+                    }
+                    , name
+
+                for (name in transEndEventNames){
+                    if (el.style[name] !== undefined) {
+                        return transEndEventNames[name]
+                    }
+                }
+
+            }())
+
+            return transitionEnd && {
+                end: transitionEnd
+            }
+
+        })()
+
+    })
+
+}(window.jQuery);/* ==========================================================
+ * bootstrap-alert.js v2.1.0-wip
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2012 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.
+ * ========================================================== */
+
+
+!function ($) {
+
+    "use strict"; // jshint ;_;
+
+
+    /* ALERT CLASS DEFINITION
+     * ====================== */
+
+    var dismiss = '[data-dismiss="alert"]'
+        , Alert = function (el) {
+            $(el).on('click', dismiss, this.close)
+        }
+
+    Alert.prototype.close = function (e) {
+        var $this = $(this)
+            , selector = $this.attr('data-target')
+            , $parent
+
+        if (!selector) {
+            selector = $this.attr('href')
+            selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+        }
+
+        $parent = $(selector)
+
+        e && e.preventDefault()
+
+        $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
+
+        $parent.trigger(e = $.Event('close'))
+
+        if (e.isDefaultPrevented()) return
+
+        $parent.removeClass('in')
+
+        function removeElement() {
+            $parent
+                .trigger('closed')
+                .remove()
+        }
+
+        $.support.transition && $parent.hasClass('fade') ?
+            $parent.on($.support.transition.end, removeElement) :
+            removeElement()
+    }
+
+
+    /* ALERT PLUGIN DEFINITION
+     * ======================= */
+
+    $.fn.alert = function (option) {
+        return this.each(function () {
+            var $this = $(this)
+                , data = $this.data('alert')
+            if (!data) $this.data('alert', (data = new Alert(this)))
+            if (typeof option == 'string') data[option].call($this)
+        })
+    }
+
+    $.fn.alert.Constructor = Alert
+
+
+    /* ALERT DATA-API
+     * ============== */
+
+    $(function () {
+        $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
+    })
+
+}(window.jQuery);/* ============================================================
+ * bootstrap-button.js v2.1.0-wip
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
+ * ============================================================
+ * Copyright 2012 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.
+ * ============================================================ */
+
+
+!function ($) {
+
+    "use strict"; // jshint ;_;
+
+
+    /* BUTTON PUBLIC CLASS DEFINITION
+     * ============================== */
+
+    var Button = function (element, options) {
+        this.$element = $(element)
+        this.options = $.extend({}, $.fn.button.defaults, options)
+    }
+
+    Button.prototype.setState = function (state) {
+        var d = 'disabled'
+            , $el = this.$element
+            , data = $el.data()
+            , val = $el.is('input') ? 'val' : 'html'
+
+        state = state + 'Text'
+        data.resetText || $el.data('resetText', $el[val]())
+
+        $el[val](data[state] || this.options[state])
+
+        // push to event loop to allow forms to submit
+        setTimeout(function () {
+            state == 'loadingText' ?
+                $el.addClass(d).attr(d, d) :
+                $el.removeClass(d).removeAttr(d)
+        }, 0)
+    }
+
+    Button.prototype.toggle = function () {
+        var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
+
+        $parent && $parent
+            .find('.active')
+            .removeClass('active')
+
+        this.$element.toggleClass('active')
+    }
+
+
+    /* BUTTON PLUGIN DEFINITION
+     * ======================== */
+
+    $.fn.button = function (option) {
+        return this.each(function () {
+            var $this = $(this)
+                , data = $this.data('button')
+                , options = typeof option == 'object' && option
+            if (!data) $this.data('button', (data = new Button(this, options)))
+            if (option == 'toggle') data.toggle()
+            else if (option) data.setState(option)
+        })
+    }
+
+    $.fn.button.defaults = {
+        loadingText: 'loading...'
+    }
+
+    $.fn.button.Constructor = Button
+
+
+    /* BUTTON DATA-API
+     * =============== */
+
+    $(function () {
+        $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
+            var $btn = $(e.target)
+            if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+            $btn.button('toggle')
+        })
+    })
+
+}(window.jQuery);/* ==========================================================
+ * bootstrap-carousel.js v2.1.0-wip
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
+ * ==========================================================
+ * Copyright 2012 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.
+ * ========================================================== */
+
+
+!function ($) {
+
+    "use strict"; // jshint ;_;
+
+
+    /* CAROUSEL CLASS DEFINITION
+     * ========================= */
+
+    var Carousel = function (element, options) {
+        this.$element = $(element)
+        this.options = options
+        this.options.slide && this.slide(this.options.slide)
+        this.options.pause == 'hover' && this.$element
+            .on('mouseenter', $.proxy(this.pause, this))
+            .on('mouseleave', $.proxy(this.cycle, this))
+    }
+
+    Carousel.prototype = {
+
+        cycle: function (e) {
+            if (!e) this.paused = false
+            this.options.interval
+                && !this.paused
+            && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+            return this
+        }
+
+        , to: function (pos) {
+            var $active = this.$element.find('.item.active')
+                , children = $active.parent().children()
+                , activePos = children.index($active)
+                , that = this
+
+            if (pos > (children.length - 1) || pos < 0) return
+
+            if (this.sliding) {
+                return this.$element.one('slid', function () {
+                    that.to(pos)
+                })
+            }
+
+            if (activePos == pos) {
+                return this.pause().cycle()
+            }
+
+            return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
+        }
+
+        , pause: function (e) {
+            if (!e) this.paused = true
+            if (this.$element.find('.next, .prev').length && $.support.transition.end) {
+                this.$element.trigger($.support.transition.end)
+                this.cycle()
+            }
+            clearInterval(this.interval)
+            this.interval = null
+            return this
+        }
+
+        , next: function () {
+            if (this.sliding) return
+            return this.slide('next')
+        }
+
+        , prev: function () {
+            if (this.sliding) return
+            return this.slide('prev')
+        }
+
+        , slide: function (type, next) {
+            var $active = this.$element.find('.item.active')
+                , $next = next || $active[type]()
+                , isCycling = this.interval
+                , direction = type == 'next' ? 'left' : 'right'
+                , fallback  = type == 'next' ? 'first' : 'last'
+                , that = this
+                , e = $.Event('slide', {
+                    relatedTarget: $next[0]
+                })
+
+            this.sliding = true
+
+            isCycling && this.pause()
+
+            $next = $next.length ? $next : this.$element.find('.item')[fallback]()
+
+            if ($next.hasClass('active')) return
+
+            if ($.support.transition && this.$element.hasClass('slide')) {
+                this.$element.trigger(e)
+                if (e.isDefaultPrevented()) return
+                $next.addClass(type)
+                $next[0].offsetWidth // force reflow
+                $active.addClass(direction)
+                $next.addClass(direction)
+                this.$element.one($.support.transition.end, function () {
+                    $next.removeClass([type, direction].join(' ')).addClass('active')
+                    $active.removeClass(['active', direction].join(' '))
+                    that.sliding = false
+                    setTimeout(function () { that.$element.trigger('slid') }, 0)
+                })
+            } else {
+                this.$element.trigger(e)
+                if (e.isDefaultPrevented()) return
+                $active.removeClass('active')
+                $next.addClass('active')
+                this.sliding = false
+                this.$element.trigger('slid')
+            }
+
+            isCycling && this.cycle()
+
+            return this
+        }
+
+    }
+
+
+    /* CAROUSEL PLUGIN DEFINITION
+     * ========================== */
+
+    $.fn.carousel = function (option) {
+        return this.each(function () {
+            var $this = $(this)
+                , data = $this.data('carousel')
+                , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
+                , action = typeof option == 'string' ? option : options.slide
+            if (!data) $this.data('carousel', (data = new Carousel(this, options)))
+            if (typeof option == 'number') data.to(option)
+            else if (action) data[action]()
+            else if (options.interval) data.cycle()
+        })
+    }
+
+    $.fn.carousel.defaults = {
+        interval: 5000
+        , pause: 'hover'
+    }
+
+    $.fn.carousel.Constructor = Carousel
+
+
+    /* CAROUSEL DATA-API
+     * ================= */
+
+    $(function () {
+        $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
+            var $this = $(this), href
+                , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+                , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
+            $target.carousel(options)
+            e.preventDefault()
+        })
+    })
+
+}(window.jQuery);/* =============================================================
+ * bootstrap-collapse.js v2.1.0-wip
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
+ * =============================================================
+ * Copyright 2012 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.
+ * ============================================================ */
+
+
+!function ($) {
+
+    "use strict"; // jshint ;_;
+
+
+    /* COLLAPSE PUBLIC CLASS DEFINITION
+     * ================================ */
+
+    var Collapse = function (element, options) {
+        this.$element = $(element)
+        this.options = $.extend({}, $.fn.collapse.defaults, options)
+
+        if (this.options.parent) {
+            this.$parent = $(this.options.parent)
+        }
+
+        this.options.toggle && this.toggle()
+    }
+
+    Collapse.prototype = {
+
+        constructor: Collapse
+
+        , dimension: function () {
+            var hasWidth = this.$element.hasClass('width')
+            return hasWidth ? 'width' : 'height'
+        }
+
+        , show: function () {
+            var dimension
+                , scroll
+                , actives
+                , hasData
+
+            if (this.transitioning) return
+
+            dimension = this.dimension()
+            scroll = $.camelCase(['scroll', dimension].join('-'))
+            actives = this.$parent && this.$parent.find('> .accordion-group > .in')
+
+            if (actives && actives.length) {
+                hasData = actives.data('collapse')
+                if (hasData && hasData.transitioning) return
+                actives.collapse('hide')
+                hasData || actives.data('collapse', null)
+            }
+
+            this.$element[dimension](0)
+            this.transition('addClass', $.Event('show'), 'shown')
+            $.support.transition && this.$element[dimension](this.$element[0][scroll])
+        }
+
+        , hide: function () {
+            var dimension
+            if (this.transitioning) return
+            dimension = this.dimension()
+            this.reset(this.$element[dimension]())
+            this.transition('removeClass', $.Event('hide'), 'hidden')
+            this.$element[dimension](0)
+        }
+
+        , reset: function (size) {
+            var dimension = this.dimension()
+
+            this.$element
+                .removeClass('collapse')
+                [dimension](size || 'auto')
+                [0].offsetWidth
+
+            this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
+
+            return this
+        }
+
+        , transition: function (method, startEvent, completeEvent) {
+            var that = this
+                , complete = function () {
+                    if (startEvent.type == 'show') that.reset()
+                    that.transitioning = 0
+                    that.$element.trigger(completeEvent)
+                }
+
+            this.$element.trigger(startEvent)
+
+            if (startEvent.isDefaultPrevented()) return
+
+            this.transitioning = 1
+
+            this.$element[method]('in')
+
+            $.support.transition && this.$element.hasClass('collapse') ?
+                this.$element.one($.support.transition.end, complete) :
+                complete()
+        }
+
+        , toggle: function () {
+            this[this.$element.hasClass('in') ? 'hide' : 'show']()
+        }
+
+    }
+
+
+    /* COLLAPSIBLE PLUGIN DEFINITION
+     * ============================== */
+
+    $.fn.collapse = function (option) {
+        return this.each(function () {
+            var $this = $(this)
+                , data = $this.data('collapse')
+                , options = typeof option == 'object' && option
+            if (!data) $this.data('collapse', (data = new Collapse(this, options)))
+            if (typeof option == 'string') data[option]()
+        })
+    }
+
+    $.fn.collapse.defaults = {
+        toggle: true
+    }
+
+    $.fn.collapse.Constructor = Collapse
+
+
+    /* COLLAPSIBLE DATA-API
+     * ==================== */
+
+    $(function () {
+        $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
+            var $this = $(this), href
+                , target = $this.attr('data-target')
+                    || e.preventDefault()
+                    || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+                , option = $(target).data('collapse') ? 'toggle' : $this.data()
+            $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
+            $(target).collapse(option)
+        })
+    })
+
+}(window.jQuery);/* ============================================================
+ * bootstrap-dropdown.js v2.1.0-wip
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
+ * ============================================================
+ * Copyright 2012 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.
+ * ============================================================ */
+
+
+!function ($) {
+
+    "use strict"; // jshint ;_;
+
+
+    /* DROPDOWN CLASS DEFINITION
+     * ========================= */
+
+    var toggle = '[data-toggle=dropdown]'
+        , Dropdown = function (element) {
+            var $el = $(element).on('click.dropdown.data-api', this.toggle)
+            $('html').on('click.dropdown.data-api', function () {
+                $el.parent().removeClass('open')
+            })
+        }
+
+    Dropdown.prototype = {
+
+        constructor: Dropdown
+
+        , toggle: function (e) {
+            var $this = $(this)
+                , $parent
+                , isActive
+
+            if ($this.is('.disabled, :disabled')) return
+
+            $parent = getParent($this)
+
+            isActive = $parent.hasClass('open')
+
+            clearMenus()
+
+            if (!isActive) {
+                $parent.toggleClass('open')
+                $this.focus()
+            }
+
+            return false
+        }
+
+        , keydown: function (e) {
+            var $this
+                , $items
+                , $active
+                , $parent
+                , isActive
+                , index
+
+            if (!/(38|40|27)/.test(e.keyCode)) return
+
+            $this = $(this)
+
+            e.preventDefault()
+            e.stopPropagation()
+
+            if ($this.is('.disabled, :disabled')) return
+
+            $parent = getParent($this)
+
+            isActive = $parent.hasClass('open')
+
+            if (!isActive || (isActive && e.keyCode == 27)) return $this.click()
+
+            $items = $('[role=menu] li:not(.divider) a', $parent)
+
+            if (!$items.length) return
+
+            index = $items.index($items.filter(':focus'))
+
+            if (e.keyCode == 38 && index > 0) index--                                        // up
+            if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
+            if (!~index) index = 0
+
+            $items
+                .eq(index)
+                .focus()
+        }
+
+    }
+
+    function clearMenus() {
+        getParent($(toggle))
+            .removeClass('open')
+    }
+
+    function getParent($this) {
+        var selector = $this.attr('data-target')
+            , $parent
+
+        if (!selector) {
+            selector = $this.attr('href')
+            selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+        }
+
+        $parent = $(selector)
+        $parent.length || ($parent = $this.parent())
+
+        return $parent
+    }
+
+
+    /* DROPDOWN PLUGIN DEFINITION
+     * ========================== */
+
+    $.fn.dropdown = function (option) {
+        return this.each(function () {
+            var $this = $(this)
+                , data = $this.data('dropdown')
+            if (!data) $this.data('dropdown', (data = new Dropdown(this)))
+            if (typeof option == 'string') data[option].call($this)
+        })
+    }
+
+    $.fn.dropdown.Constructor = Dropdown
+
+
+    /* APPLY TO STANDARD DROPDOWN ELEMENTS
+     * =================================== */
+
+    $(function () {
+        $('html')
+            .on('click.dropdown.data-api', clearMenus)
+        $('body')
+            .on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() })
+            .on('click.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
+            .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
+    })
+
+}(window.jQuery);/* =========================================================
+ * bootstrap-modal.js v2.1.0-wip
+ * http://twitter.github.com/bootstrap/javascript.html#modals
+ * =========================================================
+ * Copyright 2012 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.
+ * ========================================================= */
+
+
+!function ($) {
+
+    "use strict"; // jshint ;_;
+
+
+    /* MODAL CLASS DEFINITION
+     * ====================== */
+
+    var Modal = function (element, options) {
+        this.options = options
+        this.$element = $(element)
+            .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
+        this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
+    }
+
+    Modal.prototype = {
+
+        constructor: Modal
+
+        , toggle: function () {
+            return this[!this.isShown ? 'show' : 'hide']()