update for version 1.0.1
This commit is contained in:
		
							
								
								
									
										470
									
								
								lb-faveo/plugins/slimScroll/jquery.slimscroll.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										470
									
								
								lb-faveo/plugins/slimScroll/jquery.slimscroll.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,470 @@ | ||||
| /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) | ||||
|  * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. | ||||
|  * | ||||
|  * Version: 1.3.3 | ||||
|  * | ||||
|  */ | ||||
| (function($) { | ||||
|  | ||||
|   $.fn.extend({ | ||||
|     slimScroll: function(options) { | ||||
|  | ||||
|       var defaults = { | ||||
|  | ||||
|         // width in pixels of the visible scroll area | ||||
|         width : 'auto', | ||||
|  | ||||
|         // height in pixels of the visible scroll area | ||||
|         height : '250px', | ||||
|  | ||||
|         // width in pixels of the scrollbar and rail | ||||
|         size : '7px', | ||||
|  | ||||
|         // scrollbar color, accepts any hex/color value | ||||
|         color: '#000', | ||||
|  | ||||
|         // scrollbar position - left/right | ||||
|         position : 'right', | ||||
|  | ||||
|         // distance in pixels between the side edge and the scrollbar | ||||
|         distance : '1px', | ||||
|  | ||||
|         // default scroll position on load - top / bottom / $('selector') | ||||
|         start : 'top', | ||||
|  | ||||
|         // sets scrollbar opacity | ||||
|         opacity : .4, | ||||
|  | ||||
|         // enables always-on mode for the scrollbar | ||||
|         alwaysVisible : false, | ||||
|  | ||||
|         // check if we should hide the scrollbar when user is hovering over | ||||
|         disableFadeOut : false, | ||||
|  | ||||
|         // sets visibility of the rail | ||||
|         railVisible : false, | ||||
|  | ||||
|         // sets rail color | ||||
|         railColor : '#333', | ||||
|  | ||||
|         // sets rail opacity | ||||
|         railOpacity : .2, | ||||
|  | ||||
|         // whether  we should use jQuery UI Draggable to enable bar dragging | ||||
|         railDraggable : true, | ||||
|  | ||||
|         // defautlt CSS class of the slimscroll rail | ||||
|         railClass : 'slimScrollRail', | ||||
|  | ||||
|         // defautlt CSS class of the slimscroll bar | ||||
|         barClass : 'slimScrollBar', | ||||
|  | ||||
|         // defautlt CSS class of the slimscroll wrapper | ||||
|         wrapperClass : 'slimScrollDiv', | ||||
|  | ||||
|         // check if mousewheel should scroll the window if we reach top/bottom | ||||
|         allowPageScroll : false, | ||||
|  | ||||
|         // scroll amount applied to each mouse wheel step | ||||
|         wheelStep : 20, | ||||
|  | ||||
|         // scroll amount applied when user is using gestures | ||||
|         touchScrollStep : 200, | ||||
|  | ||||
|         // sets border radius | ||||
|         borderRadius: '7px', | ||||
|  | ||||
|         // sets border radius of the rail | ||||
|         railBorderRadius : '7px' | ||||
|       }; | ||||
|  | ||||
|       var o = $.extend(defaults, options); | ||||
|  | ||||
|       // do it for every element that matches selector | ||||
|       this.each(function(){ | ||||
|  | ||||
|       var isOverPanel, isOverBar, isDragg, queueHide, touchDif, | ||||
|         barHeight, percentScroll, lastScroll, | ||||
|         divS = '<div></div>', | ||||
|         minBarHeight = 30, | ||||
|         releaseScroll = false; | ||||
|  | ||||
|         // used in event handlers and for better minification | ||||
|         var me = $(this); | ||||
|  | ||||
|         // ensure we are not binding it again | ||||
|         if (me.parent().hasClass(o.wrapperClass)) | ||||
|         { | ||||
|             // start from last bar position | ||||
|             var offset = me.scrollTop(); | ||||
|  | ||||
|             // find bar and rail | ||||
|             bar = me.parent().find('.' + o.barClass); | ||||
|             rail = me.parent().find('.' + o.railClass); | ||||
|  | ||||
|             getBarHeight(); | ||||
|  | ||||
|             // check if we should scroll existing instance | ||||
|             if ($.isPlainObject(options)) | ||||
|             { | ||||
|               // Pass height: auto to an existing slimscroll object to force a resize after contents have changed | ||||
|               if ( 'height' in options && options.height == 'auto' ) { | ||||
|                 me.parent().css('height', 'auto'); | ||||
|                 me.css('height', 'auto'); | ||||
|                 var height = me.parent().parent().height(); | ||||
|                 me.parent().css('height', height); | ||||
|                 me.css('height', height); | ||||
|               } | ||||
|  | ||||
|               if ('scrollTo' in options) | ||||
|               { | ||||
|                 // jump to a static point | ||||
|                 offset = parseInt(o.scrollTo); | ||||
|               } | ||||
|               else if ('scrollBy' in options) | ||||
|               { | ||||
|                 // jump by value pixels | ||||
|                 offset += parseInt(o.scrollBy); | ||||
|               } | ||||
|               else if ('destroy' in options) | ||||
|               { | ||||
|                 // remove slimscroll elements | ||||
|                 bar.remove(); | ||||
|                 rail.remove(); | ||||
|                 me.unwrap(); | ||||
|                 return; | ||||
|               } | ||||
|  | ||||
|               // scroll content by the given offset | ||||
|               scrollContent(offset, false, true); | ||||
|             } | ||||
|  | ||||
|             return; | ||||
|         } | ||||
|         else if ($.isPlainObject(options)) | ||||
|         { | ||||
|             if ('destroy' in options) | ||||
|             { | ||||
|             	return; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // optionally set height to the parent's height | ||||
|         o.height = (o.height == 'auto') ? me.parent().height() : o.height; | ||||
|  | ||||
|         // wrap content | ||||
|         var wrapper = $(divS) | ||||
|           .addClass(o.wrapperClass) | ||||
|           .css({ | ||||
|             position: 'relative', | ||||
|             overflow: 'hidden', | ||||
|             width: o.width, | ||||
|             height: o.height | ||||
|           }); | ||||
|  | ||||
|         // update style for the div | ||||
|         me.css({ | ||||
|           overflow: 'hidden', | ||||
|           width: o.width, | ||||
|           height: o.height | ||||
|         }); | ||||
|  | ||||
|         // create scrollbar rail | ||||
|         var rail = $(divS) | ||||
|           .addClass(o.railClass) | ||||
|           .css({ | ||||
|             width: o.size, | ||||
|             height: '100%', | ||||
|             position: 'absolute', | ||||
|             top: 0, | ||||
|             display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none', | ||||
|             'border-radius': o.railBorderRadius, | ||||
|             background: o.railColor, | ||||
|             opacity: o.railOpacity, | ||||
|             zIndex: 90 | ||||
|           }); | ||||
|  | ||||
|         // create scrollbar | ||||
|         var bar = $(divS) | ||||
|           .addClass(o.barClass) | ||||
|           .css({ | ||||
|             background: o.color, | ||||
|             width: o.size, | ||||
|             position: 'absolute', | ||||
|             top: 0, | ||||
|             opacity: o.opacity, | ||||
|             display: o.alwaysVisible ? 'block' : 'none', | ||||
|             'border-radius' : o.borderRadius, | ||||
|             BorderRadius: o.borderRadius, | ||||
|             MozBorderRadius: o.borderRadius, | ||||
|             WebkitBorderRadius: o.borderRadius, | ||||
|             zIndex: 99 | ||||
|           }); | ||||
|  | ||||
|         // set position | ||||
|         var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance }; | ||||
|         rail.css(posCss); | ||||
|         bar.css(posCss); | ||||
|  | ||||
|         // wrap it | ||||
|         me.wrap(wrapper); | ||||
|  | ||||
|         // append to parent div | ||||
|         me.parent().append(bar); | ||||
|         me.parent().append(rail); | ||||
|  | ||||
|         // make it draggable and no longer dependent on the jqueryUI | ||||
|         if (o.railDraggable){ | ||||
|           bar.bind("mousedown", function(e) { | ||||
|             var $doc = $(document); | ||||
|             isDragg = true; | ||||
|             t = parseFloat(bar.css('top')); | ||||
|             pageY = e.pageY; | ||||
|  | ||||
|             $doc.bind("mousemove.slimscroll", function(e){ | ||||
|               currTop = t + e.pageY - pageY; | ||||
|               bar.css('top', currTop); | ||||
|               scrollContent(0, bar.position().top, false);// scroll content | ||||
|             }); | ||||
|  | ||||
|             $doc.bind("mouseup.slimscroll", function(e) { | ||||
|               isDragg = false;hideBar(); | ||||
|               $doc.unbind('.slimscroll'); | ||||
|             }); | ||||
|             return false; | ||||
|           }).bind("selectstart.slimscroll", function(e){ | ||||
|             e.stopPropagation(); | ||||
|             e.preventDefault(); | ||||
|             return false; | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         // on rail over | ||||
|         rail.hover(function(){ | ||||
|           showBar(); | ||||
|         }, function(){ | ||||
|           hideBar(); | ||||
|         }); | ||||
|  | ||||
|         // on bar over | ||||
|         bar.hover(function(){ | ||||
|           isOverBar = true; | ||||
|         }, function(){ | ||||
|           isOverBar = false; | ||||
|         }); | ||||
|  | ||||
|         // show on parent mouseover | ||||
|         me.hover(function(){ | ||||
|           isOverPanel = true; | ||||
|           showBar(); | ||||
|           hideBar(); | ||||
|         }, function(){ | ||||
|           isOverPanel = false; | ||||
|           hideBar(); | ||||
|         }); | ||||
|  | ||||
|         // support for mobile | ||||
|         me.bind('touchstart', function(e,b){ | ||||
|           if (e.originalEvent.touches.length) | ||||
|           { | ||||
|             // record where touch started | ||||
|             touchDif = e.originalEvent.touches[0].pageY; | ||||
|           } | ||||
|         }); | ||||
|  | ||||
|         me.bind('touchmove', function(e){ | ||||
|           // prevent scrolling the page if necessary | ||||
|           if(!releaseScroll) | ||||
|           { | ||||
|   		      e.originalEvent.preventDefault(); | ||||
| 		      } | ||||
|           if (e.originalEvent.touches.length) | ||||
|           { | ||||
|             // see how far user swiped | ||||
|             var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep; | ||||
|             // scroll content | ||||
|             scrollContent(diff, true); | ||||
|             touchDif = e.originalEvent.touches[0].pageY; | ||||
|           } | ||||
|         }); | ||||
|  | ||||
|         // set up initial height | ||||
|         getBarHeight(); | ||||
|  | ||||
|         // check start position | ||||
|         if (o.start === 'bottom') | ||||
|         { | ||||
|           // scroll content to bottom | ||||
|           bar.css({ top: me.outerHeight() - bar.outerHeight() }); | ||||
|           scrollContent(0, true); | ||||
|         } | ||||
|         else if (o.start !== 'top') | ||||
|         { | ||||
|           // assume jQuery selector | ||||
|           scrollContent($(o.start).position().top, null, true); | ||||
|  | ||||
|           // make sure bar stays hidden | ||||
|           if (!o.alwaysVisible) { bar.hide(); } | ||||
|         } | ||||
|  | ||||
|         // attach scroll events | ||||
|         attachWheel(); | ||||
|  | ||||
|         function _onWheel(e) | ||||
|         { | ||||
|           // use mouse wheel only when mouse is over | ||||
|           if (!isOverPanel) { return; } | ||||
|  | ||||
|           var e = e || window.event; | ||||
|  | ||||
|           var delta = 0; | ||||
|           if (e.wheelDelta) { delta = -e.wheelDelta/120; } | ||||
|           if (e.detail) { delta = e.detail / 3; } | ||||
|  | ||||
|           var target = e.target || e.srcTarget || e.srcElement; | ||||
|           if ($(target).closest('.' + o.wrapperClass).is(me.parent())) { | ||||
|             // scroll content | ||||
|             scrollContent(delta, true); | ||||
|           } | ||||
|  | ||||
|           // stop window scroll | ||||
|           if (e.preventDefault && !releaseScroll) { e.preventDefault(); } | ||||
|           if (!releaseScroll) { e.returnValue = false; } | ||||
|         } | ||||
|  | ||||
|         function scrollContent(y, isWheel, isJump) | ||||
|         { | ||||
|           releaseScroll = false; | ||||
|           var delta = y; | ||||
|           var maxTop = me.outerHeight() - bar.outerHeight(); | ||||
|  | ||||
|           if (isWheel) | ||||
|           { | ||||
|             // move bar with mouse wheel | ||||
|             delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight(); | ||||
|  | ||||
|             // move bar, make sure it doesn't go out | ||||
|             delta = Math.min(Math.max(delta, 0), maxTop); | ||||
|  | ||||
|             // if scrolling down, make sure a fractional change to the | ||||
|             // scroll position isn't rounded away when the scrollbar's CSS is set | ||||
|             // this flooring of delta would happened automatically when | ||||
|             // bar.css is set below, but we floor here for clarity | ||||
|             delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta); | ||||
|  | ||||
|             // scroll the scrollbar | ||||
|             bar.css({ top: delta + 'px' }); | ||||
|           } | ||||
|  | ||||
|           // calculate actual scroll amount | ||||
|           percentScroll = parseInt(bar.css('top')) / (me.outerHeight() - bar.outerHeight()); | ||||
|           delta = percentScroll * (me[0].scrollHeight - me.outerHeight()); | ||||
|  | ||||
|           if (isJump) | ||||
|           { | ||||
|             delta = y; | ||||
|             var offsetTop = delta / me[0].scrollHeight * me.outerHeight(); | ||||
|             offsetTop = Math.min(Math.max(offsetTop, 0), maxTop); | ||||
|             bar.css({ top: offsetTop + 'px' }); | ||||
|           } | ||||
|  | ||||
|           // scroll content | ||||
|           me.scrollTop(delta); | ||||
|  | ||||
|           // fire scrolling event | ||||
|           me.trigger('slimscrolling', ~~delta); | ||||
|  | ||||
|           // ensure bar is visible | ||||
|           showBar(); | ||||
|  | ||||
|           // trigger hide when scroll is stopped | ||||
|           hideBar(); | ||||
|         } | ||||
|  | ||||
|         function attachWheel() | ||||
|         { | ||||
|           if (window.addEventListener) | ||||
|           { | ||||
|             this.addEventListener('DOMMouseScroll', _onWheel, false ); | ||||
|             this.addEventListener('mousewheel', _onWheel, false ); | ||||
|           } | ||||
|           else | ||||
|           { | ||||
|             document.attachEvent("onmousewheel", _onWheel) | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         function getBarHeight() | ||||
|         { | ||||
|           // calculate scrollbar height and make sure it is not too small | ||||
|           barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight); | ||||
|           bar.css({ height: barHeight + 'px' }); | ||||
|  | ||||
|           // hide scrollbar if content is not long enough | ||||
|           var display = barHeight == me.outerHeight() ? 'none' : 'block'; | ||||
|           bar.css({ display: display }); | ||||
|         } | ||||
|  | ||||
|         function showBar() | ||||
|         { | ||||
|           // recalculate bar height | ||||
|           getBarHeight(); | ||||
|           clearTimeout(queueHide); | ||||
|  | ||||
|           // when bar reached top or bottom | ||||
|           if (percentScroll == ~~percentScroll) | ||||
|           { | ||||
|             //release wheel | ||||
|             releaseScroll = o.allowPageScroll; | ||||
|  | ||||
|             // publish approporiate event | ||||
|             if (lastScroll != percentScroll) | ||||
|             { | ||||
|                 var msg = (~~percentScroll == 0) ? 'top' : 'bottom'; | ||||
|                 me.trigger('slimscroll', msg); | ||||
|             } | ||||
|           } | ||||
|           else | ||||
|           { | ||||
|             releaseScroll = false; | ||||
|           } | ||||
|           lastScroll = percentScroll; | ||||
|  | ||||
|           // show only when required | ||||
|           if(barHeight >= me.outerHeight()) { | ||||
|             //allow window scroll | ||||
|             releaseScroll = true; | ||||
|             return; | ||||
|           } | ||||
|           bar.stop(true,true).fadeIn('fast'); | ||||
|           if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); } | ||||
|         } | ||||
|  | ||||
|         function hideBar() | ||||
|         { | ||||
|           // only hide when options allow it | ||||
|           if (!o.alwaysVisible) | ||||
|           { | ||||
|             queueHide = setTimeout(function(){ | ||||
|               if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg) | ||||
|               { | ||||
|                 bar.fadeOut('slow'); | ||||
|                 rail.fadeOut('slow'); | ||||
|               } | ||||
|             }, 1000); | ||||
|           } | ||||
|         } | ||||
|  | ||||
|       }); | ||||
|  | ||||
|       // maintain chainability | ||||
|       return this; | ||||
|     } | ||||
|   }); | ||||
|  | ||||
|   $.fn.extend({ | ||||
|     slimscroll: $.fn.slimScroll | ||||
|   }); | ||||
|  | ||||
| })(jQuery); | ||||
							
								
								
									
										16
									
								
								lb-faveo/plugins/slimScroll/jquery.slimscroll.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								lb-faveo/plugins/slimScroll/jquery.slimscroll.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) | ||||
