// Добавление русского языка editor.I18n.addMessages({ ru: { styleManager: { sectors: { 'general': 'Общие', 'dimension': 'Размер', 'typography': 'Типографика', 'decorations': 'Оформление', 'extra': 'Ещё больше', 'flex': 'Flex', }, properties: { 'background-repeat': 'Повторение', 'background-position': 'Позиция', 'width': 'Ширина', 'height': 'Высота', 'max-width': 'Макс. ширина', 'min-height': 'Мин. высота', 'margin': 'Отступ', 'padding': 'Внутр.отступ', 'font-family': 'Шрифт', 'font-size': 'Размер шрифта', 'font-weight': 'Толщина шрифта', 'color': 'Цвет текста', 'text-align': 'Вырав. текста', 'text-decoration': 'Оформ. текста', 'text-shadow': 'Текст. тень', 'opacity': 'Прозрачность', 'border-radius': 'Радиус скруг.', 'border': 'Граница', 'box-shadow': 'Тень блока', 'background': 'Фон', } }, blockManager: { labels: { 'responsive-image': 'Адаптивное изображение', 'centered-text': 'Центрированный текст', } }, panels: { buttons: { 'open-code': 'Открыть код', 'gjs-open-import-webpage': 'Импортировать', } }, commands: { 'gjs-open-import-webpage': { title: 'Импортировать шаблон', label: '
Вставьте здесь ваш HTML/CSS и нажмите Импортировать
', } } } }); // Установка русского языка по умолчанию editor.I18n.setLocale('ru'); // Удаление ненужных блоков const unwantedBlocks = ['video', 'link', 'image']; unwantedBlocks.forEach(blockId => { editor.BlockManager.remove(blockId); }); // Добавление блока адаптивной картинки editor.BlockManager.add('responsive-image', { label: editor.I18n.t('blockManager.labels.responsive-image'), content: { type: 'image', style: { display: 'block', margin: 'auto', maxWidth: '100%', height: 'auto', objectFit: 'cover' }, attributes: { alt: 'Responsive Image' } }, attributes: { class: 'fa fa-image' } }); // Добавление блока центрированного текста editor.BlockManager.add('centered-text', { label: editor.I18n.t('blockManager.labels.centered-text'), content: { type: 'text', style: { textAlign: 'center' }, content: 'Centered Text' }, attributes: { class: 'fa fa-align-center' } }); // Создаем новый тип компонента для настройки подписной - 1 editor.Components.addType('avp_grup_v1-settings-block', { model: { defaults: { // HTML-код пустого блока с постоянным идентификатором content: '
', // Скрипт для обработки блока (если нужно) script: function(props) { window.avp = props.avp; window.grup = props.grup; window.red_url = props.red_url; window.hook = props.hook; // Теперь это будет булево значение (true/false) const initBlock = () => { console.log('Menu settings block initialized with props:', { avp, grup, red_url, hook }); }; const loadScript = (src, callback) => { const script = document.createElement('script'); script.src = src; script.onload = callback; document.body.appendChild(script); }; // Загружаем необходимые скрипты динамически if (typeof vkBridge === 'undefined') { loadScript('https://unpkg.com/@vkontakte/vk-bridge/dist/browser.min.js', () => { console.log('VK Bridge loaded!'); initBlock(); }); } else { initBlock(); } if (typeof VK === 'undefined') { loadScript('https://vk.com/js/api/openapi.js?169', () => { console.log('VK Open API loaded!'); }); } loadScript('https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/avp_grup_v1.js', () => { console.log('Custom script loaded!'); }); }, // Свойства, которые будут передаваться в скрипт 'script-props': ['avp', 'grup', 'red_url', 'hook'], // Настройки для изменения URL отправки traits: [ { type: 'text', name: 'avp', label: 'AVP', changeProp: true }, { type: 'text', name: 'grup', label: 'GRUP', changeProp: true }, { type: 'text', name: 'red_url', label: 'RED_URL', changeProp: true }, { type: 'checkbox', // Изменено на checkbox name: 'hook', label: 'HOOK', changeProp: true } ] } } }); editor.Blocks.add('avp_grup_v1-settings-block-block', { label: ` avp_grup_v1`, content: { type: 'avp_grup_v1-settings-block' }, }); // Создаем новый тип компонента для блока настроек формы с подписной editor.Components.addType('avp_form_v1-settings-block', { model: { defaults: { // HTML-код пустого блока с постоянным идентификатором content: '
', // Скрипт для обработки блока (если нужно) script: function(props) { window.avp = props.avp; window.grup = props.grup; window.red_url = props.red_url; window.pol_a = props.pol_a; window.pol_b = props.pol_b; window.new_w = props.new_w; const initBlock = () => { console.log('Empty block initialized with props:', { avp, grup, red_url, pol_a, pol_b, new_w }); }; const loadScript = (src, callback) => { const script = document.createElement('script'); script.src = src; script.onload = callback; document.body.appendChild(script); }; // Загружаем необходимые скрипты динамически if (typeof vkBridge === 'undefined') { loadScript('https://unpkg.com/@vkontakte/vk-bridge/dist/browser.min.js', () => { console.log('VK Bridge loaded!'); initBlock(); }); } else { initBlock(); } if (typeof VK === 'undefined') { loadScript('https://vk.com/js/api/openapi.js?169', () => { console.log('VK Open API loaded!'); }); } loadScript('https://huggingface.co/spaces/vkatis/api/resolve/main/bundle.3ea86973b4b6c8f6c2bf.js', () => { console.log('Custom script loaded!'); }); }, // Свойства, которые будут передаваться в скрипт 'script-props': ['avp', 'grup', 'red_url', 'pol_a', 'pol_b', 'new_w'], // Настройки для изменения URL отправки traits: [ { type: 'text', name: 'avp', label: 'AVP', changeProp: true }, { type: 'text', name: 'grup', label: 'GRUP', changeProp: true }, { type: 'text', name: 'red_url', label: 'RED_URL', changeProp: true }, { type: 'text', name: 'pol_a', label: 'POL_A', changeProp: true }, { type: 'text', name: 'pol_b', label: 'POL_B', changeProp: true }, { type: 'text', name: 'new_w', label: 'NEW_W', changeProp: true } ] } } }); editor.Blocks.add('avp_form_v1-settings-block-block', { label: ` avp_form_v1`, content: { type: 'avp_form_v1-settings-block' }, }); // Создаем новый тип компонента для блока настроек формы с подписной 2 editor.Components.addType('avp_form_v2-settings-block', { model: { defaults: { // HTML-код пустого блока с постоянным идентификатором content: '
', // Скрипт для обработки блока (если нужно) script: function(props) { window.avp = props.avp; window.grup = props.grup; window.red_url = props.red_url; window.pol_a = props.pol_a; window.pol_b = props.pol_b; window.new_w = props.new_w; const initBlock = () => { console.log('Empty block initialized with props:', { avp, grup, red_url, pol_a, pol_b, new_w }); }; const loadScript = (src, callback) => { const script = document.createElement('script'); script.src = src; script.onload = callback; document.body.appendChild(script); }; // Загружаем необходимые скрипты динамически if (typeof vkBridge === 'undefined') { loadScript('https://unpkg.com/@vkontakte/vk-bridge/dist/browser.min.js', () => { console.log('VK Bridge loaded!'); initBlock(); }); } else { initBlock(); } if (typeof VK === 'undefined') { loadScript('https://vk.com/js/api/openapi.js?169', () => { console.log('VK Open API loaded!'); }); } loadScript('https://huggingface.co/spaces/vkatis/api/resolve/main/bundle.3ea86973b4b6c8f6c2bf.js', () => { console.log('Custom script loaded!'); }); }, // Свойства, которые будут передаваться в скрипт 'script-props': ['avp', 'grup', 'red_url', 'pol_a', 'pol_b', 'new_w'], // Настройки для изменения URL отправки traits: [ { type: 'text', name: 'avp', label: 'AVP', changeProp: true }, { type: 'text', name: 'grup', label: 'GRUP', changeProp: true }, { type: 'text', name: 'red_url', label: 'RED_URL', changeProp: true }, { type: 'text', name: 'pol_a', label: 'POL_A', changeProp: true }, { type: 'text', name: 'pol_b', label: 'POL_B', changeProp: true }, { type: 'text', name: 'new_w', label: 'NEW_W', changeProp: true } ] } } }); editor.Blocks.add('avp_form_v2-settings-block-block', { label: ` avp_form_v2`, content: { type: 'avp_form_v2-settings-block' }, }); // Создаем новый тип компонента для настройки подписной с доступом через AVP и подписной - 1 editor.Components.addType('avp-look_1-settings-block', { model: { defaults: { // HTML-код пустого блока с постоянным идентификатором content: '
', // Скрипт для обработки блока (если нужно) script: function(props) { window.avp = props.avp; window.grup = props.grup; window.hook = props.hook; // Теперь это будет булево значение (true/false) const initBlock = () => { console.log('Menu settings block initialized with props:', { avp, grup, hook }); }; const loadScript = (src, callback) => { const script = document.createElement('script'); script.src = src; script.onload = callback; document.body.appendChild(script); }; // Загружаем необходимые скрипты динамически if (typeof vkBridge === 'undefined') { loadScript('https://unpkg.com/@vkontakte/vk-bridge/dist/browser.min.js', () => { console.log('VK Bridge loaded!'); initBlock(); }); } else { initBlock(); } if (typeof VK === 'undefined') { loadScript('https://vk.com/js/api/openapi.js?169', () => { console.log('VK Open API loaded!'); }); } loadScript('https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/avp_look_v1.js?', () => { console.log('Custom script loaded!'); }); }, // Свойства, которые будут передаваться в скрипт 'script-props': ['avp', 'grup', 'hook'], // Настройки для изменения URL отправки traits: [ { type: 'text', name: 'avp', label: 'AVP', changeProp: true }, { type: 'text', name: 'grup', label: 'GRUP', changeProp: true }, { type: 'checkbox', // Изменено на checkbox name: 'hook', label: 'HOOK', changeProp: true } ] } } }); editor.Blocks.add('avp-look_1-settings-block-block', { label: ` avp_look_v1`, content: { type: 'avp-look_1-settings-block' }, }); // Создаем новый тип компонента для настроек видеоплеера editor.BlockManager.add('player-box', { label: `
player-box
`, content: `
`, attributes: { class: '' } }); editor.CssComposer.addRules(` #player { width: 480px; height: 270px; border: 3px solid black; margin: 0 auto; position: relative; top: 0; display: block; } `); // Создаем новый тип компонента для настроек видеоплеера editor.Components.addType('video-player-settings', { model: { defaults: { // HTML-код блока настроек видеоплеера content: '
', // Скрипт для обработки блока (если нужно) script: function(props) { window.vid_list = props.vid_list; console.log('Video player settings initialized with vid_list:', vid_list); // Подключение указанных скриптов const loadScriptToHead = (src, callback) => { const script = document.createElement('script'); script.src = src; script.onload = callback; document.head.appendChild(script); }; const loadScriptToBody = (src, callback) => { const script = document.createElement('script'); script.src = src; script.onload = callback; document.body.appendChild(script); }; const library = props.library; let playerjsSrc; if (library === '1') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p1/playerjs.js'; } else if (library === '2') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p2/playerjs.js'; } else if (library === '3') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p3/playerjs.js'; } else if (library === '4') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p4/playerjs.js'; } else if (library === '5') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p5/playerjs.js'; } else if (library === '6') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p6/playerjs.js'; } else if (library === '7') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p7/playerjs.js'; } else if (library === '8') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p8/playerjs.js'; } else if (library === '9') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p9/playerjs.js'; } else if (library === '10') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p10/playerjs.js'; } else if (library === '11') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p11/playerjs.js'; } else if (library === '12') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p12/playerjs.js'; } else if (library === '13') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p13/playerjs.js'; } else if (library === '14') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p14/playerjs.js'; } else if (library === '15') { playerjsSrc = 'https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/p15/playerjs.js'; } if (playerjsSrc) { loadScriptToHead(playerjsSrc, () => { console.log('PlayerJS script loaded!'); loadScriptToBody('https://huggingface.co/spaces/DMTuit/psy_vk/resolve/main/js/playerst.js', () => { console.log('PlayerST script loaded!'); }); }); } }, // Свойства, которые будут передаваться в скрипт 'script-props': ['vid_list', 'library'], // Настройки для ввода JSON-строки с данными о видео traits: [ { type: 'select', name: 'library', label: 'Library', options: [ { value: '1', name: 'Плеер - 1' }, { value: '2', name: 'Плеер - 2' }, { value: '3', name: 'Плеер - 3' }, { value: '4', name: 'Плеер - 4' }, { value: '5', name: 'Плеер - 5' }, { value: '6', name: 'Плеер - 6' }, { value: '7', name: 'Плеер - 7' }, { value: '8', name: 'Плеер - 8' }, { value: '9', name: 'Плеер - 9' }, { value: '10', name: 'Плеер - 10' }, { value: '11', name: 'Плеер - 11' }, { value: '12', name: 'Плеер - 12' }, { value: '13', name: 'Плеер - 13' }, { value: '14', name: 'Плеер - 14' }, { value: '15', name: 'Плеер - 15' } ], changeProp: true }, { type: 'text', name: 'vid_list', label: 'Video List', changeProp: true, placeholder: '[{"title":"Название","file":"URL"},...]', style: { width: '100%', height: '200px' } // Широкое поле ввода } ] } } }); // Создаем блок для компонента настроек видеоплеера editor.Blocks.add('video-player-settings-block', { label: `
player-set
`, content: { type: 'video-player-settings' }, }); // Создаем блок для компонента Iframe editor.BlockManager.add('custom-iframe', { label: `
Iframe
`, content: ``, attributes: { class: '' } }); editor.CssComposer.addRules(` #custom-iframe { width: 480px; height: 405px; border: none; margin: 0 auto; position: relative; top: 0; display: block; } `);