vendor: 9,987 bytes, lines 1-339
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);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.