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:
@@ -0,0 +1,3 @@
|
||||
<div class="list-widget list-scrollable-container <?= $cssClasses ?>" id="<?= $this->getId() ?>">
|
||||
<?= $this->makePartial('list') ?>
|
||||
</div>
|
||||
42
modules/backend/widgets/lists/partials/_list.php
Normal file
42
modules/backend/widgets/lists/partials/_list.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<div class="control-list list-scrollable" data-control="listwidget"
|
||||
<?php if ($sortable): ?>
|
||||
data-sortable="true"
|
||||
data-reorder-handler="<?= e($reorderHandler) ?>"
|
||||
<?php endif ?>
|
||||
>
|
||||
<table class="table data" data-control="rowlink">
|
||||
<thead>
|
||||
<?php if ($showTotals): ?>
|
||||
<?= $this->makePartial('list_totals') ?>
|
||||
<?php endif; ?>
|
||||
<?= $this->makePartial('list_head_row') ?>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php if (count($records)): ?>
|
||||
<?= $this->makePartial('list_body_rows') ?>
|
||||
<?php else: ?>
|
||||
<tr class="no-data">
|
||||
<td colspan="<?= $columnTotal ?>" class="nolink">
|
||||
<p class="no-data"><?= $noRecordsMessage ?></p>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif ?>
|
||||
</tbody>
|
||||
<?php if ($showTotals): ?>
|
||||
<tfoot>
|
||||
<?= $this->makePartial('list_totals') ?>
|
||||
</tfoot>
|
||||
<?php endif; ?>
|
||||
</table>
|
||||
<?php if ($showPagination): ?>
|
||||
<div class="list-footer">
|
||||
<div class="list-pagination">
|
||||
<?php if ($showPageNumbers): ?>
|
||||
<?= $this->makePartial('list_pagination') ?>
|
||||
<?php else: ?>
|
||||
<?= $this->makePartial('list_pagination_simple') ?>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
@@ -0,0 +1,11 @@
|
||||
<td class="list-checkbox nolink">
|
||||
<div class="checkbox custom-checkbox nolabel">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="checked[]"
|
||||
id="<?= $this->getId('checkbox-' . $record->getKey()) ?>"
|
||||
value="<?= $record->getKey() ?>"
|
||||
autocomplete="off"/>
|
||||
<label for="<?= $this->getId('checkbox-' . $record->getKey()) ?>"><?= e(trans('backend::lang.list.check')) ?></label>
|
||||
</div>
|
||||
</td>
|
||||
47
modules/backend/widgets/lists/partials/_list_body_row.php
Normal file
47
modules/backend/widgets/lists/partials/_list_body_row.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
$expanded = $showTree ? $this->isTreeNodeExpanded($record) : null;
|
||||
$childRecords = $showTree ? $record->getChildren() : null;
|
||||
$treeLevelClass = $showTree ? 'list-tree-level-'.$treeLevel : '';
|
||||
?>
|
||||
<tr class="<?= $treeLevelClass ?> <?= $this->getRowClass($record) ?>"
|
||||
data-record-id="<?= e($record->getKey()) ?>"
|
||||
>
|
||||
<?php if ($showCheckboxes): ?>
|
||||
<?= $this->makePartial('list_body_checkbox', ['record' => $record]) ?>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if ($showTree): ?>
|
||||
<?= $this->makePartial('list_body_tree', [
|
||||
'record' => $record,
|
||||
'expanded' => $expanded,
|
||||
'childCount' => $record->getChildCount()
|
||||
]) ?>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (!empty($sortable)): ?>
|
||||
<td class="list-cell-sort-handle nolink">
|
||||
<span class="list-sort-handle" title="<?= e(trans('backend::lang.list.sort_drag_title')) ?>"><i class="icon-bars"></i></span>
|
||||
</td>
|
||||
<?php endif ?>
|
||||
|
||||
<?php $index = $url = 0; foreach ($columns as $key => $column): ?>
|
||||
<?php $index++; ?>
|
||||
<td class="list-cell-index-<?= $index ?> list-cell-name-<?= $column->getName() ?> list-cell-type-<?= $column->type ?> <?= $column->clickable ? '' : 'nolink' ?> <?= $column->getAlignClass() ?> <?= $column->cssClass ?>">
|
||||
<?php if ($column->clickable && !$url && ($url = $this->getRecordUrl($record))): ?>
|
||||
<a <?= $this->getRecordOnClick($record) ?> href="<?= $url ?>">
|
||||
<?= $this->getColumnValue($record, $column) ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<?= $this->getColumnValue($record, $column) ?>
|
||||
<?php endif ?>
|
||||
</td>
|
||||
<?php endforeach ?>
|
||||
|
||||
<?php if ($showSetup): ?>
|
||||
<td class="list-setup"> </td>
|
||||
<?php endif ?>
|
||||
</tr>
|
||||
|
||||
<?php if ($showTree && $expanded): ?>
|
||||
<?= $this->makePartial('list_body_rows', ['records' => $childRecords, 'treeLevel' => $treeLevel+1]) ?>
|
||||
<?php endif ?>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php foreach ($records as $record): ?>
|
||||
<?= $this->makePartial('list_body_row', ['record' => $record, 'treeLevel' => $treeLevel]) ?>
|
||||
<?php endforeach ?>
|
||||
16
modules/backend/widgets/lists/partials/_list_body_tree.php
Normal file
16
modules/backend/widgets/lists/partials/_list_body_tree.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<td class="list-tree nolink">
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="list-expand-collapse"
|
||||
data-request="<?= $this->getEventHandler('onToggleTreeNode') ?>"
|
||||
data-stripe-load-indicator
|
||||
data-request-data="node_id: '<?= $record->getKey() ?>', status: <?= $expanded ? 1 : 0 ?>">
|
||||
<?php if (!$childCount): ?>
|
||||
<i class="icon-square-o"></i>
|
||||
<?php elseif ($expanded): ?>
|
||||
<i class="icon-minus-square-o"></i>
|
||||
<?php else: ?>
|
||||
<i class="icon-plus-square-o"></i>
|
||||
<?php endif ?>
|
||||
</a>
|
||||
</td>
|
||||
58
modules/backend/widgets/lists/partials/_list_head_row.php
Normal file
58
modules/backend/widgets/lists/partials/_list_head_row.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<tr>
|
||||
<?php if ($showCheckboxes && count($records)): ?>
|
||||
<th class="list-checkbox">
|
||||
<div class="checkbox custom-checkbox nolabel">
|
||||
<input type="checkbox" id="<?= $this->getId('checkboxAll') ?>" />
|
||||
<label for="<?= $this->getId('checkboxAll') ?>"></label>
|
||||
</div>
|
||||
</th>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if ($showTree): ?>
|
||||
<th class="list-tree">
|
||||
<span></span>
|
||||
</th>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (!empty($sortable)): ?>
|
||||
<th class="list-sort-handle-column"><span></span></th>
|
||||
<?php endif ?>
|
||||
|
||||
<?php foreach ($columns as $key => $column): ?>
|
||||
<?php if ($showSorting && $column->sortable): ?>
|
||||
<th
|
||||
<?php if ($column->width): ?>
|
||||
style="width: <?= $column->width ?>"
|
||||
<?php endif ?>
|
||||
class="sortable <?= $this->sortColumn==$column->columnName?'sort-'.$this->sortDirection.' active':'' ?> list-cell-name-<?= $column->getName() ?> list-cell-type-<?= $column->type ?> <?= $column->getAlignClass() ?> <?= $column->headCssClass ?>"
|
||||
>
|
||||
<a
|
||||
href="javascript:;"
|
||||
data-request="<?= $this->getEventHandler('onSort') ?>"
|
||||
data-stripe-load-indicator
|
||||
data-request-data="sortColumn: '<?= $column->columnName ?>', page: <?= $pageCurrent ?>">
|
||||
<?= $this->getHeaderValue($column) ?>
|
||||
</a>
|
||||
</th>
|
||||
<?php else: ?>
|
||||
<th
|
||||
<?php if ($column->width): ?>
|
||||
style="width: <?= $column->width ?>"
|
||||
<?php endif ?>
|
||||
class="list-cell-name-<?= $column->getName() ?> list-cell-type-<?= $column->type ?> <?= $column->getAlignClass() ?> <?= $column->headCssClass ?>"
|
||||
>
|
||||
<span><?= $this->getHeaderValue($column) ?></span>
|
||||
</th>
|
||||
<?php endif ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
<?php if ($showSetup): ?>
|
||||
<th class="list-setup">
|
||||
<a href="javascript:;"
|
||||
id="<?= $this->getId('setupButton') ?>"
|
||||
title="<?= e(trans('backend::lang.list.setup_title')) ?>"
|
||||
data-control="popup"
|
||||
data-handler="<?= $this->getEventHandler('onLoadSetup') ?>"></a>
|
||||
</th>
|
||||
<?php endif ?>
|
||||
</tr>
|
||||
74
modules/backend/widgets/lists/partials/_list_pagination.php
Normal file
74
modules/backend/widgets/lists/partials/_list_pagination.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<div class="loading-indicator-container size-small pull-right">
|
||||
<div class="control-pagination loading-indicator-container">
|
||||
<span class="page-iteration">
|
||||
<?= e(trans('backend::lang.list.pagination', ['from' => $pageFrom, 'to' => $pageTo, 'total' => $recordTotal])) ?>
|
||||
</span>
|
||||
<?php if ($pageLast > 1): ?>
|
||||
<?php if ($pageCurrent > 1): ?>
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="page-first"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-request-data="page: 1"
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
title="<?= e(trans('backend::lang.list.first_page')) ?>"></a>
|
||||
<?php else: ?>
|
||||
<span
|
||||
class="page-first"
|
||||
title="<?= e(trans('backend::lang.list.first_page')) ?>"></span>
|
||||
<?php endif ?>
|
||||
<?php if ($pageCurrent > 1): ?>
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="page-back"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-request-data="page: <?= $pageCurrent-1 ?>"
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
title="<?= e(trans('backend::lang.list.prev_page')) ?>"></a>
|
||||
<?php else: ?>
|
||||
<span
|
||||
class="page-back"
|
||||
title="<?= e(trans('backend::lang.list.prev_page')) ?>"></span>
|
||||
<?php endif ?>
|
||||
<input
|
||||
type="number"
|
||||
name="page"
|
||||
value="<?= $pageCurrent ?>"
|
||||
min="1"
|
||||
step="1"
|
||||
max="<?= $pageLast ?>"
|
||||
class="form-control input-sm"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-track-input
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
autocomplete="off"
|
||||
style="width: auto; padding-left: 5px; padding-right: 0; display: inline; text-align: center;" />
|
||||
<?php if ($pageLast > $pageCurrent): ?>
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="page-next"
|
||||
data-request-data="page: <?= $pageCurrent+1 ?>"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
title="<?= e(trans('backend::lang.list.next_page')) ?>"></a>
|
||||
<?php else: ?>
|
||||
<span
|
||||
class="page-next"
|
||||
title="<?= e(trans('backend::lang.list.next_page')) ?>"></span>
|
||||
<?php endif ?>
|
||||
<?php if ($pageLast > $pageCurrent): ?>
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="page-last"
|
||||
data-request-data="page: <?= $pageLast ?>"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
title="<?= e(trans('backend::lang.list.last_page')) ?>"></a>
|
||||
<?php else: ?>
|
||||
<span
|
||||
class="page-last"
|
||||
title="<?= e(trans('backend::lang.list.last_page')) ?>"></span>
|
||||
<?php endif ?>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,50 @@
|
||||
<div class="loading-indicator-container size-small pull-right">
|
||||
<div class="control-pagination">
|
||||
<?php if ($pageCurrent > 1): ?>
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="page-first"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-request-data="page: 1"
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
title="<?= e(trans('backend::lang.list.first_page')) ?>"></a>
|
||||
<?php else: ?>
|
||||
<span
|
||||
class="page-first"
|
||||
title="<?= e(trans('backend::lang.list.first_page')) ?>"></span>
|
||||
<?php endif ?>
|
||||
<?php if ($pageCurrent > 1): ?>
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="page-back"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-request-data="page: <?= $pageCurrent-1 ?>"
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
title="<?= e(trans('backend::lang.list.prev_page')) ?>"></a>
|
||||
<?php else: ?>
|
||||
<span
|
||||
class="page-back"
|
||||
title="<?= e(trans('backend::lang.list.prev_page')) ?>"></span>
|
||||
<?php endif ?>
|
||||
<select
|
||||
disabled
|
||||
name="page"
|
||||
class="form-control input-sm custom-select select-no-search"
|
||||
autocomplete="off">
|
||||
<option value="<?= $pageCurrent ?>" selected><?= $pageCurrent ?></option>
|
||||
</select>
|
||||
<?php if ($hasMorePages): ?>
|
||||
<a
|
||||
href="javascript:;"
|
||||
class="page-next"
|
||||
data-request-data="page: <?= $pageCurrent+1 ?>"
|
||||
data-request="<?= $this->getEventHandler('onPaginate') ?>"
|
||||
data-load-indicator="<?= e(trans('backend::lang.list.loading')) ?>"
|
||||
title="<?= e(trans('backend::lang.list.next_page')) ?>"></a>
|
||||
<?php else: ?>
|
||||
<span
|
||||
class="page-next"
|
||||
title="<?= e(trans('backend::lang.list.next_page')) ?>"></span>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
26
modules/backend/widgets/lists/partials/_list_totals.php
Normal file
26
modules/backend/widgets/lists/partials/_list_totals.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<tr class="table-totals">
|
||||
<?php if ($showCheckboxes): ?>
|
||||
<td></td>
|
||||
<?php endif ?>
|
||||
<?php if ($showTree): ?>
|
||||
<td class="list-tree">
|
||||
<span></span>
|
||||
</td>
|
||||
<?php endif ?>
|
||||
<?php foreach ($columns as $column): ?>
|
||||
<td>
|
||||
<?php if ($column->type == 'number' && $column->summable): ?>
|
||||
<?php $item = $sums[$column->columnName]; ?>
|
||||
<span>
|
||||
<?= $item['format'] ? sprintf($item['format'], $item['sum']) : number_format($item['sum'], 0, '.', ',') ?>
|
||||
<?php if (!is_null($item['total'])): ?>
|
||||
(<?= $item['format'] ? sprintf($item['format'], $item['total']) : number_format($item['total'], 0, '.', ',') ?>)
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
<?php endif ?>
|
||||
</td>
|
||||
<?php endforeach ?>
|
||||
<?php if ($showSetup): ?>
|
||||
<td></td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
74
modules/backend/widgets/lists/partials/_setup_form.php
Normal file
74
modules/backend/widgets/lists/partials/_setup_form.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?= Form::open(['data-request-parent' => '#' . $this->getId('setupButton')]) ?>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="popup">×</button>
|
||||
<h4 class="modal-title"><?= e(trans('backend::lang.list.setup_title')) ?></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="help-block before-field"><?= e(trans('backend::lang.list.setup_help')) ?></p>
|
||||
|
||||
<div class="control-simplelist with-checkboxes is-sortable" data-control="simplelist">
|
||||
<ul>
|
||||
<?php foreach ($columns as $key => $column): ?>
|
||||
<li>
|
||||
<div class="checkbox custom-checkbox">
|
||||
<input
|
||||
type="hidden"
|
||||
name="column_order[]"
|
||||
value="<?= e($column->columnName) ?>" />
|
||||
<input
|
||||
id="<?= $this->getId('setupCheckbox-'.$column->columnName) ?>"
|
||||
name="visible_columns[]"
|
||||
value="<?= e($column->columnName) ?>"
|
||||
<?= $column->invisible ? '' : 'checked="checked"' ?>
|
||||
type="checkbox" />
|
||||
<label
|
||||
class="choice"
|
||||
for="<?= $this->getId('setupCheckbox-'.$column->columnName) ?>">
|
||||
<?= e(trans($column->label)) ?>
|
||||
</label>
|
||||
</div>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<?php if ($this->showPagination): ?>
|
||||
<div class="form-group">
|
||||
<label><?= e(trans('backend::lang.list.records_per_page')) ?></label>
|
||||
<p class="help-block before-field">
|
||||
<?= e(trans('backend::lang.list.records_per_page_help')) ?>
|
||||
</p>
|
||||
<select class="form-control custom-select select-no-search" name="records_per_page">
|
||||
<?php foreach ($perPageOptions as $optionValue): ?>
|
||||
<option value="<?= $optionValue ?>" <?= $optionValue == $recordsPerPage ? 'selected="selected"' : '' ?>><?= $optionValue ?></option>
|
||||
<?php endforeach ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link pull-left"
|
||||
data-request="<?= $this->getEventHandler('onResetSetup') ?>"
|
||||
data-dismiss="popup"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('backend::lang.form.reset_default')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
data-request="<?= $this->getEventHandler('onApplySetup') ?>"
|
||||
data-dismiss="popup"
|
||||
data-stripe-load-indicator>
|
||||
<?= e(trans('backend::lang.form.apply')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
data-dismiss="popup">
|
||||
<?= e(trans('backend::lang.form.cancel')) ?>
|
||||
</button>
|
||||
</div>
|
||||
<?= Form::close() ?>
|
||||
Reference in New Issue
Block a user