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,2 @@
*.htm
testobjects/*.htm

View File

@@ -0,0 +1,3 @@
h1 {
color: red;
}

View File

@@ -0,0 +1 @@
window.alert(`hello world`)

View File

@@ -0,0 +1,20 @@
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
export default defineConfig({
plugins: [
laravel({
input: [
'assets/css/theme.css',
'assets/javascript/theme.js',
],
refresh: {
paths: [
'./**/*.htm',
'assets/**/*.css',
'assets/**/*.js',
]
},
})
],
});

View File

@@ -0,0 +1,4 @@
const mix = require('laravel-mix');
mix.setPublicPath(__dirname);
mix.js('assets/javascript/theme.js', 'dist/javascript/theme.js');

View File

@@ -0,0 +1,11 @@
{
"type": "module",
"workspaces": {
"packages": [
"modules/system/tests/fixtures/themes/npmtest"
]
},
"scripts": {
"testScript": "echo \"Winter says $((1+2))\""
}
}

View File

@@ -0,0 +1,2 @@
import { defineConfig } from 'vite';
export default defineConfig({});

View File

@@ -0,0 +1,2 @@
const mix = require('laravel-mix');
mix.setPublicPath(__dirname);

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@@ -0,0 +1 @@
console.log('script1.js');

View File

@@ -0,0 +1 @@
console.log('script2.js');

View File

@@ -0,0 +1 @@
console.log('subdir/script1.js');

View File

@@ -0,0 +1 @@
A content

View File

@@ -0,0 +1 @@
<a href="#">Stephen Saucier</a> changed his profile picture &mdash; <small>7 hrs ago</small></div>

View File

@@ -0,0 +1 @@
LAYOUT CONTENT

View File

@@ -0,0 +1 @@
Be brave, be **bold**, live *italic*

View File

@@ -0,0 +1 @@
PAGE CONTENT

View File

@@ -0,0 +1 @@
Pen is <mightier> than the sword, HTML is <richer> than the text

View File

@@ -0,0 +1 @@
<div>LAYOUT CONTENT {{ page() }}</div>

View File

@@ -0,0 +1,10 @@
description = "This layout tests the AJAX events"
==
function onTest() {
$this['var'] = 'layout';
}
function onTestLayout() {
$this['var'] = 'layout-test';
}
==
{{ page() }}

View File

@@ -0,0 +1 @@
<div>{{ content('layout-content.txt') }}{{ page() }}</div>

View File

@@ -0,0 +1,15 @@
description = "This layout tests the page life cycle"
==
function onStart() {
$this['layoutStartVar'] = 1;
}
function onBeforePageStart() {
$this['layoutBeforePageStartVar'] = 2;
}
function onEnd() {
$this['layoutEndVar'] = 5;
}
==
{{ page() }}

View File

@@ -0,0 +1 @@
<div>{{ page() }}</div>

View File

@@ -0,0 +1 @@
<div>{{ partial('layout-partial') }}{{ page() }}</div>

View File

@@ -0,0 +1,10 @@
description = "Layout for testing the CMS PHP parser"
==
function onStart() {
}
function onEnd() {
}
==
{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}

View File

@@ -0,0 +1 @@
<div>LAYOUT CONTENT <span>{% placeholder test default %}DEFAULT{% endplaceholder %}</span> {{ page() }}</div>{% placeholder second %}

View File

@@ -0,0 +1 @@
<div>{% page %}</div>

View File

@@ -0,0 +1,3 @@
url = "404"
==
<p>Page not found</p>

View File

@@ -0,0 +1,4 @@
url = "/apage"
layout = "a/a-layout"
==
<h1>This page is a subdirectory</h1>

View File

@@ -0,0 +1,8 @@
url = "/ajax-test"
layout = "ajax-test"
==
function onTest() {
$this['var'] = 'page';
}
==
{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}

View File

@@ -0,0 +1,4 @@
url = "/authors/:author_id?no-author|^[0-9]+$"
==
<h1>Authors page</h1>
<p>This is the Authors page</p>

View File

@@ -0,0 +1,3 @@
url = "/bpage"
==
<h1>This page is a subdirectory</h1>

View File

@@ -0,0 +1,3 @@
url = "/cpage"
==
<h1>This page is a subdirectory</h1>

View File

@@ -0,0 +1,4 @@
url = "/blog/archive-page/:page?1"
==
<h1>Blog Archive</h1>
<p>Hi there!</p>

View File

@@ -0,0 +1,4 @@
url = "/blog/category-page/:category_name?*"
==
<h1>Blog category</h1>
<p>This is a blog category page</p>

View File

