/** * 2017-2019 Zemez * * JX Mega Layout * * NOTICE OF LICENSE * * This source file is subject to the General Public License (GPL 2.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/GPL-2.0 * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade the module to newer * versions in the future. * * @author Zemez (Alexander Grosul & Alexander Pervakov) * @copyright 2017-2019 Zemez * @license http://opensource.org/licenses/GPL-2.0 General Public License (GPL 2.0) */ $(document).ready(function(e) { jxml.init(); $(document).on('change', '.jxmegalayout-styles input:not([type="radio"])', function(e) { jxml.validate.styleInput($(this)); return false; }); var section_name = $('#jxml-sections>ul>li.active').attr('data-section-name'); $('.jxmegalayout-nav > li:not(.jxml-tools_tab , .jxml-sections)').hide(); $('.jxmegalayout-nav > li[data-section="' + section_name + '"]').show(); $('#selectLayoutArchive').live('click', function(e) { $('#layoutArchive').trigger('click'); }); $('#selectExtraContentArchive').live('click', function(e) { $('#extraContentArchive').trigger('click'); }); $('#extraContentArchive').live('change', function(e) { $('#import_extra_content_form').find('.alert').addClass('hidden'); if ($(this)[0].files !== undefined) { var files = $(this)[0].files; var name = ''; $.each(files, function(index, value) { name += value.name + ', '; }); $('#extraContentArchiveName').val(name.slice(0, -2)); } else { var name = $(this).val().split(/[\\/]/); $('#extraContentArchiveName').val(name[name.length - 1]); } e.preventDefault(); var file = $('#extraContentArchive')[0].files[0]; if (file.name != 'extracontent.zip') { $('#import_extra_content_form').find('.alert').removeClass('hidden'); return; } var form_data = new FormData(); form_data.append('file', file); sendExtraContentImportArchive(form_data, file.name, file.size); }); function sendExtraContentImportArchive(file, fileName, fileSize) { var xhr = new XMLHttpRequest(); xhr.open('POST', jxml_theme_url + '&ajax&action=importExtraContent', false); xhr.setRequestHeader("Cache-Control", "no-cache"); xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xhr.setRequestHeader('X-FILE-NAME', fileName); xhr.setRequestHeader('X-FILE-SIZE', fileSize); xhr.send(file); if (xhr.status == 200) { if (JSON.parse(xhr.response).status) { jxml.ajax.extraContentReturnHome(); } else { $('#import_extra_content_form').append('
'+JSON.parse(xhr.response).message+'
'); } } } $('.iframe-btn').fancybox({ 'width' : 900, 'height' : 600, 'type' : 'iframe', 'autoScale' : false, 'autoDimensions' : false, 'fitToView' : false, 'autoSize' : false, onUpdate : function() { $('.fancybox-iframe').contents().find('a.link').data('field_id', $(this.element).data("input-name")); $('.fancybox-iframe').contents().find('a.link').attr('data-field_id', $(this.element).data("input-name")); }, afterShow : function() { $('.fancybox-iframe').contents().find('a.link').data('field_id', $(this.element).data("input-name")); $('.fancybox-iframe').contents().find('a.link').attr('data-field_id', $(this.element).data("input-name")); }, afterClose : function() { setTimeout(function() { $('.edit-styles.active').trigger('click') }, 50); } }); // display list of extra content during a slider management. Display content related to the selected type (HTML, Banner, etc.) $(document).on('change', 'select#extra-content-types-list', function(e) { $('.extra-content-types-list').addClass('hidden'); $('.add-extra-content-slider').addClass('disabled'); $('.extra-content-types-list[name="'+$(this).val()+'"]').removeClass('hidden').val(''); }); // display/hide add button in slider management(in order to avoid an empty slide creation) $(document).on('change keyup', 'select.extra-content-types-list, input.extra-content-types-list', function(e){ if ($(this).val()) { if ($.isNumeric($(this).val())) { $(this).removeClass('error'); $('.add-extra-content-slider').removeClass('disabled'); } else { $(this).addClass('error'); $('.add-extra-content-slider').addClass('disabled'); } } else { $('.add-extra-content-slider').addClass('disabled'); } }); // determine a behaviour of an "add-extra-content-slider" button $(document).on('click', '.add-extra-content-slider', function(e) { e.preventDefault; var type = $('select#extra-content-types-list').val(); var content = $('.extra-content-types-list[name="'+type+'"]').val(); var name = $('.extra-content-types-list[name="'+type+'"] option:selected').text(); if (!name.length) { name = $('input.extra-content-types-list[name="'+type+'"]').val(); } if ($(this).hasClass('disabled') || !type || !content) { return; } else { $('#extra-content-slider-slides').append('' + response.message + '
'); } } }, getLayoutRenameConfirmation : function(id_layout) { data = { action : 'getLayoutRenameConfirmation', id_layout : id_layout }; this.request(data, this.getLayoutRenameConfirmationSuccess); }, getLayoutRenameConfirmationSuccess : function(response, data, elem) { if (response.status == 'true') { fancyBoxOpen('message', '', '', response.message); } else { showErrorMessage(response.message); } }, removeLayout : function(id_layout, hook_name) { data = { action : 'removeLayout', id_layout : id_layout, hook_name : hook_name }; this.request(data, this.removeLayoutSuccess); }, removeLayoutSuccess : function(response, data, elem) { if (response.status == 'true') { jxml_hook_layout_list = $('.jxlist-group[data-list-id="' + data.hook_name + '"]'); $('.jxlist-group li[data-layout-id="' + data.id_layout + '"]').remove(); $('.jxmegalayout-admin[data-layout-id="' + data.id_layout + '"]').remove(); $('.jxlist-group[data-list-id="' + data.hook_name + '"] li').eq(0).trigger('click'); if (jxml_hook_layout_list.find('li').length < 1) { jxml_hook_layout_list.prev('button').remove(); jxml_hook_layout_list.closest('.jxmegalayout-lsettins').find('.jxlist-layout-btns').remove(); jxml_hook_layout_list.closest('.jxmegalayout-lsettins').find('.btn-group').remove(); jxml_hook_layout_list.closest('.jxmegalayout-lsettins').find('.jxmegalayout-availible-pages').remove(); } showSuccessMessage(response.message); jxml.ajax.optimizeMessage(); } else { showErrorMessage(response.message); } }, getLayoutRemoveConfirmation : function(id_layout) { data = { action : 'getLayoutRemoveConfirmation', id_layout : id_layout }; this.request(data, this.getLayoutRemoveConfirmationSuccess); }, getLayoutRemoveConfirmationSuccess : function(response, data, elem) { if (response.status == 'true') { fancyBoxOpen('message', '', '', response.message) } else { showErrorMessage(response.message); } }, loadLayoutContent : function(elem) { jxml_layout_container = elem.closest('.tab-pane').find('.layout-container'); jxml_layout_container.html(''); jxml_layout_container.append('' + jxml_loading_text + '
'); data = { action : 'loadLayoutContent', id_layout : elem.attr('data-layout-id') }; this.request(data, this.loadLayoutContentSuccess); }, loadLayoutContentSuccess : function(response, data, elem) { if (response.status == 'true') { jxml_layout_container.append(response.layout); jxml_layout_container.prev('.jxmegalayout-lsettins').find('.jxlist-layout-buttons').html(response.layout_buttons); jxml_layout_container.find('p.loading').remove(); $('.jxml-layouts-list').removeClass('loading'); jxml.sortInit(); jxml.tooltipInit(); jxml.multiselectInit(); } else { showErrorMessage(response.message); } }, addLayout : function(elem, layout_name) { hook_name = elem.attr('data-hook-name'); data = { action : 'addLayout', hook_name : hook_name, layout_name : layout_name }; this.request(data, this.addLayoutSuccess); }, addLayoutSuccess : function(response, data, elem) { if (response.status == 'true') { $.fancybox.close(); if ($('.jxlist-group[data-list-id="' + data.hook_name + '"] li').length < 1) { $('.jxlist-group[data-list-id="' + data.hook_name + '"]').before(''); } $('.jxlist-group[data-list-id="' + data.hook_name + '"]').append('' + response.message + '
'); } } }, addLayoutForm : function(elem) { hook_name = elem.attr('data-hook-name'); data = { action : 'addLayoutForm', hook_name : hook_name }; this.request(data, this.addLayoutFormSuccess); }, addLayoutFormSuccess : function(response, data, elem) { if (response.status == 'true') { fancyBoxOpen('message', '', '', response.response_msg); } }, loadExtraContent : function(elem) { $('#extra_content_layout').append(''); item_type = elem.context.dataset.contentType; data = { action : 'loadExtraContent', item_type : item_type }; if (elem.context.dataset.contentId != undefined && elem.context.dataset.contentId) { data['id_item'] = elem.context.dataset.contentId; } this.request(data, this.loadExtraContentSuccess); }, loadExtraContentSuccess : function(response, data, elem) { if (response.status == 'true') { jxml.ajax.refreshExtraContentContainer(response.content); } }, extraContentReturnHome: function() { $('#extra_content_layout').append(''); data = { action : 'loadTool', tool_name : 'extra_content' }; this.request(data, this.extraContentReturnHomeSuccess); }, extraContentReturnHomeSuccess: function(response) { if (response.status == 'true') { jxml.ajax.refreshExtraContentContainer(response.rawData); } }, loadThemesContent : function(elem) { $('#theme_child_layout').append(''); parent_theme = elem.context.dataset.themeName; child_theme = elem.context.dataset.childThemeName; theme_action = elem.context.dataset.action; data = { action : 'loadThemesContent', theme : parent_theme, child_theme: child_theme, theme_action: theme_action }; this.request(data, this.loadThemesContentSuccess); }, loadThemesContentSuccess : function(response, data, elem) { if (response.status) { jxml.ajax.refreshThemeContainer(response.content); } }, refreshThemeContainer : function(content) { var themeContainer = $('#theme_child_layout'); themeContainer.html(content); themeContainer.find('.ajax_running-1').remove(); }, refreshExtraContentContainer : function(content) { var extraContentContainer = $('#extra_content_layout'); extraContentContainer.html(content); extraContentContainer.find('.ajax_running-1').remove(); }, saveExtraContent : function(elem) { $('#theme_child_layout').append(''); var form = elem.closest('form'); var contentType = elem.attr('name'); if (contentType == 'updateBanner' || contentType == 'updateSlider') { var data = new FormData(form.get(0)); data.append('action', 'saveExtraItem'); // add data from textarea fields which use tinyMCE form.find('textarea').each(function() { data.append($(this).attr('name'), tinyMCE.get($(this).attr('id')).getContent()); }); this.formDataRequest(data, this.saveExtraContentSuccess); } else { data = getFormElements(form); data['action'] = 'saveExtraItem'; this.request(data, this.saveExtraContentSuccess); } }, saveExtraContentSuccess : function(response, data, elem) { if (response.status == 'invalid') { jxml.ajax.invalidExtraContentMessage(response.content); } else if (response.status == 'success') { jxml.ajax.refreshExtraContentContainer(response.content); } else { jxml.ajax.refreshExtraContentContainer(response.content); } }, invalidExtraContentMessage : function(message) { $('#extra_content_layout').find('.ajax_running-1').remove(); $('#extra_content_layout #configuration_form').find('.errors-box').remove(); $('#extra_content_layout #configuration_form .form-wrapper').prepend(message); }, removeExtraContent : function(elem) { $('#extra_content_layout').append(''); item_type = elem.context.dataset.contentType; id_item = elem.context.dataset.contentId; data = { action : 'removeExtraItem', item_type : item_type, id_extra_item : id_item }; this.request(data, this.removeExtraContentSuccess, elem); }, removeExtraContentSuccess : function(response, data, elem) { $('#extra_content_layout').find('.ajax_running-1').remove(); if (response.status == 'true') { $('#extra_content_container').find('.errors-box').remove(); $('#extra_content_container .active').prepend(response.content.report); if (response.content.status = 'success') { elem.closest('li').remove(); } } }, exportExtraContent: function() { $('#extra_content_layout').append(''); data = { action : 'exportExtraContent' }; this.request(data, this.exportExtraContentSuccess); }, exportExtraContentSuccess : function(response) { $('#extra_content_layout').find('.ajax_running-1').remove(); if (response.status) { $('#extra_content_container').find('.errors-box').remove(); if (response.href) { location.href = response.href; } } }, importExtraContent: function() { $('#extra_content_layout').append(''); data = { action : 'importExtraContentForm' }; this.request(data, this.importExtraContentFormSuccess); }, importExtraContentFormSuccess : function(response) { $('#extra_content_layout').find('.ajax_running-1').remove(); if (response.status) { jxml.ajax.refreshExtraContentContainer(response.content); } }, saveBuilderTheme : function(elem) { $('#theme_child_layout').append(''); var layouts = {}; $('#theme-builder-layouts input[type="checkbox"]:checked').each(function() { layouts[$(this).attr('name')] = { 'name' : $(this).val(), 'version' : $(this).attr('data-layout-version')}; }); data = { action: 'saveBuilderTheme', parent_theme: elem.context.dataset.themeName, theme_name: $('#theme_child_layout input[name="theme_name"]').val(), theme_public_name: $('#theme_child_layout input[name="theme_public_name"]').val(), layouts: layouts }; this.request(data, this.saveBuilderThemeSuccess); }, saveBuilderThemeSuccess : function(response, data, elem) { if (response.status) { jxml.ajax.refreshThemeContainer(response.content); } else { jxml.ajax.invalidBuilderThemeMessage(response.content); } }, invalidBuilderThemeMessage : function(message) { $('#theme_child_layout').find('.ajax_running-1').remove(); $('#theme_child_layout').find('.module_error').closest('.bootstrap').remove(); $('#theme_child_layout .form-wrapper').prepend(message); }, removeBuilderTheme : function(elem) { $('#theme_child_layout').append(''); theme = elem.context.dataset.themeName; parent_theme = elem.context.dataset.parentTheme; data = { action : 'removeBuilderTheme', theme_name : theme, parent_theme : parent_theme }; this.request(data, this.removeBuilderThemeSuccess, elem); }, removeBuilderThemeSuccess : function(response, data, elem) { $('#theme_child_layout').find('.ajax_running-1').remove(); if (response.status) { jxml.ajax.refreshThemeContainer(response.content); } else { jxml.ajax.invalidBuilderThemeMessage(response.content); } }, updateParentTheme: function(elem) { $('#theme_child_layout').append(''); parent_theme = elem.context.dataset.themeName; data = { action : 'updateParentTheme', parent_theme : parent_theme }; this.request(data, this.updateParentThemeSuccess, elem); }, updateParentThemeSuccess : function(response, data, elem) { $('#theme_child_layout').find('.ajax_running-1').remove(); if (response.status) { $('#update-parent-theme').remove(); $('#theme-update-message').html(response.content); } else { $('#theme-update-message').html(response.content); } }, updateParentThemeLibrary: function(elem) { $('#theme_child_layout').append(''); parent_theme = elem.context.dataset.themeName; data = { action : 'updateParentThemeLibrary', parent_theme : parent_theme }; this.request(data, this.updateParentThemeLibrarySuccess, elem); }, updateParentThemeLibrarySuccess : function(response, data, elem) { $('#theme_child_layout').find('.ajax_running-1').remove(); if (response.status) { $('#theme-update-message').html(response.content); $('#update-parent-theme-library').remove(); } else { $('#theme-update-message').html(response.content); } }, deleteLayoutItem : function(elem) { id_item = elem.attr('data-id'); jxml_itemsdel_ids = [id_item]; $(elem).find('div').each(function() { jxml_itemsdel_ids.push($(this).attr('data-id')); }); data = { action : 'deleteLayoutItem', id_item : jxml_itemsdel_ids }; this.request(data, this.deleteLayoutItemSuccess); }, deleteLayoutItemSuccess : function(response, data, elem) { if (response.status == 'true') { $('div[data-id="' + data.id_item[0] + '"]').remove(); showSuccessMessage(response.response_msg); jxml.ajax.optimizeMessage(); return; } showErrorMessage(response.response_msg); }, clearItemStyles : function(elem, id_unique) { elem.find('select, input:not([type="hidden"])').val('').attr('style', ''); data = { action : 'clearItemStyles', id_unique : id_unique }; this.request(data, this.clearItemStylesSuccess, elem, this.clearItemStylesError); }, clearItemStylesSuccess : function(response, data, elem) { if (response.status == 'true') { elem.find('.alert').remove(); elem.prepend('' + response.message + '
'); return; } showErrorMessage(response.response_msg); }, clearItemStylesError : function(response, data, elem) { elem.find('.alert').remove(); }, saveItemStyles : function(elem, id_unique, data) { data = { action : 'saveItemStyles', id_unique : id_unique, data : data }; this.request(data, this.saveItemStylesSuccess, elem, this.saveItemStylesError); }, saveItemStylesSuccess : function(response, data, elem) { if (response.status == 'true') { elem.find('.alert').remove(); elem.prepend('' + response.message + '
'); return; } showErrorMessage(response.response_msg); }, saveItemStylesError : function(response, data, elem) { elem.find('.alert').remove(); }, getItemStyles : function(id_unique) { data = { action : 'getItemStyles', id_unique : id_unique }; this.request(data, this.getItemStylesSuccess); }, getItemStylesSuccess : function(response, data, elem) { if (response.status == 'true') { fancyBoxOpen('message', '', '', response.content); $('.jxml_color_input').mColorPicker(); jxml_jxp_img = $('.jxpanel-content').find('input[id="flmbgimg"]').val(); if (jxml_jxp_img.length) { jxml_jxp_img = jxml_jxp_img.substring(jxml_jxp_img.indexOf('/img/cms') + 1); $('input[name="background-image"]').val('url(../../../../../' + jxml_jxp_img + ')'); $('.jxpanel-content').find('input[id="flmbgimg"]').val(''); } return; } }, updateSortOrders : function(elem) { jxml_itemsorder_ids = {}; elem.find('> div.sortable, > span > div.sortable').each(function() { jxml_itemsorder_ids[$(this).attr('data-id')] = $(this).attr('data-sort-order'); }); data = { action : 'updateLayoutItemsOrder', data : jxml_itemsorder_ids }; this.request(data, this.updateSortOrdersSuccess); }, updateSortOrdersSuccess : function(response, data, elem) { if (response.status == 'true') { showSuccessMessage(response.response_msg); return; } showErrorMessage(response.response_msg); }, saveLayoutItem : function(id_item, elem, type, type_class, specific_class, col, col_xs, col_sm, col_md, col_lg, col_xl, col_xxl, module_name, public_module_name, origin_hook, extra_css) { type_class = type_class || ''; public_module_name = public_module_name || null; jxml_edit_item = id_item; id_parent = jxml.get.parentId(elem); id_layout = elem.closest('.layout-container').find('input[name="jxml_id_layout"]').val(); sort_order = jxml.get.sortOrder(elem); if (jxml_edit_item) { sort_order = elem.attr('data-sort-order'); id_parent = elem.attr('data-parent-id'); } if (typeof (specific_class) == 'undefined') { specific_class = ''; } itemData = { 'id_layout' : id_layout, 'id_parent' : id_parent, 'type' : type, 'sort_order' : sort_order, 'specific_class' : specific_class, 'col' : col, 'col_xs' : col_xs ? col_xs : '', 'col_sm' : col_sm, 'col_md' : col_md, 'col_lg' : col_lg, 'col_xl' : col_xl, 'col_xxl' : col_xxl, 'module_name' : module_name, 'origin_hook' : origin_hook, 'extra_css' : extra_css }; data = { action : 'updateLayoutItem', id_item : id_item, data : itemData }; this.request(data, this.saveLayoutItemSuccess, elem); }, saveLayoutItemSuccess : function(response, data, elem) { if (response.status == 'true') { if (!jxml_edit_item) { if (!elem.hasClass('min-level')) { elem.closest('article').append(response.content); } else { elem.closest('article').find('.add-buttons').before(response.content); } jxml.sortInit(); jxml.tooltipInit(); jxml.multiselectInit(); } jxml.ajax.optimizeMessage(); showSuccessMessage(response.response_msg); return; } showErrorMessage(response.response_msg); }, optionOptimize : function(elem) { data = { action : 'updateOptionOptimize', }; elem.append(''); this.request(data, this.optionOptimizeSuccess, elem); }, optionOptimizeSuccess : function(response, data, elem) { if (response.status == 'true') { showSuccessMessage(response.response_msg); elem.find('.ajax_running').remove(); $('.alertMessage').addClass('hidden'); JXMEGALAYOUT_OPTIMIZE = true; } }, optionDeoptimize : function(elem) { data = { action : 'updateoptionDeoptimize', }; elem.append(''); this.request(data, this.optionDeoptimizeSuccess, elem); }, optionDeoptimizeSuccess : function(response, data, elem) { if (response.status == 'true') { showSuccessMessage(response.response_msg); elem.find('.ajax_running').remove(); if (JXMEGALAYOUT_SHOW_MESSAGES) { $('.alertMessage').removeClass('hidden'); } JXMEGALAYOUT_OPTIMIZE = false; } } }, events : { docClick : function(elemSelector, innerFunc) { $(document).on('click', elemSelector, function(e) { innerFunc($(this)); e.preventDefault(); }); }, loadExtraContent : function() { this.docClick('#add_extra_content, #extra-content-buttons ul li a, #extra_content_container a.edit-item', function(elem) { setTimeout(function() { jxml.ajax.loadExtraContent(elem) }, 100); return false; }); }, extraContentReturnHome : function() { this.docClick('#extra_content_layout #configuration_form_cancel_btn, a.return-btn, button.return-btn', function(elem) { setTimeout(function() { jxml.ajax.extraContentReturnHome(elem) }, 100); return false; }); }, loadThemesContent : function() { this.docClick('#manage-theme, .theme-builder-process', function(elem) { setTimeout(function() { jxml.ajax.loadThemesContent(elem) }, 100); return false; }); }, saveExtraContent : function() { this.docClick('#extra_content_layout #configuration_form_submit_btn', function(elem) { setTimeout(function() { jxml.ajax.saveExtraContent(elem) }, 100); }); }, removeExtraContent : function() { this.docClick('#extra_content_container a.remove-extra-item', function(elem) { setTimeout(function() { jxml.ajax.removeExtraContent(elem) }, 100); return false; }); }, exportExtraContent : function() { this.docClick('#export_extra_content', function(elem) { setTimeout(function() { jxml.ajax.exportExtraContent(elem) }, 100); return false; }); }, importExtraContent : function() { this.docClick('#import_extra_content', function(elem) { setTimeout(function() { jxml.ajax.importExtraContent(elem) }, 100); return false; }); }, saveBuilderTheme: function() { this.docClick('#save-builder-theme', function(elem) { setTimeout(function() { jxml.ajax.saveBuilderTheme(elem) }, 100); }); }, removeBuilderTheme: function() { this.docClick('#remove-builder-theme', function(elem) { setTimeout(function() { jxml.ajax.removeBuilderTheme(elem) }, 100); }); }, updateParentTheme: function() { this.docClick('#update-parent-theme', function(elem) { $('#theme-update-message').html(''); setTimeout(function() { jxml.ajax.updateParentTheme(elem) }, 100); }); }, updateParentThemeLibrary: function() { this.docClick('#update-parent-theme-library', function(elem) { $('#theme-update-message').html(''); setTimeout(function() { jxml.ajax.updateParentThemeLibrary(elem) }, 100); }); }, addLayoutForm : function() { this.docClick('.add_layout', function(elem) { jxml.ajax.addLayoutForm(elem); }); }, addLayout : function() { this.docClick('.save-layout', function(elem) { layout_name = $('input[name="layout_name"]').attr('value'); if (jxml.validate.layoutName(layout_name)) { jxml.ajax.addLayout(elem, layout_name); } else { error_container = elem.parent('div'); error_container.find('p.alert').remove(); error_container.prepend('' + jxml_layout_validate_error_text + '
'); } }); }, loadLayoutContent : function() { this.docClick('.jxml-layouts-list .jxlist-group-item:not(.active)', function(elem) { parent_element = elem.parent(); parent_element.find('li').removeClass('active'); parent_element.addClass('loading'); elem.addClass('active'); parent_element.prev('button').text(elem.find('a').text()); jxml.ajax.loadLayoutContent(elem); }); }, addModuleConfirmation : function() { this.docClick('.add-module', function(elem) { parentElem = elem.parents('.jxpanel-content'); $('.add-module').removeClass('active'); elem.addClass('active'); jxml.ajax.addModuleConfirmation(parentElem); }); }, addExtraContentConfirmation : function() { this.docClick('.add-extra-content', function(elem) { parentElem = elem.parents('.jxpanel-content'); $('.add-extra-content').removeClass('active'); elem.addClass('active'); jxml.ajax.addExtraContentConfirmation(parentElem); }); }, deleteLayoutItem : function() { this.docClick('.remove-item', function(elem) { jxml.ajax.deleteLayoutItem(elem.closest('div:not(.button-container)')); }); }, disableLayout : function() { this.docClick('.disable-layout', function(elem) { var id_layout = elem.attr('data-layout-id'); jxml.ajax.disableLayout(id_layout); }); }, enableLayout : function() { this.docClick('.use-layout', function(elem) { var hook_name = elem.parents('.jxpanel-content').find('input[name="jxml_hook_name"]').val(); var id_layout = elem.attr('data-layout-id'); var pages = elem.parents('.jxpanel-content').find('select[name="jxmegalayout-availible-pages"]').val(); jxml.ajax.enableLayout(hook_name, id_layout, pages, 1); }); }, cleanImage : function() { this.docClick('a.clear-image', function(elem) { elem.parents('.input-group').find('input').val(''); }); }, cleanImageNone : function() { this.docClick('a.clear-image-none', function(elem) { elem.parents('.input-group').find('input').val('none'); }); }, cleanItemStyles : function() { this.docClick('.clear-styles', function(elem) { elem = elem.parents('.form-wrapper'); element_id_unique = elem.find('input[name="id_unique"]').val(); jxml.ajax.clearItemStyles(elem, element_id_unique); }); }, saveItemStyles : function() { this.docClick('.save-styles', function(elem) { jxml_item_styles = {}; elem = elem.parents('.form-wrapper'); element_id_unique = elem.find('input[name="id_unique"]').val(); elem.find('select, input:not([name="id_unique"])').each(function(e) { if (jxml_style_value = $(this).val()) { if ($(this).attr('type') == 'radio') { if (typeof($(this).attr('checked')) != 'undefined') { jxml_item_styles[$(this).attr('name')] = jxml_style_value; } } else { jxml_item_styles[$(this).attr('name')] = jxml_style_value; } } }); jxml.ajax.saveItemStyles(elem, element_id_unique, jxml_item_styles); }); }, editItemStyles : function() { this.docClick('.edit-styles', function(elem) { $('.edit-styles').removeClass('active'); elem.addClass('active'); element_id_unique = elem.closest('div:not(.button-container)').attr('data-id-unique'); jxml.ajax.getItemStyles(element_id_unique); }); }, getLayoutRemoveConfirmation : function() { this.docClick('.remove-layout', function(elem) { jxml.ajax.getLayoutRemoveConfirmation(elem.attr('data-layout-id')); }); }, removeLayout : function() { this.docClick('.remove-layout-confirm', function(elem) { hook_name = $('.nav.nav-tabs li.active a.layouts-tab').attr('data-tab-name'); jxml.ajax.removeLayout(elem.attr('data-layout-id'), hook_name); $.fancybox.close(); }); }, getLayoutRenameConfirmation : function() { this.docClick('.edit-layout', function(elem) { jxml.ajax.getLayoutRenameConfirmation(elem.attr('data-layout-id')); }); }, renameLayout : function() { this.docClick('.edit-layout-confirm', function(elem) { layout_name = elem.closest('.jxml-popup').find('input[name="layout_name"]').attr('value'); if (jxml.validate.layoutName(layout_name)) { jxml.ajax.renameLayout(elem.attr('data-layout-id'), layout_name); } else { error_container = elem.parent('div'); error_container.find('p.alert').remove(); error_container.prepend('' + jxml_layout_validate_error_text + '
'); } }); }, addWrapper : function() { this.docClick('.add-wrapper', function(elem) { jxml.layout.add.wrapper(elem); }); }, editWrapper : function() { this.docClick('.edit-wrapper-confirm', function(elem) { parentElem = elem.closest('.jxml-popup'); parentElem.find('.alert').remove(); specific_class = parentElem.find('input[name="wrapper-classes"]').val().trim(); if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } jxml.layout.edit.wrapper($('.edit-wrapper.active').closest('div:not(.button-container)'), specific_class); $.fancybox.close($('.edit-wrapper').removeClass('active')); }); }, editWrapperConfirmation : function() { this.docClick('.edit-wrapper', function(elem) { $('.edit-wrapper').removeClass('active'); elem.addClass('active'); fancyBoxOpen('wrapper', elem.closest('div:not(.button-container)').attr('data-specific-class')); }); }, addRow : function() { this.docClick('.add-row', function(elem) { jxml.layout.add.row(elem); }); }, editRowConfirmation : function() { this.docClick('.edit-row', function(elem) { $('.edit-row').removeClass('active'); elem.addClass('active'); fancyBoxOpen('row', elem.closest('div:not(.button-container)').attr('data-specific-class')); }); }, editRow : function() { this.docClick('.edit-row-confirm', function(elem) { parentElem = elem.closest('.jxml-popup'); parentElem.find('.alert').remove(); specific_class = parentElem.find('input[name="row-classes"]').val().trim(); if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } jxml.layout.edit.row($('.edit-row.active').closest('div:not(.button-container)'), specific_class); $.fancybox.close($('.edit-row').removeClass('active')); }); }, addColumnConfirmation : function() { this.docClick('.add-column', function(elem) { $('.add-column').removeClass('active'); elem.addClass('active'); fancyBoxOpen('col', elem); }); }, editColumnConfirmation : function() { this.docClick('.edit-column', function(elem) { $('.edit-column').removeClass('active'); elem.addClass('active'); fancyBoxOpen('col', elem.closest('div:not(.button-container)'), 'edit'); }); }, addColumn : function() { this.docClick('.add-column-confirm', function(elem) { parentElem = elem.closest('.jxml-popup'); specific_class = parentElem.find('input[name="col-specific-class"]').val().trim(); c_ = parentElem.find('select[name="jxml-cols-col"]').val(); xs_ = parentElem.find('select[name="jxml-cols-col-xs"]').val(); sm_ = parentElem.find('select[name="jxml-cols-col-sm"]').val(); md_ = parentElem.find('select[name="jxml-cols-col-md"]').val(); lg_ = parentElem.find('select[name="jxml-cols-col-lg"]').val(); xl_ = parentElem.find('select[name="jxml-cols-col-xl"]').val(); xxl_ = parentElem.find('select[name="jxml-cols-col-xxl"]').val(); if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } else if (c_ == '' && xs_ == '' && sm_ == '' && md_ == '' && lg_ == '' && xl_ == '' && xxl_ == '') { parentElem.prepend('' + jxml_cols_validate_error + '
'); return; } jxml.layout.add.col($('.add-column.active'), specific_class, c_, xs_, sm_, md_, lg_, xl_, xxl_); $.fancybox.close($('.add-column').removeClass('active')); }); }, editColumn : function() { this.docClick('.edit-column-confirm', function(elem) { parentElem = elem.closest('.jxml-popup'); specific_class = parentElem.find('input[name="col-specific-class"]').val().trim(); c_ = parentElem.find('select[name="jxml-cols-col"]').val(); xs_ = parentElem.find('select[name="jxml-cols-col-xs"]').val(); sm_ = parentElem.find('select[name="jxml-cols-col-sm"]').val(); md_ = parentElem.find('select[name="jxml-cols-col-md"]').val(); lg_ = parentElem.find('select[name="jxml-cols-col-lg"]').val(); xl_ = parentElem.find('select[name="jxml-cols-col-xl"]').val(); xxl_ = parentElem.find('select[name="jxml-cols-col-xxl"]').val(); if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } else if (c_ == '' && xs_ == '' && sm_ == '' && md_ == '' && lg_ == '' && xl_ == '' && xxl_ == '') { parentElem.prepend('' + jxml_cols_validate_error + '
'); return; } jxml.layout.edit.col($('.edit-column.active').closest('div:not(.button-container)'), specific_class, c_, xs_, sm_, md_, lg_, xl_, xxl_); $.fancybox.close($('.edit-column').removeClass('active')); }); }, addModule : function() { this.docClick('.add-module-confirm', function(elem) { parentElem = elem.closest('.jxml-popup'); specific_class = parentElem.find('input[name="module-classes"]').val().trim(); data_select_id = parentElem.find('select').attr('data-select-id'); module_name = parentElem.find('select[name="jxml_module_' + data_select_id + '"]').val(); public_module_name = parentElem.find('select[name="jxml_module_' + data_select_id + '"] option[value="' + module_name + '"]').text(); origin_hook = parentElem.find('select[name="jxml_module_' + data_select_id + '"] option[value="' + module_name + '"]:selected').attr('data-origin-hook'); if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } jxml.layout.add.module($('.add-module.active'), specific_class, module_name, public_module_name, origin_hook); $.fancybox.close($('.add-module').removeClass('active')); }); }, editModuleConfirmation : function() { this.docClick('.edit-module', function(elem) { $('.edit-module').removeClass('active'); elem.addClass('active'); var unique_id = elem.parents('div.module').attr('data-id-unique') $.ajax({ type : 'POST', url : jxml_theme_url + '&ajax', headers : {"cache-control" : "no-cache"}, dataType : 'json', async : false, data : { action : 'getCssClassesByUnique', unique_id : unique_id }, success : function(response) { fancyBoxOpen('module', elem.closest('div:not(.button-container)').attr('data-specific-class'), 'edit', '', response.classes, response.active); } }); }); }, editModule : function() { this.docClick('.edit-module-confirm', function(elem) { parentElem = elem.closest('.jxml-popup'); var specific_class = parentElem.find('input[name="module-classes"]').val().trim(); if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } var extra_css = parentElem.find('select[name="module-css"]').val(); if (typeof(extra_css) == 'undefined') { extra_css = ''; } jxml.layout.edit.module($('.edit-module.active').closest('div:not(.button-container)'), specific_class, '', '', '', extra_css); $.fancybox.close($('.edit-module').removeClass('active')); }); }, addExtraContent : function() { this.docClick('.add-extra-content-confirm', function(elem) { parentElem.find('p.alert').remove(); parentElem = elem.closest('.jxml-popup'); var contentID = parseInt(parentElem.find('.extra-content-type-selector[name="'+parentElem.find('select[name="extra_content_type"]').val()+'"]').val()); specific_class = parentElem.find('input[name="extra-content-classes"]').val().trim(); module_name = parentElem.find('select[name="extra_content_type"]').val() + '-' + contentID; if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } if (Number.isInteger(contentID) == false) { parentElem.prepend('' + jxml_id_validate_error + '
'); return; } jxml.layout.add.content($('.add-extra-content.active'), specific_class, module_name, '', ''); $.fancybox.close($('.add-module').removeClass('active')); }); }, editExtraContentConfirmation : function() { this.docClick('.edit-extra-content', function(elem) { $('.edit-extra-content').removeClass('active'); elem.addClass('active'); var unique_id = elem.parents('div.extra-content').attr('data-id-unique') $.ajax({ type : 'POST', url : jxml_theme_url + '&ajax', headers : {"cache-control" : "no-cache"}, dataType : 'json', async : false, data : { action : 'getCssClassesByUnique', unique_id : unique_id }, success : function(response) { fancyBoxOpen('content', elem.closest('div:not(.button-container)').attr('data-specific-class'), 'edit', '', response.classes, response.active); } }); }); }, editExtraContent : function() { this.docClick('.edit-extra-content-confirm', function(elem) { parentElem = elem.closest('.jxml-popup'); var specific_class = parentElem.find('input[name="extra-content-classes"]').val().trim(); if (error = jxml.validate.spClasses(specific_class)) { parentElem.prepend(error); return; } jxml.layout.edit.content($('.edit-extra-content.active').closest('div:not(.button-container)'), specific_class, '', '', '', ''); $.fancybox.close($('.edit-extra-content').removeClass('active')); }); }, selectSection : function() { this.docClick('#jxml-sections > ul > li', function(elem) { var section_name = elem.attr('data-section-name'); var section_text = elem.find('a').text(); elem.parents('.dropdown').find('button').text(section_text); $('#jxml-sections > ul > li.active').removeClass('active'); elem.addClass('active'); $('.jxmegalayout-nav > li:not(.jxml-tools_tab , .jxml-sections)').hide(); $('.jxmegalayout-nav > li[data-section="' + section_name + '"]').show(); $('.jxmegalayout-nav > li[data-section="' + section_name + '"]:first a').trigger('click'); }); }, optionOptimize : function() { this.docClick('#optionOptimize', function(elem) { jxml.ajax.optionOptimize(elem); }); }, optionDeoptimize : function() { this.docClick('#optionDeoptimize', function(elem) { jxml.ajax.optionDeoptimize(elem); }); }, init : function() { this.loadExtraContent(); this.extraContentReturnHome(); this.loadThemesContent(); this.saveExtraContent(); this.removeExtraContent(); this.exportExtraContent(); this.importExtraContent(); this.saveBuilderTheme(); this.removeBuilderTheme(); this.updateParentTheme(); this.updateParentThemeLibrary(); this.addLayoutForm(); this.addLayout(); this.loadLayoutContent(); this.deleteLayoutItem(); this.disableLayout(); this.enableLayout(); this.cleanImage(); this.cleanImageNone(); this.cleanItemStyles(); this.saveItemStyles(); this.editItemStyles(); this.getLayoutRemoveConfirmation(); this.removeLayout(); this.getLayoutRenameConfirmation(); this.renameLayout(); this.addWrapper(); this.editWrapper(); this.editWrapperConfirmation(); this.addRow(); this.editRowConfirmation(); this.editRow(); this.addColumn(); this.editColumn(); this.addColumnConfirmation(); this.editColumnConfirmation(); this.addModuleConfirmation(); this.addExtraContentConfirmation(); this.editModuleConfirmation(); this.editExtraContentConfirmation(); this.addModule(); this.addExtraContent(); this.editModule(); this.editExtraContent(); this.selectSection(); this.optionOptimize(); this.optionDeoptimize(); } }, validate : { layoutName : function(name) { if ($.trim(name) == '') { return false; } for (i = 0; i < name.length; i++) { if (i == 0 && name[i] == '-') { return false; } if (/^[a-zA-Z0-9-]*$/.test(name[i]) == false) { return false; } } return true; }, styleClr : function(content) { colorProhibitedString = "~!@$%^&*_+=`{}[]|\:;'<>/?-"; for (i = 0; i < colorProhibitedString.length; i++) { if (content.indexOf(colorProhibitedString[i]) != -1) { return false; } } return true; }, styleShdw : function(content) { prohibitedString = "~!@$%^&*_+=`{}[]|\:;'<>/?"; for (i = 0; i < prohibitedString.length; i++) { if (content.indexOf(prohibitedString[i]) != -1) { return false; } } return true; }, styleDmns : function(content) { if (content == 0) { return true; } dimension = content.substr(content.length - 2); value = content.replace(dimension, ''); if (!dimension || (dimension != 'px' && dimension != 'em') || !$.isNumeric(value) || !value) { return false; } return true; }, styleCheckErrors : function() { stylesBtn = $('.save-styles'); jxmlStyleErrors = false; $('.jxmegalayout-styles').find('input').each(function() { if ($(this).hasClass('error')) { jxmlStyleErrors = true; } }); if (jxmlStyleErrors) { stylesBtn.addClass('disabled'); } else { stylesBtn.removeClass('disabled'); } }, styleInput : function(elem) { jxml_input_content = elem.val(); jxml_input_type = elem.attr('data-type'); if ($.trim(jxml_input_content) == '') { elem.val(''); result = true; } else if (jxml_input_type == 'dmns') { result = this.styleDmns(jxml_input_content); } else if (jxml_input_type == 'shdw') { result = this.styleShdw(jxml_input_content); } else if (jxml_input_type == 'clr') { result = this.styleClr(jxml_input_content); } if (!result) { elem.addClass('error'); } else { elem.removeClass('error'); } this.styleCheckErrors(); }, spClasses : function(clasess) { jxml_prohibited_chars = "<>@!#$%^&*()+[]{}?:;|'\"\\,./~`="; jxml_classes_to_validate = clasess.trim().split(' '); if (jxml_classes_to_validate.length && jxml_classes_to_validate != '') { for (i = 0; i < jxml_classes_to_validate.length; i++) { if (!jxml_classes_to_validate[i][0].match(/^([a-z\(\)]+)$/i)) { return '' + jxml_class_validate_error + '
'; } for (k = 0; k < jxml_prohibited_chars.length; k++) { if (jxml_classes_to_validate[i].indexOf(jxml_prohibited_chars[k]) > -1) { return '' + jxml_class_validate_error + '
'; } } } } return false; } }, layout : { add : { wrapper : function(elem) { jxml.ajax.saveLayoutItem(false, elem, 'wrapper', '', '', '', '', '', '', '', '', '', '', '', '', ''); }, row : function(elem) { jxml.ajax.saveLayoutItem(false, elem, 'row', '', '', '', '', '', '', '', '', '', '', '', '', ''); }, col : function(elem, specific_class, col, col_xs, col_sm, col_md, col_lg, col_xl, col_xxl) { classes = 'col ' + col + ' ' + col_xs + ' ' + col_sm + ' ' + col_md + ' ' + col_lg + ' ' + col_xl + ' ' + col_xxl + ' ' + specific_class; jxml.ajax.saveLayoutItem(false, elem, 'col', classes, specific_class, col, col_xs, col_sm, col_md, col_lg, col_xl, col_xxl, '', '', '', ''); }, module : function(elem, specific_class, module_name, public_module_name, origin_hook) { classes = 'module ' + specific_class; jxml.ajax.saveLayoutItem(false, elem, 'module', classes, specific_class, '', '', '', '', '', '', '', module_name, public_module_name, origin_hook, ''); }, content : function(elem, specific_class, module_name, public_module_name, origin_hook) { classes = 'content ' + specific_class; jxml.ajax.saveLayoutItem(false, elem, 'content', classes, specific_class, '', '', '', '', '', '', '', module_name, public_module_name, origin_hook, ''); } }, edit : { wrapper : function(elem) { id_element = elem.attr('data-id'); id_unique = elem.attr('data-id-unique'); classes = 'wrapper sortable ' + id_unique + ' ' + specific_class; $('.jxmegalayout-admin .wrapper[data-id="' + id_element + '"]').attr('data-specific-class', specific_class).attr('class', classes); $('.jxmegalayout-admin .wrapper[data-id="' + id_element + '"] > article > .button-container .element-name').find('.identificator').text('(' + specific_class.replace(' ', ' | ') + ')'); jxml.ajax.saveLayoutItem(id_element, elem, 'wrapper', classes, specific_class, '', '', '', '', '', '', '', '', '', '', ''); }, row : function(elem, specific_class) { id_element = elem.attr('data-id'); id_unique = elem.attr('data-id-unique'); classes = 'row sortable ' + id_unique + ' ' + specific_class; $('.jxmegalayout-admin .row[data-id="' + id_element + '"]').attr('data-specific-class', specific_class).attr('class', classes); $('.jxmegalayout-admin .row[data-id="' + id_element + '"] > article > .button-container .element-name').find('.identificator').text('(' + specific_class.replace(' ', ' | ') + ')'); jxml.ajax.saveLayoutItem(id_element, elem, 'row', classes, specific_class, '', '', '', '', '', '', '', '', '', '', ''); }, col : function(elem, specific_class, col, col_xs, col_sm, col_md, col_lg, col_xl, col_xxl) { id_element = elem.attr('data-id'); id_unique = elem.attr('data-id-unique'); classes = 'col sortable ' + id_unique + ' ' + col + ' ' + col_xs + ' ' + col_sm + ' ' + col_md + ' ' + col_lg + ' ' + col_xl + ' ' + col_xxl + ' ' + specific_class; $('.jxmegalayout-admin .col[data-id="' + id_element + '"]').attr('data-specific-class', specific_class).attr('data-col', col).attr('data-col-xs', col_xs).attr('data-col-sm', col_sm).attr('data-col-md', col_md).attr('data-col-lg', col_lg).attr('data-col-xl', col_xl).attr('data-col-xxl', col_xxl).attr('class', classes); $('.jxmegalayout-admin .col[data-id="' + id_element + '"] > article > .button-container .element-name').find('.identificator').text('(' + specific_class.replace(' ', ' | ') + ')'); jxml.ajax.saveLayoutItem(id_element, elem, 'col', classes, specific_class, col, col_xs, col_sm, col_md, col_lg, col_xl, col_xxl, '', '', '', ''); }, module : function(elem, specific_class, module_name, public_module_name, origin_hook, extra_css) { id_element = elem.attr('data-id'); id_unique = elem.attr('data-id-unique'); module_name = elem.attr('data-module'); classes = 'module sortable ' + id_unique + ' ' + specific_class; $('.jxmegalayout-admin .module[data-id="' + id_element + '"]').attr('data-specific-class', specific_class).attr('class', classes); $('.jxmegalayout-admin .module[data-id="' + id_element + '"] > article > .button-container .module-name').find('.identificator').text('(' + specific_class.replace(' ', ' | ') + ')'); jxml.ajax.saveLayoutItem(id_element, elem, 'module', classes, specific_class, '', '', '', '', '', '', '', module_name, '', origin_hook, extra_css); }, content : function(elem, specific_class, module_name, public_module_name, origin_hook, extra_css) { id_element = elem.attr('data-id'); id_unique = elem.attr('data-id-unique'); module_name = elem.attr('data-extra-content'); classes = 'content sortable ' + id_unique + ' ' + specific_class; $('.jxmegalayout-admin .content[data-id="' + id_element + '"]').attr('data-specific-class', specific_class).attr('class', classes); $('.jxmegalayout-admin .content[data-id="' + id_element + '"] > article > .button-container .content-name').find('.identificator').text('(' + specific_class.replace(' ', ' | ') + ')'); jxml.ajax.saveLayoutItem(id_element, elem, 'content', classes, specific_class, '', '', '', '', '', '', '', module_name, '', origin_hook, extra_css); } } }, sortInit : function() { $('.jxmegalayout-admin, .jxmegalayout-admin article, .jxmegalayout-admin article article').sortable({ cursor : 'move', items : '> div.col, > div.row, > div.wrapper, > div.module, > div.content, > span > div.row, > span > div.wrapper', update : function(event, ui) { $(this).find('> div.sortable').each(function(index) { index = index + 1; $(this).attr('data-sort-order', index); $(this).find('.sort-order').text(index); }); jxml.ajax.updateSortOrders($(this)); } }); }, tooltipInit : function() { $('span.module-name').tooltip(), $('span.content-name').tooltip() }, multiselectInit : function() { $('.jxmegalayout-availible-pages').addClass('loaded'); $('.jxmegalayout-availible-pages').multiselect({ enableFiltering : true, optionClass : function(element) { return 'col-xs-6 col-sm-4'; }, buttonClass : 'btn btn-link', nonSelectedText : jxml_multiselect_all_text, filterPlaceholder : jxml_multiselect_search_text, onDropdownShow : function(event) { multiselect_temp = this.$button.parents('.jxlist-layout-buttons').find('select').val(); if (!multiselect_temp) { multiselect_temp = ''; } }, onDropdownHide : function(event) { var elem = $('.jxlist-layout-buttons .btn-group.open'); var hook_name = elem.parents('.jxpanel-content').find('input[name="jxml_hook_name"]').val(); var id_layout = elem.parents('.jxlist-layout-buttons').find('.jxlist-layout-btns').attr('data-layout-id'); var pages = elem.parents('.jxpanel-content').find('select[name="jxmegalayout-availible-pages"]').val(); var layout_status = 0; if (elem.parents('.jxpanel-content .jxlist-layout-buttons').find('a.use-layout').hasClass('hidden')) { var layout_status = 1; } multiselect_now = this.$button.parents('.jxlist-layout-buttons').find('select').val(); if (!multiselect_now) { multiselect_now = ''; if (!layout_status) { pages = 'empty'; } } if (multiselect_temp.toString() != multiselect_now.toString()) { jxml.ajax.enableLayout(hook_name, id_layout, pages, layout_status); } }, templates : { filter : '