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,175 @@
|
||||
// Vars
|
||||
@image-margin: 5px;
|
||||
@table-border: 1px solid #DDD;
|
||||
@blockquote-level1-color: #5E35B1;
|
||||
@blockquote-level2-color: #00BCD4;
|
||||
@blockquote-level3-color: #43A047;
|
||||
@editor-text: #000;
|
||||
|
||||
.image-style() {
|
||||
img {
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
|
||||
&.fr-dib {
|
||||
margin: @image-margin auto;
|
||||
display: block;
|
||||
float: none;
|
||||
vertical-align: top;
|
||||
|
||||
&.fr-fil {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
&.fr-fir {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.fr-dii {
|
||||
display: inline-block;
|
||||
float: none;
|
||||
vertical-align: bottom;
|
||||
margin-left: @image-margin;
|
||||
margin-right: @image-margin;
|
||||
max-width: calc(100% - (2 * @image-margin));
|
||||
|
||||
&.fr-fil {
|
||||
float: left;
|
||||
margin: @image-margin @image-margin @image-margin 0;
|
||||
max-width: calc(100% - @image-margin);
|
||||
}
|
||||
|
||||
&.fr-fir {
|
||||
float: right;
|
||||
margin: @image-margin 0 @image-margin @image-margin;
|
||||
max-width: calc(100% - @image-margin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.video-style() {
|
||||
.fr-video {
|
||||
text-align: center;
|
||||
position: relative;
|
||||
|
||||
> * {
|
||||
.box-sizing(content-box);
|
||||
max-width: 100%;
|
||||
border: none;
|
||||
}
|
||||
|
||||
&.fr-dvb {
|
||||
display: block;
|
||||
clear: both;
|
||||
|
||||
&.fr-fvl {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
&.fr-fvr {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
&.fr-dvi {
|
||||
display: inline-block;
|
||||
|
||||
&.fr-fvl {
|
||||
float: left;
|
||||
}
|
||||
|
||||
&.fr-fvr {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fr-view {
|
||||
strong {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
empty-cells: show;
|
||||
max-width: 100%;
|
||||
|
||||
td, th {
|
||||
border: @table-border;
|
||||
|
||||
&:empty {
|
||||
height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
th {
|
||||
background: mix(white, @editor-text, 90%);;
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
clear: both;
|
||||
.user-select(none);
|
||||
page-break-after: always;
|
||||
}
|
||||
|
||||
.fr-file {
|
||||
position: relative;
|
||||
|
||||
&::after {
|
||||
position: relative;
|
||||
content: "\1F4CE";
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
border-left: solid 2px @blockquote-level1-color;
|
||||
margin-left: 0;
|
||||
padding-left: 5px;
|
||||
color: @blockquote-level1-color;
|
||||
|
||||
blockquote {
|
||||
border-color: @blockquote-level2-color;
|
||||
color: @blockquote-level2-color;
|
||||
|
||||
blockquote {
|
||||
border-color: @blockquote-level3-color;
|
||||
color: @blockquote-level3-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
span.fr-emoticon {
|
||||
font-weight: normal;
|
||||
font-family: "Apple Color Emoji","Segoe UI Emoji","NotoColorEmoji","Segoe UI Symbol","Android Emoji","EmojiSymbols";
|
||||
display: inline;
|
||||
line-height: 0;
|
||||
|
||||
&.fr-emoticon-img {
|
||||
background-repeat: no-repeat !important;
|
||||
font-size: inherit;
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
min-height: 20px;
|
||||
min-width: 20px;
|
||||
display: inline-block;
|
||||
margin: -.1em .1em .1em;
|
||||
line-height: 1;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.image-style();
|
||||
|
||||
.video-style();
|
||||
}
|
||||
183
modules/backend/formwidgets/richeditor/assets/less/_froala.less
Normal file
183
modules/backend/formwidgets/richeditor/assets/less/_froala.less
Normal file
@@ -0,0 +1,183 @@
|
||||
//
|
||||
// Mods to Froala Editor
|
||||
//
|
||||
|
||||
// Give soft priority to all styles
|
||||
body {
|
||||
|
||||
//
|
||||
// Wrapper
|
||||
//
|
||||
|
||||
.fr-box.fr-basic.fr-top .fr-wrapper,
|
||||
.fr-box.fr-basic.fr-bottom .fr-wrapper {
|
||||
.box-shadow(none);
|
||||
}
|
||||
|
||||
//
|
||||
// Code mode
|
||||
//
|
||||
|
||||
.fr-box {
|
||||
.ace_editor {
|
||||
display: none;
|
||||
}
|
||||
.ace_editor {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&.fr-code-view .ace_editor {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Full screen
|
||||
//
|
||||
|
||||
.fr-command.fr-btn[data-cmd=fullscreen] {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.fr-box.fr-fullscreen {
|
||||
z-index: @zindex-fullscreen !important;
|
||||
}
|
||||
|
||||
//
|
||||
// Toolbar
|
||||
//
|
||||
|
||||
.fr-toolbar {
|
||||
border-top-color: transparent;
|
||||
background: #f2f2f2;
|
||||
}
|
||||
|
||||
.fr-popup.fr-desktop,
|
||||
.fr-toolbar.fr-inline.fr-desktop {
|
||||
.fr-arrow {
|
||||
top: -@arrow-size;
|
||||
}
|
||||
|
||||
&.fr-above {
|
||||
.fr-arrow {
|
||||
bottom: -@arrow-size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Command button.
|
||||
.fr-toolbar, .fr-popup {
|
||||
.fr-command.fr-btn {
|
||||
// Dropdown is visible.
|
||||
&.fr-dropdown.fr-active {
|
||||
color: @btn-active-text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fr-toolbar.fr-bottom,
|
||||
.fr-toolbar.fr-top {
|
||||
border-bottom: 2px solid @color-list-border;
|
||||
.box-shadow(none);
|
||||
}
|
||||
|
||||
//
|
||||
// Popup Buttons
|
||||
//
|
||||
|
||||
.fr-popup .fr-action-buttons {
|
||||
button.fr-command {
|
||||
.button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
|
||||
.button-variant(@btn-default-color; @btn-default-bg; @btn-default-border; @btn-primary-bg; @btn-primary-bg);
|
||||
|
||||
margin-top: 6px;
|
||||
|
||||
font-size: @font-size-base - 1;
|
||||
text-align: left;
|
||||
height: auto;
|
||||
outline: none !important;
|
||||
.box-shadow(~"inset 0 -2px 0 rgba(0,0,0,.15)");
|
||||
|
||||
&[disabled] {
|
||||
color: rgba(255,255,255,.6);
|
||||
}
|
||||
|
||||
&.active,
|
||||
&:active {
|
||||
.box-shadow(inset 0 1px 0 rgba(0,0,0,.3));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Popup Toolbar
|
||||
//
|
||||
|
||||
.fr-popup .fr-buttons {
|
||||
border-bottom: 2px solid @color-list-border;
|
||||
.box-shadow(none);
|
||||
}
|
||||
|
||||
//
|
||||
// Dropdown
|
||||
//
|
||||
|
||||
.fr-command.fr-btn + .fr-dropdown-menu {
|
||||
.fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li {
|
||||
font-size: @font-size-base;
|
||||
a {
|
||||
color: #666666;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Inputs
|
||||
//
|
||||
|
||||
.fr-popup .fr-input-line {
|
||||
|
||||
input[type="text"], textarea {
|
||||
-webkit-appearance: none;
|
||||
border: 1px solid @input-border;
|
||||
background-color: @input-bg;
|
||||
color: @input-color;
|
||||
margin-bottom: 0;
|
||||
.box-shadow(@input-box-shadow);
|
||||
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
|
||||
.transition(margin @transition-timing);
|
||||
|
||||
&:focus {
|
||||
border: 1px solid @input-border;
|
||||
}
|
||||
|
||||
&.fr-not-empty {
|
||||
margin-top: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
input + label, textarea + label {
|
||||
background: transparent!important;
|
||||
}
|
||||
|
||||
input.fr-not-empty:focus + label, textarea.fr-not-empty:focus + label {
|
||||
color: @color-label;
|
||||
}
|
||||
}
|
||||
|
||||
.fr-popup .fr-checkbox {
|
||||
span {
|
||||
border-color: @input-border;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
287
modules/backend/formwidgets/richeditor/assets/less/richeditor.less
Executable file
287
modules/backend/formwidgets/richeditor/assets/less/richeditor.less
Executable file
@@ -0,0 +1,287 @@
|
||||
@import "../../../../assets/less/core/boot.less";
|
||||
|
||||
@richeditor-toolbar-size: 30px;
|
||||
@richeditor-zindex: 600;
|
||||
@richeditor-gutter: 20px;
|
||||
|
||||
@color-richeditor-toolbar: #dddddd;
|
||||
@color-richeditor-toolbar-btn-color: #404040;
|
||||
@color-richeditor-toolbar-btn-bg-hover: #999999;
|
||||
@color-richeditor-toolbar-btn-bg-active: #404040;
|
||||
@color-richeditor-toolbar-btn-color-hover: #ffffff;
|
||||
|
||||
@import "../vendor/froala_drm/less/froala.less";
|
||||
|
||||
// Buttons
|
||||
@import "../vendor/froala_drm/less/plugins/fullscreen.less";
|
||||
@import "../vendor/froala_drm/less/plugins/code_view.less";
|
||||
@import "../vendor/froala_drm/less/plugins/file.less";
|
||||
@import "../vendor/froala_drm/less/plugins/image.less";
|
||||
@import "../vendor/froala_drm/less/plugins/table.less";
|
||||
@import "../vendor/froala_drm/less/plugins/video.less";
|
||||
@import "../vendor/froala_drm/less/plugins/colors.less";
|
||||
@import "../vendor/froala_drm/less/plugins/emoticons.less";
|
||||
|
||||
// Functional
|
||||
@import "../vendor/froala_drm/less/plugins/line_breaker.less";
|
||||
@import "../vendor/froala_drm/less/plugins/draggable.less";
|
||||
|
||||
// More testing needed
|
||||
//import "../vendor/froala_drm/less/plugins/quick_insert.less";
|
||||
|
||||
// Base styles
|
||||
@import "_base_styles.less";
|
||||
|
||||
.fr-view {
|
||||
@import "../../../../models/editorsetting/default_styles.less";
|
||||
}
|
||||
|
||||
// Modifications
|
||||
@import "_froala.less";
|
||||
|
||||
@font-family: @font-family-sans-serif;
|
||||
@border-radius: @input-border-radius;
|
||||
@tooltip-bg: @brand-primary; // Taken from toolbar.variables.less
|
||||
@tooltip-font-size: @font-size-small;
|
||||
@arrow-size: 7px;
|
||||
@ui-bg: #f9f9f9;
|
||||
@ui-border-color: @input-border-color;
|
||||
@ui-border-top: 1px solid @ui-border-color;
|
||||
@editor-padding: 20px;
|
||||
@btn-hover-bg: #ddd;
|
||||
@btn-text: fade(@btn-secondary-color, 80%);
|
||||
@btn-font-size: 14;
|
||||
@btn-active-text: #000;
|
||||
@input-label-color: @color-label;
|
||||
|
||||
//
|
||||
// Make the focus ring and textarea fill the whole rich editor container
|
||||
//
|
||||
|
||||
.fr-element {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
//
|
||||
// Rich Editor
|
||||
//
|
||||
|
||||
.field-flush .field-richeditor {
|
||||
&, &.editor-focus {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.richeditor-set-height(@size) {
|
||||
.fr-wrapper {
|
||||
height: @size;
|
||||
.fr-view {
|
||||
min-height: @size;
|
||||
}
|
||||
}
|
||||
|
||||
.height-indicator {
|
||||
height: @size;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.field-richeditor {
|
||||
border: 1px solid @input-border;
|
||||
.box-shadow(@input-box-shadow);
|
||||
.border-radius(@input-border-radius);
|
||||
.transition(@input-transition);
|
||||
|
||||
// Prevents an ugly flash during the time the editor loads
|
||||
> textarea {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.editor-focus {
|
||||
border-color: @color-form-field-border-focus;
|
||||
}
|
||||
|
||||
&.size-tiny { .richeditor-set-height(@size-tiny); }
|
||||
&.size-small { .richeditor-set-height(@size-small); }
|
||||
&.size-large { .richeditor-set-height(@size-large); }
|
||||
&.size-huge { .richeditor-set-height(@size-huge); }
|
||||
&.size-giant { .richeditor-set-height(@size-giant); }
|
||||
|
||||
&.stretch {
|
||||
&.size-tiny { min-height: @size-tiny; }
|
||||
&.size-small { min-height: @size-small; }
|
||||
&.size-large { min-height: @size-large; }
|
||||
&.size-huge { min-height: @size-huge; }
|
||||
&.size-giant { min-height: @size-giant; }
|
||||
}
|
||||
}
|
||||
|
||||
.fr-tooltip {
|
||||
z-index: 9997 !important;
|
||||
}
|
||||
|
||||
.fr-popup {
|
||||
z-index: 9995 !important;
|
||||
}
|
||||
|
||||
.fr-toolbar {
|
||||
z-index: 11 !important;
|
||||
}
|
||||
|
||||
.fr-separator.fr-hs {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
//
|
||||
// Stretch
|
||||
//
|
||||
|
||||
.field-richeditor.stretch {
|
||||
.fr-box:not(.fr-fullscreen) {
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 100% !important;
|
||||
width: 100% !important;
|
||||
.border-radius(0) !important;
|
||||
overflow: visible;
|
||||
|
||||
.fr-toolbar {
|
||||
.border-radius(0) !important;
|
||||
border-top-color: white;
|
||||
}
|
||||
|
||||
.fr-wrapper {
|
||||
width: 100% !important;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
height: auto !important;
|
||||
.fr-view {
|
||||
min-height: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.fr-view, textarea {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.fr-placeholder {
|
||||
top: 20px;
|
||||
left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Placeholders and snippets
|
||||
//
|
||||
|
||||
.control-richeditor {
|
||||
.richeditor-snippet() {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
margin: 0 0 15px 0;
|
||||
padding: 10px 10px 10px 36px;
|
||||
border: 2px dotted #bdc3c7;
|
||||
background: white;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
color: #6c7071;
|
||||
font: 15px @font-family-base;
|
||||
font-weight: 500;
|
||||
line-height: 150%;
|
||||
.border-radius(3px);
|
||||
|
||||
&:focus, &.inspector-open {
|
||||
border-color: #2581b8;
|
||||
border-style: solid;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
figure[data-ui-block] {
|
||||
.richeditor-snippet();
|
||||
}
|
||||
|
||||
figure[data-video], figure[data-audio] {
|
||||
padding-left: 13px;
|
||||
|
||||
&:after {
|
||||
content: attr(data-label);
|
||||
}
|
||||
|
||||
&:before {
|
||||
position: static;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
figure[data-video] {
|
||||
&:before {
|
||||
.icon(@video-camera);
|
||||
}
|
||||
}
|
||||
|
||||
figure[data-audio] {
|
||||
&:before {
|
||||
.icon(@volume-up);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Quick Insert
|
||||
//
|
||||
|
||||
.fr-quick-insert {
|
||||
a.fr-floating-btn {
|
||||
color: @btn-text;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Additions to disabled state
|
||||
//
|
||||
|
||||
.fr-box.fr-basic {
|
||||
// Toolbar
|
||||
.fr-toolbar.fr-disabled {
|
||||
.fr-command {
|
||||
cursor: not-allowed;
|
||||
|
||||
&:hover, &:focus {
|
||||
color: #bdbdbd;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
|
||||
&::after {
|
||||
border-top-color: #bdbdbd!important;
|
||||
}
|
||||
}
|
||||
|
||||
&.fr-btn-hover {
|
||||
color: #bdbdbd; background: transparent;
|
||||
|
||||
&::after {
|
||||
border-top-color:#bdbdbd !important
|
||||
}
|
||||
}
|
||||
|
||||
&.fr-btn.fr-options {
|
||||
&:hover, &:focus {
|
||||
border-left:solid 1px transparent;
|
||||
}
|
||||
&.fr-btn-hover {
|
||||
border-left:solid 1px transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Content
|
||||
.fr-element.fr-disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user