spiderfw 0.6.30 → 0.6.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +15 -7
  2. data/CHANGELOG +11 -0
  3. data/VERSION +1 -1
  4. data/apps/app_server/config/options.rb +1 -1
  5. data/apps/core/auth/controllers/login_controller.rb +3 -0
  6. data/apps/core/components/assets.rb +61 -3
  7. data/apps/core/components/public/bootstrap_3/img/glyphicons-halflings-regular.eot +0 -0
  8. data/apps/core/components/public/bootstrap_3/img/glyphicons-halflings-regular.svg +229 -0
  9. data/apps/core/components/public/bootstrap_3/img/glyphicons-halflings-regular.ttf +0 -0
  10. data/apps/core/components/public/bootstrap_3/img/glyphicons-halflings-regular.woff +0 -0
  11. data/apps/core/components/public/bootstrap_3/js/affix.js +140 -0
  12. data/apps/core/components/public/bootstrap_3/js/alert.js +92 -0
  13. data/apps/core/components/public/bootstrap_3/js/button.js +110 -0
  14. data/apps/core/components/public/bootstrap_3/js/carousel.js +210 -0
  15. data/apps/core/components/public/bootstrap_3/js/collapse.js +180 -0
  16. data/apps/core/components/public/bootstrap_3/js/dropdown.js +151 -0
  17. data/apps/core/components/public/bootstrap_3/js/modal.js +277 -0
  18. data/apps/core/components/public/bootstrap_3/js/popover.js +113 -0
  19. data/apps/core/components/public/bootstrap_3/js/scrollspy.js +158 -0
  20. data/apps/core/components/public/bootstrap_3/js/tab.js +128 -0
  21. data/apps/core/components/public/bootstrap_3/js/tooltip.js +456 -0
  22. data/apps/core/components/public/bootstrap_3/js/transition.js +48 -0
  23. data/apps/core/components/public/bootstrap_3/scss/_alerts.scss +67 -0
  24. data/apps/core/components/public/bootstrap_3/scss/_badges.scss +57 -0
  25. data/apps/core/components/public/bootstrap_3/scss/_breadcrumbs.scss +26 -0
  26. data/apps/core/components/public/bootstrap_3/scss/_button-groups.scss +240 -0
  27. data/apps/core/components/public/bootstrap_3/scss/_buttons.scss +159 -0
  28. data/apps/core/components/public/bootstrap_3/scss/_carousel.scss +243 -0
  29. data/apps/core/components/public/bootstrap_3/scss/_close.scss +35 -0
  30. data/apps/core/components/public/bootstrap_3/scss/_code.scss +62 -0
  31. data/apps/core/components/public/bootstrap_3/scss/_component-animations.scss +35 -0
  32. data/apps/core/components/public/bootstrap_3/scss/_dropdowns.scss +214 -0
  33. data/apps/core/components/public/bootstrap_3/scss/_forms.scss +489 -0
  34. data/apps/core/components/public/bootstrap_3/scss/_glyphicons.scss +237 -0
  35. data/apps/core/components/public/bootstrap_3/scss/_grid.scss +84 -0
  36. data/apps/core/components/public/bootstrap_3/scss/_input-groups.scss +166 -0
  37. data/apps/core/components/public/bootstrap_3/scss/_jumbotron.scss +48 -0
  38. data/apps/core/components/public/bootstrap_3/scss/_labels.scss +66 -0
  39. data/apps/core/components/public/bootstrap_3/scss/_list-group.scss +129 -0
  40. data/apps/core/components/public/bootstrap_3/scss/_media.scss +56 -0
  41. data/apps/core/components/public/bootstrap_3/scss/_mixins.scss +39 -0
  42. data/apps/core/components/public/bootstrap_3/scss/_modals.scss +147 -0
  43. data/apps/core/components/public/bootstrap_3/scss/_navbar.scss +658 -0
  44. data/apps/core/components/public/bootstrap_3/scss/_navs.scss +242 -0
  45. data/apps/core/components/public/bootstrap_3/scss/_normalize.scss +425 -0
  46. data/apps/core/components/public/bootstrap_3/scss/_pager.scss +55 -0
  47. data/apps/core/components/public/bootstrap_3/scss/_pagination.scss +88 -0
  48. data/apps/core/components/public/bootstrap_3/scss/_panels.scss +240 -0
  49. data/apps/core/components/public/bootstrap_3/scss/_popovers.scss +133 -0
  50. data/apps/core/components/public/bootstrap_3/scss/_print.scss +101 -0
  51. data/apps/core/components/public/bootstrap_3/scss/_progress-bars.scss +89 -0
  52. data/apps/core/components/public/bootstrap_3/scss/_responsive-embed.scss +34 -0
  53. data/apps/core/components/public/bootstrap_3/scss/_responsive-utilities.scss +174 -0
  54. data/apps/core/components/public/bootstrap_3/scss/_scaffolding.scss +150 -0
  55. data/apps/core/components/public/bootstrap_3/scss/_tables.scss +233 -0
  56. data/apps/core/components/public/bootstrap_3/scss/_theme.scss +247 -0
  57. data/apps/core/components/public/bootstrap_3/scss/_thumbnails.scss +38 -0
  58. data/apps/core/components/public/bootstrap_3/scss/_tooltip.scss +95 -0
  59. data/apps/core/components/public/bootstrap_3/scss/_type.scss +298 -0
  60. data/apps/core/components/public/bootstrap_3/scss/_utilities.scss +56 -0
  61. data/apps/core/components/public/bootstrap_3/scss/_variables.scss +853 -0
  62. data/apps/core/components/public/bootstrap_3/scss/_wells.scss +29 -0
  63. data/apps/core/components/public/bootstrap_3/scss/bootstrap.scss +50 -0
  64. data/apps/core/components/public/bootstrap_3/scss/mixins/_alerts.scss +14 -0
  65. data/apps/core/components/public/bootstrap_3/scss/mixins/_background-variant.scss +11 -0
  66. data/apps/core/components/public/bootstrap_3/scss/mixins/_border-radius.scss +18 -0
  67. data/apps/core/components/public/bootstrap_3/scss/mixins/_buttons.scss +50 -0
  68. data/apps/core/components/public/bootstrap_3/scss/mixins/_center-block.scss +7 -0
  69. data/apps/core/components/public/bootstrap_3/scss/mixins/_clearfix.scss +22 -0
  70. data/apps/core/components/public/bootstrap_3/scss/mixins/_forms.scss +84 -0
  71. data/apps/core/components/public/bootstrap_3/scss/mixins/_gradients.scss +58 -0
  72. data/apps/core/components/public/bootstrap_3/scss/mixins/_grid-framework.scss +87 -0
  73. data/apps/core/components/public/bootstrap_3/scss/mixins/_grid.scss +122 -0
  74. data/apps/core/components/public/bootstrap_3/scss/mixins/_hide-text.scss +21 -0
  75. data/apps/core/components/public/bootstrap_3/scss/mixins/_image.scss +33 -0
  76. data/apps/core/components/public/bootstrap_3/scss/mixins/_labels.scss +12 -0
  77. data/apps/core/components/public/bootstrap_3/scss/mixins/_list-group.scss +31 -0
  78. data/apps/core/components/public/bootstrap_3/scss/mixins/_nav-divider.scss +10 -0
  79. data/apps/core/components/public/bootstrap_3/scss/mixins/_nav-vertical-align.scss +9 -0
  80. data/apps/core/components/public/bootstrap_3/scss/mixins/_opacity.scss +8 -0
  81. data/apps/core/components/public/bootstrap_3/scss/mixins/_pagination.scss +23 -0
  82. data/apps/core/components/public/bootstrap_3/scss/mixins/_panels.scss +20 -0
  83. data/apps/core/components/public/bootstrap_3/scss/mixins/_progress-bar.scss +8 -0
  84. data/apps/core/components/public/bootstrap_3/scss/mixins/_reset-filter.scss +8 -0
  85. data/apps/core/components/public/bootstrap_3/scss/mixins/_resize.scss +6 -0
  86. data/apps/core/components/public/bootstrap_3/scss/mixins/_responsive-visibility.scss +21 -0
  87. data/apps/core/components/public/bootstrap_3/scss/mixins/_size.scss +10 -0
  88. data/apps/core/components/public/bootstrap_3/scss/mixins/_tab-focus.scss +9 -0
  89. data/apps/core/components/public/bootstrap_3/scss/mixins/_table-row.scss +28 -0
  90. data/apps/core/components/public/bootstrap_3/scss/mixins/_text-emphasis.scss +11 -0
  91. data/apps/core/components/public/bootstrap_3/scss/mixins/_text-overflow.scss +8 -0
  92. data/apps/core/components/public/bootstrap_3/scss/mixins/_vendor-prefixes.scss +224 -0
  93. data/apps/core/components/public/js/jquery/plugins/bsmselect/js/jquery.bsmselect.js +1 -1
  94. data/apps/core/components/widgets/month_calendar/month_calendar.shtml +3 -3
  95. data/apps/core/components/widgets/table/table.rb +6 -2
  96. data/apps/core/components/widgets/table/table.shtml +4 -4
  97. data/apps/core/forms/widgets/form/form.rb +1 -1
  98. data/apps/core/forms/widgets/inputs/select/select.rb +13 -2
  99. data/apps/messenger/lib/backends/mobyt.rb +6 -2
  100. data/apps/messenger/lib/backends/skebby.rb +1 -1
  101. data/apps/webdav/controllers/webdav_controller.rb +16 -7
  102. data/lib/spiderfw/controller/http_controller.rb +4 -1
  103. data/lib/spiderfw/env.rb +0 -1
  104. data/lib/spiderfw/http/adapters/rack.rb +3 -1
  105. data/lib/spiderfw/model/base_model.rb +7 -3
  106. data/lib/spiderfw/model/storage/connection_pool.rb +6 -2
  107. data/lib/spiderfw/model/storage/db/db_storage.rb +25 -9
  108. data/lib/spiderfw/site.rb +1 -1
  109. metadata +308 -149
