You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

10 lines
10 KiB

10 years ago
10 years ago
10 years ago
9 years ago
  1. /*
  2. * # Semantic UI
  3. * https://github.com/Semantic-Org/Semantic-UI
  4. * http://www.semantic-ui.com/
  5. *
  6. * Copyright 2014 Contributors
  7. * Released under the MIT license
  8. * http://opensource.org/licenses/MIT
  9. *
  10. */
  11. !function(e,i,n,o){"use strict";e.fn.modal=function(t){var s,a=e(this),r=e(i),c=e(n),u=e("body"),l=a.selector||"",d=(new Date).getTime(),m=[],f=arguments[0],g="string"==typeof f,h=[].slice.call(arguments,1),v=i.requestAnimationFrame||i.mozRequestAnimationFrame||i.webkitRequestAnimationFrame||i.msRequestAnimationFrame||function(e){setTimeout(e,0)};return a.each(function(){var a,b,p,y,w,k,S,x,A,D=e.isPlainObject(t)?e.extend(!0,{},e.fn.modal.settings,t):e.extend({},e.fn.modal.settings),M=D.selector,C=D.className,H=D.namespace,z=D.error,F="."+H,T="module-"+H,O=e(this),q=e(D.context),E=O.find(M.close),j=this,I=O.data(T);A={initialize:function(){return A.verbose("Initializing dimmer",q),A.create.id(),e.fn.dimmer===o?void A.error(z.dimmer):(y=q.dimmer({debug:D.debug,dimmerName:"modals",closable:!1,useCSS:!0,duration:{show:D.duration,hide:D.duration}}),D.detachable&&y.dimmer("add content",O),w=y.dimmer("get dimmer"),A.refreshModals(),A.verbose("Attaching close events",E),A.bind.events(),A.observeChanges(),void A.instantiate())},instantiate:function(){A.verbose("Storing instance of modal"),I=A,O.data(T,I)},create:{id:function(){A.verbose("Creating unique id for element"),S=A.get.uniqueID(),k="."+S}},destroy:function(){A.verbose("Destroying previous modal"),O.removeData(T).off(F),r.off(k),E.off(F),q.dimmer("destroy")},observeChanges:function(){"MutationObserver"in i&&(x=new MutationObserver(function(){A.debug("DOM tree modified, refreshing"),A.refresh()}),x.observe(j,{childList:!0,subtree:!0}),A.debug("Setting up mutation observer",x))},refresh:function(){A.remove.scrolling(),A.cacheSizes(),A.set.screenHeight(),A.set.type(),A.set.position()},refreshModals:function(){b=O.siblings(M.modal),a=b.add(O)},attachEvents:function(i,n){var o=e(i);n=e.isFunction(A[n])?A[n]:A.toggle,o.size()>0?(A.debug("Attaching modal events to element",i,n),o.off(F).on("click"+F,n)):A.error(z.notFound,i)},bind:{events:function(){E.on("click"+F,A.event.close),r.on("resize"+k,A.event.resize)}},get:{uniqueID:function(){return(Math.random().toString(16)+"000000000").substr(2,8)}},event:{close:function(){A.verbose("Closing element pressed"),e(this).is(M.approve)?e.proxy(D.onApprove,j)()!==!1?A.hide():A.verbose("Approve callback returned false cancelling hide"):e(this).is(M.deny)?e.proxy(D.onDeny,j)()!==!1?A.hide():A.verbose("Deny callback returned false cancelling hide"):A.hide()},click:function(i){0===e(i.target).closest(O).size()&&(A.debug("Dimmer clicked, hiding all modals"),A.is.active()&&(A.remove.clickaway(),D.allowMultiple?A.hide():A.hideAll()))},debounce:function(e,i){clearTimeout(A.timer),A.timer=setTimeout(e,i)},keyboard:function(e){var i=e.which,n=27;i==n&&(D.closable?(A.debug("Escape key pressed hiding modal"),A.hide()):A.debug("Escape key pressed, but closable is set to false"),e.preventDefault())},resize:function(){y.dimmer("is active")&&v(A.refresh)}},toggle:function(){A.is.active()||A.is.animating()?A.hide():A.show()},show:function(i){i=e.isFunction(i)?i:function(){},A.refreshModals(),A.showModal(i)},hide:function(i){i=e.isFunction(i)?i:function(){},A.refreshModals(),A.hideModal(i)},showModal:function(i){i=e.isFunction(i)?i:function(){},A.is.animating()||!A.is.active()?(A.showDimmer(),A.cacheSizes(),A.set.position(),A.set.screenHeight(),A.set.type(),A.set.clickaway(),!D.allowMultiple&&b.filter(":visible").size()>0?(A.debug("Other modals visible, queueing show animation"),A.hideOthers(A.showModal)):(e.proxy(D.onShow,j)(),D.transition&&e.fn.transition!==o&&O.transition("is supported")?(A.debug("Showing modal with css animations"),O.transition({debug:D.debug,animation:D.transition+" in",queue:D.queue,duration:D.duration,useFailSafe:!0,onComplete:function(){e.proxy(D.onVisible,j)(),A.add.keyboardShortcuts(),A.save.focus(),A.set.active(),A.set.autofocus(),i()}})):(A.debug("Showing modal with javascript"),O.fadeIn(D.duration,D.easing,function(){e.proxy(D.onVisible,j)(),A.add.keyboardShortcuts(),A.save.focus(),A.set.active(),i()})))):A.debug("Modal is already visible")},hideModal:function(i){i=e.isFunction(i)?i:function(){},A.debug("Hiding modal"),e.pr