github.com/kayoticsully/syncthing@v0.8.9-0.20140724133906-c45a2fdc03f8/assets/bootstrap-3.1.1/js/modal.js (about) 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.$element = $(element) 19 this.$backdrop = 20 this.isShown = null 21 22 if (this.options.remote) { 23 this.$element 24 .find('.modal-content') 25 .load(this.options.remote, $.proxy(function () { 26 this.$element.trigger('loaded.bs.modal') 27 }, this)) 28 } 29 } 30 31 Modal.DEFAULTS = { 32 backdrop: true, 33 keyboard: true, 34 show: true 35 } 36 37 Modal.prototype.toggle = function (_relatedTarget) { 38 return this[!this.isShown ? 'show' : 'hide'](_relatedTarget) 39 } 40 41 Modal.prototype.show = function (_relatedTarget) { 42 var that = this 43 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) 44 45 this.$element.trigger(e) 46 47 if (this.isShown || e.isDefaultPrevented()) return 48 49 this.isShown = true 50 51 this.escape() 52 53 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) 54 55 this.backdrop(function () { 56 var transition = $.support.transition && that.$element.hasClass('fade') 57 58 if (!that.$element.parent().length) { 59 that.$element.appendTo(document.body) // don't move modals dom position 60 } 61 62 that.$element 63 .show() 64 .scrollTop(0) 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 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) 77 78 transition ? 79 that.$element.find('.modal-dialog') // wait for modal to slide in 80 .one($.support.transition.end, function () { 81 that.$element.focus().trigger(e) 82 }) 83 .emulateTransitionEnd(300) : 84 that.$element.focus().trigger(e) 85 }) 86 } 87 88 Modal.prototype.hide = function (e) { 89 if (e) e.preventDefault() 90 91 e = $.Event('hide.bs.modal') 92 93 this.$element.trigger(e) 94 95 if (!this.isShown || e.isDefaultPrevented()) return 96 97 this.isShown = false 98 99 this.escape() 100 101 $(document).off('focusin.bs.modal') 102 103 this.$element 104 .removeClass('in') 105 .attr('aria-hidden', true) 106 .off('click.dismiss.bs.modal') 107 108 $.support.transition && this.$element.hasClass('fade') ? 109 this.$element 110 .one($.support.transition.end, $.proxy(this.hideModal, this)) 111 .emulateTransitionEnd(300) : 112 this.hideModal() 113 } 114 115 Modal.prototype.enforceFocus = function () { 116 $(document) 117 .off('focusin.bs.modal') // guard against infinite focus loop 118 .on('focusin.bs.modal', $.proxy(function (e) { 119 if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { 120 this.$element.focus() 121 } 122 }, this)) 123 } 124 125 Modal.prototype.escape = function () { 126 if (this.isShown && this.options.keyboard) { 127 this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) { 128 e.which == 27 && this.hide() 129 }, this)) 130 } else if (!this.isShown) { 131 this.$element.off('keyup.dismiss.bs.modal') 132 } 133 } 134 135 Modal.prototype.hideModal = function () { 136 var that = this 137 this.$element.hide() 138 this.backdrop(function () { 139 that.removeBackdrop() 140 that.$element.trigger('hidden.bs.modal') 141 }) 142 } 143 144 Modal.prototype.removeBackdrop = function () { 145 this.$backdrop && this.$backdrop.remove() 146 this.$backdrop = null 147 } 148 149 Modal.prototype.backdrop = function (callback) { 150 var animate = this.$element.hasClass('fade') ? 'fade' : '' 151 152 if (this.isShown && this.options.backdrop) { 153 var doAnimate = $.support.transition && animate 154 155 this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') 156 .appendTo(document.body) 157 158 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { 159 if (e.target !== e.currentTarget) return 160 this.options.backdrop == 'static' 161 ? this.$element[0].focus.call(this.$element[0]) 162 : this.hide.call(this) 163 }, this)) 164 165 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow 166 167 this.$backdrop.addClass('in') 168 169 if (!callback) return 170 171 doAnimate ? 172 this.$backdrop 173 .one($.support.transition.end, callback) 174 .emulateTransitionEnd(150) : 175 callback() 176 177 } else if (!this.isShown && this.$backdrop) { 178 this.$backdrop.removeClass('in') 179 180 $.support.transition && this.$element.hasClass('fade') ? 181 this.$backdrop 182 .one($.support.transition.end, callback) 183 .emulateTransitionEnd(150) : 184 callback() 185 186 } else if (callback) { 187 callback() 188 } 189 } 190 191 192 // MODAL PLUGIN DEFINITION 193 // ======================= 194 195 var old = $.fn.modal 196 197 $.fn.modal = function (option, _relatedTarget) { 198 return this.each(function () { 199 var $this = $(this) 200 var data = $this.data('bs.modal') 201 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) 202 203 if (!data) $this.data('bs.modal', (data = new Modal(this, options))) 204 if (typeof option == 'string') data[option](_relatedTarget) 205 else if (options.show) data.show(_relatedTarget) 206 }) 207 } 208 209 $.fn.modal.Constructor = Modal 210 211 212 // MODAL NO CONFLICT 213 // ================= 214 215 $.fn.modal.noConflict = function () { 216 $.fn.modal = old 217 return this 218 } 219 220 221 // MODAL DATA-API 222 // ============== 223 224 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { 225 var $this = $(this) 226 var href = $this.attr('href') 227 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 228 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) 229 230 if ($this.is('a')) e.preventDefault() 231 232 $target 233 .modal(option, this) 234 .one('hide', function () { 235 $this.is(':visible') && $this.focus() 236 }) 237 }) 238 239 $(document) 240 .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') }) 241 .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') }) 242 243 }(jQuery);