@@ -0,0 +1,151 @@
1
+ /* ========================================================================
2
+ * Bootstrap: dropdown.js v3.1.1
3
+ * http://getbootstrap.com/javascript/#dropdowns
4
+ * ========================================================================
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // DROPDOWN CLASS DEFINITION
14
+ // =========================
15
+
16
+ var backdrop = '.dropdown-backdrop'
17
+ var toggle = '[data-toggle="dropdown"]'
18
+ var Dropdown = function (element) {
19
+ $(element).on('click.bs.dropdown', this.toggle)
20
+ }
21
+
22
+ Dropdown.VERSION = '3.1.1'
23
+
24
+ Dropdown.prototype.toggle = function (e) {
25
+ var $this = $(this)
26
+
27
+ if ($this.is('.disabled, :disabled')) return
28
+
29
+ var $parent = getParent($this)
30
+ var isActive = $parent.hasClass('open')
31
+
32
+ clearMenus()
33
+
34
+ if (!isActive) {
35
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
36
+ // if mobile we use a backdrop because click events don't delegate
37
+ $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
38
+ }
39
+
40
+ var relatedTarget = { relatedTarget: this }
41
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
42
+
43
+ if (e.isDefaultPrevented()) return
44
+
45
+ $this.trigger('focus')
46
+
47
+ $parent
48
+ .toggleClass('open')
49
+ .trigger('shown.bs.dropdown', relatedTarget)
50
+ }
51
+
52
+ return false
53
+ }
54
+
55
+ Dropdown.prototype.keydown = function (e) {
56
+ if (!/(38|40|27)/.test(e.keyCode)) return
57
+
58
+ var $this = $(this)
59
+
60
+ e.preventDefault()
61
+ e.stopPropagation()
62
+
63
+ if ($this.is('.disabled, :disabled')) return
64
+
65
+ var $parent = getParent($this)
66
+ var isActive = $parent.hasClass('open')
67
+
68
+ if (!isActive || (isActive && e.keyCode == 27)) {
69
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
70
+ return $this.trigger('click')
71
+ }
72
+
73
+ var desc = ' li:not(.divider):visible a'
74
+ var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
75
+
76
+ if (!$items.length) return
77
+
78
+ var index = $items.index($items.filter(':focus'))
79
+
80
+ if (e.keyCode == 38 && index > 0) index-- // up
81
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
82
+ if (!~index) index = 0
83
+
84
+ $items.eq(index).trigger('focus')
85
+ }
86
+
87
+ function clearMenus(e) {
88
+ if (e && e.which === 3) return
89
+ $(backdrop).remove()
90
+ $(toggle).each(function () {
91
+ var $parent = getParent($(this))
92
+ var relatedTarget = { relatedTarget: this }
93
+ if (!$parent.hasClass('open')) return
94
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
95
+ if (e.isDefaultPrevented()) return
96
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
97
+ })
98
+ }
99
+
100
+ function getParent($this) {
101
+ var selector = $this.attr('data-target')
102
+
103
+ if (!selector) {
104
+ selector = $this.attr('href')
105
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
106
+ }
107
+
108
+ var $parent = selector && $(selector)
109
+
110
+ return $parent && $parent.length ? $parent : $this.parent()
111
+ }
112
+
113
+
114
+ // DROPDOWN PLUGIN DEFINITION
115
+ // ==========================
116
+
117
+ function Plugin(option) {
118
+ return this.each(function () {
119
+ var $this = $(this)
120
+ var data = $this.data('bs.dropdown')
121
+
122
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
123
+ if (typeof option == 'string') data[option].call($this)
124
+ })
125
+ }
126
+
127
+ var old = $.fn.dropdown
128
+
129
+ $.fn.dropdown = Plugin
130
+ $.fn.dropdown.Constructor = Dropdown
131
+
132
+
133
+ // DROPDOWN NO CONFLICT
134
+ // ====================
135
+
136
+ $.fn.dropdown.noConflict = function () {
137
+ $.fn.dropdown = old
138
+ return this
139
+ }
140
+
141
+
142
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
143
+ // ===================================
144
+
145
+ $(document)
146
+ .on('click.bs.dropdown.data-api', clearMenus)
147
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
148
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
149
+ .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
150
+
151
+ }(jQuery);
@@ -0,0 +1,277 @@
1
+ /* ========================================================================
2
+ * Bootstrap: modal.js v3.1.1
3
+ * http://getbootstrap.com/javascript/#modals
4
+ * ========================================================================
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // MODAL CLASS DEFINITION
14
+ // ======================
15
+
16
+ var Modal = function (element, options) {
17
+ this.options = options
18
+ this.$body = $(document.body)
19
+ this.$element = $(element)
20
+ this.$backdrop =
21
+ this.isShown = null
22
+ this.scrollbarWidth = 0
23
+
24
+ if (this.options.remote) {
25
+ this.$element
26
+ .find('.modal-content')
27
+ .load(this.options.remote, $.proxy(function () {
28
+ this.$element.trigger('loaded.bs.modal')
29
+ }, this))
30
+ }
31
+ }
32
+
33
+ Modal.VERSION = '3.1.1'
34
+
35
+ Modal.DEFAULTS = {
36
+ backdrop: true,
37
+ keyboard: true,
38
+ show: true
39
+ }
40
+
41
+ Modal.prototype.toggle = function (_relatedTarget) {
42
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
43
+ }
44
+
45
+ Modal.prototype.show = function (_relatedTarget) {
46
+ var that = this
47
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
48
+
49
+ this.$element.trigger(e)
50
+
51
+ if (this.isShown || e.isDefaultPrevented()) return
52
+
53
+ this.isShown = true
54
+
55
+ this.checkScrollbar()
56
+ this.$body.addClass('modal-open')
57
+
58
+ this.setScrollbar()
59
+ this.escape()
60
+
61
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
62
+
63
+ this.backdrop(function () {
64
+ var transition = $.support.transition && that.$element.hasClass('fade')
65
+
66
+ if (!that.$element.parent().length) {
67
+ that.$element.appendTo(that.$body) // don't move modals dom position
68
+ }
69
+
70
+ that.$element
71
+ .show()
72
+ .scrollTop(0)
73
+
74
+ if (transition) {
75
+ that.$element[0].offsetWidth // force reflow
76
+ }
77
+
78
+ that.$element
79
+ .addClass('in')
80
+ .attr('aria-hidden', false)
81
+
82
+ that.enforceFocus()
83
+
84
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
85
+
86
+ transition ?
87
+ that.$element.find('.modal-dialog') // wait for modal to slide in
88
+ .one($.support.transition.end, function () {
89
+ that.$element.trigger('focus').trigger(e)
90
+ })
91
+ .emulateTransitionEnd(300) :
92
+ that.$element.trigger('focus').trigger(e)
93
+ })
94
+ }
95
+
96
+ Modal.prototype.hide = function (e) {
97
+ if (e) e.preventDefault()
98
+
99
+ e = $.Event('hide.bs.modal')
100
+
101
+ this.$element.trigger(e)
102
+
103
+ if (!this.isShown || e.isDefaultPrevented()) return
104
+
105
+ this.isShown = false
106
+
107
+ this.$body.removeClass('modal-open')
108
+
109
+ this.resetScrollbar()
110
+ this.escape()
111
+
112
+ $(document).off('focusin.bs.modal')
113
+
114
+ this.$element
115
+ .removeClass('in')
116
+ .attr('aria-hidden', true)
117
+ .off('click.dismiss.bs.modal')
118
+
119
+ $.support.transition && this.$element.hasClass('fade') ?
120
+ this.$element
121
+ .one($.support.transition.end, $.proxy(this.hideModal, this))
122
+ .emulateTransitionEnd(300) :
123
+ this.hideModal()
124
+ }
125
+
126
+ Modal.prototype.enforceFocus = function () {
127
+ $(document)
128
+ .off('focusin.bs.modal') // guard against infinite focus loop
129
+ .on('focusin.bs.modal', $.proxy(function (e) {
130
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
131
+ this.$element.trigger('focus')
132
+ }
133
+ }, this))
134
+ }
135
+
136
+ Modal.prototype.escape = function () {
137
+ if (this.isShown && this.options.keyboard) {
138
+ this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
139
+ e.which == 27 && this.hide()
140
+ }, this))
141
+ } else if (!this.isShown) {
142
+ this.$element.off('keyup.dismiss.bs.modal')
143
+ }
144
+ }
145
+
146
+ Modal.prototype.hideModal = function () {
147
+ var that = this
148
+ this.$element.hide()
149
+ this.backdrop(function () {
150
+ that.$element.trigger('hidden.bs.modal')
151
+ })
152
+ }
153
+
154
+ Modal.prototype.removeBackdrop = function () {
155
+ this.$backdrop && this.$backdrop.remove()
156
+ this.$backdrop = null
157
+ }
158
+
159
+ Modal.prototype.backdrop = function (callback) {
160
+ var that = this
161
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
162
+
163
+ if (this.isShown && this.options.backdrop) {
164
+ var doAnimate = $.support.transition && animate
165
+
166
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
167
+ .appendTo(this.$body)
168
+
169
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
170
+ if (e.target !== e.currentTarget) return
171
+ this.options.backdrop == 'static'
172
+ ? this.$element[0].focus.call(this.$element[0])
173
+ : this.hide.call(this)
174
+ }, this))
175
+
176
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
177
+
178
+ this.$backdrop.addClass('in')
179
+
180
+ if (!callback) return
181
+
182
+ doAnimate ?
183
+ this.$backdrop
184
+ .one($.support.transition.end, callback)
185
+ .emulateTransitionEnd(150) :
186
+ callback()
187
+
188
+ } else if (!this.isShown && this.$backdrop) {
189
+ this.$backdrop.removeClass('in')
190
+
191
+ var callbackRemove = function() {
192
+ that.removeBackdrop()
193
+ callback && callback()
194
+ }
195
+ $.support.transition && this.$element.hasClass('fade') ?
196
+ this.$backdrop
197
+ .one($.support.transition.end, callbackRemove)
198
+ .emulateTransitionEnd(150) :
199
+ callbackRemove()
200
+
201
+ } else if (callback) {
202
+ callback()
203
+ }
204
+ }
205
+
206
+ Modal.prototype.checkScrollbar = function () {
207
+ if (document.body.clientWidth >= window.innerWidth) return
208
+ this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
209
+ }
210
+
211
+ Modal.prototype.setScrollbar = function () {
212
+ var bodyPad = parseInt(this.$body.css('padding-right') || 0)
213
+ if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
214
+ }
215
+
216
+ Modal.prototype.resetScrollbar = function () {
217
+ this.$body.css('padding-right', '')
218
+ }
219
+
220
+ Modal.prototype.measureScrollbar = function () { // thx walsh
221
+ var scrollDiv = document.createElement('div')
222
+ scrollDiv.className = 'modal-scrollbar-measure'
223
+ this.$body.append(scrollDiv)
224
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
225
+ this.$body[0].removeChild(scrollDiv)
226
+ return scrollbarWidth
227
+ }
228
+
229
+
230
+ // MODAL PLUGIN DEFINITION
231
+ // =======================
232
+
233
+ function Plugin(option, _relatedTarget) {
234
+ return this.each(function () {
235
+ var $this = $(this)
236
+ var data = $this.data('bs.modal')
237
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
238
+
239
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
240
+ if (typeof option == 'string') data[option](_relatedTarget)
241
+ else if (options.show) data.show(_relatedTarget)
242
+ })
243
+ }
244
+
245
+ var old = $.fn.modal
246
+
247
+ $.fn.modal = Plugin
248
+ $.fn.modal.Constructor = Modal
249
+
250
+
251
+ // MODAL NO CONFLICT
252
+ // =================
253
+
254
+ $.fn.modal.noConflict = function () {
255
+ $.fn.modal = old
256
+ return this
257
+ }
258
+
259
+
260
+ // MODAL DATA-API
261
+ // ==============
262
+
263
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
264
+ var $this = $(this)
265
+ var href = $this.attr('href')
266
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
267
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
268
+
269
+ if ($this.is('a')) e.preventDefault()
270
+
271
+ Plugin.call($target, option, this)
272
+ $target.one('hide.bs.modal', function () {
273
+ $this.is(':visible') && $this.trigger('focus')
274
+ })
275
+ })
276
+
277
+ }(jQuery);
@@ -0,0 +1,113 @@
1
+ /* ========================================================================
2
+ * Bootstrap: popover.js v3.1.1
3
+ * http://getbootstrap.com/javascript/#popovers
4
+ * ========================================================================
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // POPOVER PUBLIC CLASS DEFINITION
14
+ // ===============================
15
+
16
+ var Popover = function (element, options) {
17
+ this.init('popover', element, options)
18
+ }
19
+
20
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
21
+
22
+ Popover.VERSION = '3.1.1'
23
+
24
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
25
+ placement: 'right',
26
+ trigger: 'click',
27
+ content: '',
28
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
29
+ })
30
+
31
+
32
+ // NOTE: POPOVER EXTENDS tooltip.js
33
+ // ================================
34
+
35
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
36
+
37
+ Popover.prototype.constructor = Popover
38
+
39
+ Popover.prototype.getDefaults = function () {
40
+ return Popover.DEFAULTS
41
+ }
42
+
43
+ Popover.prototype.setContent = function () {
44
+ var $tip = this.tip()
45
+ var title = this.getTitle()
46
+ var content = this.getContent()
47
+
48
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
49
+ $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
50
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
51
+ ](content)
52
+
53
+ $tip.removeClass('fade top bottom left right in')
54
+
55
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
56
+ // this manually by checking the contents.
57
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
58
+ }
59
+
60
+ Popover.prototype.hasContent = function () {
61
+ return this.getTitle() || this.getContent()
62
+ }
63
+
64
+ Popover.prototype.getContent = function () {
65
+ var $e = this.$element
66
+ var o = this.options
67
+
68
+ return $e.attr('data-content')
69
+ || (typeof o.content == 'function' ?
70
+ o.content.call($e[0]) :
71
+ o.content)
72
+ }
73
+
74
+ Popover.prototype.arrow = function () {
75
+ return this.$arrow = this.$arrow || this.tip().find('.arrow')
76
+ }
77
+
78
+ Popover.prototype.tip = function () {
79
+ if (!this.$tip) this.$tip = $(this.options.template)
80
+ return this.$tip
81
+ }
82
+
83
+
84
+ // POPOVER PLUGIN DEFINITION
85
+ // =========================
86
+
87
+ function Plugin(option) {
88
+ return this.each(function () {
89
+ var $this = $(this)
90
+ var data = $this.data('bs.popover')
91
+ var options = typeof option == 'object' && option
92
+
93
+ if (!data && option == 'destroy') return
94
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
95
+ if (typeof option == 'string') data[option]()
96
+ })
97
+ }
98
+
99
+ var old = $.fn.popover
100
+
101
+ $.fn.popover = Plugin
102
+ $.fn.popover.Constructor = Popover
103
+
104
+
105
+ // POPOVER NO CONFLICT
106
+ // ===================
107
+
108
+ $.fn.popover.noConflict = function () {
109
+ $.fn.popover = old
110
+ return this
111
+ }
112
+
113
+ }(jQuery);
@@ -0,0 +1,158 @@
1
+ /* ========================================================================
2
+ * Bootstrap: scrollspy.js v3.1.1
3
+ * http://getbootstrap.com/javascript/#scrollspy
4
+ * ========================================================================
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // SCROLLSPY CLASS DEFINITION
14
+ // ==========================
15
+
16
+ function ScrollSpy(element, options) {
17
+ var href
18
+ var process = $.proxy(this.process, this)
19
+
20
+ this.$element = $(element).is('body') ? $(window) : $(element)
21
+ this.$body = $('body')
22
+ this.$scrollElement = this.$element.on('scroll.bs.scrollspy', process)
23
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
24
+ this.selector = (this.options.target
25
+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
26
+ || '') + ' .nav li > a'
27
+ this.offsets = $([])
28
+ this.targets = $([])
29
+ this.activeTarget = null
30
+
31
+ this.refresh()
32
+ this.process()
33
+ }
34
+
35
+ ScrollSpy.VERSION = '3.1.1'
36
+
37
+ ScrollSpy.DEFAULTS = {
38
+ offset: 10
39
+ }
40
+
41
+ ScrollSpy.prototype.refresh = function () {
42
+ var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
43
+
44
+ this.offsets = $([])
45
+ this.targets = $([])
46
+
47
+ var self = this
48
+
49
+ this.$body
50
+ .find(this.selector)
51
+ .filter(':visible')
52
+ .map(function () {
53
+ var $el = $(this)
54
+ var href = $el.data('target') || $el.attr('href')
55
+ var $href = /^#./.test(href) && $(href)
56
+
57
+ return ($href
58
+ && $href.length
59
+ && $href.is(':visible')
60
+ && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
61
+ })
62
+ .sort(function (a, b) { return a[0] - b[0] })
63
+ .each(function () {
64
+ self.offsets.push(this[0])
65
+ self.targets.push(this[1])
66
+ })
67
+ }
68
+
69
+ ScrollSpy.prototype.process = function () {
70
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
71
+ var scrollHeight = this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
72
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
73
+ var offsets = this.offsets
74
+ var targets = this.targets
75
+ var activeTarget = this.activeTarget
76
+ var i
77
+
78
+ if (scrollTop >= maxScroll) {
79
+ return activeTarget != (i = targets.last()[0]) && this.activate(i)
80
+ }
81
+
82
+ if (activeTarget && scrollTop <= offsets[0]) {
83
+ return activeTarget != (i = targets[0]) && this.activate(i)
84
+ }
85
+
86
+ for (i = offsets.length; i--;) {
87
+ activeTarget != targets[i]
88
+ && scrollTop >= offsets[i]
89
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
90
+ && this.activate( targets[i] )
91
+ }
92
+ }
93
+
94
+ ScrollSpy.prototype.activate = function (target) {
95
+ this.activeTarget = target
96
+
97
+ $(this.selector)
98
+ .parentsUntil(this.options.target, '.active')
99
+ .removeClass('active')
100
+
101
+ var selector = this.selector +
102
+ '[data-target="' + target + '"],' +
103
+ this.selector + '[href="' + target + '"]'
104
+
105
+ var active = $(selector)
106
+ .parents('li')
107
+ .addClass('active')
108
+
109
+ if (active.parent('.dropdown-menu').length) {
110
+ active = active
111
+ .closest('li.dropdown')
112
+ .addClass('active')
113
+ }
114
+
115
+ active.trigger('activate.bs.scrollspy')
116
+ }
117
+
118
+
119
+ // SCROLLSPY PLUGIN DEFINITION
120
+ // ===========================
121
+
122
+ function Plugin(option) {
123
+ return this.each(function () {
124
+ var $this = $(this)
125
+ var data = $this.data('bs.scrollspy')
126
+ var options = typeof option == 'object' && option
127
+
128
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
129
+ if (typeof option == 'string') data[option]()
130
+ })
131
+ }
132
+
133
+ var old = $.fn.scrollspy
134
+
135
+ $.fn.scrollspy = Plugin
136
+ $.fn.scrollspy.Constructor = ScrollSpy
137
+
138
+
139
+ // SCROLLSPY NO CONFLICT
140
+ // =====================
141
+
142
+ $.fn.scrollspy.noConflict = function () {
143
+ $.fn.scrollspy = old
144
+ return this
145
+ }
146
+
147
+
148
+ // SCROLLSPY DATA-API
149
+ // ==================
150
+
151
+ $(window).on('load.bs.scrollspy.data-api', function () {
152
+ $('[data-spy="scroll"]').each(function () {
153
+ var $spy = $(this)
154
+ Plugin.call($spy, $spy.data())
155
+ })
156
+ })
157
+
158
+ }(jQuery);