From b2918c9d5a85b9c97fab766b49a40c5c61acb33a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim=20D=C3=BCsterhus?= Date: Sat, 13 Apr 2013 18:54:59 +0200 Subject: [PATCH] Add WCF.System.DisableScrolling --- .../install/files/js/3rdParty/slimbox2.js | 5 +-- .../install/files/js/3rdParty/slimbox2.min.js | 2 +- wcfsetup/install/files/js/WCF.js | 43 +++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/wcfsetup/install/files/js/3rdParty/slimbox2.js b/wcfsetup/install/files/js/3rdParty/slimbox2.js index 39a925fd57..72ff5b72e9 100644 --- a/wcfsetup/install/files/js/3rdParty/slimbox2.js +++ b/wcfsetup/install/files/js/3rdParty/slimbox2.js @@ -85,8 +85,7 @@ $(overlay).css("opacity", options.overlayOpacity).fadeIn(options.overlayFadeDuration); // WoltLab modifications BEGIN - $("body").data("slimboxOverflow", $('body').css("overflow")) - $("body").css("overflow", "hidden"); + WCF.System.DisableScrolling.disable(); // WoltLab modifications END position(); @@ -288,7 +287,7 @@ $(overlay).stop().fadeOut(options.overlayFadeDuration, setup); // WoltLab modifications BEGIN - $("body").css("overflow", $("body").data("slimboxOverflow")); + WCF.System.DisableScrolling.enable(); // WoltLab modifications END } diff --git a/wcfsetup/install/files/js/3rdParty/slimbox2.min.js b/wcfsetup/install/files/js/3rdParty/slimbox2.min.js index bc0057bb92..5fd57a6e76 100644 --- a/wcfsetup/install/files/js/3rdParty/slimbox2.min.js +++ b/wcfsetup/install/files/js/3rdParty/slimbox2.min.js @@ -5,4 +5,4 @@ Modified by WoltLab GmbH to support large images. */ -(function(w){var E=w(window),u,f,F=-1,n,x,D,v,y,L,r,m=!window.XMLHttpRequest,s=[],l=document.documentElement,k={},t=new Image(),J=new Image(),H,a,g,p,I,d,G,c,A,K;w(function(){w("body").append(w([H=w('
')[0],a=w('
')[0],G=w('
')[0]]).css("display","none"));g=w('
').appendTo(a).append(p=w('
').append([I=w('').click(B)[0],d=w('').click(e)[0]])[0])[0];c=w('
').appendTo(G).append([w('').add(H).click(C)[0],A=w('
')[0],K=w('
')[0],w('
')[0]])[0]});w.slimbox=function(O,N,M){u=w.extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeEasing:"swing",initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},M);if(typeof O=="string"){O=[[O,N]];N=0}y=E.scrollTop()+(E.height()/2);L=u.initialWidth;r=u.initialHeight;w(a).css({top:Math.max(0,y-(r/2)),width:L,height:r,marginLeft:-L/2}).show();v=m||(H.currentStyle&&(H.currentStyle.position!="fixed"));if(v){H.style.position="absolute"}w(H).css("opacity",u.overlayOpacity).fadeIn(u.overlayFadeDuration);w("body").data("slimboxOverflow",w("body").css("overflow"));w("body").css("overflow","hidden");z();j(1);f=O;u.loop=u.loop&&(f.length>1);return b(N)};w.fn.slimbox=function(M,P,O){P=P||function(Q){return[Q.href,Q.title]};O=O||function(){return true};var N=this;return N.unbind("click").click(function(){var S=this,U=0,T,Q=0,R;T=w.grep(N,function(W,V){return O.call(S,W,V)});for(R=T.length;Q=0)?C():(M(N,u.nextKeys)>=0)?e():(M(N,u.previousKeys)>=0)?B():false}function B(){return b(x)}function e(){return b(D)}function b(M){if(M>=0){F=M;n=f[F][0];x=(F||(u.loop?f.length:0))-1;D=((F+1)%f.length)||(u.loop?0:-1);q();w('').appendTo(a);k=new Image();k.onload=i;k.src=n}return false}function i(){w(g).css({backgroundImage:"url("+n+")",visibility:"hidden",display:""});w(p).width(k.width);w([p,I,d]).height(k.height);w(A).html(f[F][1]||"");w(K).html((((f.length>1)&&u.counterText)||"").replace(/{x}/,F+1).replace(/{y}/,f.length));if(x>=0){t.src=f[x][0]}if(D>=0){J.src=f[D][0]}L=g.offsetWidth;r=g.offsetHeight;var P=w(window).getDimensions();var N=Math.round(P.height*0.8);var M=Math.round(P.width*0.8);if(r>N||L>M){var R=N/r;var O=M/L;if(R=0){w(I).show()}if(D>=0){w(d).show()}w(c).css("marginTop",-c.offsetHeight).animate({marginTop:0},u.captionAnimationDuration);G.style.visibility=""}function q(){k.onload=null;k.src=t.src=J.src=n;w([a,g,c]).stop(true);w([I,d,g,G]).hide()}function C(){if(F>=0){q();F=x=D=-1;w(a).hide();w(H).stop().fadeOut(u.overlayFadeDuration,j);w("body").css("overflow",w("body").data("slimboxOverflow"))}return false}})(jQuery); \ No newline at end of file +(function(w){var E=w(window),u,f,F=-1,n,x,D,v,y,L,r,m=!window.XMLHttpRequest,s=[],l=document.documentElement,k={},t=new Image(),J=new Image(),H,a,g,p,I,d,G,c,A,K;w(function(){w("body").append(w([H=w('
')[0],a=w('
')[0],G=w('
')[0]]).css("display","none"));g=w('
').appendTo(a).append(p=w('
').append([I=w('').click(B)[0],d=w('').click(e)[0]])[0])[0];c=w('
').appendTo(G).append([w('').add(H).click(C)[0],A=w('
')[0],K=w('
')[0],w('
')[0]])[0]});w.slimbox=function(O,N,M){u=w.extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeEasing:"swing",initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},M);if(typeof O=="string"){O=[[O,N]];N=0}y=E.scrollTop()+(E.height()/2);L=u.initialWidth;r=u.initialHeight;w(a).css({top:Math.max(0,y-(r/2)),width:L,height:r,marginLeft:-L/2}).show();v=m||(H.currentStyle&&(H.currentStyle.position!="fixed"));if(v){H.style.position="absolute"}w(H).css("opacity",u.overlayOpacity).fadeIn(u.overlayFadeDuration);WCF.System.DisableScrolling.disable();z();j(1);f=O;u.loop=u.loop&&(f.length>1);return b(N)};w.fn.slimbox=function(M,P,O){P=P||function(Q){return[Q.href,Q.title]};O=O||function(){return true};var N=this;return N.unbind("click").click(function(){var S=this,U=0,T,Q=0,R;T=w.grep(N,function(W,V){return O.call(S,W,V)});for(R=T.length;Q=0)?C():(M(N,u.nextKeys)>=0)?e():(M(N,u.previousKeys)>=0)?B():false}function B(){return b(x)}function e(){return b(D)}function b(M){if(M>=0){F=M;n=f[F][0];x=(F||(u.loop?f.length:0))-1;D=((F+1)%f.length)||(u.loop?0:-1);q();w('').appendTo(a);k=new Image();k.onload=i;k.src=n}return false}function i(){w(g).css({backgroundImage:"url("+n+")",visibility:"hidden",display:""});w(p).width(k.width);w([p,I,d]).height(k.height);w(A).html(f[F][1]||"");w(K).html((((f.length>1)&&u.counterText)||"").replace(/{x}/,F+1).replace(/{y}/,f.length));if(x>=0){t.src=f[x][0]}if(D>=0){J.src=f[D][0]}L=g.offsetWidth;r=g.offsetHeight;var P=w(window).getDimensions();var N=Math.round(P.height*0.8);var M=Math.round(P.width*0.8);if(r>N||L>M){var R=N/r;var O=M/L;if(R=0){w(I).show()}if(D>=0){w(d).show()}w(c).css("marginTop",-c.offsetHeight).animate({marginTop:0},u.captionAnimationDuration);G.style.visibility=""}function q(){k.onload=null;k.src=t.src=J.src=n;w([a,g,c]).stop(true);w([I,d,g,G]).hide()}function C(){if(F>=0){q();F=x=D=-1;w(a).hide();w(H).stop().fadeOut(u.overlayFadeDuration,j);WCF.System.DisableScrolling.enable()}return false}})(jQuery); \ No newline at end of file diff --git a/wcfsetup/install/files/js/WCF.js b/wcfsetup/install/files/js/WCF.js index 15671fd1a5..341bb4ba90 100755 --- a/wcfsetup/install/files/js/WCF.js +++ b/wcfsetup/install/files/js/WCF.js @@ -5368,6 +5368,49 @@ WCF.System.Confirmation = { } }; +/** + * Disables the ability to scroll the page. + */ +WCF.System.DisableScrolling = { + /** + * number of times scrolling was disabled (nested calls) + * @var integer + */ + _depth: 0, + + /** + * old overflow-value of the body element + * @var string + */ + _oldOverflow: null, + + /** + * Disables scrolling. + */ + disable: function () { + if (this._depth === 0) { + this._oldOverflow = $(document.body).css('overflow'); + $(document.body).css('overflow', 'hidden'); + } + + this._depth++; + }, + + /** + * Enables scrolling again. + * Must be called the same number of times disable() was called to enable scrolling. + */ + enable: function () { + if (this._depth === 0) return; + + this._depth--; + + if (this._depth === 0) { + $(document.body).css('overflow', this._oldOverflow); + } + } +}; + /** * Provides the 'jump to page' overlay. */ -- 2.20.1