(function(){ 'use strict'; angular.module('raz') .component('lazAccordion', { templateUrl: '/js/angular/literacy-curriculum-map/laz-accordion.html', controller: 'LazAccordionController', bindings: { items: '<', group: '<', getHeading: '&', getSubheading: '&' }, transclude: true }) .controller('LazAccordionController', LazAccordionController); LazAccordionController.$inject = ['lazAccordionService', '$scope', '$timeout', '$sce']; function LazAccordionController (lazAccordionService, $scope, $timeout, $sce) { var ctrl = this; ctrl.isActive = false; ctrl.$onInit = function() {}; $scope.$on('ngRepeatFinished', function(ngRepeatFinishedEvent) { lazAccordionService.initializeAccordion(ctrl.group); if (lazAccordionService.isCookieAllowed(ctrl.group)) { handleCookie(ctrl.group); } }); ctrl.isAccordionItemActive = function(id) { return ctrl.isActive && lazAccordionService.getActiveButtonId(ctrl.group) === parseInt(id); } ctrl.clickAccordion = function($event) { var button = angular.element($event.currentTarget); var accordionButtonId = 'accordion-group-' + ctrl.group + '-button'; var buttonIdParts = button.attr('id').split(accordionButtonId+'-'); var buttonId = parseInt(buttonIdParts[1]); handleActiveStatus(buttonId); handleReset(); } ctrl.trustAsHtml = function (html) { return $sce.trustAsHtml(html); }; ctrl.getAccordionIdName = function(type, number) { return 'accordion-group-' + ctrl.group + '-' + type + '-' + number; }; ctrl.getAccordionClassName = function(type) { return 'js-accordion-group-' + ctrl.group + '-' + type; }; ctrl.getAccordionHeading = function(item) { return ctrl.getHeading({item: item}); }; ctrl.getAccordionSubHeading = function(item) { return ctrl.getSubheading({item: item}); }; function handleCookie() { var cookieName = 'laz_accordion_' + ctrl.group; var cookieValue = clg.commonUtils.getCookie(cookieName); if (cookieValue) { var element = '#' + 'accordion-group-' + ctrl.group + '-' + 'button' + '-' + cookieValue; $timeout(function() { angular.element(element).click(); handleActiveStatus(cookieValue); clg.commonUtils.deleteCookie(cookieName); }, 0, false); } } function handleActiveStatus(buttonId) { ctrl.isActive = lazAccordionService.getActiveButtonId(ctrl.group) !== buttonId if (ctrl.isActive) { lazAccordionService.setActiveButtonId(ctrl.group, buttonId); } else { lazAccordionService.setActiveButtonId(ctrl.group, null); } } function handleReset() { $timeout(function() { ctrl.isActive = !ctrl.isActive; }, 0); $timeout(function() { ctrl.isActive = !ctrl.isActive; }, 0); } } })();