(Grav GitSync) Automatic Commit from RealStickman

This commit is contained in:
RealStickman 2023-02-19 15:13:01 +01:00 committed by GitSync
parent b5faf8244c
commit 8064314a68
33 changed files with 519 additions and 69 deletions

View File

@ -1,3 +1,10 @@
# v1.7.0
## 02/15/2023
1. [](#improved)
* Created non-opinionated and basic Tailwind CSS theme as default `tailwind` solution
* Moved the opinionated Tailwind CSS theme with Laravel Mix to a separate option
# v1.6.1 # v1.6.1
## 01/02/2023 ## 01/02/2023

View File

@ -1,7 +1,7 @@
name: DevTools name: DevTools
slug: devtools slug: devtools
type: plugin type: plugin
version: 1.6.1 version: 1.7.0
description: Plugin and Theme scaffolding utilities description: Plugin and Theme scaffolding utilities
icon: cogs icon: cogs
author: author:

View File

@ -138,7 +138,13 @@ class NewThemeCommand extends DevToolsCommand
$question = new ChoiceQuestion( $question = new ChoiceQuestion(
'Please choose an option', 'Please choose an option',
['pure-blank' => 'Basic Theme using Pure.css', 'tailwind' => 'Basic Theme using tailwind.css', 'inheritance' => 'Inherit from another theme', 'copy' => 'Copy another theme'] [
'pure-blank' => 'Basic Theme using Pure.css',
'tailwind' => 'Basic Theme using tailwind.css and including Alpine.js',
'tailwind-mix' => 'Same as `tailwind` but more opinionated with Laravel Mix compiler',
'inheritance' => 'Inherit from another theme',
'copy' => 'Copy another theme'
]
); );
$this->component['template'] = $io->askQuestion($question); $this->component['template'] = $io->askQuestion($question);

View File

@ -47,7 +47,7 @@ config:
# Edit View # Edit View
edit: edit:
title: title:
template: '{{ object.title }}' template: '{{ object.name }}'
# Preview View # Preview View
preview: preview:

View File

@ -0,0 +1,5 @@
# v0.1.0
## {{ "now"|date("m/d/Y") }}
1. [](#new)
* ChangeLog started...

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) {{ "now"|date("Y") }} {{ component.author.name }}
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,41 @@
# {{ component.name|titleize }} Theme
The **{{ component.name|titleize }}** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
## Description
{{ component.description }}
# Instructions
Run
`npm install` to setup tailwind and required plugins
How to build tailwind:
Development:
`npm run build` for single time compiling
`npm run watch` for constant development
Production:
`npm run prod` for production compiling. **Don't forget to turn on production mode in the theme config**# Instructions
Run
`npm install` to setup tailwind and required plugins
How to build tailwind:
Development:
`npm run build` for single time compiling
`npm run watch` for constant development
Production:
`npm run prod` for production compiling. **Don't forget to turn on production mode in the theme config**

View File

@ -0,0 +1,43 @@
{% set githubid = component.author.githubid ?: component.author.name|hyphenize -%}
name: {{ component.name|titleize }}
slug: {{ component.name|hyphenize }}
type: theme
version: 0.1.0
description: {{ component.description }}
icon: rebel
author:
name: {{ component.author.name }}
email: {{ component.author.email }}
homepage: https://github.com/{{ githubid }}/grav-theme-{{ component.name|hyphenize }}
demo: http://demo.yoursite.com
keywords: grav, theme, etc
bugs: https://github.com/{{ githubid }}/grav-theme-{{ component.name|hyphenize }}/issues
readme: https://github.com/{{ githubid }}/grav-theme-{{ component.name|hyphenize }}/blob/develop/README.md
license: MIT
dependencies:
- { name: grav, version: '>=1.6.0' }
form:
validation: loose
fields:
dropdown.enabled:
type: toggle
label: Dropdown in Menu
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
production:
type: toggle
label: Production Mode
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool

View File

@ -0,0 +1,5 @@
/*@import 'yourcssfile.css';*/
@tailwind base;
@tailwind components;
@tailwind utilities;

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -0,0 +1,5 @@
import Alpine from 'alpinejs'
window.Alpine = Alpine
Alpine.start()

View File

@ -0,0 +1,2 @@
THEME_{{ component.name|hyphenize|replace({'-': '_'})|upper }}:
ERROR: 'Error!'

View File

@ -0,0 +1,25 @@
{
"name": "{{ component.name }}",
"repository": "",
"private": true,
"version": "0.1.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "npx mix",
"watch": "npx mix watch",
"prod": "npx mix -p"
},
"dependencies": {},
"devDependencies": {
"@tailwindcss/forms": "^0.5.0",
"@tailwindcss/typography": "^0.5.2",
"alpinejs": "^2.8.2",
"browser-sync": "^2.27.7",
"browser-sync-webpack-plugin": "^2.3.0",
"laravel-mix": "^6.0.43",
"mix-tailwindcss": "^1.3.0",
"tailwindcss": "^3.0.18",
"tailwindcss-debug-screens": "^2.2.1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,70 @@
const colors = require('tailwindcss/colors');
module.exports = {
content: [
'../../config/**/*.yaml',
'../../pages/**/*.md',
'./blueprints/**/*.yaml',
'./js/**/*.js',
'./templates/**/*.twig',
'./{{ component.name|hyphenize }}.yaml',
'./{{ component.name|hyphenize }}.php'
],
darkMode: 'class', //false or 'media' or 'class'
theme: {
extend: {
screens: {
sm: '640px',
md: '768px',
lg: '1024px',
xl: '1280px',
'2xl': '1536px'
}
},
colors: {
'primary': {
'lighter': colors.yellow['300'],
DEFAULT: colors.yellow['400'],
'darker' : colors.yellow['500'],
},
black: colors.black,
white: colors.white,
red: colors.red,
green: colors.green,
blue: colors.blue,
orange: colors.orange,
indigo: colors.indigo,
transparent: 'transparent',
'inherit': 'inherit',
},
typography: (theme) => ({
DEFAULT: {
css: {
color: 'inherit',
lineHeight: 'inherit',
maxWidth: 'inherit',
a: {
transition: 'all 500ms',
color: theme('colors.primary.DEFAULT'),
'&:hover': {
color: theme('colors.primary.darker')
},
textDecoration: 'none'
},
strong: {
color: 'inherit'
},
}
}
}),
},
variants: {
extend: {},
},
plugins: [
require('@tailwindcss/forms'),
require('@tailwindcss/typography'),
require('tailwindcss-debug-screens')
],
important: false,
}

View File

@ -0,0 +1,5 @@
{% extends 'partials/base.html.twig' %}
{% block content %}
{{ page.content|raw }}
{% endblock %}

View File

@ -0,0 +1,8 @@
{% extends 'partials/base.html.twig' %}
{% block content %}
<div class="prose">
<h1>{{ 'THEME_TAILWIND.ERROR'|t }}</h1>
{{ page.content|raw }}
</div>
{% endblock %}

View File

@ -0,0 +1,68 @@
{% set extension = config.theme.production ? '.min' : '' %}
<!DOCTYPE html>
<html lang="{{ (grav.language.getActive ?: grav.config.site.default_lang)|e }}">
<head>
{% block head %}
<meta charset="utf-8" />
<title>{% if header.title %}{{ header.title|e }} | {% endif %}{{ site.title|e }}</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
{% include 'partials/metadata.html.twig' %}
<link rel="icon" type="image/png" href="{{ url('theme://images/logo.png')|e }}" />
<link rel="canonical" href="{{ page.url(true, true)|e }}" />
{% endblock head %}
{% block stylesheets %}
{% do assets.addCss('theme://dist/css/site' ~ extension ~ '.css', 98) %}
{% endblock %}
{% block javascripts %}
{% do assets.addJs('theme://dist/js/main' ~ extension ~ '.js', 98) %}
{% endblock %}
{% block assets deferred %}
{{ assets.css()|raw }}
{{ assets.js()|raw }}
{% endblock %}
</head>
<body id="top" class="{{ page.header.body_classes|e }} {{ config.theme.production ?: 'debug-screens' }}">
{% block header %}
<div class="header">
<div class="">
<a class="logo" href="{{ home_url|e }}">
{{ config.site.title|e }}
</a>
{% block header_navigation %}
<nav class="main-nav">
{% include 'partials/navigation.html.twig' %}
</nav>
{% endblock %}
</div>
</div>
{% endblock %}
{% block body %}
<section id="body">
<div class="prose">
{% block content %}{% endblock %}
</div>
</section>
{% endblock %}
{% block footer %}
<div class="footer text-center">
<div class="">
<p><a href="http://getgrav.org">Grav</a>, by <a href="https://trilby.media">Trilby Media, LLC</a>.</p>
</div>
</div>
{% endblock %}
{% block bottom %}
{{ assets.js('bottom')|raw }}
{% endblock %}
</body>
</html>

View File

@ -0,0 +1,47 @@
{% macro loop(page) %}
{% for p in page.children.visible %}
{% set current_page = (p.active or p.activeChild) ? 'selected' : '' %}
{% if p.children.visible.count > 0 %}
<li class="has-children {{ current_page|e }}">
<a href="{{ p.url|e }}">
{% if p.header.icon %}<i class="fa fa-{{ p.header.icon|e }}"></i>{% endif %}
{{ p.menu|e }}
</a>
<ul>
{{ _self.loop(p) }}
</ul>
</li>
{% else %}
<li class="{{ current_page|e }}">
<a href="{{ p.url|e }}">
{% if p.header.icon %}<i class="fa fa-{{ p.header.icon|e }}"></i>{% endif %}
{{ p.menu|e }}
</a>
</li>
{% endif %}
{% endfor %}
{% endmacro %}
<ul>
{% if config.theme.dropdown.enabled %}
{{ _self.loop(pages) }}
{% else %}
{% for page in pages.children.visible %}
{% set current_page = (page.active or page.activeChild) ? 'selected' : '' %}
<li class="{{ current_page|e }}">
<a href="{{ page.url|e }}">
{% if page.header.icon %}<i class="fa fa-{{ page.header.icon|e }}"></i>{% endif %}
{{ page.menu|e }}
</a>
</li>
{% endfor %}
{% endif %}
{% for mitem in site.menu %}
<li>
<a href="{{ mitem.url|e }}">
{% if mitem.icon %}<i class="fa fa-{{ mitem.icon|e }}"></i>{% endif %}
{{ mitem.text|e }}
</a>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,9 @@
<?php
namespace Grav\Theme;
use Grav\Common\Theme;
class {{ component.name|camelize }} extends Theme
{
// Access plugin events in this class
}

View File

@ -0,0 +1,4 @@
enabled: true
production: false
dropdown:
enabled: true

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,17 @@
let mix = require('laravel-mix');
require('mix-tailwindcss');
const extension = mix.inProduction() ? '.min' : '';
mix.js('js/main.js', `js/main${extension}.js`)
.css('css/site.css', `css/site${extension}.css`)
.tailwind()
.setPublicPath('dist')
.version()
// .browserSync({
// proxy: 'http://domain.test',
// files: [
// './dist/mix-manifest.json',
// '../../pages/**/*.md'
// ]
// })

View File

@ -0,0 +1,94 @@
{
"name": "tailwind",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"devDependencies": {
"postcss": "^8.4.21"
}
},
"node_modules/nanoid": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"node_modules/postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
}
],
"dependencies": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
}
},
"dependencies": {
"nanoid": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true
},
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"dev": true,
"requires": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
}
}
}

