PageSourceSearch

https://legalweekly.com.ua/CMS/js/head_menu.js?tail=1787074617

js legalweekly.com.ua collected 2026-10-02 12:27:22 UTC 131,528 bytes, 2,692 lines download raw bytes

1let pageYOld = window.pageYOffset;
2let currentSelectors = old_selector = currentProp = null, isSliding = [],
3    is_outer = is_popup_vis = is_menu_color = is_menu_hover = is_compact_menu = is_for_menu = is_footer_inner = 0,
4    stylesMap, removingMap,
5    edit_enable = [0, 0], icon_top = [1, 1], width_fixed = [0, 0],
6    light_koef = 0.3, bright_koef = 0.7, ton_koef = 0, alpha_koef = 1, borders, is_shadow_checked = [null, null],
7    style_id = 0, saved_style = '', saved_style_arr, saved_settings = null, is_setting_changed = 0,
8    sliderWidth = 1, sliderHeight = 1, currentColorHex = '#000', currentColorRGB = 'rgb(0,0,0)', pointer, offsetX = 0,
9    offsetY = 0, startClientY = 0, isEditable, isWidthFixed, isIconTop, toggle_vars;
10const rgba2hex = (rgba) => `#${rgba.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)$/).slice(1).map((n, i) => (i === 3 ? Math.round(parseFloat(n) * 255) : parseFloat(n)).toString(16).padStart(2, '0').replace('NaN', '')).join('')}`
11const border_width = ['border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width'];
12const toggle_ids = ['editEnable', 'fixedWidth', 'iconPosition'], toggle_ars = [edit_enable, width_fixed, icon_top]; //isBodyEditable or another?
13//ajax_fields = ['enabled', 'fixed', 'icontop'], field_keys = ['e', 'f', 'i'];
14//let palette2 = document.querySelector('div.colorpicker__shadow');
15//console.log('palette', palette, palette2);
16let baseSelectors = null;
17/*$( ".has_setting" ).append( '<div style="padding-left:27%;width:140px; height: 40px; position: relative;">\n' +
18    '        <button data-v-2b7be7e0="" onclick="showBlockSettings(1);" style="border-radius: 15px;width: 140px; height: 40px; background-color: #eee;border: none;position: absolute; top:-50px;"><svg data-v-3075733c="" xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" aria-labelledby="cog-small" role="presentation" data-v-2b7be7e0=""><title data-v-3075733c="" id="cog-small" lang="en"></title><g data-v-3075733c="" fill="currentColor"><path data-v-3075733c="" d="M10.101 4L9.701 6.019C9.03957 6.26234 8.42191 6.61119 7.872 7.052L5.899 6.382L4 9.618L5.579 10.967C5.52 11.3082 5.48923 11.6537 5.487 12C5.487 12.353 5.523 12.697 5.579 13.034L4 14.383L5.899 17.617L7.872 16.948C8.42173 17.3891 9.03943 17.7379 9.701 17.981L10.1 20H13.9L14.3 17.981C14.9614 17.7377 15.5791 17.3888 16.129 16.948L18.102 17.618L20 14.382L18.421 13.033C18.48 12.6918 18.5108 12.3463 18.513 12C18.5108 11.6534 18.4801 11.3075 18.421 10.966L20 9.617L18.101 6.383L16.128 7.052C15.5781 6.61119 14.9604 6.26234 14.299 6.019L13.9 4H10.1H10.101ZM12 8.8C13.798 8.8 15.257 10.233 15.257 12C15.257 13.767 13.798 15.2 12 15.2C10.201 15.2 8.743 13.767 8.743 12C8.743 10.233 10.201 8.8 12 8.8Z" fill-rule="evenodd" clip-rule="evenodd"></path></g></svg> Settings_ </button>\n' +
19    '    </div>' );*/
20let reloadParentAfterSave = 0;
21const TEXT_STYLED_PROPS = [
22    'color','font-weight','font-style','text-decoration','text-transform',
23    'font-family','font-size','line-height','letter-spacing'
24];
25let saved_text_style = '';
26let saved_text_style_arr = null;
27let is_for_text = 0;
28function reloadParentPage() {
29    try {
30        if (window.parent && window.parent !== window) {
31            window.parent.location.reload();
32        } else {
33            window.location.reload();
34        }
35    } catch (e) {
36        window.location.reload();
37    }
38}
39//let setting_button = `<button data-v-2b7be7e0="" class="setting_editor disp_none" selector="body"><svg style="padding-top:1px;" data-v-3075733c="" xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" aria-labelledby="cog-small" role="presentation" data-v-2b7be7e0=""><title data-v-3075733c="" id="cog-small" lang="en"></title><g data-v-3075733c="" fill="currentColor"><path data-v-3075733c="" d="M10.101 4L9.701 6.019C9.03957 6.26234 8.42191 6.61119 7.872 7.052L5.899 6.382L4 9.618L5.579 10.967C5.52 11.3082 5.48923 11.6537 5.487 12C5.487 12.353 5.523 12.697 5.579 13.034L4 14.383L5.899 17.617L7.872 16.948C8.42173 17.3891 9.03943 17.7379 9.701 17.981L10.1 20H13.9L14.3 17.981C14.9614 17.7377 15.5791 17.3888 16.129 16.948L18.102 17.618L20 14.382L18.421 13.033C18.48 12.6918 18.5108 12.3463 18.513 12C18.5108 11.6534 18.4801 11.3075 18.421 10.966L20 9.617L18.101 6.383L16.128 7.052C15.5781 6.61119 14.9604 6.26234 14.299 6.019L13.9 4H10.1H10.101ZM12 8.8C13.798 8.8 15.257 10.233 15.257 12C15.257 13.767 13.798 15.2 12 15.2C10.201 15.2 8.743 13.767 8.743 12C8.743 10.233 10.201 8.8 12 8.8Z" fill-rule="evenodd" clip-rule="evenodd"></path></g></svg>{*setting_name*}</button>`;
40//$('.head_menu').addClass('left-icon');
41//console.log($('.head_menu'));
42if ((typeof is_partner !== 'undefined') && is_partner) {
43    //isBodyEditable = ((typeof is_body_editable !== 'undefined') && is_body_editable);
44    //isIconTop = ((typeof is_icon_top !== 'undefined') && is_icon_top);
45    //isWidthFixed  = ((typeof is_width_fixed !== 'undefined') && is_width_fixed), //unite
46    // setting_buttons = [], setting_containers = ((isEditable || isBodyEditable) ? document.querySelectorAll((isEditable ? '' : 'body > ') + '.setting_container') : []);
47    //toggle_vars = [isEditable, isWidthFixed, isIconTop];
48    toggle_vars = [isEditable = ((typeof is_editable !== 'undefined') && is_editable), 0, 1];
49    if (isEditable) document.body.classList.add('mp-interface-edit');
50    let setting_names = [L_section, L_block, L_heading, L_setting, L_block],
51        tooltip_names = [L_section_settings, L_block_settings, L_heading_settings, L_setting_2, L_block_settings],
52        setting_containers = [], setting_buttons = [], //partner_section
53        /* setting_selectors = [['.section_n > .setting_container',
54             '.main_page-phone_number > .setting_container, body > .head-block .setting_container', '', 'body > .setting_container'
55        // ], ['', '.partner_section .row > div',
56            // '.partner_section h1, .partner_section h2, .partner_section h3, .partner_section h4, .partner_section h5, .partner_section h6', ''
57             // 'h1, h2, h3, h4, h5, h6'
58         //], ['', '.partner_section .row > div', ''
59         ], ['h1, h2, h3, h4, h5, h6', '.partner_section .row > div'
60         ]];*/
61        setting_selectors = ['.row.sectionEdit > .setting_container',
62            '.section_n > .setting_container', '', 'body > .setting_container', '.main_page-phone_number > .setting_container, body > .head-block .setting_container , .main-menu-list.left-menu > .setting_container ,.nav-tab-item > .setting_container ,.nav-tab-item label > .setting_container, #tab-content > .setting_container , .default-tab-content > .setting_container , .right-menu-main [data-menu-id] > .setting_container ,.left-menu-main [data-menu-id] > .setting_container, .itemcategory .setting_container'
63        ];
64    /*for (let i = 0, total_sel = '', selector = ':not(.row) h'; i < 3; i+=2, selector = '.row h', total_sel = ''){
65    for (let j = 1; j < 7; j++){
66        total_sel += selector + j + ', ';
67     }
68        setting_selectors[1][i] = total_sel.slice(0, -2);
69    }
70    for(let a of Array.from($('.section_n '+setting_selectors[1][0]))){
71        //console.log('a is' ,a);
72        //a.style.color = 'pink';
73    }*/
74    //let headingSelectors = 'h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child';
75    let headingSelectors = 'h1.title, h2.title, h3.title, h4.title, h5.title, h6.title,h1.title-edit, h2.title-edit, h3.title-edit, h4.title-edit, h5.title-edit';
76    for (let i = (isEditable ? 0 : 3), f = (isEditable ? 5 : 4), selector = section = section_name = targets = ''; i < f; i++) {
77        if (selector = setting_selectors[i]) {
78            setting_containers = Array.from(document.querySelectorAll(selector)); //document.querySelectorAll('.main_page-phone_number > .setting_container, body > .head-block > div > .setting_container'); //inner
79
80            for (let container of setting_containers) {
81                processSectionItem(container, i, 0);
82
83                if (i == 1) {//or i < 2
84
85                    console.log("container", container);
86                    section = container.parentElement;
87                    section_name = section.classList.item(section.classList.length - 1);
88
89                    // Находим все заголовки и обрабатываем каждый
90                    const headings = section.querySelectorAll(headingSelectors);
91                    headings.forEach(heading => {
92                        processSectionItem(heading, 2, '.' + section_name);
93                    });
94
95
96                    // console.log("container",container);
97                    // processSectionItem((section = container.parentElement).querySelector(headingSelectors), 2, '.' + (section_name = section.classList.item(section.classList.length - 1)));
98
99                    //console.log('section.classList[-1]', section.classList,section_name);
100                    /*for(let k = 0, row, rows = section.querySelectorAll('.row.sectionEdit'); k < rows.length; k++){
101                        processSectionItem(row = rows[k], 0, col_selector = `.${section_name} .container-fluid > div:nth-child(${k+1})`);
102                        for(let m = 0, col, col_selector, row = rows[k], cols = row.children; m < cols.length - 1; m++) {
103                            processSectionItem(col = cols[m], 1, col_selector = `.${section_name} .container-fluid > div:nth-child(${k+1}) > div:nth-child(${m+1})`);
104                            processSectionItem(col.querySelector(headingSelectors), 2, col_selector);
105                        }
106                    }
107                    // console.log('section is', section, container);
108                   //console.log('setting_selectors[1]', Array.from($('.section_n '+setting_selectors[1][0])));
109                    */
110                }
111            }
112        }
113    }
114    //if (typeof is_editable !== 'undefined') {
115//if(is_editable){
116    //shows the popup window for block settings
117    //let setting_buttons = document.querySelectorAll('.setting_editor[selector]');
118    //console.log('setting_buttons', setting_buttons);
119    let body_button = $('button.setting_editor[selector="body.partner"]');
120    for (let button of setting_buttons) {
121
122        //console.log(`button.getAttribute(selector)`, button.getAttribute('selector'));
123        // console.log('button is 0', button); //body .section1
124        const selector = button.getAttribute('selector');
125
126        //'body > div.wrapper > section:nth-of-type(2)' : selector_tmp);
127        //const selector = ((((selector_tmp = button.getAttribute('selector')) == 'body .section1') && is_landing) ? 'body > div.wrapper > section:nth-of-type(2)' : selector_tmp);
128        if (!selector || (is_landing && !selector.includes('wrapper'))) {
129
130            continue;
131        }
132        button.addEventListener("mouseover", () => {
133            for (let otherButton of setting_buttons) {
134                if (otherButton !== button) {
135                    if (otherButton.classList.contains('zoom-in-animation')) {
136                        otherButton.classList.remove('zoom-in-animation');
137                        otherButton.classList.add('zoom-open');
138                        otherButton.classList.add('zoom-out-animation');
139                    }
140                }
141            }
142        });
143        button.addEventListener("mouseout", () => {
144            for (let otherButton of setting_buttons) {
145                if (otherButton !== button) {
146                    if (otherButton.classList.contains('zoom-open')) {
147                        otherButton.classList.remove('zoom-out-animation');
148                        otherButton.classList.remove('zoom-open');
149                        otherButton.classList.add('zoom-in-animation');
150                    }
151                }
152            }
153        });
154        // console.log('button is 1', button);
155        button.addEventListener("click", () => {
156            // console.log('button is 2', button);
157            showBlockSettings(0, selector);
158        });
159        let selector_first = (selector.includes(';') ? selector.slice(0, selector.indexOf(';')) : selector);
160
161        //console.log(`selector_first`, selector_first, $(selector_first), $('.section2583 .container-fluid > div:nth-child(2) > div:nth-child(2)'));
162        /*if(selector_first == 'body'){
163            selector_first = 'body > div.main-content';
164        }*/
165
166        //let disp_class = (selector_first == 'body' ? )
167        $(selector_first).on("mouseenter", () => {
168//alert(selector_first);
169            button.classList.remove('zoom-out-animation');
170            // button.classList.remove('disp_none');
171            button.classList.add('zoom-in-animation');
172            if (selector_first != 'body.partner') {
173                body_button.addClass('body_disp_none');
174            }
175        });
176        $(selector_first).on("mouseleave", () => {
177            button.classList.add('zoom-out-animation');
178            // button.classList.add('disp_none');
179            button.classList.remove('zoom-in-animation');
180            //console.log('selector_first 108',selector_first, $(selector_first));
181            if (selector_first != 'body.partner') {
182                body_button.removeClass('body_disp_none');
183            }
184        });
185    }
186    /*for(let a of document.querySelectorAll('*[data-tooltip]')){
187        console.log('a is ', a)
188    }*/
189    let showing = false;
190    //console.log('a.mp_edit', document.querySelectorAll('a.mp_edit'));
191    /*if(isEditable){
192        $('a.mp_edit:has( > .fa-plus)').attr('data-tooltip', L_add_section);
193        setTimeout(()=>{$('a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit);}, 2000);
194    } else {
195        setTimeout(()=>{$('a.mp_edit:has( > .fa-pencil), a.mp_edit:has( > .fa-plus)').remove();
196            $('div.sectionAdminWrap').addClass("hidden_vis");}, 2000);
197    }*/
198
199
200    // Какие свойства показываем в styled (можешь расширить список при желании)
201    const STYLED_PROPS = [
202        'color', 'font-weight', 'font-style', 'text-decoration', 'text-transform',
203        'font-family', 'font-size', 'line-height', 'letter-spacing'
204    ];
205    function getMenuLinkSelector(selector_first) {
206        return `${selector_first} a`;
207    }
208    function stripA(sel) {
209        return (sel || '').trim().replace(/\s+a\s*$/i, '').trim();
210    }
211    function rgbAllToHex(cssText) {
212        return cssText.replace(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d*\.?\d+))?\)/g, (m)=>rgba2hex(m));
213    }
214
215    function buildLinkStyleString(selector_first, css_advanced_sheet) {
216        const linkSel = getMenuLinkSelector(selector_first);
217        console.log("linkSel",linkSel);
218        const props = {};
219
220        console.log("test19");
221
222        if (css_advanced_sheet) {
223            for (const rule of (css_advanced_sheet.cssRules || css_advanced_sheet.rules)) {
224                console.log("test191");
225                if (!rule.selectorText) continue;
226                if (rule.selectorText.trim() === linkSel) {
227                    console.log("test192");
228                    for (const p of STYLED_PROPS) {
229                        const v = rule.style.getPropertyValue(p);
230                        console.log(v);
231                        if (v) props[p] = v.trim();
232                    }
233                }
234            }
235        }
236        const $firstLink = $(linkSel).not('.mp_edit, .url-r').first();
237        if ($firstLink.length) {
238            const comp = getComputedStyle($firstLink[0]);
239            for (const p of STYLED_PROPS) {
240                if (!props[p]) {
241                    const v = comp.getPropertyValue(p);
242                    if (v) props[p] = v.trim();
243                }
244            }
245        }
246        let out = '';
247        for (const p of STYLED_PROPS) {
248            if (props[p]) {
249                let v = props[p];
250                if (p.includes('color') && /rgba?/.test(v)) v = rgba2hex(v);
251                out += `${p}: ${v}; `;
252            }
253        }
254        return rgbAllToHex(out).trim();
255    }
256    function getTextSelector(selector_first) {
257        return stripA(selector_first);
258    }
259    function normalizeImportant(v) {
260        if (v == null) return v;
261        v = ('' + v).trim();
262        if (!v) return v;
263        return /!important/i.test(v) ? v : (v + ' !important');
264    }
265    function buildStyledStringFromObj(obj) {
266        let out = '';
267        for (const p of TEXT_STYLED_PROPS) {
268            if (obj[p]) {
269                out += `${p}: ${normalizeImportant(obj[p]).replace(/\s*!important\s*/gi,'').trim()} !important; `;
270            }
271        }
272        return out.trim();
273    }
274    function buildTextStyleString(selector_first, css_advanced_sheet) {
275        const textSel = getTextSelector(selector_first);
276        const props = {};
277        if (css_advanced_sheet) {
278            for (const rule of (css_advanced_sheet.cssRules || css_advanced_sheet.rules)) {
279                if (!rule.selectorText) continue;
280                if (rule.selectorText.trim() === textSel) {
281                    for (const p of TEXT_STYLED_PROPS) {
282                        const v = rule.style.getPropertyValue(p);
283                        if (v) props[p] = v.trim();
284                    }
285                }
286            }
287        }
288        const $el = $(textSel).first();
289        if ($el.length) {
290            const comp = getComputedStyle($el[0]);
291            for (const p of TEXT_STYLED_PROPS) {
292                if (!props[p]) {
293                    const v = comp.getPropertyValue(p);
294                    if (v) props[p] = v.trim();
295                }
296            }
297        }
298        let out = '';
299        for (const p of TEXT_STYLED_PROPS) {
300            if (props[p]) {
301                let v = props[p];
302                if (p.includes('color') && /rgba?/.test(v)) v = rgba2hex(v);
303                out += `${p}: ${v}; `;
304            }
305        }
306        return rgbAllToHex(out).trim();
307    }
308
309    document.onmouseout = function () {
310        if (showing) {
311            document.body.removeChild(showing);
312            showing = false;
313        }
314    };
315    document.onmousemove = function (e) {
316        if (showing) {
317            document.body.removeChild(showing);
318            showing = false;
319        }
320        var target = e.target;
321
322        while (target !== this) {
323            var tooltip = target.getAttribute('data-tooltip');
324            if (tooltip) break;
325            target = target.parentNode;
326        }
327
328        if (!tooltip) return;
329
330        const showTooltip = function (text, elem, x, y) {
331            var tooltipElem = document.createElement('div');
332            tooltipElem.className = 'tooltip_souvenir';
333            tooltipElem.innerHTML = text;
334            document.body.appendChild(tooltipElem);
335            var left = x + 50;
336            var top = y - 50;
337            tooltipElem.style.left = left + 'px';
338            tooltipElem.style.top = top + 'px';
339            tooltipElem.style.zIndex = 1200;
340
341            return tooltipElem;
342        };
343
344        showing = showTooltip(tooltip, target, e.pageX, e.pageY);
345    };
346
347    /*$('#editEnableBody').on('change', (e)=>{
348        edit_enable[1] = Number(!(edit_enable[1]));
349        console.log(edit_enable);
350    });
351    $('#iconPosition').on('change', (e)=>{
352        icon_left[1] = Number(!(icon_left[1]));
353        console.log(icon_left);
354    });*/
355    /*setting_containers[0] = document.querySelectorAll('section_n > .setting_container');
356    setting_containers[1] = document.querySelectorAll('.main_page-phone_number > .setting_container, body > .head-block > div > .setting_container'); //inner
357    setting_containers[2] = document.querySelectorAll('.partner_section > h1, .partner_section > h2, .partner_section > h3, .partner_section > h4, .partner_section > h5, .partner_section > h6');*/
358    //setting_containers = document.querySelectorAll((isEditable ? '' : 'body > ') + '.setting_container');
359    //console.log(isEditable, isBodyEditable, 'setting_containers', setting_containers);
360    if (isEditable) {
361        if (is_landing) {
362            $(".partner_section").removeClass('partner_section');
363            $("body > .wrapper > section:has( > .setting_container)").addClass('partner_section');
364        } else {
365            $("div.overhead, div.head-main, div.main_page-phone_number, div.right-menu-main [data-menu-id], .main-menu-list [data-menu-id], .left-menu-root, div.left-menu-main  [data-menu-id], .main-menu-list.left-menu, .default-tab-content").addClass('partner_section');
366            $(".nav-tab-item")
367                .not("#structureItem-tab .nav-tab-item, #descriptor-tab .nav-tab-item, #album-tab .nav-tab-item, #pageSections-tab .nav-tab-item, #structureItem-advanced .nav-tab-item, #pageSections-tab-mode .nav-tab-item, #settings-tab .nav-tab-item")
368                .addClass('partner_section');
369        }
370    }
371    if (is_landing) { //make better solution
372        //$("*[selector='body .section1']").attr('selector', 'body>div.wrapper>section:nth-of-type(2)');
373    }
374
375    //enableEdit(isBodyEditable, 1);
376    setToggles(1);
377
378    for (const type of ['hue', 'alpha', 's']) {
379        const is2d = type == 's';
380        const selector = (is2d ? '.colorpicker__wrapper.colors .vc-sketch-saturation-wrap' : `.colorpicker__wrapper.colors .vc-${type}-container`);
381        $(selector).on('mousedown', (e) => {
382            isSliding[type] = 1;
383            pointer = `.vc-${type == 's' ? 'saturation' : type}-pointer`;
384            sliderWidth = parseFloat($(selector).css("width"));
385            if (is2d) {
386                sliderHeight = parseFloat($(selector).css("height"));
387            }
388            setOffsetVars(e, is2d);
389            onColorSliderMove(type, offsetX, offsetY);
390        });
391
392        $(selector).on('mousemove', (e) => {
393            if (isSliding[type]) {
394                setOffsetVars(e, is2d);
395                onColorSliderMove(type, offsetX, offsetY);
396            }
397        });
398
399        // $('.vc-hue-container, .vc-alpha-container, .vc-sketch-saturation-wrap').on('mouseup', ()=>{
400        $(selector).on('mouseup', () => {
401            isSliding[type] = 0;
402            changeStyleCss(currentProp, currentColorHex, 0, 1);
403        });
404    }
405
406    //color_display
407    $('.color_display').bind('click', (e) => {
408        currentProp = e.target.getAttribute('target_prop');
409        is_for_text = $(e.target).closest("section.tab-section[value='text']").length ? 1 : 0;
410        if (currentProp) {
411            if (currentProp == 'menu-color') {
412
413                old_selector = currentSelectors;
414                if (!is_menu_color) {
415                    is_menu_color = 1;
416                }
417            } else if (currentProp == 'menu-hover') {
418                old_selector = currentSelectors;
419                if (!is_menu_hover) {
420                    is_menu_hover = 1;
421                }
422            } else if (currentProp == 'background-color-compact') {
423                old_selector = currentSelectors;
424                if (!is_compact_menu) {
425                    is_compact_menu = 1;
426                }
427                console.log("is_compact_menu");
428            }
429            currentColorRGB = e.target.style.backgroundColor;
430            console.log(currentColorRGB);
431            currentColorHex = (rgba2hex(currentColorRGB)).toUpperCase();
432            console.log(currentColorHex);
433            setPaletteVisible(1, currentProp);
434        }
435    });
436
437    $('.colorpicker__item').bind('click', (e) => {
438            if (currentProp) {
439                changeColorInput(rgba2hex(currentColorRGB = e.target.style.backgroundColor));
440                console.log("change");
441            }
442        }
443    );
444    $('ul.colorpicker__tabs > li.colorpicker__tab').bind('click', (e) => {
445        chooseColorTab(e.target);
446    });
447
448    let scroll_container = '.colorpicker__pallete .ps__rail-y'; //check
449    $(scroll_container).on('mousedown', (e) => {
450        isSliding['pltY'] = 1;
451        pointer = scroll_container + ` .ps__thumb-y`;
452        sliderHeight = parseFloat($(scroll_container).css("height"));
453        //startClientY = e.currentTarget.getBoundingClientRect.y;
454        //startClientY = e.clientY;
455        //setOffsetVars(e, is2d);
456        //onColorSliderMove(type, offsetX, offsetY);
457        // console.log('targets are ', e.target, e.currentTarget, e.offsetY, e.target.parentNode.offsetTop, e.currentTarget.offsetTop, e.currentTarget.offsetY, e.offsetParent, e);
458        if (is_outer = e.target.className.includes('rail')) {
459            onPaletteScrolling(e);
460        } else {
461            startClientY = document.querySelector(scroll_container).getBoundingClientRect().y + e.offsetY;
462        }
463    });
464
465    $(scroll_container).on('mousemove', (e) => {
466        if (isSliding['pltY']) {
467            onPaletteScrolling(e);
468        }
469    });
470
471    // Обработчик для ползунка прозрачности в палитре
472    const alphaContainerPalette = '.palettes .vc-alpha-container';
473    $(alphaContainerPalette).on('mousedown', (e) => {
474        isSliding['alpha_palette'] = 1;
475        pointer = `.palettes .vc-alpha-pointer`;
476        sliderWidth = parseFloat($(alphaContainerPalette).css("width"));
477        setOffsetVars(e, false);
478        onAlphaSliderMovePalette(offsetX);
479    });
480
481    $(alphaContainerPalette).on('mousemove', (e) => {
482        if (isSliding['alpha_palette']) {
483            setOffsetVars(e, false);
484            onAlphaSliderMovePalette(offsetX);
485        }
486    });
487
488    $(alphaContainerPalette).on('mouseup', () => {
489        isSliding['alpha_palette'] = 0;
490        changeStyleCss(currentProp, currentColorHex, 0, 1);
491    });
492
493    function onAlphaSliderMovePalette(offsetX) {
494        let left = Math.round(offsetX) / sliderWidth * 100;
495        $(pointer).css('left', left.toFixed(4) + '%');
496
497        // Обновляем прозрачность
498        alpha_koef = offsetX / sliderWidth;
499
500        // Обновляем градиент
501        const currentColor = hexToRgb(currentColorHex);
502        $('.palettes .vc-alpha-gradient').css('background',
503            `linear-gradient(to right, rgba(${currentColor.r}, ${currentColor.g}, ${currentColor.b}, 0) 0%, rgb(${currentColor.r}, ${currentColor.g}, ${currentColor.b}) 100%)`);
504
505        // Обновляем цвет с учетом прозрачности
506        const rgbaColor = `rgba(${currentColor.r}, ${currentColor.g}, ${currentColor.b}, ${alpha_koef})`;
507        changeColorInput(rgba2hex(rgbaColor));
508    }
509
510    let isBoldActive = false;
511
512    // Функция переключения жирного стиля
513    function toggleBoldStyle() {
514        isBoldActive = !isBoldActive;
515        updateBoldButton(isBoldActive);
516        changeStyleCss('font-weight', isBoldActive ? 'bold' : 'normal');
517    }
518
519    function updateBoldButton(isBoldActive) {
520
521        const boldButton = document.getElementById('boldButton');
522        if (isBoldActive) {
523            boldButton.style.backgroundColor = '#8B4513'; // Коричневый
524            boldButton.style.color = 'white';
525        } else {
526            boldButton.style.backgroundColor = '#f0f0f0';
527            boldButton.style.color = 'black';
528        }
529    }
530
531    let isTextDecorationActive = false;
532
533    // Функция переключения подчёркивание
534    function toggleTextDecorationStyle() {
535        isTextDecorationActive = !isTextDecorationActive;
536        updateTextDecorationButton(isTextDecorationActive);
537        changeStyleCss('text-decoration', isTextDecorationActive ? 'underline' : 'none');
538    }
539
540    function updateTextDecorationButton(isTextDecorationActive) {
541
542        const textDecorationButton = document.getElementById('textDecorationButton');
543        if (isTextDecorationActive) {
544            textDecorationButton.style.backgroundColor = '#8B4513'; // Коричневый
545            textDecorationButton.style.color = 'white';
546        } else {
547            textDecorationButton.style.backgroundColor = '#f0f0f0';
548            textDecorationButton.style.color = 'black';
549        }
550    }
551
552    let isItalicsActive = false;
553
554    // Функция переключения курсива
555    function toggleItalicsStyle() {
556        isItalicsActive = !isItalicsActive;
557        updateItalicsButton(isItalicsActive);
558        changeStyleCss('font-style', isItalicsActive ? 'italic' : 'normal');
559    }
560
561    function updateItalicsButton(isItalicsActive) {
562
563        const italicButton = document.getElementById('italicsButton');
564        if (isItalicsActive) {
565            italicButton.style.backgroundColor = '#8B4513'; // Коричневый
566            italicButton.style.color = 'white';
567        } else {
568            italicButton.style.backgroundColor = '#f0f0f0';
569            italicButton.style.color = 'black';
570        }
571    }
572
573    let isTextTransformActive = false;
574
575    // Функция переключения курсива
576    function toggleTextTransformStyle() {
577        isTextTransformActive = !isTextTransformActive;
578        updateTextTransformButton(isTextTransformActive);
579        changeStyleCss('text-transform', isTextTransformActive ? 'uppercase' : 'none');
580    }
581
582    function updateTextTransformButton(isTextTransformActive) {
583
584        const textTransformButton = document.getElementById('textTransformButton');
585        if (isTextTransformActive) {
586            textTransformButton.style.backgroundColor = '#8B4513'; // Коричневый
587            textTransformButton.style.color = 'white';
588        } else {
589            textTransformButton.style.backgroundColor = '#f0f0f0';
590            textTransformButton.style.color = 'black';
591        }
592    }
593
594// Функция для преобразования HEX в RGB
595    function hexToRgb(hex) {
596        // Удаляем # если есть
597        hex = hex.replace('#', '');
598
599        // Преобразуем 3-символьный HEX в 6-символьный
600        if (hex.length === 3) {
601            hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
602        }
603
604        // Получаем компоненты цвета
605        const r = parseInt(hex.substring(0, 2), 16);
606        const g = parseInt(hex.substring(2, 4), 16);
607        const b = parseInt(hex.substring(4, 6), 16);
608
609        return {r, g, b};
610    }
611
612// Модифицируем обработчик клика по цвету в палитре
613    $('.colorpicker__item').bind('click', (e) => {
614        if (currentProp) {
615            const rgbColor = e.target.style.backgroundColor;
616            currentColorRGB = rgbColor;
617            currentColorHex = rgba2hex(rgbColor).toUpperCase();
618
619            // Обновляем градиент прозрачности для нового цвета
620            const rgbValues = rgbColor.match(/\d+/g);
621            $('.palettes .vc-alpha-gradient').css('background',
622                `linear-gradient(to right, rgba(${rgbValues[0]}, ${rgbValues[1]}, ${rgbValues[2]}, 0) 0%, rgb(${rgbValues[0]}, ${rgbValues[1]}, ${rgbValues[2]}) 100%)`);
623
624            // Сбрасываем ползунок прозрачности в 100%
625            $('.palettes .vc-alpha-pointer').css('left', '100%');
626            alpha_koef = 1;
627
628            changeColorInput(currentColorHex);
629        }
630    });
631
632
633    // $('.vc-hue-container, .vc-alpha-container, .vc-sketch-saturation-wrap').on('mouseup', ()=>{
634    /*$(scroll_container).on('mouseout', (e)=>{
635        if(e.target.className.includes('ps__rail-y')){
636        isSliding['pltY'] = 0;
637        }
638    });*/
639
640    $(scroll_container).on('mouseup mouseout', (e) => {
641        isSliding['pltY'] = 0;
642    });
643
644    //$('#settings_popup input[target_prop]').each(function(){ //is_shadow_checked
645    //  let prop_name = tg_prop = $( this)[0].getAttribute('target_prop')
646
647    $('div.dashboard-popup__content ul.nav.nav-pills.bordered-tabs > li.nav-tab-item > label.page-tab[value]').on('click', (e) => {
648//console.log(e.target);
649        const labelEl = e.currentTarget;
650        const tabVal  = labelEl.getAttribute('value');
651
652
653        if (tabVal === 'block' && baseSelectors) {
654            const baseFirst = (baseSelectors.includes(';')
655                ? baseSelectors.slice(0, baseSelectors.indexOf(';'))
656                : baseSelectors).trim();
657
658
659            if ($(baseFirst).is('.main-menu-list.left-menu')) {
660                currentSelectors = baseSelectors;
661                is_for_menu = 0;
662                is_menu_color = 0;
663                is_menu_hover = 0;
664            }
665        }
666        if (e.target.classList.contains('active')) {
667            return;
668        }
669        let active_tab = $('div.dashboard-popup__content ul.nav.nav-pills.bordered-tabs > li.nav-tab-item > label.page-tab.active')[0];
670        active_tab.classList.remove('active');
671        e.target.classList.add('active');
672        //console.log(active_tab, active_tab.getAttribute('value'), $(`div.dashboard-popup__content section.tab-section[value='${active_tab.value}']`));
673        $(`div.dashboard-popup__content section.tab-section[value='${active_tab.getAttribute('value')}']`).css('display', 'none');
674        $(`div.dashboard-popup__content section.tab-section[value='${e.target.getAttribute('value')}']`).css('display', 'block');
675
676    });
677
678    /* $("#bg_style_select").on('change', (e)=>{
679         //console.log( 'bg_style_select', e.target.value);
680         $("#bg_style").val(e.target.value);
681         changeStyleCss('repeat', e.target.value);
682              });*/
683
684
685    function onSelectPropVal(prop, val) {
686        if (prop && val) {
687            if (prop == 'repeat') {
688                $("#bg_style").val(val);
689            } else if (prop == 'font-family' && currentSelectors == 'body > div.main_page-phone_number') {
690                is_footer_inner = 1;
691            } else if (prop == 'menu-font-family') {
692                is_for_menu = 1;
693                prop = 'font-family'; //is_for_menu
694            }
695            changeStyleCss(prop, val);
696        }
697    }
698
699
700    function processSectionItem(item, i = 0, selector = '') {
701        if (document.documentElement.classList.contains('mp-mobile-admin') ||
702            window.innerWidth <= 767 ||
703            Math.min(window.screen.width, window.screen.height) <= 767) {
704            return;
705        }
706
707        //console.log("test8",selector);
708        if (selector != 0) {
709            console.log("sel1", item);
710        }
711        if (!item) {
712            return;
713        }
714        if (selector != 0) {
715            $(item).css("position", "relative");
716            $(item).css("border", "1px dashed transparent");
717            $(item).hover(
718                function () {
719                    $(this).css("border", "1px dashed black");
720                },
721                function () {
722                    $(this).css("border", "1px dashed transparent");
723                }
724            );
725        }
726        //console.log("test8",selector);
727        if (selector) {
728            let container = `<div class="setting_container" style="left: 0; right: 0; margin: 0 auto; bottom: -25px" selector="${i == 2 ? (selector = selector + ' ' + item.tagName.toLowerCase()) : selector}"></div>`
729            item.innerHTML = (i ? container + item.innerHTML : item.innerHTML + container);
730            item = item.querySelector(".setting_container");
731        } else {
732            //item.setAttribute('data-tooltip', tooltip_names[i]);
733        }
734        let button_html = `<button data-v-2b7be7e0="" class="setting_editor " data-tooltip="${tooltip_names[i]}" selector="${selector ? selector : item.getAttribute('selector')}"><svg data-v-3075733c="" xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0.5 0.5 25 25" aria-labelledby="cog-small" role="presentation" data-v-2b7be7e0=""><title data-v-3075733c="" id="cog-small" lang="en"></title><g data-v-3075733c="" fill="currentColor"><path data-v-3075733c="" d="M10.101 4L9.701 6.019C9.03957 6.26234 8.42191 6.61119 7.872 7.
734052L5.899 6.382L4 9.618L5.579 10.967C5.52 11.3082 5.48923 11.6537 5.487 12C5.487 12.353 5.523 12.697 5.579 13.034L4 14.383L5.899 17.617L7.872 16.948C8.42173 17.3891 9.03943 17.7379 9.701 17.981L10.1 20H13.9L14.3 17.981C14.9614 17.7377 15.5791 17.3888 16.129 16.948L18.102 17.618L20 14.382L18.421 13.033C18.48 12.6918 18.5108 12.3463 18.513 12C18.5108 11.6534 18.4801 11.3075 18.421 10.966L20 9.617L18.101 6.383L16.128 7.052C15.5781 6.61119 14.9604 6.26234 14.299 6.019L13.9 4H10.1H10.101ZM12 8.8C13.798 8.8 15.257 10.233 15.257 12C15.257 13.767 13.798 15.2 12 15.2C10.201 15.2 8.743 13.767 8.743 12C8.743 10.233 10.201 8.8 12 8.8Z" fill-rule="evenodd" clip-rule="evenodd"></path></g></svg>
735<!--<span${i == 2 ? ' style="top: 4px;"' : ''}>${setting_names[i]}</span>-->
736</button>`; //${L_setting}
737        item.innerHTML = button_html + item.innerHTML;
738        setting_buttons.push(item.querySelector('.setting_editor'));
739
740        function checkHover(e, element) {
741            const rect = element[0].getBoundingClientRect();
742            const adminWrap = element.find('div.sectionAdminWrap:has( > .mp_edit > .fa-plus)');
743
744            if (e.clientY - rect.top > -100 && e.clientY - rect.top < 0) {
745                adminWrap.find(".mp_edit").addClass("scale_one");
746                adminWrap.find(".mp_edit").removeClass("scale_none");
747            } else {
748                adminWrap.find(".mp_edit").removeClass("scale_one");
749            }
750        }
751
752        if (isEditable && (i == 0)) {
753            document.addEventListener('mousemove', function (event) {
754                checkHover(event, $(item.parentElement));
755
756            });
757            item.parentElement.addEventListener('mousemove',
758                function (e) { //optimize
759                    const adminWrap = $(this).find('div.sectionAdminWrap:has( > .mp_edit:not(.end) > .fa-plus)');
760                    //console.log(e.currentTarget.offsetTop);
761                    //console.log(e.offsetY);
762                    //console.log(e.clientY, $(this)[0], $(this)[0].getBoundingClientRect().top, item, plus);
763                    if (e.clientY - $(this)[0].getBoundingClientRect().top > 100) {
764                        adminWrap.find(".mp_edit:not(.end)").addClass("scale_none");
765                    } else {
766                        adminWrap.find(".mp_edit:not(.end)").removeClass("scale_none");
767                    }
768
769                    const adminWrapEnd = $(this).find('div.sectionAdminWrap:has( > .mp_edit.end > .fa-plus)');
770                    //console.log(e.currentTarget.offsetTop);
771                    //console.log(e.offsetY);
772                    //console.log(e.clientY, $(this)[0], $(this)[0].getBoundingClientRect().top, item, plus);
773                    if ($(this)[0].getBoundingClientRect().bottom - e.clientY > 100) {
774                        adminWrap.find(".mp_edit.end").addClass("scale_none");
775                    } else {
776                        adminWrap.find(".mp_edit.end").removeClass("scale_none");
777                    }
778
779                    // if(e.clientY - $(this)[0].getBoundingClientRect().top < 100){
780                    //     adminWrap.addClass("hidden_vis");
781                    // } else {
782                    //     adminWrap.removeClass("hidden_vis");
783                    // }
784                }, function () {
785
786                }
787            );
788        }
789        /*if (selector = setting_selectors[1][i]) {
790            //let index = 0, section_class = '', section_class_last = '';
791            targets = document.querySelectorAll(selector); //document.querySelectorAll('.main_page-phone_number > .setting_container, body > .head-block > div > .setting_container'); //inner
792            for (let selector_value, section_class = '', target, j = 0; j < targets.length; j++, section_class = '') {
793                //let section_class = target.closest('.partner_section').attr('class').split(' ').pop();
794                //let heading_id = target.attr('heading-id');
795                target = targets[j];
796                console.log(targets, target, target.closest('.partner_section'));
797                //selector_value = ''+(i == 2 && j == 0 ? '.main-content-in > h2' : `${i == 2 ? 'heading' : 'block'}${target.getAttribute('item-id') || 0}`);
798                if(i == 2 && j == 0){
799                    selector_value = target.tagName.toLowerCase()+':first-child';
800                } else {
801                    section_class = target.closest('.partner_section')?.classList;
802                    if(section_class){
803                        section_class = section_class[section_class.length - 1];
804                        selector_value = section_class + ' ' + (i==1 ? '.row > div' : target.tagName.toLowerCase());
805                    } else{
806                        continue;
807                    }
808                }
809                //if(section_class) {section_class} else {continue};
810                //target.innerHTML = `<div class="setting_container" style="left: 0; right: auto;" selector="${i == 2 ? 'heading' : 'block'}${target.getAttribute('item-id') || 0}"></div>` + target.innerHTML;
811                target.innerHTML = `<div class="setting_container" style="left: 0; right: auto;" selector="${selector_value}"></div>` + target.innerHTML;
812                setting_containers[i] || (setting_containers[i] = []);
813                console.log('setting_containers[i]',i, setting_containers[i]);
814                setting_containers[i].push(target.querySelector('div'));
815             }
816        }
817        if (setting_containers) {
818            if (i == 1) {
819                // console.log('setting_containers[i]', setting_containers[i]);
820            }
821            for (let container of setting_containers[i]) {
822                if (i == 1) {
823                    // console.log('container is', container, container[0]);
824                }
825                let button_html = `<button data-v-2b7be7e0="" class="setting_editor disp_none" selector="${container.getAttribute('selector')}"><svg data-v-3075733c="" xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" aria-labelledby="cog-small" role="presentation" data-v-2b7be7e0=""><title data-v-3075733c="" id="cog-small" lang="en"></title><g data-v-3075733c="" fill="currentColor"><path data-v-3075733c="" d="M10.101 4L9.701 6.019C9.03957 6.26234 8.42191 6.61119 7.872 7.052L5.899 6.382L4 9.618L5.579 10.967C5.52 11.3082 5.48923 11.6537 5.487 12C5.487 12.353 5.523 12.697 5.579 13.034L4 14.383L5.899 17.617L7.872 16.948C8.42173 17.3891 9.03943 17.7379 9.701 17.981L10.1 20H13.9L14.3 17.981C14.9614 17.7377 15.5791 17.3888 16.129 16.948L18.102 17.618L20 14.382L18.421 13.033C18.48 12.6918 18.5108 12.3463 18.513 12C18.5108 11.6534 18.4801 11.3075 18.421 10.966L20 9.617L18.101 6.383L16.128 7.052C15.5781 6.61119 14.9604 6.26234 14.299 6.019L13.9 4H10.1H10.101ZM12 8.8C13.798 8.8 15.257 10.233 15.257 12C15.257 13.767 13.798 15.2 12 15.2C10.201 15.2 8.743 13.767 8.743 12C8.743 10.233 10.201 8.8 12 8.8Z" fill-rule="evenodd" clip-rule="evenodd"></path></g></svg><span>${setting_names[i]}</span></button>`; //${L_setting}
826                container.innerHTML = button_html;
827                setting_buttons.push(container.querySelector('.setting_editor'))
828            }
829        }*/
830
831    }
832
833}
834
835function getTargetElementStyle(selector, prop) {
836    const $el = $(selector);
837    const $link = $el.find('a');
838    if ($link.length) {
839        return $link.css(prop);
840    }
841    return $el.css(prop);
842}
843
844function showBlockSettings(is_closing = 'x', selector = null) { // =  "body > div.head-main"
845    $('#settings_popup').css('display', is_closing ? 'none' : 'block');
846    is_popup_vis = !!is_closing;
847
848    if (is_closing || !selector) {
849        if (is_closing == 'x') {
850            clearScreenStyles(); //may be unused
851            setToggles(0);
852            //setToggle(id, edit_enable, edit_enable[0]);
853            //setToggle(id, icon_left, icon_left[0]);
854            //enableEdit(edit_enable[0]);
855            //setIconPosition(icon_left[0]);
856            //console.log('saved_settings are ',saved_settings);
857            //$('div.dashboard-popup__sections')[0].innerHTML=saved_settings;
858            if (is_setting_changed) {
859                $('div.dashboard-popup__sections').remove();
860                $('div.dashboard-popup__content > ul').after(saved_settings);
861                is_setting_changed = 0;
862            }
863            //console.log('saved_settings are ',saved_settings);
864        } else if (is_closing == 'a') {
865            applyStylesAjax();
866            // saved_settings = $('div.dashboard-popup__sections').clone();
867        }
868        return;
869    }
870    /*if(!stylesMap){
871        stylesMap = new Map();
872    } else {
873        stylesMap.clear();
874    }*/
875    style_id++;
876    stylesMap ? stylesMap.clear() : (stylesMap = new Map());
877    if (selector != currentSelectors) {
878        saved_style = '';//$('input[target_prop="styled"]').val();//''
879        saved_style_arr = null;
880        currentSelectors = selector;
881        baseSelectors = selector;
882        // console.log(selector);
883        borders = null;
884        let selector_first = (selector.includes(';') ? selector.slice(0, selector.indexOf(';')) : selector).trim();
885        let tg_prop, edited_elem = $(selector_first);
886        //let lin_param_display = (selector == 'body.partner' ? 'none' : 'block');
887        //$('#settings_popup section.menu-params').css('display', lin_param_display);
888        /*$('#settings_popup section.block-params div.lin-params, #settings_popup section.menu-params').css(
889            'display', (selector == 'body.partner' ? 'none' : 'inline-block'));*/
890        let is_head = selector.includes('head-block'), css_advanced_sheet = null;
891        $('#settings_popup section.block-params div.input-holder.onlyhead').css('display', is_head ? 'inline-block' : 'none');
892        $('#settings_popup div.input-holder.head-foot').css('display', is_head || selector.includes('main_page-phone_number') ? 'inline-block' : 'none');
893        $(selector_first).addClass('reading');
894        $.each(document.styleSheets, function (sheetIndex, sheet) {
895            if (sheet.href && sheet.href.includes('CMS/frontend/basic/css-advanced/')) {
896                css_advanced_sheet = sheet;
897                return false;
898            }
899        });
900        let prop_value = '', css_txt = '';
901        console.log('css_advanced_sheet.cssRules', css_advanced_sheet.cssRules);
902        icon_top[1] = ($(selector_first + ' .menu li a').css('display') == 'grid' ? 0 : 1);
903        width_fixed[1] = 0;
904        if (css_advanced_sheet) {
905            $.each(css_advanced_sheet.cssRules || css_advanced_sheet.rules, function (ruleIndex, rule) {
906                // console.log("rule[" + ruleIndex + "]: " + rule.cssText);
907                if ((css_txt = rule.cssText).includes(selector_first + ' .menu ul li.head_menu_li {')) { //might be repeatings?
908                    prop_value = css_txt.slice(css_txt.indexOf('{') + 1, css_txt.indexOf('}'));
909                    if (/(^|;|\s)width(:|\s)/.test(prop_value)) {
910                        width_fixed[1] = 1;
911                        return false;
912                    }
913                }
914            })
915        }
916        let font = $(selector_first).css('font-family');
917
918        let menu_font = $(selector_first + ' .menu li a').css('font-family');
919        if (selector_first.includes("right-menu-main")) {
920            menu_font = $(selector_first + ' a').css('font-family');
921        } else if (selector_first.includes("left-menu-main")) {
922            menu_font = $(selector_first + ' a').css('font-family');
923        } else if (selector_first.includes("main-menu-list")) {
924            menu_font = $(selector_first + ' a').css('font-family');
925        }else if (selector_first.includes("left-menu-root")) {
926            menu_font = $(selector_first + ' a').css('font-family');
927        }
928
929        $('#text_font_select').val(font ? font : '');
930        $('#menu_font_select').val(menu_font ? menu_font : '');
931        $('#settings_popup input[target_prop],#settings_popup textarea[target_prop],#settings_popup button[target_prop]').each(function () { //is_shadow_checked
932                let prop_name = tg_prop = $(this)[0].getAttribute('target_prop'), prop_value = '';
933                console.log("prop_name", prop_name);
934                if (prop_name == 'box-shadow') {
935                    let is_topmenu = selector_first.includes('over') ? 1 : 0;
936                    if (is_shadow_checked[is_topmenu] === null) {
937                        let menu = is_topmenu ? $('body > div.head-block > div.head-main') : edited_elem;
938                        let lastClass = menu.attr('class');
939                        menu.attr('class', 'head-main menu-narrow');
940                        prop_value = ((prop_value = edited_elem.css(prop_name)) != undefined) && (prop_value != 'none');
941                        // console.log('prop_value', prop_value);
942                        menu.attr('class', lastClass);
943                        is_shadow_checked[is_topmenu] = prop_value;
944                    } else {
945                        prop_value = is_shadow_checked[is_topmenu];
946                    }
947                    //$('#settings_popup section.lin-params div.input-holder.shadow input[type="checkbox"]').attr('checked', prop_value);
948                    $(this)[0].checked = prop_value;
949                } else if (prop_name == 'text-align-start') {
950                    prop_value = ((prop_value = edited_elem.css('text-align')) == 'left') || (prop_value == 'start');
951                    if (prop_value) {
952                        $('#align[target_prop="text-align-start"]').prop('checked', true);
953                    }
954                } else if (prop_name == 'text-align-end') {
955                    prop_value = ((prop_value = edited_elem.css('text-align')) == 'end') || (prop_value == 'right');
956                    if (prop_value) {
957                        $('#align[target_prop="text-align-end"]').prop('checked', true);
958                    }
959                } else if (prop_name == 'block-align-start' || prop_name == 'block-align-center' || prop_name == 'block-align-end') {
960
961                    let isFoundInCSS = false;
962                    if (css_advanced_sheet) {
963                        $.each(css_advanced_sheet.cssRules || css_advanced_sheet.rules, function (ruleIndex, rule) {
964                            if (rule.selectorText && $(edited_elem).is(rule.selectorText)) {
965                                const marginLeft = rule.style['margin-left'];
966                                console.log("marginLeft", marginLeft);
967                                const marginRight = rule.style['margin-right'];
968                                console.log("marginRight", marginRight);
969                                if (marginLeft === 'auto' && marginRight === 'auto') {
970                                    $('#alignBlock[target_prop="block-align-center"]').prop('checked', true);
971                                } else if (marginLeft === 'auto' && marginRight !== 'auto') {
972                                    $('#alignBlock[target_prop="block-align-end"]').prop('checked', true);
973                                } else {
974                                    $('#alignBlock[target_prop="block-align-start"]').prop('checked', true);
975                                }
976                            }
977                        });
978                    }
979                } else if (prop_name == 'text-align-center') {
980                    prop_value = ((prop_value = edited_elem.css('text-align')) == 'center');
981                    if (prop_value) {
982                        $('#align[target_prop="text-align-center"]').prop('checked', true);
983                    }
984                } else if (prop_name == 'background-attachment-parallax') {
985                    prop_value = ((prop_value = edited_elem.css('background-repeat')) == 'no-repeat');
986                    if (prop_value) {
987                        $('#background-attachment[target_prop="background-attachment-parallax"]').prop('checked', true);
988                    }
989                } else if (['font-weight', 'font-style', 'text-decoration', 'text-transform'].includes(prop_name)) {
990                    const currentValue = getTargetElementStyle(selector_first, prop_name);
991
992                    if (prop_name === 'font-weight') {
993                        isBoldActive = ['bold', '700', '600', 'bolder'].includes(currentValue);
994                        updateBoldButton(isBoldActive);
995                    } else if (prop_name === 'font-style') {
996                        isItalicsActive = currentValue === 'italic';
997                        updateItalicsButton(isItalicsActive);
998                    } else if (prop_name === 'text-decoration') {
999                        isTextDecorationActive = currentValue.includes('underline');
1000                        updateTextDecorationButton(isTextDecorationActive);
1001                    } else if (prop_name === 'text-transform') {
1002                        isTextTransformActive = currentValue === 'uppercase';
1003                        updateTextTransformButton(isTextTransformActive);
1004                    }
1005                } else if (prop_name == 'background-attachment-fixed') {
1006                    prop_value = edited_elem.css('background-attachment') == 'fixed' && edited_elem.css('background-repeat') != 'no-repeat';
1007                    if (prop_value) {
1008                        $('#background-attachment[target_prop="background-attachment-fixed"]').prop('checked', true);
1009                    }
1010                }else if (prop_name === 'text-styled') {
1011                    prop_value = buildTextStyleString(selector_first, css_advanced_sheet);
1012                    this.value = prop_value;
1013
1014                    saved_text_style = prop_value;
1015                    saved_text_style_arr = splitStyles(prop_value);
1016                } else if (prop_name == 'background-attachment-auto') {
1017                    prop_value = ((prop_value = edited_elem.css('background-attachment')) == 'scroll');
1018                    if (prop_value) {
1019                        $('#background-attachment[target_prop="background-attachment-auto"]').prop('checked', true);
1020                    }
1021                } else if (prop_name == 'visibility-pk') {
1022
1023                    var targetSelector = edited_elem['selector'];
1024                    var foundCssText = null;
1025                    $.each(css_advanced_sheet.cssRules, function (index, rule) {
1026                        if (rule.selectorText === targetSelector) {
1027                            foundCssText = rule.cssText;
1028                            return false;
1029                        }
1030                    });
1031                    if (foundCssText) {
1032                        var normalizedCssText = foundCssText.replace(/\s+/g, ' ').trim();
1033                        var targetMediaQuery = '@media (min-width: 768px) { display: none; }'.replace(/\s+/g, ' ').trim();
1034                        if (normalizedCssText.includes(targetMediaQuery)) {
1035                            $('.visibility[target_prop="visibility-pk"]').prop('checked', true);
1036                        }
1037                    } else {
1038                        // Если правило не найдено, снимаем галочку
1039                        $('.visibility[target_prop="visibility-pk"]').prop('checked', false);
1040                    }
1041                } else if (prop_name == 'visibility-tablet') {
1042
1043                    var targetSelector = edited_elem['selector'];
1044                    var foundCssText = null;
1045                    $.each(css_advanced_sheet.cssRules, function (index, rule) {
1046                        if (rule.selectorText === targetSelector) {
1047                            foundCssText = rule.cssText;
1048                            return false;
1049                        }
1050                    });
1051                    if (foundCssText) {
1052                        var normalizedCssText = foundCssText.replace(/\s+/g, ' ').trim();
1053                        var targetMediaQuery = '@media (max-width: 767px) and (min-width: 450px) { display: none; }'.replace(/\s+/g, ' ').trim();
1054                        if (normalizedCssText.includes(targetMediaQuery)) {
1055                            $('.visibility[target_prop="visibility-tablet"]').prop('checked', true);
1056                        }
1057                    }
1058                }
1058 else if (prop_name == 'visibility-mob') {
1059
1060                    var targetSelector = edited_elem['selector'];
1061                    var foundCssText = null;
1062                    $.each(css_advanced_sheet.cssRules, function (index, rule) {
1063                        if (rule.selectorText === targetSelector) {
1064                            foundCssText = rule.cssText;
1065                            return false;
1066                        }
1067                    });
1068                    if (foundCssText) {
1069                        var normalizedCssText = foundCssText.replace(/\s+/g, ' ').trim();
1070                        var targetMediaQuery = '@media (max-width: 449px) { display: none; }'.replace(/\s+/g, ' ').trim();
1071                        if (normalizedCssText.includes(targetMediaQuery)) {
1072                            $('.visibility[target_prop="visibility-mob"]').prop('checked', true);
1073                        }
1074                    }
1075                } else if (!(prop_name == 'width' || prop_name == 'height')) {
1076
1077                    if (prop_n
1077ame == 'label') {
1078                        /*let label_elem = $(selector_first + ' li.head_menu_li .head_menu_li_span_bg')[0];
1079                        let  has_w0 = label_elem.classList.contains('w0');
1080                      console.log(label_elem);
1081                       if (has_w0) {
1082                           label_elem.remove('w0');
1083                       } */
1084                        prop_name = 'width';
1085                        prop_value = '';
1086                        //console.log(selector_first + ' ul.main-menu-list > li.head_menu_li .head_menu_li_span_bg {');
1087                        $.each(document.styleSheets, function (sheetIndex, sheet) {
1088                            if (sheet.href && sheet.href.includes('CMS/frontend/basic/css-advanced/')) {
1089                                //console.log("Looking at styleSheet[" + sheetIndex + "]:");
1090                                $.each((foundSheet = sheet).cssRules, function (ruleIndex, rule) {
1091                                    //console.log(rule.cssText)
1092                                    // console.log("rule[" + ruleIndex + "]: " + rule.cssText, selector);
1093                                    if ((css_txt = rule.cssText).startsWith(selector_first + ' ul.main-menu-list > li.head_menu_li .head_menu_li_span_bg {')) {
1094                                        prop_value = rule.style['width'];
1095                                        return false;
1096                                    }
1097                                }); //add here if is abscent
1098                                return false;
1099                            }
1100                            //console.log("Looking at styleSheet[" + sheetIndex + "]:");
1101                        });
1102
1103                        /*prop_value = label_elem.styles[prop_name = 'width'];
1104                        if (has_w0) {
1105                            label_elem.add('w0');
1106                        }*/
1107                        //console.log()
1108                    } else if (prop_name == 'repeat') {
1109                        for (let prop_name of ['background-repeat', 'background-position']) {
1110                            let val = $(selector_first).css(prop_name);
1111                            prop_value += ` ${prop_name}: ${val ? val : 'unset'}; `;
1112                        }
1113                    } else if (prop_name == 'menu-font-size') {
1114                        if (selector_first.includes("right-menu-main")) {
1115                            prop_value = $(selector_first + ' a').css(prop_name = 'font-size');
1116                        } else if ((selector_first.includes("left-menu-main")) || (selector_first.includes("main-menu-list")) ||
1117                            selector_first.includes("left-menu-root")) {
1118                            prop_value = $(selector_first + ' a').css(prop_name = 'font-size');
1119                        } else {
1120                            prop_value = $(selector_first + ' .menu li a').css(prop_name = 'font-size');
1121                        }
1122
1123                    } else if (prop_name == 'menu-item-width') { //before it was span text
1124                        prop_name = (width_fixed[1] ? 'width' : 'min-width');
1125                        prop_value = '';
1126                        //prop_value = $(selector_first + ' .menu li').css(prop_name = (width_fixed[1] ? 'width' : 'min-width'));
1127                        $.each(document.styleSheets, function (sheetIndex, sheet) {
1128                            if (sheet.href && sheet.href.includes('CMS/frontend/basic/css-advanced/')) {
1129                                //console.log("Looking at styleSheet[" + sheetIndex + "]:");
1130                                $.each((foundSheet = sheet).cssRules, function (ruleIndex, rule) {    // console.log("rule[" + ruleIndex + "]: " + rule.cssText);
1131                                    if ((css_txt = rule.cssText).startsWith(selector_first + ' .menu ul li.head_menu_li {')) {
1132                                        prop_value = rule.style[prop_name];
1133                                        // console.log(prop_value , prop_name);
1134                                        return false;
1135                                    }
1136                                })
1137                            }
1138                        });
1139
1140                    }
1140 else if (prop_name === 'menu-color') {
1141
1142                        tg_prop = 'menu-color';
1143                        const $links = $(selector_first).find('a').not('.mp_edit, .url-r, .logo_head_img');
1144                        if ($links.length > 0) {
1145                            prop_value = $links.first().css('color');
1146                        } else {
1147                            prop_value = 'rgb(0, 0, 0)';
1148                        }
1149
1150                        // console.log("menu_color3",prop_value,$links);
1151                        $(`button.color_display[target_prop='menu-color']`).css('background-color', prop_value);
1152                        $(`input.colorpicker__input[target_prop='menu-color']`).val(rgba2hex(prop_value));
1153                    } else if (prop_name == 'background-color-compact') {
1154                        tg_prop = 'background-color-compact';
1155                        console.log('background-color-compact', selector_first);
1156                        // currentSelectors = selector_first += '.menu-narrow';
1157                        //console.log("prop_value23",prop_value)
1158                        prop_value = $(selector_first + '.menu-narrow').css(prop_name = 'background-color');
1159                        // console.log('prop_value is ', prop_value); //prop_value = edited_elem.css(prop_name);
1160                    } else if (prop_name === 'menu-hover') {
1161                        tg_prop = 'menu-hover';
1162                        const $links = $(selector_first).find('a').not('.mp_edit, .url-r');
1163                        let hoverColor = null;
1164                        const hoverSelector = `${selector_first} a:hover`;
1165                        for (const sheet of document.styleSheets) {
1166                            try {
1167                                if (sheet.href && sheet.href.includes('CMS/frontend/basic/css-advanced/')) {
1168                                    for (const rule of sheet.cssRules) {
1169                                        if (!rule.selectorText) continue;
1170                                        if (rule.selectorText.trim() === hoverSelector && rule.style.color) {
1171                                            hoverColor = rule.style.color;
1172                                            break;
1173                                        }
1174                                    }
1175                                }
1176                            } catch (e) {
1177
1178                            }
1179                            if (hoverColor) break;
1180                        }
1181                        if (!hoverColor && $links.length > 0) {
1182                            const firstLink = $links.first()[0];
1183                            hoverColor = window.getComputedStyle(firstLink, ':hover').color;
1184                        }
1185                        if (!hoverColor) hoverColor = 'rgb(0, 0, 0)';
1186
1187                        prop_value = rgba2hex(hoverColor);
1188
1189                        $(`button.color_display[target_prop='menu-hover']`).css('background-color', prop_value);
1190                        $(`input.colorpicker__input[target_prop='menu-hover']`).val(prop_value);
1191                    }else if (prop_name == 'color' && selector == 'body > div.main_page-phone_number') {
1192                        prop_value = $('body > div.main_page-phone_number div.main_page-phone_number_content').css(prop_name);
1193                    } else if (prop_name == 'width' || prop_name == 'height') {
1194
1195                        return true;
1196                    } else if (prop_name == 'bgImg') {
1197
1198                        $('.bg-block-image-upload label[for="bg_file_input"]').css('background-image', $(currentSelectors).css('background-image'));
1199                    }  else if (prop_name == 'styled') {
1200                        prop_value = buildLinkStyleString(selector_first, css_advanced_sheet);
1201
1202                        // показать в поле
1203                        $(this)[0].value = prop_value;
1204
1205                        // синхронизировать внутренние буферы, чтобы дальше кнопки B/I/U/Aa и цвет корректно дописывались
1206                        saved_style = prop_value;
1207                        saved_style_arr = splitStyles(prop_value);
1208                    }
1208 else if (prop_name === 'translate-x' || prop_name === 'translate-y' || prop_name === 'rotate') {
1209                        let transformStr = '';
1210                        if (css_advanced_sheet) {
1211                            $.each(css_advanced_sheet.cssRules || css_advanced_sheet.rules, function(ruleIndex, rule) {
1212                                if (rule.selectorText && $(edited_elem).is(rule.selectorText)) {
1213                                    const tv = rule.style['transform'];
1214                                    if (tv) { transformStr = tv; return false; }
1215                                }
1216                            });
1217                        }
1218                        if (!transformStr && edited_elem[0]) transformStr = edited_elem[0].style.transform || '';
1219                        let match;
1220                        if (prop_name === 'translate-x') {
1221                            match = transformStr.match(/translateX\((-?[\d.]+)/);
1222                        } else if (prop_name === 'translate-y') {
1223                            match = transformStr.match(/translateY\((-?[\d.]+)/);
1224                        } else {
1225                            match = transformStr.match(/rotate\((-?[\d.]+)/);
1226                        }
1227                        prop_value = match ? match[1] : '0';
1228                        const _inputEl = $(this)[0];
1229                        if (!match) {
1230                            _inputEl.style.color = 'rgb(153, 153, 153)';
1231                            _inputEl.style.fontStyle = 'italic';
1232                        } else {
1233                            _inputEl.style.color = '';
1234                            _inputEl.style.fontStyle = '';
1235                        }
1236                    } else {
1237
1238
1239                        prop_value = edited_elem.css(prop_name);
1240                        let inputElement = $(`#settings_popup input[target_prop='${prop_name}']`)[0];
1241                        if (prop_name == 'max-width' || prop_name == 'min-height' || prop_name == 'height') {
1242                            console.log('test193');
1243                            let isFoundInCSS = false;
1244                            if (css_advanced_sheet) {
1245                                $.each(css_advanced_sheet.cssRules || css_advanced_sheet.rules, function (ruleIndex, rule) {
1246                                    if (rule.selectorText && $(edited_elem).is(rule.selectorText)) {
1247                                        const marginValue = rule.style[prop_name];
1248                                        if (!marginValue) {
1249                                            inputElement.style.color = '#999';
1250                                            inputElement.style.fontStyle = 'italic';
1251                                            if (!prop_value) prop_value = '';
1252                                        }
1253                                    }
1254                                });
1255                            }
1256                        }
1257                        if (prop_name == 'margin-left' || prop_name == 'margin-right' || prop_name == 'margin-top' || prop_name == 'margin-bottom' || prop_name == 'padding-left' || prop_name == 'padding-right' || prop_name == 'padding-top' || prop_name == 'padding-bottom' || prop_name == 'border-bottom-left-radius' || prop_name == 'border-bottom-right-radius' || prop_name == 'border-top-right-radius' || prop_name == 'border-top-left-radius' || prop_name == 'border-bottom-color' || prop_name == 'border-right-color' || prop_name == 'border-left-color' || prop_name == 'border-top-color' || prop_name == 'border-bottom-width' || prop_name == 'border-right-width' || prop_name == 'border-left-width' || prop_name == 'border-top-width') {
1258                            let isFoundInCSS = false;
1259                            if (css_advanced_sheet) {
1260                                $.each(css_advanced_sheet.cssRules || css_advanced_sheet.rules, function (ruleIndex, rule) {
1261                                    if (rule.selectorText && $(edited_elem).is(rule.selectorText)) {
1262                                        const marginValue = rule.style[prop_name];
1263                                        if (marginValue) {
1264                                            prop_value = marginValue;
1265                                            isFoundInCSS = true;
1266                                            if (inputElement) {
1267                                                inputElement.style.color = '';
1268                                                inputElement.style.fontStyle = '';
1269                                            }
1270                                        } else {
1271                                            inputElement.style.color = '#999';
1272                                            inputElement.style.fontStyle = 'italic';
1273                                            if (!prop_value) prop_value = '';
1274                                        }
1275                                    }
1276                                });
1277                            }
1278                        }
1279
1280                        console.log("ep3", prop_value);
1281                    }
1282                    if (prop_name.includes('color')) {
1283                        $(`button.color_display[target_prop='${tg_prop}']`).css('background-color', prop_value);
1284                        //is_menu_color = 0;
1285                        if (!prop_value) {
1286                            prop_value = '#00000000';
1287                        }
1288                        if (prop_value.includes('rgb')) {
1289                            prop_value = rgba2hex(prop_value);
1290                        }
1291                    }
1292                    $(this)[0].value = (prop_value === undefined ? '' : prop_value);
1293                } else if (prop_name == 'width' || prop_name == 'height') {
1294                    let inputElement = $(`#settings_popup input[target_prop='${prop_name}']`)[0];
1295                    let isFoundInCSS = false;
1296                    if (css_advanced_sheet) {
1297                        $.each(css_advanced_sheet.cssRules || css_advanced_sheet.rules, function (ruleIndex, rule) {
1298                            if (rule.selectorText && $(edited_elem).is(rule.selectorText)) {
1299                                const marginValue = rule.style[prop_name];
1300                                if (marginValue) {
1301
1302                                    prop_value = marginValue;
1303                                    isFoundInCSS = true;
1304
1305
1306                                    if (inputElement) {
1307                                        inputElement.style.color = '';
1308                                        inputElement.style.fontStyle = '';
1309                                    }
1310                                } else {
1311                                    inputElement.style.color = '#999';
1312                                    inputElement.style.fontStyle = 'italic';
1313                                    if (!prop_value) prop_value = '';
1314                                }
1315                            }
1316                        });
1317                    }
1318                    if (!isFoundInCSS && !prop_value) {
1319                        prop_value = edited_elem.css(prop_name) || '';
1320                    }
1321                    if (inputElement) inputElement.value = (prop_value === undefined ? '' : prop_value);
1322                }
1323            }
1324        )
1325        ;
1326        setToggles(0, 1);
1327        $(selector_first).removeClass('reading');
1328        //console.log("Looking at styleSheet[", document.styleSheets);
1329        /*$('.vc-hue-container').on('click', (e)=>{
1330            isSliding = true;
1331            sliderWidth = 100;
1332            console.log('container is', window.getComputedStyle(e.target));
1333            onSliderMove(e);
1334        });*/
1335        //console.log($('div.dashboard-popup__content'));
1336    }
1337
1338    if (is_setting_changed || selector != currentSelectors) {
1339        saved_settings = $('div.dashboard-popup__sections').clone();
1340        is_setting_changed = 0;
1341    }
1342//console.log('_settings 0 are ',$('div.dashboard-popup__sections').clone());
1343}
1344
1345function clearScreenStyles() {
1346    $(`style[style_id='${style_id}']`).remove();
1347};
1348
1349function onPaletteScrolling(e = null) {
1350    offsetY = e ? (is_outer ? e.offsetY : (e.clientY - startClientY)) : 0;
1351    if (e) {
1352        //console.log('e.clientY - startClientY ', e.clientY, startClientY, e.offsetY)
1353        //console.log(e.currentTarget.getBoundingClientRect.y, e.currentTarget.getBoundingClientRect, e.currentTarget);
1354    }
1355    //offsetY = e ? (e.currentTarget.offsetTop) : 0; //e.target.offsetTop) /*e.target.offsetHeight + */
1356    //e.target.parentNode.offsetTop); //e.target.offsetTop
1357    let top = e ? (offsetY / sliderHeight * 100) : 0;
1358    $(pointer).css('top', top.toFixed(4) + '%');
1359    $('.colorpicker__pallete .colorpicker__list').css('top', '-' + top.toFixed(4) + '%');
1360}
1361
1362function setOffsetVars(e, is2d) {
1363    let className = e.target.className;
1364    if (className.includes('picker') || className.includes('circle')) {
1365        offsetX = e.target.parentNode.offsetLeft;
1366        offsetY = is2d ? e.target.parentNode.offsetTop : 0;
1367    } else if (className.includes('pointer')) {
1368        offsetX = e.target.offsetLeft;
1369        offsetY = is2d ? e.target.offsetTop : 0;
1370    } else {
1371        offsetX = e.offsetX;
1372        offsetY = is2d ? e.offsetY : 0;
1373    }
1374}
1375
1376function changeColorInput(color, isRewriting = 1) {
1377    currentColorHex = color.toUpperCase();
1378    // console.log(currentColorHex);
1379    $(`.colorpicker__input[target_prop="${currentProp}"]`).val(currentColorHex);
1380    changeStyleCss(currentProp, currentColorHex, 1, isRewriting);
1381}
1382
1383function chooseColorTab(tab) {
1384    let tab_target = tab.getAttribute('target');
1385    let is_current_tab = (tab_target == 'colors');
1386    if (tab && !tab.className.includes('active')) {
1387        if (tab_target) {
1388            for (let name of ['colors', 'palettes']) {
1389                $(`div.colorpicker__wrapper.${name}`).css('display', (is_current_tab ? 'block' : 'none'));
1390                $(`ul.colorpicker__tabs > li.colorpicker__tab[target="${name}"]`).toggleClass('active');
1391                is_current_tab = !is_current_tab;
1392            }
1393        }
1394    }
1395    if (is_current_tab) {
1396        offsetColorSliders();
1397    } else {
1398        onPaletteScrolling();
1399        isSliding['pltY'] = 0;
1400    }
1401}
1402
1403function offsetColorSliders() {
1404    if (currentColorRGB) {
1405//let rgbArray = currentColorRGB.slice(currentColorRGB.indexOf('('));
1406        let rgbPure = [], i = 0, rgbArray = currentColorRGB.match(/[0-9\.]+/g);
1407        // console.log('rgbArray unsorted ', rgbArray);
1408        alpha_koef = (rgbArray.length > 3 ? Number(rgbArray.pop()) : 1);
1409        (rgbArray = rgbArray.map((n) => [Number(n) / 255, i++])).sort((a, b) => a[0] - b[0]);
1410        // console.log('currentColorRGB is ', currentColorRGB);
1411        // console.log('flat is ', currentColorRGB.match(/[0-9\.]+/g).map((n) => Number(n) / 255));
1412        // console.log('rgbArray is ', rgbArray);
1413        let rgbKoefs = rgbArray.map(n => n[0]), rgbPoints = rgbArray.map(n => n[1]);
1414        bright_koef = rgbKoefs[2], light_koef = (bright_koef == 0 ? 1 : rgbKoefs[0] / bright_koef);
1415        let h_old = (rgbKoefs[0] == rgbKoefs[2] ? 0 : (rgbKoefs[1] - rgbK
1415oefs[0]) / (rgbKoefs[2] - rgbKoefs[0]));
1416        //h = 2 - h;
1417        // console.log('h is ', h_old);
1418        let third = rgbPoints[2], is_dsc = (third + 1) % 3 != rgbPoints[1], h = h_old;
1419        if (is_dsc) {
1420            h = 2 - h;
1421            third = (3 + third - 1) % 3;
1422        }
1423        ton_koef = h / 2 + third; //h = (ton_koef - third) * 2;
1424        let ton100 = ton_koef / 3;
1425        rgbPure[rgbPoints[0]] = 0;
1426        rgbPure[rgbPoints[1]] = Math.round(h_old * 255);
1427        rgbPure[rgbPoints[2]] = 255;
1428        // console.log('rgbPure is ', rgbPure);
1429        // console.log('ton_koef is ', ton_koef, ton100, rgbKoefs, h);
1430//pointer = .vc-${type == 's' ? 'saturation' : type}-pointer;
1431        $('.vc-hue-pointer').css('left', (ton100 * 100).toFixed(4) + '%');
1432        $('.vc-alpha-pointer').css('left', (alpha_koef * 100).toFixed(4) + '%');
1433        $(`.vc-saturation-pointer`).css('left', ((1 - light_koef) * 100).toFixed(4) + '%');
1434        $(`.vc-saturation-pointer`).css('top', ((1 - bright_koef) * 100).toFixed(4) + '%');
1435        $('.vc-saturation').css('background', `rgb(${rgbPure.join(', ')})`);
1436
1437    }
1438}
1439
1440//gets the css style from the user input in setting window
1441// and rewrites it in the css file named like the current site alias
1442function changeStyleCss(prop, value, isChangingPageStyle = 1, isRewriting = 1) { //input
1443    if (!is_setting_changed) {
1444        is_setting_changed = 1;
1445        // saved_settings = $('div.dashboard-popup__sections').clone();
1446    }
1447    if (prop === 'text-styled') {
1448        const selector_first = (currentSelectors.includes(';')
1449                ? currentSelectors.slice(0, currentSelectors.indexOf(';'))
1450                : currentSelectors
1451        ).trim();
1452
1453        const oldSel = currentSelectors;
1454        currentSelectors = getTextSelector(selector_first);
1455
1456        changeTextStyles(value, null, isChangingPageStyle, isRewriting);
1457
1458        currentSelectors = oldSel;
1459        return;
1460    }
1461    if (is_for_text && TEXT_STYLED_PROPS.includes(prop)) {
1462        const selector_first = (currentSelectors.includes(';')
1463                ? currentSelectors.slice(0, currentSelectors.indexOf(';'))
1464                : currentSelectors
1465        ).trim();
1466
1467        const oldSel = currentSelectors;
1468        currentSelectors = getTextSelector(selector_first);
1469
1470        changeTextStyles(value, prop, isChangingPageStyle, isRewriting);
1471
1472        currentSelectors = oldSel;
1473        is_for_text = 0;
1474        return;
1475    }
1476
1477    currentProp = prop;
1478    if (!prop || !currentSelectors || !value && value != 0) {
1479        // console.log('is returning');
1480        return;
1481    }
1482
1483    const textProps = ['font-weight', 'text-decoration', 'font-style', 'text-transform'];
1484    if (textProps.includes(prop) && !currentSelectors.trim().endsWith('a')) {
1485        currentSelectors += ' a';
1486    }
1487    // console.log('is not returning', prop, currentSelectors, value, is_menu_hover);
1488
1489    let border_pos = border_width.indexOf(prop), is_label = is_shadow = isInMenuStyle = 0;
1490    old_selector = currentSelectors, is_topmenu = 0;
1491    if (border_pos != -1) {
1492        prop = 'border-width';
1493        if (borders) {
1494            borders[border_pos] = value;
1495        } else {
1496            borders = [];
1497            for (let i = 0; i < 4; i++) {
1498                borders[i] = (i == border_pos ? value : $(`input.colorpicker__input[target_prop='${border_width[i]}']`).val());
1499            }
1500        }
1501        value = ' ' + borders.join(' ');
1502    }
1503    /*if(prop == 'width'){
1504        if (currentSelectors.includes('overhead')){
1505            currentSelectors += ' div.overhead-in';
1506        } else if (currentSelectors.includes('head-main')){
1507            currentSelectors += ' div.head-main-in';
1508        } else if (currentSelectors.includes('main_page-phone_number')){
1509            currentSelectors += ' div.footer-container';
1510        }
1511    }*/
1512
1513    let selector_first = (currentSelectors.includes(';') ? currentSelectors.slice(0, currentSelectors.indexOf(';')) : currentSelectors);
1514    if (prop === 'menu-color') {
1515        prop = 'color';
1516        value += ' !important';
1517        const base = stripA(currentSelectors);
1518        currentSelectors = base + ' a';
1519
1520    } else if (prop === 'menu-hover') {
1521        prop = 'color';
1522        value += ' !important';
1523        currentSelectors += ' a:hover';
1524    }
1525
1526    // if (is_menu_color = (prop == 'menu-color')) {
1527    //     prop = 'color';
1528    //     value += ' !important';
1529    //     is_for_menu = 1;
1530    // }
1531    if (is_compact_menu = (prop == 'background-color-compact')) {
1532        prop = 'background-color';
1533        value += ' !important';
1534        is_compact_menu = 1;
1535    }
1536
1537    if (is_for_menu) { //unite variants correctly
1538        if (prop == 'width' || prop == 'min-width') {
1539            currentSelectors = selector_first += ' .menu ul li.head_menu_li'; //it was  .head_menu_li_span-text
1540            //  changeStylesMap(currentSelectors, width_fixed[1] ? 'width' : 'min-width', value, 1);
1541        } else {
1542            if ((selector_first.includes("right-menu-main")) || (selector_first.includes("left-menu-main")) || (selector_first.includes("main-menu-list")) ||
1543                selector_first.includes("left-menu-root") || ($(selector_first).parent(".list-left").length)) {
1544                currentSelectors = selector_first += ' a';
1545            } else if ($(selector_first).find('.mp-bc__list').length) {
1546                currentSelectors = selector_first += ' .mp-bc__list li a';
1547            } else {
1548                currentSelectors = selector_first += ' .menu li a';
1549            }
1550
1551        }
1552        /*else if(is_menu_color || (is_menu_color = (prop == 'menu-color'))){
1553            prop = 'color';
1554            currentSelectors = selector_first += ' .menu li a';
1555        }*/
1556        // console.log('380 is changing');
1557        isInMenuStyle = (is_menu_color || (is_menu_color = (prop == 'color')) || (prop == 'font-size') || (prop == 'font-family'));
1558    } else if (prop == 'min-height' && selector_first == 'body > div.head-block > div.overhead') {
1559        value += ' !important';
1560    } else if (prop == 'block-align') {
1561        if (value == 'start') {
1562            changeStyleCss('margin-left', '0', isChangingPageStyle, isRewriting);
1563            changeStyleCss('margin-right', 'auto', isChangingPageStyle, isRewriting);
1564        } else if (value == 'center') {
1565            changeStyleCss('margin-left', 'auto', isChangingPageStyle, isRewriting);
1566            changeStyleCss('margin-right', 'auto', isChangingPageStyle, isRewriting);
1567        } else if (value == 'end') {
1568            changeStyleCss('margin-left', 'auto', isChangingPageStyle, isRewriting);
1569            changeStyleCss('margin-right', '0', isChangingPageStyle, isRewriting);
1570        }
1571        return;
1572    } else if (prop == 'font-weight' || prop == 'font-style' || prop == 'text-decoration' || prop == 'text-transform') {
1573        // if(((selector_first.includes("right-menu-main"))||(selector_first.includes("left-menu-main")) |(selector_first.includes("main-menu-list"))  || ($(selector_first).parent(".list-left").length))&& !selector_first.trim().endsWith('a')){
1574        //     currentSelectors = selector_first += ' a';
1575        // }
1576        value += ' !important';
1577    }else if (prop == 'background-color' && selector_first.trim() == 'body.partner') {
1578        value += ' !important';
1579    } else if (prop == 'background-attachment' && value == 'parallax') {
1580        const parallaxEl = document.querySelector(selector_first);
1581        if (parallaxEl) {
1582            parallaxEl.style.backgroundAttachment = 'fixed';
1583        }
1584        const existingScript = document.getElementById('parallaxScript' + selector_first);
1585        if (!existingScript) {
1586            const script = document.createElement('script');
1587            script.id = 'parallaxScript' + selector_first;
1588            script.textContent = `
1589        window.addEventListener('scroll', function() { 
1590            const parallaxContainer = document.querySelector('${selector_first}');
1591            if (parallaxContainer) {
1592                let scrollPosition = window.pageYOffset;
1593                parallaxContainer.style.backgroundPositionY = scrollPosition * 0.1 + 'px';
1594            }
1595        });
1596    `;
1597            document.body.appendChild(script);
1598        }
1599    } else if (prop == 'background-attachment' && value == 'fixed') {
1600        const existingScript = document.getElementById('parallaxScript' + selector_first);
1601        if (existingScript) {
1602            existingScript.remove();
1603        }
1604    } else if (prop === 'translate-x' || prop === 'translate-y' || prop === 'rotate') {
1605        const el = document.querySelector(selector_first);
1606        let tx = '0px', ty = '0px', rot = '0deg';
1607        if (el) {
1608            const t = el.style.transform || '';
1609            const txM = t.match(/translateX\(([^)]+)\)/);
1610            const tyM = t.match(/translateY\(([^)]+)\)/);
1611            const rotM = t.match(/rotate\(([^)]+)\)/);
1612            if (txM) tx = txM[1];
1613            if (tyM) ty = tyM[1];
1614            if (rotM) rot = rotM[1];
1615        }
1616        if (prop === 'translate-x') tx = value.replace(/px$/i, '') + 'px';
1617        else if (prop === 'translate-y') ty = value.replace(/px$/i, '') + 'px';
1618        else rot = value.replace(/deg$/i, '') + 'deg';
1619        prop = 'transform';
1620        value = `translateX(${tx}) translateY(${ty}) rotate(${rot})`;
1621    } else if (prop == 'max-width' || prop == 'width' || prop == 'min-height' || prop == 'height') {
1622        value += '!important';
1623    } else if (prop == 'background-attachment' && value == 'scroll') {
1624        const parallaxEl = document.querySelector(selector_first);
1625        if (parallaxEl) {
1626            parallaxEl.style.backgroundAttachment = 'scroll';
1627        }
1628        const existingScript = document.getElementById('parallaxScript' + selector_first);
1629        if (existingScript) {
1630            existingScript.remove();
1631        }
1632    } else if (is_label = prop == 'label') {
1633        prop = 'width';
1634        let menu_type = selector_first.includes('main_page-phone_number') ? 'nested' : 'main';
1635        currentSelectors = selector_first += ` ul.${menu_type}-menu-list li.head_menu_li:not(.dropdown-item):not(.dropdown-submenu) > a > .head_menu_li_span_bg`;
1636        value += ' !important';
1637    } else if (is_shadow = prop == 'box-shadow') {
1638        // console.log('it is box-shadow');
1639        is_topmenu = selector_first.includes('over') ? 1 : 0;
1640        currentSelectors = selector_first = is_topmenu ? 'body > div.head-block  > .overhead:has(~ div.head-main.menu-narrow)' : 'body > div.head-block  > .head-main.menu-narrow';
1641        value = ((is_shadow_checked[is_topmenu] = value) ? '0 16px 48px #00000029' : 'none');
1642    } else if (is_alignAuto = prop == 'text-align-auto') {
1643        // console.log('it is box-shadow');
1644        value = ((is_shadow_checked[is_topmenu] = value) ? '0 16px 48px #00000029' : 'none');
1645    } else if (is_compact_menu || (is_compact_menu = (prop == 'background-color-compact'))) {
1646        console.log("eee");
1647        prop = 'background-color';
1648        currentSelectors = selector_first += '.menu-narrow';
1649        // value += '!important'  //
1650    } else if (prop == 'repeat') {
1651
1652        if (value.includes(':')) {
1653            if (!value.includes('background-size')) {
1654                value += '; background-size: initial';
1655            }
1656            let styles = value.split(';');
1657            for (let style of styles) {
1658                if (style) {
1659                    style = style.trim()
1660                    if (style.includes(':')) {
1661                        let words = style.split(':');
1662                        prop = ((prop = words[0]) == 'repeat' ? 'background-repeat' : prop);
1663                        if (!prop) {
1664                            continue;
1665                        }
1666                        let val = words[1] ? words[1].trim() : 'unset';
1667                        changeStyleCss(prop.trim(), val ? val : 'unset');
1668                    }
1669                }
1670            }
1671            return;
1672        } else {
1673            prop = 'background-repeat';
1674        }
1675    }
1676//soglasovat s verhnim
1677    if (is_footer_inner || (is_footer_inner = (prop == 'color' && currentSelectors == 'body > div.main_page-phone_number'))) {
1678        currentSelectors = selector_first = 'body > div.main_page-phone_number div.main_page-phone_number_content';
1679    }
1680    // console.log('isInMenuStyle', isInMenuStyle, prop);
1681
1682
1683    if (isInMenuStyle || prop == 'styled') {
1684        //console.log("isInMenuStyle");
1685        if (prop === 'styled') {
1686            const styledSel = getMenuLinkSelector(selector_first);
1687            const oldSel = currentSelectors;
1688            currentSelectors = styledSel;
1689
1690            changeMenuStyles(value, null, isChangingPageStyle, isRewriting);
1691            currentSelectors = oldSel;
1692        } else {
1693            changeMenuStyles(value, prop, isChangingPageStyle, isRewriting);
1694        }
1695
1696        isInMenuStyle = 1;
1697    }
1698
1699    /*if(prop.includes('color')){
1700        //if(!/#([\da-fA-F]{3})|([\da-fA-F]{6})/.test(value)){
1701        if(!/#[\da-fA-F]{3,8}/.test(value)){
1702            return;
1703        }
1704    }*/ //make validation later
1705    if (isRewriting) {
1706        console.log("top4");
1707        //console.log("isRewriting", currentSelectors,"sx", prop, value);
1708        // console.log('isRewriting', currentSelectors, prop, value);
1709
1710        if (isInMenuStyle) {
1711
1712        } else {
1713            console.log("top11");
1714            changeStylesMap(currentSelectors, prop, value);
1715            if (isChangingPageStyle) { //POSSIBLE REFACTOR THIS
1716                console.log("top12", currentSelectors, prop, value);
1717                //changeStyleOnPage(prop, value, 0, is_label || is_menu_hover, is_label);
1718                //changeStyleOnPage(prop, value, is_shadow ? (is_topmenu ? 'body > div.head-block  > div.overhead:has(~ div.head-main.menu-narrow)' : 'body > div.head-block  > div.head-main.menu-narrow') : 0, is_label);
1719                changeStyleOnPage(prop, value, 0, is_label);
1720            }
1721            if (is_shadow) {
1722                console.log("top13");
1723                currentSelectors = old_selector;
1724            }
1725
1726        }
1727        if (is_label || is_menu_color || is_menu_hover || is_footer_inner || is_for_menu || is_compact_menu) {
1728            console.log("yep")
1729            if (is_label && !currentSelectors.includes(' div.head-main ')) {
1730                console.log("top");
1731                changeStylesMap(currentSelectors, 'height', value);
1732                changeStyleOnPage('height', value, currentSelectors);
1733            }
1734            currentSelectors = old_selector;
1735            is_menu_color = is_menu_hover = is_for_menu = is_footer_inner = is_compact_menu = 0;
1736            // console.log('isSuccess', currentSelectors, prop, value);
1737        }
1738        old_selector = null;
1739    } else {
1740        //console.log("last");
1741        if (isChangingPageStyle && !isInMenuStyle) {
1742            console.log("top10");
1743            changeStyleOnPage(prop, value);
1744        }
1745    }
1746}
1747
1748function uploadImg(filepicker) {
1749
1750    let formData = new FormData();
1751    formData.append('file', filepicker.files[0]);
1752    formData.append('selector', currentSelectors);
1753    selector = currentSelectors;
1754
1755    // changeStylesMap(currentSelectors, prop, value);
1756
1757    $.ajax({
1758        type: "POST",
1759        url: '/CMS/AJAX/upload_bg_image.php',
1760        cache: false,
1761        contentType: false,
1762        processData: false,
1763        data: formData,
1764        dataType: 'json',
1765        beforeSend: function () {
1766            $('.lds-dual-ring').show();
1767        },
1768        success: function (msg) {
1769            console.log('Response is: ', msg.url);
1770            changeStylesMap(currentSelectors, 'background-image', msg.url);
1771            $(currentSelectors).css('background-image', msg.url);
1772            $('.bg-block-image-upload label[for="bg_file_input"]').css('background-image', msg.url);
1773            // $("#bg_file_inputPreview").css('background-image', msg.url);
1774
1775        },
1776        error: function (msg) {
1777            // console.log('msg is ', msg.responseText);
1778            $(currentSelectors).css('background-image', msg.url);
1779            //$('.footer-container').css('background-image', "url('/CMS/storage/dev/white-clouds.jpg')");
1780        },
1781        complete: function () {
1782            $('.lds-dual-ring').hide(); // Скрыть лоадер
1783        }
1784    });
1785}
1786
1787function changeStyleOnPage(prop, value, selector = '',/*in_header = 0,*/ is
1787_label = 0, is_removing = 0) {
1788    if (!selector) {
1789        selector = currentSelectors;
1790    }
1791    console.log("test17", prop);
1792    if (prop.includes('color')) {
1793        $(`.color_display[target_prop=${is_menu_color ? 'menu-color' : (is_compact_menu ? 'background-color-compact' : (is_menu_hover ? 'menu-hover' : prop))}]`).css('background-color', value);
1794        // $(`.color_display[target_prop=${is_compact_menu ? 'background-color-compact' :  prop)}]`).css('background-color', value);
1795    }
1796
1797    // console.log('changeStyleOnPage', prop, value, selector);
1798    let foundSheet = is_found = 0, css_txt = '',
1799        selector_parts = (selector.includes(';') ? selector.split(";") : [selector]);
1800    for (let selector of selector_parts) {
1801        // if(in_header && is_label){
1802        if (is_label) {
1803            selector = selector.replace('.head_menu_li_span_bg', 'span.head_menu_li_span_bg');
1804        }
1805        $.each(document.styleSheets, function (sheetIndex, sheet) {
1806            if (sheet.href && sheet.href.includes('CMS/frontend/basic/css-advanced/')) {
1807                //console.log("Looking at styleSheet[" + sheetIndex + "]:");
1808                $.each((foundSheet = sheet).cssRules, function (ruleIndex, rule) {
1809                    //console.log(rule)
1810                    // console.log("rule[" + ruleIndex + "]: " + rule.cssText, selector);
1811                    if ((css_txt = rule.cssText).startsWith(selector + ' {')) {
1812                        // rule.style[prop] = is_removing ? null : value.replace(' !important', '');
1813
1814                        let cleanValue = typeof value === 'string' ? value.replace(/\s*!important\s*/g, '') : value;
1815                        rule.style.setProperty(prop, is_removing ? null : cleanValue, is_removing ? '' : 'important');
1816
1817                        //было так на 18.04.25 rule.style[prop] = is_removing ? null : (typeof value === 'string' ? value.replace(' !important', '') : value);
1818
1819
1820                        //console.log("rule[prop]" + prop, value, rule[prop]);
1821                        //sheet.cssRules[ruleIndex][prop] = value;
1822                        //console.log(sheet.cssRules, ruleIndex);
1823                        // return !(is_found = true);
1824                        //if(is_shadow){sheet.deleteRule(ruleIndex)};
1825                        is_found = true;
1826                    }
1827                }); //add here if is abscent
1828                console.log("test777");
1829                return false;
1830            }
1831            //console.log("Looking at styleSheet[" + sheetIndex + "]:");
1832        });
1833        // console.log(foundSheet, is_removing, is_found, `${selector} { ${prop}: ${value};}`)
1834        if (foundSheet && !(is_removing || is_found)) {
1835            console.log("test9", value);
1836            foundSheet.insertRule(`${selector} { ${prop}: ${value.replace('!important', '')};}`, foundSheet.cssRules.length);
1837        }
1838        if (prop == 'min-height' && selector.includes('head-block')) {
1839            $(selector).css('min-height', value.replace('!important', ''));
1840        }
1841        return; //archive
1842        if (is_removing) {
1843
1844            let soughtStyle = `${selector} { ${prop}: ${value}; }`;
1845            $("style[style_id]").each(function () {
1846                if ($(this).text() == soughtStyle) {
1847                    $(this).remove();
1848                }
1849            });
1850        } else {
1851            let styleTag = $(`<style type="text/css" style_id="${style_id}"> ${selector} { ${prop}: ${value}; }</style>`)
1852            $('html > head').append(styleTag);
1853            // console.log('styleTag', styleTag, $('html > head')[0].innerHTML);
1854        }
1855    }
1856}
1857
1858function setPaletteVisible(is_vis = 1, target_prop = null) {
1859    if (is_vis) {
1860        $('div.colorpicker__shadow').addClass('block');
1861    } else {
1862        $('div.colorpicker__shadow').removeClass('block');
1863    }
1864    //$('div.colorpicker__shadow').css('display', is_vis ? 'block' : 'none');
1865    //palette.css('visibility', is_vis ? 'visible' : 'hidden');
1866    if (is_vis && target_prop) {
1867        let paletteTab = document.querySelector('ul.colorpicker__tabs > li.colorpicker__tab[target="palettes"]');
1868        chooseColorTab(paletteTab);
1869        //currentProp = target_prop;
1870        //console.log('target_prop is', target_prop);
1871        // $('div.colorpicker__shadow').focus();
1872    }
1873}
1874
1875/*$(document).mouseup(function (e) {
1876    if (palette.has(e.target).length === 0){
1877        setPaletteVisible(0);
1878    }
1879});*/
1880function closeColorPicker() {
1881
1882    setPaletteVisible(0);
1883}
1884
1885$(document).click(function (e) {
1886    //palette.hide();
1887    //console.log('target', e.target.className, e);
1888    //if(!(e.target.className == 'color_display' || e.target.className == 'colorpicker__shadow')){
1889    //console.log('target', e.target.className, e); //innerHTML
1890    //console.log('innerHTML', $('.colorpicker__shadow').html(), 'target2', e.target.constructor.name, typeof e.target);
1891    if (!is_popup_vis) {
1892        if (e.target.className == 'dashboard-popup background-settings') {
1893            showBlockSettings('x');
1894            setPaletteVisible(0);
1895        } else {
1896            let is_palette = $('.colorpicker__shadow').length && $('.colorpicker__shadow').html().includes(e.target.outerHTML);
1897            //let is_setting = $('.dashboard-popup__window').html().includes(e.target.outerHTML);
1898            //if(palette){
1899            if (!(['color_display', 'colorpicker__shadow'].includes(e.target.className) || is_palette)) {
1900                // console.log('class is', e.target.className);
1901                setPaletteVisible(0);
1902            }
1903        }
1904
1905    }
1906
1907
1908    /*if(!(e.target.className.includes('dashboard-popup__window')) || e.target.parentNode.className.includes('setting_editor') || is_palette || is_setting){
1909        console.log('class is', e.target.className);
1910        showBlockSettings(0);
1911    }*/
1912
1913
1914});
1915
1916function onColorSliderMove(type, offsetX, offsetY = 0) {
1917    let left = Math.round(offsetX) / sliderWidth * 100;
1918    $(pointer).css('left', left.toFixed(4) + '%');
1919    //$(`.vc-${type}-pointer`).css('left', left.toFixed(4)+'%');
1920    /*let ton_koef = (offset/sliderWidth)*2 - 1;
1921    //console.log(offset, sliderWidth, left, ton_koef);
1922    let offset_array = [0, -2/3, 2/3], color, rgb = [];
1923    for(let i = 0; i < 3; i++){
1924        color = ton_koef + offset_array[i];
1925        if(color < 0){
1926            color = - color;
1927        }
1928        if(color > 1){
1929            color = 2 - color;
1930        } //(color*255).toFixed(4);
1931        rgb[i] = Math.round(color*255);
1932    }
1933    console.log(rgb);*/
1934    if (type == 's') {
1935        let top = Math.round(offsetY / sliderHeight * 100);
1936        $(pointer).css('top', top.toFixed(4) + '%');
1937        light_koef = 1 - offsetX / sliderWidth;
1938        bright_koef = 1 - offsetY / sliderHeight;
1939    } else if (type == 'hue') {
1940        ton_koef = (offsetX / sliderWidth) * 3;
1941    } else {
1942        alpha_koef = offsetX / sliderWidth;
1943    }
1944    calcPaletteRGB();
1945}
1946
1947function calcPaletteRGB() {
1948    let rgb_result = Array(3).fill(255 * bright_koef), rgb_pure = [0, 0, 0], type;
1949    const third_to_color0 = [2, 0, 1, 1];
1950    const color0_to_max_and_var = {asc: [[1, 2], [2, 0], [0, 1]], dsc: [[2, 1], [0, 2], [1, 0]]};
1951    // console.log('ton_koef is ', ton_koef);
1952    let third = Math.floor(ton_koef), color_koef = (ton_koef - third) * 2;
1953    let direct = color_koef < 1 ? 'asc' : 'dsc', color0 = third_to_color0[third];
1954    //console.log(color0_to_max_and_var, direct, color0);
1955    let [color255, color_var] = color0_to_max_and_var[direct][color0];
1956    if (direct == 'dsc') {
1957        color_koef = 2 - color_koef;
1958    }
1959    rgb_pure[color255] = 255;
1960    rgb_pure[color_var] = 255 * color_koef;
1961    rgb_result[color0] *= light_koef;
1962    rgb_result[color_var] *= color_koef + light_koef * (1 - color_koef);
1963    rgb_result = rgb_result.map((num) => Math.round(num));
1964    //rgb_str = `rgb(${rgb_result.map((num) => Math.round(num)).join(', ')})`;
1965    type = 'rgb';
1966    if (alpha_koef == 1) {
1967        type = 'rgb';
1968    } else {
1969        type = 'rgba';
1970        rgb_result.push(alpha_koef);
1971    }
1972    rgb_result = `${type}(${rgb_result.join(', ')})`;
1973    rgb_pure = `rgb(${rgb_pure.join(', ')})`;
1974    $('.vc-sketch-active-color').css('background', rgb_result);
1975    $('.vc-saturation').css('background', rgb_pure);
1976    // console.log('rgb_str is ', rgb_result);
1977    //rgb_str = 'rgb(255, 189, 0)';
1978    changeColorInput(rgba2hex(rgb_result));
1979}
1980
1981function deleteBgImage() {
1982    changeStyleCss('background-image', 'none');
1983    document.getElementById('bg_file_input').value = null;
1984    $(currentSelectors).css('background-image', 'none');
1985    $('.bg-block-image-upload label[for="bg_file_input"]').css('background-image', 'none');
1986
1987    //$('#bg_file_input').val(null);
1988}
1989
1990function applyStylesAjax() {
1991
1992    //let is_in_header = currentSelectors.includes('head-block');
1993
1994
1995    let ajax_data = {};
1996
1997    let styles_ajax = (selector, prop, input, action = null, action_val = null) => {
1998
1999
2000        //console.log(data);
2001        switch (action) {
2002            case 'd':
2003            case 'p':
2004                data.mode = action;
2005                break;
2006            case 'e':
2007                data['enabled'] = toggle_ars[0][0] = (Number(action_val) == 1 ? 1 : 0);
2008            // console.log('data is ', data);
2009
2010            case 'r':
2011                data.mode = 'd';
2012                break;
2013            case 'e':
2014            case 'f':
2015            case 'i':
2016                data[is_edit ? 'enabled' : 'iconleft'] = icon_left[is_edit][0] = (Number(action_val) == 1 ? 1 : 0);
2017        }
2018        $.ajax({
2019            type: 'POST',
2020            data: data,
2021            url: "CMS/AJAX/change_css_from_settings.php",
2022            async: true,
2023            success: function (msg) {
2024                console.log('apply msg is ', msg, msg.responseText, data);
2025            },
2026            error: function (msg) {
2027                console.log('error apply msg is ', msg.responseText);
2028                //$('.footer-container').css('background-image', "url('/CMS/storage/dev/white-clouds.jpg')");
2029            }
2030        }); //add here
2031    }
2032    // console.log('data.enabled', data.enabled);
2033    let style_data = {}, width_props = null, new_width = null, is_width_fixed_changed = 0;
2034
2035    for (let i = 0, toggle_ar; i < 3; i++) {
2036        if ((toggle_ar = toggle_ars[i])[0] != toggle_ar[1]) {
2037            switch (i) {
2038                case 0:
2039                    ajax_data['enabled'] = toggle_ar[1];
2040                    //styles_ajax(null, null, null, 'e', toggle_ar[1]);
2041                    break;
2042                case 1:
2043                    stylesMap ? 0 : (stylesMap = new Map());
2044                    is_width_fixed_changed = 1;
2045                    console.log(stylesMap, currentSelectors + ' .menu ul li.head_menu_li');
2046                    let style_map = stylesMap.get(currentSelectors + ' .menu ul li.head_menu_li');
2047                    if (!style_map) {
2048                        stylesMap.set(currentSelectors + ' .menu ul li.head_menu_li', (style_map = new Map()));
2049                    }
2050                    width_props = toggle_ar[1] ? ['min-width', 'width'] : ['width', 'min-width'];
2051                    for (let prop of width_props) {
2052                        if (style_map.has(prop)) {
2053                            new_width = prop + ': ' + style_map.get(prop)
2054                            style_map.delete(prop);
2055                        }
2056                        ;
2057                    }
2058                    //styles_ajax(currentSelectors + ' .menu ul li.head_menu_li', width_props[0], width_props[1], 'p');
2059                    //style_map.set(width_props[1], style_map[width_props[0]]);
2060
2061                    break;
2062                case 2:
2063                    stylesMap ? 0 : (stylesMap = new Map());
2064                    let map_selector = stylesMap.get(currentSelectors + ' .menu li a');
2065                    if (!map_selector) {
2066                        map_selector = new Map();
2067                        stylesMap.set(currentSelectors + ' .menu li a', map_selector);
2068                    }
2069                    map_selector.set('display', toggle_ar[1] ? 'flex' : 'grid');
2070            }
2071        }
2072    }
2073    console.log(currentSelectors);
2074    console.log('stylesMap', stylesMap);
2075    for (let [selector, innerMap] of stylesMap) {
2076        let entries;
2077        if (!(innerMap && (entries = innerMap.entries()))) {
2078            continue;
2079        }
2080        //check if empty, convert map to array or object
2081        let selector_changes = {v: Object.fromEntries(entries)};
2082        if (removingMap && removingMap.has(selector)) {
2083            selector_changes['d'] = Object.fromEntries(removingMap.get(selector).entries());
2084            removingMap.remove(selector);
2085        }
2086
2087        style_data[selector] = selector_changes;
2088
2089    } //согласовать их между собой
2090    if (removingMap) { //if not empty
2091        for (let [selector, innerMap] of removingMap) {
2092            //check if empty, convert map to array or object
2093
2094            //if ajax_data  has not selector -
2095            style_data[selector] = {'d': Object.fromEntries(innerMap.entries())};
2096            /*for (let [prop, val] of props) {
2097                styles_ajax(selector, prop, val, 'd', 1);
2098            }*/
2099        }
2100        removingMap.clear();
2101    }
2102
2103    if (currentSelectors.includes('head-block')) {
2104        //console.log('top_height is ', top_height);
2105        let top_height = $('body > div.head-block').css('height');
2106        top_height = Number(top_height.match(/\d+\.?\d*/)) + 'px';
2107        //changeStylesMap('body.partner', 'margin-top', top_height);
2108        //styles_ajax('body.partner', 'margin-top', top_height);
2109        (style_data['body.partner']) || (style_data['body.partner'] = {});
2110        (style_data['body.partner']['v']) || (style_data['body.partner']['v'] = {});
2111        style_data['body.partner']['v']['margin-top'] = top_height + ' !important';
2112        changeStyleOnPage('margin-top', top_height, 'body.partner');
2113    }
2114
2115    if (is_width_fixed_changed) {
2116        let key = new_width ? 'b' : 'p';
2117        (style_data[currentSelectors + ' .menu ul li.head_menu_li'][key]) || (style_data[currentSelectors + ' .menu ul li.head_menu_li'][key] = {});
2118        style_data[currentSelectors + ' .menu ul li.head_menu_li'][new_width ? 'b' : 'p'][width_props[0]] = (new_width ?? width_props[1]);
2119    }
2120
2121    /*if (edit_enable[0] != edit_enable[1]){
2122        styles_ajax(null, null, null, 'e', edit_enable[1]);
2123    } //icon_left
2124    if (width_fixed[0] != width_fixed[1]){
2125        styles_ajax(null, null, null, 'f', width_fixed[1]);
2126    }
2127    if (icon_top[0] != icon_top[1]){
2128        styles_ajax(null, null, null, 'i', icon_top[1]);
2129    }*/
2130//}
2131
2132
2133    /*function removeStyleInMap(selector, prop, input){
2134        if(!removingMap){
2135                removingMap = new Map();
2136            }
2137            if(removingMap.has(selector)){
2138                removingMap.get(selector).add(prop);
2139            } else {
2140                let innerSet = new Set();
2141                innerSet.add(prop);
2142                removingMap.set(selector, innerSet);
2143            }
2144         }*/
2145
2146    if (Object.keys(style_data).length > 0) {
2147        ajax_data['selectors'] = style_data;
2148    }
2149
2150    console.log(ajax_data['selectors'], "test_selectors");
2151    $.ajax({
2152        type: 'POST',
2153        data: ajax_data,
2154        url: "CMS/AJAX/change_css_from_settings.php",
2155        async: true,
2156        success: function (msg) {
2157            console.log('apply msg is ', msg, msg.responseText);
2158            console.log(ajax_data);
2159            if (reloadParentAfterSave) {
2160                reloadParentAfterSave = 0;
2161                reloadParentPage();
2162            }
2163        },
2164        error: function (msg) {
2165            console.log('error apply msg is ', msg.responseText);
2166            //$('.footer-container').css('background-image', "url('/CMS/storage/dev/white-clouds.jpg')");
2167        }
2168    }); //add here
2169
2170}
2171
2172function changeStylesMap(selector, prop, input, is_removing = 0) {
2173    if (is_removing && !removingMap) {
2174        removingMap = new Map();
2175    }
2176    let map = is_removing ? removingMap : stylesMap;
2177    if (map.has(selector)) {
2178        map.get(selector).set(prop, input);
2179    } else {
2180        let innerMap = new Map();
2181        innerMap.set(prop, input);
2182        map.set(selector, innerMap);
2183        // console.log('innerMap', innerMap);
2184    }
2185    if (is_removing) {
2186        // console.log('removingMap', removingMap);
2187    }
2188    /*if(selector.includes('head-block')){
2189        //console.log('top_height is ', top_height);
2190        let top_height = $('body > div.head-block').css('height');
2191        top_height = Number(top_height.match(/\d+\.?\d*?/)) + 'px';
2192        changeStylesMap('body.partner', 'margin-top', top_height);
2193        changeStyleOnPage('margin-top', top_height, 'body.partner');
2194    }*/
2195    const $elBorder = $(selector);
2196    $elBorder.removeClass('partner_section');
2197    const borderStyle = $elBorder.css('border-style');
2198    $elBorder.addClass('partner_section');
2199    if (!is_removing && prop.includes('border') && prop != 'border-style' && borderStyle === 'none') {
2200        console.log("testBorder2");
2201        changeStylesMap(currentSelectors, 'border-style', 'solid');
2202        changeStyleOnPage('border-style', 'solid', selector);
2203    }
2204}
2205
2206function splitStyles(value) {
2207    let parts, style_name, style_value, styles = value.split(';'), result = {};
2208    // console.log('style is', styles);
2209    for (let style of styles) {
2210        if (parts = style.split(':')) {
2211            [style_name, style_value] = parts;
2212            // console.log('name is', style_name, style_value, parts);
2213            if (style_name && style_value && (style_name = style_name.trim()) && (style_value = style_value.trim())) {
2214                result[style_name] = style_value;
2215                // console.log('name is', style_name, style_value);
2216                //changeStylesMap(currentSelectors, style_name, style_value);
2217                //changeStyleOnPage(style_name, style_value, currentSelectors);
2218            }
2219        }
2220    }
2221    return result;
2222}
2223
2224function changeMenuStyles(style_string, prop, isChangingPageStyle, isRewriting) {
2225    let value;
2226    if (prop) {
2227        value = style_string;
2228    } else if (style_string == saved_style) {
2229        // если строка не изменилась — ничего не делаем
2230        return;
2231    }
2232
2233    // актуальную строку styled
2234    if (!style_string) {
2235        style_string = $('textarea[target_prop="styled"]').val();
2236    }
2237    console.log("saved_style",saved_style);
2238    if (!saved_style_arr) {
2239        saved_style_arr = splitStyles(prop
2240            ? $('textarea[target_prop="styled"]').val()
2241            : saved_style);
2242    }
2243    let currentStyles = prop ? saved_style_arr : splitStyles(style_string);
2244    let rewriteDiff = {}, removeDiff = {};
2245    let difs = [rewriteDiff, removeDiff];
2246    let menu_styles = [currentStyles, saved_style_arr];
2247
2248    if (prop) {
2249        let is_deleting = (value ? (!(value = value.trim())) : (value !== '0' && value !== 0));
2250
2251        currentStyles[prop] = is_deleting ? null : value;
2252
2253        // Применяем визуально (вызовет changeStyleOnPage + changeStylesMap)
2254        console.log("changeRelatedProps",prop,value);
2255        changeRelatedProps(prop, value, isChangingPageStyle, isRewriting, is_deleting, 0);
2256
2257        // Обновляем строку styled в textarea
2258        let prop_template = new RegExp('(?<!-)\\b' + prop + '\\s*:.*?;', 'g');
2259        let prop_value = $('textarea[target_prop="styled"]').val();
2260
2261        if (is_deleting) {
2262            if (prop_template.exec(prop_value)) {
2263                style_string = prop_value.replaceAll(prop_template, '');
2264            }
2265        } else {
2266            style_string = prop_template.exec(prop_value)
2267                ? prop_value.replaceAll(prop_template, `${prop}: ${value};`)
2268                : (prop_value + `${prop}: ${value};`);
2269        }
2270
2271        $('textarea[target_prop="styled"]').val(style_string);
2272
2273    } else {
2274        //если вся строки изменилась
2275        for (let i = 0, styles_a; i < 2; i++) {
2276            let styles_b = menu_styles[1 - i];
2277            let dif = difs[i];
2278            for (let key in (styles_a = menu_styles[i])) {
2279                if (!(styles_b.hasOwnProperty(key) && (i ? 1 : styles_b[key] == styles_a[key]))) {
2280                    dif[key] = styles_a[key];
2281                }
2282            }
2283
2284            if (Object.keys(dif).length) {
2285                for (let key in dif) {
2286                    let val = dif[key];
2287
2288                    // 🔥 Добавляем !important, если его Ð
2288½ÐµÑ‚
2289                    if (typeof val === 'string' && !/!important/i.test(val)) {
2290                        val = val.trim() + ' !important';
2291                    }
2292
2293                    console.log("changeRelatedProps2", key, val);
2294                    changeRelatedProps(key, val, isChangingPageStyle, isRewriting, i);
2295                }
2296            }
2297        }
2298    }
2299    if (style_string && !style_string.includes('!important')) {
2300        style_string = style_string.replace(/:\s*([^;]+);/g, ': $1 !important;');
2301
2302    }
2303
2304    // === 7️⃣ Обновляем буферы состояния ===
2305    saved_style_arr = currentStyles;
2306    saved_style = style_string;
2307}
2308function syncTextInputsFromTextStyled(obj) {
2309    const $sec = $('#settings_popup section.tab-section[value="text"]');
2310
2311    // цвет
2312    if (obj.color) {
2313        const clean = obj.color.replace(/\s*!important\s*/gi,'').trim();
2314        $sec.find('button.color_display[target_prop="color"]').css('background-color', clean);
2315        // в инпут пишем HEX (как у тебя в меню)
2316        const hex = /rgba?\(/i.test(clean) ? rgba2hex(clean) : clean;
2317        $sec.find('input.colorpicker__input[target_prop="color"]').val(hex);
2318    }
2319
2320    // font-size
2321    if (obj['font-size']) {
2322        $sec.find('input.colorpicker__input[target_prop="font-size"]').val(
2323            obj['font-size'].replace(/\s*!important\s*/gi,'').trim()
2324        );
2325    }
2326
2327    // font-family
2328    if (obj['font-family']) {
2329        const fam = obj['font-family'].replace(/\s*!important\s*/gi,'').trim();
2330        $('#text_font_select').val(fam);
2331    }
2332}
2333
2334function changeRelatedTextProps(key, value, isChangingPageStyle, isRewriting, is_removing = 0) {
2335    const cleanValue = (typeof value === 'string')
2336        ? value.replace(/\s*!important\s*/gi,'').trim()
2337        : value;
2338
2339    // UI синхронизация
2340    const obj = {};
2341    if (!is_removing && cleanValue != null) obj[key] = cleanValue;
2342    syncTextInputsFromTextStyled(obj);
2343
2344    // применяем в карту и на страницу
2345    const vImp = is_removing ? '' : normalizeImportant(cleanValue);
2346
2347    if (isRewriting) {
2348        changeStylesMap(currentSelectors, key, vImp, is_removing);
2349    }
2350    if (isChangingPageStyle) {
2351        changeStyleOnPage(key, vImp, currentSelectors, 0, is_removing);
2352    }
2353}
2354
2355function changeTextStyles(style_string, prop, isChangingPageStyle, isRewriting) {
2356    const $ta = $('#settings_popup textarea[target_prop="text-styled"]');
2357
2358    if (!saved_text_style_arr) {
2359        saved_text_style_arr = splitStyles($ta.val() || '');
2360    }
2361
2362    // 1) изменили ОДНО свойство (из инпутов color/font-size/font-family)
2363    if (prop) {
2364        const v = (style_string ?? '').toString().trim();
2365        const is_del = (!v && v !== '0');
2366
2367        if (is_del) {
2368            delete saved_text_style_arr[prop];
2369            changeRelatedTextProps(prop, null, isChangingPageStyle, isRewriting, 1);
2370        } else {
2371            saved_text_style_arr[prop] = v;
2372            changeRelatedTextProps(prop, v, isChangingPageStyle, isRewriting, 0);
2373        }
2374
2375        const rebuilt = buildStyledStringFromObj(saved_text_style_arr);
2376        $ta.val(rebuilt);
2377        saved_text_style = rebuilt;
2378        return;
2379    }
2380
2381    // 2) изменили ВСЮ строку (в textarea)
2382    if (style_string === saved_text_style) return;
2383
2384    const newObj = splitStyles(style_string || '');
2385
2386    // удалённые
2387    for (const k in saved_text_style_arr) {
2388        if (!(k in newObj)) {
2389            changeRelatedTextProps(k, null, isChangingPageStyle, isRewriting, 1);
2390        }
2391    }
2392    // добавленные/изменённые
2393    for (const k in newObj) {
2394        if (saved_text_style_arr[k] !== newObj[k]) {
2395            changeRelatedTextProps(k, newObj[k], isChangingPageStyle, isRewriting, 0);
2396        }
2397    }
2398
2399    saved_text_style_arr = newObj;
2400
2401    // нормализуем !important
2402    let norm = (style_string || '').trim();
2403    if (norm && !/!important/i.test(norm)) {
2404        norm = norm.replace(/:\s*([^;]+);/g, ': $1 !important;');
2405    }
2406    $ta.val(norm);
2407    saved_text_style = norm;
2408
2409    // синхронизируем L_text_color / L_text_fontsize / L_text_font
2410    syncTextInputsFromTextStyled(saved_text_style_arr);
2411}
2412
2413function changeRelatedProps(key, value, isChangingPageStyle, isRewriting, is_removing = 0, affectInput = 1) {
2414    console.log("currentSelectors3",key,value);
2415    console.log("is_removing",is_removing);
2416    if (isRewriting) {
2417        //console.log("keeyy",key);
2418        if (affectInput) {
2419            if (key == 'color') {
2420                let button = $('button.color_display[target_prop="menu-color"]');
2421                const cleanValue = typeof value === 'string' ? value.replace(/\s*!important\s*/gi, '').trim() : value;
2422                button.css('background', cleanValue);
2423                const hexValue = rgba2hex(button.css('background-color'));
2424                $('input[target_prop="menu-color"]').val(hexValue);
2425            } else if (key == 'font-size') {
2426                $('input[target_prop="menu-font-size"]').val(value);
2427            } else if (key == 'font-family') {
2428                // console.log(key);
2429                let select = $('#menu_font_select'), has_option = 0;
2430                if (select.val() != value) {
2431                    // console.log(value);
2432                    $("#menu_font_select option").each(function () {
2433                        if ($(this).val() == value) {
2434                            select.val(value);
2435                            has_option = 1;
2436                            return false;
2437                        }
2438                        // Add $(this).val() to your list
2439                    });
2440                    // console.log('select.val', select.val(), has_option);
2441                    if (!has_option) {
2442                        select.val('');
2443                    }
2444                }
2445            }
2446        }
2447        console.log("currentSelectors2",currentSelectors,key,value);
2448        changeStylesMap(currentSelectors, key, value, is_removing);
2449    }
2450    isChangingPageStyle && changeStyleOnPage(key, value, currentSelectors, 0, is_removing);
2451    // console.log('key i of dif', key, is_removing);
2452}
2453
2454function enableEdit(is_enabled, is_init = false) {
2455    /*$('div:has( > #editEnableBody) > span.'+(isBodyEditable?'right':'left')).addClass('selected');
2456    $('#editEnableBody').prop('checked', !!isBodyEditable);
2457    edit_enable[0] = edit_enable[1] = (isBodyEditable ? 1 : 0);*/
2458    /*$('div:has( > #editEnableBody) > span.'+(is_enabled?'right':'left')).addClass('selected');
2459    if(!is_init){
2460        $('div:has( > #editEnableBody) > span.'+(is_enabled?'left':'right')).removeClass('selected');
2461    }
2462    $('#editEnableBody').prop('checked', !!is_enabled);
2463    edit_enable[0] = edit_enable[1] = (is_enabled ? 1 : 0);*/
2464} //icon_left
2465
2466function setToggles(is_init = false, is_renew = false) {
2467    for (let i = 0, is_enabled, id, var_ar = toggle_ars[0]; i < 3; var_ar = toggle_ars[++i]) {
2468        //is_enabled = (is_init ? (i ? isIconLeft : isBodyEditable) : var_ar[0]);
2469        if ((is_renew && (i == 0 || var_ar[0] == var_ar[1])) || (!is_init && (var_ar[0] == var_ar[1]))) {
2470            console.log('setToggles of', is_renew, i, var_ar);
2471            continue;
2472        }
2473        is_active = (is_init ? toggle_vars[i] : var_ar[is_renew ? 1 : 0]);
2474        // console.log('is_enabled', is_enabled, toggle_ids[i]);
2475        $('div:has( > #' + (id = toggle_ids[i]) + ') > span.' + (is_active ? 'right' : 'left')).addClass('selected');
2476        if (is_init) {
2477            $('#' + id).on('change', (e) => {
2478                var_ar[1] = Number(!(var_ar[1]));
2479                // console.log(var_ar);
2480                if (id === 'editEnable') {
2481                    reloadParentAfterSave = 1;
2482                }
2483            });
2484        } else {
2485            $('div:has( > #' + id + ') > span.' + (is_active ? 'left' : 'right')).removeClass('selected');
2486        }
2487        $('#' + id).prop('checked', !!is_active);
2488        var_ar[0] = var_ar[1] = (is_active ? 1 : 0);
2489    }
2490}
2491
2492$(document).ready(function ($) {
2493    window.onscroll = function () {
2494// Widing and narrowing the top menu on scroll
2495        if (window.pageYOffset > 0 && pageYOld == 0) {
2496            $('div.head-main').addClass('menu-narrow');
2497            $('div.head-main').removeClass('menu-wide');
2498        } else if (window.pageYOffset == 0 && pageYOld > 0) {
2499            $('div.head-main').addClass('menu-wide');
2500            $('div.head-main').removeClass('menu-narrow');
2501        }
2502
2503        if (window.pageYOffset > 200 && pageYOld <= 200) {
2504            $('div.overhead').addClass('overhead-hidden');
2505            $('div.overhead').removeClass('overhead-shown');
2506        } else if (window.pageYOffset <= 200 && pageYOld > 200) {
2507            $('div.overhead ul.main-menu-list').addClass('disp_none');
2508            $('div.overhead').removeClass('overhead-hidden');
2509            $('div.overhead').addClass('overhead-shown');
2510            window.setTimeout(() => {
2511                $('div.overhead ul.main-menu-list').removeClass('disp_none');
2512            }, 280);
2513        }
2514        pageYOld = window.pageYOffset;
2515    }
2516});
2517
2518$(".menu li a").hover(
2519    function () {
2520        $(this).addClass("hover");
2521    }, function () {
2522        $(this).removeClass("hover");
2523    }
2524);
2525$(document).ready(function () {
2526    var nav = $(".nav");
2527    // console.log(3333);
2528    var navItems = nav.find(".page-tab");
2529    // console.log(navItems);
2530    var now = 0;
2531    var windowWidth = $(window).width();
2532
2533    var checkVisibilityOnScroll = function () {
2534        windowWidth = $(window).width(); // Обновляем ширину окна при скролле
2535
2536        navItems.each(function () {
2537            var $currentElement = $(this);
2538            var elementRight = $currentElement.offset().left + $currentElement.outerWidth();
2539
2540            if (
2541                $currentElement.offset().left < 0 ||
2542                elementRight > windowWidth
2543            ) {
2544                $currentElement.addClass("hidden");
2545            } else {
2546                $currentElement.removeClass("hidden");
2547            }
2548        });
2549    };
2550    checkVisibilityOnScroll();
2551    nav.on('scroll', checkVisibilityOnScroll);
2552});
2553$(document).ready(function () {
2554    const $container = $('.nav');
2555    const $leftArrow = $('.left-arrow');
2556    const $rightArrow = $('.right-arrow');
2557
2558    if ($container.length && $leftArrow.length && $rightArrow.length) {
2559        // Function to toggle visibility of arrows based on scroll position
2560        function toggleArrows() {
2561            $leftArrow.toggle($container.scrollLeft() > 0);
2562            $rightArrow.toggle($container.scrollLeft() < ($container[0].scrollWidth - $container.outerWidth()));
2563        }
2564
2565        // Initial check for arrow visibility
2566        toggleArrows();
2567
2568        // Add event listeners for arrow clicks
2569        $leftArrow.on('click', function () {
2570            $container.animate({scrollLeft: '-=100px'}, 'slow', toggleArrows);
2571        });
2572
2573        $rightArrow.on('click', function () {
2574            $container.animate({scrollLeft: '+=100px'}, 'slow', toggleArrows);
2575        });
2576
2577        // Add event listener for scroll event to toggle arrow visibility
2578        $container.on('scroll', toggleArrows);
2579    }
2580});
2581
2582$(document).ready(function () {
2583    if (isEditable) {
2584        $('a.mp_edit:has( > .fa-plus)').attr('data-tooltip', L_add_section);
2585        let lastElement = $('a.mp_edit:has( > .fa-plus)').last();
2586        let clonedElement = lastElement.clone();
2587        clonedElement.attr('data-tooltip', L_add_section).addClass('end');
2588        lastElement.after(clonedElement);
2589        $('a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit);
2590        $('.main-menu-list a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_menu);
2591        $('#logo-wrap a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_logo);
2592        $('.edit-wrapper:has(h1) a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_title);
2593        $('.edit-wrapper:has(h2) a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_title);
2594        $('.edit-wrapper:has(h3) a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_title);
2595        $('.edit-wrapper:has(h4) a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_title);
2596        $('.edit-wrapper:has(h5) a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_title);
2597        $('.edit-wrapper:has(h6) a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_title);
2598        $('.edit-content a.mp_edit:has( > .fa-pencil)').attr('data-tooltip', L_edit_text);
2599    } else {
2600        // $('a.mp_edit:has( > .fa-pencil), a.mp_edit:has( > .fa-plus)').remove();
2601        $('div.sectionAdminWrap').addClass("hidden_vis");
2602    }
2603    let dropdown_toggle = $(".dropdown-toggle:has( a > .hover-checkbox), .dropdown-toggle:has( a > .hover-checkbox) .dropdown-submenu");
2604    //dropdown_span = $(".dropdown-toggle > a:has( > .hover-checkbox), .dropdown-toggle > a:has( > .hover-checkbox) .dropdown-submenu");//  > a > .head_menu_li_span-text
2605    //console.log(dropdown_span);
2606    //console.log($(".dropdown-submenu > a"));
2607    dropdown_toggle.on('click', (e) => {
2608        e.stopPropagation();
2609        e.currentTarget.classList.toggle("dropdown-active");
2610        //console.log(e.currentTarget, e.target);
2611        //console.log(e.currentTarget.closest('li'));
2612    });
2613    dropdown_toggle.on('mouseover', (e) => {
2614        e.currentTarget.classList.add("dropdown-active");
2615        //console.log(e.currentTarget.closest('li').classList);
2616    });
2617    dropdown_toggle.on('mouseout', (e) => {
2618        e.currentTarget.classList.remove("dropdown-active");
2619    });
2620    $('.dropdown-toggle .dropdown-menu span.head_menu_li_span_bg').each(function () {
2621        console.log($(this), $(this).css('width'), $(this).parent);
2622        if ($(this).css('width') == '0px') {
2623            $(this).parent().addClass('no_pics');
2624        }
2625    });
2626    let is_found, is_fixed = false, endStyleElem = document.head.appendChild(document.createElement("style")),
2627        inner_html = '';
2628    if ($(".head-main .head-main-in .head_menu ul li a").css('display') == 'grid') {
2629        //$(".head-main .head-main-in .head_menu ul li a:has( > span.w0)").css('gap', '0');
2630        inner_html = ".head-main .head-main-in .head_menu ul li a:has( > span.w0) {gap:0}";
2631        //let menu_li_elem = document.querySelector(".head-main .head-main-in div.head_menu ul li.head_menu_li");
2632
2633        $.each(document.styleSheets, function (sheetIndex, sheet) {
2634            if (sheet.href && sheet.href.includes('CMS/frontend/basic/css-advanced/')) {
2635                //console.log("Looking at styleSheet[" + sheetIndex + "]:");
2636                $.each((foundSheet = sheet).cssRules, function (ruleIndex, rule) {
2637                    //console.log(rule.cssText)
2638                    // console.log("rule[" + ruleIndex + "]: " + rule.cssText, selector);
2639                    if ((css_txt = rule.cssText).startsWith('body > div.head-block > div.head-main .menu ul li.head_menu_li {')) {
2640                        is_fixed = /\d.+/.test(rule.style['width']);
2641                        is_found = (is_fixed || /\d.+/.test(rule.style['minWidth']))
2642                        console.log(rule.style, /\d.+/.test(rule.style['width']), /\d.+/.test(rule.style['minWidth']), rule.style['minWidth']);
2643                        return false;
2644                    }
2645                }); //add here if is abscent
2646                return false;
2647            }
2648            //console.log("Looking at styleSheet[" + sheetIndex + "]:");
2649        });
2650
2651        //width_fixed[0]
2652        if (is_found) {
2653            inner_html += ".head-main .head-main-in .head_menu > ul.main-menu-list {gap:10px;}";
2654        }
2655        if (is_fixed) {
2656            $('.head-main .head-main-in .head_menu ul li a').css('grid-template-columns', 'auto fit-content(calc(100% - 45px))');
2657            console.log('1608');
2658        } else {
2659            let spans = $("div.head-main div.head-main-in .main-menu-list > li > a > span.head_menu_li_span-text > span")
2660            let then = Date.now();
2661            for (let i = 0; i < 3; i++) {
2662                spans.each(function () {
2663                    let width = Number($(this).css('width').slice(0, -2)), parent = $(this).parent();
2664                    // console.log($(this), /*getComputedStyle($(this).parent()[0]).getPropertyValue("width"),*/ Number(parent.css('width').slice(0, -2)), width, Number(parent.css('width').slice(0, -2)) - width);
2665
2666                    // if(Number(parent.css('width').slice(0, -2)) - width > 4){
2667                    parent.css('width', width);
2668                    //}
2669                });
2670            }
2671            ;
2672            console.log(Date.now() - then);
2673        }
2674    } else {
2675        inner_html = ".head-main .head-main-in .head_menu .dropdown-toggle > a > .head_menu_li_span-text::after {top:calc(45px + (100% - 45px) / 2);position:absolute;}";
2676        inner_html += " .head-main .head-main-in .head_menu > ul.main-menu-list {gap:25px;}";
2677    }
2678    endStyleElem.innerHTML = inner_html; // calculate the icon
2679    /*let text = $('div.head-main div.head-main-in .main-menu-list > li > a > span.head_menu_li_span-text').contents().filter(function() {
2680        return this.nodeType == Node.TEXT_NODE;
2681    });*/
2682    //console.log($('div.head-main div.head-main-in .main-menu-list > li > a > span.head_menu_li_span-text').contents(), text);
2683
2684
2685});
2686document.addEventListener('keydown', function(event) {
2687    if (event.key === 'Escape'&& (typeof is_popup_vis !== 'undefined')  && !is_popup_vis) {
2688        console.log(event.key);
2689        showBlockSettings('x');
2690        setPaletteVisible(0);
2691    }
2692});

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.