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,28 @@
|
||||
<?php
|
||||
/** @var array{previous: mixed, next: mixed, current: int, total: int} $navigation */
|
||||
$previousUrl = $navigation['previous'] !== null
|
||||
? $this->actionUrl($navigationContext, $navigation['previous'])
|
||||
: null;
|
||||
$nextUrl = $navigation['next'] !== null
|
||||
? $this->actionUrl($navigationContext, $navigation['next'])
|
||||
: null;
|
||||
$chevronUp = '<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M4 10l4-4 4 4" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>';
|
||||
$chevronDown = '<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M4 6l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>';
|
||||
?>
|
||||
<div class="form-record-nav" role="navigation" aria-label="<?= e(trans('backend::lang.form.record_navigation')) ?>">
|
||||
<span class="form-record-nav-position">
|
||||
<?= e($navigation['current']) ?> / <?= e($navigation['total']) ?>
|
||||
</span>
|
||||
<span class="form-record-nav-group">
|
||||
<?php if ($previousUrl): ?>
|
||||
<a href="<?= e($previousUrl) ?>" class="form-record-nav-btn" title="<?= e(trans('backend::lang.form.previous_record')) ?>" data-hotkey="ctrl+up, cmd+up"><?= $chevronUp ?></a>
|
||||
<?php else: ?>
|
||||
<span class="form-record-nav-btn is-disabled" aria-disabled="true"><?= $chevronUp ?></span>
|
||||
<?php endif ?>
|
||||
<?php if ($nextUrl): ?>
|
||||
<a href="<?= e($nextUrl) ?>" class="form-record-nav-btn" title="<?= e(trans('backend::lang.form.next_record')) ?>" data-hotkey="ctrl+down, cmd+down"><?= $chevronDown ?></a>
|
||||
<?php else: ?>
|
||||
<span class="form-record-nav-btn is-disabled" aria-disabled="true"><?= $chevronDown ?></span>
|
||||
<?php endif ?>
|
||||
</span>
|
||||
</div>
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
$modelName = $formConfig->name ?? '';
|
||||
?>
|
||||
<?php if ($formContext === 'create'): ?>
|
||||
<div class="loading-indicator-container">
|
||||
<button
|
||||
type="submit"
|
||||
data-request="onSave"
|
||||
data-request-data="new:1"
|
||||
data-browser-validate
|
||||
data-hotkey="ctrl+shift+s, cmd+shift+s"
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.creating_name', ['name' => trans($modelName)])); ?>"
|
||||
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
|
||||
class="btn btn-primary wn-icon-plus">
|
||||
<?= e(trans('backend::lang.form.create_and_new')); ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
data-request="onSave"
|
||||
data-browser-validate
|
||||
data-hotkey="ctrl+s, cmd+s"
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.creating_name', ['name' => trans($modelName)])); ?>"
|
||||
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
|
||||
class="btn btn-primary wn-icon-save">
|
||||
<?= e(trans('backend::lang.form.create')); ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
data-request="onSave"
|
||||
data-browser-validate
|
||||
data-request-data="close:1"
|
||||
data-hotkey="ctrl+enter, cmd+enter"
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.creating_name', ['name' => trans($modelName)])); ?>"
|
||||
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
|
||||
class="btn btn-default wn-icon-check">
|
||||
<?= e(trans('backend::lang.form.create_and_close')); ?>
|
||||
</button>
|
||||
<span class="btn-text">
|
||||
<?= e(trans('backend::lang.form.or')) ?> <a href="<?= Backend::url($formConfig->defaultRedirect) ?>"><?= e(trans('backend::lang.form.cancel')); ?></a>
|
||||
</span>
|
||||
</div>
|
||||
<?php elseif ($formContext === 'update'): ?>
|
||||
<div class="loading-indicator-container">
|
||||
<button
|
||||
type="button"
|
||||
data-request="onSave"
|
||||
data-browser-validate
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
|
||||
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
|
||||
data-request-data="redirect:0"
|
||||
data-hotkey="ctrl+s, cmd+s"
|
||||
class="btn btn-primary wn-icon-save"
|
||||
>
|
||||
<?= e(trans('backend::lang.form.save')); ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
data-request="onSave"
|
||||
data-browser-validate
|
||||
data-request-data="close:1"
|
||||
data-hotkey="ctrl+enter, cmd+enter"
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.saving')); ?>"
|
||||
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
|
||||
class="btn btn-default wn-icon-check"
|
||||
>
|
||||
<?= e(trans('backend::lang.form.save_and_close')); ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
data-request="onDelete"
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.deleting_name', ['name' => trans($modelName)])); ?>"
|
||||
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
|
||||
data-request-confirm="<?= e(trans('backend::lang.form.confirm_delete')); ?>"
|
||||
class="wn-icon-trash-o btn-icon danger pull-right"
|
||||
>
|
||||
</button>
|
||||
<span class="btn-text">
|
||||
<?= e(trans('backend::lang.form.or')) ?> <a href="<?= Backend::url($formConfig->defaultRedirect) ?>"><?= e(trans('backend::lang.form.cancel')); ?></a>
|
||||
</span>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
Reference in New Issue
Block a user