/*global define*/ define(['jquery', 'ifr', 'domReady!'], function ($, ifr) { if (!Object.keys) { Object.keys = function(obj) { var keys = []; for (var i in obj) { if (obj.hasOwnProperty(i)) { keys.push(i); } } return keys; }; } var modal = document.querySelector('.modal-dialog'); var loop_listener = function (e) { // Find all focusable children var focusableElementsString = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex="0"], [contenteditable]'; var focusableElements = modal.querySelectorAll(focusableElementsString); // Convert NodeList to Array focusableElements = Array.prototype.slice.call(focusableElements); var firstTabStop = focusableElements[0]; var lastTabStop = focusableElements[focusableElements.length - 1]; // Check for TAB key press if (e.keyCode === 9) { // SHIFT + TAB if (e.shiftKey) { if (document.activeElement === firstTabStop) { e.preventDefault(); lastTabStop.focus(); } // TAB } else { if (document.activeElement === lastTabStop) { e.preventDefault(); firstTabStop.focus(); } } } } var main = function () { return { settings : {}, width : 0, language: navigator && navigator.language ? navigator.language.substring(0, 2) : "en", init : function () { this.initData(); this.initEvent(); }, initEvent : function () { $(".category > .category-title .select-all").click($.proxy(this.clickSelectAll, this)); $('.btn-toggle').click($.proxy(this.toggleButton, this)); $('.modal-footer > .btn-primary').click($.proxy(this.saveButton, this)); $('.close').click($.proxy(this.closeButton, this)); }, initData : function () { ifr.init(); ifr.add(['init'], $.proxy(this.bootload, this)); ifr.add(['reInit'], $.proxy(this.reInit, this)); ifr.add(['resize'], $.proxy(this.resize, this)); ifr.add(['addJS'], $.proxy(this.addJS, this)); ifr.add(['addCss'], $.proxy(this.legacyAddCss, this)); ifr.sendReady(); }, reInit : function (data) { if (data.data[0] === null || ((data.data[0].length === 0 || data.data[0].length === 1 && data.data[0][0] === '') && (data.data[1] == null || data.data[1].length === 0))) { this.settings.defaultConfig = true; } else { this.settings.defaultConfig = false; if (typeof this.settings.categories == 'undefined') { this.settings.categories = []; } $('.category-simple').slice(1).remove(); $('.category-subcategory').slice(1).remove(); $('.sub_category').slice(1).remove(); $('.category-simple, .sub_category').find('.btn-no').addClass('btn-primary').removeClass('btn-default'); $('.category-simple, .sub_category').find('.btn-yes').addClass('btn-default').removeClass('btn-primary'); this.commonInit(this.settings, false, data); } setTimeout(function(){ $('.modal-dialog').focus(); modal.addEventListener('keydown', loop_listener); }, 100); $('.default-neutral.hide').removeClass('default-neutral'); }, commonInit: function (settings, firstInit, data) { var simplecat = $('.category-simple').clone(true), catsubcat = $('.category-subcategory').clone(true), countcat = Object.keys(settings.categories).length; if (firstInit === true) { this.width = 600; if (countcat === 3) { $('.modal-dialog').addClass('modal-cat3'); this.width = 750; } if (countcat > 3) { $('.modal-dialog').addClass('modal-lg'); this.width = 900; } } $('.category-simple, .category-subcategory').remove(); if (countcat > 0) { var colmd = countcat <= 4 ? parseInt(12 / countcat) : 12; for (var k in settings.categories) { var cat = settings.categories[k]; if (cat.subCategories !== null) { //with subcat var newcat = catsubcat.clone(true), subcat = $('.sub_category', newcat).clone(true); $('.sub_category', newcat).remove(); for (var ks in cat.subCategories) { var subc = subcat.clone(true), catsub = cat.subCategories[ks]; $('.tc-title', subc).html(catsub.label); $('.btn-yes', subc).data('id', catsub.id); $('.sub_categories', newcat).append(subc); var catEnabled = (firstInit === true) ? settings.categoriesEnabled : data.data[0]; $('.btn-toggle', subc).removeClass('hide'); $('.btn-blocked-on', subc).addClass('hide'); if (catsub.locked_value == 1) { $('.btn-toggle', subc).addClass('hide'); $('.btn-blocked-on', subc).removeClass('hide'); } else { if (settings.defaultConfig !== true) { if ($.inArray(catsub.id.toString(), catEnabled) !== -1) { $('.btn-toggle', subc).click(); } else { $('.btn-toggle', subc).click().click(); } } } } }else{ //without subcat var newcat = simplecat.clone(true); $('.btn-yes', newcat).data('id', cat.id); $('.btn-toggle', newcat).removeClass('hide'); $('.btn-blocked-on', newcat).addClass('hide'); if (cat.locked_value == 1) { $('.btn-toggle', newcat).addClass('hide'); $('.btn-blocked-on', newcat).removeClass('hide'); } else { if (settings.defaultConfig === true) { if (settings.actionType === 'optin') { $('.btn-toggle', newcat).click(); } else if (settings.actionType === 'optout') { $('.btn-toggle', newcat).click().click(); } }else{ var catEnabled = (firstInit === true) ? settings.categoriesEnabled : data.data[0]; if($.inArray(cat.id.toString(), catEnabled) !== -1) { $('.btn-toggle', newcat).click(); } else { $('.btn-toggle', newcat).click().click(); } } } } $(newcat).addClass('col-sm-'+colmd); $('.category-title .tc-title', newcat).html(cat.label); $('.tc-description', newcat).html(cat.description); $('.category-container').append(newcat); } if (settings.blockedOnStyle != '1') { $('.btn-blocked-on').text(settings.labelBtOn); $('.btn-blocked-on').addClass('bbo-text'); } this.initSelectAll(settings); } $('.default-neutral.hide').removeClass('default-neutral'); }, initSelectAll: function (settings) { $(".category.category-subcategory").each(function (index) { var nbBlockedOn = $(this).find('.btn-blocked-on:not(.hide)').length; var nbSubCats = $(this).find('.sub_category').length; var nbNo = $(this).find('.sub_category > div:not(.hide) .btn-no.btn-primary').length; var nbYes = $(this).find('.sub_category > div:not(.hide) .btn-yes.btn-primary').length; var textButton = settings.actionType === 'optin' ? settings.labelYesForAll : settings.labelNoForAll; if (nbBlockedOn == nbSubCats) { $(this).find('.select-all').addClass('hide'); } else { if (nbNo + nbBlockedOn == nbSubCats) { textButton = settings.labelYesForAll; } else if (nbYes + nbBlockedOn == nbSubCats) { textButton = settings.labelNoForAll; } if (settings.actionType === 'optin' || settings.actionType === 'neutral') { $(this).find('.select-all').text(textButton).removeClass('yes'); } } }); }, resize : function (data) { var height = data.height - 200, width = data.width, containerHeight = $('.container-body').height() + 40; /* set body height */ $('.modal-body').css({ 'height': (height > containerHeight ? containerHeight : height), 'overflow-y' : 'auto' }); }, addCss : function (css){ $('')/*.text()*/; $(document.head).append(link); } /* bt bg stylsheet */ $('.modal-footer > .btn-primary, #privacy-cat-modal .btn-blocked-on').css({background: this.settings.btBgColor, color: this.settings.btColor}); /* bt close */ if (this.settings.bodyBgColor != this.settings.btColor) { $('.close').css({color: this.settings.btColor}); } else { $('.close').css({color: this.settings.btBgColor}); } /* bt label */ $('.modal-footer > .btn-primary').text(this.settings.btContent); /* bt title */ $('.modal-footer > .btn-primary').attr('title', this.settings.btTitle); /* bt type */ $('.modal-footer > .btn-primary').attr('type', this.settings.btType); /* set body bg color */ $('.modal-body, .modal-footer, .modal-content').css({background: this.settings.bodyBgColor}); /* body text */ $('.modal-body > .container-body > .text-intro').html(this.settings.bodyContent); /* select all color */ $('.category-title .select-all').css({color: this.settings.btBgColor}); /* body font color */ $('.modal-body > .container-body > .text-intro, .category-description, .category-title strong, .sub_category').css({color: this.settings.bodyColor}); /* display modal */ $('#privacy-cat-modal').show(); this.resizeParent(); }, manageCategories : function (settings) { $('.select-item-btn .btn-yes .text').text(settings.labelBtOn); $('.select-item-btn .btn-no .text').text(settings.labelBtOff); $('.category-subcategory .select-all').text(settings.labelYesForAll); if (settings.defaultConfig === true && settings.actionType === 'optin') { $(".category-subcategory .select-all").click(); $('.btn-toggle').removeClass('default-neutral'); } else if (settings.defaultConfig === true && settings.actionType === 'optout') { $('.btn-toggle').removeClass('default-neutral'); } else if (settings.defaultConfig === true && settings.actionType === 'neutral') { $('.ntrl-error-msg').text(settings.ntrlErrorMsg); $('#privacy-cat-modal .modal-footer .btn.btn-primary').prop('disabled', 'disabled'); } if (typeof settings.categories == 'undefined') { settings.categories = []; } this.commonInit(settings, true); } }; }; main().init(); });