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,8 @@
<?= $this->makePartial('toolbar') ?>
<div class="layout-row">
<div class="layout-cell">
<div class="layout-relative">
<?= $this->makePartial('templates', ['data' => $data]) ?>
</div>
</div>
</div>

View File

@@ -0,0 +1,59 @@
<?php if ($items): ?>
<ul>
<?php foreach ($items as $item): ?>
<?php if (property_exists($item, 'items')): ?>
<?php if ($item->items): ?>
<li class="group" data-status="<?= $this->getCollapseStatus($item->title, false) ? 'expanded' : 'collapsed' ?>">
<h4><a href="javascript:;"><?= e($item->title) ?></a></h4>
<?= $this->makePartial('items', ['items'=>$item->items, 'nested'=>true]) ?>
</li>
<?php endif ?>
<?php else: ?>
<?php
$dataId = $this->itemType.'-'.$this->theme->getDirName().'-'.$item->fileName;
?>
<li
class="item"
data-item-path="<?= e($item->fileName) ?>"
data-item-theme="<?= e($this->theme->getDirName()) ?>"
data-item-type="<?= $this->itemType ?>"
data-id="<?= e($dataId) ?>">
<a href="javascript:;"
data-control="dragvalue"
data-text-value="<?= $item->dragValue ?>">
<span class="title"><?= e($item->title) ?></span>
<span class="description" title="<?= e($item->description) ?>">
<?php foreach ($item->descriptions as $title => $value): ?>
<?php if (strlen($value)): ?>
<?= e($title) ?>: <strong><?= e($value) ?></strong>
<?php endif ?>
<?php endforeach ?>
<?= e($item->description) ?>
</span>
<span class="borders"></span>
</a>
<input type="hidden" name="template[<?= e($item->fileName) ?>]" value="0" />
<div class="checkbox custom-checkbox nolabel">
<?php $cbId = 'cb' . md5($this->itemType . '/' . $item->fileName) ?>
<input
id="<?= $cbId ?>"
type="checkbox"
name="template[<?= e($item->fileName) ?>]"
<?= $this->isItemSelected($item->fileName) ? 'checked' : null ?>
data-request="<?= $this->getEventHandler('onSelect') ?>"
value="1">
<label for="<?= $cbId ?>">Select</label>
</div>
</li>
<?php endif ?>
<?php endforeach ?>
</ul>
<?php else: ?>
<p class="no-data"><?= e(trans($this->noRecordsMessage)) ?></p>
<?php endif ?>
<?php if (!isset($nested)): ?>
<input type="hidden" name="theme" value="<?= e($this->theme->getDirName()) ?>">
<?php endif ?>

View File

@@ -0,0 +1,12 @@
<?php foreach ($this->sortingProperties as $propertyName => $propertyTitle): ?>
<li
role="presentation"
<?php if ($this->getSortingProperty() == $propertyName): ?>
class="active"
<?php endif ?>
>
<a role="menuitem" tabindex="-1" href="javascript:;" data-stripe-load-indicator data-request="<?= $this->getEventHandler('onApplySorting') ?>" data-request-data="sortProperty: '<?= e($propertyName) ?>'">
<?= e(trans($propertyTitle)) ?>
</a>
</li>
<?php endforeach ?>

View File

@@ -0,0 +1,11 @@
<div class="layout-absolute">
<div class="control-scrollbar" data-control="scrollbar">
<div
class="control-filelist <?= $this->controlClass ?>"
data-control="filelist"
data-group-status-handler="<?= $this->getEventHandler('onSetCollapseStatus') ?>"
id="<?= $this->getId('template-list') ?>">
<?= $this->makePartial('items', ['items' => $data]) ?>
</div>
</div>
</div>

View File

@@ -0,0 +1,51 @@
<div class="layout-row min-size">
<div class="control-toolbar toolbar-padded <?= $toolbarClass ?>">
<!-- Control Panel -->
<div class="toolbar-item" data-calculate-width>
<div class="btn-group">
<button
type="button"
class="btn btn-default wn-icon-plus <?= !$this->sortingProperties ? 'last' : null ?>"
data-control="create-template"><?= e(trans('cms::lang.sidebar.add')) ?></button>
<?php if ($this->sortingProperties): ?>
<div class="dropdown">
<button
type="button"
class="btn btn-default empty wn-icon-sort-alpha-asc"
data-toggle="dropdown"></button>
<ul
class="dropdown-menu offset-left"
data-dropdown-title="<?= e(trans('cms::lang.template.order_by')) ?>"
id="<?= $this->getId('sorting-options') ?>"
role="menu">
<?= $this->makePartial('sorting-options') ?>
</ul>
</div>
<?php endif?>
<button type="button" class="btn btn-danger empty wn-icon-trash-o hide"
id="<?= $this->getId('delete-button') ?>"
data-control="delete-template"
data-confirmation="<?= e(trans($this->deleteConfirmation)) ?>"
data-trigger-action="show"
data-trigger="<?= '#'.$this->getId('template-list') ?> input[type=checkbox]"
data-trigger-condition="checked"></button>
</div>
</div>
<!-- Template Search -->
<div class="relative toolbar-item loading-indicator-container size-input-text">
<input placeholder="<?= e(trans('cms::lang.sidebar.search')) ?>" type="text" name="search" value="<?= e($this->getSearchTerm()) ?>"
class="form-control icon search" autocomplete="off"
data-track-input
data-load-indicator
data-load-indicator-opaque
data-request-success="$('<?= '#'.$this->getId('delete-button') ?>').trigger('oc.triggerOn.update')"
data-request="<?= $this->getEventHandler('onSearch') ?>"
/>
</div>
</div>
</div>