diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..d5320b43 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,41 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + +- OS: (e.g. iOS) +- Browser: (e.g. chrome, safari) +- Version: (e.g. 22) + +**Smartphone (please complete the following information):** + +- Device: (e.g. iPhone6) +- OS: (e.g. iOS8.1) +- Browser: (e.g. stock browser, safari) +- Version: (e.g. 22) + +**Additional context** +Add any other context about the problem here. + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..1a9deb54 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,18 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Additional context** +Add any other context or screenshots about the feature request here. + diff --git a/.github/ISSUE_TEMPLATE/quick_request.md b/.github/ISSUE_TEMPLATE/quick_request.md new file mode 100644 index 00000000..cf491fd9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/quick_request.md @@ -0,0 +1,15 @@ +--- +name: Trimmed Feature request +about: Suggest a quick idea for this project +title: '' +labels: '' +assignees: '' + +---s + +**Describe the feature or change you'd like** +A clear and concise description of what you want to happen. + +**Additional context** +Add any other context or screenshots about the feature request here. + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..85734e69 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,28 @@ +**Checklist:** + + + +- [ ] Have you added an explanation of what your changes do and why you'd like them to be included? +- [ ] Have you updated or added documentation for the change? +- [ ] Have you tested your changes with successful results? + +**Type of Changes:** + + + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Documentation (non-breaking change which adds documentation) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) + +**What is the current behavior? (link to any open issues here)** + +- + +**What is the new behavior (if this is a feature change)?** + +- + +**Other information**: + +- diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml new file mode 100644 index 00000000..0dcc458d --- /dev/null +++ b/.github/workflows/conventional-pr.yml @@ -0,0 +1,18 @@ +name: 'Lint PR' + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + main: + runs-on: ubuntu-latest + steps: + # Please look up the latest version from + # https://github.com/amannn/action-semantic-pull-request/releases + - uses: amannn/action-semantic-pull-request@v3.4.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/npm-release.yml b/.github/workflows/npm-release.yml new file mode 100644 index 00000000..43cdf900 --- /dev/null +++ b/.github/workflows/npm-release.yml @@ -0,0 +1,17 @@ +name: Release packages +on: push +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '14' + - run: yarn + - run: yarn build + - name: Release + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: yarn release diff --git a/.releaserc.json b/.releaserc.json new file mode 100644 index 00000000..342a9a94 --- /dev/null +++ b/.releaserc.json @@ -0,0 +1,19 @@ +{ + "extends": "semantic-release-monorepo", + "branches": [ + "+([0-9])?(.{+([0-9]),x}).x", + "main", + "next", + "next-major", + {"name": "beta", "prerelease": true}, + {"name": "alpha", "prerelease": true} + ], + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/changelog", + "@semantic-release/npm", + "@semantic-release/github", + "@semantic-release/git" + ] +} diff --git a/.vcmrc b/.vcmrc new file mode 100644 index 00000000..8bf39a2a --- /dev/null +++ b/.vcmrc @@ -0,0 +1,17 @@ +{ + "helpMessage": "\nPlease fix your commit message (and consider using http://npm.im/commitizen)\n", + "types": [ + "feat", + "fix", + "docs", + "style", + "refactor", + "perf", + "test", + "chore", + "revert", + "WIP" + ], + "warnOnFail": false, + "autoFix": true +} \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..0cfab80c --- /dev/null +++ b/COPYING @@ -0,0 +1,8 @@ +This Project is provided under: + + SPDX-License-Identifier: EUPL-1.2 + +Being under the terms of the European Union Public Licence version 1.2 only, +according with: + + LICENSES/preferred/EUPL-1.2 \ No newline at end of file diff --git a/LICENSES/preferred/EUPL-1.2 b/LICENSES/preferred/EUPL-1.2 new file mode 100644 index 00000000..69bf1c13 --- /dev/null +++ b/LICENSES/preferred/EUPL-1.2 @@ -0,0 +1,291 @@ +Valid-License-Identifier: EUPL-1.2 +SPDX-URL: https://spdx.org/licenses/EUPL-1.2.html +Usage-Guide: + To use this license in source code, put one of the following SPDX + tag/value pairs into a comment according to the placement + guidelines in the licensing rules documentation. + For 'European Union Public Licence (EUPL) version 1.2 only' use: + SPDX-License-Identifier: EUPL-1.2 +License-Text: + +European Union Public Licence +V. 1.2 + +Copyright © 2021 snek.at + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +This Software, Data and, or Configurations are distributed under the terms of the "European Union Public Licence V. 1.2". + +EUPL © the European Union 2007, 2016 + +This European Union Public Licence (the ‘EUPL’) applies to the Work (as +defined below) which is provided under the terms of this Licence. Any use of +the Work, other than as authorised under this Licence is prohibited (to the +extent such use is covered by a right of the copyright holder of the Work). + +The Work is provided under the terms of this Licence when the Licensor (as +defined below) has placed the following notice immediately following the +copyright notice for the Work: “Licensed under the EUPL”, or has expressed by +any other means his willingness to license under the EUPL. + +1. Definitions + +In this Licence, the following terms have the following meaning: +— ‘The Licence’: this Licence. +— ‘The Original Work’: the work or software distributed or communicated by the + ‘Licensor under this Licence, available as Source Code and also as + ‘Executable Code as the case may be. +— ‘Derivative Works’: the works or software that could be created by the + ‘Licensee, based upon the Original Work or modifications thereof. This + ‘Licence does not define the extent of modification or dependence on the + ‘Original Work required in order to classify a work as a Derivative Work; + ‘this extent is determined by copyright law applicable in the country + ‘mentioned in Article 15. +— ‘The Work’: the Original Work or its Derivative Works. +— ‘The Source Code’: the human-readable form of the Work which is the most + convenient for people to study and modify. + +— ‘The Executable Code’: any code which has generally been compiled and which + is meant to be interpreted by a computer as a program. +— ‘The Licensor’: the natural or legal person that distributes or communicates + the Work under the Licence. +— ‘Contributor(s)’: any natural or legal person who modifies the Work under + the Licence, or otherwise contributes to the creation of a Derivative Work. +— ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of + the Work under the terms of the Licence. +— ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, + renting, distributing, communicating, transmitting, or otherwise making + available, online or offline, copies of the Work or providing access to its + essential functionalities at the disposal of any other natural or legal + person. + +2. Scope of the rights granted by the Licence + +The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +sublicensable licence to do the following, for the duration of copyright +vested in the Original Work: + +— use the Work in any circumstance and for all usage, +— reproduce the Work, +— modify the Work, and make Derivative Works based upon the Work, +— communicate to the public, including the right to make available or display + the Work or copies thereof to the public and perform publicly, as the case + may be, the Work, +— distribute the Work or copies thereof, +— lend and rent the Work or copies thereof, +— sublicense rights in the Work or copies thereof. + +Those rights can be exercised on any media, supports and formats, whether now +known or later invented, as far as the applicable law permits so. + +In the countries where moral rights apply, the Licensor waives his right to +exercise his moral right to the extent allowed by law in order to make +effective the licence of the economic rights here above listed. + +The Licensor grants to the Licensee royalty-free, non-exclusive usage rights +to any patents held by the Licensor, to the extent necessary to make use of +the rights granted on the Work under this Licence. + +3. Communication of the Source Code + +The Licensor may provide the Work either in its Source Code form, or as +Executable Code. If the Work is provided as Executable Code, the Licensor +provides in addition a machine-readable copy of the Source Code of the Work +along with each copy of the Work that the Licensor distributes or indicates, +in a notice following the copyright notice attached to the Work, a repository +where the Source Code is easily and freely accessible for as long as the +Licensor continues to distribute or communicate the Work. + +4. Limitations on copyright + +Nothing in this Licence is intended to deprive the Licensee of the benefits +from any exception or limitation to the exclusive rights of the rights owners +in the Work, of the exhaustion of those rights or of other applicable +limitations thereto. + +5. Obligations of the Licensee + +The grant of the rights mentioned above is subject to some restrictions and +obligations imposed on the Licensee. Those obligations are the following: + +Attribution right: The Licensee shall keep intact all copyright, patent or +trademarks notices and all notices that refer to the Licence and to the +disclaimer of warranties. The Licensee must include a copy of such notices and +a copy of the Licence with every copy of the Work he/she distributes or +communicates. The Licensee must cause any Derivative Work to carry prominent +notices stating that the Work has been modified and the date of modification. + +Copyleft clause: If the Licensee distributes or communicates copies of the +Original Works or Derivative Works, this Distribution or Communication will be +done under the terms of this Licence or of a later version of this Licence +unless the Original Work is expressly distributed only under this version of +the Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee +(becoming Licensor) cannot offer or impose any additional terms or conditions +on the Work or Derivative Work that alter or restrict the terms of the +Licence. + +Compatibility clause: If the Licensee Distributes or Communicates Derivative +Works or copies thereof based upon both the Work and another work licensed +under a Compatible Licence, this Distribution or Communication can be done +under the terms of this Compatible Licence. For the sake of this clause, +‘Compatible Licence’ refers to the licences listed in the appendix attached to +this Licence. Should the Licensee's obligations under the Compatible Licence +conflict with his/her obligations under this Licence, the obligations of the +Compatible Licence shall prevail. + +Provision of Source Code: When distributing or communicating copies of the +Work, the Licensee will provide a machine-readable copy of the Source Code or +indicate a repository where this Source will be easily and freely available +for as long as the Licensee continues to distribute or communicate the Work. + +Legal Protection: This Licence does not grant permission to use the trade +names, trademarks, service marks, or names of the Licensor, except as required +for reasonable and customary use in describing the origin of the Work and +reproducing the content of the copyright notice. + +6. Chain of Authorship + +The original Licensor warrants that the copyright in the Original Work granted +hereunder is owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each Contributor warrants that the copyright in the modifications he/she +brings to the Work are owned by him/her or licensed to him/her and that he/she +has the power and authority to grant the Licence. + +Each time You accept the Licence, the original Licensor and subsequent +Contributors grant You a licence to their contributions to the Work, under the +terms of this Licence. + +7. Disclaimer of Warranty + +The Work is a work in progress, which is continuously improved by numerous +Contributors. It is not a finished work and may therefore contain defects or +‘bugs’ inherent to this type of development. + +For the above reason, the Work is provided under the Licence on an ‘as is’ +basis and without warranties of any kind concerning the Work, including +without limitation merchantability, fitness for a particular purpose, absence +of defects or errors, accuracy, non-infringement of intellectual property +rights other than copyright as stated in Article 6 of this Licence. + +This disclaimer of warranty is an essential part of the Licence and a +condition for the grant of any rights to the Work. + +8. Disclaimer of Liability + +Except in the cases of wilful misconduct or damages directly caused to natural +persons, the Licensor will in no event be liable for any direct or indirect, +material or moral, damages of any kind, arising out of the Licence or of the +use of the Work, including without limitation, damages for loss of goodwill, +work stoppage, computer failure or malfunction, loss of data or any commercial +damage, even if the Licensor has been advised of the possibility of such +damage. However, the Licensor will be liable under statutory product liability +laws as far such laws apply to the Work. + +9. Additional agreements + +While distributing the Work, You may choose to conclude an additional +agreement, defining obligations or services consistent with this Licence. +However, if accepting obligations, You may act only on your own behalf and on +your sole responsibility, not on behalf of the original Licensor or any other +Contributor, and only if You agree to indemnify, defend, and hold each +Contributor harmless for any liability incurred by, or claims asserted against +such Contributor by the fact You have accepted any warranty or additional +liability. + +10. Acceptance of the Licence + +The provisions of this Licence can be accepted by clicking on an icon ‘I +agree’ placed under the bottom of a window displaying the text of this Licence +or by affirming consent in any other similar way, in accordance with the rules +of applicable law. Clicking on that icon indicates your clear and irrevocable +acceptance of this Licence and all of its terms and conditions. + +Similarly, you irrevocably accept this Licence and all of its terms and +conditions by exercising any rights granted to You by Article 2 of this +Licence, such as the use of the Work, the creation by You of a Derivative Work +or the Distribution or Communication by You of the Work or copies thereof. + +11. Information to the public + +In case of any Distribution or Communication of the Work by means of +electronic communication by You (for example, by offering to download the Work +from a remote location) the distribution channel or media (for example, a +website) must at least provide to the public the information requested by the +applicable law regarding the Licensor, the Licence and the way it may be +accessible, concluded, stored and reproduced by the Licensee. + +12. Termination of the Licence + +The Licence and the rights granted hereunder will terminate automatically upon +any breach by the Licensee of the terms of the Licence. Such a termination +will not terminate the licences of any person who has received the Work from +the Licensee under the Licence, provided such persons remain in full +compliance with the Licence. + +13. Miscellaneous + +Without prejudice of Article 9 above, the Licence represents the complete +agreement between the Parties as to the Work. + +If any provision of the Licence is invalid or unenforceable under applicable +law, this will not affect the validity or enforceability of the Licence as a +whole. Such provision will be construed or reformed so as necessary to make it +valid and enforceable. + +The European Commission may publish other linguistic versions or new versions +of this Licence or updated versions of the Appendix, so far this is required +and reasonable, without reducing the scope of the rights granted by the +Licence. New versions of the Licence will be published with a unique version +number. + +All linguistic versions of this Licence, approved by the European Commission, +have identical value. Parties can take advantage of the linguistic version of +their choice. + +14. Jurisdiction + +Without prejudice to specific agreement between parties, +— any litigation resulting from the interpretation of this License, arising + between the European Union institutions, bodies, offices or agencies, as a + Licensor, and any Licensee, will be subject to the jurisdiction of the Court + of Justice of the European Union, as laid down in article 272 of the Treaty + on the Functioning of the European Union, +— any litigation arising between other parties and resulting from the + interpretation of this License, will be subject to the exclusive + jurisdiction of the competent court where the Licensor resides or conducts + its primary business. + +15. Applicable Law + +Without prejudice to specific agreement between parties, +— this Licence shall be governed by the law of the European Union Member State + where the Licensor has his seat, resides or has his registered office, +— this licence shall be governed by Belgian law if the Licensor has no seat, + residence or registered office inside a European Union Member State. + +Appendix + +‘Compatible Licences’ according to Article 5 EUPL are: +— GNU General Public License (GPL) v. 2, v. 3 +— GNU Affero General Public License (AGPL) v. 3 +— Open Software License (OSL) v. 2.1, v. 3.0 +— Eclipse Public License (EPL) v. 1.0 +— CeCILL v. 2.0, v. 2.1 +— Mozilla Public Licence (MPL) v. 2 +— GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 +— Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for + works other than software +— European Union Public Licence (EUPL) v. 1.1, v. 1.2 +— Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or + Strong Reciprocity (LiLiQ-R+) + +— The European Commission may update this Appendix to later versions of the + above licences without producing a new version of the EUPL, as long as they + provide the rights granted in Article 2 of this Licence and protect the + covered Source Code from exclusive appropriation. +— All other changes or additions to this Appendix require the production of a + new EUPL version. \ No newline at end of file diff --git a/README.de-at.md b/README.de-at.md new file mode 100644 index 00000000..3de76964 --- /dev/null +++ b/README.de-at.md @@ -0,0 +1,510 @@ +

