diff --git a/modules/backend/assets/js/october-min.js b/modules/backend/assets/js/october-min.js index bdf584bda..e76ebee2d 100644 --- a/modules/backend/assets/js/october-min.js +++ b/modules/backend/assets/js/october-min.js @@ -288,23 +288,25 @@ if(!data)$this.data('oc.triggerOn',(data=new TriggerOn(this,options)))})} $.fn.triggerOn.Constructor=TriggerOn $.fn.triggerOn.noConflict=function(){$.fn.triggerOn=old return this} -$(document).render(function(){$('[data-trigger]').triggerOn()})}(window.jQuery);+function($){"use strict";var DragScroll=function(element,options){this.options=$.extend({},DragScroll.DEFAULTS,options) +$(document).render(function(){$('[data-trigger]').triggerOn()})}(window.jQuery);+function($){"use strict";var Base=$.oc.foundation.base,BaseProto=Base.prototype +var DragScroll=function(element,options){this.options=$.extend({},DragScroll.DEFAULTS,options) var $el=$(element),el=$el.get(0),dragStart=0,startOffset=0,self=this,dragging=false,eventElementName=this.options.vertical?'pageY':'pageX';this.el=$el this.scrollClassContainer=this.options.scrollClassContainer?$(this.options.scrollClassContainer):$el +Base.call(this) if(this.options.scrollMarkerContainer) $(this.options.scrollMarkerContainer).append($('')) $el.mousewheel(function(event){if(!self.options.allowScroll) return;var offset=self.options.vertical?((event.deltaFactor*event.deltaY)*-1):(event.deltaFactor*event.deltaX) return!scrollWheel(offset)}) -$el.on('mousedown',function(event){startDrag(event) +$el.on('mousedown.dragScroll',function(event){startDrag(event) return false}) -$el.on('touchstart',function(event){var touchEvent=event.originalEvent;if(touchEvent.touches.length==1){startDrag(touchEvent.touches[0]) +$el.on('touchstart.dragScroll',function(event){var touchEvent=event.originalEvent;if(touchEvent.touches.length==1){startDrag(touchEvent.touches[0]) event.stopPropagation()}}) -$el.on('click',function(){if($(document.body).hasClass('drag')) +$el.on('click.dragScroll',function(){if($(document.body).hasClass('drag')) return false}) -$(document).on('ready',$.proxy(this.fixScrollClasses,this)) -$(window).on('resize',$.proxy(this.fixScrollClasses,this)) +$(document).on('ready',this.proxy(this.fixScrollClasses)) +$(window).on('resize',this.proxy(this.fixScrollClasses)) function startDrag(event){dragStart=event[eventElementName] startOffset=self.options.vertical?$el.scrollTop():$el.scrollLeft() if(Modernizr.touch){$(window).on('touchmove.dragScroll',function(event){var touchEvent=event.originalEvent @@ -342,6 +344,8 @@ if(scrolled){if(self.wheelUpdateTimer!==undefined&&self.wheelUpdateTimer!==false window.clearInterval(self.wheelUpdateTimer);self.wheelUpdateTimer=window.setTimeout(function(){self.wheelUpdateTimer=false;self.fixScrollClasses()},100);} return scrolled} this.fixScrollClasses();} +DragScroll.prototype=Object.create(BaseProto) +DragScroll.prototype.constructor=DragScroll DragScroll.DEFAULTS={vertical:false,allowScroll:true,scrollClassContainer:false,scrollMarkerContainer:false,dragClass:'drag',start:function(){},drag:function(){},stop:function(){}} DragScroll.prototype.fixScrollClasses=function(){this.scrollClassContainer.toggleClass('scroll-before',!this.isStart()) this.scrollClassContainer.toggleClass('scroll-after',!this.isEnd()) @@ -388,6 +392,12 @@ if(offset>0){this.el.animate({'scrollTop':$el.get(0).offsetTop+$el.height()-this animated=true}}} if(!animated&&callback!==undefined) callback()} +DragScroll.prototype.dispose=function(){$(document).off('ready',this.proxy(this.fixScrollClasses)) +$(window).off('resize',this.proxy(this.fixScrollClasses)) +this.el.off('.dragScroll') +this.scrollClassContainer=null +this.el.removeData('oc.dragScroll') +BaseProto.dispose.call(this)} var old=$.fn.dragScroll $.fn.dragScroll=function(option){var args=arguments;return this.each(function(){var $this=$(this) var data=$this.data('oc.dragScroll') @@ -462,12 +472,17 @@ $el.dragScroll({scrollClassContainer:scrollClassContainer}) $('.form-control.growable',$toolbar).on('focus',function(){update()}) $('.form-control.growable',$toolbar).on('blur',function(){update()}) function update(){$(window).trigger('resize')}} +Toolbar.prototype.dispose=function(){this.$el.dragScroll('dispose') +this.$el.removeData('oc.toolbar') +this.$el=null} Toolbar.DEFAULTS={} var old=$.fn.toolbar -$.fn.toolbar=function(option){return this.each(function(){var $this=$(this) +$.fn.toolbar=function(option){var args=Array.prototype.slice.call(arguments,1) +return this.each(function(){var $this=$(this) var data=$this.data('oc.toolbar') var options=$.extend({},Toolbar.DEFAULTS,$this.data(),typeof option=='object'&&option) -if(!data)$this.data('oc.toolbar',(data=new Toolbar(this,options)))})} +if(!data)$this.data('oc.toolbar',(data=new Toolbar(this,options))) +if(typeof option=='string')data[option].apply(data,args)})} $.fn.toolbar.Constructor=Toolbar $.fn.toolbar.noConflict=function(){$.fn.toolbar=old return this} diff --git a/modules/backend/assets/js/october.dragscroll.js b/modules/backend/assets/js/october.dragscroll.js index c2ccef89e..28f1c8321 100644 --- a/modules/backend/assets/js/october.dragscroll.js +++ b/modules/backend/assets/js/october.dragscroll.js @@ -30,6 +30,9 @@ */ +function ($) { "use strict"; + var Base = $.oc.foundation.base, + BaseProto = Base.prototype + var DragScroll = function (element, options) { this.options = $.extend({}, DragScroll.DEFAULTS, options) @@ -45,6 +48,8 @@ this.el = $el this.scrollClassContainer = this.options.scrollClassContainer ? $(this.options.scrollClassContainer) : $el + Base.call(this) + /* * Inject scroll markers */ @@ -65,12 +70,12 @@ return !scrollWheel(offset) }) - $el.on('mousedown', function(event){ + $el.on('mousedown.dragScroll', function(event){ startDrag(event) return false }) - $el.on('touchstart', function(event){ + $el.on('touchstart.dragScroll', function(event){ var touchEvent = event.originalEvent; if (touchEvent.touches.length == 1) { startDrag(touchEvent.touches[0]) @@ -78,14 +83,14 @@ } }) - $el.on('click', function() { + $el.on('click.dragScroll', function() { // Do not handle item clicks while dragging if ($(document.body).hasClass('drag')) return false }) - $(document).on('ready', $.proxy(this.fixScrollClasses, this)) - $(window).on('resize', $.proxy(this.fixScrollClasses, this)) + $(document).on('ready', this.proxy(this.fixScrollClasses)) + $(window).on('resize', this.proxy(this.fixScrollClasses)) /* * Internal event, drag has started @@ -199,6 +204,9 @@ this.fixScrollClasses(); } + DragScroll.prototype = Object.create(BaseProto) + DragScroll.prototype.constructor = DragScroll + DragScroll.DEFAULTS = { vertical: false, allowScroll: true, @@ -322,6 +330,17 @@ callback() } + DragScroll.prototype.dispose = function() { + $(document).off('ready', this.proxy(this.fixScrollClasses)) + $(window).off('resize', this.proxy(this.fixScrollClasses)) + this.el.off('.dragScroll') + + this.scrollClassContainer = null + this.el.removeData('oc.dragScroll') + + BaseProto.dispose.call(this) + } + // DRAGSCROLL PLUGIN DEFINITION // ============================ diff --git a/modules/backend/assets/js/october.toolbar.js b/modules/backend/assets/js/october.toolbar.js index 2ad49f364..1f50330af 100644 --- a/modules/backend/assets/js/october.toolbar.js +++ b/modules/backend/assets/js/october.toolbar.js @@ -42,6 +42,12 @@ } } + Toolbar.prototype.dispose = function() { + this.$el.dragScroll('dispose') + this.$el.removeData('oc.toolbar') + this.$el = null + } + Toolbar.DEFAULTS = {} // TOOLBAR PLUGIN DEFINITION @@ -50,12 +56,15 @@ var old = $.fn.toolbar $.fn.toolbar = function (option) { + var args = Array.prototype.slice.call(arguments, 1) + return this.each(function () { var $this = $(this) var data = $this.data('oc.toolbar') var options = $.extend({}, Toolbar.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.toolbar', (data = new Toolbar(this, options))) + if (typeof option == 'string') data[option].apply(data, args) }) } diff --git a/modules/cms/widgets/mediamanager/assets/js/mediamanager.js b/modules/cms/widgets/mediamanager/assets/js/mediamanager.js index 5bd6adc95..d1985bcaf 100644 --- a/modules/cms/widgets/mediamanager/assets/js/mediamanager.js +++ b/modules/cms/widgets/mediamanager/assets/js/mediamanager.js @@ -49,10 +49,11 @@ MediaManager.prototype.dispose = function() { this.unregisterHandlers() this.clearSelectTimer() - this.disableUploader() + this.destroyUploader() this.clearSearchTrackInputTimer() this.releaseNavigationAjax() this.clearDblTouchTimer() + this.removeAttachedControls() this.removeScroll() this.$el.removeData('oc.mediaManager') @@ -169,6 +170,15 @@ this.$el.find('.control-scrollpad').scrollpad('scrollToStart') } + // + // Disposing + // + + MediaManager.prototype.removeAttachedControls = function() { + this.$el.find('[data-control=toolbar]').toolbar('dispose') + this.$el.find('[data-control=sorting]').select2('destroy') + } + // // Selecting // @@ -574,11 +584,11 @@ this.dropzone.on('error', this.proxy(this.uploadError)) } - MediaManager.prototype.disableUploader = function() { + MediaManager.prototype.destroyUploader = function() { if (!this.dropzone) return - this.dropzone.disable() + this.dropzone.destroy() this.dropzone = null }