├── static
├── bootstrap.zip
├── img
│ ├── glyphicons-halflings.png
│ └── glyphicons-halflings-white.png
├── js
│ ├── bootstrap-transition.js
│ ├── bootstrap-alert.js
│ ├── bootstrap-button.js
│ ├── bootstrap-popover.js
│ ├── bootstrap-tab.js
│ ├── bootstrap-dropdown.js
│ ├── bootstrap-scrollspy.js
│ ├── bootstrap-collapse.js
│ ├── bootstrap-carousel.js
│ ├── bootstrap-modal.js
│ ├── bootstrap-tooltip.js
│ ├── bootstrap-typeahead.js
│ ├── bootstrap.min.js
│ └── bootstrap.js
└── css
│ ├── bootstrap-responsive.min.css
│ └── bootstrap-responsive.css
└── README.md
/static/bootstrap.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rfyiamcool/happyshell/HEAD/static/bootstrap.zip
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | ## 前言
3 |
4 | 整理文档的时候,看到了以前学python时候搞过的一个项目。
5 | 用的是flask实现的一个运维管理平台。
6 |
7 |
8 |
--------------------------------------------------------------------------------
/static/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rfyiamcool/happyshell/HEAD/static/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/static/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rfyiamcool/happyshell/HEAD/static/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/static/js/bootstrap-transition.js:
--------------------------------------------------------------------------------
1 | /* ===================================================
2 | * bootstrap-transition.js v2.2.2
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
27 | * ======================================================= */
28 |
29 | $(function () {
30 |
31 | $.support.transition = (function () {
32 |
33 | var transitionEnd = (function () {
34 |
35 | var el = document.createElement('bootstrap')
36 | , transEndEventNames = {
37 | 'WebkitTransition' : 'webkitTransitionEnd'
38 | , 'MozTransition' : 'transitionend'
39 | , 'OTransition' : 'oTransitionEnd otransitionend'
40 | , 'transition' : 'transitionend'
41 | }
42 | , name
43 |
44 | for (name in transEndEventNames){
45 | if (el.style[name] !== undefined) {
46 | return transEndEventNames[name]
47 | }
48 | }
49 |
50 | }())
51 |
52 | return transitionEnd && {
53 | end: transitionEnd
54 | }
55 |
56 | })()
57 |
58 | })
59 |
60 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-alert.js:
--------------------------------------------------------------------------------
1 | /* ==========================================================
2 | * bootstrap-alert.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#alerts
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* ALERT CLASS DEFINITION
27 | * ====================== */
28 |
29 | var dismiss = '[data-dismiss="alert"]'
30 | , Alert = function (el) {
31 | $(el).on('click', dismiss, this.close)
32 | }
33 |
34 | Alert.prototype.close = function (e) {
35 | var $this = $(this)
36 | , selector = $this.attr('data-target')
37 | , $parent
38 |
39 | if (!selector) {
40 | selector = $this.attr('href')
41 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
42 | }
43 |
44 | $parent = $(selector)
45 |
46 | e && e.preventDefault()
47 |
48 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
49 |
50 | $parent.trigger(e = $.Event('close'))
51 |
52 | if (e.isDefaultPrevented()) return
53 |
54 | $parent.removeClass('in')
55 |
56 | function removeElement() {
57 | $parent
58 | .trigger('closed')
59 | .remove()
60 | }
61 |
62 | $.support.transition && $parent.hasClass('fade') ?
63 | $parent.on($.support.transition.end, removeElement) :
64 | removeElement()
65 | }
66 |
67 |
68 | /* ALERT PLUGIN DEFINITION
69 | * ======================= */
70 |
71 | var old = $.fn.alert
72 |
73 | $.fn.alert = function (option) {
74 | return this.each(function () {
75 | var $this = $(this)
76 | , data = $this.data('alert')
77 | if (!data) $this.data('alert', (data = new Alert(this)))
78 | if (typeof option == 'string') data[option].call($this)
79 | })
80 | }
81 |
82 | $.fn.alert.Constructor = Alert
83 |
84 |
85 | /* ALERT NO CONFLICT
86 | * ================= */
87 |
88 | $.fn.alert.noConflict = function () {
89 | $.fn.alert = old
90 | return this
91 | }
92 |
93 |
94 | /* ALERT DATA-API
95 | * ============== */
96 |
97 | $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
98 |
99 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-button.js:
--------------------------------------------------------------------------------
1 | /* ============================================================
2 | * bootstrap-button.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#buttons
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* BUTTON PUBLIC CLASS DEFINITION
27 | * ============================== */
28 |
29 | var Button = function (element, options) {
30 | this.$element = $(element)
31 | this.options = $.extend({}, $.fn.button.defaults, options)
32 | }
33 |
34 | Button.prototype.setState = function (state) {
35 | var d = 'disabled'
36 | , $el = this.$element
37 | , data = $el.data()
38 | , val = $el.is('input') ? 'val' : 'html'
39 |
40 | state = state + 'Text'
41 | data.resetText || $el.data('resetText', $el[val]())
42 |
43 | $el[val](data[state] || this.options[state])
44 |
45 | // push to event loop to allow forms to submit
46 | setTimeout(function () {
47 | state == 'loadingText' ?
48 | $el.addClass(d).attr(d, d) :
49 | $el.removeClass(d).removeAttr(d)
50 | }, 0)
51 | }
52 |
53 | Button.prototype.toggle = function () {
54 | var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
55 |
56 | $parent && $parent
57 | .find('.active')
58 | .removeClass('active')
59 |
60 | this.$element.toggleClass('active')
61 | }
62 |
63 |
64 | /* BUTTON PLUGIN DEFINITION
65 | * ======================== */
66 |
67 | var old = $.fn.button
68 |
69 | $.fn.button = function (option) {
70 | return this.each(function () {
71 | var $this = $(this)
72 | , data = $this.data('button')
73 | , options = typeof option == 'object' && option
74 | if (!data) $this.data('button', (data = new Button(this, options)))
75 | if (option == 'toggle') data.toggle()
76 | else if (option) data.setState(option)
77 | })
78 | }
79 |
80 | $.fn.button.defaults = {
81 | loadingText: 'loading...'
82 | }
83 |
84 | $.fn.button.Constructor = Button
85 |
86 |
87 | /* BUTTON NO CONFLICT
88 | * ================== */
89 |
90 | $.fn.button.noConflict = function () {
91 | $.fn.button = old
92 | return this
93 | }
94 |
95 |
96 | /* BUTTON DATA-API
97 | * =============== */
98 |
99 | $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
100 | var $btn = $(e.target)
101 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
102 | $btn.button('toggle')
103 | })
104 |
105 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-popover.js:
--------------------------------------------------------------------------------
1 | /* ===========================================================
2 | * bootstrap-popover.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#popovers
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* POPOVER PUBLIC CLASS DEFINITION
27 | * =============================== */
28 |
29 | var Popover = function (element, options) {
30 | this.init('popover', element, options)
31 | }
32 |
33 |
34 | /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
35 | ========================================== */
36 |
37 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
38 |
39 | constructor: Popover
40 |
41 | , setContent: function () {
42 | var $tip = this.tip()
43 | , title = this.getTitle()
44 | , content = this.getContent()
45 |
46 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
47 | $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
48 |
49 | $tip.removeClass('fade top bottom left right in')
50 | }
51 |
52 | , hasContent: function () {
53 | return this.getTitle() || this.getContent()
54 | }
55 |
56 | , getContent: function () {
57 | var content
58 | , $e = this.$element
59 | , o = this.options
60 |
61 | content = $e.attr('data-content')
62 | || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
63 |
64 | return content
65 | }
66 |
67 | , tip: function () {
68 | if (!this.$tip) {
69 | this.$tip = $(this.options.template)
70 | }
71 | return this.$tip
72 | }
73 |
74 | , destroy: function () {
75 | this.hide().$element.off('.' + this.type).removeData(this.type)
76 | }
77 |
78 | })
79 |
80 |
81 | /* POPOVER PLUGIN DEFINITION
82 | * ======================= */
83 |
84 | var old = $.fn.popover
85 |
86 | $.fn.popover = function (option) {
87 | return this.each(function () {
88 | var $this = $(this)
89 | , data = $this.data('popover')
90 | , options = typeof option == 'object' && option
91 | if (!data) $this.data('popover', (data = new Popover(this, options)))
92 | if (typeof option == 'string') data[option]()
93 | })
94 | }
95 |
96 | $.fn.popover.Constructor = Popover
97 |
98 | $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
99 | placement: 'right'
100 | , trigger: 'click'
101 | , content: ''
102 | , template: '
'
103 | })
104 |
105 |
106 | /* POPOVER NO CONFLICT
107 | * =================== */
108 |
109 | $.fn.popover.noConflict = function () {
110 | $.fn.popover = old
111 | return this
112 | }
113 |
114 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-tab.js:
--------------------------------------------------------------------------------
1 | /* ========================================================
2 | * bootstrap-tab.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#tabs
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* TAB CLASS DEFINITION
27 | * ==================== */
28 |
29 | var Tab = function (element) {
30 | this.element = $(element)
31 | }
32 |
33 | Tab.prototype = {
34 |
35 | constructor: Tab
36 |
37 | , show: function () {
38 | var $this = this.element
39 | , $ul = $this.closest('ul:not(.dropdown-menu)')
40 | , selector = $this.attr('data-target')
41 | , previous
42 | , $target
43 | , e
44 |
45 | if (!selector) {
46 | selector = $this.attr('href')
47 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
48 | }
49 |
50 | if ( $this.parent('li').hasClass('active') ) return
51 |
52 | previous = $ul.find('.active:last a')[0]
53 |
54 | e = $.Event('show', {
55 | relatedTarget: previous
56 | })
57 |
58 | $this.trigger(e)
59 |
60 | if (e.isDefaultPrevented()) return
61 |
62 | $target = $(selector)
63 |
64 | this.activate($this.parent('li'), $ul)
65 | this.activate($target, $target.parent(), function () {
66 | $this.trigger({
67 | type: 'shown'
68 | , relatedTarget: previous
69 | })
70 | })
71 | }
72 |
73 | , activate: function ( element, container, callback) {
74 | var $active = container.find('> .active')
75 | , transition = callback
76 | && $.support.transition
77 | && $active.hasClass('fade')
78 |
79 | function next() {
80 | $active
81 | .removeClass('active')
82 | .find('> .dropdown-menu > .active')
83 | .removeClass('active')
84 |
85 | element.addClass('active')
86 |
87 | if (transition) {
88 | element[0].offsetWidth // reflow for transition
89 | element.addClass('in')
90 | } else {
91 | element.removeClass('fade')
92 | }
93 |
94 | if ( element.parent('.dropdown-menu') ) {
95 | element.closest('li.dropdown').addClass('active')
96 | }
97 |
98 | callback && callback()
99 | }
100 |
101 | transition ?
102 | $active.one($.support.transition.end, next) :
103 | next()
104 |
105 | $active.removeClass('in')
106 | }
107 | }
108 |
109 |
110 | /* TAB PLUGIN DEFINITION
111 | * ===================== */
112 |
113 | var old = $.fn.tab
114 |
115 | $.fn.tab = function ( option ) {
116 | return this.each(function () {
117 | var $this = $(this)
118 | , data = $this.data('tab')
119 | if (!data) $this.data('tab', (data = new Tab(this)))
120 | if (typeof option == 'string') data[option]()
121 | })
122 | }
123 |
124 | $.fn.tab.Constructor = Tab
125 |
126 |
127 | /* TAB NO CONFLICT
128 | * =============== */
129 |
130 | $.fn.tab.noConflict = function () {
131 | $.fn.tab = old
132 | return this
133 | }
134 |
135 |
136 | /* TAB DATA-API
137 | * ============ */
138 |
139 | $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
140 | e.preventDefault()
141 | $(this).tab('show')
142 | })
143 |
144 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-dropdown.js:
--------------------------------------------------------------------------------
1 | /* ============================================================
2 | * bootstrap-dropdown.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* DROPDOWN CLASS DEFINITION
27 | * ========================= */
28 |
29 | var toggle = '[data-toggle=dropdown]'
30 | , Dropdown = function (element) {
31 | var $el = $(element).on('click.dropdown.data-api', this.toggle)
32 | $('html').on('click.dropdown.data-api', function () {
33 | $el.parent().removeClass('open')
34 | })
35 | }
36 |
37 | Dropdown.prototype = {
38 |
39 | constructor: Dropdown
40 |
41 | , toggle: function (e) {
42 | var $this = $(this)
43 | , $parent
44 | , isActive
45 |
46 | if ($this.is('.disabled, :disabled')) return
47 |
48 | $parent = getParent($this)
49 |
50 | isActive = $parent.hasClass('open')
51 |
52 | clearMenus()
53 |
54 | if (!isActive) {
55 | $parent.toggleClass('open')
56 | }
57 |
58 | $this.focus()
59 |
60 | return false
61 | }
62 |
63 | , keydown: function (e) {
64 | var $this
65 | , $items
66 | , $active
67 | , $parent
68 | , isActive
69 | , index
70 |
71 | if (!/(38|40|27)/.test(e.keyCode)) return
72 |
73 | $this = $(this)
74 |
75 | e.preventDefault()
76 | e.stopPropagation()
77 |
78 | if ($this.is('.disabled, :disabled')) return
79 |
80 | $parent = getParent($this)
81 |
82 | isActive = $parent.hasClass('open')
83 |
84 | if (!isActive || (isActive && e.keyCode == 27)) return $this.click()
85 |
86 | $items = $('[role=menu] li:not(.divider):visible a', $parent)
87 |
88 | if (!$items.length) return
89 |
90 | index = $items.index($items.filter(':focus'))
91 |
92 | if (e.keyCode == 38 && index > 0) index-- // up
93 | if (e.keyCode == 40 && index < $items.length - 1) index++ // down
94 | if (!~index) index = 0
95 |
96 | $items
97 | .eq(index)
98 | .focus()
99 | }
100 |
101 | }
102 |
103 | function clearMenus() {
104 | $(toggle).each(function () {
105 | getParent($(this)).removeClass('open')
106 | })
107 | }
108 |
109 | function getParent($this) {
110 | var selector = $this.attr('data-target')
111 | , $parent
112 |
113 | if (!selector) {
114 | selector = $this.attr('href')
115 | selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
116 | }
117 |
118 | $parent = $(selector)
119 | $parent.length || ($parent = $this.parent())
120 |
121 | return $parent
122 | }
123 |
124 |
125 | /* DROPDOWN PLUGIN DEFINITION
126 | * ========================== */
127 |
128 | var old = $.fn.dropdown
129 |
130 | $.fn.dropdown = function (option) {
131 | return this.each(function () {
132 | var $this = $(this)
133 | , data = $this.data('dropdown')
134 | if (!data) $this.data('dropdown', (data = new Dropdown(this)))
135 | if (typeof option == 'string') data[option].call($this)
136 | })
137 | }
138 |
139 | $.fn.dropdown.Constructor = Dropdown
140 |
141 |
142 | /* DROPDOWN NO CONFLICT
143 | * ==================== */
144 |
145 | $.fn.dropdown.noConflict = function () {
146 | $.fn.dropdown = old
147 | return this
148 | }
149 |
150 |
151 | /* APPLY TO STANDARD DROPDOWN ELEMENTS
152 | * =================================== */
153 |
154 | $(document)
155 | .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)
156 | .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
157 | .on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation() })
158 | .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
159 | .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
160 |
161 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-scrollspy.js:
--------------------------------------------------------------------------------
1 | /* =============================================================
2 | * bootstrap-scrollspy.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#scrollspy
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* SCROLLSPY CLASS DEFINITION
27 | * ========================== */
28 |
29 | function ScrollSpy(element, options) {
30 | var process = $.proxy(this.process, this)
31 | , $element = $(element).is('body') ? $(window) : $(element)
32 | , href
33 | this.options = $.extend({}, $.fn.scrollspy.defaults, options)
34 | this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
35 | this.selector = (this.options.target
36 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
37 | || '') + ' .nav li > a'
38 | this.$body = $('body')
39 | this.refresh()
40 | this.process()
41 | }
42 |
43 | ScrollSpy.prototype = {
44 |
45 | constructor: ScrollSpy
46 |
47 | , refresh: function () {
48 | var self = this
49 | , $targets
50 |
51 | this.offsets = $([])
52 | this.targets = $([])
53 |
54 | $targets = this.$body
55 | .find(this.selector)
56 | .map(function () {
57 | var $el = $(this)
58 | , href = $el.data('target') || $el.attr('href')
59 | , $href = /^#\w/.test(href) && $(href)
60 | return ( $href
61 | && $href.length
62 | && [[ $href.position().top + self.$scrollElement.scrollTop(), href ]] ) || null
63 | })
64 | .sort(function (a, b) { return a[0] - b[0] })
65 | .each(function () {
66 | self.offsets.push(this[0])
67 | self.targets.push(this[1])
68 | })
69 | }
70 |
71 | , process: function () {
72 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
73 | , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
74 | , maxScroll = scrollHeight - this.$scrollElement.height()
75 | , offsets = this.offsets
76 | , targets = this.targets
77 | , activeTarget = this.activeTarget
78 | , i
79 |
80 | if (scrollTop >= maxScroll) {
81 | return activeTarget != (i = targets.last()[0])
82 | && this.activate ( i )
83 | }
84 |
85 | for (i = offsets.length; i--;) {
86 | activeTarget != targets[i]
87 | && scrollTop >= offsets[i]
88 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
89 | && this.activate( targets[i] )
90 | }
91 | }
92 |
93 | , activate: function (target) {
94 | var active
95 | , selector
96 |
97 | this.activeTarget = target
98 |
99 | $(this.selector)
100 | .parent('.active')
101 | .removeClass('active')
102 |
103 | selector = this.selector
104 | + '[data-target="' + target + '"],'
105 | + this.selector + '[href="' + target + '"]'
106 |
107 | active = $(selector)
108 | .parent('li')
109 | .addClass('active')
110 |
111 | if (active.parent('.dropdown-menu').length) {
112 | active = active.closest('li.dropdown').addClass('active')
113 | }
114 |
115 | active.trigger('activate')
116 | }
117 |
118 | }
119 |
120 |
121 | /* SCROLLSPY PLUGIN DEFINITION
122 | * =========================== */
123 |
124 | var old = $.fn.scrollspy
125 |
126 | $.fn.scrollspy = function (option) {
127 | return this.each(function () {
128 | var $this = $(this)
129 | , data = $this.data('scrollspy')
130 | , options = typeof option == 'object' && option
131 | if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
132 | if (typeof option == 'string') data[option]()
133 | })
134 | }
135 |
136 | $.fn.scrollspy.Constructor = ScrollSpy
137 |
138 | $.fn.scrollspy.defaults = {
139 | offset: 10
140 | }
141 |
142 |
143 | /* SCROLLSPY NO CONFLICT
144 | * ===================== */
145 |
146 | $.fn.scrollspy.noConflict = function () {
147 | $.fn.scrollspy = old
148 | return this
149 | }
150 |
151 |
152 | /* SCROLLSPY DATA-API
153 | * ================== */
154 |
155 | $(window).on('load', function () {
156 | $('[data-spy="scroll"]').each(function () {
157 | var $spy = $(this)
158 | $spy.scrollspy($spy.data())
159 | })
160 | })
161 |
162 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-collapse.js:
--------------------------------------------------------------------------------
1 | /* =============================================================
2 | * bootstrap-collapse.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#collapse
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* COLLAPSE PUBLIC CLASS DEFINITION
27 | * ================================ */
28 |
29 | var Collapse = function (element, options) {
30 | this.$element = $(element)
31 | this.options = $.extend({}, $.fn.collapse.defaults, options)
32 |
33 | if (this.options.parent) {
34 | this.$parent = $(this.options.parent)
35 | }
36 |
37 | this.options.toggle && this.toggle()
38 | }
39 |
40 | Collapse.prototype = {
41 |
42 | constructor: Collapse
43 |
44 | , dimension: function () {
45 | var hasWidth = this.$element.hasClass('width')
46 | return hasWidth ? 'width' : 'height'
47 | }
48 |
49 | , show: function () {
50 | var dimension
51 | , scroll
52 | , actives
53 | , hasData
54 |
55 | if (this.transitioning) return
56 |
57 | dimension = this.dimension()
58 | scroll = $.camelCase(['scroll', dimension].join('-'))
59 | actives = this.$parent && this.$parent.find('> .accordion-group > .in')
60 |
61 | if (actives && actives.length) {
62 | hasData = actives.data('collapse')
63 | if (hasData && hasData.transitioning) return
64 | actives.collapse('hide')
65 | hasData || actives.data('collapse', null)
66 | }
67 |
68 | this.$element[dimension](0)
69 | this.transition('addClass', $.Event('show'), 'shown')
70 | $.support.transition && this.$element[dimension](this.$element[0][scroll])
71 | }
72 |
73 | , hide: function () {
74 | var dimension
75 | if (this.transitioning) return
76 | dimension = this.dimension()
77 | this.reset(this.$element[dimension]())
78 | this.transition('removeClass', $.Event('hide'), 'hidden')
79 | this.$element[dimension](0)
80 | }
81 |
82 | , reset: function (size) {
83 | var dimension = this.dimension()
84 |
85 | this.$element
86 | .removeClass('collapse')
87 | [dimension](size || 'auto')
88 | [0].offsetWidth
89 |
90 | this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
91 |
92 | return this
93 | }
94 |
95 | , transition: function (method, startEvent, completeEvent) {
96 | var that = this
97 | , complete = function () {
98 | if (startEvent.type == 'show') that.reset()
99 | that.transitioning = 0
100 | that.$element.trigger(completeEvent)
101 | }
102 |
103 | this.$element.trigger(startEvent)
104 |
105 | if (startEvent.isDefaultPrevented()) return
106 |
107 | this.transitioning = 1
108 |
109 | this.$element[method]('in')
110 |
111 | $.support.transition && this.$element.hasClass('collapse') ?
112 | this.$element.one($.support.transition.end, complete) :
113 | complete()
114 | }
115 |
116 | , toggle: function () {
117 | this[this.$element.hasClass('in') ? 'hide' : 'show']()
118 | }
119 |
120 | }
121 |
122 |
123 | /* COLLAPSE PLUGIN DEFINITION
124 | * ========================== */
125 |
126 | var old = $.fn.collapse
127 |
128 | $.fn.collapse = function (option) {
129 | return this.each(function () {
130 | var $this = $(this)
131 | , data = $this.data('collapse')
132 | , options = typeof option == 'object' && option
133 | if (!data) $this.data('collapse', (data = new Collapse(this, options)))
134 | if (typeof option == 'string') data[option]()
135 | })
136 | }
137 |
138 | $.fn.collapse.defaults = {
139 | toggle: true
140 | }
141 |
142 | $.fn.collapse.Constructor = Collapse
143 |
144 |
145 | /* COLLAPSE NO CONFLICT
146 | * ==================== */
147 |
148 | $.fn.collapse.noConflict = function () {
149 | $.fn.collapse = old
150 | return this
151 | }
152 |
153 |
154 | /* COLLAPSE DATA-API
155 | * ================= */
156 |
157 | $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
158 | var $this = $(this), href
159 | , target = $this.attr('data-target')
160 | || e.preventDefault()
161 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
162 | , option = $(target).data('collapse') ? 'toggle' : $this.data()
163 | $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
164 | $(target).collapse(option)
165 | })
166 |
167 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-carousel.js:
--------------------------------------------------------------------------------
1 | /* ==========================================================
2 | * bootstrap-carousel.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#carousel
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* CAROUSEL CLASS DEFINITION
27 | * ========================= */
28 |
29 | var Carousel = function (element, options) {
30 | this.$element = $(element)
31 | this.options = options
32 | this.options.pause == 'hover' && this.$element
33 | .on('mouseenter', $.proxy(this.pause, this))
34 | .on('mouseleave', $.proxy(this.cycle, this))
35 | }
36 |
37 | Carousel.prototype = {
38 |
39 | cycle: function (e) {
40 | if (!e) this.paused = false
41 | this.options.interval
42 | && !this.paused
43 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
44 | return this
45 | }
46 |
47 | , to: function (pos) {
48 | var $active = this.$element.find('.item.active')
49 | , children = $active.parent().children()
50 | , activePos = children.index($active)
51 | , that = this
52 |
53 | if (pos > (children.length - 1) || pos < 0) return
54 |
55 | if (this.sliding) {
56 | return this.$element.one('slid', function () {
57 | that.to(pos)
58 | })
59 | }
60 |
61 | if (activePos == pos) {
62 | return this.pause().cycle()
63 | }
64 |
65 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
66 | }
67 |
68 | , pause: function (e) {
69 | if (!e) this.paused = true
70 | if (this.$element.find('.next, .prev').length && $.support.transition.end) {
71 | this.$element.trigger($.support.transition.end)
72 | this.cycle()
73 | }
74 | clearInterval(this.interval)
75 | this.interval = null
76 | return this
77 | }
78 |
79 | , next: function () {
80 | if (this.sliding) return
81 | return this.slide('next')
82 | }
83 |
84 | , prev: function () {
85 | if (this.sliding) return
86 | return this.slide('prev')
87 | }
88 |
89 | , slide: function (type, next) {
90 | var $active = this.$element.find('.item.active')
91 | , $next = next || $active[type]()
92 | , isCycling = this.interval
93 | , direction = type == 'next' ? 'left' : 'right'
94 | , fallback = type == 'next' ? 'first' : 'last'
95 | , that = this
96 | , e
97 |
98 | this.sliding = true
99 |
100 | isCycling && this.pause()
101 |
102 | $next = $next.length ? $next : this.$element.find('.item')[fallback]()
103 |
104 | e = $.Event('slide', {
105 | relatedTarget: $next[0]
106 | })
107 |
108 | if ($next.hasClass('active')) return
109 |
110 | if ($.support.transition && this.$element.hasClass('slide')) {
111 | this.$element.trigger(e)
112 | if (e.isDefaultPrevented()) return
113 | $next.addClass(type)
114 | $next[0].offsetWidth // force reflow
115 | $active.addClass(direction)
116 | $next.addClass(direction)
117 | this.$element.one($.support.transition.end, function () {
118 | $next.removeClass([type, direction].join(' ')).addClass('active')
119 | $active.removeClass(['active', direction].join(' '))
120 | that.sliding = false
121 | setTimeout(function () { that.$element.trigger('slid') }, 0)
122 | })
123 | } else {
124 | this.$element.trigger(e)
125 | if (e.isDefaultPrevented()) return
126 | $active.removeClass('active')
127 | $next.addClass('active')
128 | this.sliding = false
129 | this.$element.trigger('slid')
130 | }
131 |
132 | isCycling && this.cycle()
133 |
134 | return this
135 | }
136 |
137 | }
138 |
139 |
140 | /* CAROUSEL PLUGIN DEFINITION
141 | * ========================== */
142 |
143 | var old = $.fn.carousel
144 |
145 | $.fn.carousel = function (option) {
146 | return this.each(function () {
147 | var $this = $(this)
148 | , data = $this.data('carousel')
149 | , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
150 | , action = typeof option == 'string' ? option : options.slide
151 | if (!data) $this.data('carousel', (data = new Carousel(this, options)))
152 | if (typeof option == 'number') data.to(option)
153 | else if (action) data[action]()
154 | else if (options.interval) data.cycle()
155 | })
156 | }
157 |
158 | $.fn.carousel.defaults = {
159 | interval: 5000
160 | , pause: 'hover'
161 | }
162 |
163 | $.fn.carousel.Constructor = Carousel
164 |
165 |
166 | /* CAROUSEL NO CONFLICT
167 | * ==================== */
168 |
169 | $.fn.carousel.noConflict = function () {
170 | $.fn.carousel = old
171 | return this
172 | }
173 |
174 | /* CAROUSEL DATA-API
175 | * ================= */
176 |
177 | $(document).on('click.carousel.data-api', '[data-slide]', function (e) {
178 | var $this = $(this), href
179 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
180 | , options = $.extend({}, $target.data(), $this.data())
181 | $target.carousel(options)
182 | e.preventDefault()
183 | })
184 |
185 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-modal.js:
--------------------------------------------------------------------------------
1 | /* =========================================================
2 | * bootstrap-modal.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#modals
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* MODAL CLASS DEFINITION
27 | * ====================== */
28 |
29 | var Modal = function (element, options) {
30 | this.options = options
31 | this.$element = $(element)
32 | .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
33 | this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
34 | }
35 |
36 | Modal.prototype = {
37 |
38 | constructor: Modal
39 |
40 | , toggle: function () {
41 | return this[!this.isShown ? 'show' : 'hide']()
42 | }
43 |
44 | , show: function () {
45 | var that = this
46 | , e = $.Event('show')
47 |
48 | this.$element.trigger(e)
49 |
50 | if (this.isShown || e.isDefaultPrevented()) return
51 |
52 | this.isShown = true
53 |
54 | this.escape()
55 |
56 | this.backdrop(function () {
57 | var transition = $.support.transition && that.$element.hasClass('fade')
58 |
59 | if (!that.$element.parent().length) {
60 | that.$element.appendTo(document.body) //don't move modals dom position
61 | }
62 |
63 | that.$element
64 | .show()
65 |
66 | if (transition) {
67 | that.$element[0].offsetWidth // force reflow
68 | }
69 |
70 | that.$element
71 | .addClass('in')
72 | .attr('aria-hidden', false)
73 |
74 | that.enforceFocus()
75 |
76 | transition ?
77 | that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
78 | that.$element.focus().trigger('shown')
79 |
80 | })
81 | }
82 |
83 | , hide: function (e) {
84 | e && e.preventDefault()
85 |
86 | var that = this
87 |
88 | e = $.Event('hide')
89 |
90 | this.$element.trigger(e)
91 |
92 | if (!this.isShown || e.isDefaultPrevented()) return
93 |
94 | this.isShown = false
95 |
96 | this.escape()
97 |
98 | $(document).off('focusin.modal')
99 |
100 | this.$element
101 | .removeClass('in')
102 | .attr('aria-hidden', true)
103 |
104 | $.support.transition && this.$element.hasClass('fade') ?
105 | this.hideWithTransition() :
106 | this.hideModal()
107 | }
108 |
109 | , enforceFocus: function () {
110 | var that = this
111 | $(document).on('focusin.modal', function (e) {
112 | if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
113 | that.$element.focus()
114 | }
115 | })
116 | }
117 |
118 | , escape: function () {
119 | var that = this
120 | if (this.isShown && this.options.keyboard) {
121 | this.$element.on('keyup.dismiss.modal', function ( e ) {
122 | e.which == 27 && that.hide()
123 | })
124 | } else if (!this.isShown) {
125 | this.$element.off('keyup.dismiss.modal')
126 | }
127 | }
128 |
129 | , hideWithTransition: function () {
130 | var that = this
131 | , timeout = setTimeout(function () {
132 | that.$element.off($.support.transition.end)
133 | that.hideModal()
134 | }, 500)
135 |
136 | this.$element.one($.support.transition.end, function () {
137 | clearTimeout(timeout)
138 | that.hideModal()
139 | })
140 | }
141 |
142 | , hideModal: function (that) {
143 | this.$element
144 | .hide()
145 | .trigger('hidden')
146 |
147 | this.backdrop()
148 | }
149 |
150 | , removeBackdrop: function () {
151 | this.$backdrop.remove()
152 | this.$backdrop = null
153 | }
154 |
155 | , backdrop: function (callback) {
156 | var that = this
157 | , animate = this.$element.hasClass('fade') ? 'fade' : ''
158 |
159 | if (this.isShown && this.options.backdrop) {
160 | var doAnimate = $.support.transition && animate
161 |
162 | this.$backdrop = $('')
163 | .appendTo(document.body)
164 |
165 | this.$backdrop.click(
166 | this.options.backdrop == 'static' ?
167 | $.proxy(this.$element[0].focus, this.$element[0])
168 | : $.proxy(this.hide, this)
169 | )
170 |
171 | if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
172 |
173 | this.$backdrop.addClass('in')
174 |
175 | doAnimate ?
176 | this.$backdrop.one($.support.transition.end, callback) :
177 | callback()
178 |
179 | } else if (!this.isShown && this.$backdrop) {
180 | this.$backdrop.removeClass('in')
181 |
182 | $.support.transition && this.$element.hasClass('fade')?
183 | this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
184 | this.removeBackdrop()
185 |
186 | } else if (callback) {
187 | callback()
188 | }
189 | }
190 | }
191 |
192 |
193 | /* MODAL PLUGIN DEFINITION
194 | * ======================= */
195 |
196 | var old = $.fn.modal
197 |
198 | $.fn.modal = function (option) {
199 | return this.each(function () {
200 | var $this = $(this)
201 | , data = $this.data('modal')
202 | , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
203 | if (!data) $this.data('modal', (data = new Modal(this, options)))
204 | if (typeof option == 'string') data[option]()
205 | else if (options.show) data.show()
206 | })
207 | }
208 |
209 | $.fn.modal.defaults = {
210 | backdrop: true
211 | , keyboard: true
212 | , show: true
213 | }
214 |
215 | $.fn.modal.Constructor = Modal
216 |
217 |
218 | /* MODAL NO CONFLICT
219 | * ================= */
220 |
221 | $.fn.modal.noConflict = function () {
222 | $.fn.modal = old
223 | return this
224 | }
225 |
226 |
227 | /* MODAL DATA-API
228 | * ============== */
229 |
230 | $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
231 | var $this = $(this)
232 | , href = $this.attr('href')
233 | , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
234 | , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
235 |
236 | e.preventDefault()
237 |
238 | $target
239 | .modal(option)
240 | .one('hide', function () {
241 | $this.focus()
242 | })
243 | })
244 |
245 | }(window.jQuery);
246 |
--------------------------------------------------------------------------------
/static/js/bootstrap-tooltip.js:
--------------------------------------------------------------------------------
1 | /* ===========================================================
2 | * bootstrap-tooltip.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#tooltips
4 | * Inspired by the original jQuery.tipsy by Jason Frame
5 | * ===========================================================
6 | * Copyright 2012 Twitter, Inc.
7 | *
8 | * Licensed under the Apache License, Version 2.0 (the "License");
9 | * you may not use this file except in compliance with the License.
10 | * You may obtain a copy of the License at
11 | *
12 | * http://www.apache.org/licenses/LICENSE-2.0
13 | *
14 | * Unless required by applicable law or agreed to in writing, software
15 | * distributed under the License is distributed on an "AS IS" BASIS,
16 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 | * See the License for the specific language governing permissions and
18 | * limitations under the License.
19 | * ========================================================== */
20 |
21 |
22 | !function ($) {
23 |
24 | "use strict"; // jshint ;_;
25 |
26 |
27 | /* TOOLTIP PUBLIC CLASS DEFINITION
28 | * =============================== */
29 |
30 | var Tooltip = function (element, options) {
31 | this.init('tooltip', element, options)
32 | }
33 |
34 | Tooltip.prototype = {
35 |
36 | constructor: Tooltip
37 |
38 | , init: function (type, element, options) {
39 | var eventIn
40 | , eventOut
41 |
42 | this.type = type
43 | this.$element = $(element)
44 | this.options = this.getOptions(options)
45 | this.enabled = true
46 |
47 | if (this.options.trigger == 'click') {
48 | this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
49 | } else if (this.options.trigger != 'manual') {
50 | eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
51 | eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
52 | this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
53 | this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
54 | }
55 |
56 | this.options.selector ?
57 | (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
58 | this.fixTitle()
59 | }
60 |
61 | , getOptions: function (options) {
62 | options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
63 |
64 | if (options.delay && typeof options.delay == 'number') {
65 | options.delay = {
66 | show: options.delay
67 | , hide: options.delay
68 | }
69 | }
70 |
71 | return options
72 | }
73 |
74 | , enter: function (e) {
75 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
76 |
77 | if (!self.options.delay || !self.options.delay.show) return self.show()
78 |
79 | clearTimeout(this.timeout)
80 | self.hoverState = 'in'
81 | this.timeout = setTimeout(function() {
82 | if (self.hoverState == 'in') self.show()
83 | }, self.options.delay.show)
84 | }
85 |
86 | , leave: function (e) {
87 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
88 |
89 | if (this.timeout) clearTimeout(this.timeout)
90 | if (!self.options.delay || !self.options.delay.hide) return self.hide()
91 |
92 | self.hoverState = 'out'
93 | this.timeout = setTimeout(function() {
94 | if (self.hoverState == 'out') self.hide()
95 | }, self.options.delay.hide)
96 | }
97 |
98 | , show: function () {
99 | var $tip
100 | , inside
101 | , pos
102 | , actualWidth
103 | , actualHeight
104 | , placement
105 | , tp
106 |
107 | if (this.hasContent() && this.enabled) {
108 | $tip = this.tip()
109 | this.setContent()
110 |
111 | if (this.options.animation) {
112 | $tip.addClass('fade')
113 | }
114 |
115 | placement = typeof this.options.placement == 'function' ?
116 | this.options.placement.call(this, $tip[0], this.$element[0]) :
117 | this.options.placement
118 |
119 | inside = /in/.test(placement)
120 |
121 | $tip
122 | .detach()
123 | .css({ top: 0, left: 0, display: 'block' })
124 | .insertAfter(this.$element)
125 |
126 | pos = this.getPosition(inside)
127 |
128 | actualWidth = $tip[0].offsetWidth
129 | actualHeight = $tip[0].offsetHeight
130 |
131 | switch (inside ? placement.split(' ')[1] : placement) {
132 | case 'bottom':
133 | tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
134 | break
135 | case 'top':
136 | tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
137 | break
138 | case 'left':
139 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
140 | break
141 | case 'right':
142 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
143 | break
144 | }
145 |
146 | $tip
147 | .offset(tp)
148 | .addClass(placement)
149 | .addClass('in')
150 | }
151 | }
152 |
153 | , setContent: function () {
154 | var $tip = this.tip()
155 | , title = this.getTitle()
156 |
157 | $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
158 | $tip.removeClass('fade in top bottom left right')
159 | }
160 |
161 | , hide: function () {
162 | var that = this
163 | , $tip = this.tip()
164 |
165 | $tip.removeClass('in')
166 |
167 | function removeWithAnimation() {
168 | var timeout = setTimeout(function () {
169 | $tip.off($.support.transition.end).detach()
170 | }, 500)
171 |
172 | $tip.one($.support.transition.end, function () {
173 | clearTimeout(timeout)
174 | $tip.detach()
175 | })
176 | }
177 |
178 | $.support.transition && this.$tip.hasClass('fade') ?
179 | removeWithAnimation() :
180 | $tip.detach()
181 |
182 | return this
183 | }
184 |
185 | , fixTitle: function () {
186 | var $e = this.$element
187 | if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
188 | $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
189 | }
190 | }
191 |
192 | , hasContent: function () {
193 | return this.getTitle()
194 | }
195 |
196 | , getPosition: function (inside) {
197 | return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
198 | width: this.$element[0].offsetWidth
199 | , height: this.$element[0].offsetHeight
200 | })
201 | }
202 |
203 | , getTitle: function () {
204 | var title
205 | , $e = this.$element
206 | , o = this.options
207 |
208 | title = $e.attr('data-original-title')
209 | || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
210 |
211 | return title
212 | }
213 |
214 | , tip: function () {
215 | return this.$tip = this.$tip || $(this.options.template)
216 | }
217 |
218 | , validate: function () {
219 | if (!this.$element[0].parentNode) {
220 | this.hide()
221 | this.$element = null
222 | this.options = null
223 | }
224 | }
225 |
226 | , enable: function () {
227 | this.enabled = true
228 | }
229 |
230 | , disable: function () {
231 | this.enabled = false
232 | }
233 |
234 | , toggleEnabled: function () {
235 | this.enabled = !this.enabled
236 | }
237 |
238 | , toggle: function (e) {
239 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
240 | self[self.tip().hasClass('in') ? 'hide' : 'show']()
241 | }
242 |
243 | , destroy: function () {
244 | this.hide().$element.off('.' + this.type).removeData(this.type)
245 | }
246 |
247 | }
248 |
249 |
250 | /* TOOLTIP PLUGIN DEFINITION
251 | * ========================= */
252 |
253 | var old = $.fn.tooltip
254 |
255 | $.fn.tooltip = function ( option ) {
256 | return this.each(function () {
257 | var $this = $(this)
258 | , data = $this.data('tooltip')
259 | , options = typeof option == 'object' && option
260 | if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
261 | if (typeof option == 'string') data[option]()
262 | })
263 | }
264 |
265 | $.fn.tooltip.Constructor = Tooltip
266 |
267 | $.fn.tooltip.defaults = {
268 | animation: true
269 | , placement: 'top'
270 | , selector: false
271 | , template: ''
272 | , trigger: 'hover'
273 | , title: ''
274 | , delay: 0
275 | , html: false
276 | }
277 |
278 |
279 | /* TOOLTIP NO CONFLICT
280 | * =================== */
281 |
282 | $.fn.tooltip.noConflict = function () {
283 | $.fn.tooltip = old
284 | return this
285 | }
286 |
287 | }(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap-typeahead.js:
--------------------------------------------------------------------------------
1 | /* =============================================================
2 | * bootstrap-typeahead.js v2.2.2
3 | * http://twitter.github.com/bootstrap/javascript.html#typeahead
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 |
21 | !function($){
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* TYPEAHEAD PUBLIC CLASS DEFINITION
27 | * ================================= */
28 |
29 | var Typeahead = function (element, options) {
30 | this.$element = $(element)
31 | this.options = $.extend({}, $.fn.typeahead.defaults, options)
32 | this.matcher = this.options.matcher || this.matcher
33 | this.sorter = this.options.sorter || this.sorter
34 | this.highlighter = this.options.highlighter || this.highlighter
35 | this.updater = this.options.updater || this.updater
36 | this.source = this.options.source
37 | this.$menu = $(this.options.menu)
38 | this.shown = false
39 | this.listen()
40 | }
41 |
42 | Typeahead.prototype = {
43 |
44 | constructor: Typeahead
45 |
46 | , select: function () {
47 | var val = this.$menu.find('.active').attr('data-value')
48 | this.$element
49 | .val(this.updater(val))
50 | .change()
51 | return this.hide()
52 | }
53 |
54 | , updater: function (item) {
55 | return item
56 | }
57 |
58 | , show: function () {
59 | var pos = $.extend({}, this.$element.position(), {
60 | height: this.$element[0].offsetHeight
61 | })
62 |
63 | this.$menu
64 | .insertAfter(this.$element)
65 | .css({
66 | top: pos.top + pos.height
67 | , left: pos.left
68 | })
69 | .show()
70 |
71 | this.shown = true
72 | return this
73 | }
74 |
75 | , hide: function () {
76 | this.$menu.hide()
77 | this.shown = false
78 | return this
79 | }
80 |
81 | , lookup: function (event) {
82 | var items
83 |
84 | this.query = this.$element.val()
85 |
86 | if (!this.query || this.query.length < this.options.minLength) {
87 | return this.shown ? this.hide() : this
88 | }
89 |
90 | items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
91 |
92 | return items ? this.process(items) : this
93 | }
94 |
95 | , process: function (items) {
96 | var that = this
97 |
98 | items = $.grep(items, function (item) {
99 | return that.matcher(item)
100 | })
101 |
102 | items = this.sorter(items)
103 |
104 | if (!items.length) {
105 | return this.shown ? this.hide() : this
106 | }
107 |
108 | return this.render(items.slice(0, this.options.items)).show()
109 | }
110 |
111 | , matcher: function (item) {
112 | return ~item.toLowerCase().indexOf(this.query.toLowerCase())
113 | }
114 |
115 | , sorter: function (items) {
116 | var beginswith = []
117 | , caseSensitive = []
118 | , caseInsensitive = []
119 | , item
120 |
121 | while (item = items.shift()) {
122 | if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
123 | else if (~item.indexOf(this.query)) caseSensitive.push(item)
124 | else caseInsensitive.push(item)
125 | }
126 |
127 | return beginswith.concat(caseSensitive, caseInsensitive)
128 | }
129 |
130 | , highlighter: function (item) {
131 | var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
132 | return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
133 | return '' + match + ''
134 | })
135 | }
136 |
137 | , render: function (items) {
138 | var that = this
139 |
140 | items = $(items).map(function (i, item) {
141 | i = $(that.options.item).attr('data-value', item)
142 | i.find('a').html(that.highlighter(item))
143 | return i[0]
144 | })
145 |
146 | items.first().addClass('active')
147 | this.$menu.html(items)
148 | return this
149 | }
150 |
151 | , next: function (event) {
152 | var active = this.$menu.find('.active').removeClass('active')
153 | , next = active.next()
154 |
155 | if (!next.length) {
156 | next = $(this.$menu.find('li')[0])
157 | }
158 |
159 | next.addClass('active')
160 | }
161 |
162 | , prev: function (event) {
163 | var active = this.$menu.find('.active').removeClass('active')
164 | , prev = active.prev()
165 |
166 | if (!prev.length) {
167 | prev = this.$menu.find('li').last()
168 | }
169 |
170 | prev.addClass('active')
171 | }
172 |
173 | , listen: function () {
174 | this.$element
175 | .on('blur', $.proxy(this.blur, this))
176 | .on('keypress', $.proxy(this.keypress, this))
177 | .on('keyup', $.proxy(this.keyup, this))
178 |
179 | if (this.eventSupported('keydown')) {
180 | this.$element.on('keydown', $.proxy(this.keydown, this))
181 | }
182 |
183 | this.$menu
184 | .on('click', $.proxy(this.click, this))
185 | .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
186 | }
187 |
188 | , eventSupported: function(eventName) {
189 | var isSupported = eventName in this.$element
190 | if (!isSupported) {
191 | this.$element.setAttribute(eventName, 'return;')
192 | isSupported = typeof this.$element[eventName] === 'function'
193 | }
194 | return isSupported
195 | }
196 |
197 | , move: function (e) {
198 | if (!this.shown) return
199 |
200 | switch(e.keyCode) {
201 | case 9: // tab
202 | case 13: // enter
203 | case 27: // escape
204 | e.preventDefault()
205 | break
206 |
207 | case 38: // up arrow
208 | e.preventDefault()
209 | this.prev()
210 | break
211 |
212 | case 40: // down arrow
213 | e.preventDefault()
214 | this.next()
215 | break
216 | }
217 |
218 | e.stopPropagation()
219 | }
220 |
221 | , keydown: function (e) {
222 | this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
223 | this.move(e)
224 | }
225 |
226 | , keypress: function (e) {
227 | if (this.suppressKeyPressRepeat) return
228 | this.move(e)
229 | }
230 |
231 | , keyup: function (e) {
232 | switch(e.keyCode) {
233 | case 40: // down arrow
234 | case 38: // up arrow
235 | case 16: // shift
236 | case 17: // ctrl
237 | case 18: // alt
238 | break
239 |
240 | case 9: // tab
241 | case 13: // enter
242 | if (!this.shown) return
243 | this.select()
244 | break
245 |
246 | case 27: // escape
247 | if (!this.shown) return
248 | this.hide()
249 | break
250 |
251 | default:
252 | this.lookup()
253 | }
254 |
255 | e.stopPropagation()
256 | e.preventDefault()
257 | }
258 |
259 | , blur: function (e) {
260 | var that = this
261 | setTimeout(function () { that.hide() }, 150)
262 | }
263 |
264 | , click: function (e) {
265 | e.stopPropagation()
266 | e.preventDefault()
267 | this.select()
268 | }
269 |
270 | , mouseenter: function (e) {
271 | this.$menu.find('.active').removeClass('active')
272 | $(e.currentTarget).addClass('active')
273 | }
274 |
275 | }
276 |
277 |
278 | /* TYPEAHEAD PLUGIN DEFINITION
279 | * =========================== */
280 |
281 | var old = $.fn.typeahead
282 |
283 | $.fn.typeahead = function (option) {
284 | return this.each(function () {
285 | var $this = $(this)
286 | , data = $this.data('typeahead')
287 | , options = typeof option == 'object' && option
288 | if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
289 | if (typeof option == 'string') data[option]()
290 | })
291 | }
292 |
293 | $.fn.typeahead.defaults = {
294 | source: []
295 | , items: 8
296 | , menu: ''
297 | , item: ''
298 | , minLength: 1
299 | }
300 |
301 | $.fn.typeahead.Constructor = Typeahead
302 |
303 |
304 | /* TYPEAHEAD NO CONFLICT
305 | * =================== */
306 |
307 | $.fn.typeahead.noConflict = function () {
308 | $.fn.typeahead = old
309 | return this
310 | }
311 |
312 |
313 | /* TYPEAHEAD DATA-API
314 | * ================== */
315 |
316 | $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
317 | var $this = $(this)
318 | if ($this.data('typeahead')) return
319 | e.preventDefault()
320 | $this.typeahead($this.data())
321 | })
322 |
323 | }(window.jQuery);
324 |
--------------------------------------------------------------------------------
/static/css/bootstrap-responsive.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.2.2
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */@-ms-viewport{width:device-width}.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}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*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:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.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.564102564102564%;*margin-left:2.5109110747408616%;-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.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.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:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.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.7624309392265194%;*margin-left:2.709239449864817%;-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.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
10 |
--------------------------------------------------------------------------------
/static/css/bootstrap-responsive.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.2.2
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 |
11 | @-ms-viewport {
12 | width: device-width;
13 | }
14 |
15 | .clearfix {
16 | *zoom: 1;
17 | }
18 |
19 | .clearfix:before,
20 | .clearfix:after {
21 | display: table;
22 | line-height: 0;
23 | content: "";
24 | }
25 |
26 | .clearfix:after {
27 | clear: both;
28 | }
29 |
30 | .hide-text {
31 | font: 0/0 a;
32 | color: transparent;
33 | text-shadow: none;
34 | background-color: transparent;
35 | border: 0;
36 | }
37 |
38 | .input-block-level {
39 | display: block;
40 | width: 100%;
41 | min-height: 30px;
42 | -webkit-box-sizing: border-box;
43 | -moz-box-sizing: border-box;
44 | box-sizing: border-box;
45 | }
46 |
47 | .hidden {
48 | display: none;
49 | visibility: hidden;
50 | }
51 |
52 | .visible-phone {
53 | display: none !important;
54 | }
55 |
56 | .visible-tablet {
57 | display: none !important;
58 | }
59 |
60 | .hidden-desktop {
61 | display: none !important;
62 | }
63 |
64 | .visible-desktop {
65 | display: inherit !important;
66 | }
67 |
68 | @media (min-width: 768px) and (max-width: 979px) {
69 | .hidden-desktop {
70 | display: inherit !important;
71 | }
72 | .visible-desktop {
73 | display: none !important ;
74 | }
75 | .visible-tablet {
76 | display: inherit !important;
77 | }
78 | .hidden-tablet {
79 | display: none !important;
80 | }
81 | }
82 |
83 | @media (max-width: 767px) {
84 | .hidden-desktop {
85 | display: inherit !important;
86 | }
87 | .visible-desktop {
88 | display: none !important;
89 | }
90 | .visible-phone {
91 | display: inherit !important;
92 | }
93 | .hidden-phone {
94 | display: none !important;
95 | }
96 | }
97 |
98 | @media (min-width: 1200px) {
99 | .row {
100 | margin-left: -30px;
101 | *zoom: 1;
102 | }
103 | .row:before,
104 | .row:after {
105 | display: table;
106 | line-height: 0;
107 | content: "";
108 | }
109 | .row:after {
110 | clear: both;
111 | }
112 | [class*="span"] {
113 | float: left;
114 | min-height: 1px;
115 | margin-left: 30px;
116 | }
117 | .container,
118 | .navbar-static-top .container,
119 | .navbar-fixed-top .container,
120 | .navbar-fixed-bottom .container {
121 | width: 1170px;
122 | }
123 | .span12 {
124 | width: 1170px;
125 | }
126 | .span11 {
127 | width: 1070px;
128 | }
129 | .span10 {
130 | width: 970px;
131 | }
132 | .span9 {
133 | width: 870px;
134 | }
135 | .span8 {
136 | width: 770px;
137 | }
138 | .span7 {
139 | width: 670px;
140 | }
141 | .span6 {
142 | width: 570px;
143 | }
144 | .span5 {
145 | width: 470px;
146 | }
147 | .span4 {
148 | width: 370px;
149 | }
150 | .span3 {
151 | width: 270px;
152 | }
153 | .span2 {
154 | width: 170px;
155 | }
156 | .span1 {
157 | width: 70px;
158 | }
159 | .offset12 {
160 | margin-left: 1230px;
161 | }
162 | .offset11 {
163 | margin-left: 1130px;
164 | }
165 | .offset10 {
166 | margin-left: 1030px;
167 | }
168 | .offset9 {
169 | margin-left: 930px;
170 | }
171 | .offset8 {
172 | margin-left: 830px;
173 | }
174 | .offset7 {
175 | margin-left: 730px;
176 | }
177 | .offset6 {
178 | margin-left: 630px;
179 | }
180 | .offset5 {
181 | margin-left: 530px;
182 | }
183 | .offset4 {
184 | margin-left: 430px;
185 | }
186 | .offset3 {
187 | margin-left: 330px;
188 | }
189 | .offset2 {
190 | margin-left: 230px;
191 | }
192 | .offset1 {
193 | margin-left: 130px;
194 | }
195 | .row-fluid {
196 | width: 100%;
197 | *zoom: 1;
198 | }
199 | .row-fluid:before,
200 | .row-fluid:after {
201 | display: table;
202 | line-height: 0;
203 | content: "";
204 | }
205 | .row-fluid:after {
206 | clear: both;
207 | }
208 | .row-fluid [class*="span"] {
209 | display: block;
210 | float: left;
211 | width: 100%;
212 | min-height: 30px;
213 | margin-left: 2.564102564102564%;
214 | *margin-left: 2.5109110747408616%;
215 | -webkit-box-sizing: border-box;
216 | -moz-box-sizing: border-box;
217 | box-sizing: border-box;
218 | }
219 | .row-fluid [class*="span"]:first-child {
220 | margin-left: 0;
221 | }
222 | .row-fluid .controls-row [class*="span"] + [class*="span"] {
223 | margin-left: 2.564102564102564%;
224 | }
225 | .row-fluid .span12 {
226 | width: 100%;
227 | *width: 99.94680851063829%;
228 | }
229 | .row-fluid .span11 {
230 | width: 91.45299145299145%;
231 | *width: 91.39979996362975%;
232 | }
233 | .row-fluid .span10 {
234 | width: 82.90598290598291%;
235 | *width: 82.8527914166212%;
236 | }
237 | .row-fluid .span9 {
238 | width: 74.35897435897436%;
239 | *width: 74.30578286961266%;
240 | }
241 | .row-fluid .span8 {
242 | width: 65.81196581196582%;
243 | *width: 65.75877432260411%;
244 | }
245 | .row-fluid .span7 {
246 | width: 57.26495726495726%;
247 | *width: 57.21176577559556%;
248 | }
249 | .row-fluid .span6 {
250 | width: 48.717948717948715%;
251 | *width: 48.664757228587014%;
252 | }
253 | .row-fluid .span5 {
254 | width: 40.17094017094017%;
255 | *width: 40.11774868157847%;
256 | }
257 | .row-fluid .span4 {
258 | width: 31.623931623931625%;
259 | *width: 31.570740134569924%;
260 | }
261 | .row-fluid .span3 {
262 | width: 23.076923076923077%;
263 | *width: 23.023731587561375%;
264 | }
265 | .row-fluid .span2 {
266 | width: 14.52991452991453%;
267 | *width: 14.476723040552828%;
268 | }
269 | .row-fluid .span1 {
270 | width: 5.982905982905983%;
271 | *width: 5.929714493544281%;
272 | }
273 | .row-fluid .offset12 {
274 | margin-left: 105.12820512820512%;
275 | *margin-left: 105.02182214948171%;
276 | }
277 | .row-fluid .offset12:first-child {
278 | margin-left: 102.56410256410257%;
279 | *margin-left: 102.45771958537915%;
280 | }
281 | .row-fluid .offset11 {
282 | margin-left: 96.58119658119658%;
283 | *margin-left: 96.47481360247316%;
284 | }
285 | .row-fluid .offset11:first-child {
286 | margin-left: 94.01709401709402%;
287 | *margin-left: 93.91071103837061%;
288 | }
289 | .row-fluid .offset10 {
290 | margin-left: 88.03418803418803%;
291 | *margin-left: 87.92780505546462%;
292 | }
293 | .row-fluid .offset10:first-child {
294 | margin-left: 85.47008547008548%;
295 | *margin-left: 85.36370249136206%;
296 | }
297 | .row-fluid .offset9 {
298 | margin-left: 79.48717948717949%;
299 | *margin-left: 79.38079650845607%;
300 | }
301 | .row-fluid .offset9:first-child {
302 | margin-left: 76.92307692307693%;
303 | *margin-left: 76.81669394435352%;
304 | }
305 | .row-fluid .offset8 {
306 | margin-left: 70.94017094017094%;
307 | *margin-left: 70.83378796144753%;
308 | }
309 | .row-fluid .offset8:first-child {
310 | margin-left: 68.37606837606839%;
311 | *margin-left: 68.26968539734497%;
312 | }
313 | .row-fluid .offset7 {
314 | margin-left: 62.393162393162385%;
315 | *margin-left: 62.28677941443899%;
316 | }
317 | .row-fluid .offset7:first-child {
318 | margin-left: 59.82905982905982%;
319 | *margin-left: 59.72267685033642%;
320 | }
321 | .row-fluid .offset6 {
322 | margin-left: 53.84615384615384%;
323 | *margin-left: 53.739770867430444%;
324 | }
325 | .row-fluid .offset6:first-child {
326 | margin-left: 51.28205128205128%;
327 | *margin-left: 51.175668303327875%;
328 | }
329 | .row-fluid .offset5 {
330 | margin-left: 45.299145299145295%;
331 | *margin-left: 45.1927623204219%;
332 | }
333 | .row-fluid .offset5:first-child {
334 | margin-left: 42.73504273504273%;
335 | *margin-left: 42.62865975631933%;
336 | }
337 | .row-fluid .offset4 {
338 | margin-left: 36.75213675213675%;
339 | *margin-left: 36.645753773413354%;
340 | }
341 | .row-fluid .offset4:first-child {
342 | margin-left: 34.18803418803419%;
343 | *margin-left: 34.081651209310785%;
344 | }
345 | .row-fluid .offset3 {
346 | margin-left: 28.205128205128204%;
347 | *margin-left: 28.0987452264048%;
348 | }
349 | .row-fluid .offset3:first-child {
350 | margin-left: 25.641025641025642%;
351 | *margin-left: 25.53464266230224%;
352 | }
353 | .row-fluid .offset2 {
354 | margin-left: 19.65811965811966%;
355 | *margin-left: 19.551736679396257%;
356 | }
357 | .row-fluid .offset2:first-child {
358 | margin-left: 17.094017094017094%;
359 | *margin-left: 16.98763411529369%;
360 | }
361 | .row-fluid .offset1 {
362 | margin-left: 11.11111111111111%;
363 | *margin-left: 11.004728132387708%;
364 | }
365 | .row-fluid .offset1:first-child {
366 | margin-left: 8.547008547008547%;
367 | *margin-left: 8.440625568285142%;
368 | }
369 | input,
370 | textarea,
371 | .uneditable-input {
372 | margin-left: 0;
373 | }
374 | .controls-row [class*="span"] + [class*="span"] {
375 | margin-left: 30px;
376 | }
377 | input.span12,
378 | textarea.span12,
379 | .uneditable-input.span12 {
380 | width: 1156px;
381 | }
382 | input.span11,
383 | textarea.span11,
384 | .uneditable-input.span11 {
385 | width: 1056px;
386 | }
387 | input.span10,
388 | textarea.span10,
389 | .uneditable-input.span10 {
390 | width: 956px;
391 | }
392 | input.span9,
393 | textarea.span9,
394 | .uneditable-input.span9 {
395 | width: 856px;
396 | }
397 | input.span8,
398 | textarea.span8,
399 | .uneditable-input.span8 {
400 | width: 756px;
401 | }
402 | input.span7,
403 | textarea.span7,
404 | .uneditable-input.span7 {
405 | width: 656px;
406 | }
407 | input.span6,
408 | textarea.span6,
409 | .uneditable-input.span6 {
410 | width: 556px;
411 | }
412 | input.span5,
413 | textarea.span5,
414 | .uneditable-input.span5 {
415 | width: 456px;
416 | }
417 | input.span4,
418 | textarea.span4,
419 | .uneditable-input.span4 {
420 | width: 356px;
421 | }
422 | input.span3,
423 | textarea.span3,
424 | .uneditable-input.span3 {
425 | width: 256px;
426 | }
427 | input.span2,
428 | textarea.span2,
429 | .uneditable-input.span2 {
430 | width: 156px;
431 | }
432 | input.span1,
433 | textarea.span1,
434 | .uneditable-input.span1 {
435 | width: 56px;
436 | }
437 | .thumbnails {
438 | margin-left: -30px;
439 | }
440 | .thumbnails > li {
441 | margin-left: 30px;
442 | }
443 | .row-fluid .thumbnails {
444 | margin-left: 0;
445 | }
446 | }
447 |
448 | @media (min-width: 768px) and (max-width: 979px) {
449 | .row {
450 | margin-left: -20px;
451 | *zoom: 1;
452 | }
453 | .row:before,
454 | .row:after {
455 | display: table;
456 | line-height: 0;
457 | content: "";
458 | }
459 | .row:after {
460 | clear: both;
461 | }
462 | [class*="span"] {
463 | float: left;
464 | min-height: 1px;
465 | margin-left: 20px;
466 | }
467 | .container,
468 | .navbar-static-top .container,
469 | .navbar-fixed-top .container,
470 | .navbar-fixed-bottom .container {
471 | width: 724px;
472 | }
473 | .span12 {
474 | width: 724px;
475 | }
476 | .span11 {
477 | width: 662px;
478 | }
479 | .span10 {
480 | width: 600px;
481 | }
482 | .span9 {
483 | width: 538px;
484 | }
485 | .span8 {
486 | width: 476px;
487 | }
488 | .span7 {
489 | width: 414px;
490 | }
491 | .span6 {
492 | width: 352px;
493 | }
494 | .span5 {
495 | width: 290px;
496 | }
497 | .span4 {
498 | width: 228px;
499 | }
500 | .span3 {
501 | width: 166px;
502 | }
503 | .span2 {
504 | width: 104px;
505 | }
506 | .span1 {
507 | width: 42px;
508 | }
509 | .offset12 {
510 | margin-left: 764px;
511 | }
512 | .offset11 {
513 | margin-left: 702px;
514 | }
515 | .offset10 {
516 | margin-left: 640px;
517 | }
518 | .offset9 {
519 | margin-left: 578px;
520 | }
521 | .offset8 {
522 | margin-left: 516px;
523 | }
524 | .offset7 {
525 | margin-left: 454px;
526 | }
527 | .offset6 {
528 | margin-left: 392px;
529 | }
530 | .offset5 {
531 | margin-left: 330px;
532 | }
533 | .offset4 {
534 | margin-left: 268px;
535 | }
536 | .offset3 {
537 | margin-left: 206px;
538 | }
539 | .offset2 {
540 | margin-left: 144px;
541 | }
542 | .offset1 {
543 | margin-left: 82px;
544 | }
545 | .row-fluid {
546 | width: 100%;
547 | *zoom: 1;
548 | }
549 | .row-fluid:before,
550 | .row-fluid:after {
551 | display: table;
552 | line-height: 0;
553 | content: "";
554 | }
555 | .row-fluid:after {
556 | clear: both;
557 | }
558 | .row-fluid [class*="span"] {
559 | display: block;
560 | float: left;
561 | width: 100%;
562 | min-height: 30px;
563 | margin-left: 2.7624309392265194%;
564 | *margin-left: 2.709239449864817%;
565 | -webkit-box-sizing: border-box;
566 | -moz-box-sizing: border-box;
567 | box-sizing: border-box;
568 | }
569 | .row-fluid [class*="span"]:first-child {
570 | margin-left: 0;
571 | }
572 | .row-fluid .controls-row [class*="span"] + [class*="span"] {
573 | margin-left: 2.7624309392265194%;
574 | }
575 | .row-fluid .span12 {
576 | width: 100%;
577 | *width: 99.94680851063829%;
578 | }
579 | .row-fluid .span11 {
580 | width: 91.43646408839778%;
581 | *width: 91.38327259903608%;
582 | }
583 | .row-fluid .span10 {
584 | width: 82.87292817679558%;
585 | *width: 82.81973668743387%;
586 | }
587 | .row-fluid .span9 {
588 | width: 74.30939226519337%;
589 | *width: 74.25620077583166%;
590 | }
591 | .row-fluid .span8 {
592 | width: 65.74585635359117%;
593 | *width: 65.69266486422946%;
594 | }
595 | .row-fluid .span7 {
596 | width: 57.18232044198895%;
597 | *width: 57.12912895262725%;
598 | }
599 | .row-fluid .span6 {
600 | width: 48.61878453038674%;
601 | *width: 48.56559304102504%;
602 | }
603 | .row-fluid .span5 {
604 | width: 40.05524861878453%;
605 | *width: 40.00205712942283%;
606 | }
607 | .row-fluid .span4 {
608 | width: 31.491712707182323%;
609 | *width: 31.43852121782062%;
610 | }
611 | .row-fluid .span3 {
612 | width: 22.92817679558011%;
613 | *width: 22.87498530621841%;
614 | }
615 | .row-fluid .span2 {
616 | width: 14.3646408839779%;
617 | *width: 14.311449394616199%;
618 | }
619 | .row-fluid .span1 {
620 | width: 5.801104972375691%;
621 | *width: 5.747913483013988%;
622 | }
623 | .row-fluid .offset12 {
624 | margin-left: 105.52486187845304%;
625 | *margin-left: 105.41847889972962%;
626 | }
627 | .row-fluid .offset12:first-child {
628 | margin-left: 102.76243093922652%;
629 | *margin-left: 102.6560479605031%;
630 | }
631 | .row-fluid .offset11 {
632 | margin-left: 96.96132596685082%;
633 | *margin-left: 96.8549429881274%;
634 | }
635 | .row-fluid .offset11:first-child {
636 | margin-left: 94.1988950276243%;
637 | *margin-left: 94.09251204890089%;
638 | }
639 | .row-fluid .offset10 {
640 | margin-left: 88.39779005524862%;
641 | *margin-left: 88.2914070765252%;
642 | }
643 | .row-fluid .offset10:first-child {
644 | margin-left: 85.6353591160221%;
645 | *margin-left: 85.52897613729868%;
646 | }
647 | .row-fluid .offset9 {
648 | margin-left: 79.8342541436464%;
649 | *margin-left: 79.72787116492299%;
650 | }
651 | .row-fluid .offset9:first-child {
652 | margin-left: 77.07182320441989%;
653 | *margin-left: 76.96544022569647%;
654 | }
655 | .row-fluid .offset8 {
656 | margin-left: 71.2707182320442%;
657 | *margin-left: 71.16433525332079%;
658 | }
659 | .row-fluid .offset8:first-child {
660 | margin-left: 68.50828729281768%;
661 | *margin-left: 68.40190431409427%;
662 | }
663 | .row-fluid .offset7 {
664 | margin-left: 62.70718232044199%;
665 | *margin-left: 62.600799341718584%;
666 | }
667 | .row-fluid .offset7:first-child {
668 | margin-left: 59.94475138121547%;
669 | *margin-left: 59.838368402492065%;
670 | }
671 | .row-fluid .offset6 {
672 | margin-left: 54.14364640883978%;
673 | *margin-left: 54.037263430116376%;
674 | }
675 | .row-fluid .offset6:first-child {
676 | margin-left: 51.38121546961326%;
677 | *margin-left: 51.27483249088986%;
678 | }
679 | .row-fluid .offset5 {
680 | margin-left: 45.58011049723757%;
681 | *margin-left: 45.47372751851417%;
682 | }
683 | .row-fluid .offset5:first-child {
684 | margin-left: 42.81767955801105%;
685 | *margin-left: 42.71129657928765%;
686 | }
687 | .row-fluid .offset4 {
688 | margin-left: 37.01657458563536%;
689 | *margin-left: 36.91019160691196%;
690 | }
691 | .row-fluid .offset4:first-child {
692 | margin-left: 34.25414364640884%;
693 | *margin-left: 34.14776066768544%;
694 | }
695 | .row-fluid .offset3 {
696 | margin-left: 28.45303867403315%;
697 | *margin-left: 28.346655695309746%;
698 | }
699 | .row-fluid .offset3:first-child {
700 | margin-left: 25.69060773480663%;
701 | *margin-left: 25.584224756083227%;
702 | }
703 | .row-fluid .offset2 {
704 | margin-left: 19.88950276243094%;
705 | *margin-left: 19.783119783707537%;
706 | }
707 | .row-fluid .offset2:first-child {
708 | margin-left: 17.12707182320442%;
709 | *margin-left: 17.02068884448102%;
710 | }
711 | .row-fluid .offset1 {
712 | margin-left: 11.32596685082873%;
713 | *margin-left: 11.219583872105325%;
714 | }
715 | .row-fluid .offset1:first-child {
716 | margin-left: 8.56353591160221%;
717 | *margin-left: 8.457152932878806%;
718 | }
719 | input,
720 | textarea,
721 | .uneditable-input {
722 | margin-left: 0;
723 | }
724 | .controls-row [class*="span"] + [class*="span"] {
725 | margin-left: 20px;
726 | }
727 | input.span12,
728 | textarea.span12,
729 | .uneditable-input.span12 {
730 | width: 710px;
731 | }
732 | input.span11,
733 | textarea.span11,
734 | .uneditable-input.span11 {
735 | width: 648px;
736 | }
737 | input.span10,
738 | textarea.span10,
739 | .uneditable-input.span10 {
740 | width: 586px;
741 | }
742 | input.span9,
743 | textarea.span9,
744 | .uneditable-input.span9 {
745 | width: 524px;
746 | }
747 | input.span8,
748 | textarea.span8,
749 | .uneditable-input.span8 {
750 | width: 462px;
751 | }
752 | input.span7,
753 | textarea.span7,
754 | .uneditable-input.span7 {
755 | width: 400px;
756 | }
757 | input.span6,
758 | textarea.span6,
759 | .uneditable-input.span6 {
760 | width: 338px;
761 | }
762 | input.span5,
763 | textarea.span5,
764 | .uneditable-input.span5 {
765 | width: 276px;
766 | }
767 | input.span4,
768 | textarea.span4,
769 | .uneditable-input.span4 {
770 | width: 214px;
771 | }
772 | input.span3,
773 | textarea.span3,
774 | .uneditable-input.span3 {
775 | width: 152px;
776 | }
777 | input.span2,
778 | textarea.span2,
779 | .uneditable-input.span2 {
780 | width: 90px;
781 | }
782 | input.span1,
783 | textarea.span1,
784 | .uneditable-input.span1 {
785 | width: 28px;
786 | }
787 | }
788 |
789 | @media (max-width: 767px) {
790 | body {
791 | padding-right: 20px;
792 | padding-left: 20px;
793 | }
794 | .navbar-fixed-top,
795 | .navbar-fixed-bottom,
796 | .navbar-static-top {
797 | margin-right: -20px;
798 | margin-left: -20px;
799 | }
800 | .container-fluid {
801 | padding: 0;
802 | }
803 | .dl-horizontal dt {
804 | float: none;
805 | width: auto;
806 | clear: none;
807 | text-align: left;
808 | }
809 | .dl-horizontal dd {
810 | margin-left: 0;
811 | }
812 | .container {
813 | width: auto;
814 | }
815 | .row-fluid {
816 | width: 100%;
817 | }
818 | .row,
819 | .thumbnails {
820 | margin-left: 0;
821 | }
822 | .thumbnails > li {
823 | float: none;
824 | margin-left: 0;
825 | }
826 | [class*="span"],
827 | .uneditable-input[class*="span"],
828 | .row-fluid [class*="span"] {
829 | display: block;
830 | float: none;
831 | width: 100%;
832 | margin-left: 0;
833 | -webkit-box-sizing: border-box;
834 | -moz-box-sizing: border-box;
835 | box-sizing: border-box;
836 | }
837 | .span12,
838 | .row-fluid .span12 {
839 | width: 100%;
840 | -webkit-box-sizing: border-box;
841 | -moz-box-sizing: border-box;
842 | box-sizing: border-box;
843 | }
844 | .row-fluid [class*="offset"]:first-child {
845 | margin-left: 0;
846 | }
847 | .input-large,
848 | .input-xlarge,
849 | .input-xxlarge,
850 | input[class*="span"],
851 | select[class*="span"],
852 | textarea[class*="span"],
853 | .uneditable-input {
854 | display: block;
855 | width: 100%;
856 | min-height: 30px;
857 | -webkit-box-sizing: border-box;
858 | -moz-box-sizing: border-box;
859 | box-sizing: border-box;
860 | }
861 | .input-prepend input,
862 | .input-append input,
863 | .input-prepend input[class*="span"],
864 | .input-append input[class*="span"] {
865 | display: inline-block;
866 | width: auto;
867 | }
868 | .controls-row [class*="span"] + [class*="span"] {
869 | margin-left: 0;
870 | }
871 | .modal {
872 | position: fixed;
873 | top: 20px;
874 | right: 20px;
875 | left: 20px;
876 | width: auto;
877 | margin: 0;
878 | }
879 | .modal.fade {
880 | top: -100px;
881 | }
882 | .modal.fade.in {
883 | top: 20px;
884 | }
885 | }
886 |
887 | @media (max-width: 480px) {
888 | .nav-collapse {
889 | -webkit-transform: translate3d(0, 0, 0);
890 | }
891 | .page-header h1 small {
892 | display: block;
893 | line-height: 20px;
894 | }
895 | input[type="checkbox"],
896 | input[type="radio"] {
897 | border: 1px solid #ccc;
898 | }
899 | .form-horizontal .control-label {
900 | float: none;
901 | width: auto;
902 | padding-top: 0;
903 | text-align: left;
904 | }
905 | .form-horizontal .controls {
906 | margin-left: 0;
907 | }
908 | .form-horizontal .control-list {
909 | padding-top: 0;
910 | }
911 | .form-horizontal .form-actions {
912 | padding-right: 10px;
913 | padding-left: 10px;
914 | }
915 | .media .pull-left,
916 | .media .pull-right {
917 | display: block;
918 | float: none;
919 | margin-bottom: 10px;
920 | }
921 | .media-object {
922 | margin-right: 0;
923 | margin-left: 0;
924 | }
925 | .modal {
926 | top: 10px;
927 | right: 10px;
928 | left: 10px;
929 | }
930 | .modal-header .close {
931 | padding: 10px;
932 | margin: -10px;
933 | }
934 | .carousel-caption {
935 | position: static;
936 | }
937 | }
938 |
939 | @media (max-width: 979px) {
940 | body {
941 | padding-top: 0;
942 | }
943 | .navbar-fixed-top,
944 | .navbar-fixed-bottom {
945 | position: static;
946 | }
947 | .navbar-fixed-top {
948 | margin-bottom: 20px;
949 | }
950 | .navbar-fixed-bottom {
951 | margin-top: 20px;
952 | }
953 | .navbar-fixed-top .navbar-inner,
954 | .navbar-fixed-bottom .navbar-inner {
955 | padding: 5px;
956 | }
957 | .navbar .container {
958 | width: auto;
959 | padding: 0;
960 | }
961 | .navbar .brand {
962 | padding-right: 10px;
963 | padding-left: 10px;
964 | margin: 0 0 0 -5px;
965 | }
966 | .nav-collapse {
967 | clear: both;
968 | }
969 | .nav-collapse .nav {
970 | float: none;
971 | margin: 0 0 10px;
972 | }
973 | .nav-collapse .nav > li {
974 | float: none;
975 | }
976 | .nav-collapse .nav > li > a {
977 | margin-bottom: 2px;
978 | }
979 | .nav-collapse .nav > .divider-vertical {
980 | display: none;
981 | }
982 | .nav-collapse .nav .nav-header {
983 | color: #777777;
984 | text-shadow: none;
985 | }
986 | .nav-collapse .nav > li > a,
987 | .nav-collapse .dropdown-menu a {
988 | padding: 9px 15px;
989 | font-weight: bold;
990 | color: #777777;
991 | -webkit-border-radius: 3px;
992 | -moz-border-radius: 3px;
993 | border-radius: 3px;
994 | }
995 | .nav-collapse .btn {
996 | padding: 4px 10px 4px;
997 | font-weight: normal;
998 | -webkit-border-radius: 4px;
999 | -moz-border-radius: 4px;
1000 | border-radius: 4px;
1001 | }
1002 | .nav-collapse .dropdown-menu li + li a {
1003 | margin-bottom: 2px;
1004 | }
1005 | .nav-collapse .nav > li > a:hover,
1006 | .nav-collapse .dropdown-menu a:hover {
1007 | background-color: #f2f2f2;
1008 | }
1009 | .navbar-inverse .nav-collapse .nav > li > a,
1010 | .navbar-inverse .nav-collapse .dropdown-menu a {
1011 | color: #999999;
1012 | }
1013 | .navbar-inverse .nav-collapse .nav > li > a:hover,
1014 | .navbar-inverse .nav-collapse .dropdown-menu a:hover {
1015 | background-color: #111111;
1016 | }
1017 | .nav-collapse.in .btn-group {
1018 | padding: 0;
1019 | margin-top: 5px;
1020 | }
1021 | .nav-collapse .dropdown-menu {
1022 | position: static;
1023 | top: auto;
1024 | left: auto;
1025 | display: none;
1026 | float: none;
1027 | max-width: none;
1028 | padding: 0;
1029 | margin: 0 15px;
1030 | background-color: transparent;
1031 | border: none;
1032 | -webkit-border-radius: 0;
1033 | -moz-border-radius: 0;
1034 | border-radius: 0;
1035 | -webkit-box-shadow: none;
1036 | -moz-box-shadow: none;
1037 | box-shadow: none;
1038 | }
1039 | .nav-collapse .open > .dropdown-menu {
1040 | display: block;
1041 | }
1042 | .nav-collapse .dropdown-menu:before,
1043 | .nav-collapse .dropdown-menu:after {
1044 | display: none;
1045 | }
1046 | .nav-collapse .dropdown-menu .divider {
1047 | display: none;
1048 | }
1049 | .nav-collapse .nav > li > .dropdown-menu:before,
1050 | .nav-collapse .nav > li > .dropdown-menu:after {
1051 | display: none;
1052 | }
1053 | .nav-collapse .navbar-form,
1054 | .nav-collapse .navbar-search {
1055 | float: none;
1056 | padding: 10px 15px;
1057 | margin: 10px 0;
1058 | border-top: 1px solid #f2f2f2;
1059 | border-bottom: 1px solid #f2f2f2;
1060 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1061 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1062 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1063 | }
1064 | .navbar-inverse .nav-collapse .navbar-form,
1065 | .navbar-inverse .nav-collapse .navbar-search {
1066 | border-top-color: #111111;
1067 | border-bottom-color: #111111;
1068 | }
1069 | .navbar .nav-collapse .nav.pull-right {
1070 | float: none;
1071 | margin-left: 0;
1072 | }
1073 | .nav-collapse,
1074 | .nav-collapse.collapse {
1075 | height: 0;
1076 | overflow: hidden;
1077 | }
1078 | .navbar .btn-navbar {
1079 | display: block;
1080 | }
1081 | .navbar-static .navbar-inner {
1082 | padding-right: 10px;
1083 | padding-left: 10px;
1084 | }
1085 | }
1086 |
1087 | @media (min-width: 980px) {
1088 | .nav-collapse.collapse {
1089 | height: auto !important;
1090 | overflow: visible !important;
1091 | }
1092 | }
1093 |
--------------------------------------------------------------------------------
/static/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap.js by @fat & @mdo
3 | * Copyright 2012 Twitter, Inc.
4 | * http://www.apache.org/licenses/LICENSE-2.0.txt
5 | */
6 | !function($){"use strict";$(function(){$.support.transition=function(){var transitionEnd=function(){var name,el=document.createElement("bootstrap"),transEndEventNames={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(name in transEndEventNames)if(void 0!==el.style[name])return transEndEventNames[name]}();return transitionEnd&&{end:transitionEnd}}()})}(window.jQuery),!function($){"use strict";var dismiss='[data-dismiss="alert"]',Alert=function(el){$(el).on("click",dismiss,this.close)};Alert.prototype.close=function(e){function removeElement(){$parent.trigger("closed").remove()}var $parent,$this=$(this),selector=$this.attr("data-target");selector||(selector=$this.attr("href"),selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,"")),$parent=$(selector),e&&e.preventDefault(),$parent.length||($parent=$this.hasClass("alert")?$this:$this.parent()),$parent.trigger(e=$.Event("close")),e.isDefaultPrevented()||($parent.removeClass("in"),$.support.transition&&$parent.hasClass("fade")?$parent.on($.support.transition.end,removeElement):removeElement())};var old=$.fn.alert;$.fn.alert=function(option){return this.each(function(){var $this=$(this),data=$this.data("alert");data||$this.data("alert",data=new Alert(this)),"string"==typeof option&&data[option].call($this)})},$.fn.alert.Constructor=Alert,$.fn.alert.noConflict=function(){return $.fn.alert=old,this},$(document).on("click.alert.data-api",dismiss,Alert.prototype.close)}(window.jQuery),!function($){"use strict";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+="Text",data.resetText||$el.data("resetText",$el[val]()),$el[val](data[state]||this.options[state]),setTimeout(function(){"loadingText"==state?$el.addClass(d).attr(d,d):$el.removeClass(d).removeAttr(d)},0)},Button.prototype.toggle=function(){var $parent=this.$element.closest('[data-toggle="buttons-radio"]');$parent&&$parent.find(".active").removeClass("active"),this.$element.toggleClass("active")};var old=$.fn.button;$.fn.button=function(option){return this.each(function(){var $this=$(this),data=$this.data("button"),options="object"==typeof option&&option;data||$this.data("button",data=new Button(this,options)),"toggle"==option?data.toggle():option&&data.setState(option)})},$.fn.button.defaults={loadingText:"loading..."},$.fn.button.Constructor=Button,$.fn.button.noConflict=function(){return $.fn.button=old,this},$(document).on("click.button.data-api","[data-toggle^=button]",function(e){var $btn=$(e.target);$btn.hasClass("btn")||($btn=$btn.closest(".btn")),$btn.button("toggle")})}(window.jQuery),!function($){"use strict";var Carousel=function(element,options){this.$element=$(element),this.options=options,"hover"==this.options.pause&&this.$element.on("mouseenter",$.proxy(this.pause,this)).on("mouseleave",$.proxy(this.cycle,this))};Carousel.prototype={cycle:function(e){return e||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval($.proxy(this.next,this),this.options.interval)),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||0>pos))return this.sliding?this.$element.one("slid",function(){that.to(pos)}):activePos==pos?this.pause().cycle():this.slide(pos>activePos?"next":"prev",$(children[pos]))},pause:function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&$.support.transition.end&&(this.$element.trigger($.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){return this.sliding?void 0:this.slide("next")},prev:function(){return this.sliding?void 0:this.slide("prev")},slide:function(type,next){var e,$active=this.$element.find(".item.active"),$next=next||$active[type](),isCycling=this.interval,direction="next"==type?"left":"right",fallback="next"==type?"first":"last",that=this;if(this.sliding=!0,isCycling&&this.pause(),$next=$next.length?$next:this.$element.find(".item")[fallback](),e=$.Event("slide",{relatedTarget:$next[0]}),!$next.hasClass("active")){if($.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(e),e.isDefaultPrevented())return;$next.addClass(type),$next[0].offsetWidth,$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=!1,setTimeout(function(){that.$element.trigger("slid")},0)})}else{if(this.$element.trigger(e),e.isDefaultPrevented())return;$active.removeClass("active"),$next.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return isCycling&&this.cycle(),this}}};var old=$.fn.carousel;$.fn.carousel=function(option){return this.each(function(){var $this=$(this),data=$this.data("carousel"),options=$.extend({},$.fn.carousel.defaults,"object"==typeof option&&option),action="string"==typeof option?option:options.slide;data||$this.data("carousel",data=new Carousel(this,options)),"number"==typeof option?data.to(option):action?data[action]():options.interval&&data.cycle()})},$.fn.carousel.defaults={interval:5e3,pause:"hover"},$.fn.carousel.Constructor=Carousel,$.fn.carousel.noConflict=function(){return $.fn.carousel=old,this},$(document).on("click.carousel.data-api","[data-slide]",function(e){var href,$this=$(this),$target=$($this.attr("data-target")||(href=$this.attr("href"))&&href.replace(/.*(?=#[^\s]+$)/,"")),options=$.extend({},$target.data(),$this.data());$target.carousel(options),e.preventDefault()})}(window.jQuery),!function($){"use strict";var Collapse=function(element,options){this.$element=$(element),this.options=$.extend({},$.fn.collapse.defaults,options),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){if(dimension=this.dimension(),scroll=$.camelCase(["scroll",dimension].join("-")),actives=this.$parent&&this.$parent.find("> .accordion-group > .in"),actives&&actives.length){if(hasData=actives.data("collapse"),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;this.transitioning||(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();return this.$element.removeClass("collapse")[dimension](size||"auto")[0].offsetWidth,this.$element[null!==size?"addClass":"removeClass"]("collapse"),this},transition:function(method,startEvent,completeEvent){var that=this,complete=function(){"show"==startEvent.type&&that.reset(),that.transitioning=0,that.$element.trigger(completeEvent)};this.$element.trigger(startEvent),startEvent.isDefaultPrevented()||(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"]()}};var old=$.fn.collapse;$.fn.collapse=function(option){return this.each(function(){var $this=$(this),data=$this.data("collapse"),options="object"==typeof option&&option;data||$this.data("collapse",data=new Collapse(this,options)),"string"==typeof option&&data[option]()})},$.fn.collapse.defaults={toggle:!0},$.fn.collapse.Constructor=Collapse,$.fn.collapse.noConflict=function(){return $.fn.collapse=old,this},$(document).on("click.collapse.data-api","[data-toggle=collapse]",function(e){var href,$this=$(this),target=$this.attr("data-target")||e.preventDefault()||(href=$this.attr("href"))&&href.replace(/.*(?=#[^\s]+$)/,""),option=$(target).data("collapse")?"toggle":$this.data();$this[$(target).hasClass("in")?"addClass":"removeClass"]("collapsed"),$(target).collapse(option)})}(window.jQuery),!function($){"use strict";function clearMenus(){$(toggle).each(function(){getParent($(this)).removeClass("open")})}function getParent($this){var $parent,selector=$this.attr("data-target");return selector||(selector=$this.attr("href"),selector=selector&&/#/.test(selector)&&selector.replace(/.*(?=#[^\s]*$)/,"")),$parent=$(selector),$parent.length||($parent=$this.parent()),$parent}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(){var $parent,isActive,$this=$(this);if(!$this.is(".disabled, :disabled"))return $parent=getParent($this),isActive=$parent.hasClass("open"),clearMenus(),isActive||$parent.toggleClass("open"),$this.focus(),!1},keydown:function(e){var $this,$items,$parent,isActive,index;if(/(38|40|27)/.test(e.keyCode)&&($this=$(this),e.preventDefault(),e.stopPropagation(),!$this.is(".disabled, :disabled"))){if($parent=getParent($this),isActive=$parent.hasClass("open"),!isActive||isActive&&27==e.keyCode)return $this.click();$items=$("[role=menu] li:not(.divider):visible a",$parent),$items.length&&(index=$items.index($items.filter(":focus")),38==e.keyCode&&index>0&&index--,40==e.keyCode&&$items.length-1>index&&index++,~index||(index=0),$items.eq(index).focus())}}};var old=$.fn.dropdown;$.fn.dropdown=function(option){return this.each(function(){var $this=$(this),data=$this.data("dropdown");data||$this.data("dropdown",data=new Dropdown(this)),"string"==typeof option&&data[option].call($this)})},$.fn.dropdown.Constructor=Dropdown,$.fn.dropdown.noConflict=function(){return $.fn.dropdown=old,this},$(document).on("click.dropdown.data-api touchstart.dropdown.data-api",clearMenus).on("click.dropdown touchstart.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("touchstart.dropdown.data-api",".dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",toggle,Dropdown.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",toggle+", [role=menu]",Dropdown.prototype.keydown)}(window.jQuery),!function($){"use strict";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?"hide":"show"]()},show:function(){var that=this,e=$.Event("show");this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.backdrop(function(){var transition=$.support.transition&&that.$element.hasClass("fade");that.$element.parent().length||that.$element.appendTo(document.body),that.$element.show(),transition&&that.$element[0].offsetWidth,that.$element.addClass("in").attr("aria-hidden",!1),that.enforceFocus(),transition?that.$element.one($.support.transition.end,function(){that.$element.focus().trigger("shown")}):that.$element.focus().trigger("shown")}))},hide:function(e){e&&e.preventDefault(),e=$.Event("hide"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),$(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),$.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal())},enforceFocus:function(){var that=this;$(document).on("focusin.modal",function(e){that.$element[0]===e.target||that.$element.has(e.target).length||that.$element.focus()})},escape:function(){var that=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(e){27==e.which&&that.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var that=this,timeout=setTimeout(function(){that.$element.off($.support.transition.end),that.hideModal()},500);this.$element.one($.support.transition.end,function(){clearTimeout(timeout),that.hideModal()})},hideModal:function(){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(callback){var animate=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var doAnimate=$.support.transition&&animate;this.$backdrop=$('').appendTo(document.body),this.$backdrop.click("static"==this.options.backdrop?$.proxy(this.$element[0].focus,this.$element[0]):$.proxy(this.hide,this)),doAnimate&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),doAnimate?this.$backdrop.one($.support.transition.end,callback):callback()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),$.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one($.support.transition.end,$.proxy(this.removeBackdrop,this)):this.removeBackdrop()):callback&&callback()}};var old=$.fn.modal;$.fn.modal=function(option){return this.each(function(){var $this=$(this),data=$this.data("modal"),options=$.extend({},$.fn.modal.defaults,$this.data(),"object"==typeof option&&option);data||$this.data("modal",data=new Modal(this,options)),"string"==typeof option?data[option]():options.show&&data.show()})},$.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},$.fn.modal.Constructor=Modal,$.fn.modal.noConflict=function(){return $.fn.modal=old,this},$(document).on("click.modal.data-api",'[data-toggle="modal"]',function(e){var $this=$(this),href=$this.attr("href"),$target=$($this.attr("data-target")||href&&href.replace(/.*(?=#[^\s]+$)/,"")),option=$target.data("modal")?"toggle":$.extend({remote:!/#/.test(href)&&href},$target.data(),$this.data());e.preventDefault(),$target.modal(option).one("hide",function(){$this.focus()})})}(window.jQuery),!function($){"use strict";var Tooltip=function(element,options){this.init("tooltip",element,options)};Tooltip.prototype={constructor:Tooltip,init:function(type,element,options){var eventIn,eventOut;this.type=type,this.$element=$(element),this.options=this.getOptions(options),this.enabled=!0,"click"==this.options.trigger?this.$element.on("click."+this.type,this.options.selector,$.proxy(this.toggle,this)):"manual"!=this.options.trigger&&(eventIn="hover"==this.options.trigger?"mouseenter":"focus",eventOut="hover"==this.options.trigger?"mouseleave":"blur",this.$element.on(eventIn+"."+this.type,this.options.selector,$.proxy(this.enter,this)),this.$element.on(eventOut+"."+this.type,this.options.selector,$.proxy(this.leave,this))),this.options.selector?this._options=$.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(options){return options=$.extend({},$.fn[this.type].defaults,options,this.$element.data()),options.delay&&"number"==typeof options.delay&&(options.delay={show:options.delay,hide:options.delay}),options},enter:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type);return self.options.delay&&self.options.delay.show?(clearTimeout(this.timeout),self.hoverState="in",this.timeout=setTimeout(function(){"in"==self.hoverState&&self.show()},self.options.delay.show),void 0):self.show()},leave:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type);return this.timeout&&clearTimeout(this.timeout),self.options.delay&&self.options.delay.hide?(self.hoverState="out",this.timeout=setTimeout(function(){"out"==self.hoverState&&self.hide()},self.options.delay.hide),void 0):self.hide()},show:function(){var $tip,inside,pos,actualWidth,actualHeight,placement,tp;if(this.hasContent()&&this.enabled){switch($tip=this.tip(),this.setContent(),this.options.animation&&$tip.addClass("fade"),placement="function"==typeof this.options.placement?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement,inside=/in/.test(placement),$tip.detach().css({top:0,left:0,display:"block"}).insertAfter(this.$element),pos=this.getPosition(inside),actualWidth=$tip[0].offsetWidth,actualHeight=$tip[0].offsetHeight,inside?placement.split(" ")[1]:placement){case"bottom":tp={top:pos.top+pos.height,left:pos.left+pos.width/2-actualWidth/2};break;case"top":tp={top:pos.top-actualHeight,left:pos.left+pos.width/2-actualWidth/2};break;case"left":tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth};break;case"right":tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width}}$tip.offset(tp).addClass(placement).addClass("in")}},setContent:function(){var $tip=this.tip(),title=this.getTitle();$tip.find(".tooltip-inner")[this.options.html?"html":"text"](title),$tip.removeClass("fade in top bottom left right")},hide:function(){function removeWithAnimation(){var timeout=setTimeout(function(){$tip.off($.support.transition.end).detach()},500);$tip.one($.support.transition.end,function(){clearTimeout(timeout),$tip.detach()})}var $tip=this.tip();return $tip.removeClass("in"),$.support.transition&&this.$tip.hasClass("fade")?removeWithAnimation():$tip.detach(),this},fixTitle:function(){var $e=this.$element;($e.attr("title")||"string"!=typeof $e.attr("data-original-title"))&&$e.attr("data-original-title",$e.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(inside){return $.extend({},inside?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var title,$e=this.$element,o=this.options;return title=$e.attr("data-original-title")||("function"==typeof o.title?o.title.call($e[0]):o.title)},tip:function(){return this.$tip=this.$tip||$(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type);self[self.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var old=$.fn.tooltip;$.fn.tooltip=function(option){return this.each(function(){var $this=$(this),data=$this.data("tooltip"),options="object"==typeof option&&option;data||$this.data("tooltip",data=new Tooltip(this,options)),"string"==typeof option&&data[option]()})},$.fn.tooltip.Constructor=Tooltip,$.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover",title:"",delay:0,html:!1},$.fn.tooltip.noConflict=function(){return $.fn.tooltip=old,this}}(window.jQuery),!function($){"use strict";var Popover=function(element,options){this.init("popover",element,options)};Popover.prototype=$.extend({},$.fn.tooltip.Constructor.prototype,{constructor:Popover,setContent:function(){var $tip=this.tip(),title=this.getTitle(),content=this.getContent();$tip.find(".popover-title")[this.options.html?"html":"text"](title),$tip.find(".popover-content")[this.options.html?"html":"text"](content),$tip.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var content,$e=this.$element,o=this.options;return content=$e.attr("data-content")||("function"==typeof o.content?o.content.call($e[0]):o.content)},tip:function(){return this.$tip||(this.$tip=$(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var old=$.fn.popover;$.fn.popover=function(option){return this.each(function(){var $this=$(this),data=$this.data("popover"),options="object"==typeof option&&option;data||$this.data("popover",data=new Popover(this,options)),"string"==typeof option&&data[option]()})},$.fn.popover.Constructor=Popover,$.fn.popover.defaults=$.extend({},$.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:''}),$.fn.popover.noConflict=function(){return $.fn.popover=old,this}}(window.jQuery),!function($){"use strict";function ScrollSpy(element,options){var href,process=$.proxy(this.process,this),$element=$(element).is("body")?$(window):$(element);this.options=$.extend({},$.fn.scrollspy.defaults,options),this.$scrollElement=$element.on("scroll.scroll-spy.data-api",process),this.selector=(this.options.target||(href=$(element).attr("href"))&&href.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=$("body"),this.refresh(),this.process()}ScrollSpy.prototype={constructor:ScrollSpy,refresh:function(){var $targets,self=this;this.offsets=$([]),this.targets=$([]),$targets=this.$body.find(this.selector).map(function(){var $el=$(this),href=$el.data("target")||$el.attr("href"),$href=/^#\w/.test(href)&&$(href);return $href&&$href.length&&[[$href.position().top+self.$scrollElement.scrollTop(),href]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){self.offsets.push(this[0]),self.targets.push(this[1])})},process:function(){var i,scrollTop=this.$scrollElement.scrollTop()+this.options.offset,scrollHeight=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,maxScroll=scrollHeight-this.$scrollElement.height(),offsets=this.offsets,targets=this.targets,activeTarget=this.activeTarget;if(scrollTop>=maxScroll)return activeTarget!=(i=targets.last()[0])&&this.activate(i);for(i=offsets.length;i--;)activeTarget!=targets[i]&&scrollTop>=offsets[i]&&(!offsets[i+1]||offsets[i+1]>=scrollTop)&&this.activate(targets[i])},activate:function(target){var active,selector;this.activeTarget=target,$(this.selector).parent(".active").removeClass("active"),selector=this.selector+'[data-target="'+target+'"],'+this.selector+'[href="'+target+'"]',active=$(selector).parent("li").addClass("active"),active.parent(".dropdown-menu").length&&(active=active.closest("li.dropdown").addClass("active")),active.trigger("activate")}};var old=$.fn.scrollspy;$.fn.scrollspy=function(option){return this.each(function(){var $this=$(this),data=$this.data("scrollspy"),options="object"==typeof option&&option;data||$this.data("scrollspy",data=new ScrollSpy(this,options)),"string"==typeof option&&data[option]()})},$.fn.scrollspy.Constructor=ScrollSpy,$.fn.scrollspy.defaults={offset:10},$.fn.scrollspy.noConflict=function(){return $.fn.scrollspy=old,this},$(window).on("load",function(){$('[data-spy="scroll"]').each(function(){var $spy=$(this);$spy.scrollspy($spy.data())})})}(window.jQuery),!function($){"use strict";var Tab=function(element){this.element=$(element)};Tab.prototype={constructor:Tab,show:function(){var previous,$target,e,$this=this.element,$ul=$this.closest("ul:not(.dropdown-menu)"),selector=$this.attr("data-target");selector||(selector=$this.attr("href"),selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,"")),$this.parent("li").hasClass("active")||(previous=$ul.find(".active:last a")[0],e=$.Event("show",{relatedTarget:previous}),$this.trigger(e),e.isDefaultPrevented()||($target=$(selector),this.activate($this.parent("li"),$ul),this.activate($target,$target.parent(),function(){$this.trigger({type:"shown",relatedTarget:previous})})))},activate:function(element,container,callback){function next(){$active.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),element.addClass("active"),transition?(element[0].offsetWidth,element.addClass("in")):element.removeClass("fade"),element.parent(".dropdown-menu")&&element.closest("li.dropdown").addClass("active"),callback&&callback()}var $active=container.find("> .active"),transition=callback&&$.support.transition&&$active.hasClass("fade");transition?$active.one($.support.transition.end,next):next(),$active.removeClass("in")}};var old=$.fn.tab;$.fn.tab=function(option){return this.each(function(){var $this=$(this),data=$this.data("tab");data||$this.data("tab",data=new Tab(this)),"string"==typeof option&&data[option]()})},$.fn.tab.Constructor=Tab,$.fn.tab.noConflict=function(){return $.fn.tab=old,this},$(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(e){e.preventDefault(),$(this).tab("show")})}(window.jQuery),!function($){"use strict";var Typeahead=function(element,options){this.$element=$(element),this.options=$.extend({},$.fn.typeahead.defaults,options),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=$(this.options.menu),this.shown=!1,this.listen()};Typeahead.prototype={constructor:Typeahead,select:function(){var val=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(val)).change(),this.hide()},updater:function(item){return item},show:function(){var pos=$.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:pos.top+pos.height,left:pos.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(){var items;return this.query=this.$element.val(),!this.query||this.query.length"+match+""})},render:function(items){var that=this;return items=$(items).map(function(i,item){return i=$(that.options.item).attr("data-value",item),i.find("a").html(that.highlighter(item)),i[0]}),items.first().addClass("active"),this.$menu.html(items),this},next:function(){var active=this.$menu.find(".active").removeClass("active"),next=active.next();next.length||(next=$(this.$menu.find("li")[0])),next.addClass("active")},prev:function(){var active=this.$menu.find(".active").removeClass("active"),prev=active.prev();prev.length||(prev=this.$menu.find("li").last()),prev.addClass("active")},listen:function(){this.$element.on("blur",$.proxy(this.blur,this)).on("keypress",$.proxy(this.keypress,this)).on("keyup",$.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",$.proxy(this.keydown,this)),this.$menu.on("click",$.proxy(this.click,this)).on("mouseenter","li",$.proxy(this.mouseenter,this))},eventSupported:function(eventName){var isSupported=eventName in this.$element;return isSupported||(this.$element.setAttribute(eventName,"return;"),isSupported="function"==typeof this.$element[eventName]),isSupported},move:function(e){if(this.shown){switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()}},keydown:function(e){this.suppressKeyPressRepeat=~$.inArray(e.keyCode,[40,38,9,13,27]),this.move(e)},keypress:function(e){this.suppressKeyPressRepeat||this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},blur:function(){var that=this;setTimeout(function(){that.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(e){this.$menu.find(".active").removeClass("active"),$(e.currentTarget).addClass("active")}};var old=$.fn.typeahead;$.fn.typeahead=function(option){return this.each(function(){var $this=$(this),data=$this.data("typeahead"),options="object"==typeof option&&option;data||$this.data("typeahead",data=new Typeahead(this,options)),"string"==typeof option&&data[option]()})},$.fn.typeahead.defaults={source:[],items:8,menu:'',item:'',minLength:1},$.fn.typeahead.Constructor=Typeahead,$.fn.typeahead.noConflict=function(){return $.fn.typeahead=old,this},$(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(e){var $this=$(this);$this.data("typeahead")||(e.preventDefault(),$this.typeahead($this.data()))})}(window.jQuery),!function($){"use strict";var Affix=function(element,options){this.options=$.extend({},$.fn.affix.defaults,options),this.$window=$(window).on("scroll.affix.data-api",$.proxy(this.checkPosition,this)).on("click.affix.data-api",$.proxy(function(){setTimeout($.proxy(this.checkPosition,this),1)},this)),this.$element=$(element),this.checkPosition()};Affix.prototype.checkPosition=function(){if(this.$element.is(":visible")){var affix,scrollHeight=$(document).height(),scrollTop=this.$window.scrollTop(),position=this.$element.offset(),offset=this.options.offset,offsetBottom=offset.bottom,offsetTop=offset.top,reset="affix affix-top affix-bottom";"object"!=typeof offset&&(offsetBottom=offsetTop=offset),"function"==typeof offsetTop&&(offsetTop=offset.top()),"function"==typeof offsetBottom&&(offsetBottom=offset.bottom()),affix=null!=this.unpin&&scrollTop+this.unpin<=position.top?!1:null!=offsetBottom&&position.top+this.$element.height()>=scrollHeight-offsetBottom?"bottom":null!=offsetTop&&offsetTop>=scrollTop?"top":!1,this.affixed!==affix&&(this.affixed=affix,this.unpin="bottom"==affix?position.top-scrollTop:null,this.$element.removeClass(reset).addClass("affix"+(affix?"-"+affix:"")))}};var old=$.fn.affix;$.fn.affix=function(option){return this.each(function(){var $this=$(this),data=$this.data("affix"),options="object"==typeof option&&option;data||$this.data("affix",data=new Affix(this,options)),"string"==typeof option&&data[option]()})},$.fn.affix.Constructor=Affix,$.fn.affix.defaults={offset:0},$.fn.affix.noConflict=function(){return $.fn.affix=old,this},$(window).on("load",function(){$('[data-spy="affix"]').each(function(){var $spy=$(this),data=$spy.data();data.offset=data.offset||{},data.offsetBottom&&(data.offset.bottom=data.offsetBottom),data.offsetTop&&(data.offset.top=data.offsetTop),$spy.affix(data)})})}(window.jQuery);
--------------------------------------------------------------------------------
/static/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | /* ===================================================
2 | * bootstrap-transition.js v2.2.2
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 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
27 | * ======================================================= */
28 |
29 | $(function () {
30 |
31 | $.support.transition = (function () {
32 |
33 | var transitionEnd = (function () {
34 |
35 | var el = document.createElement('bootstrap')
36 | , transEndEventNames = {
37 | 'WebkitTransition' : 'webkitTransitionEnd'
38 | , 'MozTransition' : 'transitionend'
39 | , 'OTransition' : 'oTransitionEnd otransitionend'
40 | , 'transition' : 'transitionend'
41 | }
42 | , name
43 |
44 | for (name in transEndEventNames){
45 | if (el.style[name] !== undefined) {
46 | return transEndEventNames[name]
47 | }
48 | }
49 |
50 | }())
51 |
52 | return transitionEnd && {
53 | end: transitionEnd
54 | }
55 |
56 | })()
57 |
58 | })
59 |
60 | }(window.jQuery);/* ==========================================================
61 | * bootstrap-alert.js v2.2.2
62 | * http://twitter.github.com/bootstrap/javascript.html#alerts
63 | * ==========================================================
64 | * Copyright 2012 Twitter, Inc.
65 | *
66 | * Licensed under the Apache License, Version 2.0 (the "License");
67 | * you may not use this file except in compliance with the License.
68 | * You may obtain a copy of the License at
69 | *
70 | * http://www.apache.org/licenses/LICENSE-2.0
71 | *
72 | * Unless required by applicable law or agreed to in writing, software
73 | * distributed under the License is distributed on an "AS IS" BASIS,
74 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
75 | * See the License for the specific language governing permissions and
76 | * limitations under the License.
77 | * ========================================================== */
78 |
79 |
80 | !function ($) {
81 |
82 | "use strict"; // jshint ;_;
83 |
84 |
85 | /* ALERT CLASS DEFINITION
86 | * ====================== */
87 |
88 | var dismiss = '[data-dismiss="alert"]'
89 | , Alert = function (el) {
90 | $(el).on('click', dismiss, this.close)
91 | }
92 |
93 | Alert.prototype.close = function (e) {
94 | var $this = $(this)
95 | , selector = $this.attr('data-target')
96 | , $parent
97 |
98 | if (!selector) {
99 | selector = $this.attr('href')
100 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
101 | }
102 |
103 | $parent = $(selector)
104 |
105 | e && e.preventDefault()
106 |
107 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
108 |
109 | $parent.trigger(e = $.Event('close'))
110 |
111 | if (e.isDefaultPrevented()) return
112 |
113 | $parent.removeClass('in')
114 |
115 | function removeElement() {
116 | $parent
117 | .trigger('closed')
118 | .remove()
119 | }
120 |
121 | $.support.transition && $parent.hasClass('fade') ?
122 | $parent.on($.support.transition.end, removeElement) :
123 | removeElement()
124 | }
125 |
126 |
127 | /* ALERT PLUGIN DEFINITION
128 | * ======================= */
129 |
130 | var old = $.fn.alert
131 |
132 | $.fn.alert = function (option) {
133 | return this.each(function () {
134 | var $this = $(this)
135 | , data = $this.data('alert')
136 | if (!data) $this.data('alert', (data = new Alert(this)))
137 | if (typeof option == 'string') data[option].call($this)
138 | })
139 | }
140 |
141 | $.fn.alert.Constructor = Alert
142 |
143 |
144 | /* ALERT NO CONFLICT
145 | * ================= */
146 |
147 | $.fn.alert.noConflict = function () {
148 | $.fn.alert = old
149 | return this
150 | }
151 |
152 |
153 | /* ALERT DATA-API
154 | * ============== */
155 |
156 | $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
157 |
158 | }(window.jQuery);/* ============================================================
159 | * bootstrap-button.js v2.2.2
160 | * http://twitter.github.com/bootstrap/javascript.html#buttons
161 | * ============================================================
162 | * Copyright 2012 Twitter, Inc.
163 | *
164 | * Licensed under the Apache License, Version 2.0 (the "License");
165 | * you may not use this file except in compliance with the License.
166 | * You may obtain a copy of the License at
167 | *
168 | * http://www.apache.org/licenses/LICENSE-2.0
169 | *
170 | * Unless required by applicable law or agreed to in writing, software
171 | * distributed under the License is distributed on an "AS IS" BASIS,
172 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
173 | * See the License for the specific language governing permissions and
174 | * limitations under the License.
175 | * ============================================================ */
176 |
177 |
178 | !function ($) {
179 |
180 | "use strict"; // jshint ;_;
181 |
182 |
183 | /* BUTTON PUBLIC CLASS DEFINITION
184 | * ============================== */
185 |
186 | var Button = function (element, options) {
187 | this.$element = $(element)
188 | this.options = $.extend({}, $.fn.button.defaults, options)
189 | }
190 |
191 | Button.prototype.setState = function (state) {
192 | var d = 'disabled'
193 | , $el = this.$element
194 | , data = $el.data()
195 | , val = $el.is('input') ? 'val' : 'html'
196 |
197 | state = state + 'Text'
198 | data.resetText || $el.data('resetText', $el[val]())
199 |
200 | $el[val](data[state] || this.options[state])
201 |
202 | // push to event loop to allow forms to submit
203 | setTimeout(function () {
204 | state == 'loadingText' ?
205 | $el.addClass(d).attr(d, d) :
206 | $el.removeClass(d).removeAttr(d)
207 | }, 0)
208 | }
209 |
210 | Button.prototype.toggle = function () {
211 | var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
212 |
213 | $parent && $parent
214 | .find('.active')
215 | .removeClass('active')
216 |
217 | this.$element.toggleClass('active')
218 | }
219 |
220 |
221 | /* BUTTON PLUGIN DEFINITION
222 | * ======================== */
223 |
224 | var old = $.fn.button
225 |
226 | $.fn.button = function (option) {
227 | return this.each(function () {
228 | var $this = $(this)
229 | , data = $this.data('button')
230 | , options = typeof option == 'object' && option
231 | if (!data) $this.data('button', (data = new Button(this, options)))
232 | if (option == 'toggle') data.toggle()
233 | else if (option) data.setState(option)
234 | })
235 | }
236 |
237 | $.fn.button.defaults = {
238 | loadingText: 'loading...'
239 | }
240 |
241 | $.fn.button.Constructor = Button
242 |
243 |
244 | /* BUTTON NO CONFLICT
245 | * ================== */
246 |
247 | $.fn.button.noConflict = function () {
248 | $.fn.button = old
249 | return this
250 | }
251 |
252 |
253 | /* BUTTON DATA-API
254 | * =============== */
255 |
256 | $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
257 | var $btn = $(e.target)
258 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
259 | $btn.button('toggle')
260 | })
261 |
262 | }(window.jQuery);/* ==========================================================
263 | * bootstrap-carousel.js v2.2.2
264 | * http://twitter.github.com/bootstrap/javascript.html#carousel
265 | * ==========================================================
266 | * Copyright 2012 Twitter, Inc.
267 | *
268 | * Licensed under the Apache License, Version 2.0 (the "License");
269 | * you may not use this file except in compliance with the License.
270 | * You may obtain a copy of the License at
271 | *
272 | * http://www.apache.org/licenses/LICENSE-2.0
273 | *
274 | * Unless required by applicable law or agreed to in writing, software
275 | * distributed under the License is distributed on an "AS IS" BASIS,
276 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
277 | * See the License for the specific language governing permissions and
278 | * limitations under the License.
279 | * ========================================================== */
280 |
281 |
282 | !function ($) {
283 |
284 | "use strict"; // jshint ;_;
285 |
286 |
287 | /* CAROUSEL CLASS DEFINITION
288 | * ========================= */
289 |
290 | var Carousel = function (element, options) {
291 | this.$element = $(element)
292 | this.options = options
293 | this.options.pause == 'hover' && this.$element
294 | .on('mouseenter', $.proxy(this.pause, this))
295 | .on('mouseleave', $.proxy(this.cycle, this))
296 | }
297 |
298 | Carousel.prototype = {
299 |
300 | cycle: function (e) {
301 | if (!e) this.paused = false
302 | this.options.interval
303 | && !this.paused
304 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
305 | return this
306 | }
307 |
308 | , to: function (pos) {
309 | var $active = this.$element.find('.item.active')
310 | , children = $active.parent().children()
311 | , activePos = children.index($active)
312 | , that = this
313 |
314 | if (pos > (children.length - 1) || pos < 0) return
315 |
316 | if (this.sliding) {
317 | return this.$element.one('slid', function () {
318 | that.to(pos)
319 | })
320 | }
321 |
322 | if (activePos == pos) {
323 | return this.pause().cycle()
324 | }
325 |
326 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
327 | }
328 |
329 | , pause: function (e) {
330 | if (!e) this.paused = true
331 | if (this.$element.find('.next, .prev').length && $.support.transition.end) {
332 | this.$element.trigger($.support.transition.end)
333 | this.cycle()
334 | }
335 | clearInterval(this.interval)
336 | this.interval = null
337 | return this
338 | }
339 |
340 | , next: function () {
341 | if (this.sliding) return
342 | return this.slide('next')
343 | }
344 |
345 | , prev: function () {
346 | if (this.sliding) return
347 | return this.slide('prev')
348 | }
349 |
350 | , slide: function (type, next) {
351 | var $active = this.$element.find('.item.active')
352 | , $next = next || $active[type]()
353 | , isCycling = this.interval
354 | , direction = type == 'next' ? 'left' : 'right'
355 | , fallback = type == 'next' ? 'first' : 'last'
356 | , that = this
357 | , e
358 |
359 | this.sliding = true
360 |
361 | isCycling && this.pause()
362 |
363 | $next = $next.length ? $next : this.$element.find('.item')[fallback]()
364 |
365 | e = $.Event('slide', {
366 | relatedTarget: $next[0]
367 | })
368 |
369 | if ($next.hasClass('active')) return
370 |
371 | if ($.support.transition && this.$element.hasClass('slide')) {
372 | this.$element.trigger(e)
373 | if (e.isDefaultPrevented()) return
374 | $next.addClass(type)
375 | $next[0].offsetWidth // force reflow
376 | $active.addClass(direction)
377 | $next.addClass(direction)
378 | this.$element.one($.support.transition.end, function () {
379 | $next.removeClass([type, direction].join(' ')).addClass('active')
380 | $active.removeClass(['active', direction].join(' '))
381 | that.sliding = false
382 | setTimeout(function () { that.$element.trigger('slid') }, 0)
383 | })
384 | } else {
385 | this.$element.trigger(e)
386 | if (e.isDefaultPrevented()) return
387 | $active.removeClass('active')
388 | $next.addClass('active')
389 | this.sliding = false
390 | this.$element.trigger('slid')
391 | }
392 |
393 | isCycling && this.cycle()
394 |
395 | return this
396 | }
397 |
398 | }
399 |
400 |
401 | /* CAROUSEL PLUGIN DEFINITION
402 | * ========================== */
403 |
404 | var old = $.fn.carousel
405 |
406 | $.fn.carousel = function (option) {
407 | return this.each(function () {
408 | var $this = $(this)
409 | , data = $this.data('carousel')
410 | , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
411 | , action = typeof option == 'string' ? option : options.slide
412 | if (!data) $this.data('carousel', (data = new Carousel(this, options)))
413 | if (typeof option == 'number') data.to(option)
414 | else if (action) data[action]()
415 | else if (options.interval) data.cycle()
416 | })
417 | }
418 |
419 | $.fn.carousel.defaults = {
420 | interval: 5000
421 | , pause: 'hover'
422 | }
423 |
424 | $.fn.carousel.Constructor = Carousel
425 |
426 |
427 | /* CAROUSEL NO CONFLICT
428 | * ==================== */
429 |
430 | $.fn.carousel.noConflict = function () {
431 | $.fn.carousel = old
432 | return this
433 | }
434 |
435 | /* CAROUSEL DATA-API
436 | * ================= */
437 |
438 | $(document).on('click.carousel.data-api', '[data-slide]', function (e) {
439 | var $this = $(this), href
440 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
441 | , options = $.extend({}, $target.data(), $this.data())
442 | $target.carousel(options)
443 | e.preventDefault()
444 | })
445 |
446 | }(window.jQuery);/* =============================================================
447 | * bootstrap-collapse.js v2.2.2
448 | * http://twitter.github.com/bootstrap/javascript.html#collapse
449 | * =============================================================
450 | * Copyright 2012 Twitter, Inc.
451 | *
452 | * Licensed under the Apache License, Version 2.0 (the "License");
453 | * you may not use this file except in compliance with the License.
454 | * You may obtain a copy of the License at
455 | *
456 | * http://www.apache.org/licenses/LICENSE-2.0
457 | *
458 | * Unless required by applicable law or agreed to in writing, software
459 | * distributed under the License is distributed on an "AS IS" BASIS,
460 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
461 | * See the License for the specific language governing permissions and
462 | * limitations under the License.
463 | * ============================================================ */
464 |
465 |
466 | !function ($) {
467 |
468 | "use strict"; // jshint ;_;
469 |
470 |
471 | /* COLLAPSE PUBLIC CLASS DEFINITION
472 | * ================================ */
473 |
474 | var Collapse = function (element, options) {
475 | this.$element = $(element)
476 | this.options = $.extend({}, $.fn.collapse.defaults, options)
477 |
478 | if (this.options.parent) {
479 | this.$parent = $(this.options.parent)
480 | }
481 |
482 | this.options.toggle && this.toggle()
483 | }
484 |
485 | Collapse.prototype = {
486 |
487 | constructor: Collapse
488 |
489 | , dimension: function () {
490 | var hasWidth = this.$element.hasClass('width')
491 | return hasWidth ? 'width' : 'height'
492 | }
493 |
494 | , show: function () {
495 | var dimension
496 | , scroll
497 | , actives
498 | , hasData
499 |
500 | if (this.transitioning) return
501 |
502 | dimension = this.dimension()
503 | scroll = $.camelCase(['scroll', dimension].join('-'))
504 | actives = this.$parent && this.$parent.find('> .accordion-group > .in')
505 |
506 | if (actives && actives.length) {
507 | hasData = actives.data('collapse')
508 | if (hasData && hasData.transitioning) return
509 | actives.collapse('hide')
510 | hasData || actives.data('collapse', null)
511 | }
512 |
513 | this.$element[dimension](0)
514 | this.transition('addClass', $.Event('show'), 'shown')
515 | $.support.transition && this.$element[dimension](this.$element[0][scroll])
516 | }
517 |
518 | , hide: function () {
519 | var dimension
520 | if (this.transitioning) return
521 | dimension = this.dimension()
522 | this.reset(this.$element[dimension]())
523 | this.transition('removeClass', $.Event('hide'), 'hidden')
524 | this.$element[dimension](0)
525 | }
526 |
527 | , reset: function (size) {
528 | var dimension = this.dimension()
529 |
530 | this.$element
531 | .removeClass('collapse')
532 | [dimension](size || 'auto')
533 | [0].offsetWidth
534 |
535 | this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
536 |
537 | return this
538 | }
539 |
540 | , transition: function (method, startEvent, completeEvent) {
541 | var that = this
542 | , complete = function () {
543 | if (startEvent.type == 'show') that.reset()
544 | that.transitioning = 0
545 | that.$element.trigger(completeEvent)
546 | }
547 |
548 | this.$element.trigger(startEvent)
549 |
550 | if (startEvent.isDefaultPrevented()) return
551 |
552 | this.transitioning = 1
553 |
554 | this.$element[method]('in')
555 |
556 | $.support.transition && this.$element.hasClass('collapse') ?
557 | this.$element.one($.support.transition.end, complete) :
558 | complete()
559 | }
560 |
561 | , toggle: function () {
562 | this[this.$element.hasClass('in') ? 'hide' : 'show']()
563 | }
564 |
565 | }
566 |
567 |
568 | /* COLLAPSE PLUGIN DEFINITION
569 | * ========================== */
570 |
571 | var old = $.fn.collapse
572 |
573 | $.fn.collapse = function (option) {
574 | return this.each(function () {
575 | var $this = $(this)
576 | , data = $this.data('collapse')
577 | , options = typeof option == 'object' && option
578 | if (!data) $this.data('collapse', (data = new Collapse(this, options)))
579 | if (typeof option == 'string') data[option]()
580 | })
581 | }
582 |
583 | $.fn.collapse.defaults = {
584 | toggle: true
585 | }
586 |
587 | $.fn.collapse.Constructor = Collapse
588 |
589 |
590 | /* COLLAPSE NO CONFLICT
591 | * ==================== */
592 |
593 | $.fn.collapse.noConflict = function () {
594 | $.fn.collapse = old
595 | return this
596 | }
597 |
598 |
599 | /* COLLAPSE DATA-API
600 | * ================= */
601 |
602 | $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
603 | var $this = $(this), href
604 | , target = $this.attr('data-target')
605 | || e.preventDefault()
606 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
607 | , option = $(target).data('collapse') ? 'toggle' : $this.data()
608 | $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
609 | $(target).collapse(option)
610 | })
611 |
612 | }(window.jQuery);/* ============================================================
613 | * bootstrap-dropdown.js v2.2.2
614 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns
615 | * ============================================================
616 | * Copyright 2012 Twitter, Inc.
617 | *
618 | * Licensed under the Apache License, Version 2.0 (the "License");
619 | * you may not use this file except in compliance with the License.
620 | * You may obtain a copy of the License at
621 | *
622 | * http://www.apache.org/licenses/LICENSE-2.0
623 | *
624 | * Unless required by applicable law or agreed to in writing, software
625 | * distributed under the License is distributed on an "AS IS" BASIS,
626 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
627 | * See the License for the specific language governing permissions and
628 | * limitations under the License.
629 | * ============================================================ */
630 |
631 |
632 | !function ($) {
633 |
634 | "use strict"; // jshint ;_;
635 |
636 |
637 | /* DROPDOWN CLASS DEFINITION
638 | * ========================= */
639 |
640 | var toggle = '[data-toggle=dropdown]'
641 | , Dropdown = function (element) {
642 | var $el = $(element).on('click.dropdown.data-api', this.toggle)
643 | $('html').on('click.dropdown.data-api', function () {
644 | $el.parent().removeClass('open')
645 | })
646 | }
647 |
648 | Dropdown.prototype = {
649 |
650 | constructor: Dropdown
651 |
652 | , toggle: function (e) {
653 | var $this = $(this)
654 | , $parent
655 | , isActive
656 |
657 | if ($this.is('.disabled, :disabled')) return
658 |
659 | $parent = getParent($this)
660 |
661 | isActive = $parent.hasClass('open')
662 |
663 | clearMenus()
664 |
665 | if (!isActive) {
666 | $parent.toggleClass('open')
667 | }
668 |
669 | $this.focus()
670 |
671 | return false
672 | }
673 |
674 | , keydown: function (e) {
675 | var $this
676 | , $items
677 | , $active
678 | , $parent
679 | , isActive
680 | , index
681 |
682 | if (!/(38|40|27)/.test(e.keyCode)) return
683 |
684 | $this = $(this)
685 |
686 | e.preventDefault()
687 | e.stopPropagation()
688 |
689 | if ($this.is('.disabled, :disabled')) return
690 |
691 | $parent = getParent($this)
692 |
693 | isActive = $parent.hasClass('open')
694 |
695 | if (!isActive || (isActive && e.keyCode == 27)) return $this.click()
696 |
697 | $items = $('[role=menu] li:not(.divider):visible a', $parent)
698 |
699 | if (!$items.length) return
700 |
701 | index = $items.index($items.filter(':focus'))
702 |
703 | if (e.keyCode == 38 && index > 0) index-- // up
704 | if (e.keyCode == 40 && index < $items.length - 1) index++ // down
705 | if (!~index) index = 0
706 |
707 | $items
708 | .eq(index)
709 | .focus()
710 | }
711 |
712 | }
713 |
714 | function clearMenus() {
715 | $(toggle).each(function () {
716 | getParent($(this)).removeClass('open')
717 | })
718 | }
719 |
720 | function getParent($this) {
721 | var selector = $this.attr('data-target')
722 | , $parent
723 |
724 | if (!selector) {
725 | selector = $this.attr('href')
726 | selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
727 | }
728 |
729 | $parent = $(selector)
730 | $parent.length || ($parent = $this.parent())
731 |
732 | return $parent
733 | }
734 |
735 |
736 | /* DROPDOWN PLUGIN DEFINITION
737 | * ========================== */
738 |
739 | var old = $.fn.dropdown
740 |
741 | $.fn.dropdown = function (option) {
742 | return this.each(function () {
743 | var $this = $(this)
744 | , data = $this.data('dropdown')
745 | if (!data) $this.data('dropdown', (data = new Dropdown(this)))
746 | if (typeof option == 'string') data[option].call($this)
747 | })
748 | }
749 |
750 | $.fn.dropdown.Constructor = Dropdown
751 |
752 |
753 | /* DROPDOWN NO CONFLICT
754 | * ==================== */
755 |
756 | $.fn.dropdown.noConflict = function () {
757 | $.fn.dropdown = old
758 | return this
759 | }
760 |
761 |
762 | /* APPLY TO STANDARD DROPDOWN ELEMENTS
763 | * =================================== */
764 |
765 | $(document)
766 | .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)
767 | .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
768 | .on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation() })
769 | .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
770 | .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
771 |
772 | }(window.jQuery);/* =========================================================
773 | * bootstrap-modal.js v2.2.2
774 | * http://twitter.github.com/bootstrap/javascript.html#modals
775 | * =========================================================
776 | * Copyright 2012 Twitter, Inc.
777 | *
778 | * Licensed under the Apache License, Version 2.0 (the "License");
779 | * you may not use this file except in compliance with the License.
780 | * You may obtain a copy of the License at
781 | *
782 | * http://www.apache.org/licenses/LICENSE-2.0
783 | *
784 | * Unless required by applicable law or agreed to in writing, software
785 | * distributed under the License is distributed on an "AS IS" BASIS,
786 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
787 | * See the License for the specific language governing permissions and
788 | * limitations under the License.
789 | * ========================================================= */
790 |
791 |
792 | !function ($) {
793 |
794 | "use strict"; // jshint ;_;
795 |
796 |
797 | /* MODAL CLASS DEFINITION
798 | * ====================== */
799 |
800 | var Modal = function (element, options) {
801 | this.options = options
802 | this.$element = $(element)
803 | .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
804 | this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
805 | }
806 |
807 | Modal.prototype = {
808 |
809 | constructor: Modal
810 |
811 | , toggle: function () {
812 | return this[!this.isShown ? 'show' : 'hide']()
813 | }
814 |
815 | , show: function () {
816 | var that = this
817 | , e = $.Event('show')
818 |
819 | this.$element.trigger(e)
820 |
821 | if (this.isShown || e.isDefaultPrevented()) return
822 |
823 | this.isShown = true
824 |
825 | this.escape()
826 |
827 | this.backdrop(function () {
828 | var transition = $.support.transition && that.$element.hasClass('fade')
829 |
830 | if (!that.$element.parent().length) {
831 | that.$element.appendTo(document.body) //don't move modals dom position
832 | }
833 |
834 | that.$element
835 | .show()
836 |
837 | if (transition) {
838 | that.$element[0].offsetWidth // force reflow
839 | }
840 |
841 | that.$element
842 | .addClass('in')
843 | .attr('aria-hidden', false)
844 |
845 | that.enforceFocus()
846 |
847 | transition ?
848 | that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
849 | that.$element.focus().trigger('shown')
850 |
851 | })
852 | }
853 |
854 | , hide: function (e) {
855 | e && e.preventDefault()
856 |
857 | var that = this
858 |
859 | e = $.Event('hide')
860 |
861 | this.$element.trigger(e)
862 |
863 | if (!this.isShown || e.isDefaultPrevented()) return
864 |
865 | this.isShown = false
866 |
867 | this.escape()
868 |
869 | $(document).off('focusin.modal')
870 |
871 | this.$element
872 | .removeClass('in')
873 | .attr('aria-hidden', true)
874 |
875 | $.support.transition && this.$element.hasClass('fade') ?
876 | this.hideWithTransition() :
877 | this.hideModal()
878 | }
879 |
880 | , enforceFocus: function () {
881 | var that = this
882 | $(document).on('focusin.modal', function (e) {
883 | if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
884 | that.$element.focus()
885 | }
886 | })
887 | }
888 |
889 | , escape: function () {
890 | var that = this
891 | if (this.isShown && this.options.keyboard) {
892 | this.$element.on('keyup.dismiss.modal', function ( e ) {
893 | e.which == 27 && that.hide()
894 | })
895 | } else if (!this.isShown) {
896 | this.$element.off('keyup.dismiss.modal')
897 | }
898 | }
899 |
900 | , hideWithTransition: function () {
901 | var that = this
902 | , timeout = setTimeout(function () {
903 | that.$element.off($.support.transition.end)
904 | that.hideModal()
905 | }, 500)
906 |
907 | this.$element.one($.support.transition.end, function () {
908 | clearTimeout(timeout)
909 | that.hideModal()
910 | })
911 | }
912 |
913 | , hideModal: function (that) {
914 | this.$element
915 | .hide()
916 | .trigger('hidden')
917 |
918 | this.backdrop()
919 | }
920 |
921 | , removeBackdrop: function () {
922 | this.$backdrop.remove()
923 | this.$backdrop = null
924 | }
925 |
926 | , backdrop: function (callback) {
927 | var that = this
928 | , animate = this.$element.hasClass('fade') ? 'fade' : ''
929 |
930 | if (this.isShown && this.options.backdrop) {
931 | var doAnimate = $.support.transition && animate
932 |
933 | this.$backdrop = $('')
934 | .appendTo(document.body)
935 |
936 | this.$backdrop.click(
937 | this.options.backdrop == 'static' ?
938 | $.proxy(this.$element[0].focus, this.$element[0])
939 | : $.proxy(this.hide, this)
940 | )
941 |
942 | if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
943 |
944 | this.$backdrop.addClass('in')
945 |
946 | doAnimate ?
947 | this.$backdrop.one($.support.transition.end, callback) :
948 | callback()
949 |
950 | } else if (!this.isShown && this.$backdrop) {
951 | this.$backdrop.removeClass('in')
952 |
953 | $.support.transition && this.$element.hasClass('fade')?
954 | this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
955 | this.removeBackdrop()
956 |
957 | } else if (callback) {
958 | callback()
959 | }
960 | }
961 | }
962 |
963 |
964 | /* MODAL PLUGIN DEFINITION
965 | * ======================= */
966 |
967 | var old = $.fn.modal
968 |
969 | $.fn.modal = function (option) {
970 | return this.each(function () {
971 | var $this = $(this)
972 | , data = $this.data('modal')
973 | , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
974 | if (!data) $this.data('modal', (data = new Modal(this, options)))
975 | if (typeof option == 'string') data[option]()
976 | else if (options.show) data.show()
977 | })
978 | }
979 |
980 | $.fn.modal.defaults = {
981 | backdrop: true
982 | , keyboard: true
983 | , show: true
984 | }
985 |
986 | $.fn.modal.Constructor = Modal
987 |
988 |
989 | /* MODAL NO CONFLICT
990 | * ================= */
991 |
992 | $.fn.modal.noConflict = function () {
993 | $.fn.modal = old
994 | return this
995 | }
996 |
997 |
998 | /* MODAL DATA-API
999 | * ============== */
1000 |
1001 | $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
1002 | var $this = $(this)
1003 | , href = $this.attr('href')
1004 | , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1005 | , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
1006 |
1007 | e.preventDefault()
1008 |
1009 | $target
1010 | .modal(option)
1011 | .one('hide', function () {
1012 | $this.focus()
1013 | })
1014 | })
1015 |
1016 | }(window.jQuery);
1017 | /* ===========================================================
1018 | * bootstrap-tooltip.js v2.2.2
1019 | * http://twitter.github.com/bootstrap/javascript.html#tooltips
1020 | * Inspired by the original jQuery.tipsy by Jason Frame
1021 | * ===========================================================
1022 | * Copyright 2012 Twitter, Inc.
1023 | *
1024 | * Licensed under the Apache License, Version 2.0 (the "License");
1025 | * you may not use this file except in compliance with the License.
1026 | * You may obtain a copy of the License at
1027 | *
1028 | * http://www.apache.org/licenses/LICENSE-2.0
1029 | *
1030 | * Unless required by applicable law or agreed to in writing, software
1031 | * distributed under the License is distributed on an "AS IS" BASIS,
1032 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1033 | * See the License for the specific language governing permissions and
1034 | * limitations under the License.
1035 | * ========================================================== */
1036 |
1037 |
1038 | !function ($) {
1039 |
1040 | "use strict"; // jshint ;_;
1041 |
1042 |
1043 | /* TOOLTIP PUBLIC CLASS DEFINITION
1044 | * =============================== */
1045 |
1046 | var Tooltip = function (element, options) {
1047 | this.init('tooltip', element, options)
1048 | }
1049 |
1050 | Tooltip.prototype = {
1051 |
1052 | constructor: Tooltip
1053 |
1054 | , init: function (type, element, options) {
1055 | var eventIn
1056 | , eventOut
1057 |
1058 | this.type = type
1059 | this.$element = $(element)
1060 | this.options = this.getOptions(options)
1061 | this.enabled = true
1062 |
1063 | if (this.options.trigger == 'click') {
1064 | this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1065 | } else if (this.options.trigger != 'manual') {
1066 | eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
1067 | eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
1068 | this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1069 | this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1070 | }
1071 |
1072 | this.options.selector ?
1073 | (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1074 | this.fixTitle()
1075 | }
1076 |
1077 | , getOptions: function (options) {
1078 | options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
1079 |
1080 | if (options.delay && typeof options.delay == 'number') {
1081 | options.delay = {
1082 | show: options.delay
1083 | , hide: options.delay
1084 | }
1085 | }
1086 |
1087 | return options
1088 | }
1089 |
1090 | , enter: function (e) {
1091 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1092 |
1093 | if (!self.options.delay || !self.options.delay.show) return self.show()
1094 |
1095 | clearTimeout(this.timeout)
1096 | self.hoverState = 'in'
1097 | this.timeout = setTimeout(function() {
1098 | if (self.hoverState == 'in') self.show()
1099 | }, self.options.delay.show)
1100 | }
1101 |
1102 | , leave: function (e) {
1103 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1104 |
1105 | if (this.timeout) clearTimeout(this.timeout)
1106 | if (!self.options.delay || !self.options.delay.hide) return self.hide()
1107 |
1108 | self.hoverState = 'out'
1109 | this.timeout = setTimeout(function() {
1110 | if (self.hoverState == 'out') self.hide()
1111 | }, self.options.delay.hide)
1112 | }
1113 |
1114 | , show: function () {
1115 | var $tip
1116 | , inside
1117 | , pos
1118 | , actualWidth
1119 | , actualHeight
1120 | , placement
1121 | , tp
1122 |
1123 | if (this.hasContent() && this.enabled) {
1124 | $tip = this.tip()
1125 | this.setContent()
1126 |
1127 | if (this.options.animation) {
1128 | $tip.addClass('fade')
1129 | }
1130 |
1131 | placement = typeof this.options.placement == 'function' ?
1132 | this.options.placement.call(this, $tip[0], this.$element[0]) :
1133 | this.options.placement
1134 |
1135 | inside = /in/.test(placement)
1136 |
1137 | $tip
1138 | .detach()
1139 | .css({ top: 0, left: 0, display: 'block' })
1140 | .insertAfter(this.$element)
1141 |
1142 | pos = this.getPosition(inside)
1143 |
1144 | actualWidth = $tip[0].offsetWidth
1145 | actualHeight = $tip[0].offsetHeight
1146 |
1147 | switch (inside ? placement.split(' ')[1] : placement) {
1148 | case 'bottom':
1149 | tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1150 | break
1151 | case 'top':
1152 | tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1153 | break
1154 | case 'left':
1155 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1156 | break
1157 | case 'right':
1158 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1159 | break
1160 | }
1161 |
1162 | $tip
1163 | .offset(tp)
1164 | .addClass(placement)
1165 | .addClass('in')
1166 | }
1167 | }
1168 |
1169 | , setContent: function () {
1170 | var $tip = this.tip()
1171 | , title = this.getTitle()
1172 |
1173 | $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1174 | $tip.removeClass('fade in top bottom left right')
1175 | }
1176 |
1177 | , hide: function () {
1178 | var that = this
1179 | , $tip = this.tip()
1180 |
1181 | $tip.removeClass('in')
1182 |
1183 | function removeWithAnimation() {
1184 | var timeout = setTimeout(function () {
1185 | $tip.off($.support.transition.end).detach()
1186 | }, 500)
1187 |
1188 | $tip.one($.support.transition.end, function () {
1189 | clearTimeout(timeout)
1190 | $tip.detach()
1191 | })
1192 | }
1193 |
1194 | $.support.transition && this.$tip.hasClass('fade') ?
1195 | removeWithAnimation() :
1196 | $tip.detach()
1197 |
1198 | return this
1199 | }
1200 |
1201 | , fixTitle: function () {
1202 | var $e = this.$element
1203 | if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1204 | $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
1205 | }
1206 | }
1207 |
1208 | , hasContent: function () {
1209 | return this.getTitle()
1210 | }
1211 |
1212 | , getPosition: function (inside) {
1213 | return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
1214 | width: this.$element[0].offsetWidth
1215 | , height: this.$element[0].offsetHeight
1216 | })
1217 | }
1218 |
1219 | , getTitle: function () {
1220 | var title
1221 | , $e = this.$element
1222 | , o = this.options
1223 |
1224 | title = $e.attr('data-original-title')
1225 | || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1226 |
1227 | return title
1228 | }
1229 |
1230 | , tip: function () {
1231 | return this.$tip = this.$tip || $(this.options.template)
1232 | }
1233 |
1234 | , validate: function () {
1235 | if (!this.$element[0].parentNode) {
1236 | this.hide()
1237 | this.$element = null
1238 | this.options = null
1239 | }
1240 | }
1241 |
1242 | , enable: function () {
1243 | this.enabled = true
1244 | }
1245 |
1246 | , disable: function () {
1247 | this.enabled = false
1248 | }
1249 |
1250 | , toggleEnabled: function () {
1251 | this.enabled = !this.enabled
1252 | }
1253 |
1254 | , toggle: function (e) {
1255 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1256 | self[self.tip().hasClass('in') ? 'hide' : 'show']()
1257 | }
1258 |
1259 | , destroy: function () {
1260 | this.hide().$element.off('.' + this.type).removeData(this.type)
1261 | }
1262 |
1263 | }
1264 |
1265 |
1266 | /* TOOLTIP PLUGIN DEFINITION
1267 | * ========================= */
1268 |
1269 | var old = $.fn.tooltip
1270 |
1271 | $.fn.tooltip = function ( option ) {
1272 | return this.each(function () {
1273 | var $this = $(this)
1274 | , data = $this.data('tooltip')
1275 | , options = typeof option == 'object' && option
1276 | if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1277 | if (typeof option == 'string') data[option]()
1278 | })
1279 | }
1280 |
1281 | $.fn.tooltip.Constructor = Tooltip
1282 |
1283 | $.fn.tooltip.defaults = {
1284 | animation: true
1285 | , placement: 'top'
1286 | , selector: false
1287 | , template: ''
1288 | , trigger: 'hover'
1289 | , title: ''
1290 | , delay: 0
1291 | , html: false
1292 | }
1293 |
1294 |
1295 | /* TOOLTIP NO CONFLICT
1296 | * =================== */
1297 |
1298 | $.fn.tooltip.noConflict = function () {
1299 | $.fn.tooltip = old
1300 | return this
1301 | }
1302 |
1303 | }(window.jQuery);/* ===========================================================
1304 | * bootstrap-popover.js v2.2.2
1305 | * http://twitter.github.com/bootstrap/javascript.html#popovers
1306 | * ===========================================================
1307 | * Copyright 2012 Twitter, Inc.
1308 | *
1309 | * Licensed under the Apache License, Version 2.0 (the "License");
1310 | * you may not use this file except in compliance with the License.
1311 | * You may obtain a copy of the License at
1312 | *
1313 | * http://www.apache.org/licenses/LICENSE-2.0
1314 | *
1315 | * Unless required by applicable law or agreed to in writing, software
1316 | * distributed under the License is distributed on an "AS IS" BASIS,
1317 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1318 | * See the License for the specific language governing permissions and
1319 | * limitations under the License.
1320 | * =========================================================== */
1321 |
1322 |
1323 | !function ($) {
1324 |
1325 | "use strict"; // jshint ;_;
1326 |
1327 |
1328 | /* POPOVER PUBLIC CLASS DEFINITION
1329 | * =============================== */
1330 |
1331 | var Popover = function (element, options) {
1332 | this.init('popover', element, options)
1333 | }
1334 |
1335 |
1336 | /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1337 | ========================================== */
1338 |
1339 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1340 |
1341 | constructor: Popover
1342 |
1343 | , setContent: function () {
1344 | var $tip = this.tip()
1345 | , title = this.getTitle()
1346 | , content = this.getContent()
1347 |
1348 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1349 | $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
1350 |
1351 | $tip.removeClass('fade top bottom left right in')
1352 | }
1353 |
1354 | , hasContent: function () {
1355 | return this.getTitle() || this.getContent()
1356 | }
1357 |
1358 | , getContent: function () {
1359 | var content
1360 | , $e = this.$element
1361 | , o = this.options
1362 |
1363 | content = $e.attr('data-content')
1364 | || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1365 |
1366 | return content
1367 | }
1368 |
1369 | , tip: function () {
1370 | if (!this.$tip) {
1371 | this.$tip = $(this.options.template)
1372 | }
1373 | return this.$tip
1374 | }
1375 |
1376 | , destroy: function () {
1377 | this.hide().$element.off('.' + this.type).removeData(this.type)
1378 | }
1379 |
1380 | })
1381 |
1382 |
1383 | /* POPOVER PLUGIN DEFINITION
1384 | * ======================= */
1385 |
1386 | var old = $.fn.popover
1387 |
1388 | $.fn.popover = function (option) {
1389 | return this.each(function () {
1390 | var $this = $(this)
1391 | , data = $this.data('popover')
1392 | , options = typeof option == 'object' && option
1393 | if (!data) $this.data('popover', (data = new Popover(this, options)))
1394 | if (typeof option == 'string') data[option]()
1395 | })
1396 | }
1397 |
1398 | $.fn.popover.Constructor = Popover
1399 |
1400 | $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1401 | placement: 'right'
1402 | , trigger: 'click'
1403 | , content: ''
1404 | , template: ''
1405 | })
1406 |
1407 |
1408 | /* POPOVER NO CONFLICT
1409 | * =================== */
1410 |
1411 | $.fn.popover.noConflict = function () {
1412 | $.fn.popover = old
1413 | return this
1414 | }
1415 |
1416 | }(window.jQuery);/* =============================================================
1417 | * bootstrap-scrollspy.js v2.2.2
1418 | * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1419 | * =============================================================
1420 | * Copyright 2012 Twitter, Inc.
1421 | *
1422 | * Licensed under the Apache License, Version 2.0 (the "License");
1423 | * you may not use this file except in compliance with the License.
1424 | * You may obtain a copy of the License at
1425 | *
1426 | * http://www.apache.org/licenses/LICENSE-2.0
1427 | *
1428 | * Unless required by applicable law or agreed to in writing, software
1429 | * distributed under the License is distributed on an "AS IS" BASIS,
1430 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1431 | * See the License for the specific language governing permissions and
1432 | * limitations under the License.
1433 | * ============================================================== */
1434 |
1435 |
1436 | !function ($) {
1437 |
1438 | "use strict"; // jshint ;_;
1439 |
1440 |
1441 | /* SCROLLSPY CLASS DEFINITION
1442 | * ========================== */
1443 |
1444 | function ScrollSpy(element, options) {
1445 | var process = $.proxy(this.process, this)
1446 | , $element = $(element).is('body') ? $(window) : $(element)
1447 | , href
1448 | this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1449 | this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
1450 | this.selector = (this.options.target
1451 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1452 | || '') + ' .nav li > a'
1453 | this.$body = $('body')
1454 | this.refresh()
1455 | this.process()
1456 | }
1457 |
1458 | ScrollSpy.prototype = {
1459 |
1460 | constructor: ScrollSpy
1461 |
1462 | , refresh: function () {
1463 | var self = this
1464 | , $targets
1465 |
1466 | this.offsets = $([])
1467 | this.targets = $([])
1468 |
1469 | $targets = this.$body
1470 | .find(this.selector)
1471 | .map(function () {
1472 | var $el = $(this)
1473 | , href = $el.data('target') || $el.attr('href')
1474 | , $href = /^#\w/.test(href) && $(href)
1475 | return ( $href
1476 | && $href.length
1477 | && [[ $href.position().top + self.$scrollElement.scrollTop(), href ]] ) || null
1478 | })
1479 | .sort(function (a, b) { return a[0] - b[0] })
1480 | .each(function () {
1481 | self.offsets.push(this[0])
1482 | self.targets.push(this[1])
1483 | })
1484 | }
1485 |
1486 | , process: function () {
1487 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1488 | , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1489 | , maxScroll = scrollHeight - this.$scrollElement.height()
1490 | , offsets = this.offsets
1491 | , targets = this.targets
1492 | , activeTarget = this.activeTarget
1493 | , i
1494 |
1495 | if (scrollTop >= maxScroll) {
1496 | return activeTarget != (i = targets.last()[0])
1497 | && this.activate ( i )
1498 | }
1499 |
1500 | for (i = offsets.length; i--;) {
1501 | activeTarget != targets[i]
1502 | && scrollTop >= offsets[i]
1503 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1504 | && this.activate( targets[i] )
1505 | }
1506 | }
1507 |
1508 | , activate: function (target) {
1509 | var active
1510 | , selector
1511 |
1512 | this.activeTarget = target
1513 |
1514 | $(this.selector)
1515 | .parent('.active')
1516 | .removeClass('active')
1517 |
1518 | selector = this.selector
1519 | + '[data-target="' + target + '"],'
1520 | + this.selector + '[href="' + target + '"]'
1521 |
1522 | active = $(selector)
1523 | .parent('li')
1524 | .addClass('active')
1525 |
1526 | if (active.parent('.dropdown-menu').length) {
1527 | active = active.closest('li.dropdown').addClass('active')
1528 | }
1529 |
1530 | active.trigger('activate')
1531 | }
1532 |
1533 | }
1534 |
1535 |
1536 | /* SCROLLSPY PLUGIN DEFINITION
1537 | * =========================== */
1538 |
1539 | var old = $.fn.scrollspy
1540 |
1541 | $.fn.scrollspy = function (option) {
1542 | return this.each(function () {
1543 | var $this = $(this)
1544 | , data = $this.data('scrollspy')
1545 | , options = typeof option == 'object' && option
1546 | if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1547 | if (typeof option == 'string') data[option]()
1548 | })
1549 | }
1550 |
1551 | $.fn.scrollspy.Constructor = ScrollSpy
1552 |
1553 | $.fn.scrollspy.defaults = {
1554 | offset: 10
1555 | }
1556 |
1557 |
1558 | /* SCROLLSPY NO CONFLICT
1559 | * ===================== */
1560 |
1561 | $.fn.scrollspy.noConflict = function () {
1562 | $.fn.scrollspy = old
1563 | return this
1564 | }
1565 |
1566 |
1567 | /* SCROLLSPY DATA-API
1568 | * ================== */
1569 |
1570 | $(window).on('load', function () {
1571 | $('[data-spy="scroll"]').each(function () {
1572 | var $spy = $(this)
1573 | $spy.scrollspy($spy.data())
1574 | })
1575 | })
1576 |
1577 | }(window.jQuery);/* ========================================================
1578 | * bootstrap-tab.js v2.2.2
1579 | * http://twitter.github.com/bootstrap/javascript.html#tabs
1580 | * ========================================================
1581 | * Copyright 2012 Twitter, Inc.
1582 | *
1583 | * Licensed under the Apache License, Version 2.0 (the "License");
1584 | * you may not use this file except in compliance with the License.
1585 | * You may obtain a copy of the License at
1586 | *
1587 | * http://www.apache.org/licenses/LICENSE-2.0
1588 | *
1589 | * Unless required by applicable law or agreed to in writing, software
1590 | * distributed under the License is distributed on an "AS IS" BASIS,
1591 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1592 | * See the License for the specific language governing permissions and
1593 | * limitations under the License.
1594 | * ======================================================== */
1595 |
1596 |
1597 | !function ($) {
1598 |
1599 | "use strict"; // jshint ;_;
1600 |
1601 |
1602 | /* TAB CLASS DEFINITION
1603 | * ==================== */
1604 |
1605 | var Tab = function (element) {
1606 | this.element = $(element)
1607 | }
1608 |
1609 | Tab.prototype = {
1610 |
1611 | constructor: Tab
1612 |
1613 | , show: function () {
1614 | var $this = this.element
1615 | , $ul = $this.closest('ul:not(.dropdown-menu)')
1616 | , selector = $this.attr('data-target')
1617 | , previous
1618 | , $target
1619 | , e
1620 |
1621 | if (!selector) {
1622 | selector = $this.attr('href')
1623 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1624 | }
1625 |
1626 | if ( $this.parent('li').hasClass('active') ) return
1627 |
1628 | previous = $ul.find('.active:last a')[0]
1629 |
1630 | e = $.Event('show', {
1631 | relatedTarget: previous
1632 | })
1633 |
1634 | $this.trigger(e)
1635 |
1636 | if (e.isDefaultPrevented()) return
1637 |
1638 | $target = $(selector)
1639 |
1640 | this.activate($this.parent('li'), $ul)
1641 | this.activate($target, $target.parent(), function () {
1642 | $this.trigger({
1643 | type: 'shown'
1644 | , relatedTarget: previous
1645 | })
1646 | })
1647 | }
1648 |
1649 | , activate: function ( element, container, callback) {
1650 | var $active = container.find('> .active')
1651 | , transition = callback
1652 | && $.support.transition
1653 | && $active.hasClass('fade')
1654 |
1655 | function next() {
1656 | $active
1657 | .removeClass('active')
1658 | .find('> .dropdown-menu > .active')
1659 | .removeClass('active')
1660 |
1661 | element.addClass('active')
1662 |
1663 | if (transition) {
1664 | element[0].offsetWidth // reflow for transition
1665 | element.addClass('in')
1666 | } else {
1667 | element.removeClass('fade')
1668 | }
1669 |
1670 | if ( element.parent('.dropdown-menu') ) {
1671 | element.closest('li.dropdown').addClass('active')
1672 | }
1673 |
1674 | callback && callback()
1675 | }
1676 |
1677 | transition ?
1678 | $active.one($.support.transition.end, next) :
1679 | next()
1680 |
1681 | $active.removeClass('in')
1682 | }
1683 | }
1684 |
1685 |
1686 | /* TAB PLUGIN DEFINITION
1687 | * ===================== */
1688 |
1689 | var old = $.fn.tab
1690 |
1691 | $.fn.tab = function ( option ) {
1692 | return this.each(function () {
1693 | var $this = $(this)
1694 | , data = $this.data('tab')
1695 | if (!data) $this.data('tab', (data = new Tab(this)))
1696 | if (typeof option == 'string') data[option]()
1697 | })
1698 | }
1699 |
1700 | $.fn.tab.Constructor = Tab
1701 |
1702 |
1703 | /* TAB NO CONFLICT
1704 | * =============== */
1705 |
1706 | $.fn.tab.noConflict = function () {
1707 | $.fn.tab = old
1708 | return this
1709 | }
1710 |
1711 |
1712 | /* TAB DATA-API
1713 | * ============ */
1714 |
1715 | $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1716 | e.preventDefault()
1717 | $(this).tab('show')
1718 | })
1719 |
1720 | }(window.jQuery);/* =============================================================
1721 | * bootstrap-typeahead.js v2.2.2
1722 | * http://twitter.github.com/bootstrap/javascript.html#typeahead
1723 | * =============================================================
1724 | * Copyright 2012 Twitter, Inc.
1725 | *
1726 | * Licensed under the Apache License, Version 2.0 (the "License");
1727 | * you may not use this file except in compliance with the License.
1728 | * You may obtain a copy of the License at
1729 | *
1730 | * http://www.apache.org/licenses/LICENSE-2.0
1731 | *
1732 | * Unless required by applicable law or agreed to in writing, software
1733 | * distributed under the License is distributed on an "AS IS" BASIS,
1734 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1735 | * See the License for the specific language governing permissions and
1736 | * limitations under the License.
1737 | * ============================================================ */
1738 |
1739 |
1740 | !function($){
1741 |
1742 | "use strict"; // jshint ;_;
1743 |
1744 |
1745 | /* TYPEAHEAD PUBLIC CLASS DEFINITION
1746 | * ================================= */
1747 |
1748 | var Typeahead = function (element, options) {
1749 | this.$element = $(element)
1750 | this.options = $.extend({}, $.fn.typeahead.defaults, options)
1751 | this.matcher = this.options.matcher || this.matcher
1752 | this.sorter = this.options.sorter || this.sorter
1753 | this.highlighter = this.options.highlighter || this.highlighter
1754 | this.updater = this.options.updater || this.updater
1755 | this.source = this.options.source
1756 | this.$menu = $(this.options.menu)
1757 | this.shown = false
1758 | this.listen()
1759 | }
1760 |
1761 | Typeahead.prototype = {
1762 |
1763 | constructor: Typeahead
1764 |
1765 | , select: function () {
1766 | var val = this.$menu.find('.active').attr('data-value')
1767 | this.$element
1768 | .val(this.updater(val))
1769 | .change()
1770 | return this.hide()
1771 | }
1772 |
1773 | , updater: function (item) {
1774 | return item
1775 | }
1776 |
1777 | , show: function () {
1778 | var pos = $.extend({}, this.$element.position(), {
1779 | height: this.$element[0].offsetHeight
1780 | })
1781 |
1782 | this.$menu
1783 | .insertAfter(this.$element)
1784 | .css({
1785 | top: pos.top + pos.height
1786 | , left: pos.left
1787 | })
1788 | .show()
1789 |
1790 | this.shown = true
1791 | return this
1792 | }
1793 |
1794 | , hide: function () {
1795 | this.$menu.hide()
1796 | this.shown = false
1797 | return this
1798 | }
1799 |
1800 | , lookup: function (event) {
1801 | var items
1802 |
1803 | this.query = this.$element.val()
1804 |
1805 | if (!this.query || this.query.length < this.options.minLength) {
1806 | return this.shown ? this.hide() : this
1807 | }
1808 |
1809 | items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
1810 |
1811 | return items ? this.process(items) : this
1812 | }
1813 |
1814 | , process: function (items) {
1815 | var that = this
1816 |
1817 | items = $.grep(items, function (item) {
1818 | return that.matcher(item)
1819 | })
1820 |
1821 | items = this.sorter(items)
1822 |
1823 | if (!items.length) {
1824 | return this.shown ? this.hide() : this
1825 | }
1826 |
1827 | return this.render(items.slice(0, this.options.items)).show()
1828 | }
1829 |
1830 | , matcher: function (item) {
1831 | return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1832 | }
1833 |
1834 | , sorter: function (items) {
1835 | var beginswith = []
1836 | , caseSensitive = []
1837 | , caseInsensitive = []
1838 | , item
1839 |
1840 | while (item = items.shift()) {
1841 | if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1842 | else if (~item.indexOf(this.query)) caseSensitive.push(item)
1843 | else caseInsensitive.push(item)
1844 | }
1845 |
1846 | return beginswith.concat(caseSensitive, caseInsensitive)
1847 | }
1848 |
1849 | , highlighter: function (item) {
1850 | var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
1851 | return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1852 | return '' + match + ''
1853 | })
1854 | }
1855 |
1856 | , render: function (items) {
1857 | var that = this
1858 |
1859 | items = $(items).map(function (i, item) {
1860 | i = $(that.options.item).attr('data-value', item)
1861 | i.find('a').html(that.highlighter(item))
1862 | return i[0]
1863 | })
1864 |
1865 | items.first().addClass('active')
1866 | this.$menu.html(items)
1867 | return this
1868 | }
1869 |
1870 | , next: function (event) {
1871 | var active = this.$menu.find('.active').removeClass('active')
1872 | , next = active.next()
1873 |
1874 | if (!next.length) {
1875 | next = $(this.$menu.find('li')[0])
1876 | }
1877 |
1878 | next.addClass('active')
1879 | }
1880 |
1881 | , prev: function (event) {
1882 | var active = this.$menu.find('.active').removeClass('active')
1883 | , prev = active.prev()
1884 |
1885 | if (!prev.length) {
1886 | prev = this.$menu.find('li').last()
1887 | }
1888 |
1889 | prev.addClass('active')
1890 | }
1891 |
1892 | , listen: function () {
1893 | this.$element
1894 | .on('blur', $.proxy(this.blur, this))
1895 | .on('keypress', $.proxy(this.keypress, this))
1896 | .on('keyup', $.proxy(this.keyup, this))
1897 |
1898 | if (this.eventSupported('keydown')) {
1899 | this.$element.on('keydown', $.proxy(this.keydown, this))
1900 | }
1901 |
1902 | this.$menu
1903 | .on('click', $.proxy(this.click, this))
1904 | .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1905 | }
1906 |
1907 | , eventSupported: function(eventName) {
1908 | var isSupported = eventName in this.$element
1909 | if (!isSupported) {
1910 | this.$element.setAttribute(eventName, 'return;')
1911 | isSupported = typeof this.$element[eventName] === 'function'
1912 | }
1913 | return isSupported
1914 | }
1915 |
1916 | , move: function (e) {
1917 | if (!this.shown) return
1918 |
1919 | switch(e.keyCode) {
1920 | case 9: // tab
1921 | case 13: // enter
1922 | case 27: // escape
1923 | e.preventDefault()
1924 | break
1925 |
1926 | case 38: // up arrow
1927 | e.preventDefault()
1928 | this.prev()
1929 | break
1930 |
1931 | case 40: // down arrow
1932 | e.preventDefault()
1933 | this.next()
1934 | break
1935 | }
1936 |
1937 | e.stopPropagation()
1938 | }
1939 |
1940 | , keydown: function (e) {
1941 | this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
1942 | this.move(e)
1943 | }
1944 |
1945 | , keypress: function (e) {
1946 | if (this.suppressKeyPressRepeat) return
1947 | this.move(e)
1948 | }
1949 |
1950 | , keyup: function (e) {
1951 | switch(e.keyCode) {
1952 | case 40: // down arrow
1953 | case 38: // up arrow
1954 | case 16: // shift
1955 | case 17: // ctrl
1956 | case 18: // alt
1957 | break
1958 |
1959 | case 9: // tab
1960 | case 13: // enter
1961 | if (!this.shown) return
1962 | this.select()
1963 | break
1964 |
1965 | case 27: // escape
1966 | if (!this.shown) return
1967 | this.hide()
1968 | break
1969 |
1970 | default:
1971 | this.lookup()
1972 | }
1973 |
1974 | e.stopPropagation()
1975 | e.preventDefault()
1976 | }
1977 |
1978 | , blur: function (e) {
1979 | var that = this
1980 | setTimeout(function () { that.hide() }, 150)
1981 | }
1982 |
1983 | , click: function (e) {
1984 | e.stopPropagation()
1985 | e.preventDefault()
1986 | this.select()
1987 | }
1988 |
1989 | , mouseenter: function (e) {
1990 | this.$menu.find('.active').removeClass('active')
1991 | $(e.currentTarget).addClass('active')
1992 | }
1993 |
1994 | }
1995 |
1996 |
1997 | /* TYPEAHEAD PLUGIN DEFINITION
1998 | * =========================== */
1999 |
2000 | var old = $.fn.typeahead
2001 |
2002 | $.fn.typeahead = function (option) {
2003 | return this.each(function () {
2004 | var $this = $(this)
2005 | , data = $this.data('typeahead')
2006 | , options = typeof option == 'object' && option
2007 | if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
2008 | if (typeof option == 'string') data[option]()
2009 | })
2010 | }
2011 |
2012 | $.fn.typeahead.defaults = {
2013 | source: []
2014 | , items: 8
2015 | , menu: ''
2016 | , item: ''
2017 | , minLength: 1
2018 | }
2019 |
2020 | $.fn.typeahead.Constructor = Typeahead
2021 |
2022 |
2023 | /* TYPEAHEAD NO CONFLICT
2024 | * =================== */
2025 |
2026 | $.fn.typeahead.noConflict = function () {
2027 | $.fn.typeahead = old
2028 | return this
2029 | }
2030 |
2031 |
2032 | /* TYPEAHEAD DATA-API
2033 | * ================== */
2034 |
2035 | $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
2036 | var $this = $(this)
2037 | if ($this.data('typeahead')) return
2038 | e.preventDefault()
2039 | $this.typeahead($this.data())
2040 | })
2041 |
2042 | }(window.jQuery);
2043 | /* ==========================================================
2044 | * bootstrap-affix.js v2.2.2
2045 | * http://twitter.github.com/bootstrap/javascript.html#affix
2046 | * ==========================================================
2047 | * Copyright 2012 Twitter, Inc.
2048 | *
2049 | * Licensed under the Apache License, Version 2.0 (the "License");
2050 | * you may not use this file except in compliance with the License.
2051 | * You may obtain a copy of the License at
2052 | *
2053 | * http://www.apache.org/licenses/LICENSE-2.0
2054 | *
2055 | * Unless required by applicable law or agreed to in writing, software
2056 | * distributed under the License is distributed on an "AS IS" BASIS,
2057 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2058 | * See the License for the specific language governing permissions and
2059 | * limitations under the License.
2060 | * ========================================================== */
2061 |
2062 |
2063 | !function ($) {
2064 |
2065 | "use strict"; // jshint ;_;
2066 |
2067 |
2068 | /* AFFIX CLASS DEFINITION
2069 | * ====================== */
2070 |
2071 | var Affix = function (element, options) {
2072 | this.options = $.extend({}, $.fn.affix.defaults, options)
2073 | this.$window = $(window)
2074 | .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
2075 | .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
2076 | this.$element = $(element)
2077 | this.checkPosition()
2078 | }
2079 |
2080 | Affix.prototype.checkPosition = function () {
2081 | if (!this.$element.is(':visible')) return
2082 |
2083 | var scrollHeight = $(document).height()
2084 | , scrollTop = this.$window.scrollTop()
2085 | , position = this.$element.offset()
2086 | , offset = this.options.offset
2087 | , offsetBottom = offset.bottom
2088 | , offsetTop = offset.top
2089 | , reset = 'affix affix-top affix-bottom'
2090 | , affix
2091 |
2092 | if (typeof offset != 'object') offsetBottom = offsetTop = offset
2093 | if (typeof offsetTop == 'function') offsetTop = offset.top()
2094 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
2095 |
2096 | affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
2097 | false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
2098 | 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
2099 | 'top' : false
2100 |
2101 | if (this.affixed === affix) return
2102 |
2103 | this.affixed = affix
2104 | this.unpin = affix == 'bottom' ? position.top - scrollTop : null
2105 |
2106 | this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
2107 | }
2108 |
2109 |
2110 | /* AFFIX PLUGIN DEFINITION
2111 | * ======================= */
2112 |
2113 | var old = $.fn.affix
2114 |
2115 | $.fn.affix = function (option) {
2116 | return this.each(function () {
2117 | var $this = $(this)
2118 | , data = $this.data('affix')
2119 | , options = typeof option == 'object' && option
2120 | if (!data) $this.data('affix', (data = new Affix(this, options)))
2121 | if (typeof option == 'string') data[option]()
2122 | })
2123 | }
2124 |
2125 | $.fn.affix.Constructor = Affix
2126 |
2127 | $.fn.affix.defaults = {
2128 | offset: 0
2129 | }
2130 |
2131 |
2132 | /* AFFIX NO CONFLICT
2133 | * ================= */
2134 |
2135 | $.fn.affix.noConflict = function () {
2136 | $.fn.affix = old
2137 | return this
2138 | }
2139 |
2140 |
2141 | /* AFFIX DATA-API
2142 | * ============== */
2143 |
2144 | $(window).on('load', function () {
2145 | $('[data-spy="affix"]').each(function () {
2146 | var $spy = $(this)
2147 | , data = $spy.data()
2148 |
2149 | data.offset = data.offset || {}
2150 |
2151 | data.offsetBottom && (data.offset.bottom = data.offsetBottom)
2152 | data.offsetTop && (data.offset.top = data.offsetTop)
2153 |
2154 | $spy.affix(data)
2155 | })
2156 | })
2157 |
2158 |
2159 | }(window.jQuery);
--------------------------------------------------------------------------------