corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 /* ========================================================================
2 * Bootstrap: modal.js v3.3.7
3 * http://getbootstrap.com/javascript/#modals
4 * ========================================================================
5 * Copyright 2011-2016 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.$dialog = this.$element.find('.modal-dialog')
21 this.$backdrop = null
22 this.isShown = null
23 this.originalBodyPad = null
24 this.scrollbarWidth = 0
25 this.ignoreBackdropClick = false
26  
27 if (this.options.remote) {
28 this.$element
29 .find('.modal-content')
30 .load(this.options.remote, $.proxy(function () {
31 this.$element.trigger('loaded.bs.modal')
32 }, this))
33 }
34 }
35  
36 Modal.VERSION = '3.3.7'
37  
38 Modal.TRANSITION_DURATION = 300
39 Modal.BACKDROP_TRANSITION_DURATION = 150
40  
41 Modal.DEFAULTS = {
42 backdrop: true,
43 keyboard: true,
44 show: true
45 }
46  
47 Modal.prototype.toggle = function (_relatedTarget) {
48 return this.isShown ? this.hide() : this.show(_relatedTarget)
49 }
50  
51 Modal.prototype.show = function (_relatedTarget) {
52 var that = this
53 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
54  
55 this.$element.trigger(e)
56  
57 if (this.isShown || e.isDefaultPrevented()) return
58  
59 this.isShown = true
60  
61 this.checkScrollbar()
62 this.setScrollbar()
63 this.$body.addClass('modal-open')
64  
65 this.escape()
66 this.resize()
67  
68 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
69  
70 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
71 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
72 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
73 })
74 })
75  
76 this.backdrop(function () {
77 var transition = $.support.transition && that.$element.hasClass('fade')
78  
79 if (!that.$element.parent().length) {
80 that.$element.appendTo(that.$body) // don't move modals dom position
81 }
82  
83 that.$element
84 .show()
85 .scrollTop(0)
86  
87 that.adjustDialog()
88  
89 if (transition) {
90 that.$element[0].offsetWidth // force reflow
91 }
92  
93 that.$element.addClass('in')
94  
95 that.enforceFocus()
96  
97 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
98  
99 transition ?
100 that.$dialog // wait for modal to slide in
101 .one('bsTransitionEnd', function () {
102 that.$element.trigger('focus').trigger(e)
103 })
104 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
105 that.$element.trigger('focus').trigger(e)
106 })
107 }
108  
109 Modal.prototype.hide = function (e) {
110 if (e) e.preventDefault()
111  
112 e = $.Event('hide.bs.modal')
113  
114 this.$element.trigger(e)
115  
116 if (!this.isShown || e.isDefaultPrevented()) return
117  
118 this.isShown = false
119  
120 this.escape()
121 this.resize()
122  
123 $(document).off('focusin.bs.modal')
124  
125 this.$element
126 .removeClass('in')
127 .off('click.dismiss.bs.modal')
128 .off('mouseup.dismiss.bs.modal')
129  
130 this.$dialog.off('mousedown.dismiss.bs.modal')
131  
132 $.support.transition && this.$element.hasClass('fade') ?
133 this.$element
134 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
135 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
136 this.hideModal()
137 }
138  
139 Modal.prototype.enforceFocus = function () {
140 $(document)
141 .off('focusin.bs.modal') // guard against infinite focus loop
142 .on('focusin.bs.modal', $.proxy(function (e) {
143 if (document !== e.target &&
144 this.$element[0] !== e.target &&
145 !this.$element.has(e.target).length) {
146 this.$element.trigger('focus')
147 }
148 }, this))
149 }
150  
151 Modal.prototype.escape = function () {
152 if (this.isShown && this.options.keyboard) {
153 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
154 e.which == 27 && this.hide()
155 }, this))
156 } else if (!this.isShown) {
157 this.$element.off('keydown.dismiss.bs.modal')
158 }
159 }
160  
161 Modal.prototype.resize = function () {
162 if (this.isShown) {
163 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
164 } else {
165 $(window).off('resize.bs.modal')
166 }
167 }
168  
169 Modal.prototype.hideModal = function () {
170 var that = this
171 this.$element.hide()
172 this.backdrop(function () {
173 that.$body.removeClass('modal-open')
174 that.resetAdjustments()
175 that.resetScrollbar()
176 that.$element.trigger('hidden.bs.modal')
177 })
178 }
179  
180 Modal.prototype.removeBackdrop = function () {
181 this.$backdrop && this.$backdrop.remove()
182 this.$backdrop = null
183 }
184  
185 Modal.prototype.backdrop = function (callback) {
186 var that = this
187 var animate = this.$element.hasClass('fade') ? 'fade' : ''
188  
189 if (this.isShown && this.options.backdrop) {
190 var doAnimate = $.support.transition && animate
191  
192 this.$backdrop = $(document.createElement('div'))
193 .addClass('modal-backdrop ' + animate)
194 .appendTo(this.$body)
195  
196 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
197 if (this.ignoreBackdropClick) {
198 this.ignoreBackdropClick = false
199 return
200 }
201 if (e.target !== e.currentTarget) return
202 this.options.backdrop == 'static'
203 ? this.$element[0].focus()
204 : this.hide()
205 }, this))
206  
207 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
208  
209 this.$backdrop.addClass('in')
210  
211 if (!callback) return
212  
213 doAnimate ?
214 this.$backdrop
215 .one('bsTransitionEnd', callback)
216 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
217 callback()
218  
219 } else if (!this.isShown && this.$backdrop) {
220 this.$backdrop.removeClass('in')
221  
222 var callbackRemove = function () {
223 that.removeBackdrop()
224 callback && callback()
225 }
226 $.support.transition && this.$element.hasClass('fade') ?
227 this.$backdrop
228 .one('bsTransitionEnd', callbackRemove)
229 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
230 callbackRemove()
231  
232 } else if (callback) {
233 callback()
234 }
235 }
236  
237 // these following methods are used to handle overflowing modals
238  
239 Modal.prototype.handleUpdate = function () {
240 this.adjustDialog()
241 }
242  
243 Modal.prototype.adjustDialog = function () {
244 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
245  
246 this.$element.css({
247 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
248 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
249 })
250 }
251  
252 Modal.prototype.resetAdjustments = function () {
253 this.$element.css({
254 paddingLeft: '',
255 paddingRight: ''
256 })
257 }
258  
259 Modal.prototype.checkScrollbar = function () {
260 var fullWindowWidth = window.innerWidth
261 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
262 var documentElementRect = document.documentElement.getBoundingClientRect()
263 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
264 }
265 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
266 this.scrollbarWidth = this.measureScrollbar()
267 }
268  
269 Modal.prototype.setScrollbar = function () {
270 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
271 this.originalBodyPad = document.body.style.paddingRight || ''
272 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
273 }
274  
275 Modal.prototype.resetScrollbar = function () {
276 this.$body.css('padding-right', this.originalBodyPad)
277 }
278  
279 Modal.prototype.measureScrollbar = function () { // thx walsh
280 var scrollDiv = document.createElement('div')
281 scrollDiv.className = 'modal-scrollbar-measure'
282 this.$body.append(scrollDiv)
283 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
284 this.$body[0].removeChild(scrollDiv)
285 return scrollbarWidth
286 }
287  
288  
289 // MODAL PLUGIN DEFINITION
290 // =======================
291  
292 function Plugin(option, _relatedTarget) {
293 return this.each(function () {
294 var $this = $(this)
295 var data = $this.data('bs.modal')
296 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
297  
298 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
299 if (typeof option == 'string') data[option](_relatedTarget)
300 else if (options.show) data.show(_relatedTarget)
301 })
302 }
303  
304 var old = $.fn.modal
305  
306 $.fn.modal = Plugin
307 $.fn.modal.Constructor = Modal
308  
309  
310 // MODAL NO CONFLICT
311 // =================
312  
313 $.fn.modal.noConflict = function () {
314 $.fn.modal = old
315 return this
316 }
317  
318  
319 // MODAL DATA-API
320 // ==============
321  
322 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
323 var $this = $(this)
324 var href = $this.attr('href')
325 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
326 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
327  
328 if ($this.is('a')) e.preventDefault()
329  
330 $target.one('show.bs.modal', function (showEvent) {
331 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
332 $target.one('hidden.bs.modal', function () {
333 $this.is(':visible') && $this.trigger('focus')
334 })
335 })
336 Plugin.call($target, option, this)
337 })
338  
339 }(jQuery);