feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
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:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
<div class="report-container">
<input type="hidden" value="<?= $this->alias ?>" data-container-alias />
<ul
id="<?= $this->getId('container-list') ?>"
class="<?= $this->canAddAndDelete ? 'add-delete' : null ?>"
data-control="report-container">
<?= $this->makePartial('widget_list') ?>
</ul>
<?php if ($this->canAddAndDelete): ?>
<div id="<?= $this->getId('container-toolbar') ?>" data-container-toolbar>
<?= $this->makePartial('widget_toolbar') ?>
</div>
<?php endif ?>
</div>

View File

@@ -0,0 +1,43 @@
<?= Form::open([
'data-request' => $this->getEventHandler('onAddWidget'),
'data-request-success' => "\$(this).trigger('close.oc.popup'); \$(window).trigger('oc.reportWidgetAdded')",
'data-popup-load-indicator' => 1
]) ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="popup">&times;</button>
<h4 class="modal-title"><?= e(trans('backend::lang.dashboard.add_widget')) ?></h4>
</div>
<div class="modal-body">
<div class="form-group">
<label><?= e(trans('backend::lang.dashboard.widget_label')) ?></label>
<select class="form-control custom-select" name="className" data-placeholder="<?= e(trans('backend::lang.form.select_placeholder')) ?>">
<option></option>
<?php foreach ($widgets as $className => $widgetInfo):?>
<option value="<?= e($className) ?>"><?= isset($widgetInfo['label']) ? e(trans($widgetInfo['label'])) : $className ?></option>
<?php endforeach ?>
</select>
</div>
<div class="form-group">
<label><?= e(trans('backend::lang.dashboard.widget_width')) ?></label>
<select class="form-control custom-select" name="size">
<?php foreach ($sizes as $size => $name):?>
<option value="<?= e($size) ?>" <?= $size == 12 ? 'selected' : null ?>><?= e($name) ?></option>
<?php endforeach ?>
</select>
</div>
</div>
<div class="modal-footer">
<button
type="submit"
class="btn btn-primary">
<?= e(trans('backend::lang.form.add')) ?>
</button>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.form.cancel')) ?>
</button>
</div>
<?= Form::close() ?>

View File

@@ -0,0 +1,33 @@
<?php if ($widget->property('ocWidgetNewRow')): ?>
<li class="item separator"></li>
<?php endif ?>
<li class="item <?= 'width-'.$widget->property('ocWidgetWidth') ?> <?= $widget->property('ocWidgetNewRow') ? 'new-line' : null ?>">
<div class="content">
<div class="drag-handle"></div>
<div id="<?= $widgetAlias ?>"><?= $widget->render() ?></div>
<a href="javascript:;"
class="wn-icon-cog widget-control edit-widget"
data-inspectable
data-inspector-title="<?= e(trans('backend::lang.dashboard.widget_inspector_title')) ?>"
data-inspector-description="<?= e(trans('backend::lang.dashboard.widget_inspector_description')) ?>"
data-inspector-config="<?= e($this->getWidgetPropertyConfig($widget)) ?>"
data-inspector-class="<?= get_class($widget) ?>"
data-inspector-offset="-3"
data-inspector-offset-x="-15"
data-inspector-placement="left"
data-inspector-fallback-placement="left">
<input type="hidden" name="widget_properties[]" data-inspector-values value="<?= e($this->getWidgetPropertyValues($widget)) ?>"/>
Edit
</a>
<?php if ($this->canAddAndDelete): ?>
<button type="button" class="close widget-control close-widget" data-dismiss="popover" aria-hidden="true">&times;</button>
<?php endif ?>
<input type="hidden" data-widget-alias name="widgetAliases[]" value="<?= $widgetAlias ?>"/>
<input type="hidden" data-widget-order name="widgetSortOrders[]" value="<?= $sortOrder ?>"/>
</div>
</li>

View File

@@ -0,0 +1,7 @@
<?php foreach ($widgets as $widgetAlias => $widgetInfo): ?>
<?= $this->makePartial('widget', [
'widgetAlias' => $widgetAlias,
'widget' => $widgetInfo['widget'],
'sortOrder' => $widgetInfo['sortOrder']
]) ?>
<?php endforeach ?>

View File

@@ -0,0 +1,48 @@
<div class="dropdown dropup">
<a
href="javascript:;"
class="manage-widgets"
data-toggle="dropdown">
<i class="icon-cogs"></i> <?= e(trans('backend::lang.dashboard.manage_widgets')) ?>
</a>
<ul class="dropdown-menu" role="menu" data-dropdown-title="Manage dashboard">
<li role="presentation">
<a
role="menuitem"
href="javascript:;"
data-control="popup"
data-handler="<?= $this->getEventHandler('onLoadAddPopup') ?>"
class="wn-icon-plus"
tabindex="-1">
<?= e(trans('backend::lang.dashboard.add_widget')) ?>
</a>
</li>
<li role="separator" class="divider"></li>
<?php if (\BackendAuth::getUser()->hasAccess('backend.manage_default_dashboard')): ?>
<li role="presentation">
<a
role="menuitem"
href="javascript:;"
class="wn-icon-floppy-o"
data-request="<?= $this->getEventHandler('onMakeLayoutDefault') ?>"
data-request-confirm="<?= e(trans('backend::lang.dashboard.make_default_confirm')) ?>"
tabindex="-1">
<?= e(trans('backend::lang.dashboard.make_default')) ?>
</a>
</li>
<?php endif; ?>
<li role="presentation">
<a
role="menuitem"
href="javascript:;"
data-request-success="$(window).trigger('oc.reportWidgetRefresh')"
data-request="<?= $this->getEventHandler('onResetWidgets') ?>"
data-request-confirm="<?= e(trans('backend::lang.dashboard.reset_layout_confirm')) ?>"
class="wn-icon-repeat"
tabindex="-1">
<?= e(trans('backend::lang.dashboard.reset_layout')) ?>
</a>
</li>
</ul>
</div>