feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
- 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
This commit is contained in:
100
modules/backend/assets/ui/js/pages/Preferences.js
Normal file
100
modules/backend/assets/ui/js/pages/Preferences.js
Normal file
@@ -0,0 +1,100 @@
|
||||
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);
|
||||
Reference in New Issue
Block a user