// Добавление русского языка
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: `
`,
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: `
`,
content: { type: 'video-player-settings' },
});
// Создаем блок для компонента Iframe
editor.BlockManager.add('custom-iframe', {
label: `
`,
content: ``,
attributes: {
class: ''
}
});
editor.CssComposer.addRules(`
#custom-iframe {
width: 480px;
height: 405px;
border: none;
margin: 0 auto;
position: relative;
top: 0;
display: block;
}
`);