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,82 @@
/*
* Scripts for the Reorder controller behavior.
*
* The following functions are observed:
* - Simple sorting: Post back the original sort orders and the new ordered identifiers.
* - Nested sorting: Post back source and target nodes IDs and the move positioning.
*/
+function ($) { "use strict";
var ReorderBehavior = function() {
this.sortMode = null
this.simpleSortOrders = []
this.initSorting = function (mode) {
this.sortMode = mode
if (mode == 'simple') {
this.initSortingSimple()
}
$('#reorderTreeList').on('move.oc.treelist', $.proxy(this.processReorder, this))
}
this.processReorder = function(ev, sortData){
var postData
if (this.sortMode == 'simple') {
postData = { sort_orders: this.simpleSortOrders }
}
else if (this.sortMode == 'nested') {
postData = this.getNestedMoveData(sortData)
}
$('#reorderTreeList').request('onReorder', {
data: postData
})
}
this.getNestedMoveData = function (sortData) {
var
$el,
$item = sortData.item,
moveData = {
targetNode: 0,
sourceNode: $item.data('recordId'),
position: 'root'
}
if (($el = $item.next()) && $el.length) {
moveData.position = 'before'
}
else if (($el = $item.prev()) && $el.length) {
moveData.position = 'after'
}
else if (($el = $item.parents('li:first')) && $el.length) {
moveData.position = 'child'
}
if ($el.length) {
moveData.targetNode = $el.data('recordId')
}
return moveData
}
this.initSortingSimple = function () {
var sortOrders = []
$('#reorderTreeList li').each(function(i) {
sortOrders.push(i);
})
this.simpleSortOrders = sortOrders
}
}
$.wn.reorderBehavior = new ReorderBehavior;
}(window.jQuery);

View File

@@ -0,0 +1,29 @@
<?php if ($reorderToolbarWidget): ?>
<!-- Reorder Toolbar -->
<div id="<?= $this->getId('reorderToolbar') ?>" class="reorder-toolbar">
<?= $reorderToolbarWidget->render() ?>
</div>
<?php endif ?>
<!-- Reorder List -->
<?= Form::open() ?>
<div
id="reorderTreeList"
class="control-treelist"
data-control="treelist"
<?= $reorderShowTree ? '' : 'data-nested="0"' ?>
data-handle="<?= $reorderShowTree ? 'a.move' : '> li > .record > a.move' ?>"
data-stripe-load-indicator>
<?php if ($reorderRecords): ?>
<ol id="reorderRecords">
<?= $this->reorderMakePartial('records', ['records' => $reorderRecords]) ?>
</ol>
<?php else: ?>
<p><?= Lang::get('backend::lang.reorder.no_records') ?></p>
<?php endif ?>
</div>
<?= Form::close() ?>
<script>
$.wn.reorderBehavior.initSorting('<?= $reorderSortMode ?>')
</script>

View File

@@ -0,0 +1,23 @@
<?php foreach ($records as $record): ?>
<li data-record-id="<?= $record->getKey() ?>"
<?php if ($reorderSortMode === 'simple'): ?>
data-record-sort-order="<?= $record->{$record->getSortOrderColumn()} ?>"
<?php endif ?>
>
<div class="record">
<a href="javascript:;" class="move"></a>
<span><?= e($this->reorderGetRecordName($record)) ?></span>
<input name="record_ids[]" type="hidden" value="<?= $record->getKey() ?>" />
</div>
<?php if ($reorderShowTree): ?>
<ol>
<?php if ($record->children): ?>
<?= $this->reorderMakePartial('records', ['records' => $record->children]) ?>
<?php endif ?>
</ol>
<?php endif ?>
</li>
<?php endforeach ?>

View File

@@ -0,0 +1,5 @@
<div data-control="toolbar">
<a href="<?= $this->actionUrl('/') ?>" class="btn btn-primary oc-icon-caret-left">
<?= e(trans('backend::lang.form.return_to_list')) ?>
</a>
</div>

View File

@@ -0,0 +1,5 @@
<?php Block::put('breadcrumb') ?>
<?= $this->makeLayoutPartial('breadcrumb') ?>
<?php Block::endPut() ?>
<!-- Reorder Controller Widget -->
<?= $this->reorderRender() ?>