+ + SNEK Logo + +

+ +

Snek Jaen

+ +

+ Sie befinden sich im offiziellen Jaen Projekt von snek-at. + Mit Jaen, dem innovativen, attraktiven und offenem CMS Framework für ReactJS. +
+
+ "Nur eine leere Schüssel kann man füllen." - Lao Tzu +
+
+ Melde einen Bug + · + Beantrage ein Feature + · + Dokumentation +
+
+ + + +

+ +Read this wiki in a different language: [English](https://github.com/snek-at/jaen/blob/docs/update-readme/README.md) + +## [](#table-of-contents)Was Sie erwartet +- [💪 Motivation](#-motivation) + - [Jaen Features](#jaen-features) + - [Roadmap](#roadmap) + - [Nachricht um Sie zu inspirieren](#nachricht-um-sie-zu-inspirieren) + - [Disclaimer](#disclaimer) +- [🚀 Beginne in 5 Minuten zu arbeiten](#-beginne-in-5-minuten-zu-arbeiten) + - [Vom Template auf GitHub generieren](#vom-template-auf-github-generieren) + - [Erste Schritte](#erste-schritte) + - [Optionen fürs Aufsetzen](#optionen-fürs-aufsetzen) + - [Codespace Setup](#codespace-setup) + - [Lokales Setup](#lokales-setup) + - [Fehlerbehebung](#fehlerbehebung) + - [Editieren](#editieren) +- [💻 Anwendung](#-anwendung) + - [Übersicht](#übersicht) + - [Seiten Einstellungen](#seiten-einstellungen) + - [Felder](#felder) + - [Seiten Einstellungen](#seiten-einstellungen) + - [Felder](#felder) + - [TextField](textfield) + - [ImageField](#imagefield) + - [BlockContainer](#blockcontainer) + - [IndexField](#indexfield) + - [ChoiceField](#choicefield) + - [Blöcke](#blöcke) +- [🐞 Wie man einen Bug meldet oder ein Feature beantragt](#-wie-man-einen-bug-meldet-oder-ein-feature-beantragt) +- [🤝 Selbst mitwirken](#-selbst-mitwirken) +- [💚 Danksagung](#-danksagung) +- [💼 Schöpfer](#-schöpfer) +- [🤔 FAQs](#-faqs) +- [:exploding_head: Trivia](#exploding_head-trivia) +- [📝 Urheberrechte und Lizenz](#-copyright-and-license) + +## [](#-motivation)💪 Motivation + +Ein CMS **sollte nicht** der definierende Teil einer Webapp sein. Auch E-Commerce sollte das nicht, sondern nur Ihr Code. +ERP Integration **sollte** den Entwickler **nicht** dazu zwingen Kurven zu schneiden. + +- Jaen **wird Ihr** Nutzererlebnis **nicht** beeinträchtigen. +- Jaen **wird Ihr** Anwendungsdesign **nicht** herausfordern. +- Jaen gibt **Ihnen** die Kontrolle. + +Spezialisiert mit gut und genau geführten Dokumentationen für die Schnittstellen. +Flexibel, erweiterbar und Open-Source. + +### Jaen Features + +* Eine schnelle, attraktive "What you see is what you get" Oberfläche für Editoren +* Die komplette Kontrolle über die Struktur und das Design des Frontends +* Von Natur aus schnell, Zwischenspeicher-freundlich wenn notwendig +* Das StreamField ermutigt flexiblen Inhalt ohne die Struktur zu gefährden +* Unterstützung für Bilder und eingebettete Inhalte +* Dezentralisiertes, kostenloses Hosting über ein verteiltes Netzwerk + + +### Roadmap +| Feature | Fertig | Fast geschafft | Wir arbeiten daran | In Planung | +|-------------------------------|:---:|:---:|:---:|:---:| +| `IndexField` | ✅️ | | | | +| `Email Support` | ✅️ | | | | +| `Fixed parent for IndexField` | ✅️ | | | | +| `TextField` | ✅️ | | | | +| `Dynamic Routes` | ✅️ | | | | +| `ImageField` | ✅️ | | | | +| `BlockContainer` | ✅️ | | | | +| `ChoiceField` | ✅️ | | | | +| `Gatsby` | ✅️ | | | | +| `PdfField` | | ✅️ | | | +| `LinkField` | | ✅️ | | | +| `Converter (HELMUT)` | | | | ✅️ | +| `Smart Converter (SMARTMUT)` | | | | ✅️ | +| `E-Commerce` | | | | ✅️ | +| `User Management` | | | | ✅️ | +| `Email Templates` | | | | ✅️ | +| `Development Tools` | | | | ✅️ | +| `Snek Editor` | | | | ✅️ | +| `YT Tutorials` | | | | ✅️ | + +#### Nachricht um Sie zu inspirieren +In einem Hamsterrad zu rennen ist nicht inspirierend. + +#### Disclaimer + +Nichts für schwache Nerven. Wenn Sie sich dazu entscheiden Jaen zu nutzen, könnten Sie einige Kratzer abbekommen. + +## [](#-beginne-in-5-minuten-zu-arbeiten)🚀 Beginne in 5 Minuten zu arbeiten + +### Vom Template [auf GitHub generieren](https://github.com/snek-at/jaen-template/generate) +| Vom Template generieren | Wichtig ist, dass das Repository öffentlich ist und, dass Sie nicht alle Branches inkludieren | +|---|---| +| ![image](https://user-images.githubusercontent.com/83394650/124399008-16b7d780-dd19-11eb-84bb-769462d5440e.png) | ![image](https://user-images.githubusercontent.com/83394650/124401575-6c48b000-dd2a-11eb-8316-7f583e5e98d7.png) | + +### Erste Schritte + +Der `GITHUB_TOKEN`hat Limitierungen für das erste Deployment. Also müssen Sie den GitHub Pages Branch in der Einstellungsseite Ihres Repositorys auswählen. Danach müssen Sie den Anweisungen, die in den Bildern unter diesem Text gezeigt werden, folgen. + +| Erstes Aufsetzen fehlgeschlagen | Gehen sie zu Ihrem Pages einstellungs Tab | +|---|---| +| ![image](https://user-images.githubusercontent.com/83394650/124398796-ecb1e580-dd17-11eb-9f06-64d73eb2d4d9.png) | ![image](https://user-images.githubusercontent.com/83394650/124398815-0ce1a480-dd18-11eb-9aef-9d8a3797008b.png) | + +| Branch auswählen | Erneutes erfolgreiches Aufsetzen | +|---|---| +| ![image](https://user-images.githubusercontent.com/83394650/124398825-1408b280-dd18-11eb-985f-f28de94b8888.png) | ![image](https://user-images.githubusercontent.com/83394650/124398968-d3f5ff80-dd18-11eb-8f17-ee2d92900014.png) | + +### Optionen fürs Aufsetzen +Wir empfehlen [Visual Studio Code](https://github.com/microsoft/vscode) als Entwickerumgebung, entweder Lokal oder in einem Codespace. + +#### Codespace Setup + +Der einfachste Weg ist die Nutzung eines GitHub [Codespace](https://github.com/features/codespaces) (in der Beta). Erstellen Sie einfach einen Codespace vom Code Menü. Warten Sie bis der Codespace fertig aufgesetzt ist und öffnen Sie ein Konsolenfenster (Strg-\`, Steuerung-Backquote) und: + +- Erstellen Sie eine .env-Datei und setzen Sie eine PUBLIC_URL +- Starten Sie die Seite lokal mit `yarn start` +- Oder kompilieren Sie eine lokale Kopie mit `yarn run build` + +#### Lokales Setup +Wenn Sie sich dazu entscheiden ein lokales Setup zu verwenden, stellen Sie sicher, dass Sie die folgenden Schritte beachten: + +- Nutzen Sie `yarn install` um die Abhängigkeiten zu installieren +- Starten Sie die Seite lokal mit `yarn start` +- Oder kompilieren Sie eine lokale Kopie mit `yarn run build` + +Die Demoseite ist nun unter verfügbar. + +#### Fehlerbehebung + +- Dieses Repository wird mit yarn getestet. Wenn Sie npm verwenden, könnten unerwartete Fehler auftreten. + +Wenn Sie während des Aufsetzen auf andere Probleme stoßen, bitten wir Sie darum, Ihr Problem [zu melden](https://github.com/snek-at/jaen/issues), sodass wir die Dokumentation verbessern können. + +#### Editieren + +Um Ihre Seite zu editieren müssen Sie sich beim CMS anmelden.
+Der Standardnutzer hierfür ist **snekman** und das Passwort **ciscocisco**. + +## [](#-anwendung)💻 Anwendung + +### Übersicht + +#### Seiten Einstellungen +| Parameter | Typ | Beschreibung | Wiki | Tutorial | +|-------------------------------|:----------:|-------------|:----:|:--------:| +| `TemplateName` | string | Der TemplateName definiert den Namen Ihrer Seite im CMS. | | | + +#### Felder +| Feld | Parameter | Beschreibung | Wiki | Tutorial | +|-------------------------------|------------|-------------|:----:|:--------:| +| `TextField` | fieldName
initValue
rtf | Ein TextField wird genutzt um editierbare Texte auf Ihre Seite hinzuzufügen. | [✅️](https://github.com/snek-at/jaen/wiki/TextField_ger-at) | | +| `ImageField` | fieldName
initValue | Das ImageField muss genutzt werden, wenn Sie Bilder auf Ihrer Seite brauchen. | [✅️](https://github.com/snek-at/jaen/wiki/ImageField_ger-at) | | +| `BlockContainer` | name
reverseOrder
blocks
wrap
wrapProps | Ein StreamField bietet Ihnen die Möglichkeit mehrere React-Components sooft wie Ihnen beliebt zu wiederholen. | [✅️](https://github.com/snek-at/jaen/wiki/BlockContainer_ger-at) | | +| `IndexField` | fieldName
fixedSlug
onRender | Das IndexField ist dafür da Links und Blöcke zu bauen, die Daten von Subseiten benötigen.
Mit dem fixedSlug Parameter können Sie entscheiden von welcher Seite Sie die Subseiten verwenden wollen. | [✅️](https://github.com/snek-at/jaen/wiki/IndexField_ger-at) | | +| `ChoiceField` | fieldName
options
initValue
onRender
onRenderPopover | Mithilfe des ChoiceFields können Sie React-Components bauen und den Administrator der Webseite entscheiden lassen, welchen davon er gerade braucht. Dafür haben Sie zwei Möglichkeiten. Wenn Sie alle Ihre Komponenten immer anzeigen wollen und z.B. nur die Farbe des aktiven ändern wollen oder Sie ein Boolean Verhalten benötigen, können Sie dem onRenderPopover ein null als Wert geben und die Auswahl im onRender definieren. Wenn aber nur einer Ihrer Komponenten angezeigt werden sollte können Sie ein selbst definiertes Popover in onRenderPopover dafür schreben. | [✅️](https://github.com/snek-at/jaen/wiki/ChoiceField_ger-at) | | + + +### Page Settings +```javascript +import {JaenTemplate} from '@snek-at/jaen-pages/src/types' + +const HomePage: JaenTemplate = () => {...} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` + +jaen-config.js +```javascript +module.exports = { + remote: 'snek-at/jaen-template', + plugins: { + pages: { + resolve: require('@snek-at/jaen-pages/jaen-register'), + templates: [require('./src/templates/SamplePage.tsx')] + } + } +} +``` +gatsby-config.js +```javascript +const path = require('path') + +const siteMetadata = require('./site-metadata') + +module.exports = { + siteMetadata, + plugins: [ + '@snek-at/jaen', + { + resolve: '@snek-at/jaen-pages', + options: { + templates: { + SamplePage: path.resolve('src/templates/SamplePage.tsx') + } + } + } + ] +} +``` +### Fields +Felder sind die Datenblöcke, die Sie verwenden können um Ihre React Apps für den Endnutzer bearbeitbar zu gestalten. +Die Namen der Felder müssen auf der jeweiligen Seite einzigartig sein. +Es wird empfohlen, aussagekräftige Namen zu nutzen. + +#### TextField + +Mithilfe des TextFields können Sie editierbare RichTextFields (`rtf={true}`) oder ebenfalls editierbare SimpleTextFields (`rtf={false}`) auf Ihre Webseite bringen.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/TextField_ger-at)
+ +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return( + + ) +} + +HomePage.TemplateName="HomePage" +export default HomePage + +``` + +#### ImageField + +Zum Einbetten von Bildern können Sie das ImageField nutzen.
+Es funktioniert, indem ein Bild, welches auf der IPFS gespeichert wird, auf der Seite eingebettet wird.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/ImageField_ger-at)
+ +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return( + + ) +} + +export default HomePage +``` + + +#### BlockContainer + +Der BlockContainer ermöglicht es Ihnen, editierbare Blocks in Ihre Seite einzubauen und diese so oft wie gewünscht wiederzuverwenden. Mit dem Wrap Parameter ist es Ihnen ermöglicht einen Chakra UI Wrap um die Blöcke zu setzen und wrapProps erlaubt das bestimmen der Parameter des Wraps. Um dieses Feld zu nutzen müssen Sie einen Block bauen.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/BlockContainer_ger-at)
+ +```javascript +import {BlockContainer, JaenTemplate} from '@snek-at/jaen-pages' +import {CardBlock} from '...' + +const HomePage: JaenTemplate = () => { + return ( +
+ +
+ ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` +##### Chakra UI Wrap Beispiel + +Dieses Beispiel zeigt fünf farbige Quadrate an, die untereinander einen Abstand von 1 rem haben, die in einem Flex sind, das in eine neue Zeile geht, wenn die Quadrate mehr Platz benötigen als das Browserfenster hat und die zentriert sind. + +```javascript +import {Wrap, Box} from '@chakra-ui/react' +import {fields} from '@snek-at/jaen-pages' + + +const Component = () => { + return( + + + + + + + + ) +} + +``` + +#### IndexField +Wenn Sie einen Link auf die Unterseiten Ihrer Seite brauchen können Sie das IndexField verwenden. Der fixedSlug Parameter wird nicht gefordert. Standardmäßig wird die Seite, auf welcher sich das IndexField befindet, dafür genutzt. onRender erlaubt Ihnen die React-Components, die die Daten oder den Link der Unterseiten enthalten, zu bauen.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/IndexField_ger-at)
+ +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return ( + { + return( + [...] + }} + /> + ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` + +#### ChoiceField + +Mithilfe des ChoiceFields können Sie React-Components bauen und den Administrator der Webseite entscheiden lassen, welchen davon er gerade braucht. Dafür haben Sie zwei Möglichkeiten. Wenn Sie alle Ihre Komponenten immer anzeigen wollen und z.B. nur die Farbe des aktiven ändern wollen oder Sie ein Boolean Verhalten benötigen, können Sie dem onRenderPopover ein null als Wert geben und die Auswahl im onRender definieren. Wenn aber nur einer Ihrer Komponenten angezeigt werden sollte können Sie ein selbst definiertes Popover in onRenderPopover dafür schreben.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/ChoiceField_ger-at)
+ + +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return( + { + return [...] + }} + onRender={(selection, options, onSelect, isEditing) => { + return [...] + }} + /> + ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage + +``` + +### Blöcke +Der Block ist der Eckstein des StreamFields. Mit seiner Hilfe können Sie React-Componenten bauen, welche im StreamField so oft wie gewünscht wiederholt werden können. In Blöcken können Sie alle verfügbaren Jaen Felder verwenden.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/Blocks_ger-at)
+ +```javascript +import {JaenBlock, fields} from '@snek-at/jaen-pages' + +const CardBlock: JaenBlock = () => { + return ( +
+

+ +

+ +
+ ) +} + +CardBlock.BlockName = 'CardBlock' +CardBlock.BlockDisplayName = 'Card' + +export default CardBlock +``` + + +## [](#-wie-man-einen-bug-meldet-oder-eine-neuerung-beantragt)🐞 Wie man einen Bug meldet oder ein Feature beantragt + +Haben Sie einen Bug gefunden oder haben Sie eine Idee für ein neues Feature? Bitte sehen Sie vorher in den offenen und geschlossenen Issues nach, ob Ihr Problem vielleicht bereits behandelt wurde. +Wenn Sie den Bug oder die Idee darin nicht finden, [öffnen Sie bitte ein neues Issue](https://github.com/snek-at/jaen/issues/new/choose). + +## [](#-selbst-mitwirken)🤝 Selbst mitwirken +![GitHub letzter Commit](https://img.shields.io/github/last-commit/snek-at/jaen) +![GitHub Issues](https://img.shields.io/github/issues-raw/snek-at/jaen) +![GitHub geschlossene Issues](https://img.shields.io/github/issues-closed-raw/snek-at/jaen?color=green) + +Bitte lesen Sie unsere +[Contibution Guidlines](https://github.com/snek-at/jaen/blob/master/CONTRIBUTING.md). +Darin werden Sie die Anleitungen zum Öffnen von Issues, die Code Standards und Notizen zur Entwicklung finden. + +Der Code sollte unserem [Code Guide](https://github.com/snek-at/tonic/blob/master/STYLE_GUIDE.md) entsprechen, der von +[snek-at](https://github.com/snek-at) aktuell gehalten wird. + +## [](#-danksagung)💚 Danksagung + +Wir haben noch keine externen Entwickler. Um Ihren Namen hier zu sehen, [tragen Sie zu unserem Projekt bei](#-sebst-beitragen). + +## [](#-schöpfer)💼 Schöpfer + + + + + + + + + + + + +
+ + Avatar schettn + + + + Avatar kleberbaum + + + + Avatar petute + +
+ Nico Schett + + Florian Kleber + + Daniel
Petutschnigg
+
+ +## [](#-faqs)🤔 FAQs +**Q:** Was bedeuten die Kategorien der Roadmap? +* Fertig - Hoffentlich gefällt Ihnen das Feature. Gerne können Sie über Feedback oder Verbesserungsvorschläge berichten! +* Fast geschafft - Wir sind dabei die letzten Änderungen vorzunehmen. Die Features in dieser Kategorie können in den nächsten zwei bis vier Wochen erwartet werden. +* Wir arbeiten daran - Die Entwicklung hat gestartet. Wir arbeiten daran, es so schnell wie möglich zu vervollständigen. +* In Planung - Wir evaluieren das Feature. Dies kann bedeuten, dass wir schon Designen oder dass wir noch darüber nachdenken wie es implementiert werden könnte. Diese Phase ist ein guter Zeitpunkt zum Einbringen von Ihren Ideen. + +**Q:** Warum sind auf der Roadmap keine Termine? + +**A:** Auf der Roadmap sind keine Termine, da wir wissen, dass sich die Umstände ändern können und wir nehmen uns den Spielraum, Sicherheitsprobleme zu lösen oder Nutzer zu untersützen. Manchmal müssen wir daher unsere Prioritäten ändern, wollen aber gerne Enttäuschungen vermeiden. + +**Q:** Wie kann ich eine Rückmeldung hinterlassen oder mehr Informationen erhalten? + +**A:** Bitte öffnen Sie ein Issue! Wenn das Issue einen Bug oder ein Sicherheitsproblem betrifft, beachten Sie bitte die oben stehnden Anleitung. + +**Q:** Wie kann ich ein Feature für die Roadmap beantragen? + +**A:** Bitte öffnen Sie ein Issue! Sie können [hier](https://github.com/snek-at/jaen/blob/master/CONTRIBUTING.MD) nachlesen was beim mitwirken zu beachten ist. Issues von der Community werden mit dem Tag "Proposed" gekennzeichnet und werden vom Team überprüft. + +## [](#-trivia):exploding_head: Trivia +#### Name: +In Österreich ist der erste Monat des Jahres der Jänner. Da wir in diesem Monat mit der Arbeit an Jaen begonnen haben, bekam das Projekt seinen Namen. +#### Aussprache: +Jaen wird entweder wie (Jän)ner [ˈjɛn] oder wie (Jan)uary [ˈdʒæn] ausgesprochen. +#### Passwort: +Das Standardpasswort ist **ciscocisco**. Der Ursprung hiervon liegt in unserer Schulzeit. In der Schule für Netzwerktechnik, die der Großteil des Gründerteams besuchte, war in den Cisco-Kursen das Passwort stets ciscocisco. +#### Releases: +Jeder unserer Releases schmückt sich mit einem Lied. Hoffentlich haben Sie Spaß damit. +#### Maskottchen: +Das inoffizielle Maskottchen für Jaen ist eine junge Frau mit einer E-Gitarre. + +### <3 + +## [](#-urheberrechte-und-lizent)📝 Urheberrechte und Lizenz + +![GitHub Repository Lizenz](https://img.shields.io/badge/license-EUPL--1.2-blue) + +Das Nutzen dieses Source-Codes wird von der EUPL-1.2 Lizenz bestimmt sie ist in der LICENSE Datei unter https://snek.at/license zu finden. + + diff --git a/README.md b/README.md index 0159a4ff..30219476 100644 --- a/README.md +++ b/README.md @@ -1 +1,517 @@ -# jaen \ No newline at end of file +

+ + SNEK Logo + +

+ +

Snek Jaen

+ +

+ This is the official jaen project provided by snek-at. + Free, sexy and cutting edge CMS framework for ReactJS. +
+
+ "A bowl is most useful when it is empty." - Lao Tzu +
+
+ Report bug + · + Request feature + · + Documentation +
+
+ + + +

+ +Read this readme in a different language: [Deutsch](https://github.com/snek-at/jaen/blob/docs/update-readme/README.de-at.md) + +## [](#table-of-contents)What’s In This Document +- [💪 Motivation](#-motivation) + - [Jaen Features](#jaen-features) + - [Roadmap](#roadmap) + - [Msg inspiring PPL](#msg-inspiring-ppl) + - [Disclaimer](#disclaimer) +- [🚀 Get Up and Running in 5 Minutes](#-get-up-and-running-in-5-minutes) + - [Generate from template Generate Jaen on GitHub](#generate-from-template-generate-jaen-on-github) + - [First Deployment](#first-deployment) + - [Deployment Options](#deployment-options) + - [Codespace Setup](#codespace-setup) + - [Local Setup](#local-setup) + - [Troubleshooting](#troubleshooting) + - [Editing](#editing) +- [💻 How to Code](#-how-to-code) + - [Overview](#overview) + - [Page Settings](#page-settings) + - [Fields](#fields) + - [Page Settings](#page-settings) + - [Fields](#fields) + - [TextField](#textfield) + - [ImageField](#imagefield) + - [BlockContainer](#blockcontainer) + - [IndexField](#indexfield) + - [ChoiceField](#choicefield) + - [Blocks](#blocks) +- [🐞 How to Report a Bug or Request a Feature](#-how-to-report-a-bug-or-request-a-feature) +- [🤝 How to Contribute](#-how-to-contribute) +- [💚 Thanks](#-thanks) +- [💼 Creators](#-creators) +- [🤔 FAQs](#-faqs) +- [🤯 Trivia](#-trivia) +- [📝 Copyright and License](#-copyright-and-license) + +## [](#-motivation)💪 Motivation + +A CMS **should not** be the defining feature of a webapp. Neither should E-Commerce or anything other than your code. \ +ERP integration **should not** force developers to cut corners. + +- Jaen **does not** interfere with **your** user experience. +- Jean **does not** challenge **your** application design. +- Jaen gives the power back to **you**. + +One thing and one thing only with clean and well documented interfaces. +Customizable, extensible and open-source. + +### Jaen Features +* A fast, attractive interface for authors +* Complete control over front-end design and structure +* Fast out of the box, cache-friendly when you need it +* StreamField encourages flexible content without compromising structure +* Excellent support for images and embedded content +* Powered by blockchain and can be run for free +* Simple, intuitive "What you see is what you get" editing mode + +### Roadmap +| Feature | Shipped | Almost There | We're Writing the Code | Investigating | +|-------------------------------|:---:|:---:|:---:|:---:| +| `IndexField` | ✅️ | | | | +| `Email Support` | ✅️ | | | | +| `Fixed parent for IndexField` | ✅️ | | | | +| `TextField` | ✅️ | | | | +| `Dynamic Routes` | ✅️ | | | | +| `ImageField` | ✅️ | | | | +| `BlockContainer` | ✅️ | | | | +| `ChoiceField` | ✅️ | | | | +| `Gatsby` | ✅️ | | | | +| `PdfField` | | ✅️ | | | +| `LinkField` | | ✅️ | | | +| `Converter (HELMUT)` | | | | ✅️ | +| `Smart Converter (SMARTMUT)` | | | | ✅️ | +| `E-Commerce` | | | | ✅️ | +| `User Management` | | | | ✅️ | +| `Email Templates` | | | | ✅️ | +| `Development Tools` | | | | ✅️ | +| `Snek Editor` | | | | ✅️ | +| `YT Tutorials` | | | | ✅️ | + +#### Msg inspiring PPL +Chasing ones own tail is not inspiring. + +#### Disclaimer +Not for crybabies. Do not touch if you are afraid of being scratched a little. + +## [](#-get-up-and-running-in-5-minutes)🚀 Get Up and Running in 5 Minutes + +### Generate from template [Generate Jaen on GitHub](https://github.com/snek-at/jaen-template/generate) +| Generate from template | Important public and no branches | +|---|---| +| ![image](https://user-images.githubusercontent.com/83394650/124399008-16b7d780-dd19-11eb-84bb-769462d5440e.png) | ![image](https://user-images.githubusercontent.com/83394650/124401575-6c48b000-dd2a-11eb-8316-7f583e5e98d7.png) | + +### First Deployment +The `GITHUB_TOKEN` has limitations for the first deployment so we have to select the GitHub Pages branch on the repository settings tab. After that, follow the instrucions shown in the pictures below to deploy successfully. + +| First deployment failed | Go to the [settings tab](https://github.com/snek-at/jaen-template/settings/pages) | +|---|---| +| ![image](https://user-images.githubusercontent.com/83394650/124398796-ecb1e580-dd17-11eb-9f06-64d73eb2d4d9.png) | ![image](https://user-images.githubusercontent.com/83394650/124398815-0ce1a480-dd18-11eb-9aef-9d8a3797008b.png) | + +| Select branch | Deploying again and succeed | +|---|---| +| ![image](https://user-images.githubusercontent.com/83394650/124398825-1408b280-dd18-11eb-985f-f28de94b8888.png) | ![image](https://user-images.githubusercontent.com/83394650/124398968-d3f5ff80-dd18-11eb-8f17-ee2d92900014.png) | + +### Deployment Options +We recomend to use [Visual Studio Code](https://github.com/microsoft/vscode) as IDE either in a codespace or using local setup. + +#### Codespace Setup +The easiest method is to use a GitHub [Codespace](https://github.com/features/codespaces) (in beta). Just create a GitHub Codespace from the Code menu. Wait for the Codespace to complete provisioning. When the Codespace has completed provisioning, open a terminal window (Ctrl-`, Control-backquote) and: + +- Create .env file and set PUBLIC_URL +- Start a local copy of the docs site with `yarn start` +- Or build a local copy of the library with `yarn run build` + +#### Local Setup +If you decide to set up locally, make sure you have the following prerequisites: + +- Use `yarn install` to install all dependencies +- Start a local copy of the docs site with `yarn start` +- Or build a local copy of the library with `yarn run build` + +The demo site will now be accessible at . + +#### Troubleshooting + +- You have to use yarn instead of npm. If you decide to use npm you might run into errors. + +If you encounter any other issues getting this template to work, we ask you to [report it](https://github.com/snek-at/jaen/issues) so that we can improve the documentation. + +#### Editing + +To edit the page you have to log into the CMS.
+The standard user for this is **snekman** and the password for the account is **ciscocisco**. + +## [](#-how-to-code)💻 How to Code + +### Overview + +#### Page Settings +| Property | Type | Description | Wiki | Tutorial | +|-------------------------------|:----------:|-------------|:----:|:--------:| +| `TemplateName` | string | The TemplateName defines the name of your template in the context of the CMS. | | | + +#### Fields +| Field | Properties | Description | Wiki | Tutorial | +|-------------------------------|------------|-------------|:----:|:--------:| +| `TextField` | fieldName
initValue
rtf | TextField can be used to add editable texts to your page.| [✅️](https://github.com/snek-at/jaen/wiki/TextField) | | +| `ImageField` | fieldName
initValue | The ImageField is used to provide editable images that are hosted on the ipfs. | [✅️](https://github.com/snek-at/jaen/wiki/ImageField) | | +| `BlockContainer` | name
reverseOrder
blocks
wrap
wrapProps | With a BlockContainer you can build your own React-Components with editable content and repeat them as often as you like. | [✅️](https://github.com/snek-at/jaen/wiki/BlockContainer) | | +| `IndexField` | fieldName
fixedSlug
onRender | The IndexField provides you with the oppertunity to easily build links, buttons and more pointing to your subpages. It is also useful for building cards that rely on content from childpages.
With the fixedSlug property you can decide which page the childpages are pulled from. | [✅️](https://github.com/snek-at/jaen/wiki/IndexField) | | +| `ChoiceField` | fieldName
options
initValue
onRender
onRenderPopover | The ChoiceField allows you to build React-Components and let the administrator of the page decide which of the components to display. You can achieve this by either providing a popover in which the options can be decided or you can return null in the popover and add an onClick to your component for use-cases in which all the choices are always displayed or for a boolean like behaviour. | [✅️](https://github.com/snek-at/jaen/wiki/ChoiceField) | | + +### Page Settings +```javascript +import {JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => {...} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` + +jaen-config.js +```javascript +module.exports = { + remote: 'snek-at/jaen-template', + plugins: { + pages: { + resolve: require('@snek-at/jaen-pages/jaen-register'), + templates: [require('./src/templates/SamplePage.tsx')] + } + } +} +``` +gatsby-config.js +```javascript +const path = require('path') + +const siteMetadata = require('./site-metadata') + +module.exports = { + siteMetadata, + plugins: [ + '@snek-at/jaen', + { + resolve: '@snek-at/jaen-pages', + options: { + templates: { + SamplePage: path.resolve('src/templates/SamplePage.tsx') + } + } + } + ] +} +``` + +### Fields +Fields are data blocks that can be used to build React apps which the enduser is able to maintain. +Fieldnames have to be unique when they are on the same page. +It is advisable to give all the fields descriptive names. + +#### TextField + +The TextField is there to provide your react-components with editable content. +It requires you to give it a fieldName and an initValue. +The fieldName sets the name of the TextField for the CMS and the initValue sets the value the field has before it gets edited. +By default the TextField provides you with an editable RichText. If you only need a short one liner for a heading etc. you can set rtf to false to restrict the field.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/TextField)
+ +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return( + + ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` + +#### ImageField + +The ImageField is the Jaen field that allows you to embed images hosted on the IPFS. It requires both a fieldName and an initValue.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/ImageField)
+ +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return( + + ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` + +#### BlockContainer + +Jaen BlockContainers enable you to integrate editable blocks and to use as many of them as you like. You can put them into a [Chakra UI wrap](https://chakra-ui.com/docs/layout/wrap) and pass props to the wrap. In order to use this field you are required to build a block. You can find an example of a block below.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/BlockContainer)
+ +```javascript +import {BlockContainer, JaenTemplate} from '@snek-at/jaen-pages' +import {CardBlock} from '...' + +const HomePage: JaenTemplate = () => { + return ( +
+ +
+ ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` + +##### Chakra UI Wrap Example + +This example displays five boxes of varying colors with a 1 rem space between them in a flex that goes into the next row if the content is too wide. It also centers the boxes. + +```javascript +import {Wrap, Box} from '@chakra-ui/react' +import {fields} from '@snek-at/jaen-pages' + + +const Component = () => { + return( + + + + + + + + ) +} + +``` +#### IndexField + +If you want to link to childpages of a slug, the IndexField is your friend. The fixedSlug property is not required. When none is provided, the children of the page the IndexField is on are used. If you like, it is possible to specify the parentpage and the onRender property allows you to build cards, teasers, buttons and more to your subpages.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/IndexField)
+ +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return ( + { + return( + [...] + }} + /> + ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage +``` + +#### ChoiceField + +The ChoiceField allows you to build React-Components and let the administrator of the page decide which of the components to display. You can achieve this by either providing a popover in which the options can be decided or you can return null in the popover and add an onClick to your component for use-cases in which all the choices are always displayed or for a boolean like behaviour.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/ChoiceField)
+ +```javascript +import {fields, JaenTemplate} from '@snek-at/jaen-pages' + +const HomePage: JaenTemplate = () => { + return( + { + return [...] + }} + onRender={(selection, options, onSelect, isEditing) => { + return [...] + }} + /> + ) +} + +HomePage.TemplateName = 'HomePage' + +export default HomePage + +``` + + + +### Blocks +The Block is the keystone of the BlockContainer. With the help of blocks you can build complex React-Components with editable content. All available fields can be used inside a block.
[Wiki 📖](https://github.com/snek-at/jaen/wiki/Blocks)
+ +```javascript +import {JaenBlock, fields} from '@snek-at/jaen-pages' + +const CardBlock: JaenBlock = () => { + return ( +
+

+ +

+ +
+ ) +} + +CardBlock.BlockName = 'CardBlock' +CardBlock.BlockDisplayName = 'Card' + +export default CardBlock +``` + + +## [](#-how-to-report-a-bug-or-request-a-feature)🐞 How to Report a Bug or Request a Feature + +Have a bug or a feature request? Please first search for existing and closed issues. If your problem or idea is not +addressed yet, [please open a new issue](https://github.com/snek-at/jaen/issues/new/choose). + +## [](#-how-to-contribute)🤝 How to Contribute +![GitHub last commit](https://img.shields.io/github/last-commit/snek-at/jaen) +![GitHub issues](https://img.shields.io/github/issues-raw/snek-at/jaen) +![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/snek-at/jaen?color=green) + +Please read through our +[contributing guidelines](https://github.com/snek-at/jaen/blob/master/CONTRIBUTING.md). Included are +directions for opening issues, coding standards, and notes on development. + +All code should conform to the [Code Guide](https://github.com/snek-at/tonic/blob/master/STYLE_GUIDE.md), maintained by +[snek-at](https://github.com/snek-at). + +## [](#-thanks)💚 Thanks + +We do not have any external contributors yet, but if you want your name to be here, feel free +to [contribute to our project](#contributing). + +## [](#-creators)💼 Creators + + + + + + + + + + + + +
+ + Avatar schettn + + + + Avatar kleberbaum + + + + Avatar petute + +
+ Nico Schett + + Florian Kleber + + Daniel
Petutschnigg
+
+ +## [](#-faqs)🤔 FAQs +**Q:** What do the roadmap categories mean? +* Shipped - Hopefully you are enjoying it! Give us feedback on how it is working! +* Almost There - We are applying the finishing touches. Things in this bucket you can expect to be shipped within 2-4 weeks. +* We're Writing the Code - Actively in development, we are trying to get this out to you in a good state as soon as we can. +* Investigating - We're thinking about it. This might mean we're still designing, or thinking through how this might work. This is a great phase to send how you want to see something implemented! We'd love to see your usecase or design ideas here. + +**Q:** Why are there no dates on your roadmap? + +**A:** Because we know things change and we want the room to do the right thing by fixing security issues as they come up or helping people out where they need. This means we might have to change our priorities and don’t want to let people down. + +**Q:** How can I provide feedback or ask for more information? + +**A:** Please open an issue in this repo! If the issue is a bug or security issue, please follow the separate instructions above. + +**Q:** How can I request a feature be added to the roadmap? + +**A:** Please open an issue! You can read about how to contribute [here](https://github.com/snek-at/jaen/blob/master/CONTRIBUTING.MD). Community submitted issues will be tagged "Proposed" and will be reviewed by the team. + +## [](#-trivia)🤯 Trivia +#### Name: +In Austria the first month of the year is called "Jänner" since we started working on this project in January we decided to name the project Jaen. +#### Pronounciation: +The name Jaen is pronounced (Jän)ner [ˈjɛn] or (Jan)uary [ˈdʒæn]. +#### Password: +The standard password in Jaen is **ciscocisco**. The origin of this password were back at our time in school. Most of us went to school for network engineering and in the cisco courses the standard password would always be ciscocisco. +#### Releases: +Every one of our Jaen releases has it's own theme song. Have fun with it. +#### Mascot: +The inofficial mascot of this project is a girl holding an electric guitar. + +### <3 + + +## [](#-copyright-and-license)📝 Copyright and License + +![GitHub repository license](https://img.shields.io/badge/license-EUPL--1.2-blue) + +Use of this source code is governed by an EUPL-1.2 license that can be found +in the LICENSE file at https://snek.at/license + + + diff --git a/my-gatsby-site/.env b/examples/my-gatsby-site/.env similarity index 100% rename from my-gatsby-site/.env rename to examples/my-gatsby-site/.env diff --git a/my-gatsby-site/.gitignore b/examples/my-gatsby-site/.gitignore similarity index 100% rename from my-gatsby-site/.gitignore rename to examples/my-gatsby-site/.gitignore diff --git a/my-gatsby-site/README.md b/examples/my-gatsby-site/README.md similarity index 100% rename from my-gatsby-site/README.md rename to examples/my-gatsby-site/README.md diff --git a/my-gatsby-site/gatsby-browser.tsx b/examples/my-gatsby-site/gatsby-browser.tsx similarity index 100% rename from my-gatsby-site/gatsby-browser.tsx rename to examples/my-gatsby-site/gatsby-browser.tsx diff --git a/my-gatsby-site/gatsby-config.ts b/examples/my-gatsby-site/gatsby-config.ts similarity index 100% rename from my-gatsby-site/gatsby-config.ts rename to examples/my-gatsby-site/gatsby-config.ts diff --git a/my-gatsby-site/jaen-data/patches.txt b/examples/my-gatsby-site/jaen-data/patches.txt similarity index 100% rename from my-gatsby-site/jaen-data/patches.txt rename to examples/my-gatsby-site/jaen-data/patches.txt diff --git a/my-gatsby-site/package.json b/examples/my-gatsby-site/package.json similarity index 100% rename from my-gatsby-site/package.json rename to examples/my-gatsby-site/package.json diff --git a/my-gatsby-site/src/favicon.ico b/examples/my-gatsby-site/src/favicon.ico similarity index 100% rename from my-gatsby-site/src/favicon.ico rename to examples/my-gatsby-site/src/favicon.ico diff --git a/my-gatsby-site/src/gatsby-plugin-jaen/components/Layout.tsx b/examples/my-gatsby-site/src/gatsby-plugin-jaen/components/Layout.tsx similarity index 100% rename from my-gatsby-site/src/gatsby-plugin-jaen/components/Layout.tsx rename to examples/my-gatsby-site/src/gatsby-plugin-jaen/components/Layout.tsx diff --git a/my-gatsby-site/src/gatsby-plugin-jaen/components/Logo.tsx b/examples/my-gatsby-site/src/gatsby-plugin-jaen/components/Logo.tsx similarity index 100% rename from my-gatsby-site/src/gatsby-plugin-jaen/components/Logo.tsx rename to examples/my-gatsby-site/src/gatsby-plugin-jaen/components/Logo.tsx diff --git a/my-gatsby-site/src/gatsby-plugin-jaen/components/Toolbar.tsx b/examples/my-gatsby-site/src/gatsby-plugin-jaen/components/Toolbar.tsx similarity index 100% rename from my-gatsby-site/src/gatsby-plugin-jaen/components/Toolbar.tsx rename to examples/my-gatsby-site/src/gatsby-plugin-jaen/components/Toolbar.tsx diff --git a/my-gatsby-site/src/gatsby-plugin-jaen/theme/theme.ts b/examples/my-gatsby-site/src/gatsby-plugin-jaen/theme/theme.ts similarity index 100% rename from my-gatsby-site/src/gatsby-plugin-jaen/theme/theme.ts rename to examples/my-gatsby-site/src/gatsby-plugin-jaen/theme/theme.ts diff --git a/my-gatsby-site/src/images/icon.png b/examples/my-gatsby-site/src/images/icon.png similarity index 100% rename from my-gatsby-site/src/images/icon.png rename to examples/my-gatsby-site/src/images/icon.png diff --git a/my-gatsby-site/src/pages/404.tsx b/examples/my-gatsby-site/src/pages/404.tsx similarity index 100% rename from my-gatsby-site/src/pages/404.tsx rename to examples/my-gatsby-site/src/pages/404.tsx diff --git a/my-gatsby-site/src/pages/auth.tsx b/examples/my-gatsby-site/src/pages/auth.tsx similarity index 100% rename from my-gatsby-site/src/pages/auth.tsx rename to examples/my-gatsby-site/src/pages/auth.tsx diff --git a/my-gatsby-site/src/pages/contact.tsx b/examples/my-gatsby-site/src/pages/contact.tsx similarity index 100% rename from my-gatsby-site/src/pages/contact.tsx rename to examples/my-gatsby-site/src/pages/contact.tsx diff --git a/my-gatsby-site/src/pages/editor.tsx b/examples/my-gatsby-site/src/pages/editor.tsx similarity index 100% rename from my-gatsby-site/src/pages/editor.tsx rename to examples/my-gatsby-site/src/pages/editor.tsx diff --git a/my-gatsby-site/src/pages/hidden-node.tsx b/examples/my-gatsby-site/src/pages/hidden-node.tsx similarity index 100% rename from my-gatsby-site/src/pages/hidden-node.tsx rename to examples/my-gatsby-site/src/pages/hidden-node.tsx diff --git a/my-gatsby-site/src/pages/index.tsx b/examples/my-gatsby-site/src/pages/index.tsx similarity index 100% rename from my-gatsby-site/src/pages/index.tsx rename to examples/my-gatsby-site/src/pages/index.tsx diff --git a/my-gatsby-site/src/pages/mdx.tsx b/examples/my-gatsby-site/src/pages/mdx.tsx similarity index 100% rename from my-gatsby-site/src/pages/mdx.tsx rename to examples/my-gatsby-site/src/pages/mdx.tsx diff --git a/my-gatsby-site/src/pages/section.tsx b/examples/my-gatsby-site/src/pages/section.tsx similarity index 100% rename from my-gatsby-site/src/pages/section.tsx rename to examples/my-gatsby-site/src/pages/section.tsx diff --git a/my-gatsby-site/src/pages/tree.tsx b/examples/my-gatsby-site/src/pages/tree.tsx similarity index 100% rename from my-gatsby-site/src/pages/tree.tsx rename to examples/my-gatsby-site/src/pages/tree.tsx diff --git a/my-gatsby-site/src/pages/user/[...].tsx b/examples/my-gatsby-site/src/pages/user/[...].tsx similarity index 100% rename from my-gatsby-site/src/pages/user/[...].tsx rename to examples/my-gatsby-site/src/pages/user/[...].tsx diff --git a/my-gatsby-site/src/pages/wholesale.tsx b/examples/my-gatsby-site/src/pages/wholesale.tsx similarity index 100% rename from my-gatsby-site/src/pages/wholesale.tsx rename to examples/my-gatsby-site/src/pages/wholesale.tsx diff --git a/my-gatsby-site/src/templates/BlogPage.tsx b/examples/my-gatsby-site/src/templates/BlogPage.tsx similarity index 100% rename from my-gatsby-site/src/templates/BlogPage.tsx rename to examples/my-gatsby-site/src/templates/BlogPage.tsx diff --git a/my-gatsby-site/tsconfig.json b/examples/my-gatsby-site/tsconfig.json similarity index 100% rename from my-gatsby-site/tsconfig.json rename to examples/my-gatsby-site/tsconfig.json diff --git a/my-gatsby-site/yarn-error.log b/examples/my-gatsby-site/yarn-error.log similarity index 100% rename from my-gatsby-site/yarn-error.log rename to examples/my-gatsby-site/yarn-error.log diff --git a/my-gatsby-site/yarn.lock b/examples/my-gatsby-site/yarn.lock similarity index 100% rename from my-gatsby-site/yarn.lock rename to examples/my-gatsby-site/yarn.lock diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000..89c5be33 --- /dev/null +++ b/lerna.json @@ -0,0 +1,5 @@ +{ + "version": "independent", + "npmClient": "yarn", + "useWorkspaces": true +} diff --git a/packages/.DS_Store b/packages/.DS_Store deleted file mode 100644 index 5930b09f..00000000 Binary files a/packages/.DS_Store and /dev/null differ