Home Reference Source Repository

js/base/directives/ModuleCollapse.js

'use strict';

/**
 * Directive to collapse a module
 */
class ModuleCollapse {

	/**
	 * Creates a new instance of the ModuleCollapse directive
	 */
	constructor($rootScope){
		/**
		 * A reference to $rootScope.
		 */
		this.$rootScope = $rootScope;

		/**
		 * Directive restricted to Attribute.
		 */
		this.restrict = 'A';

		/**
		 * Isolated scope for directive.
		 */
		this.scope = false;
		const self = this;
		/**
		 * Linking function.
		 */
		this.link = function(){
			self.linkDirective(...arguments);
		};
	}

	/**
	 * Link function for the directive
	 */
	linkDirective(scope, element){

		var collapseButton = $(element.find('a')[0]), toCollapse = $(element.find('.collapse')[0]);
		const self = this;

		/**
		* Refresh the scrolle before and after modules has been collapsed
		*/
		function refreshScoller(){
			self.$rootScope.$broadcast('iScrollRefresh', {'scollerId' : 'mainScroll'});
		}

		toCollapse.on('shown.bs.collapse', refreshScoller);
		toCollapse.on('hidden.bs.collapse', refreshScoller);

		/**
		* Toggles the collapse of a module at the specified index
		*/
		collapseButton.on('click', function(){
			toCollapse.collapse('toggle');
		});
	}
}

/**
 * Factory to create a new instance of the directive
 */
var ModuleCollapseFactory = function() {
	return new ModuleCollapse(...arguments);
};
ModuleCollapseFactory.$inject = ['$rootScope'];
export default ModuleCollapseFactory;