From 5287bd62defe209b93e2ca7e4a97341c5766e1df Mon Sep 17 00:00:00 2001 From: Guy Sartorelli Date: Mon, 3 Feb 2025 16:17:48 +1300 Subject: [PATCH 1/4] MNT Run module-standardiser --- .editorconfig | 31 ++++++++++++++++++++++++ .github/workflows/add-prs-to-project.yml | 22 +++++++++++++++++ .github/workflows/keepalive.yml | 21 ++++++++++++++++ .github/workflows/merge-up.yml | 22 +++++++++++++++++ LICENSE | 29 ++++++++++++++++++++++ 5 files changed, 125 insertions(+) create mode 100644 .editorconfig create mode 100644 .github/workflows/add-prs-to-project.yml create mode 100644 .github/workflows/keepalive.yml create mode 100644 .github/workflows/merge-up.yml create mode 100644 LICENSE diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..347aa2f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,31 @@ +# For more information about the properties used in +# this file, please see the EditorConfig documentation: +# http://editorconfig.org/ + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,js,json,css,scss,eslintrc,feature}] +indent_size = 2 +indent_style = space + +[composer.json] +indent_size = 4 + +# Don't perform any clean-up on thirdparty files + +[thirdparty/**] +trim_trailing_whitespace = false +insert_final_newline = false + +[admin/thirdparty/**] +trim_trailing_whitespace = false +insert_final_newline = false diff --git a/.github/workflows/add-prs-to-project.yml b/.github/workflows/add-prs-to-project.yml new file mode 100644 index 0000000..2d3f41a --- /dev/null +++ b/.github/workflows/add-prs-to-project.yml @@ -0,0 +1,22 @@ +name: Add new PRs to github project + +on: + pull_request_target: + types: + - opened + - ready_for_review + +permissions: {} + +jobs: + addprtoproject: + name: Add PR to GitHub Project + # Only run on the silverstripe account + if: github.repository_owner == 'silverstripe' + runs-on: ubuntu-latest + steps: + - name: Add PR to github project + uses: silverstripe/gha-add-pr-to-project@v1 + with: + app_id: ${{ vars.PROJECT_PERMISSIONS_APP_ID }} + private_key: ${{ secrets.PROJECT_PERMISSIONS_APP_PRIVATE_KEY }} diff --git a/.github/workflows/keepalive.yml b/.github/workflows/keepalive.yml new file mode 100644 index 0000000..217af63 --- /dev/null +++ b/.github/workflows/keepalive.yml @@ -0,0 +1,21 @@ +name: Keepalive + +on: + # At 9:45 AM UTC, on day 18 of the month + schedule: + - cron: '45 9 18 * *' + workflow_dispatch: + +permissions: {} + +jobs: + keepalive: + name: Keepalive + # Only run cron on the silverstripe account + if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule') + runs-on: ubuntu-latest + permissions: + actions: write + steps: + - name: Keepalive + uses: silverstripe/gha-keepalive@v1 diff --git a/.github/workflows/merge-up.yml b/.github/workflows/merge-up.yml new file mode 100644 index 0000000..f39981d --- /dev/null +++ b/.github/workflows/merge-up.yml @@ -0,0 +1,22 @@ +name: Merge-up + +on: + # At 12:00 AM UTC, only on Friday + schedule: + - cron: '0 0 * * 5' + workflow_dispatch: + +permissions: {} + +jobs: + merge-up: + name: Merge-up + # Only run cron on the silverstripe account + if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule') + runs-on: ubuntu-latest + permissions: + contents: write + actions: write + steps: + - name: Merge-up + uses: silverstripe/gha-merge-up@v1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5c63707 --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Silverstripe Limited - www.silverstripe.com +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 04b200ab0ce94c1d365510fbebde0c220a43f625 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli Date: Mon, 3 Feb 2025 16:23:26 +1300 Subject: [PATCH 2/4] FIX Reference correct path for new composer name. The resources dir is populated based on the name of the module/theme. When the composer name changed, so did the dir this file gets exposed from. --- templates/Includes/Footer.ss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/Includes/Footer.ss b/templates/Includes/Footer.ss index 0f86d4c..b62cd44 100644 --- a/templates/Includes/Footer.ss +++ b/templates/Includes/Footer.ss @@ -13,7 +13,7 @@ From 0c5c37a51d8b45d27afd17d94af4db8e18bc4d4a Mon Sep 17 00:00:00 2001 From: Guy Sartorelli Date: Mon, 3 Feb 2025 16:34:07 +1300 Subject: [PATCH 3/4] DOC Update readme --- README.md | 59 +++++++++++-------------------------------------- screenshot.png | Bin 0 -> 28486 bytes 2 files changed, 13 insertions(+), 46 deletions(-) create mode 100644 screenshot.png diff --git a/README.md b/README.md index 6b2b31f..5797898 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,22 @@ # startup-theme -The default theme for Silverstripe CMS. Startup has been designed to be quickly customisable and extendable so that you -can spend minimal time on boilerplate code and more time building your application. Startup is also intended to be a -demonstrative tool for Silverstripe beginners to get a feel for how the framework operates. +[![Silverstripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/) -In-depth documentation on Silverstripe themes can be [found here](https://docs.silverstripe.org/en/5/developer_guides/templates/themes/). +The default theme for Silverstripe CMS. --------- - -## Templates - -Silverstripe templates are held in .ss files which are similar to .html files, with the difference that .ss files -contain Silverstripe template variables for rendering content from the database. - -Full template documentation can be [found here](https://docs.silverstripe.org/en/5/developer_guides/templates/). A -particularly useful article is the one detailing [template syntax](https://docs.silverstripe.org/en/5/developer_guides/templates/syntax/) - -this contains everything you need to know to quickly become a template adept! - -### A quick walkthrough of the template files in this theme +Startup has been designed to be quickly customisable and extendable so that you +can spend minimal time on boilerplate code and more time building your application. Startup is also intended to be a +demonstrative tool for Silverstripe CMS beginners to get a feel for how the framework operates. -Startup comes with the necessary templates out of the box to render pages with a header and a footer, as well as a menu -for desktop and mobile view ports. A list of the template files and their paths and functions: - -* templates/Page.ss - This is the top level page template, with all other templates being rendered within this one. It -serves as the root HTML for all pages of your site, and therefore is where you place the `` and `` tags. -* templates/Layout/Page.ss - When a template is nested within a `Layout` folder, this template will be rendered by the -`$Layout` variable in the classes' primary template. An example in this theme: templates/Page.ss calls `$Layout`. This -is particularly useful when creating custom page types which subclass Page.php. A common pattern is to subclass Page -(e.g. new page class is App\Pages\MyCustomPage) then add a Layout template (e.g. nest the page template in -templates/App/Pages/MyCustomPage/Layout/MyCustomPage.ss). As this class is a subclass of Page, it will inherit the top -level Page.ss template and this will render the class specific `$Layout` - thus ensuring your site has a global header -and footer and other markup which is needed for every page. Silverstripe template inheritance is deep and powerful, and -is explained in much greater detail in [this lesson](https://www.silverstripe.org/learn/lessons/v4/working-with-multiple-templates-1). -* templates/Includes - Template files included in this folder can be easily included in any other template by using -`<% include TemplateName %>`. In this theme we include the Header and Footer, as well as the suite of Favicons for the -purposes of tidier markup. - -## Styles and JS - -All of the CSS in this theme is *Native CSS*. This means there are no cumbersome build tasks or transpiling SASS. Just -add to and edit the files, and you can modify the theme as needed. The file css/startup.css handles the importing of all -other files so be sure to add any extra css files you may need here. The top level Page.ss includes this file by way of -the [Silverstripe Requirements API](https://docs.silverstripe.org/en/5/developer_guides/templates/requirements/). - -The theme Javascript is included in much the same way. js/startup.js imports modularised functionality, and this is then -included in the top level Page.ss template. +![screenshot of the startup theme](screenshot.png) -------- -## startup-theme-components +## Relevant documentation + +If you're new to Silverstripe CMS, the following documentation should help you understand how this theme is constructed and what the different parts (e.g. templates) do. -This theme is extended upon by the [startup-theme-components module](https://github.com/silverstripeltd/startup-theme-components). -The module adds some commonly used modules to the CMS, and extends and expands upon the CSS in this module. It is highly -recommended to install the module with this theme! +- [themes](https://docs.silverstripe.org/en/developer_guides/templates/themes/) +- [templates](https://docs.silverstripe.org/en/developer_guides/templates/) +- [template syntax](https://docs.silverstripe.org/en/developer_guides/templates/syntax/) +- [Requirements API](https://docs.silverstripe.org/en/developer_guides/templates/requirements/) diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9c4596263ac1ae604f8e49fb884796bda3a876 GIT binary patch literal 28486 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 literal 0 HcmV?d00001 From e000fad33f59289a5fe71b17dc1bb1b29abf7136 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli Date: Mon, 3 Feb 2025 16:34:28 +1300 Subject: [PATCH 4/4] DEP Update dependencies - needs framework but nothing else. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index dd9703e..4322d2d 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ } ], "require": { - "silverstripe/recipe-cms": ">=5.2" + "silverstripe/framework": ">=5.2" }, "extra": { "expose": [