1(function (_, $) { 2 (function ($) { 3 function _getTabTools(id) { 4 return $('.cm-tab-tools[id^="tools_' + id + '"]'); 5 } 6 function _getTabIds(id) { 7 var result_ids = ['content_' + id]; 8 var additional_ids = $('#content_' + id).data('caTabTargetId'); 9 if (additional_ids) { 10 result_ids.push(additional_ids); 11 } 12 _getTabTools(id).each(function () { 13 result_ids.push($(this).prop('id')); 14 }); 15 return result_ids.join(','); 16 } 17 function _switchTab(tab_id, tabs_elm, show) { 18 var id_obj = $('#content_' + tab_id); 19 var tab_tools = _getTabTools(tab_id); 20 if (show) { 21 id_obj.removeClass('hidden'); 22 tab_tools.removeClass('hidden'); 23 if (id_obj.hasClass('cm-hide-save-button')) { 24 $('.cm-save-buttons').addClass('hidden'); 25 } else { 26 $('.cm-save-buttons').removeClass('hidden'); 27 } 28 $.ceEvent('trigger', 'ce.tab.show', [tab_id, tabs_elm]); 29 } else { 30 id_obj.addClass('hidden'); 31 tab_tools.addClass('hidden'); 32 } 33 return true; 34 } 35 function _cloneTools(tab_id, prev_id) { 36 if (!tab_id || !prev_id) { 37 return; 38 } 39 var _prev_tools = _getTabTools(prev_id); 40 _prev_tools.each(function () { 41 var self = $(this); 42 var _new_id = self.prop('id').replace(prev_id, tab_id); 43 if (!$('#' + _new_id).length) { 44 var _new_tool = self.clone(); 45 _new_tool.children().remove(); 46 _new_tool.prop('id', _new_id).addClass('hidden').appendTo(self.parent()); 47 } 48 }); 49 } 50 var methods = { 51 switch: function (tab_id) { 52 if (!tab_id) { 53 return false; 54 } 55 var tabs_elm = $(this); 56 var ul = tabs_elm.data('ceTabs').ul; 57 var elm = tabs_elm.data('ceTabs').tabs[tab_id]; 58 if (!ul || !elm) { 59 return false; 60 } 61 62 // we set selected_section to keep active tab opened after form submit 63 // we do it for all forms to fix settings_dev situation: forms under tabs 64 let $tabs = $(tabs_elm); 65 if ($tabs.hasClass('cm-track')) { 66 let input_name = 'selected_section'; 67 if (typeof $tabs.data('caTabsInputName') !== 'undefined') { 68 input_name = $tabs.data('caTabsInputName') === '' ? 'selected_sub_section' : $tabs.data('caTabsInputName'); 69 } 70 $("input[name=".concat(input_name, "]")).val(tab_id); 71 } 72 if (elm.hasClass('cm-js') == false) { 73 return false; 74 } 75 var active_id = $('li.active:first', ul).prop('id'); 76 var content_id = 'content_' + tab_id; 77 $('li', ul).each(function () { 78 var self = $(this); 79 self.removeClass('active'); 80 _switchTab(self.prop('id'), tabs_elm, false); 81 }); 82 83 //Select clicked tab and show content 84 elm.addClass('active'); 85 var sub_tab = elm.parents('.cm-subtabs', ul); 86 if (sub_tab.length && elm.hasClass('cm-no-highlight')) { 87 sub_tab.addClass('active'); 88 } 89 if (elm.hasClass('cm-ajax-onclick') && !elm.hasClass('cm-ajax-onclick-active')) { 90 $.ceAjax('request', $('a', elm).prop('href'), { 91 result_ids: _getTabIds(tab_id), 92 callback: function (data) { 93 _switchTab(tab_id, tabs_elm, true); 94 } 95 }); 96 elm.addClass('cm-ajax-onclick-active'); 97 return true; 98 } 99 if (elm.hasClass('cm-ajax-onclick-active')) { 100 _switchTab(tab_id, tabs_elm, true); 101 return true; 102 } 103 if (elm.hasClass('cm-ajax') && $('#' + content_id).length == 0) { 104 const $tabsContent = tabs_elm.closest('#content_top_navigation').next('.cm-tabs-content').length ? tabs_elm.closest('#content_top_navigation').next('.cm-tabs-content') : tabs_elm; 105 106 // Create tab content if it is not exist 107 $tabsContent.after('<div id="' + content_id + '"></div>'); 108 _cloneTools(tab_id, active_id); 109 $.ceAjax('request', $('a', elm).prop('href'), { 110 result_ids: _getTabIds(tab_id), 111 callback: function (data) { 112 _switchTab(tab_id, tabs_elm, true); 113 } 114 }); 115 } else { 116 _switchTab(tab_id, tabs_elm, true); 117 } 118 return true; 119 }, 120 init: function () { 121 $(this).each(function () { 122 var tabs_elm = $(this); 123 $.ceEvent('trigger', 'ce.tab.pre_init', [tabs_elm]); 124 125 //Setup Tabs 126 var ul = $('ul:first', tabs_elm); 127 var list = $('li', ul); 128 if (!list.length) { 129 return; 130 } 131 var data = { 132 ul: ul, 133 tabs: {} 134 }; 135 list.each(function () { 136 var elm = $(this); 137 var tab_id = elm.prop('id'); 138 data.tabs[tab_id] = elm; 139 }); 140 tabs_elm.data('ceTabs', data); 141 list.on('click', function (e) { 142 var $clickedElm = $(e.target); 143 if ($clickedElm.data('caStopEventPropagation')) { 144 e.stopPropagation(); 145 return; 146 } 147 var elm = $(this); 148 var tab_id = elm.prop('id'); 149 if (tabs_elm.ceTabs('switch', tab_id)) { 150 e.preventDefault(); 151 } 152 return true; 153 }); 154 155 //Select default tab 156 var test; 157 if ((test = list.filter('.active')).length) { 158 test.trigger('click'); //Select tab with class 'active' 159 } else { 160 test = list.filter(':first').trigger('click'); //Select first tab 161 } 162 163 // create similar active tab tools 164 var active_id = test.prop('id'); 165 list.filter('.cm-ajax.cm-js').each(function () { 166 var self = $(this); 167 var tab_id = self.prop('id'); 168 169 // Check if the active content needs to be loaded 170 if (self.hasClass('active')) { 171 content = $('#content_' + tab_id).html().replace(/<!--.*?-->/, '').replace(/(^\s+|\s+$)/, ''); 172 if (content.length) { 173 return true; 174 } 175 } 176 if (!self.data('passed') && $('a', self).prop('href')) { 177 self.data('passed', true); 178 var id = 'content_' + tab_id; 179 // Check if block already exists 180 var block = $('#' + id); 181 if (!block.length) { 182 self.parents('.cm-j-tabs').eq(0).next().prepend('<div id="' + id + '"></div>'); 183 block = $('#' + id); 184 } 185 if (!self.hasClass('active')) { 186 block.addClass('hidden'); 187 } 188 _cloneTools(tab_id, active_id); 189 if (!self.hasClass('cm-ajax-onclick')) { 190 $.ceAjax('request', $('a', self).prop('href'), { 191 result_ids: _getTabIds(tab_id), 192 hidden: true, 193 repeat_on_error: true 194 }); 195 } 196 } 197 }); 198 return true; 199 }); 200 $.ceEvent('trigger', 'ce.tab.init'); 201 } 202 }; 203 $.fn.ceTabs = function (method) { 204 if (methods[method]) { 205 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 206 } else if (typeof method === 'object' || !method) { 207 return methods.init.apply(this, arguments); 208 } else { 209 $.error('ty.tabs: method ' + method + ' does not exist'); 210 } 211 }; 212 })($); 213})(Tygh, Tygh.$);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.