You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
11 KiB
JavaScript
1 line
11 KiB
JavaScript
!function(e,i,n,t){"use strict";i=void 0!==i&&i.Math==Math?i:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.modal=function(o){var a,r=e(this),s=e(i),c=e(n),l=e("body"),d=r.selector||"",u=(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 r.each(function(){var r,b,p,y,k,w,S,C,M,H=e.isPlainObject(o)?e.extend(!0,{},e.fn.modal.settings,o):e.extend({},e.fn.modal.settings),F=H.selector,D=H.className,A=H.namespace,x=H.error,T="."+A,O="module-"+A,z=e(this),q=e(H.context),E=z.find(F.close),j=this,N=z.data(O),P=!1;M={initialize:function(){M.verbose("Initializing dimmer",q),M.create.id(),M.create.dimmer(),M.refreshModals(),M.bind.events(),H.observeChanges&&M.observeChanges(),M.instantiate()},instantiate:function(){M.verbose("Storing instance of modal"),N=M,z.data(O,N)},create:{dimmer:function(){var i={debug:H.debug,variation:!H.centered&&"top aligned",dimmerName:"modals"},n=e.extend(!0,i,H.dimmerSettings);e.fn.dimmer!==t?(M.debug("Creating dimmer"),y=q.dimmer(n),H.detachable?(M.verbose("Modal is detachable, moving content into dimmer"),y.dimmer("add content",z)):M.set.undetached(),k=y.dimmer("get dimmer")):M.error(x.dimmer)},id:function(){S=(Math.random().toString(16)+"000000000").substr(2,8),w="."+S,M.verbose("Creating unique id for element",S)}},destroy:function(){M.verbose("Destroying previous modal"),z.removeData(O).off(T),s.off(w),k.off(w),E.off(T),q.dimmer("destroy")},observeChanges:function(){"MutationObserver"in i&&((C=new MutationObserver(function(e){M.debug("DOM tree modified, refreshing"),M.refresh()})).observe(j,{childList:!0,subtree:!0}),M.debug("Setting up mutation observer",C))},refresh:function(){M.remove.scrolling(),M.cacheSizes(),M.set.screenHeight(),M.set.type()},refreshModals:function(){b=z.siblings(F.modal),r=b.add(z)},attachEvents:function(i,n){var t=e(i);n=e.isFunction(M[n])?M[n]:M.toggle,t.length>0?(M.debug("Attaching modal events to element",i,n),t.off(T).on("click"+T,n)):M.error(x.notFound,i)},bind:{events:function(){M.verbose("Attaching events"),z.on("click"+T,F.close,M.event.close).on("click"+T,F.approve,M.event.approve).on("click"+T,F.deny,M.event.deny),s.on("resize"+w,M.event.resize)}},get:{id:function(){return(Math.random().toString(16)+"000000000").substr(2,8)}},event:{approve:function(){P||!1===H.onApprove.call(j,e(this))?M.verbose("Approve callback returned false cancelling hide"):(P=!0,M.hide(function(){P=!1}))},deny:function(){P||!1===H.onDeny.call(j,e(this))?M.verbose("Deny callback returned false cancelling hide"):(P=!0,M.hide(function(){P=!1}))},close:function(){M.hide()},click:function(i){if(H.closable){var t=e(i.target).closest(F.modal).length>0,o=e.contains(n.documentElement,i.target);!t&&o&&M.is.active()&&(M.debug("Dimmer clicked, hiding all modals"),M.remove.clickaway(),H.allowMultiple?M.hide():M.hideAll())}else M.verbose("Dimmer clicked but closable setting is disabled")},debounce:function(e,i){clearTimeout(M.timer),M.timer=setTimeout(e,i)},keyboard:function(e){27==e.which&&(H.closable?(M.debug("Escape key pressed hiding modal"),M.hide()):M.debug("Escape key pressed, but closable is set to false"),e.preventDefault())},resize:function(){y.dimmer("is active")&&(M.is.animating()||M.is.active())&&v(M.refresh)}},toggle:function(){M.is.active()||M.is.animating()?M.hide():M.show()},show:function(i){i=e.isFunction(i)?i:function(){},M.refreshModals(),M.set.dimmerSettings(),M.showModal(i)},hide:function(i){i=e.isFunction(i)?i:function(){},M.refreshModals(),M.hideModal(i)},showModal:function(i){i=e.isFunction(i)?i:function(){},M.is.animating()||!M.is.active()?(M.showDimmer(),M.cacheSizes(),M.set.screenHeight(),M.set.type(),M.set.clickaway(),!H.allowMultiple&&M.others.active()?M.hideOthers(M.showModal):(H.allowMultiple&&H.detachable&&z.detach().appendTo(k),H.onShow.call(j),H.transition&&e.fn.transition!==t&&z.transition("is supported")?(M.debug("Showing modal with css animations"),z.transition({debug:H.debug,animation:H.transition+" in",queue:H.queue,duration:H.duration,useFailSafe:!0,onComplete:function(){H.onVisible.apply(j),H.keyboardShortcuts&&M.add.keyboardShortcuts(),M.save.focus(),M.set.active(),H.autofocus&&M.set.autofocus(),i()}})):M.error(x.noTransition))):M.debug("Modal is already visible")},hideModal:function(i,n){i=e.isFunction(i)?i:function(){},M.debug("Hiding modal"),!1!==H.onHide.call(j,e(this))?(M.is.animating()||M.is.active())&&(H.transition&&e.fn.transition!==t&&z.transition("is supported")?(M.remove.active(),z.transition({debug:H.debug,animation:H.transition+" out",queue:H.queue,duration:H.duration,useFailSafe:!0,onStart:function(){M.others.active()||n||M.hideDimmer(),H.keyboardShortcuts&&M.remove.keyboardShortcuts()},onComplete:function(){H.onHidden.call(j),M.restore.focus(),i()}})):M.error(x.noTransition)):M.verbose("Hide callback returned false cancelling hide")},showDimmer:function(){y.dimmer("is animating")||!y.dimmer("is active")?(M.debug("Showing dimmer"),y.dimmer("show")):M.debug("Dimmer already visible")},hideDimmer:function(){y.dimmer("is animating")||y.dimmer("is active")?y.dimmer("hide",function(){M.remove.clickaway(),M.remove.screenHeight()}):M.debug("Dimmer is not visible cannot hide")},hideAll:function(i){var n=r.filter("."+D.active+", ."+D.animating);i=e.isFunction(i)?i:function(){},n.length>0&&(M.debug("Hiding all visible modals"),M.hideDimmer(),n.modal("hide modal",i))},hideOthers:function(i){var n=b.filter("."+D.active+", ."+D.animating);i=e.isFunction(i)?i:function(){},n.length>0&&(M.debug("Hiding other modals",b),n.modal("hide modal",i,!0))},others:{active:function(){return b.filter("."+D.active).length>0},animating:function(){return b.filter("."+D.animating).length>0}},add:{keyboardShortcuts:function(){M.verbose("Adding keyboard shortcuts"),c.on("keyup"+T,M.event.keyboard)}},save:{focus:function(){e(n.activeElement).closest(z).length>0||(p=e(n.activeElement).blur())}},restore:{focus:function(){p&&p.length>0&&p.focus()}},remove:{active:function(){z.removeClass(D.active)},clickaway:function(){k.off("click"+w)},bodyStyle:function(){""===l.attr("style")&&(M.verbose("Removing style attribute"),l.removeAttr("style"))},screenHeight:function(){M.debug("Removing page height"),l.css("height","")},keyboardShortcuts:function(){M.verbose("Removing keyboard shortcuts"),c.off("keyup"+T)},scrolling:function(){y.removeClass(D.scrolling),z.removeClass(D.scrolling)}},cacheSizes:function(){z.addClass(D.loading);var o=z.prop("scrollHeight"),a=z.outerHeight();M.cache!==t&&0===a||(M.cache={pageHeight:e(n).outerHeight(),height:a+H.offset,scrollHeight:o+H.offset,contextHeight:"body"==H.context?e(i).height():y.height()},M.cache.topOffset=-M.cache.height/2),z.removeClass(D.loading),M.debug("Caching modal and container sizes",M.cache)},can:{fit:function(){var e=M.cache.contextHeight,i=M.cache.contextHeight/2,n=M.cache.topOffset,t=M.cache.scrollHeight,o=M.cache.height,a=H.padding;return t>o?i+n+t+a<e:o+2*a<e}},is:{active:function(){return z.hasClass(D.active)},animating:function(){return z.transition("is supported")?z.transition("is animating"):z.is(":visible")},scrolling:function(){return y.hasClass(D.scrolling)},modernBrowser:function(){return!(i.ActiveXObject||"ActiveXObject"in i)}},set:{autofocus:function(){var e=z.find("[tabindex], :input").filter(":visible"),i=e.filter("[autofocus]"),n=i.length>0?i.first():e.first();n.length>0&&n.focus()},clickaway:function(){k.on("click"+w,M.event.click)},dimmerSettings:function(){if(e.fn.dimmer!==t){var i={debug:H.debug,dimmerName:"modals",closable:"auto",variation:!H.centered&&"top aligned",duration:{show:H.duration,hide:H.duration}},n=e.extend(!0,i,H.dimmerSettings);H.inverted?(n.variation=n.variation!==t?n.variation+" inverted":"inverted",k.addClass(D.inverted)):k.removeClass(D.inverted),H.blurring?y.addClass(D.blurring):y.removeClass(D.blurring),q.dimmer("setting",n)}else M.error(x.dimmer)},screenHeight:function(){M.can.fit()?l.css("height",""):(M.debug("Modal is taller than page content, resizing page height"),l.css("height",M.cache.height+2*H.padding))},active:function(){z.addClass(D.active)},scrolling:function(){y.addClass(D.scrolling),z.addClass(D.scrolling)},type:function(){M.can.fit()?(M.verbose("Modal fits on screen"),M.others.active()||M.others.animating()||M.remove.scrolling()):(M.verbose("Modal cannot fit on screen setting to scrolling"),M.set.scrolling())},undetached:function(){y.addClass(D.undetached)}},setting:function(i,n){if(M.debug("Changing setting",i,n),e.isPlainObject(i))e.extend(!0,H,i);else{if(n===t)return H[i];e.isPlainObject(H[i])?e.extend(!0,H[i],n):H[i]=n}},internal:function(i,n){if(e.isPlainObject(i))e.extend(!0,M,i);else{if(n===t)return M[i];M[i]=n}},debug:function(){!H.silent&&H.debug&&(H.performance?M.performance.log(arguments):(M.debug=Function.prototype.bind.call(console.info,console,H.name+":"),M.debug.apply(console,arguments)))},verbose:function(){!H.silent&&H.verbose&&H.debug&&(H.performance?M.performance.log(arguments):(M.verbose=Function.prototype.bind.call(console.info,console,H.name+":"),M.verbose.apply(console,arguments)))},error:function(){H.silent||(M.error=Function.prototype.bind.call(console.error,console,H.name+":"),M.error.apply(console,arguments))},performance:{log:function(e){var i,n;H.performance&&(n=(i=(new Date).getTime())-(u||i),u=i,m.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:j,"Execution Time":n})),clearTimeout(M.performance.timer),M.performance.timer=setTimeout(M.performance.display,500)},display:function(){var i=H.name+":",n=0;u=!1,clearTimeout(M.performance.timer),e.each(m,function(e,i){n+=i["Execution Time"]}),i+=" "+n+"ms",d&&(i+=" '"+d+"'"),(console.group!==t||console.table!==t)&&m.length>0&&(console.groupCollapsed(i),console.table?console.table(m):e.each(m,function(e,i){console.log(i.Name+": "+i["Execution Time"]+"ms")}),console.groupEnd()),m=[]}},invoke:function(i,n,o){var r,s,c,l=N;return n=n||h,o=j||o,"string"==typeof i&&l!==t&&(i=i.split(/[\. ]/),r=i.length-1,e.each(i,function(n,o){var a=n!=r?o+i[n+1].charAt(0).toUpperCase()+i[n+1].slice(1):i;if(e.isPlainObject(l[a])&&n!=r)l=l[a];else{if(l[a]!==t)return s=l[a],!1;if(!e.isPlainObject(l[o])||n==r)return l[o]!==t&&(s=l[o],!1);l=l[o]}})),e.isFunction(s)?c=s.apply(o,n):s!==t&&(c=s),e.isArray(a)?a.push(c):a!==t?a=[a,c]:c!==t&&(a=c),s}},g?(N===t&&M.initialize(),M.invoke(f)):(N!==t&&N.invoke("destroy"),M.initialize())}),a!==t?a:this},e.fn.modal.settings={name:"Modal",namespace:"modal",silent:!1,debug:!1,verbose:!1,performance:!0,observeChanges:!1,allowMultiple:!1,detachable:!0,closable:!0,autofocus:!0,inverted:!1,blurring:!1,centered:!0,dimmerSettings:{closable:!1,useCSS:!0},keyboardShortcuts:!0,context:"body",queue:!1,duration:500,offset:0,transition:"scale",padding:50,onShow:function(){},onVisible:function(){},onHide:function(){return!0},onHidden:function(){},onApprove:function(){return!0},onDeny:function(){return!0},selector:{close:"> .close",approve:".actions .positive, .actions .approve, .actions .ok",deny:".actions .negative, .actions .deny, .actions .cancel",modal:".ui.modal"},error:{dimmer:"UI Dimmer, a required component is not included in this page",method:"The method you called is not defined.",notFound:"The element you specified could not be found"},className:{active:"active",animating:"animating",blurring:"blurring",inverted:"inverted",loading:"loading",scrolling:"scrolling",undetached:"undetached"}}}(jQuery,window,document); |