View File

@ -6,20 +6,20 @@
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"build": "npx mix", "build": "cross-env NODE_ENV=development tailwindcss -i ./css/site.css -o ./dist/css/site.css --postcss",
"watch": "npx mix watch", "watch": "cross-env NODE_ENV=development tailwindcss -i ./css/site.css -o ./dist/css/site.css --postcss --watch",
"prod": "npx mix -p" "prod" : "cross-env NODE_ENV=production tailwindcss -i ./css/site.css -o ./dist/css/site.css --postcss"
}, },
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"@tailwindcss/forms": "^0.5.0", "@tailwindcss/forms": "^0.5.3",
"@tailwindcss/typography": "^0.5.2", "@tailwindcss/typography": "^0.5.9",
"alpinejs": "^2.8.2", "alpinejs": "^2.8.2",
"browser-sync": "^2.27.7", "autoprefixer": "^10.4.13",
"browser-sync-webpack-plugin": "^2.3.0", "cross-env": "^7.0.3",
"laravel-mix": "^6.0.43", "postcss": "^8.4.21",
"mix-tailwindcss": "^1.3.0", "postcss-import": "^15.1.0",
"tailwindcss": "^3.0.18", "tailwindcss": "^3.2.6",
"tailwindcss-debug-screens": "^2.2.1" "tailwindcss-debug-screens": "^2.2.1"
} }
} }

