From a593a4b0f011be2b80d86c16967718ec42da033c Mon Sep 17 00:00:00 2001 From: Sharaf Zaman Date: Wed, 30 Jan 2019 03:06:10 +0530 Subject: [PATCH] Migration from lighttouch-base --- .gitignore | 1 + Readme.md | 65 +++++++++++++++++++ .../3825ab63-c8c0-4152-b286-71f301408fe6 | 7 ++ .../620eb83e-a8cb-4f97-9fbd-8dffd111e74e | 7 ++ .../94cdb493-9326-4dcc-b99f-9c1a4bb23888 | 7 ++ .../c800a360-d198-4a87-877e-b353f7dd0a9d | 4 ++ .../03ff7d93-6865-4c8b-8a4b-0144bd9ee755 | 6 ++ .../47e423cc-1ba5-4d85-9d68-c1afa169f08f | 6 ++ .../4f28d841-4e63-4ba4-8531-212d0425af48 | 5 ++ .../d3562615-c6c9-4a41-8fb9-f39117ed55cd | 4 ++ home-store.txt | 1 + import.scl | 63 ++++++++++++++---- init.lua | 1 + loaders/actions/base.lua | 11 ++++ loaders/classes.lua | 53 +++++++++++++++ loaders/events/base.lua | 19 ++++++ loaders/themes/base.lua | 8 +++ .../homepage-package/actions/send_about.lua | 13 ++++ .../actions/send_homepage.lua | 39 +++++++++++ packages/homepage-package/events.txt | 3 + .../rules/about_requested.lua | 9 +++ .../rules/homepage_requested.lua | 9 +++ .../models/project.scl | 6 ++ .../actions/auth.lua | 22 +++++++ .../actions/generate_auth.lua | 36 ++++++++++ .../actions/get_form.lua | 20 ++++++ .../actions/list_documents.lua | 46 +++++++++++++ .../actions/list_subdocuments.lua | 36 ++++++++++ .../actions/request_document.lua | 57 ++++++++++++++++ .../actions/request_edit.lua | 26 ++++++++ .../actions/witness.lua | 25 +++++++ packages/lighttouch-html-interface/events.txt | 7 ++ .../rules/get_form.lua | 8 +++ .../rules/list_documents.lua | 8 +++ .../rules/list_subdocuments.lua | 10 +++ .../rules/request_document.lua | 9 +++ .../rules/request_edit.lua | 9 +++ .../rules/witness.lua | 11 ++++ .../actions/create_document.lua | 37 +++++++++++ .../actions/get_document.lua | 33 ++++++++++ .../actions/list_documents.lua | 28 ++++++++ .../actions/list_subdocuments.lua | 34 ++++++++++ .../actions/send_404.lua | 12 ++++ .../actions/validate.lua | 24 +++++++ .../disabled_actions.txt | 1 + packages/lighttouch-json-interface/events.txt | 7 ++ .../rules/list_documents.lua | 8 +++ .../rules/list_subdocuments.lua | 10 +++ .../rules/post_document.lua | 7 ++ .../rules/request_document.lua | 9 +++ .../rules/validate.lua | 5 ++ .../actions/log_incoming_request.lua | 10 +++ .../actions/log_incoming_response.lua | 10 +++ .../actions/log_outgoing_request.lua | 10 +++ .../actions/log_outgoing_response.lua | 10 +++ .../actions/request_log.lua | 27 ++++++++ .../actions/setup_content_stores.lua | 11 ++++ .../lighttouch-logging/disabled_actions.txt | 0 packages/lighttouch-logging/events.txt | 1 + .../lighttouch-logging/rules/request_log.lua | 11 ++++ .../send-file-package/actions/send_file.lua | 24 +++++++ packages/send-file-package/events.txt | 1 + packages/send-file-package/models/slide.scl | 15 +++++ .../send-file-package/models/slideshow.scl | 6 ++ .../rules/file_requested.lua | 9 +++ .../div slide_container.txt | 4 ++ .../div width_full_container.txt | 5 ++ .../homepage-slide.html/img slide_image.txt | 2 + .../_style/index.html/div site_content.txt | 3 + .../_style/index.html/div site_header.txt | 2 + .../_style/footer.html/div footer_dummy.txt | 3 + .../chunks/_style/nav.html/li margin_x.txt | 1 + .../chunks/_style/nav.html/nav nav_dummy.txt | 5 ++ .../_style/nav.html/ul horizontal_list.txt | 2 + themes/base-theme/chunks/footer.html | 3 + .../a green_button.txt | 9 +++ .../div big_container.txt | 4 ++ .../div card_container.txt | 6 ++ .../div card_header.txt | 7 ++ .../div center_container.txt | 3 + .../div inline_aligner.txt | 2 + .../li list_border.txt | 2 + .../list_documents_content.html/ul list.txt | 1 + .../list_documents_el.html/a blue_button.txt | 11 ++++ .../div col_container.txt | 4 ++ .../div responsive_display.txt | 6 ++ .../div row_container.txt | 2 + .../list_documents_el.html/div width_md.txt | 1 + .../list_documents_el.html/div width_sm.txt | 1 + .../list_documents_el.html/p bold_font.txt | 2 + .../list_documents_el.html/p padding.txt | 1 + .../h1 title_display.txt | 1 + .../list_document/list_documents_content.html | 36 ++++++++++ .../list_document/list_documents_el.html | 23 +++++++ .../list_document/list_documents_title.html | 3 + themes/base-theme/chunks/list_documents.html | 8 +++ themes/base-theme/chunks/model_form.html | 7 ++ .../button green_button.txt | 9 +++ .../div big_container.txt | 4 ++ .../div card_container.txt | 6 ++ .../div edit_field_container.txt | 7 ++ .../div edit_header.txt | 4 ++ .../div padding_centered.txt | 3 + .../div padding_x_y.txt | 2 + .../div shadow_container.txt | 0 .../model_form_content.html/div width_xl.txt | 1 + .../model_form_content.html/h3 body_title.txt | 3 + .../textarea text_style.txt | 12 ++++ .../div responsive_container.txt | 9 +++ .../input input_field.txt | 14 ++++ .../label field_name.txt | 3 + .../div responsive_container.txt | 9 +++ .../input input_field.txt | 14 ++++ .../label field_name.txt | 3 + .../chunks/model_form/model_form_content.html | 63 ++++++++++++++++++ .../chunks/model_form/model_form_field_1.html | 8 +++ .../chunks/model_form/model_form_field_2.html | 7 ++ themes/base-theme/chunks/nav.html | 9 +++ themes/base-theme/chunks/show_document.html | 7 ++ .../a blue_button.txt | 10 +++ .../a subdocument_title.txt | 6 ++ .../a yellow_button.txt | 10 +++ .../div big_container.txt | 4 ++ .../div body_container.txt | 3 + .../div card_container.txt | 6 ++ .../div card_header.txt | 4 ++ .../div centered_container.txt | 3 + .../div field_group.txt | 7 ++ .../div fields_container.txt | 4 ++ .../div justify_container.txt | 1 + .../h3 body_title.txt | 3 + .../show_document_content.html/ul list.txt | 1 + .../div responsive_field_container.txt | 9 +++ .../label field_name.txt | 3 + .../label field_value.txt | 6 ++ .../sub_document_1.html/a blue_button.txt | 10 +++ .../sub_document_1.html/a document_title.txt | 6 ++ .../div responsive_container.txt | 7 ++ .../sub_document_1.html/div width_sm.txt | 1 + .../span document_name.txt | 6 ++ .../sub_document_2.html/a blue_button.txt | 10 +++ .../div responsive_container.txt | 7 ++ .../sub_document_2.html/div width_sm.txt | 1 + .../span document_name.txt | 6 ++ .../show_document/show_document_content.html | 61 +++++++++++++++++ .../show_document/show_document_field.html | 8 +++ .../chunks/show_document/sub_document_1.html | 16 +++++ .../chunks/show_document/sub_document_2.html | 11 ++++ themes/base-theme/headers/meta.html | 2 + themes/base-theme/headers/styles-basic.html | 4 ++ themes/base-theme/headers/stylesheets.html | 3 + themes/base-theme/homepage-slide.html | 9 +++ themes/base-theme/index.html | 46 +++++++++++++ themes/base-theme/info.yaml | 1 + themes/base-theme/layouts/base.html | 57 ++++++++++++++++ themes/base-theme/stylesheets/fadeshow.css | 1 + torchbear.scl | 15 +++++ 157 files changed, 1758 insertions(+), 14 deletions(-) create mode 100644 Readme.md create mode 100644 content/811332fb-2b80-4e99-950d-3b76f3719e80/3825ab63-c8c0-4152-b286-71f301408fe6 create mode 100644 content/811332fb-2b80-4e99-950d-3b76f3719e80/620eb83e-a8cb-4f97-9fbd-8dffd111e74e create mode 100644 content/811332fb-2b80-4e99-950d-3b76f3719e80/94cdb493-9326-4dcc-b99f-9c1a4bb23888 create mode 100644 content/811332fb-2b80-4e99-950d-3b76f3719e80/c800a360-d198-4a87-877e-b353f7dd0a9d create mode 100644 content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/03ff7d93-6865-4c8b-8a4b-0144bd9ee755 create mode 100644 content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/47e423cc-1ba5-4d85-9d68-c1afa169f08f create mode 100644 content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/4f28d841-4e63-4ba4-8531-212d0425af48 create mode 100644 content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/d3562615-c6c9-4a41-8fb9-f39117ed55cd create mode 100644 home-store.txt create mode 100644 loaders/actions/base.lua create mode 100644 loaders/classes.lua create mode 100644 loaders/events/base.lua create mode 100644 loaders/themes/base.lua create mode 100644 packages/homepage-package/actions/send_about.lua create mode 100644 packages/homepage-package/actions/send_homepage.lua create mode 100644 packages/homepage-package/events.txt create mode 100644 packages/homepage-package/rules/about_requested.lua create mode 100644 packages/homepage-package/rules/homepage_requested.lua create mode 100644 packages/lighttouch-change-management/models/project.scl create mode 100644 packages/lighttouch-html-interface/actions/auth.lua create mode 100644 packages/lighttouch-html-interface/actions/generate_auth.lua create mode 100644 packages/lighttouch-html-interface/actions/get_form.lua create mode 100644 packages/lighttouch-html-interface/actions/list_documents.lua create mode 100644 packages/lighttouch-html-interface/actions/list_subdocuments.lua create mode 100644 packages/lighttouch-html-interface/actions/request_document.lua create mode 100644 packages/lighttouch-html-interface/actions/request_edit.lua create mode 100644 packages/lighttouch-html-interface/actions/witness.lua create mode 100644 packages/lighttouch-html-interface/events.txt create mode 100644 packages/lighttouch-html-interface/rules/get_form.lua create mode 100644 packages/lighttouch-html-interface/rules/list_documents.lua create mode 100644 packages/lighttouch-html-interface/rules/list_subdocuments.lua create mode 100644 packages/lighttouch-html-interface/rules/request_document.lua create mode 100644 packages/lighttouch-html-interface/rules/request_edit.lua create mode 100644 packages/lighttouch-html-interface/rules/witness.lua create mode 100644 packages/lighttouch-json-interface/actions/create_document.lua create mode 100644 packages/lighttouch-json-interface/actions/get_document.lua create mode 100644 packages/lighttouch-json-interface/actions/list_documents.lua create mode 100644 packages/lighttouch-json-interface/actions/list_subdocuments.lua create mode 100644 packages/lighttouch-json-interface/actions/send_404.lua create mode 100644 packages/lighttouch-json-interface/actions/validate.lua create mode 100644 packages/lighttouch-json-interface/disabled_actions.txt create mode 100644 packages/lighttouch-json-interface/events.txt create mode 100644 packages/lighttouch-json-interface/rules/list_documents.lua create mode 100644 packages/lighttouch-json-interface/rules/list_subdocuments.lua create mode 100644 packages/lighttouch-json-interface/rules/post_document.lua create mode 100644 packages/lighttouch-json-interface/rules/request_document.lua create mode 100644 packages/lighttouch-json-interface/rules/validate.lua create mode 100644 packages/lighttouch-logging/actions/log_incoming_request.lua create mode 100644 packages/lighttouch-logging/actions/log_incoming_response.lua create mode 100644 packages/lighttouch-logging/actions/log_outgoing_request.lua create mode 100644 packages/lighttouch-logging/actions/log_outgoing_response.lua create mode 100644 packages/lighttouch-logging/actions/request_log.lua create mode 100644 packages/lighttouch-logging/actions/setup_content_stores.lua create mode 100644 packages/lighttouch-logging/disabled_actions.txt create mode 100644 packages/lighttouch-logging/events.txt create mode 100644 packages/lighttouch-logging/rules/request_log.lua create mode 100644 packages/send-file-package/actions/send_file.lua create mode 100644 packages/send-file-package/events.txt create mode 100644 packages/send-file-package/models/slide.scl create mode 100644 packages/send-file-package/models/slideshow.scl create mode 100644 packages/send-file-package/rules/file_requested.lua create mode 100644 themes/base-theme/_style/homepage-slide.html/div slide_container.txt create mode 100644 themes/base-theme/_style/homepage-slide.html/div width_full_container.txt create mode 100644 themes/base-theme/_style/homepage-slide.html/img slide_image.txt create mode 100644 themes/base-theme/_style/index.html/div site_content.txt create mode 100644 themes/base-theme/_style/index.html/div site_header.txt create mode 100644 themes/base-theme/chunks/_style/footer.html/div footer_dummy.txt create mode 100644 themes/base-theme/chunks/_style/nav.html/li margin_x.txt create mode 100644 themes/base-theme/chunks/_style/nav.html/nav nav_dummy.txt create mode 100644 themes/base-theme/chunks/_style/nav.html/ul horizontal_list.txt create mode 100644 themes/base-theme/chunks/footer.html create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/a green_button.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/div big_container.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_container.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_header.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/div center_container.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/div inline_aligner.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/li list_border.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_content.html/ul list.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/a blue_button.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/div col_container.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/div responsive_display.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/div row_container.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_md.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_sm.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/p bold_font.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_el.html/p padding.txt create mode 100644 themes/base-theme/chunks/list_document/_style/list_documents_title.html/h1 title_display.txt create mode 100644 themes/base-theme/chunks/list_document/list_documents_content.html create mode 100644 themes/base-theme/chunks/list_document/list_documents_el.html create mode 100644 themes/base-theme/chunks/list_document/list_documents_title.html create mode 100644 themes/base-theme/chunks/list_documents.html create mode 100644 themes/base-theme/chunks/model_form.html create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/button green_button.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div big_container.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div card_container.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_field_container.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_header.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_centered.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_x_y.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div shadow_container.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/div width_xl.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/h3 body_title.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_content.html/textarea text_style.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_field_1.html/div responsive_container.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_field_1.html/input input_field.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_field_1.html/label field_name.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_field_2.html/div responsive_container.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_field_2.html/input input_field.txt create mode 100644 themes/base-theme/chunks/model_form/_style/model_form_field_2.html/label field_name.txt create mode 100644 themes/base-theme/chunks/model_form/model_form_content.html create mode 100644 themes/base-theme/chunks/model_form/model_form_field_1.html create mode 100644 themes/base-theme/chunks/model_form/model_form_field_2.html create mode 100644 themes/base-theme/chunks/nav.html create mode 100644 themes/base-theme/chunks/show_document.html create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/a blue_button.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/a subdocument_title.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/a yellow_button.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div big_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div body_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_header.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div centered_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div field_group.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div fields_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/div justify_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/h3 body_title.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_content.html/ul list.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_field.html/div responsive_field_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_name.txt create mode 100644 themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_value.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_1.html/a blue_button.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_1.html/a document_title.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_1.html/div responsive_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_1.html/div width_sm.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_1.html/span document_name.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_2.html/a blue_button.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_2.html/div responsive_container.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_2.html/div width_sm.txt create mode 100644 themes/base-theme/chunks/show_document/_style/sub_document_2.html/span document_name.txt create mode 100644 themes/base-theme/chunks/show_document/show_document_content.html create mode 100644 themes/base-theme/chunks/show_document/show_document_field.html create mode 100644 themes/base-theme/chunks/show_document/sub_document_1.html create mode 100644 themes/base-theme/chunks/show_document/sub_document_2.html create mode 100644 themes/base-theme/headers/meta.html create mode 100644 themes/base-theme/headers/styles-basic.html create mode 100644 themes/base-theme/headers/stylesheets.html create mode 100644 themes/base-theme/homepage-slide.html create mode 100644 themes/base-theme/index.html create mode 100644 themes/base-theme/info.yaml create mode 100644 themes/base-theme/layouts/base.html create mode 100644 themes/base-theme/stylesheets/fadeshow.css create mode 100644 torchbear.scl diff --git a/.gitignore b/.gitignore index ad54090..56fc422 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /.mp /contentdb /third-party +/log diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..0550787 --- /dev/null +++ b/Readme.md @@ -0,0 +1,65 @@ +