@@ -0,0 +1,4 @@
url = "/blog/post/:url_title"
==
<h1>Blog post</h1>
<p>This is a blog post page</p>

View File

@@ -0,0 +1,13 @@
url = "/code-namespaces"
==
<?php
use Cms\Classes\Theme as MyTheme;
use Cms\Classes\Router as MyRouter;
function onStart() {
$this['pageStartVar'] = 3;
}
?>
==
<p>Page</p>

View File

@@ -0,0 +1,13 @@
url = "/code-namespaces"
==
<?php
use Cms\Classes\Theme;
use Cms\Classes\Router;
function onStart() {
$this['pageStartVar'] = 3;
}
?>
==
<p>Page</p>

View File

@@ -0,0 +1,10 @@
url = "/component-custom-render"
[Winter\Tester\Components\ContentBlock theblock]
==
{% component 'theblock' %}
{% component 'theblock' output="Would you look over Picasso's shoulder" %}
{% component 'theblock' output='And tell him about his brush strokes?' %}

View File

@@ -0,0 +1,5 @@
url = "/component-partial-alias-override"
[Winter\Tester\Components\Post overRide1]
==
{% component 'overRide1' %}

View File

@@ -0,0 +1,3 @@
url = "/component-partial-nesting"
==
{% partial 'nesting/level1' %}

View File

@@ -0,0 +1,5 @@
url = "/component-partial-override"
[testPost]
==
{% component 'testPost' %}

View File

@@ -0,0 +1,5 @@
url = "/component-partial"
[Winter\Tester\Components\Post post]
==
{% component 'post' %}

View File

@@ -0,0 +1,12 @@
url = "/cycle-test"
layout = "cycle-test"
==
function onStart() {
$this['pageStartVar'] = 3;
}
function onEnd() {
$this['pageEndVar'] = 4;
}
==
{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}

View File

