From 21a4c39c816044df4903820ffc8f98ccf9e40146 Mon Sep 17 00:00:00 2001 From: Nicholas Krebs Date: Wed, 3 Apr 2024 13:39:53 +0200 Subject: [PATCH] add local theme --- user/.gitignore | 2 +- user/themes/local/blueprints.yaml | 371 +++++++++++++++++++++++++++ user/themes/local/css/custom.css | 17 ++ user/themes/local/images/favicon.png | Bin 0 -> 13203 bytes user/themes/local/local.php | 9 + user/themes/local/local.yaml | 10 + 6 files changed, 408 insertions(+), 1 deletion(-) create mode 100644 user/themes/local/blueprints.yaml create mode 100644 user/themes/local/css/custom.css create mode 100644 user/themes/local/images/favicon.png create mode 100644 user/themes/local/local.php create mode 100644 user/themes/local/local.yaml diff --git a/user/.gitignore b/user/.gitignore index 2d9e1ba99..5444980c5 100644 --- a/user/.gitignore +++ b/user/.gitignore @@ -7,7 +7,7 @@ plugins/* !plugins/.* themes/* !themes/.* -!themes/local/* +!themes/local config/security.yaml diff --git a/user/themes/local/blueprints.yaml b/user/themes/local/blueprints.yaml new file mode 100644 index 000000000..511e5145c --- /dev/null +++ b/user/themes/local/blueprints.yaml @@ -0,0 +1,371 @@ +name: 'Local' +version: '1.0.0' +description: 'Local Theme Configuration' +icon: crosshairs +author: + name: 'Crabston' + email: contact@crabston.dev + url: 'https://crabston.dev' +keywords: grav, theme, etc +license: MIT + +dependencies: + - { name: grav, version: '>=1.6.0' } + - minimal + - quark-open-publishing + - quark + +form: + validation: loose + fields: + tabs: + type: tabs + active: 1 + fields: + general_info: + type: tab + title: 'Open Publishing Options' + fields: + chromelessoptions: + type: section + title: 'Chromeless Site (i.e. Embedded)' + underline: true + chromeless.enabled: + type: toggle + label: 'Hide Site Menu, Sidebar and Footer' + highlight: 1 + default: 0 + options: + '0': No + '1': Yes + validate: + type: bool + h5psetup: + type: section + title: 'H5P Setup' + underline: true + h5pembedrootpath: + type: text + size: long + label: 'H5P Embed Source URL' + default: 'https://h5p.org/h5p/embed/' + help: 'Enter the embed source URL path up to, but not including, the H5P Content ID.' + description: 'H5P embed source URL path up to, but not including, the Content ID. For example, ''https://h5p.org/h5p/embed/'' or ''https://[organization].h5p.com/content/''.' + validate: + type: URL + displaycclicense: + type: section + title: 'Creative Commons License' + underline: true + fields: + cc_license.enabled: + type: toggle + label: 'Display CC License' + highlight: 1 + default: 0 + options: + '0': No + '1': Yes + validate: + type: bool + cc_license.type: + type: select + label: 'CC License Type' + default: ccby + size: long + description: 'Looking for more info about Creative Commons (CC) Licenses?
Visit the creativecommons.org site.' + options: + ccby: 'CC Attribution' + ccbysa: 'CC Attribution Share Alike' + ccbynd: 'CC Attribution No Derivatives' + ccbync: 'CC Attribution Non-Commercial' + ccbyncsa: 'CC Attribution Non-Commercial Share Alike' + ccbyncnd: 'CC Attribution Non-Commercial No Derivatives' + cc_license.icon: + type: toggle + label: 'Display Only CC License Icon' + highlight: 1 + default: 0 + options: + '0': No + '1': Yes + validate: + type: bool + cc_license.text: + type: text + size: long + description: 'For example, ''except where otherwise noted.''' + label: 'Additional CC License Text' + validate: + type: text + menuoptions: + type: section + title: Menu + underline: true + dropdown.enabled: + type: toggle + label: 'Display Dropdowns in Menu' + highlight: 1 + default: 1 + options: + '0': Disabled + '1': Enabled + validate: + type: bool + theme_info: + type: tab + title: 'Quark Options' + fields: + production-mode: + type: toggle + label: 'Production mode' + help: 'When enabled, Quark will render with minified CSS' + highlight: 1 + default: 1 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + grid-size: + type: select + label: 'Grid size' + help: 'The maximum width of the theme' + size: small + options: + "": 'None (full width)' + grid-xl: 'Extra Large' + grid-lg: Large + grid-md: Medium + header_section: + type: section + title: 'Header Defaults' + underline: true + custom_logo: + type: file + label: 'Custom Logo' + size: large + destination: 'theme://images/logo' + multiple: false + markdown: true + description: 'Will be used instead of default logo `theme://images/grav-logo.svg`' + accept: + - 'image/*' + custom_logo_mobile: + type: file + label: 'Mobile Custom Logo' + size: large + destination: 'theme://images/logo' + multiple: false + accept: + - 'image/*' + header-fixed: + type: toggle + label: 'Fixed header' + help: 'When enabled, the header will be fixed at the top of the browser' + highlight: 1 + default: 1 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + header-animated: + type: toggle + label: Animated + help: 'When enabled, the header will animate to a smaller header when scrolling' + highlight: 1 + default: 1 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + header-dark: + type: toggle + label: 'Dark Style' + help: 'When enabled, a dark-friendly style will be used' + highlight: 0 + default: 0 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + header-transparent: + type: toggle + label: Transparent + help: 'When enabled, a transparent style will be used' + highlight: 0 + default: 1 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + footer_section: + type: section + title: 'Footer Defaults' + underline: true + sticky-footer: + type: toggle + label: 'Sticky footer' + help: 'When enabled, the footer will be sticky at the bottom of the browser' + highlight: 1 + default: 1 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + blog_section: + type: section + title: 'Blog Defaults' + underline: true + blog-page: + type: text + label: 'Blog Page' + help: 'The route to the blog page when working with blog sidebar' + size: medium + default: /blog + blog_page_hero_classes: + type: text + label: 'Hero Classes' + markdown: true + description: 'There are several Hero class options that can be listed here (space separated):
`text-light`, `text-dark`, `title-h1h2`, `parallax`, `overlay-dark-gradient`, `overlay-light-gradient`, `overlay-dark`, `overlay-light`, `hero-fullscreen`, `hero-large`, `hero-medium`, `hero-small`, `hero-tiny`
Please consult the [Quark documentation](https://github.com/getgrav/grav-theme-quark#hero-options) for more details.' + spectre_section: + type: section + title: 'Spectre.css Options' + underline: true + spectre.exp: + type: toggle + label: 'Experimentals CSS' + help: 'When enabled, the `spectre-exp.css` file will be included' + highlight: 0 + default: 0 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + spectre.icons: + type: toggle + label: 'Icons CSS' + help: 'When enabled, the `spectre-icons.css` file will be included' + highlight: 0 + default: 0 + options: + '0': PLUGIN_ADMIN.DISABLED + '1': PLUGIN_ADMIN.ENABLED + validate: + type: bool + custommenu_options: + type: tab + title: 'Custom Menu Items' + fields: + displaycustommenus.enabled: + type: toggle + label: 'Display Custom Menu Items' + help: 'Determines if any defined custom menu entries are displayed in the menubar.' + default: 0 + highlight: 1 + options: + '0': No + '1': Yes + validate: + type: bool + menu: + name: menu + type: list + label: 'Custom Menu Items' + fields: + .text: + type: text + label: Text + description: 'Text label for menu item.' + .icon: + type: text + label: Icon + description: 'Font Awesome icon for menu item.' + .url: + type: text + label: URL + description: 'URL for menu item.' + .target: + type: select + label: Target + default: _self + size: medium + options: + _blank: 'Open in a new window' + _parent: 'Open in the parent frame' + _top: 'Open in the full body of the window' + _self: 'Open in the same frame as clicked' + gitsynclink_options: + type: tab + title: 'Git Sync Link' + fields: + gitsyncsetup: + type: section + title: Setup + underline: true + display_of_git_sync_repo_link: + type: select + size: medium + classes: fancy + label: 'Location of Git Sync Link' + default: menu + options: + menu: Menu + page: 'Page (visible when ''Chromeless'')' + footer: Footer + none: None + type_of_git_sync_repo_link: + type: select + size: medium + label: 'Type of Git Sync Link' + default: view + options: + view: 'View Git Repository' + edit: 'View/Edit Page in Git Repository' + gitsyncoptions: + type: section + title: Appearance + underline: true + custom_git_sync_repo_link_icon: + type: input.text + size: small + label: 'Custom Font Awesome Icon' + description: 'Short name, e.g. ''code-fork''.' + validate: + type: text + custom_git_sync_repo_link_text: + type: input.text + size: long + label: 'Custom Link Text' + description: 'Link text, e.g. ''View Page in GitHub'' or ''View Page as Markdown''.' + validate: + type: text + git_sync_edit_note_text: + type: input.text + size: medium + label: 'Text before Page Link' + description: 'The text before Git Sync Link located on a Page, e.g. ''Have a suggestion or correction?'' or ''Want to reuse this open content?''.' + custom_git_sync_repo_presentation_link_text: + type: input.text + size: long + label: 'Custom Presentation Link Text' + description: 'Link text for embedded Presentations, e.g. ''View Slides in GitHub'' or ''View Slides as Markdown''.' + validate: + type: text + gitsyncadvanced: + type: section + title: Advanced + underline: true + git_sync_repo_link: + type: input.url + label: 'Custom Git Repository Tree URL' + help: 'Enter the URL that leads to the pages folder of your Git Repository.' + description: 'URL path to pages folder for ''View/Edit Page in Git Repository'' option, but with ''/pages'' and everything following it removed. For example, ''https://github.com/paulhibbitts/demo-grav-course-hub/tree/master''.' + validate: + type: URL diff --git a/user/themes/local/css/custom.css b/user/themes/local/css/custom.css new file mode 100644 index 000000000..bbfad8cef --- /dev/null +++ b/user/themes/local/css/custom.css @@ -0,0 +1,17 @@ +/* +=============================================================================================================================== +Put your custom CSS in this file. +=============================================================================================================================== +*/ + +/* Load of Font Awesome for use by Presentation Plugin */ +@import url('//maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css'); + +/* CSS to style Presentation Plugin slides */ +.reveal .slides { + text-align: left; +} + +.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 { + text-transform: unset !important; +} diff --git a/user/themes/local/images/favicon.png b/user/themes/local/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..85526cf43dc3d1557e0b1f6b19ba037861ec8d8e GIT binary patch literal 13203 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 FV1g`BrzZda literal 0 HcmV?d00001 diff --git a/user/themes/local/local.php b/user/themes/local/local.php new file mode 100644 index 000000000..8cb83fb35 --- /dev/null +++ b/user/themes/local/local.php @@ -0,0 +1,9 @@ +