shell bypass 403
/* * A jQuery extension to provide scrollbars to a container * * @author Andrew Lowndes * @date 08/12/10 * * @requires jquery.js * @requires jquery.event.drag.js * @requires jquery.resize.js * @requires jquery.mousehold.js * @requires jquery.mousewheel.js */ (function($) { $.fn.scrollbars = function() { return $(this).each(function() { //transform the selected dom elements var $scrollable = $(this); $scrollable.addClass("scrollable"); var $scrollcontent = $('<div class="scrollcontent"></div>'); var $scrollwrap = $('<div class="scrollwrap"></div>'); $scrollable.wrapInner($scrollwrap).wrapInner($scrollcontent); //as wrapinner actually dereferences the jquery object, we need to reference here $scrollcontent = $scrollable.find(".scrollcontent"); $scrollwrap = $scrollable.find(".scrollwrap"); var $vscroller = $('<div class="scroller vscroller"></div>'); var $vscrollblock = $('<div class="scrollblock"></div>'); var $vscrollarea = $('<div class="scrollarea"></div>'); var $scrolltop = $('<div class="scrollbtn scrolltop">▲</div>'); var $scrolldown = $('<div class="scrollbtn scrolldown">▼</div>'); $vscrollarea.append($vscrollblock); $vscroller.append($vscrollarea).append($scrolltop).append($scrolldown); var $hscroller = $('<div class="scroller hscroller"></div>'); var $hscrollblock = $('<div class="scrollblock"></div>'); var $hscrollarea = $('<div class="scrollarea"></div>'); var $scrollleft = $('<div class="scrollbtn scrollleft">◄</div>'); var $scrollright = $('<div class="scrollbtn scrollright">►</div>'); $hscrollarea.append($hscrollblock); $hscroller.append($hscrollarea).append($scrollleft).append($scrollright); var $filler = $('<div class="filler"></div>'); $scrollable.append($vscroller).append($filler).append($hscroller); //START updateScrollers(); //EVENTS $scrollcontent.add($scrollwrap).resize(function() { updateScrollers(); }); //allow the directional buttons to scroll the content $scrolltop.mousehold(100, function() { $scrollcontent.scrollTop($scrollcontent.scrollTop() - 40); updateScrollers(); }); $scrolldown.mousehold(100, function() { $scrollcontent.scrollTop($scrollcontent.scrollTop() + 40); updateScrollers(); }); $scrollleft.mousehold(100, function() { $scrollcontent.scrollLeft($scrollcontent.scrollLeft() - 40); updateScrollers(); }); $scrollright.mousehold(100, function() { $scrollcontent.scrollLeft($scrollcontent.scrollLeft() + 40); updateScrollers(); }); //allow the block to be dragged $vscrollblock.drag("start", function(e, dd) { dd.origTop = $(this).position().top; }).drag(function(e, dd) { var maxTop = $(this).parent().innerHeight() - $(this).outerHeight(); var newTop = Math.max(0, Math.min(maxTop, dd.origTop + dd.deltaY)); $(this).css({top: newTop}); $scrollcontent.scrollTop((newTop / maxTop) * ($scrollwrap.outerHeight() - $scrollcontent.innerHeight())); }); $hscrollblock.drag("start", function(e, dd) { dd.origLeft = $(this).position().left; }).drag(function(e, dd) { var maxLeft = $(this).parent().innerWidth() - $(this).outerWidth(); var newLeft = Math.max(0, Math.min(maxLeft, dd.origLeft + dd.deltaX)); $(this).css({left: newLeft}); $scrollcontent.scrollLeft((newLeft / maxLeft) * ($scrollwrap.outerWidth() - $scrollcontent.innerWidth())); }); //allow the mouse wheel to scroll the content $scrollable.mousewheel(function(e, delta) { $scrollcontent.scrollTop($scrollcontent.scrollTop() - (delta*30)); updateScrollers(); return false; }); //allow pressing the scrollbox to move the scroll bar $vscrollarea.mousedown(function(e) { var maxTop = $(this).innerHeight() - $vscrollblock.outerHeight(); var newTop = Math.max(0, Math.min(maxTop, e.pageY - $(this).offset().top - ($vscrollblock.outerHeight()/2.0))); $vscrollblock.css({top: newTop}); $scrollcontent.scrollTop((newTop / maxTop) * ($scrollwrap.outerHeight() - $scrollcontent.innerHeight())); }); $hscrollarea.mousedown(function(e) { var maxLeft = $(this).innerWidth() - $hscrollblock.outerWidth(); var newLeft = Math.max(0, Math.min(maxLeft, e.pageX - $(this).offset().left - ($hscrollblock.outerWidth()/2.0))); $hscrollblock.css({left: newLeft}); $scrollcontent.scrollLeft((newLeft / maxLeft) * ($scrollwrap.outerWidth() - $scrollcontent.innerWidth())); }); $scrollcontent.scroll(function() { updateScrollers(); }); function updateScrollers() { //determine the size and position of the scrollbars based on the scroll position and view size/scroll size var amountHeight = $scrollcontent.innerHeight() / $scrollwrap.outerHeight(); if (amountHeight >= 1) { //if we do not need some scrollbars, then we simply set the class of the scrollable element and let css remove them $scrollable.addClass("no_scroll_v"); } else { $scrollable.removeClass("no_scroll_v"); //otherwise, do the maths var vscrollHeight = amountHeight * $vscrollarea.innerHeight(); var availableHeight = $scrollwrap.outerHeight() - $scrollcontent.innerHeight(); var amountTop = $scrollcontent.scrollTop() / availableHeight; var vscrollTop = amountTop * ($vscrollarea.innerHeight()-vscrollHeight); //and assign the new values $vscrollblock.css({top: vscrollTop, height: vscrollHeight}); } //same but with the horizontal bar var amountWidth = $scrollcontent.innerWidth() / $scrollwrap.outerWidth(); if (amountWidth >= 1) { //if we do not need some scrollbars, then we simply set the class of the scrollable element and let css remove them $scrollable.addClass("no_scroll_h"); } else { $scrollable.removeClass("no_scroll_h"); //otherwise, do the maths var hscrollWidth = amountWidth * $hscrollarea.innerWidth(); var availableWidth = $scrollwrap.outerWidth() - $scrollcontent.innerWidth(); var amountLeft = $scrollcontent.scrollLeft() / availableWidth; var hscrollLeft = amountLeft * ($hscrollarea.innerWidth()-hscrollWidth); //and assign the new values $hscrollblock.css({left: hscrollLeft, width: hscrollWidth}); } }; }); }; })(jQuery);