@@ -0,0 +1,13 @@
url = "/filters-test/:url_title?"
==
{# Check pageUrl for current page #}
{{ '' | page }} -> {{ '/filters-test/current-slug' | app }}
{# Check pageUrl for persistent URL parameters #}
{{ 'blog-post' | page }} -> {{ '/blog/post/current-slug' | app }}
{# Check pageUrl for providing values for URL parameters #}
{{ 'blog-post' | page({url_title: 'test-slug'}) }} -> {{ '/blog/post/test-slug' | app }}
{# Check pageUrl for disabling persistent URL parameters #}
{{ 'blog-post' | page({}, false) }} -> {{ '/blog/post/default' | app }}
{# Check pageUrl for disabling persistent URL parameters with the second argument being routePersistence #}
{{ 'blog-post' | page(false) }} -> {{ '/blog/post/default' | app }}

View File

@@ -0,0 +1,3 @@
url = "/"
==
<h1>My Webpage</h1>

View File

@@ -0,0 +1,5 @@
url = "/no-component-class"
[PeterPan\Nevernever\Land noComponentExist]
==
<p>Hey</p>

View File

@@ -0,0 +1,3 @@
url = "/no-component"
==
<p>Hey</p>{% component 'noComponentExist' %}

View File

@@ -0,0 +1,4 @@
url = "/no-layout"
layout = "caramba"
==
<p>Hey</p>

View File

@@ -0,0 +1,4 @@
url = "/no-partial"
==
<p>Hey</p>
{% partial 'caramba' %}

View File

@@ -0,0 +1,5 @@
url = "/no-soft-component-class"
[@PeterPan\Nevernever\Land noComponentExist]
==
<p>Hey</p>

View File

@@ -0,0 +1,14 @@
url = "/cycle-test"
layout = "cycle-test"
==
<?php
function onStart() {
$this['pageStartVar'] = 3;
}
function onEnd() {
$this['pageEndVar'] = 4;
}
?>
==
{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}

View File

@@ -0,0 +1,14 @@
url = "/cycle-test"
layout = "cycle-test"
==
<?
function onStart() {
$this['pageStartVar'] = 3;
}
function onEnd() {
$this['pageEndVar'] = 4;
}
?>
==
{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}

View File

@@ -0,0 +1,7 @@
url = "/throw-php"
==
function onStart() {
test();
}
==
<h1>This page will throw an exception</h1>

View File

@@ -0,0 +1,11 @@
url = "/with-component"
layout = "content"
[testArchive]
posts-per-page = "69"
==
<p>This page uses components.</p>
{% for post in testArchive.posts %}
<h3>{{ post.title }}</h3>
<p>{{ post.content }}</p>
{% endfor %}

View File

@@ -0,0 +1,14 @@
url = "/with-components"
layout = "content"
[testArchive firstAlias]
posts-per-page = "6"
[Winter\Tester\Components\Archive secondAlias]
posts-per-page = "9"
==
<p>This page uses components.</p>
{% for post in secondAlias.posts %}
<h3>{{ post.title }}</h3>
<p>{{ post.content }}</p>
{% endfor %}

View File

@@ -0,0 +1,4 @@
url = "/with-content"
layout = "content"
==
<p>Hey {% content "page-content.htm" %} {% content "a/a-content.htm" %}</p>

View File

@@ -0,0 +1,4 @@
url = "/with-layout"
layout = "sidebar"
==
<p>Hey</p>

View File

@@ -0,0 +1,4 @@
url = "/with-partials"
layout = "partials"
==
<p>Hey {% partial "page-partial" firstName="Homer" lastName="Simpson" %} {% partial "a/a-partial" %}</p>

View File

@@ -0,0 +1,11 @@
url = "/with-placeholder"
layout = "placeholder"
==
{% put test %}
BLOCK
{% default %}
{% endput %}
{% put second %}
SECOND BLOCK
{% endput %}
<p>Hey PAGE CONTENT</p>

View File

@@ -0,0 +1,11 @@
url = "/with-soft-component-class-alias"
layout = "content"
[@testArchive someAlias]
posts-per-page = "69"
==
<p>This page uses components.</p>
{% for post in someAlias.posts %}
<h3>{{ post.title }}</h3>
<p>{{ post.content }}</p>
{% endfor %}

View File

@@ -0,0 +1,11 @@
url = "/with-soft-component-class"
layout = "content"
[@testArchive]
posts-per-page = "69"
==
<p>This page uses components.</p>
{% for post in testArchive.posts %}
<h3>{{ post.title }}</h3>
<p>{{ post.content }}</p>
{% endfor %}

View File

@@ -0,0 +1 @@
A partial

View File

@@ -0,0 +1 @@
{{ var }}

View File

@@ -0,0 +1 @@
second

View File

@@ -0,0 +1 @@
LAYOUT PARTIAL

View File

@@ -0,0 +1,6 @@
[Winter\Tester\Components\MainMenu override2]
[Winter\Tester\Components\Post override3]
==
<h1>Level 1</h1>
{% component 'override2' %}
{% component 'override3' %}

View File

@@ -0,0 +1,6 @@
[Winter\Tester\Components\Post post]
[Winter\Tester\Components\Post override4]
==
<h1>Level 2</h1>
{% component 'post' %}
{% component 'override4' %}

View File

@@ -0,0 +1,4 @@
[Winter\Tester\Components\MainMenu mainMenu]
==
<h1>Level 3</h1>
{% component 'mainMenu' %}

View File

@@ -0,0 +1 @@
<p>I am an override alias partial! Yay</p>

View File

@@ -0,0 +1,7 @@
<ul>
{% partial __SELF__ ~ "::items" items=__SELF__.menuItems %}
{% partial __SELF__ ~ "::items" items=__SELF__.menuItems %}
{% partial __SELF__ ~ "::items" items=__SELF__.menuItems %}
</ul>
{% partial 'nesting/level2' %}

View File

@@ -0,0 +1,3 @@
{% for item in items %}
<strong>{{ item }}</strong>
{% endfor %}

View File

@@ -0,0 +1 @@
<p>Insert post here</p>

View File

@@ -0,0 +1,3 @@
<p>I am another post, deep down</p>
{% partial 'nesting/level3' %}

View File

@@ -0,0 +1 @@
PAGE PARTIAL {{ firstName }} {{ lastName }}

View File

@@ -0,0 +1 @@
<p>I am an override partial! Yay</p>

View File

@@ -0,0 +1,2 @@
*
!.gitignore

View File

@@ -0,0 +1,5 @@
var = value
[testArchive]
posts-per-page = 10
==
<p>This is a paragraph</p>

View File

@@ -0,0 +1,8 @@
var = value
[testArchive firstAlias]
posts-per-page = "6"
[Winter\Tester\Components\Post secondAlias]
show-featured = "true"
==
<p>This is a paragraph</p>

View File

@@ -0,0 +1,10 @@
var = value
[section]
version = 10
==
function onBeforeDisplay($controller)
{
$controller->data['something'] = 'some value';
}
==
<p>This is a paragraph</p>

View File

@@ -0,0 +1 @@
<p>This is a test HTML content file.</p>

View File

@@ -0,0 +1 @@
<p>This is an object in a subdirectory.</p>

View File

@@ -0,0 +1,5 @@
var = value
[viewBag]
title = "Toxicity"
==
<p>Chop Suey!</p>