View File

@ -0,0 +1,10 @@
module.exports = {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {},
...process.env.NODE_ENV === 'production'
? {'cssnano': {}} : {}
}
}

View File

@ -1,5 +1,4 @@
const colors = require('tailwindcss/colors'); /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
content: [ content: [
'../../config/**/*.yaml', '../../config/**/*.yaml',
@ -11,60 +10,13 @@ module.exports = {
'./{{ component.name|hyphenize }}.php' './{{ component.name|hyphenize }}.php'
], ],
darkMode: 'class', //false or 'media' or 'class' darkMode: 'class', //false or 'media' or 'class'
theme: { theme: {},
extend: {
screens: {
sm: '640px',
md: '768px',
lg: '1024px',
xl: '1280px',
'2xl': '1536px'
}
},
colors: {
'primary': {
'lighter': colors.yellow['300'],
DEFAULT: colors.yellow['400'],
'darker' : colors.yellow['500'],
},
black: colors.black,
white: colors.white,
red: colors.red,
green: colors.green,
blue: colors.blue,
orange: colors.orange,
indigo: colors.indigo,
transparent: 'transparent',
'inherit': 'inherit',
},
typography: (theme) => ({
DEFAULT: {
css: {
color: 'inherit',
lineHeight: 'inherit',
maxWidth: 'inherit',
a: {
transition: 'all 500ms',
color: theme('colors.primary.DEFAULT'),
'&:hover': {
color: theme('colors.primary.darker')
},
textDecoration: 'none'
},
strong: {
color: 'inherit'
},
}
}
}),
},
variants: { variants: {
extend: {}, extend: {}
}, },
plugins: [ plugins: [
require('@tailwindcss/forms'), require('@tailwindcss/forms'),
require('@tailwindcss/typography'), require('@tailwindcss/typography'),
require('tailwindcss-debug-screens') require('tailwindcss-debug-screens')
], ]
important: false,
} }

