Files
avives 1f72193a64
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
- Base: wintercms/winter branch 1.2 (full framework)
- Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS
- Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication
- Partials: hero (offline-first), features, modes (offline/nube toggle),
  screenshots, pricing (3 planes), comparison, FAQ, CTA
- Plugin VivesPOS.Site with ContactForm
- Dockerfile: PHP 8.2 Apache, port 80, healthcheck
- Added winter/wn-pages, blog, sitemap, seo plugins
- Active theme set to vivespos
2026-08-21 19:29:00 -06:00

101 lines
3.6 KiB
JavaScript

import { delegate } from 'jquery-events-to-dom-events';
((Snowboard) => {
class Preferences extends Snowboard.Singleton {
construct() {
this.widget = null;
}
listens() {
return {
'backend.widget.initialized': 'onWidgetInitialized',
};
}
onWidgetInitialized(element, widget) {
if (element === document.getElementById('CodeEditor-formEditorPreview-_editor_preview')) {
this.widget = widget;
this.enablePreferences();
}
}
enablePreferences() {
delegate('change');
const checkboxes = {
show_gutter: 'showGutter',
highlight_active_line: 'highlightActiveLine',
use_hard_tabs: '!useSoftTabs',
display_indent_guides: 'displayIndentGuides',
show_invisibles: 'showInvisibles',
show_print_margin: 'showPrintMargin',
show_minimap: 'showMinimap',
enable_folding: 'codeFolding',
bracket_colors: 'bracketColors',
show_colors: 'showColors',
};
Object.entries(checkboxes).forEach(([key, value]) => {
this.element(key).addEventListener('change', (event) => {
this.widget.setConfig(
value.replace(/^!/, ''),
/^!/.test(value) ? !event.target.checked : event.target.checked,
);
});
});
this.element('theme').addEventListener('$change', (event) => {
this.widget.loadTheme(event.target.value);
});
this.element('font_size').addEventListener('$change', (event) => {
this.widget.setConfig('fontSize', event.target.value);
});
this.element('tab_size').addEventListener('$change', (event) => {
this.widget.setConfig('tabSize', event.target.value);
});
this.element('word_wrap').addEventListener('$change', (event) => {
const { value } = event.target;
switch (value) {
case 'off':
this.widget.setConfig('wordWrap', false);
break;
case 'fluid':
this.widget.setConfig('wordWrap', 'fluid');
break;
default:
this.widget.setConfig('wordWrap', parseInt(value, 10));
}
});
document.querySelectorAll('[data-switch-lang]').forEach((element) => {
element.addEventListener('click', (event) => {
event.preventDefault();
const language = element.dataset.switchLang;
const template = document.querySelector(`[data-lang-snippet="${language}"]`);
if (!template) {
return;
}
this.widget.setValue(template.textContent.trim());
this.widget.setLanguage(language);
});
});
this.widget.events.once('create', () => {
const event = new MouseEvent('click');
document.querySelector('[data-switch-lang="css"]').dispatchEvent(event);
});
}
element(key) {
return document.getElementById(`Form-field-Preference-editor_${key}`);
}
}
Snowboard.addPlugin('backend.preferences', Preferences);
})(window.Snowboard);