|  * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. | ||||
|  * | ||||
|  * Version: 1.3.3 | ||||
|  * | ||||
|  */ | ||||
| (function(e){e.fn.extend({slimScroll:function(g){var a=e.extend({width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:.2,railDraggable:!0,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"},g);this.each(function(){function u(d){if(r){d=d||window.event; | ||||
| var c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest("."+a.wrapperClass).is(b.parent())&&m(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function m(d,e,g){k=!1;var f=d,h=b.outerHeight()-c.outerHeight();e&&(f=parseInt(c.css("top"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),f=Math.min(Math.max(f,0),h),f=0<d?Math.ceil(f):Math.floor(f),c.css({top:f+"px"}));l=parseInt(c.css("top"))/(b.outerHeight()-c.outerHeight()); | ||||
| f=l*(b[0].scrollHeight-b.outerHeight());g&&(f=d,d=f/b[0].scrollHeight*b.outerHeight(),d=Math.min(Math.max(d,0),h),c.css({top:d+"px"}));b.scrollTop(f);b.trigger("slimscrolling",~~f);v();p()}function C(){window.addEventListener?(this.addEventListener("DOMMouseScroll",u,!1),this.addEventListener("mousewheel",u,!1)):document.attachEvent("onmousewheel",u)}function w(){s=Math.max(b.outerHeight()/b[0].scrollHeight*b.outerHeight(),30);c.css({height:s+"px"});var a=s==b.outerHeight()?"none":"block";c.css({display:a})} | ||||
| function v(){w();clearTimeout(A);l==~~l?(k=a.allowPageScroll,B!=l&&b.trigger("slimscroll",0==~~l?"top":"bottom")):k=!1;B=l;s>=b.outerHeight()?k=!0:(c.stop(!0,!0).fadeIn("fast"),a.railVisible&&h.stop(!0,!0).fadeIn("fast"))}function p(){a.alwaysVisible||(A=setTimeout(function(){a.disableFadeOut&&r||x||y||(c.fadeOut("slow"),h.fadeOut("slow"))},1E3))}var r,x,y,A,z,s,l,B,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var n=b.scrollTop(),c=b.parent().find("."+a.barClass),h=b.parent().find("."+a.railClass); | ||||
| w();if(e.isPlainObject(g)){if("height"in g&&"auto"==g.height){b.parent().css("height","auto");b.css("height","auto");var q=b.parent().parent().height();b.parent().css("height",q);b.css("height",q)}if("scrollTo"in g)n=parseInt(a.scrollTo);else if("scrollBy"in g)n+=parseInt(a.scrollBy);else if("destroy"in g){c.remove();h.remove();b.unwrap();return}m(n,!1,!0)}}else if(!(e.isPlainObject(g)&&"destroy"in g)){a.height="auto"==a.height?b.parent().height():a.height;n=e("<div></div>").addClass(a.wrapperClass).css({position:"relative", | ||||
| overflow:"hidden",width:a.width,height:a.height});b.css({overflow:"hidden",width:a.width,height:a.height});var h=e("<div></div>").addClass(a.railClass).css({width:a.size,height:"100%",position:"absolute",top:0,display:a.alwaysVisible&&a.railVisible?"block":"none","border-radius":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e("<div></div>").addClass(a.barClass).css({background:a.color,width:a.size,position:"absolute",top:0,opacity:a.opacity,display:a.alwaysVisible? | ||||
| "block":"none","border-radius":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,WebkitBorderRadius:a.borderRadius,zIndex:99}),q="right"==a.position?{right:a.distance}:{left:a.distance};h.css(q);c.css(q);b.wrap(n);b.parent().append(c);b.parent().append(h);a.railDraggable&&c.bind("mousedown",function(a){var b=e(document);y=!0;t=parseFloat(c.css("top"));pageY=a.pageY;b.bind("mousemove.slimscroll",function(a){currTop=t+a.pageY-pageY;c.css("top",currTop);m(0,c.position().top,!1)}); | ||||
| b.bind("mouseup.slimscroll",function(a){y=!1;p();b.unbind(".slimscroll")});return!1}).bind("selectstart.slimscroll",function(a){a.stopPropagation();a.preventDefault();return!1});h.hover(function(){v()},function(){p()});c.hover(function(){x=!0},function(){x=!1});b.hover(function(){r=!0;v();p()},function(){r=!1;p()});b.bind("touchstart",function(a,b){a.originalEvent.touches.length&&(z=a.originalEvent.touches[0].pageY)});b.bind("touchmove",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&& | ||||
| (m((z-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),z=b.originalEvent.touches[0].pageY)});w();"bottom"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),m(0,!0)):"top"!==a.start&&(m(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());C()}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery); | ||||
		Reference in New Issue
	
	Block a user
	 sujitprasad
					sujitprasad