View File

@ -19,7 +19,7 @@
{% endblock %} {% endblock %}
{% block javascripts %} {% block javascripts %}
{% do assets.addJs('theme://dist/js/main' ~ extension ~ '.js', 98) %} {% do assets.addJs('theme://js/main' ~ extension ~ '.js', 98) %}
{% endblock %} {% endblock %}
{% block assets deferred %} {% block assets deferred %}
@ -55,7 +55,7 @@
{% block footer %} {% block footer %}
<div class="footer text-center"> <div class="footer text-center">
<div class=""> <div class="">
<p><a href="http://getgrav.org">Grav</a>, by <a href="http://www.rockettheme.com">RocketTheme</a>.</p> <p><a href="http://getgrav.org">Grav</a>, by <a href="https://trilby.media">Trilby Media, LLC</a>.</p>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,3 +1,9 @@
# v3.7.3
## 02/17/2023
1. [](#bugfix)
* Fixed an issue where user was not being redirected to the correct page after login
# v3.7.2 # v3.7.2
## 01/02/2023 ## 01/02/2023

View File

@ -1,7 +1,7 @@
name: Login name: Login
slug: login slug: login
type: plugin type: plugin
version: 3.7.2 version: 3.7.3
testing: false testing: false
description: Enables user authentication and login screen. description: Enables user authentication and login screen.
icon: sign-in icon: sign-in

View File

@ -337,7 +337,7 @@ class LoginPlugin extends Plugin
if ($page) { if ($page) {
$header = $page->header(); $header = $page->header();
$allowed = ($header->login_redirect_here ?? true) === false; $allowed = ($header->login_redirect_here ?? true) === true;
if ($allowed && $page->routable()) { if ($allowed && $page->routable()) {
$redirect = $page->route(); $redirect = $page->route();
foreach ($uri->params(null, true) as $key => $value) { foreach ($uri->params(null, true) as $key => $value) {