lighttouch logo
This Project is Currently in Stealth Mode.
please do not post a news story until v0.1 is released very shortly.
thank you.

+ +

+ Contributions Welcome + Chat +

+ +Lighttouch is a framework that makes complex application development simpler. It does this through broad use of [component-oriented design](https://en.wikipedia.org/wiki/Component-based_software_engineering) intended to offer programmers a well-researched alternative to starting with a blank canvas - "put your code anywhere". + +[Code organized](https://en.wikipedia.org/wiki/Structured_programming) this way is: +- easier to program +- unlimited in its reusability of implementations +- easier to extend with other developers' plugins +- possible to socially cross-pollenate diverse and complex applications +- possible to use as a base for [visual programming environments](https://en.wikipedia.org/wiki/Visual_programming_language) + +Without this, applications tend to: +- get walled into handling only a single use case +- grow, but at huge cost and pain while extending +- repetively [make messy mistakes](https://news.ycombinator.com/item?id=18443327), like [spaghetti code](http://wiki.c2.com/?SpaghettiCode) and [code duplication](http://wiki.c2.com/?DuplicatedCode) +- suffer too many layers of abstraction + +Below you'll learn what is ECA-Rules, but to begin let's start with a simple diagram from the [Drupal Rules module](https://drupal.org/project/rules), a project which greatly influenced this one. + +ECA-Rules diagram + +### Lighttouch Packages + +Packages are Lighttouch's main unit of addon functionality. They leverage [event-driven](https://en.wikipedia.org/wiki/Event-driven_programming), [rule-based](https://en.wikipedia.org/wiki/Rule-based_system) programming. This basically means that packages have actions, events, and rules. Events are like [hooks](https://stackoverflow.com/questions/467557/what-is-meant-by-the-term-hook-in-programming) where additional logic can run. Rules check a conditional statement of any complexity and trigger events. When an event triggers, its actions run in weight order. Actions are the individual mechanisms of additional functionality that have a distilled purpose and can run on any associated event. + +80% of this functionality builds on top of [Luvent: A Simple Event Library for Lua](https://github.com/ejmr/Luvent). You could probably get away with the summary below of Lighttouch's use of its API, but it's still worth checking out. It has a great Readme. The basic difference between what Luvent does and what Lighttouch does is that while writing a Lighttouch app, you put functionality into individual files, and Lighttouch sets everything up for you. + +Events are very simple. They get loaded into a global list by reading each package's `events.txt` file. They can be disabled in a `disabled_events.txt` file. (aside: Potential improvements include a simpler interface and ordering execution by weight.) + +Rules are basically an `IF` statement with some metadata. If the configured conditions, specified in the body of a rule as Lua code are `TRUE`, then the specified events will trigger and the objects specified in the input parameters will get passed to the attached actions. + +Actions are individual, [lazy loaded functions](https://whatis.techtarget.com/definition/lazy-loading-dynamic-function-loading) that can run where they are needed. You simply code what you want to do, and leave the parts about when it will run and in what order to the other logic connected through the yaml header. Actions should not have conditions in them. + +### Core Modules (including third-party) + +Lighttouch also provides modules for content management, robust logging, syntax sugar, and more. These core modules + loaders mentioned for packages + and init script make up [Lighttouch Base](https://github.com/foundpatterns/lighttouch-base), which has: +- Packaged ECA-Rules Loaders: described above +- Content Module: file-based, document-oriented databases (see Grav) with data models in YAML, similar to JSON Schema (content types), and validation +- Logging: automatically setup out of the box (set log level in `config.toml`, default is `INFO`) +- ... + +### Packages + +- Lighttouch Web Logging: (for web automation) log every incoming request, outgoing response, outgoing request, and incoming response (server and client logging out of the box.. makes debugging web applications much easier) to log directory (log entries are content, btw) +- Lighttouch JSON Interface: REST API built on content module +- Lighttouch HTTP Interface: form-driven content entry mechanism, username:password protected (autogenerated at each initialization) +- Lighttouch Crypto Tools: setup a profile with cryptographic signing keys for yourself and friends to verify incoming responses and requests, and sign outgoing requests and responses + and more + +### Installation + +Lightouch has 3 dependencies: +* **[torchbear](https://github.com/foundpatterns/torchbear)** (an [application framework](https://stackoverflow.com/questions/4241919/what-is-meant-by-application-framework)) +* **[git](https://git-scm.com)** (a [version control manager](https://en.wikipedia.org/wiki/Version_control)) +* **[peru](https://github.com/buildinspace/peru)** (a [package manager](https://en.wikipedia.org/wiki/Package_manager)) + +Once these are installed, clone the repo with git, run `peru sync` to install its components, and run it with `torchbear`. To update, use `git pull` and `peru reup`. + +### Developing + +To modify any functionality in Lighttouch, create a git repo outside of it for the component your are modifying, and add an override in `peru.yaml` so that it will use that source directory. For example, to modify `lightouch-base`, clone it somewhere else, then run `peru override add lighttouch-base {{ path to lighttouch-base repo }}`. Then, after making each change to the source, run `peru sync` to update your Lighttouch. diff --git a/content/811332fb-2b80-4e99-950d-3b76f3719e80/3825ab63-c8c0-4152-b286-71f301408fe6 b/content/811332fb-2b80-4e99-950d-3b76f3719e80/3825ab63-c8c0-4152-b286-71f301408fe6 new file mode 100644 index 0000000..9509cb1 --- /dev/null +++ b/content/811332fb-2b80-4e99-950d-3b76f3719e80/3825ab63-c8c0-4152-b286-71f301408fe6 @@ -0,0 +1,7 @@ +--- +title = "Fast" +model = "slide" +slideshow = "c800a360-d198-4a87-877e-b353f7dd0a9d" +image-address = "http://unsplash.com/photos/CpkOjOcXdUY/download?force=true" +weight = 1 +... diff --git a/content/811332fb-2b80-4e99-950d-3b76f3719e80/620eb83e-a8cb-4f97-9fbd-8dffd111e74e b/content/811332fb-2b80-4e99-950d-3b76f3719e80/620eb83e-a8cb-4f97-9fbd-8dffd111e74e new file mode 100644 index 0000000..daefff7 --- /dev/null +++ b/content/811332fb-2b80-4e99-950d-3b76f3719e80/620eb83e-a8cb-4f97-9fbd-8dffd111e74e @@ -0,0 +1,7 @@ +--- +title = "Simple" +model = "slide" +slideshow = "c800a360-d198-4a87-877e-b353f7dd0a9d" +image-address = "http://unsplash.com/photos/x2Tmfd1-SgA/download?force=true" +weight = 2 +... diff --git a/content/811332fb-2b80-4e99-950d-3b76f3719e80/94cdb493-9326-4dcc-b99f-9c1a4bb23888 b/content/811332fb-2b80-4e99-950d-3b76f3719e80/94cdb493-9326-4dcc-b99f-9c1a4bb23888 new file mode 100644 index 0000000..bf37fd3 --- /dev/null +++ b/content/811332fb-2b80-4e99-950d-3b76f3719e80/94cdb493-9326-4dcc-b99f-9c1a4bb23888 @@ -0,0 +1,7 @@ +--- +title = "Powerful" +model = "slide" +slideshow = "c800a360-d198-4a87-877e-b353f7dd0a9d" +image-address = "http://unsplash.com/photos/pqvp1P7re-w/download?force=true" +weight = 3 +... diff --git a/content/811332fb-2b80-4e99-950d-3b76f3719e80/c800a360-d198-4a87-877e-b353f7dd0a9d b/content/811332fb-2b80-4e99-950d-3b76f3719e80/c800a360-d198-4a87-877e-b353f7dd0a9d new file mode 100644 index 0000000..50795af --- /dev/null +++ b/content/811332fb-2b80-4e99-950d-3b76f3719e80/c800a360-d198-4a87-877e-b353f7dd0a9d @@ -0,0 +1,4 @@ +--- +title = "Found Patterns Introduction" +model = "slideshow" +... diff --git a/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/03ff7d93-6865-4c8b-8a4b-0144bd9ee755 b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/03ff7d93-6865-4c8b-8a4b-0144bd9ee755 new file mode 100644 index 0000000..a5c1594 --- /dev/null +++ b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/03ff7d93-6865-4c8b-8a4b-0144bd9ee755 @@ -0,0 +1,6 @@ +--- +model = "key" +kind = "sign_private" +profile = "d3562615-c6c9-4a41-8fb9-f39117ed55cd" +... ++qEY1pRSYy7gTfJ58GLrDQTuhgiTf49Cy9yEgvix3vHGkq2b5t55E36RPtVYgnTn+2SF0Of8nEeVOyTvcvlnnQ== diff --git a/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/47e423cc-1ba5-4d85-9d68-c1afa169f08f b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/47e423cc-1ba5-4d85-9d68-c1afa169f08f new file mode 100644 index 0000000..aa630d5 --- /dev/null +++ b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/47e423cc-1ba5-4d85-9d68-c1afa169f08f @@ -0,0 +1,6 @@ +--- +model = "key" +kind = "sign_public" +profile = "d3562615-c6c9-4a41-8fb9-f39117ed55cd" +... +xpKtm+beeRN+kT7VWIJ05/tkhdDn/JxHlTsk73L5Z50= diff --git a/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/4f28d841-4e63-4ba4-8531-212d0425af48 b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/4f28d841-4e63-4ba4-8531-212d0425af48 new file mode 100644 index 0000000..87f686d --- /dev/null +++ b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/4f28d841-4e63-4ba4-8531-212d0425af48 @@ -0,0 +1,5 @@ +--- +host = "http://foundpatterns.com:3000/" +model = "place" +profile = "d3562615-c6c9-4a41-8fb9-f39117ed55cd" +... diff --git a/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/d3562615-c6c9-4a41-8fb9-f39117ed55cd b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/d3562615-c6c9-4a41-8fb9-f39117ed55cd new file mode 100644 index 0000000..47f4a44 --- /dev/null +++ b/content/d3562615-c6c9-4a41-8fb9-f39117ed55cd/d3562615-c6c9-4a41-8fb9-f39117ed55cd @@ -0,0 +1,4 @@ +--- +model = "profile" +name = "foundpatterns" +... diff --git a/home-store.txt b/home-store.txt new file mode 100644 index 0000000..013db87 --- /dev/null +++ b/home-store.txt @@ -0,0 +1 @@ +0382e080-dd03-46e2-9610-115b72b3af27 \ No newline at end of file diff --git a/import.scl b/import.scl index 5b64bd6..891b1e7 100644 --- a/import.scl +++ b/import.scl @@ -1,30 +1,65 @@ imports = { - luvent = "third-party/", - valua = "third-party/", - torchbear-libs = "third-party/", - contentdb-lua = "contentdb", - torchbear-libs-dev = "third-party/", + lighttouch-logging = "packages/lighttouch-logging", + lighttouch-json-interface = "packages/lighttouch-json-interface", + lighttouch-html-interface = "packages/lighttouch-html-interface", + homepage-package = "packages/homepage-package", + base-theme = "themes/base-theme", + send-file-package = "packages/send-file-package", + lighttouch-change-management = "packages/lighttouch-change-management", + luvent = "third-party/", + valua = "third-party/", + torchbear-libs = "third-party/", + contentdb-lua = "contentdb", + torchbear-libs-dev = "third-party/", } torchbear-libs = { - url = "https://github.com/foundpatterns/torchbear-libs", - repo = true, + url = "https://github.com/foundpatterns/torchbear-libs", + repo = true, } torchbear-libs-dev = { - url = "https://github.com/foundpatterns/torchbear-libs-dev", - repo = true, + url = "https://github.com/foundpatterns/torchbear-libs-dev", + repo = true, } luvent = { - url = "https://github.com/ejmr/Luvent", - export = "src" + url = "https://github.com/ejmr/Luvent", + export = "src" } valua = { - url = "https://github.com/sailorproject/valua", - pluck = "valua.lua", + url = "https://github.com/sailorproject/valua", + pluck = "valua.lua", } contentdb-lua = { - url = "https://github.com/foundpatterns/contentdb.lua", + url = "https://github.com/foundpatterns/contentdb-lua", +} + +lighttouch-logging = { + url = "https://github.com/foundpatterns/lighttouch-logging", +} + +lighttouch-json-interface = { + url = "https://github.com/foundpatterns/lighttouch-json-interface", +} + +lighttouch-html-interface = { + url = "https://github.com/foundpatterns/lighttouch-html-interface", +} + +homepage-package = { + url = "https://github.com/foundpatterns/homepage-package", +} + +base-theme = { + url = "https://github.com/foundpatterns/base-theme", +} + +send-file-package = { + url = "https://github.com/foundpatterns/send-file-package", +} + +lighttouch-change-management = { + url = "https://github.com/foundpatterns/lighttouch-change-management", } diff --git a/init.lua b/init.lua index 293563f..506de9c 100644 --- a/init.lua +++ b/init.lua @@ -1,3 +1,4 @@ +#!/usr/bin/env torchbear -- Lighttouch ยท Torchbear App -- this config must be before requires diff --git a/loaders/actions/base.lua b/loaders/actions/base.lua new file mode 100644 index 0000000..9ec6eaa --- /dev/null +++ b/loaders/actions/base.lua @@ -0,0 +1,11 @@ +actions_loader = { } + +require("loaders.actions.mod") + +default_package_searchers2 = package.searchers[2] +package.searchers[2] = actions_loader.custom_require +-- actions requiring +-- runs the function against all packages in packages_path +each(fs.directory_list(_G.packages_path), actions_loader.create_actions) + +return actions_loader \ No newline at end of file diff --git a/loaders/classes.lua b/loaders/classes.lua new file mode 100644 index 0000000..5fb582f --- /dev/null +++ b/loaders/classes.lua @@ -0,0 +1,53 @@ +local function load_classes (themes) + for _, theme in pairs(themes) do + log.trace("Loading classes in theme " .. theme.name) + + for class_filename, classes in pairs(theme.files) do + --local pattern = "^(.+/)_class/(.+%.%w+)%-(.+)%.txt$" + --local dir, basename, elem = class_filename:match(pattern) + + local pattern = [[^((?:.+/)?)_class/(.+\.\w+)/(.+)\.txt$]] + local regex_object = regex.new(pattern) + local matches = regex_object:capture(class_filename) + + -- If current file is a class file + if matches then + log.trace("Processing class file " .. class_filename) + + local dir, basename, elem = matches:get(1), matches:get(2), matches:get(3) + + local filename = basename + if dir ~= "" then + filename = dir .. basename + end + + local content = theme.files[filename] + + -- Execute the sustitution + if content then + + -- Either an id or just a tag name + if elem:sub(1,1) == "#" then + local id = elem:sub(2, -1) + content = string.gsub(content, + "<([^>]*%sid=\"" .. id .. "\"[^>]*)>", + "<%1 class=\"\n" .. classes .. "\">" + ) + else + -- This *maaay* break if a tag name contains another tag name at the beggining + content = string.gsub(content, + "<(" .. elem .. "[^>]*)>", + "<%1 class=\"\n" .. classes .. "\">" + ) + end + + theme.files[filename] = content + else + log.error("File " .. filename .. " not found") + end + end + end + end +end + +themes_loader.add_preprocessor(load_classes) diff --git a/loaders/events/base.lua b/loaders/events/base.lua new file mode 100644 index 0000000..c23b2ae --- /dev/null +++ b/loaders/events/base.lua @@ -0,0 +1,19 @@ +events_loader = { } + +require("loaders.events.mod") + +events_loader.create_base_events() + +-- Loop over each package, parse its events, and create any not seen before + +each( + fs.directory_list(_G.packages_path), + function (package_name) + local package_path = _G.packages_path .. "/" .. package_name .. "/" + local events_strings = events_loader.parse_events_list(package_name) + events_loader.create_events( #events_strings, events_strings ) + events_loader.read_disabled_actions(package_path) + end +) + +return events_loader diff --git a/loaders/themes/base.lua b/loaders/themes/base.lua new file mode 100644 index 0000000..e4a09df --- /dev/null +++ b/loaders/themes/base.lua @@ -0,0 +1,8 @@ +themes = {} +themes_loader = { + preprocessors = {} +} + +require("loaders.themes.mod") + +return themes_loader \ No newline at end of file diff --git a/packages/homepage-package/actions/send_about.lua b/packages/homepage-package/actions/send_about.lua new file mode 100644 index 0000000..cfa4448 --- /dev/null +++ b/packages/homepage-package/actions/send_about.lua @@ -0,0 +1,13 @@ +event = ["about_requested"] +priority = 1 +input_parameters = ["request"] + +local about = fs.read_file("about.md") + +return { + status = 200, + headers = { + ["content-type"] = "text/html", + }, + body = markdown_to_html(about) +} diff --git a/packages/homepage-package/actions/send_homepage.lua b/packages/homepage-package/actions/send_homepage.lua new file mode 100644 index 0000000..b3ebca5 --- /dev/null +++ b/packages/homepage-package/actions/send_homepage.lua @@ -0,0 +1,39 @@ +event = ["homepage_requested"] +priority = 1 +input_parameters = ["request"] + +local slideshow_id = torchbear.settings.slideshow +local slideshow_fields = content.read_document(slideshow_id) + +local slide_weights = {} + +content.walk_documents(nil, function (slide_id, fields, body) + if fields.model == "slide" and fields.slideshow == slideshow_id then + table.insert(slide_weights, { + content = render(torchbear.settings.theme .. "/homepage-slide.html", { + img = fields["image-address"], + title = fields.title, + body = body, + }), + weight = fields.weight or math.maxinteger, + }) + end +end) + +table.sort(slide_weights, function (a, b) return a.weight < b.weight end) +local slides = map(slide_weights, function (it) return it.content end) + +local homepage = render(torchbear.settings.theme .. "/index.html", { + SITE_URL = "/", + SITENAME = torchbear.settings.sitename, + articles = {}, + slides = slides, +}) + +return { + status = 200, + headers = { + ["content-type"] = "text/html", + }, + body = homepage +} diff --git a/packages/homepage-package/events.txt b/packages/homepage-package/events.txt new file mode 100644 index 0000000..c49db98 --- /dev/null +++ b/packages/homepage-package/events.txt @@ -0,0 +1,3 @@ +homepage_requested +about_requested + diff --git a/packages/homepage-package/rules/about_requested.lua b/packages/homepage-package/rules/about_requested.lua new file mode 100644 index 0000000..eb8806e --- /dev/null +++ b/packages/homepage-package/rules/about_requested.lua @@ -0,0 +1,9 @@ +priority = 1 +input_parameter = "request" +events_table = ["about_requested"] + +request.method == "GET" +and +#request.path_segments == 0 +and +request.query.about diff --git a/packages/homepage-package/rules/homepage_requested.lua b/packages/homepage-package/rules/homepage_requested.lua new file mode 100644 index 0000000..c861146 --- /dev/null +++ b/packages/homepage-package/rules/homepage_requested.lua @@ -0,0 +1,9 @@ +priority = 1 +input_parameter = "request" +events_table = ["homepage_requested"] + +request.method == "GET" +and +#request.path_segments == 0 +and +count_pairs(request.query) == 0 diff --git a/packages/lighttouch-change-management/models/project.scl b/packages/lighttouch-change-management/models/project.scl new file mode 100644 index 0000000..9e04ba2 --- /dev/null +++ b/packages/lighttouch-change-management/models/project.scl @@ -0,0 +1,6 @@ +description = "Project" +fields = { + name = { + type = "string" + } +} diff --git a/packages/lighttouch-html-interface/actions/auth.lua b/packages/lighttouch-html-interface/actions/auth.lua new file mode 100644 index 0000000..3a87222 --- /dev/null +++ b/packages/lighttouch-html-interface/actions/auth.lua @@ -0,0 +1,22 @@ +event = ["http_auth"] +priority = 50 +input_parameters = ["request"] + +-- https://tools.ietf.org/html/rfc7617 + +if request.headers["authorization"] then + local parts = request.headers["authorization"]:split(" ") + if parts[1] == "Basic" and parts[2] == auth_tokens.cred then + -- Stop here to not fail the request + return + end +end + +request.forbidden = true +return { + status = 401, + headers = { + ["WWW-Authenticate"] = 'Basic realm="' .. auth_tokens.realm .. '"' + }, + body = "" +} diff --git a/packages/lighttouch-html-interface/actions/generate_auth.lua b/packages/lighttouch-html-interface/actions/generate_auth.lua new file mode 100644 index 0000000..1751522 --- /dev/null +++ b/packages/lighttouch-html-interface/actions/generate_auth.lua @@ -0,0 +1,36 @@ +event = ["lighttouch_loaded"] +priority = 50 +input_parameters = [] + +-- https://tools.ietf.org/html/rfc7617 + +local function generate (length) + length = length or 4 + local letters = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"} + local str = "" + for i = 1, length do + str = str .. letters[math.random(1, #letters)] + end + return str +end + +local user = torchbear.settings.user +local pwd = torchbear.settings.password + +if not user or not pwd then + log.warn("No user or password specified in settings.") + + user = generate() + pwd = generate() + + log.info("Default credentials:") + log.info("\tuser: " .. user) + log.info("\tpassword: " .. pwd) +end + +_G.auth_tokens = { + realm = torchbear.settings.sitename or ("Lighttouch App " .. generate()), + user = user, + pwd = pwd, + cred = to_base64(user .. ":" .. pwd) +} diff --git a/packages/lighttouch-html-interface/actions/get_form.lua b/packages/lighttouch-html-interface/actions/get_form.lua new file mode 100644 index 0000000..371486a --- /dev/null +++ b/packages/lighttouch-html-interface/actions/get_form.lua @@ -0,0 +1,20 @@ +event = ["get_document_form"] +priority = 1 +input_parameters = ["request"] + +if request.forbidden then return end + +local model_name = request.path_segments[1] +local model = models[model_name] + +return { + headers = { + ["content-type"] = "text/html" + }, + body = render(torchbear.settings.theme .. "/chunks/model_form.html", { + SITENAME = torchbear.settings.sitename, + TITLE = "New " .. model_name:capitalize(), + model_name = model_name, + model = model + }) +} diff --git a/packages/lighttouch-html-interface/actions/list_documents.lua b/packages/lighttouch-html-interface/actions/list_documents.lua new file mode 100644 index 0000000..0c13ae3 --- /dev/null +++ b/packages/lighttouch-html-interface/actions/list_documents.lua @@ -0,0 +1,46 @@ +event = ["list_documents_html"] +priority = 1 +input_parameters = ["request"] + + +-- GET /[type] +local model_name = request.path_segments[1] + +local documents = {} + +contentdb.walk_documents(nil, + function (file_uuid, fields, body, store) + if fields.model ~= model_name then return end + + -- Filter the documents using the query params + for k, v in pairs(request.query) do + if fields[k] ~= v then + -- Don't add this document to the list + return + end + end + + table.insert(documents, { + name = fields.name or fields.title, + uuid = file_uuid, + store = store + }) + end +) + +-- TODO: Use the rest of the query or update the way it works +-- Each query parameter specifies what a document field must have + +if #documents == 0 then documents = nil end + +return { + headers = { + ["content-type"] = "text/html", + }, + body = render(torchbear.settings.theme .. "/chunks/list_documents.html", { + SITENAME = torchbear.settings.sitename, + TITLE = model_name:capitalize(), + model = model_name, + documents = documents + }) +} diff --git a/packages/lighttouch-html-interface/actions/list_subdocuments.lua b/packages/lighttouch-html-interface/actions/list_subdocuments.lua new file mode 100644 index 0000000..6688509 --- /dev/null +++ b/packages/lighttouch-html-interface/actions/list_subdocuments.lua @@ -0,0 +1,36 @@ +event = ["list_subdocuments_html"] +priority = 1 +input_parameters = ["request"] + + +-- GET /[type] +local base_model = request.path_segments[1] +local document_uuid = request.path_segments[2] +local model_name = request.path_segments[3] + +local documents = {} + +contentdb.walk_documents(nil, function (doc_id, fields, body, store) + if fields.model ~= model_name then return end + if fields[base_model] == document_uuid then + table.insert(documents, { + name = fields.name or fields.title, + uuid = doc_id, + store = store + }) + end +end) + + +if #documents == 0 then documents = nil end + +return { + headers = { + ["content-type"] = "text/html", + }, + body = render(torchbear.settings.theme .. "/chunks/list_documents.html", { + title = model_name:capitalize() .. " for " .. document_uuid, + model = model_name, + documents = documents + }) +} diff --git a/packages/lighttouch-html-interface/actions/request_document.lua b/packages/lighttouch-html-interface/actions/request_document.lua new file mode 100644 index 0000000..88c8293 --- /dev/null +++ b/packages/lighttouch-html-interface/actions/request_document.lua @@ -0,0 +1,57 @@ +event = ["request_document_html"] +priority = 1 +input_parameters = ["request"] + + +-- GET /[type]/[uuid] +local model_name, id = request.path_segments[1], request.path_segments[2] + +local fields, body, store = contentdb.read_document(id) +if not fields then + return { + headers = { ["content-type"] = "application/json" }, + body = json.from_table({msg="Document not found"}) + } +end + +if fields.model ~= model_name then + return { + headers = { ["content-type"] = "application/json" }, + body = json.from_table({msg="Document is not of model " .. model_name}) + } +end + +local subdocuments = {} + +contentdb.walk_documents(nil, function (doc_id, fields, body, store) + if fields[model_name] == id then + + local docs = subdocuments[fields.model] + if not docs then + docs = {} + subdocuments[fields.model] = docs + end + + table.insert(docs, { + name = fields.name or fields.title, + uuid = doc_id, + store = store + }) + end +end) + +if count_pairs(subdocuments) == 0 then subdocuments = nil end + +return { + headers = { ["content-type"] = "text/html" }, + body = render(torchbear.settings.theme .. "/chunks/show_document.html", { + SITENAME = torchbear.settings.sitename, + TITLE = model_name:capitalize() .. " " .. id, + model = model_name, + id = id, + store = store, + fields = fields, + body = body, + subdocuments = subdocuments, + }) +} diff --git a/packages/lighttouch-html-interface/actions/request_edit.lua b/packages/lighttouch-html-interface/actions/request_edit.lua new file mode 100644 index 0000000..0d7eec7 --- /dev/null +++ b/packages/lighttouch-html-interface/actions/request_edit.lua @@ -0,0 +1,26 @@ +event = ["request_document_edit_form"] +priority = 1 +input_parameters = ["request"] + +if request.forbidden then return end + +local model_name, id = request.path_segments[1], request.path_segments[2] +local model = models[model_name] +local fields, body, store = contentdb.read_document(id) + +return { + headers = { + ["content-type"] = "text/html" + }, + body = render(torchbear.settings.theme .. "/chunks/model_form.html", { + SITENAME = torchbear.settings.sitename, + TITLE = "Edit " .. model_name:capitalize() .. " " .. id, + model_name = model_name, + model = model, + + id = id, + fields = fields, + body = body, + store = store, + }) +} diff --git a/packages/lighttouch-html-interface/actions/witness.lua b/packages/lighttouch-html-interface/actions/witness.lua new file mode 100644 index 0000000..d0fab74 --- /dev/null +++ b/packages/lighttouch-html-interface/actions/witness.lua @@ -0,0 +1,25 @@ +event = ["witness_html"] +priority = 50 +input_parameters = ["request"] + +-- https://tools.ietf.org/html/rfc7617 + +local document_id = request.query.witness +local witness_id, err = keys.witness_document(document_id) +if witness_id then + return { + status = 303, + headers = { + location = "/witness/" .. witness_id + }, + body = "" + } +else + return { + status = 404, + headers = { + ["content-type"] = "text/html" + }, + body = "" .. err .. "" + } +end diff --git a/packages/lighttouch-html-interface/events.txt b/packages/lighttouch-html-interface/events.txt new file mode 100644 index 0000000..93e3802 --- /dev/null +++ b/packages/lighttouch-html-interface/events.txt @@ -0,0 +1,7 @@ +get_document_form +request_document_html +request_document_edit_form +list_documents_html +list_subdocuments_html +witness_html +http_auth \ No newline at end of file diff --git a/packages/lighttouch-html-interface/rules/get_form.lua b/packages/lighttouch-html-interface/rules/get_form.lua new file mode 100644 index 0000000..7b0178f --- /dev/null +++ b/packages/lighttouch-html-interface/rules/get_form.lua @@ -0,0 +1,8 @@ +priority = 2 +input_parameter = "request" +events_table = ["get_document_form", "http_auth"] + +request.method == "GET" +and #request.path_segments == 2 +and models[request.path_segments[1]] +and request.path_segments[2] == "new" diff --git a/packages/lighttouch-html-interface/rules/list_documents.lua b/packages/lighttouch-html-interface/rules/list_documents.lua new file mode 100644 index 0000000..2a9e62d --- /dev/null +++ b/packages/lighttouch-html-interface/rules/list_documents.lua @@ -0,0 +1,8 @@ +priority = 3 +input_parameter = "request" +events_table = ["list_documents_html"] + +request.method == "GET" +and #request.path_segments == 1 +and models[request.path_segments[1]] +and request.headers["accept"]:match("html") diff --git a/packages/lighttouch-html-interface/rules/list_subdocuments.lua b/packages/lighttouch-html-interface/rules/list_subdocuments.lua new file mode 100644 index 0000000..6ba8466 --- /dev/null +++ b/packages/lighttouch-html-interface/rules/list_subdocuments.lua @@ -0,0 +1,10 @@ +priority = 3 +input_parameter = "request" +events_table = ["list_subdocuments_html"] + +request.method == "GET" +and #request.path_segments == 3 +and models[request.path_segments[1]] +and uuid.check(request.path_segments[2]) +and models[request.path_segments[3]] +and request.headers["accept"]:match("html") diff --git a/packages/lighttouch-html-interface/rules/request_document.lua b/packages/lighttouch-html-interface/rules/request_document.lua new file mode 100644 index 0000000..4a95be5 --- /dev/null +++ b/packages/lighttouch-html-interface/rules/request_document.lua @@ -0,0 +1,9 @@ +priority = 3 +input_parameter = "request" +events_table = ["request_document_html"] + +request.method == "GET" +and #request.path_segments == 2 +and models[request.path_segments[1]] +and uuid.check(request.path_segments[2]) +and request.headers["accept"]:match("html") diff --git a/packages/lighttouch-html-interface/rules/request_edit.lua b/packages/lighttouch-html-interface/rules/request_edit.lua new file mode 100644 index 0000000..e47cbb8 --- /dev/null +++ b/packages/lighttouch-html-interface/rules/request_edit.lua @@ -0,0 +1,9 @@ +priority = 3 +input_parameter = "request" +events_table = ["request_document_edit_form"] + +request.method == "GET" +and #request.path_segments == 3 +and models[request.path_segments[1]] +and uuid.check(request.path_segments[2]) +and request.path_segments[3] == "edit" diff --git a/packages/lighttouch-html-interface/rules/witness.lua b/packages/lighttouch-html-interface/rules/witness.lua new file mode 100644 index 0000000..39e0aca --- /dev/null +++ b/packages/lighttouch-html-interface/rules/witness.lua @@ -0,0 +1,11 @@ +priority = 2 +input_parameter = "request" +events_table = ["witness_html"] + +request.method == "GET" +and +#request.path_segments == 0 +and +request.query.witness +and +uuid.check(request.query.witness) diff --git a/packages/lighttouch-json-interface/actions/create_document.lua b/packages/lighttouch-json-interface/actions/create_document.lua new file mode 100644 index 0000000..fd576da --- /dev/null +++ b/packages/lighttouch-json-interface/actions/create_document.lua @@ -0,0 +1,37 @@ +event = ["request_post_document"] +priority = 1 +input_parameters = ["request"] + +-- POST / +local document_uuid = uuid.v4() + +local fields = { + model = request.body.model, + request_uuid = request.uuid, +} + +for k, v in pairs(request.body) do + local field_name = k:match("^fields%.(.+)$") + if field_name then + fields[field_name] = v + end +end + + +local id, store = request.body.id +if id then + local _, _, _store = contentdb.read_document(id) + store = _store +else + store = request.profile_uuid or contentdb.home +end + +contentdb.write_file (store, id or document_uuid, fields, request.body.body) + +return { + headers = { + ["content-type"] = "application/json", + ["X-Request-ID"] = request.uuid + }, + body = json.from_table(params) +} diff --git a/packages/lighttouch-json-interface/actions/get_document.lua b/packages/lighttouch-json-interface/actions/get_document.lua new file mode 100644 index 0000000..1bd3c48 --- /dev/null +++ b/packages/lighttouch-json-interface/actions/get_document.lua @@ -0,0 +1,33 @@ +event = ["request_document_json"] +priority = 1 +input_parameters = ["request"] + + +-- GET /[type]/[uuid] +local model_name, id = request.path_segments[1], request.path_segments[2] + +local fields, body, store = contentdb.read_document(id) +if not fields then + return { + headers = { ["content-type"] = "application/json" }, + body = json.from_table({msg="Document not found"}) + } +end + +if fields.model ~= model_name then + return { + headers = { ["content-type"] = "application/json" }, + body = json.from_table({msg="Document is not of model " .. model_name}) + } +end + + +return { + headers = { ["content-type"] = "application/json" }, + body = json.from_table({ + id = id, + store = store, + fields = fields, + body = body + }) +} diff --git a/packages/lighttouch-json-interface/actions/list_documents.lua b/packages/lighttouch-json-interface/actions/list_documents.lua new file mode 100644 index 0000000..c9636f4 --- /dev/null +++ b/packages/lighttouch-json-interface/actions/list_documents.lua @@ -0,0 +1,28 @@ +event = ["list_documents_json"] +priority = 1 +input_parameters = ["request"] + +-- GET /[type]/[uuid] +local model_name = request.path_segments[1] + +local uuids = {} + +contentdb.walk_documents(nil, function (file_uuid, header, body) + if fields.model ~= model_name then return end + -- Filter the documents using the query params + for k, v in pairs(request.query) do + if header[k] ~= v then + -- Don't add this document to the list + return + end + end + + table.insert(uuids, file_uuid) +end) + +return { + headers = { + ["content-type"] = "application/json", + }, + body = json.from_table({documents=uuids}) +} diff --git a/packages/lighttouch-json-interface/actions/list_subdocuments.lua b/packages/lighttouch-json-interface/actions/list_subdocuments.lua new file mode 100644 index 0000000..031bf7d --- /dev/null +++ b/packages/lighttouch-json-interface/actions/list_subdocuments.lua @@ -0,0 +1,34 @@ +event = ["list_subdocuments_json"] +priority = 1 +input_parameters = ["request"] + + +-- GET /[type] +local base_model = request.path_segments[1] +local document_uuid = request.path_segments[2] +local model_name = request.path_segments[3] + +local uuids = {} + +contentdb.walk_documents(nil, function (doc_id, fields, body) + if fields.model ~= model_name then return end + if fields[base_model] == document_uuid then + table.insert(uuids, doc_id) + end +end) + + + +if #uuids == 0 then uuids = nil end + +return { + headers = { + ["content-type"] = "text/html", + }, + body = json.from_table({ + base_model = base_model, + model = model_name, + uuid = document_uuid, + documents = uuids + }) +} diff --git a/packages/lighttouch-json-interface/actions/send_404.lua b/packages/lighttouch-json-interface/actions/send_404.lua new file mode 100644 index 0000000..3270280 --- /dev/null +++ b/packages/lighttouch-json-interface/actions/send_404.lua @@ -0,0 +1,12 @@ +event = ["request_nonexistent_document"] +priority = 1 +input_parameters = ["request"] + +log.debug("my 404") +return { + headers = { + ["content-type"] = "application/json", + }, + status = 404, + body = '{"error": "Document not found"}', +} diff --git a/packages/lighttouch-json-interface/actions/validate.lua b/packages/lighttouch-json-interface/actions/validate.lua new file mode 100644 index 0000000..dd86914 --- /dev/null +++ b/packages/lighttouch-json-interface/actions/validate.lua @@ -0,0 +1,24 @@ +event = ["validate_documents"] +priority = 1 +input_parameters = ["request"] + +local err = contentdb.walk_documents("home", function (uuid, header, body) + + header.model = header.type + local result, err = contentdb.validate_document(header) + if not result then + return "Validation failed in document " .. uuid .. ": " .. err + end + +end) + +if err then + log.error(err) + return { + headers = {}, + status = 500, + body = err + } +else + return { headers = {}, body = "All documents validated correctly" } +end diff --git a/packages/lighttouch-json-interface/disabled_actions.txt b/packages/lighttouch-json-interface/disabled_actions.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/packages/lighttouch-json-interface/disabled_actions.txt @@ -0,0 +1 @@ + diff --git a/packages/lighttouch-json-interface/events.txt b/packages/lighttouch-json-interface/events.txt new file mode 100644 index 0000000..794a39e --- /dev/null +++ b/packages/lighttouch-json-interface/events.txt @@ -0,0 +1,7 @@ +request_process +request_document_json +request_post_document +request_nonexistent_document +validate_documents +list_documents_json +list_subdocuments_json \ No newline at end of file diff --git a/packages/lighttouch-json-interface/rules/list_documents.lua b/packages/lighttouch-json-interface/rules/list_documents.lua new file mode 100644 index 0000000..0d39cdd --- /dev/null +++ b/packages/lighttouch-json-interface/rules/list_documents.lua @@ -0,0 +1,8 @@ +priority = 2 +input_parameter = "request" +events_table = ["list_documents_json"] + +request.method == "GET" +and #request.path_segments == 1 +and request.path_segments[1]:match("^%a+$") -- TODO: make it a known type, not just any word +and request.headers["accept"]:match("json") diff --git a/packages/lighttouch-json-interface/rules/list_subdocuments.lua b/packages/lighttouch-json-interface/rules/list_subdocuments.lua new file mode 100644 index 0000000..f04e098 --- /dev/null +++ b/packages/lighttouch-json-interface/rules/list_subdocuments.lua @@ -0,0 +1,10 @@ +priority = 3 +input_parameter = "request" +events_table = ["list_subdocuments_json"] + +request.method == "GET" +and #request.path_segments == 3 +and request.path_segments[1]:match("^[%a-]+$") -- TODO: make it a known type, not just any word +and uuid.check(request.path_segments[2]) +and request.path_segments[1]:match("^[%a-]+$") -- TODO: make it a known type, not just any word +and request.headers["accept"]:match("json") diff --git a/packages/lighttouch-json-interface/rules/post_document.lua b/packages/lighttouch-json-interface/rules/post_document.lua new file mode 100644 index 0000000..858bcb6 --- /dev/null +++ b/packages/lighttouch-json-interface/rules/post_document.lua @@ -0,0 +1,7 @@ +priority = 1 +input_parameter = "request" +events_table = ["request_post_document"] + +request.method == "POST" +and +request.path == "/" diff --git a/packages/lighttouch-json-interface/rules/request_document.lua b/packages/lighttouch-json-interface/rules/request_document.lua new file mode 100644 index 0000000..8d1c410 --- /dev/null +++ b/packages/lighttouch-json-interface/rules/request_document.lua @@ -0,0 +1,9 @@ +priority = 2 +input_parameter = "request" +events_table = ["request_document_json"] + +request.method == "GET" +and #request.path_segments == 2 +and request.path_segments[1]:match("^%a+$") -- TODO: make it a known type, not just any word +and uuid.check(request.path_segments[2]) +and request.headers["accept"]:match("json") diff --git a/packages/lighttouch-json-interface/rules/validate.lua b/packages/lighttouch-json-interface/rules/validate.lua new file mode 100644 index 0000000..b4ddff9 --- /dev/null +++ b/packages/lighttouch-json-interface/rules/validate.lua @@ -0,0 +1,5 @@ +priority = 1 +input_parameter = "request" +events_table = ["validate_documents"] + +request.path_segments[1] == "validate_documents" diff --git a/packages/lighttouch-logging/actions/log_incoming_request.lua b/packages/lighttouch-logging/actions/log_incoming_request.lua new file mode 100644 index 0000000..0e9a923 --- /dev/null +++ b/packages/lighttouch-logging/actions/log_incoming_request.lua @@ -0,0 +1,10 @@ +event = ["incoming_request_received"] +priority = 1 +input_parameters = ["request"] + +local fields = table.copy(request) +fields.model = "incoming-request" +fields.body = nil +fields.body_raw = nil + +contentdb.write_file("incoming-request", request.uuid, fields, request.body_raw) diff --git a/packages/lighttouch-logging/actions/log_incoming_response.lua b/packages/lighttouch-logging/actions/log_incoming_response.lua new file mode 100644 index 0000000..7063590 --- /dev/null +++ b/packages/lighttouch-logging/actions/log_incoming_response.lua @@ -0,0 +1,10 @@ +event = ["incoming_response_received"] +priority = 1 +input_parameters = ["response"] + +local fields = table.copy(response) +fields.model = "incoming-response" +fields.body = nil +fields.body_raw = nil + +contentdb.write_file("incoming-response", response.uuid, fields, response.body_raw) diff --git a/packages/lighttouch-logging/actions/log_outgoing_request.lua b/packages/lighttouch-logging/actions/log_outgoing_request.lua new file mode 100644 index 0000000..327c04a --- /dev/null +++ b/packages/lighttouch-logging/actions/log_outgoing_request.lua @@ -0,0 +1,10 @@ +event = ["outgoing_request_about_to_be_sent"] +priority = 1 +input_parameters = ["request"] + +local fields = table.copy(request) +fields.model = "outgoing-request" +fields.body = nil +fields.body_raw = nil + +contentdb.write_file("outgoing-request", request.uuid, fields, request.body_raw) diff --git a/packages/lighttouch-logging/actions/log_outgoing_response.lua b/packages/lighttouch-logging/actions/log_outgoing_response.lua new file mode 100644 index 0000000..3493e0e --- /dev/null +++ b/packages/lighttouch-logging/actions/log_outgoing_response.lua @@ -0,0 +1,10 @@ +event = ["outgoing_response_about_to_be_sent"] +priority = 1 +input_parameters = ["response"] + +local fields = table.copy(response) +fields.model = "outgoing-response" +fields.body = nil +fields.body_raw = nil + +contentdb.write_file("outgoing-response", response.uuid, fields, response.body_raw) diff --git a/packages/lighttouch-logging/actions/request_log.lua b/packages/lighttouch-logging/actions/request_log.lua new file mode 100644 index 0000000..4c5cafa --- /dev/null +++ b/packages/lighttouch-logging/actions/request_log.lua @@ -0,0 +1,27 @@ +event = ["request_log"] +priority = 1 +input_parameters = ["request"] + +local log_uuid = request.path_segments[2] + +local path = contentdb.get_document_path(log_uuid, "incoming_request") + +if not path then + return { + status = 401, + headers = {}, + body = "", + } +end + +local file_content = fs.read_file(path) +if not file_content then + error("Could not read " .. path) +end + +local log_content = yaml.to_table(file_content) + +return { + headers = { ["content-type"] = "application/json" }, + body = json.from_table(log_content) +} diff --git a/packages/lighttouch-logging/actions/setup_content_stores.lua b/packages/lighttouch-logging/actions/setup_content_stores.lua new file mode 100644 index 0000000..0f5cb8a --- /dev/null +++ b/packages/lighttouch-logging/actions/setup_content_stores.lua @@ -0,0 +1,11 @@ +event = ["lighttouch_loaded"] +priority = 50 +input_parameters = [] + +local stores = {"incoming-request", "incoming-response", "outgoing-request", "outgoing-response"} + +for _, id in pairs(stores) do + local dir = "log/" .. id .. "/" + contentdb.stores[id] = dir + fs.create_dir(dir, true) +end diff --git a/packages/lighttouch-logging/disabled_actions.txt b/packages/lighttouch-logging/disabled_actions.txt new file mode 100644 index 0000000..e69de29 diff --git a/packages/lighttouch-logging/events.txt b/packages/lighttouch-logging/events.txt new file mode 100644 index 0000000..131e43f --- /dev/null +++ b/packages/lighttouch-logging/events.txt @@ -0,0 +1 @@ +request_log \ No newline at end of file diff --git a/packages/lighttouch-logging/rules/request_log.lua b/packages/lighttouch-logging/rules/request_log.lua new file mode 100644 index 0000000..cab75a5 --- /dev/null +++ b/packages/lighttouch-logging/rules/request_log.lua @@ -0,0 +1,11 @@ +priority = 3 +input_parameter = "request" +events_table = ["request_log"] + +request.method == "GET" +and +#request.path_segments == 2 +and +request.path_segments[1] == "log" +and +uuid.check(request.path_segments[2]) diff --git a/packages/send-file-package/actions/send_file.lua b/packages/send-file-package/actions/send_file.lua new file mode 100644 index 0000000..b0933b5 --- /dev/null +++ b/packages/send-file-package/actions/send_file.lua @@ -0,0 +1,24 @@ +event = ["file_requested"] +priority = 1 +input_parameters = ["request"] + +local dir = torchbear.settings.files_path or "files" +local path = dir .. request.path -- Paths always start with '/' +local file_content = fs.read_file(path) + +if not file_content then + log.error("Could not open file " .. path) + return { + status = 404, + headers = {}, + body = "" + } +end + +return { + status = 200, + headers = { + ["content-type"] = mime.guess_mime_type(path), + }, + body = file_content +} diff --git a/packages/send-file-package/events.txt b/packages/send-file-package/events.txt new file mode 100644 index 0000000..b48d729 --- /dev/null +++ b/packages/send-file-package/events.txt @@ -0,0 +1 @@ +file_requested diff --git a/packages/send-file-package/models/slide.scl b/packages/send-file-package/models/slide.scl new file mode 100644 index 0000000..7c2b376 --- /dev/null +++ b/packages/send-file-package/models/slide.scl @@ -0,0 +1,15 @@ +description = "Slide" +fields = { + title = { + type = "string" + }, + body = { + type = "string" + }, + image-address = { + type = "string" + }, + slideshow = { + type = "uuid" + } +} diff --git a/packages/send-file-package/models/slideshow.scl b/packages/send-file-package/models/slideshow.scl new file mode 100644 index 0000000..5664538 --- /dev/null +++ b/packages/send-file-package/models/slideshow.scl @@ -0,0 +1,6 @@ +description = "Slideshow" +fields = { + title = { + type = "string" + } +} diff --git a/packages/send-file-package/rules/file_requested.lua b/packages/send-file-package/rules/file_requested.lua new file mode 100644 index 0000000..7dd93dc --- /dev/null +++ b/packages/send-file-package/rules/file_requested.lua @@ -0,0 +1,9 @@ +priority = 1 +input_parameter = "request" +events_table = ["file_requested"] + +request.method == "GET" +and +#request.path > 1 +and not +models[request.path_segments[1]] diff --git a/themes/base-theme/_style/homepage-slide.html/div slide_container.txt b/themes/base-theme/_style/homepage-slide.html/div slide_container.txt new file mode 100644 index 0000000..4bb3844 --- /dev/null +++ b/themes/base-theme/_style/homepage-slide.html/div slide_container.txt @@ -0,0 +1,4 @@ +content +absolute +text-center +slide-content \ No newline at end of file diff --git a/themes/base-theme/_style/homepage-slide.html/div width_full_container.txt b/themes/base-theme/_style/homepage-slide.html/div width_full_container.txt new file mode 100644 index 0000000..0f679cc --- /dev/null +++ b/themes/base-theme/_style/homepage-slide.html/div width_full_container.txt @@ -0,0 +1,5 @@ +w-full +h-full +flex +items-center +justify-center \ No newline at end of file diff --git a/themes/base-theme/_style/homepage-slide.html/img slide_image.txt b/themes/base-theme/_style/homepage-slide.html/img slide_image.txt new file mode 100644 index 0000000..02e3a2b --- /dev/null +++ b/themes/base-theme/_style/homepage-slide.html/img slide_image.txt @@ -0,0 +1,2 @@ +absolute +slide-img \ No newline at end of file diff --git a/themes/base-theme/_style/index.html/div site_content.txt b/themes/base-theme/_style/index.html/div site_content.txt new file mode 100644 index 0000000..2e4247d --- /dev/null +++ b/themes/base-theme/_style/index.html/div site_content.txt @@ -0,0 +1,3 @@ +container +my-4 +mx-4 \ No newline at end of file diff --git a/themes/base-theme/_style/index.html/div site_header.txt b/themes/base-theme/_style/index.html/div site_header.txt new file mode 100644 index 0000000..a773a3f --- /dev/null +++ b/themes/base-theme/_style/index.html/div site_header.txt @@ -0,0 +1,2 @@ +w-full +text-center \ No newline at end of file diff --git a/themes/base-theme/chunks/_style/footer.html/div footer_dummy.txt b/themes/base-theme/chunks/_style/footer.html/div footer_dummy.txt new file mode 100644 index 0000000..6302aa2 --- /dev/null +++ b/themes/base-theme/chunks/_style/footer.html/div footer_dummy.txt @@ -0,0 +1,3 @@ +p-2 +mt-0 +w-full \ No newline at end of file diff --git a/themes/base-theme/chunks/_style/nav.html/li margin_x.txt b/themes/base-theme/chunks/_style/nav.html/li margin_x.txt new file mode 100644 index 0000000..35b3b03 --- /dev/null +++ b/themes/base-theme/chunks/_style/nav.html/li margin_x.txt @@ -0,0 +1 @@ +mx-4 \ No newline at end of file diff --git a/themes/base-theme/chunks/_style/nav.html/nav nav_dummy.txt b/themes/base-theme/chunks/_style/nav.html/nav nav_dummy.txt new file mode 100644 index 0000000..042645a --- /dev/null +++ b/themes/base-theme/chunks/_style/nav.html/nav nav_dummy.txt @@ -0,0 +1,5 @@ +p-2 +mt-0 +w-full +flex +inline-flex \ No newline at end of file diff --git a/themes/base-theme/chunks/_style/nav.html/ul horizontal_list.txt b/themes/base-theme/chunks/_style/nav.html/ul horizontal_list.txt new file mode 100644 index 0000000..acab598 --- /dev/null +++ b/themes/base-theme/chunks/_style/nav.html/ul horizontal_list.txt @@ -0,0 +1,2 @@ +flex +inline-flex \ No newline at end of file diff --git a/themes/base-theme/chunks/footer.html b/themes/base-theme/chunks/footer.html new file mode 100644 index 0000000..3f123ff --- /dev/null +++ b/themes/base-theme/chunks/footer.html @@ -0,0 +1,3 @@ +
+ base theme dummy footer +
\ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/a green_button.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/a green_button.txt new file mode 100644 index 0000000..c381546 --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/a green_button.txt @@ -0,0 +1,9 @@ +link__main +text-black +font-bold +bg-green +rounded-full +py-2 +px-4 +hover:bg-green-dark +hover:text-white \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div big_container.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div big_container.txt new file mode 100644 index 0000000..3e3c0f0 --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div big_container.txt @@ -0,0 +1,4 @@ +content-center +flex +mb-4 +mt-4 \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_container.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_container.txt new file mode 100644 index 0000000..dc0f4ab --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_container.txt @@ -0,0 +1,6 @@ +content__body +rounded +bg-white +shadow-lg +w-full +overflow-hidden \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_header.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_header.txt new file mode 100644 index 0000000..fe916cc --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div card_header.txt @@ -0,0 +1,7 @@ +shadow-md +bg-grey-lighter +px-5 +py-1 +flex +flex-wrap +justify-between \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div center_container.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div center_container.txt new file mode 100644 index 0000000..8cf0f9a --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div center_container.txt @@ -0,0 +1,3 @@ +px-2 +py-2 +text-center \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div inline_aligner.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div inline_aligner.txt new file mode 100644 index 0000000..fd60cff --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/div inline_aligner.txt @@ -0,0 +1,2 @@ +mt-3 +inline-block \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/li list_border.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/li list_border.txt new file mode 100644 index 0000000..e96e95e --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/li list_border.txt @@ -0,0 +1,2 @@ +list__border +px-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_content.html/ul list.txt b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/ul list.txt new file mode 100644 index 0000000..fd99a3f --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_content.html/ul list.txt @@ -0,0 +1 @@ +list__main \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/a blue_button.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/a blue_button.txt new file mode 100644 index 0000000..08b89ab --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/a blue_button.txt @@ -0,0 +1,11 @@ +ml-5 +inline-block +text-black +link__main +font-bold +bg-blue +rounded-full +py-2 +px-4 +hover:bg-blue-dark +hover:text-white \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div col_container.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div col_container.txt new file mode 100644 index 0000000..e9c5fb7 --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div col_container.txt @@ -0,0 +1,4 @@ +flex +flex-col +px-2 +py-2 \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div responsive_display.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div responsive_display.txt new file mode 100644 index 0000000..4ff3feb --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div responsive_display.txt @@ -0,0 +1,6 @@ +flex +flex-col +sm:flex-col +md:flex-row +lg:flex-row +xl:flex-row \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div row_container.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div row_container.txt new file mode 100644 index 0000000..d1b5751 --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div row_container.txt @@ -0,0 +1,2 @@ +flex +flex-row \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_md.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_md.txt new file mode 100644 index 0000000..94d3280 --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_md.txt @@ -0,0 +1 @@ +w-4/5 \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_sm.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_sm.txt new file mode 100644 index 0000000..4f2cbc1 --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/div width_sm.txt @@ -0,0 +1 @@ +w-1/5 \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/p bold_font.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/p bold_font.txt new file mode 100644 index 0000000..4f025d3 --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/p bold_font.txt @@ -0,0 +1,2 @@ +font-bold +pr-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_el.html/p padding.txt b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/p padding.txt new file mode 100644 index 0000000..24eb28a --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_el.html/p padding.txt @@ -0,0 +1 @@ +pr-2 \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/_style/list_documents_title.html/h1 title_display.txt b/themes/base-theme/chunks/list_document/_style/list_documents_title.html/h1 title_display.txt new file mode 100644 index 0000000..54e55ca --- /dev/null +++ b/themes/base-theme/chunks/list_document/_style/list_documents_title.html/h1 title_display.txt @@ -0,0 +1 @@ +inline-block \ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/list_documents_content.html b/themes/base-theme/chunks/list_document/list_documents_content.html new file mode 100644 index 0000000..c642de8 --- /dev/null +++ b/themes/base-theme/chunks/list_document/list_documents_content.html @@ -0,0 +1,36 @@ +
+
+
+ + {% include "chunks/list_document/list_documents_title.html" %} + +
+ New {{ model | capitalize }} +
+
+ {% if documents %} +
    + {% for entry in documents %} +
  • + + {% set url = "/" ~ model ~ "/" ~ entry.uuid %} + + {% include "chunks/list_document/list_documents_el.html" %} + +
  • + {% endfor %} +
+ {% else %} +

+ No documents +

+ {% endif %} + +
+ New {{ model | capitalize }} +
+ +
+
\ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/list_documents_el.html b/themes/base-theme/chunks/list_document/list_documents_el.html new file mode 100644 index 0000000..224657a --- /dev/null +++ b/themes/base-theme/chunks/list_document/list_documents_el.html @@ -0,0 +1,23 @@ +
+
+

+ Store +

+ {{entry.store}} : +

+

+
+
+
+

+ {{entry.uuid}} +

+
+
+ + Show + +
+
+
\ No newline at end of file diff --git a/themes/base-theme/chunks/list_document/list_documents_title.html b/themes/base-theme/chunks/list_document/list_documents_title.html new file mode 100644 index 0000000..da091e5 --- /dev/null +++ b/themes/base-theme/chunks/list_document/list_documents_title.html @@ -0,0 +1,3 @@ +

+ {{ TITLE }} +

\ No newline at end of file diff --git a/themes/base-theme/chunks/list_documents.html b/themes/base-theme/chunks/list_documents.html new file mode 100644 index 0000000..d81296d --- /dev/null +++ b/themes/base-theme/chunks/list_documents.html @@ -0,0 +1,8 @@ +{% extends "layouts/base.html" %} + +{% block content %} + {{ super() }} + {% include "chunks/list_document/list_documents_content.html" %} + +{% endblock content %} + diff --git a/themes/base-theme/chunks/model_form.html b/themes/base-theme/chunks/model_form.html new file mode 100644 index 0000000..5e67ade --- /dev/null +++ b/themes/base-theme/chunks/model_form.html @@ -0,0 +1,7 @@ +{% extends "layouts/base.html" %} + +{% block content %} + {{ super() }} + {% include "chunks/model_form/model_form_content.html" %} + +{% endblock content %} diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/button green_button.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/button green_button.txt new file mode 100644 index 0000000..93950be --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/button green_button.txt @@ -0,0 +1,9 @@ +inline-block +text-black +font-bold +bg-green +rounded-full +py-2 +px-4 +hover:bg-green-dark +hover:text-white \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div big_container.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div big_container.txt new file mode 100644 index 0000000..3e3c0f0 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div big_container.txt @@ -0,0 +1,4 @@ +content-center +flex +mb-4 +mt-4 \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div card_container.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div card_container.txt new file mode 100644 index 0000000..dc0f4ab --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div card_container.txt @@ -0,0 +1,6 @@ +content__body +rounded +bg-white +shadow-lg +w-full +overflow-hidden \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_field_container.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_field_container.txt new file mode 100644 index 0000000..539067a --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_field_container.txt @@ -0,0 +1,7 @@ +py-1 +px-4 +flex +flex-wrap +content-center +align-middle +flex-col \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_header.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_header.txt new file mode 100644 index 0000000..439149e --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div edit_header.txt @@ -0,0 +1,4 @@ +shadow-md +bg-grey-lighter +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_centered.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_centered.txt new file mode 100644 index 0000000..44898c0 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_centered.txt @@ -0,0 +1,3 @@ +text-center +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_x_y.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_x_y.txt new file mode 100644 index 0000000..5dd4a91 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div padding_x_y.txt @@ -0,0 +1,2 @@ +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div shadow_container.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div shadow_container.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/div width_xl.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div width_xl.txt new file mode 100644 index 0000000..2ef9d22 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/div width_xl.txt @@ -0,0 +1 @@ +max-w-full \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/h3 body_title.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/h3 body_title.txt new file mode 100644 index 0000000..3ee7720 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/h3 body_title.txt @@ -0,0 +1,3 @@ +body__title +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_content.html/textarea text_style.txt b/themes/base-theme/chunks/model_form/_style/model_form_content.html/textarea text_style.txt new file mode 100644 index 0000000..2882cc3 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_content.html/textarea text_style.txt @@ -0,0 +1,12 @@ +textarea__main +bg-grey-lighter +appearance-none +border-2 +border-grey-lighter +rounded +text-grey-darker +leading-tight +focus:outline-none +focus:bg-white +focus:border-black +focus:text-black \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/div responsive_container.txt b/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/div responsive_container.txt new file mode 100644 index 0000000..fb7f067 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/div responsive_container.txt @@ -0,0 +1,9 @@ +py-1 +w-full +flex +flex-wrap +flex-col +sm:flex-col +md:flex-row +lg:flex-row +xl:flex-row \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/input input_field.txt b/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/input input_field.txt new file mode 100644 index 0000000..10350e4 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/input input_field.txt @@ -0,0 +1,14 @@ +w-3/4 +py-2 +px-2 +bg-grey-lighter +appearance-none +border-2 +border-grey-lighter +rounded +text-grey-darker +leading-tight +focus:outline-none +focus:bg-white +focus:border-black +focus:text-black \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/label field_name.txt b/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/label field_name.txt new file mode 100644 index 0000000..02faa46 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_field_1.html/label field_name.txt @@ -0,0 +1,3 @@ +w-1/4 +py-2 +px-2 \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/div responsive_container.txt b/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/div responsive_container.txt new file mode 100644 index 0000000..fb7f067 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/div responsive_container.txt @@ -0,0 +1,9 @@ +py-1 +w-full +flex +flex-wrap +flex-col +sm:flex-col +md:flex-row +lg:flex-row +xl:flex-row \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/input input_field.txt b/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/input input_field.txt new file mode 100644 index 0000000..10350e4 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/input input_field.txt @@ -0,0 +1,14 @@ +w-3/4 +py-2 +px-2 +bg-grey-lighter +appearance-none +border-2 +border-grey-lighter +rounded +text-grey-darker +leading-tight +focus:outline-none +focus:bg-white +focus:border-black +focus:text-black \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/label field_name.txt b/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/label field_name.txt new file mode 100644 index 0000000..02faa46 --- /dev/null +++ b/themes/base-theme/chunks/model_form/_style/model_form_field_2.html/label field_name.txt @@ -0,0 +1,3 @@ +w-1/4 +py-2 +px-2 \ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/model_form_content.html b/themes/base-theme/chunks/model_form/model_form_content.html new file mode 100644 index 0000000..d41233e --- /dev/null +++ b/themes/base-theme/chunks/model_form/model_form_content.html @@ -0,0 +1,63 @@ +
+
+
+
+

{{ TITLE }}

+ {% if store %} + Store: {{ store | safe }}
+ {% endif %} +
+
+
+
+

Fields

+ + {% if id %} + + {% endif %} +
+ {% if fields %} + {% for key, value in fields %} + + {% include "chunks/model_form/model_form_field_1.html" %} + + {% endfor %} + {% else %} + {% for name, field_def in model.fields %} + + + {% include "chunks/model_form/model_form_field_2.html" %} + + {% endfor %} + + {% endif %} + +
+
+
+ {% if fields or body %} +
+ +

Body

+ +
+ +
+
+ {% endif %} + +
+ +
+ +
+
+ +
+
\ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/model_form_field_1.html b/themes/base-theme/chunks/model_form/model_form_field_1.html new file mode 100644 index 0000000..4506b3e --- /dev/null +++ b/themes/base-theme/chunks/model_form/model_form_field_1.html @@ -0,0 +1,8 @@ +
+ + + +
\ No newline at end of file diff --git a/themes/base-theme/chunks/model_form/model_form_field_2.html b/themes/base-theme/chunks/model_form/model_form_field_2.html new file mode 100644 index 0000000..e781409 --- /dev/null +++ b/themes/base-theme/chunks/model_form/model_form_field_2.html @@ -0,0 +1,7 @@ +
+ + +
\ No newline at end of file diff --git a/themes/base-theme/chunks/nav.html b/themes/base-theme/chunks/nav.html new file mode 100644 index 0000000..198f10e --- /dev/null +++ b/themes/base-theme/chunks/nav.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document.html b/themes/base-theme/chunks/show_document.html new file mode 100644 index 0000000..05717eb --- /dev/null +++ b/themes/base-theme/chunks/show_document.html @@ -0,0 +1,7 @@ +{% extends "layouts/base.html" %} + +{% block content %} + {{ super() }} + {% include "chunks/show_document/show_document_content.html" %} + +{% endblock content %} diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/a blue_button.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/a blue_button.txt new file mode 100644 index 0000000..d282d49 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/a blue_button.txt @@ -0,0 +1,10 @@ +inline-block +text-black +link__main +font-bold +bg-blue +rounded-full +py-2 +px-4 +hover:bg-blue-dark +hover:text-white \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/a subdocument_title.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/a subdocument_title.txt new file mode 100644 index 0000000..4459e8d --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/a subdocument_title.txt @@ -0,0 +1,6 @@ +link__main +text-black +font-bold +py-1 +px-1 +hover:text-blue \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/a yellow_button.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/a yellow_button.txt new file mode 100644 index 0000000..41ef6c1 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/a yellow_button.txt @@ -0,0 +1,10 @@ +inline-block +text-black +link__main +font-bold +bg-yellow +rounded-full +py-2 +px-4 +hover:bg-yellow-dark +hover:text-white \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div big_container.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div big_container.txt new file mode 100644 index 0000000..3e3c0f0 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div big_container.txt @@ -0,0 +1,4 @@ +content-center +flex +mb-4 +mt-4 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div body_container.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div body_container.txt new file mode 100644 index 0000000..1df6482 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div body_container.txt @@ -0,0 +1,3 @@ +container +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_container.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_container.txt new file mode 100644 index 0000000..dc0f4ab --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_container.txt @@ -0,0 +1,6 @@ +content__body +rounded +bg-white +shadow-lg +w-full +overflow-hidden \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_header.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_header.txt new file mode 100644 index 0000000..439149e --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div card_header.txt @@ -0,0 +1,4 @@ +shadow-md +bg-grey-lighter +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div centered_container.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div centered_container.txt new file mode 100644 index 0000000..44898c0 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div centered_container.txt @@ -0,0 +1,3 @@ +text-center +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div field_group.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div field_group.txt new file mode 100644 index 0000000..539067a --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div field_group.txt @@ -0,0 +1,7 @@ +py-1 +px-4 +flex +flex-wrap +content-center +align-middle +flex-col \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div fields_container.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div fields_container.txt new file mode 100644 index 0000000..71eb5bc --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div fields_container.txt @@ -0,0 +1,4 @@ +border-black +px-5 +py-2 +shadow-inner \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/div justify_container.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div justify_container.txt new file mode 100644 index 0000000..2e1b597 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/div justify_container.txt @@ -0,0 +1 @@ +text-justify \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/h3 body_title.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/h3 body_title.txt new file mode 100644 index 0000000..3ee7720 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/h3 body_title.txt @@ -0,0 +1,3 @@ +body__title +px-5 +py-1 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_content.html/ul list.txt b/themes/base-theme/chunks/show_document/_style/show_document_content.html/ul list.txt new file mode 100644 index 0000000..fd99a3f --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_content.html/ul list.txt @@ -0,0 +1 @@ +list__main \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_field.html/div responsive_field_container.txt b/themes/base-theme/chunks/show_document/_style/show_document_field.html/div responsive_field_container.txt new file mode 100644 index 0000000..fb7f067 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_field.html/div responsive_field_container.txt @@ -0,0 +1,9 @@ +py-1 +w-full +flex +flex-wrap +flex-col +sm:flex-col +md:flex-row +lg:flex-row +xl:flex-row \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_name.txt b/themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_name.txt new file mode 100644 index 0000000..02faa46 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_name.txt @@ -0,0 +1,3 @@ +w-1/4 +py-2 +px-2 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_value.txt b/themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_value.txt new file mode 100644 index 0000000..ebe7e54 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/show_document_field.html/label field_value.txt @@ -0,0 +1,6 @@ +w-3/4 +py-2 +px-2 +rounded +text-grey-darker +leading-tight \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_1.html/a blue_button.txt b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/a blue_button.txt new file mode 100644 index 0000000..67fb90f --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/a blue_button.txt @@ -0,0 +1,10 @@ +text-black +text-sm +link__main +font-bold +bg-blue +rounded-full +py-2 +px-2 +hover:bg-blue-dark +hover:text-white \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_1.html/a document_title.txt b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/a document_title.txt new file mode 100644 index 0000000..4459e8d --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/a document_title.txt @@ -0,0 +1,6 @@ +link__main +text-black +font-bold +py-1 +px-1 +hover:text-blue \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_1.html/div responsive_container.txt b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/div responsive_container.txt new file mode 100644 index 0000000..802fc36 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/div responsive_container.txt @@ -0,0 +1,7 @@ +flex +flex-wrap +flex-col +sm:flex-col +md:flex-row +lg:flex-row +xl:flex-row \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_1.html/div width_sm.txt b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/div width_sm.txt new file mode 100644 index 0000000..4f2cbc1 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/div width_sm.txt @@ -0,0 +1 @@ +w-1/5 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_1.html/span document_name.txt b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/span document_name.txt new file mode 100644 index 0000000..06721ae --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_1.html/span document_name.txt @@ -0,0 +1,6 @@ +w-4/5 +py-2 +px-2 +rounded +text-grey-darker +leading-tight \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_2.html/a blue_button.txt b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/a blue_button.txt new file mode 100644 index 0000000..67fb90f --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/a blue_button.txt @@ -0,0 +1,10 @@ +text-black +text-sm +link__main +font-bold +bg-blue +rounded-full +py-2 +px-2 +hover:bg-blue-dark +hover:text-white \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_2.html/div responsive_container.txt b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/div responsive_container.txt new file mode 100644 index 0000000..802fc36 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/div responsive_container.txt @@ -0,0 +1,7 @@ +flex +flex-wrap +flex-col +sm:flex-col +md:flex-row +lg:flex-row +xl:flex-row \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_2.html/div width_sm.txt b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/div width_sm.txt new file mode 100644 index 0000000..4f2cbc1 --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/div width_sm.txt @@ -0,0 +1 @@ +w-1/5 \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/_style/sub_document_2.html/span document_name.txt b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/span document_name.txt new file mode 100644 index 0000000..06721ae --- /dev/null +++ b/themes/base-theme/chunks/show_document/_style/sub_document_2.html/span document_name.txt @@ -0,0 +1,6 @@ +w-4/5 +py-2 +px-2 +rounded +text-grey-darker +leading-tight \ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/show_document_content.html b/themes/base-theme/chunks/show_document/show_document_content.html new file mode 100644 index 0000000..9bc6a42 --- /dev/null +++ b/themes/base-theme/chunks/show_document/show_document_content.html @@ -0,0 +1,61 @@ +
+
+
+

{{ TITLE }}

+ Store: {{ store }}
+
+
+
+

Fields

+
+ {% for key, value in fields %} + + {% include "chunks/show_document/show_document_field.html" %} + {% endfor %} +
+
+
+

Body

+
+
{{ body | safe }}
+
+ + {% if subdocuments %} +
+

Subdocuments

+ {% for submodel, docs in subdocuments %} +

+ + {{ submodel | capitalize }} + +

+
    + + {% for entry in docs %} +
  • + + {% set url = "/" ~ submodel ~ "/" ~ entry.uuid %} + {% if entry.name %} + + {% include "chunks/show_document/sub_document_1.html" %} + {% else %} + + {% include "chunks/show_document/sub_document_2.html" %} + + {% endif %} +
  • + {% endfor %} +
+ {% endfor %} +
+ {% endif %} +
+
+ Witness + Edit +
+
+
+
\ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/show_document_field.html b/themes/base-theme/chunks/show_document/show_document_field.html new file mode 100644 index 0000000..dfd8573 --- /dev/null +++ b/themes/base-theme/chunks/show_document/show_document_field.html @@ -0,0 +1,8 @@ +
+ + +
\ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/sub_document_1.html b/themes/base-theme/chunks/show_document/sub_document_1.html new file mode 100644 index 0000000..cc0d888 --- /dev/null +++ b/themes/base-theme/chunks/show_document/sub_document_1.html @@ -0,0 +1,16 @@ +

+ + {{entry.name}} + +

+
+ + {{entry.store}} : {{entry.uuid}} + +
+ + Show + +
+
\ No newline at end of file diff --git a/themes/base-theme/chunks/show_document/sub_document_2.html b/themes/base-theme/chunks/show_document/sub_document_2.html new file mode 100644 index 0000000..55dc10a --- /dev/null +++ b/themes/base-theme/chunks/show_document/sub_document_2.html @@ -0,0 +1,11 @@ +
+ + {{entry.store}} : {{entry.uuid}} + +
+ + Show + +
+
\ No newline at end of file diff --git a/themes/base-theme/headers/meta.html b/themes/base-theme/headers/meta.html new file mode 100644 index 0000000..138c25b --- /dev/null +++ b/themes/base-theme/headers/meta.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/base-theme/headers/styles-basic.html b/themes/base-theme/headers/styles-basic.html new file mode 100644 index 0000000..94af7bf --- /dev/null +++ b/themes/base-theme/headers/styles-basic.html @@ -0,0 +1,4 @@ + + diff --git a/themes/base-theme/headers/stylesheets.html b/themes/base-theme/headers/stylesheets.html new file mode 100644 index 0000000..bc676b2 --- /dev/null +++ b/themes/base-theme/headers/stylesheets.html @@ -0,0 +1,3 @@ + + + diff --git a/themes/base-theme/homepage-slide.html b/themes/base-theme/homepage-slide.html new file mode 100644 index 0000000..dc315ad --- /dev/null +++ b/themes/base-theme/homepage-slide.html @@ -0,0 +1,9 @@ +
+ +
+

{{title}}

+ {% if body %} +

{{body}}

+ {% endif %} +
+
\ No newline at end of file diff --git a/themes/base-theme/index.html b/themes/base-theme/index.html new file mode 100644 index 0000000..da05b10 --- /dev/null +++ b/themes/base-theme/index.html @@ -0,0 +1,46 @@ +{% extends "layouts/base.html" %} + + +{% block head %} + {{ super() }} + +{% endblock head %} + +{% block title %} + {{ super() }} + + {% if TITLE %} + {{ TITLE }} + {% else %} + {{ SITENAME }} + {% endif %} + +{% endblock title %} + +{% block header %} + +
+ Header of the site , or alusive image + +
+{% endblock header %} + +{% block navigation %} + + {% include "chunks/nav.html" %} +{% endblock navigation %} + +{% block content %} + {{ super() }} +
+ Site Content + + Lorem Incididunt sunt excepteur esse in laboris. Laboris eiusmod mollit quis id nulla eu occaecat dolor Lorem do dolore aliqua exercitation anim. Est anim incididunt reprehenderit elit ex incididunt ipsum enim veniam sunt anim irure. Irure do minim elit nulla sint. +
+{% endblock content %} + +{% block footer %} + + {% include "chunks/footer.html" %} + +{% endblock footer %} \ No newline at end of file diff --git a/themes/base-theme/info.yaml b/themes/base-theme/info.yaml new file mode 100644 index 0000000..20b02c8 --- /dev/null +++ b/themes/base-theme/info.yaml @@ -0,0 +1 @@ +name: base-theme \ No newline at end of file diff --git a/themes/base-theme/layouts/base.html b/themes/base-theme/layouts/base.html new file mode 100644 index 0000000..1601ba5 --- /dev/null +++ b/themes/base-theme/layouts/base.html @@ -0,0 +1,57 @@ + + + + + {% block head %} + {% include "headers/meta.html" %} + {% include "headers/stylesheets.html" %} + {% endblock head %} + + {% block title %} + + {% endblock title %} + + + {% block style %} + + + {% include "headers/styles-basic.html" %} + {% endblock style %} + + + + {% block event_input %} + + {% endblock event_input %} +
+ + + + + +
+ {% block content %} + + + {% endblock content %} +
+ + + +
+ + + \ No newline at end of file diff --git a/themes/base-theme/stylesheets/fadeshow.css b/themes/base-theme/stylesheets/fadeshow.css new file mode 100644 index 0000000..9a24722 --- /dev/null +++ b/themes/base-theme/stylesheets/fadeshow.css @@ -0,0 +1 @@ +[data-fadeshow]{width:100%;height:100%}[data-fadeshow] .fs-slides{height:100%}[data-fadeshow] .fs-slide-bg{background-size:cover;background-position:center;background-repeat:no-repeat}[data-fadeshow~=prev-next-nav] .fs-next-btn,[data-fadeshow~=prev-next-nav] .fs-prev-btn{position:absolute;top:0;bottom:0;width:100px;cursor:pointer;background-color:rgba(255,255,255,0);-webkit-tap-highlight-color:transparent}@media (max-width:500px){[data-fadeshow~=prev-next-nav] .fs-next-btn,[data-fadeshow~=prev-next-nav] .fs-prev-btn{width:50%}}[data-fadeshow~=prev-next-nav] .fs-next-btn:before,[data-fadeshow~=prev-next-nav] .fs-prev-btn:before{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;top:50%;width:30px}[data-fadeshow~=prev-next-nav] .fs-prev-btn{left:0}[data-fadeshow~=prev-next-nav] .fs-prev-btn:before{-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);content:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9ImktY2hldnJvbi1sZWZ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDMyIDMyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMiAzMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO308L3N0eWxlPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMCwzMEw4LDE2TDIwLDIiLz48L3N2Zz4=);left:50%}[data-fadeshow~=prev-next-nav] .fs-next-btn{right:0}[data-fadeshow~=prev-next-nav] .fs-next-btn:before{-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%);content:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9ImktY2hldnJvbi1yaWdodCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAzMiAzMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzIgMzI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5zdDB7ZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDt9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTIsMzBsMTItMTRMMTIsMiIvPjwvc3ZnPg==);right:50%}@media (max-width:500px){[data-fadeshow~=prev-next-nav] .fs-prev-btn:before{left:30px}[data-fadeshow~=prev-next-nav] .fs-next-btn:before{right:30px}}[data-fadeshow~=quick-nav] .fs-quick-nav{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);position:absolute;bottom:15px;left:50%;white-space:nowrap;z-index:1}[data-fadeshow~=quick-nav] .fs-quick-btn{background-color:rgba(255,255,255,.4);width:20px;display:inline-block;height:10px;margin:0 2px;border-radius:5px;cursor:pointer;transition:.2s ease}[data-fadeshow~=quick-nav] .fs-quick-btn:hover{opacity:.8}[data-fadeshow~=slide-counter] .fs-slide-counter{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);position:absolute;bottom:15px;left:50%;color:#fff;font-size:16px;font-weight:300;text-shadow:0 0 5px rgba(0,0,0,.2)}[data-fadeshow~=slide-counter] .fs-slide-counter-current{margin-right:3px}[data-fadeshow~=slide-counter] .fs-slide-counter-total{margin-left:3px}[data-fadeshow~=slide-counter] .fs-quick-nav~.fs-slide-counter{bottom:40px}[data-fadeshow]{position:relative;overflow:hidden;background-color:#fff}[data-fadeshow] .fs-slide,[data-fadeshow] .fs-slide-bg{position:absolute;top:0;left:0;width:100%;height:100%}[data-fadeshow] input[type=radio]:checked:nth-of-type(1)~.fs-quick-nav .fs-quick-btn:nth-child(1),[data-fadeshow] input[type=radio]:checked:nth-of-type(2)~.fs-quick-nav .fs-quick-btn:nth-child(2),[data-fadeshow] input[type=radio]:checked:nth-of-type(3)~.fs-quick-nav .fs-quick-btn:nth-child(3),[data-fadeshow] input[type=radio]:checked:nth-of-type(4)~.fs-quick-nav .fs-quick-btn:nth-child(4),[data-fadeshow] input[type=radio]:checked:nth-of-type(5)~.fs-quick-nav .fs-quick-btn:nth-child(5){background-color:#fff;width:40px}[data-fadeshow] .fs-slide{opacity:0;pointer-events:none}[data-fadeshow] .fs-slide:first-child{opacity:1;pointer-events:all}[data-fadeshow] input[type=radio]{position:fixed;left:-9999px;opacity:0}[data-fadeshow] input[type=radio]:checked:nth-of-type(1)~.fs-slides .fs-slide:nth-child(1){opacity:1;pointer-events:all}[data-fadeshow] input[type=radio]:checked:nth-of-type(1)~.fs-next-nav .fs-next-btn:nth-child(2){opacity:1;visibility:visible;z-index:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(1)~.fs-quick-nav .fs-quick-btn:nth-child(1):hover{opacity:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(1)~.fs-slide-counter .fs-slide-counter-current:before{content:"1"}[data-fadeshow] input[type=radio]:checked:nth-of-type(2)~.fs-slides .fs-slide:nth-child(2){opacity:1;pointer-events:all}[data-fadeshow] input[type=radio]:checked:nth-of-type(2)~.fs-next-nav .fs-next-btn:nth-child(3),[data-fadeshow] input[type=radio]:checked:nth-of-type(2)~.fs-prev-nav .fs-prev-btn:nth-child(1){opacity:1;visibility:visible;z-index:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(2)~.fs-quick-nav .fs-quick-btn:nth-child(2):hover{opacity:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(2)~.fs-slide-counter .fs-slide-counter-current:before{content:"2"}[data-fadeshow] input[type=radio]:checked:nth-of-type(3)~.fs-slides .fs-slide:nth-child(3){opacity:1;pointer-events:all}[data-fadeshow] input[type=radio]:checked:nth-of-type(3)~.fs-next-nav .fs-next-btn:nth-child(4),[data-fadeshow] input[type=radio]:checked:nth-of-type(3)~.fs-prev-nav .fs-prev-btn:nth-child(2){opacity:1;visibility:visible;z-index:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(3)~.fs-quick-nav .fs-quick-btn:nth-child(3):hover{opacity:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(3)~.fs-slide-counter .fs-slide-counter-current:before{content:"3"}[data-fadeshow] input[type=radio]:checked:nth-of-type(4)~.fs-slides .fs-slide:nth-child(4){opacity:1;pointer-events:all}[data-fadeshow] input[type=radio]:checked:nth-of-type(4)~.fs-next-nav .fs-next-btn:nth-child(5),[data-fadeshow] input[type=radio]:checked:nth-of-type(4)~.fs-prev-nav .fs-prev-btn:nth-child(3){opacity:1;visibility:visible;z-index:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(4)~.fs-quick-nav .fs-quick-btn:nth-child(4):hover{opacity:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(4)~.fs-slide-counter .fs-slide-counter-current:before{content:"4"}[data-fadeshow] input[type=radio]:checked:nth-of-type(5)~.fs-slides .fs-slide:nth-child(5){opacity:1;pointer-events:all}[data-fadeshow] input[type=radio]:checked:nth-of-type(5)~.fs-prev-nav .fs-prev-btn:nth-child(4){opacity:1;visibility:visible;z-index:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(5)~.fs-quick-nav .fs-quick-btn:nth-child(5):hover{opacity:1}[data-fadeshow] input[type=radio]:checked:nth-of-type(5)~.fs-slide-counter .fs-slide-counter-current:before{content:"5"}[data-fadeshow] input[type=radio]:checked~.fs-slides .fs-slide{opacity:0;pointer-events:none;transition:opacity 1s linear;-webkit-animation:none!important;animation:none!important}[data-fadeshow] input[type=radio]:checked~.fs-slides .fs-slide .fs-slide-bg{-webkit-animation:none!important;animation:none!important}[data-fadeshow] input[type=radio]:checked~.fs-quick-nav .fs-quick-btn{background-color:rgba(255,255,255,.4);width:20px;-webkit-animation:none!important;animation:none!important}[data-fadeshow] input[type=radio]:checked~.fs-slide-counter{display:block}[data-fadeshow~=ken-burns] .fs-slide-bg{-webkit-transform:none;-ms-transform:none;transform:none;transition:transform 5s ease 1s}[data-fadeshow~=ken-burns] input[type=radio]:checked:nth-of-type(1)~.fs-slides .fs-slide:nth-child(1) .fs-slide-bg,[data-fadeshow~=ken-burns] input[type=radio]:checked:nth-of-type(2)~.fs-slides .fs-slide:nth-child(2) .fs-slide-bg,[data-fadeshow~=ken-burns] input[type=radio]:checked:nth-of-type(3)~.fs-slides .fs-slide:nth-child(3) .fs-slide-bg,[data-fadeshow~=ken-burns] input[type=radio]:checked:nth-of-type(4)~.fs-slides .fs-slide:nth-child(4) .fs-slide-bg,[data-fadeshow~=ken-burns] input[type=radio]:checked:nth-of-type(5)~.fs-slides .fs-slide:nth-child(5) .fs-slide-bg{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05);transition-delay:-1s}[data-fadeshow~=prev-next-nav] .fs-next-nav,[data-fadeshow~=prev-next-nav] .fs-prev-nav{z-index:1}[data-fadeshow~=prev-next-nav] .fs-next-btn,[data-fadeshow~=prev-next-nav] .fs-prev-btn{opacity:0;visibility:hidden;z-index:0}[data-fadeshow~=prev-next-nav] .fs-next-btn:nth-child(2),[data-fadeshow~=prev-next-nav] .fs-prev-btn:last-child{opacity:1;visibility:visible;z-index:1}[data-fadeshow~=prev-next-nav] input[type=radio]:checked~.fs-next-nav .fs-next-btn,[data-fadeshow~=prev-next-nav] input[type=radio]:checked~.fs-prev-nav .fs-prev-btn{opacity:0;visibility:hidden;z-index:0;-webkit-animation:none!important;animation:none!important}[data-fadeshow~=prev-next-nav] input[type=radio]:checked:first-of-type~.fs-prev-nav .fs-prev-btn:last-child,[data-fadeshow~=prev-next-nav] input[type=radio]:checked:last-of-type~.fs-next-nav .fs-next-btn:first-child{opacity:1;visibility:visible;z-index:1}[data-fadeshow~=quick-nav] .fs-quick-btn:first-child{background-color:#fff;width:40px}[data-fadeshow~=quick-nav] .fs-quick-btn:first-child:hover{opacity:1}[data-fadeshow~=slide-counter]{counter-reset:slideCounter}[data-fadeshow~=slide-counter] input[type=radio]{counter-increment:slideCounter}[data-fadeshow~=slide-counter] .fs-slide-counter{z-index:1}[data-fadeshow~=slide-counter] .fs-slide-counter-current:before{content:'1'}[data-fadeshow~=slide-counter] .fs-slide-counter-total:before{content:counter(slideCounter)}@-webkit-keyframes slidesAutoplay-2{0%,100%,60%{opacity:0;pointer-events:none}10%,50%{opacity:1;pointer-events:all}}@keyframes slidesAutoplay-2{0%,100%,60%{opacity:0;pointer-events:none}10%,50%{opacity:1;pointer-events:all}}@-webkit-keyframes prevNextNavAutoplay-2{0%,100%,60%{opacity:0;visibility:hidden;z-index:0}10%,50%{opacity:1;visibility:visible;z-index:1}}@keyframes prevNextNavAutoplay-2{0%,100%,60%{opacity:0;visibility:hidden;z-index:0}10%,50%{opacity:1;visibility:visible;z-index:1}}@-webkit-keyframes quickNavAutoplay-2{0%,100%,52%{background-color:rgba(255,255,255,.4);width:20px}2%,50%{background-color:#fff;width:40px;:hover { opacity: 1; }}}@keyframes quickNavAutoplay-2{0%,100%,52%{background-color:rgba(255,255,255,.4);width:20px}2%,50%{background-color:#fff;width:40px;:hover { opacity: 1; }}}@-webkit-keyframes kenBurnsAutoplay-2{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,60%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}@keyframes kenBurnsAutoplay-2{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,60%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-slides .fs-slide{-webkit-animation:slidesAutoplay-2 10s linear infinite;animation:slidesAutoplay-2 10s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-next-nav .fs-next-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-slides .fs-slide:nth-child(1){-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-next-nav .fs-next-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-slides .fs-slide:nth-child(2){-webkit-animation-delay:4s;animation-delay:4s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-next-nav .fs-next-btn,[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-prev-nav .fs-prev-btn{-webkit-animation:prevNextNavAutoplay-2 10s linear infinite;animation:prevNextNavAutoplay-2 10s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-quick-nav .fs-quick-btn{-webkit-animation:quickNavAutoplay-2 10s linear infinite;animation:quickNavAutoplay-2 10s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-slides .fs-slide .fs-slide-bg{-webkit-animation:kenBurnsAutoplay-2 10s linear infinite;animation:kenBurnsAutoplay-2 10s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-slides .fs-slide:nth-child(1) .fs-slide-bg{-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(2):last-of-type~.fs-slides .fs-slide:nth-child(2) .fs-slide-bg{-webkit-animation-delay:4s;animation-delay:4s}@-webkit-keyframes slidesAutoplay-3{0%{opacity:0;pointer-events:none}33.33333%,6.66667%{opacity:1;pointer-events:all}100%,40%{opacity:0;pointer-events:none}}@keyframes slidesAutoplay-3{0%{opacity:0;pointer-events:none}33.33333%,6.66667%{opacity:1;pointer-events:all}100%,40%{opacity:0;pointer-events:none}}@-webkit-keyframes prevNextNavAutoplay-3{0%{opacity:0;visibility:hidden;z-index:0}33.33333%,6.66667%{opacity:1;visibility:visible;z-index:1}100%,40%{opacity:0;visibility:hidden;z-index:0}}@keyframes prevNextNavAutoplay-3{0%{opacity:0;visibility:hidden;z-index:0}33.33333%,6.66667%{opacity:1;visibility:visible;z-index:1}100%,40%{opacity:0;visibility:hidden;z-index:0}}@-webkit-keyframes quickNavAutoplay-3{0%{background-color:rgba(255,255,255,.4);width:20px}1.33333%,33.33333%{background-color:#fff;width:40px;:hover { opacity: 1; }}100%,34.66667%{background-color:rgba(255,255,255,.4);width:20px}}@keyframes quickNavAutoplay-3{0%{background-color:rgba(255,255,255,.4);width:20px}1.33333%,33.33333%{background-color:#fff;width:40px;:hover { opacity: 1; }}100%,34.66667%{background-color:rgba(255,255,255,.4);width:20px}}@-webkit-keyframes kenBurnsAutoplay-3{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,40%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}@keyframes kenBurnsAutoplay-3{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,40%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide{-webkit-animation:slidesAutoplay-3 15s linear infinite;animation:slidesAutoplay-3 15s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-next-nav .fs-next-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide:nth-child(1){-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-next-nav .fs-next-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide:nth-child(2){-webkit-animation-delay:4s;animation-delay:4s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-next-nav .fs-next-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide:nth-child(3){-webkit-animation-delay:9s;animation-delay:9s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-next-nav .fs-next-btn,[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-prev-nav .fs-prev-btn{-webkit-animation:prevNextNavAutoplay-3 15s linear infinite;animation:prevNextNavAutoplay-3 15s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-quick-nav .fs-quick-btn{-webkit-animation:quickNavAutoplay-3 15s linear infinite;animation:quickNavAutoplay-3 15s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide .fs-slide-bg{-webkit-animation:kenBurnsAutoplay-3 15s linear infinite;animation:kenBurnsAutoplay-3 15s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide:nth-child(1) .fs-slide-bg{-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide:nth-child(2) .fs-slide-bg{-webkit-animation-delay:4s;animation-delay:4s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(3):last-of-type~.fs-slides .fs-slide:nth-child(3) .fs-slide-bg{-webkit-animation-delay:9s;animation-delay:9s}@-webkit-keyframes slidesAutoplay-4{0%,100%,30%{opacity:0;pointer-events:none}25%,5%{opacity:1;pointer-events:all}}@keyframes slidesAutoplay-4{0%,100%,30%{opacity:0;pointer-events:none}25%,5%{opacity:1;pointer-events:all}}@-webkit-keyframes prevNextNavAutoplay-4{0%,100%,30%{opacity:0;visibility:hidden;z-index:0}25%,5%{opacity:1;visibility:visible;z-index:1}}@keyframes prevNextNavAutoplay-4{0%,100%,30%{opacity:0;visibility:hidden;z-index:0}25%,5%{opacity:1;visibility:visible;z-index:1}}@-webkit-keyframes quickNavAutoplay-4{0%,100%,26%{background-color:rgba(255,255,255,.4);width:20px}1%,25%{background-color:#fff;width:40px;:hover { opacity: 1; }}}@keyframes quickNavAutoplay-4{0%,100%,26%{background-color:rgba(255,255,255,.4);width:20px}1%,25%{background-color:#fff;width:40px;:hover { opacity: 1; }}}@-webkit-keyframes kenBurnsAutoplay-4{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}@keyframes kenBurnsAutoplay-4{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide{-webkit-animation:slidesAutoplay-4 20s linear infinite;animation:slidesAutoplay-4 20s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-next-nav .fs-next-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(4),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(1){-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-next-nav .fs-next-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(2){-webkit-animation-delay:4s;animation-delay:4s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-next-nav .fs-next-btn:nth-child(4),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(3){-webkit-animation-delay:9s;animation-delay:9s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-next-nav .fs-next-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(4),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(4){-webkit-animation-delay:14s;animation-delay:14s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-next-nav .fs-next-btn,[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-prev-nav .fs-prev-btn{-webkit-animation:prevNextNavAutoplay-4 20s linear infinite;animation:prevNextNavAutoplay-4 20s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-quick-nav .fs-quick-btn{-webkit-animation:quickNavAutoplay-4 20s linear infinite;animation:quickNavAutoplay-4 20s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide .fs-slide-bg{-webkit-animation:kenBurnsAutoplay-4 20s linear infinite;animation:kenBurnsAutoplay-4 20s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(1) .fs-slide-bg{-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(2) .fs-slide-bg{-webkit-animation-delay:4s;animation-delay:4s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(3) .fs-slide-bg{-webkit-animation-delay:9s;animation-delay:9s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(4):last-of-type~.fs-slides .fs-slide:nth-child(4) .fs-slide-bg{-webkit-animation-delay:14s;animation-delay:14s}@-webkit-keyframes slidesAutoplay-5{0%,100%,24%{opacity:0;pointer-events:none}20%,4%{opacity:1;pointer-events:all}}@keyframes slidesAutoplay-5{0%,100%,24%{opacity:0;pointer-events:none}20%,4%{opacity:1;pointer-events:all}}@-webkit-keyframes prevNextNavAutoplay-5{0%,100%,24%{opacity:0;visibility:hidden;z-index:0}20%,4%{opacity:1;visibility:visible;z-index:1}}@keyframes prevNextNavAutoplay-5{0%,100%,24%{opacity:0;visibility:hidden;z-index:0}20%,4%{opacity:1;visibility:visible;z-index:1}}@-webkit-keyframes quickNavAutoplay-5{0%{background-color:rgba(255,255,255,.4);width:20px}0.8%,20%{background-color:#fff;width:40px;:hover { opacity: 1; }}100%,20.8%{background-color:rgba(255,255,255,.4);width:20px}}@keyframes quickNavAutoplay-5{0%{background-color:rgba(255,255,255,.4);width:20px}0.8%,20%{background-color:#fff;width:40px;:hover { opacity: 1; }}100%,20.8%{background-color:rgba(255,255,255,.4);width:20px}}@-webkit-keyframes kenBurnsAutoplay-5{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,24%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}@keyframes kenBurnsAutoplay-5{0%{-webkit-transform:none;-ms-transform:none;transform:none}100%,24%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide{-webkit-animation:slidesAutoplay-5 25s linear infinite;animation:slidesAutoplay-5 25s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-next-nav .fs-next-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(5),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(1){-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-next-nav .fs-next-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(2){-webkit-animation-delay:4s;animation-delay:4s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-next-nav .fs-next-btn:nth-child(4),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(2),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(3){-webkit-animation-delay:9s;animation-delay:9s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-next-nav .fs-next-btn:nth-child(5),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(3),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(4),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(4){-webkit-animation-delay:14s;animation-delay:14s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-next-nav .fs-next-btn:nth-child(1),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-prev-nav .fs-prev-btn:nth-child(4),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-quick-nav .fs-quick-btn:nth-child(5),[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(5){-webkit-animation-delay:19s;animation-delay:19s}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-next-nav .fs-next-btn,[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-prev-nav .fs-prev-btn{-webkit-animation:prevNextNavAutoplay-5 25s linear infinite;animation:prevNextNavAutoplay-5 25s linear infinite}[data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-quick-nav .fs-quick-btn{-webkit-animation:quickNavAutoplay-5 25s linear infinite;animation:quickNavAutoplay-5 25s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide .fs-slide-bg{-webkit-animation:kenBurnsAutoplay-5 25s linear infinite;animation:kenBurnsAutoplay-5 25s linear infinite}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(1) .fs-slide-bg{-webkit-animation-delay:-1s;animation-delay:-1s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(2) .fs-slide-bg{-webkit-animation-delay:4s;animation-delay:4s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(3) .fs-slide-bg{-webkit-animation-delay:9s;animation-delay:9s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(4) .fs-slide-bg{-webkit-animation-delay:14s;animation-delay:14s}[data-fadeshow~=ken-burns][data-fadeshow~=autoplay] input[type=radio]:nth-of-type(5):last-of-type~.fs-slides .fs-slide:nth-child(5) .fs-slide-bg{-webkit-animation-delay:19s;animation-delay:19s}[data-fadeshow~=autoplay] .fs-slide-counter{display:none} \ No newline at end of file diff --git a/torchbear.scl b/torchbear.scl new file mode 100644 index 0000000..7fb2eb4 --- /dev/null +++ b/torchbear.scl @@ -0,0 +1,15 @@ +web-server = { + address = "0.0.0.0", + port = "3000", + single_actor = true, +} + +general = { + init = "lighttouch-base/init.lua", + theme = "base-theme", + log_level = "trace", + sitename = "Lighttouch", + slideshow = "c800a360-d198-4a87-877e-b353f7dd0a9d", + user = "admin", + password = "admin", +}