breeze_cms 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +24 -0
- data/Rakefile +6 -0
- data/app/assets/config/breeze_manifest.js +2 -0
- data/app/assets/images/breeze/breeze_logo.png +0 -0
- data/app/assets/images/breeze/card_preview/card_feature_box.png +0 -0
- data/app/assets/images/breeze/card_preview/card_feature_normal.png +0 -0
- data/app/assets/images/breeze/card_preview/card_full_image.png +0 -0
- data/app/assets/images/breeze/card_preview/card_gap_square.png +0 -0
- data/app/assets/images/breeze/card_preview/card_large_image.png +0 -0
- data/app/assets/images/breeze/card_preview/card_normal_round.png +0 -0
- data/app/assets/images/breeze/card_preview/card_normal_square.png +0 -0
- data/app/assets/images/breeze/card_preview/card_wide_square.png +0 -0
- data/app/assets/images/breeze/card_preview/form_field.png +0 -0
- data/app/assets/images/breeze/home.jpg +0 -0
- data/app/assets/images/breeze/section_preview/blog_header.png +0 -0
- data/app/assets/images/breeze/section_preview/form_section.png +0 -0
- data/app/assets/images/breeze/section_preview/section_cards.png +0 -0
- data/app/assets/images/breeze/section_preview/section_feature.png +0 -0
- data/app/assets/images/breeze/section_preview/section_full_image.png +0 -0
- data/app/assets/images/breeze/section_preview/section_full_up.png +0 -0
- data/app/assets/images/breeze/section_preview/section_half_image.png +0 -0
- data/app/assets/images/breeze/section_preview/section_large_image.png +0 -0
- data/app/assets/images/breeze/section_preview/section_news.png +0 -0
- data/app/assets/images/breeze/section_preview/section_slider.png +0 -0
- data/app/assets/images/breeze/section_preview/section_small_image.png +0 -0
- data/app/assets/images/breeze/section_preview/section_spacer.png +0 -0
- data/app/assets/images/breeze/section_preview/section_text.png +0 -0
- data/app/assets/javascript/breeze_application.js.rb +101 -0
- data/app/assets/javascript/marked.js +6 -0
- data/app/assets/stylesheets/breeze/breeze.css +3633 -0
- data/app/assets/stylesheets/breeze/breeze.email.css +1344 -0
- data/app/assets/stylesheets/breeze.tailwind.css +2 -0
- data/app/assets/stylesheets/breeze_tailwind_styles.css +21 -0
- data/app/assets/stylesheets/tailwind_base.css +3 -0
- data/app/controllers/breeze/application_controller.rb +4 -0
- data/app/controllers/breeze/breeze_controller.rb +16 -0
- data/app/controllers/breeze/cards_controller.rb +58 -0
- data/app/controllers/breeze/changes_controller.rb +45 -0
- data/app/controllers/breeze/form_controller.rb +67 -0
- data/app/controllers/breeze/images_controller.rb +100 -0
- data/app/controllers/breeze/pages_controller.rb +66 -0
- data/app/controllers/breeze/sections_controller.rb +96 -0
- data/app/controllers/breeze/styles_controller.rb +11 -0
- data/app/controllers/breeze/translations_controller.rb +56 -0
- data/app/controllers/breeze/view_controller.rb +10 -0
- data/app/helpers/breeze/breeze_helper.rb +54 -0
- data/app/helpers/breeze/cards_helper.rb +11 -0
- data/app/helpers/breeze/changes_helper.rb +29 -0
- data/app/helpers/breeze/form_helper.rb +5 -0
- data/app/helpers/breeze/images_helper.rb +57 -0
- data/app/helpers/breeze/options_helper.rb +120 -0
- data/app/helpers/breeze/pages_helper.rb +5 -0
- data/app/helpers/breeze/sections_helper.rb +14 -0
- data/app/helpers/breeze/styles_helper.rb +4 -0
- data/app/helpers/breeze/translations_helper.rb +14 -0
- data/app/helpers/breeze/view_helper.rb +74 -0
- data/app/jobs/breeze/application_job.rb +4 -0
- data/app/mailers/breeze/application_mailer.rb +6 -0
- data/app/models/breeze/active_base.rb +34 -0
- data/app/models/breeze/active_yaml.rb +143 -0
- data/app/models/breeze/card.rb +90 -0
- data/app/models/breeze/card_style.rb +12 -0
- data/app/models/breeze/change_set.rb +58 -0
- data/app/models/breeze/image.rb +104 -0
- data/app/models/breeze/option_definition.rb +43 -0
- data/app/models/breeze/page.rb +97 -0
- data/app/models/breeze/page_style.rb +12 -0
- data/app/models/breeze/section.rb +137 -0
- data/app/models/breeze/section_style.rb +17 -0
- data/app/models/breeze/shared_base.rb +20 -0
- data/app/models/breeze/style.rb +17 -0
- data/app/models/breeze/translation.rb +83 -0
- data/app/models/breeze/view_base.rb +134 -0
- data/app/views/breeze/cards/index.haml +84 -0
- data/app/views/breeze/changes/index.haml +52 -0
- data/app/views/breeze/form/_editor.haml +33 -0
- data/app/views/breeze/form/form.haml +8 -0
- data/app/views/breeze/images/_editor.haml +144 -0
- data/app/views/breeze/images/index.haml +83 -0
- data/app/views/breeze/images/new.haml +12 -0
- data/app/views/breeze/images/show.haml +60 -0
- data/app/views/breeze/pages/_sections.rabl +4 -0
- data/app/views/breeze/pages/index.haml +49 -0
- data/app/views/breeze/pages/show.haml +85 -0
- data/app/views/breeze/sections/_option_form_date.haml +4 -0
- data/app/views/breeze/sections/_option_form_select.haml +4 -0
- data/app/views/breeze/sections/_option_form_text.haml +4 -0
- data/app/views/breeze/sections/_overlay.haml +33 -0
- data/app/views/breeze/sections/_section.rabl +5 -0
- data/app/views/breeze/sections/_sections_pagination.haml +29 -0
- data/app/views/breeze/sections/index.haml +88 -0
- data/app/views/breeze/sections/new.haml +12 -0
- data/app/views/breeze/sections/select_card_template.haml +13 -0
- data/app/views/breeze/sections/select_template.haml +15 -0
- data/app/views/breeze/sections/show.haml +91 -0
- data/app/views/breeze/styles/_options.haml +9 -0
- data/app/views/breeze/styles/index.haml +84 -0
- data/app/views/breeze/translations/_row.haml +29 -0
- data/app/views/breeze/translations/show.haml +79 -0
- data/app/views/breeze/view/_blog_header.haml +13 -0
- data/app/views/breeze/view/_form_section.haml +21 -0
- data/app/views/breeze/view/_section_cards.haml +17 -0
- data/app/views/breeze/view/_section_feature.haml +13 -0
- data/app/views/breeze/view/_section_full_image.haml +10 -0
- data/app/views/breeze/view/_section_full_up.haml +11 -0
- data/app/views/breeze/view/_section_half_image.haml +13 -0
- data/app/views/breeze/view/_section_large_image.haml +13 -0
- data/app/views/breeze/view/_section_news.haml +16 -0
- data/app/views/breeze/view/_section_slider.haml +51 -0
- data/app/views/breeze/view/_section_small_image.haml +11 -0
- data/app/views/breeze/view/_section_spacer.haml +1 -0
- data/app/views/breeze/view/_section_text.haml +17 -0
- data/app/views/breeze/view/cards/_card_feature_box.haml +13 -0
- data/app/views/breeze/view/cards/_card_feature_normal.haml +7 -0
- data/app/views/breeze/view/cards/_card_full_image.haml +10 -0
- data/app/views/breeze/view/cards/_card_gap_square.haml +11 -0
- data/app/views/breeze/view/cards/_card_large_image.haml +6 -0
- data/app/views/breeze/view/cards/_card_normal_round.haml +8 -0
- data/app/views/breeze/view/cards/_card_normal_square.haml +9 -0
- data/app/views/breeze/view/cards/_card_wide_square.haml +8 -0
- data/app/views/breeze/view/cards/_form_field.haml +8 -0
- data/app/views/breeze/view/elements/_button.haml +4 -0
- data/app/views/breeze/view/page.haml +2 -0
- data/app/views/layouts/breeze/_header.haml +37 -0
- data/app/views/layouts/breeze/_messages.haml +28 -0
- data/app/views/layouts/breeze/application.haml +20 -0
- data/app/views/layouts/mailer.html.haml +8 -0
- data/app/views/layouts/mailer.text.erb +1 -0
- data/config/breeze/card_styles.yml +129 -0
- data/config/breeze/option_definitions.yml +129 -0
- data/config/breeze/page_styles.yml +12 -0
- data/config/breeze/section_styles.yml +199 -0
- data/config/initializers/breeze.rb +13 -0
- data/config/initializers/rabl.rb +31 -0
- data/config/initializers/simple_form.rb +212 -0
- data/config/routes.rb +40 -0
- data/config/tailwind.config.js +17 -0
- data/config/tailwind.email.js +14 -0
- data/lib/breeze/engine.rb +97 -0
- data/lib/breeze/shared_helper.rb +44 -0
- data/lib/breeze/version.rb +3 -0
- data/lib/breeze.rb +104 -0
- data/lib/generators/breeze/install/install_generator.rb +19 -0
- data/lib/generators/breeze/install/templates/empty.yml +1 -0
- data/lib/generators/breeze/install/templates/initializer.rb +70 -0
- data/lib/generators/breeze/update/update_generator.rb +11 -0
- data/lib/tasks/condense.rake +60 -0
- data/lib/tasks/consistency.rake +84 -0
- metadata +371 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
%section{ options(section , :background , :margin), id: section.type_id}
|
|
2
|
+
-unless( section.header_text(current_lang).blank?)
|
|
3
|
+
.flex{ options(section , :item_align )}
|
|
4
|
+
.px-4.py-4.md:py-10.lg:py-16.mx-5.md:mx-12.lg:mx-20{options(section , :text_align , :text_color)}
|
|
5
|
+
%h1.section_header.text-2xl.font-bold.tracking-tight.sm:text-4xl
|
|
6
|
+
= section.header_text(current_lang)
|
|
7
|
+
-if section.has_option?("subheader")
|
|
8
|
+
%h4.text-xl.mt-10.md:text-2xl
|
|
9
|
+
= section.option("subheader")
|
|
10
|
+
.section_text.mt-4.text-lg.pt-10{ prose_classes }
|
|
11
|
+
= markdown(section,current_lang)
|
|
12
|
+
=view_button(section , "my-2")
|
|
13
|
+
.swiper
|
|
14
|
+
.swiper-wrapper
|
|
15
|
+
- template = "breeze/view/cards/" + section.card_template
|
|
16
|
+
- section.cards.each do |card|
|
|
17
|
+
.swiper-slide{ column_option(section)}
|
|
18
|
+
= render( template , card: card)
|
|
19
|
+
|
|
20
|
+
.swiper-pagination
|
|
21
|
+
.swiper-button-prev
|
|
22
|
+
.swiper-button-next
|
|
23
|
+
|
|
24
|
+
%script{:src => "https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"}
|
|
25
|
+
|
|
26
|
+
:javascript
|
|
27
|
+
var breaks = #{slider_columns_option(section).to_json};
|
|
28
|
+
document.addEventListener("DOMContentLoaded", function(event) {
|
|
29
|
+
const swiper = new Swiper('.swiper', {
|
|
30
|
+
loop: true,
|
|
31
|
+
speed: 1500,
|
|
32
|
+
breakpoints: breaks ,
|
|
33
|
+
autoplay: true,
|
|
34
|
+
pagination: {
|
|
35
|
+
el: '.swiper-pagination',
|
|
36
|
+
},
|
|
37
|
+
navigation: {
|
|
38
|
+
nextEl: '.swiper-button-next',
|
|
39
|
+
prevEl: '.swiper-button-prev',
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
var head = document.getElementsByTagName("head")[0];
|
|
45
|
+
cssLink = document.createElement("link");
|
|
46
|
+
cssLink.href = "https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css";
|
|
47
|
+
cssLink.rel="stylesheet";
|
|
48
|
+
cssLink.id="dynamic-css";
|
|
49
|
+
cssLink.media="screen";
|
|
50
|
+
cssLink.type="text/css";
|
|
51
|
+
head.appendChild(cssLink);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
.flex.justify-center.flex-col.lg:flex-row{options(section , :margin , :background ), id: section.type_id}
|
|
2
|
+
.flex.justify-center.h-60.w-full.overflow-hidden{order_option(section, "lg:w-1/3")}
|
|
3
|
+
= image_for(section ,"object-cover")
|
|
4
|
+
.columns-1.md:columns-2.max-w-full.items-center.w-full.max-w.px-6.mx-auto.mt-6.lg:mt-0{text_color_option(section, "lg:w-2/3")}
|
|
5
|
+
%h2.section_header.text-4xl.font-bold.text-left.mb-4.lg:mb-8{text_align_option(section)}= section.header_text(current_lang)
|
|
6
|
+
-if section.has_option?("subheader")
|
|
7
|
+
%h4.text-xl.mt-4.lg:mt-8.md:text-2xl{text_align_option(card)}
|
|
8
|
+
= section.option("subheader")
|
|
9
|
+
.section_text.mt-3{ prose_classes }
|
|
10
|
+
= markdown(section,current_lang)
|
|
11
|
+
=view_button(section , "my-2")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.h-24
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
%section.p-20.my-20{ options(section , :background , :text_color , :margin), id: section.type_id}
|
|
2
|
+
.flex.justify-center
|
|
3
|
+
.max-w-prose{ options(section , :text_align)}
|
|
4
|
+
- if !section.header_text(current_lang).blank?
|
|
5
|
+
%h1.section_header.mb-10.text-2xl.font-bold.tracking-tight.sm:text-4xl
|
|
6
|
+
= section.header_text(current_lang)
|
|
7
|
+
-if section.has_option?("subheader")
|
|
8
|
+
.section_text.text-xl.pb-6{ prose_classes }
|
|
9
|
+
= section.option("subheader")
|
|
10
|
+
|
|
11
|
+
.max-w-full.mt-4.gap-16{ options(section , :text_columns , :prose ) }
|
|
12
|
+
= markdown_image(section,current_lang)
|
|
13
|
+
- if section.has_option?("button_text") and section.has_option?("button_link")
|
|
14
|
+
%span.block.transition.group-hover:translate-x-1
|
|
15
|
+
%a.text-gray-800.transition{:class => "hover:text-gray-500", :href => "#{section.option("button_link")}"}
|
|
16
|
+
= section.option("button_text")
|
|
17
|
+
→
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
.m-3.relative.p-px.overflow-hidden.transition.duration-300.transform.border.rounded.shadow-sm.hover:scale-105.group.hover:shadow-xl{ id: card.type_id}
|
|
2
|
+
.absolute.bottom-0.left-0.w-full.h-1.duration-300.origin-left.transform.scale-x-0.bg-deep-purple-accent-400.group-hover:scale-x-100
|
|
3
|
+
.absolute.bottom-0.left-0.w-1.h-full.duration-300.origin-bottom.transform.scale-y-0.bg-deep-purple-accent-400.group-hover:scale-y-100
|
|
4
|
+
.absolute.top-0.left-0.w-full.h-1.duration-300.origin-right.transform.scale-x-0.bg-deep-purple-accent-400.group-hover:scale-x-100
|
|
5
|
+
.absolute.bottom-0.right-0.w-1.h-full.duration-300.origin-top.transform.scale-y-0.bg-deep-purple-accent-400.group-hover:scale-y-100
|
|
6
|
+
.relative.p-5.bg-white.rounded-sm
|
|
7
|
+
.flex.flex-col.mb-2.lg:items-center.lg:flex-row
|
|
8
|
+
.flex.items-center.justify-center.w-16.h-16.mb-4.mr-2.rounded-full.lg:mb-0{options(card,:background )}
|
|
9
|
+
= image_for( card , "h-8 w-8")
|
|
10
|
+
%h6.card_header.font-semibold.leading-5{options(card, :text_color)}= card.header_text(current_lang)
|
|
11
|
+
.card_text.mb-2.text-sm.text-gray-900{ prose_classes }
|
|
12
|
+
= markdown(card,current_lang)
|
|
13
|
+
.text-center=view_button(card , "mb-2")
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
.max-w-md.sm:mx-auto.sm:text-center{ id: card.type_id}
|
|
2
|
+
.mt-4.flex.items-center.justify-center.mb-4.rounded-full.mx-auto.w-40.h-40{options(card,:background )}
|
|
3
|
+
= image_for( card , "h-20 w-20")
|
|
4
|
+
%h4.card_header.mb-3.text-xl.font-bold.leading-5{options(card, :text_color)}= card.header_text(current_lang)
|
|
5
|
+
.card_text.mb-3.text-sm.text-gray-900{ prose_classes }
|
|
6
|
+
= markdown(card,current_lang)
|
|
7
|
+
=view_button(card , "mb-2")
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
.group.m-8.overflow-hidden.relative.flex.h-96.items-end{ id: card.type_id}
|
|
2
|
+
= image_for( card , "absolute inset-0 h-full w-full object-cover hover:scale-110 ease-in duration-700")
|
|
3
|
+
.relative.w-full.m-2.p-4.tracking-widest{text_align_option(card ,"sm:w-1/2")}
|
|
4
|
+
-unless card.header_text(current_lang).blank? and card.text.blank?
|
|
5
|
+
%div.transition-colors.group-hover:bg-black.group-hover:text-white{options(card , :text_align , :text_color , :background)}
|
|
6
|
+
.relative.w-full.m-2.p-4
|
|
7
|
+
%h3.card_header.text-lg
|
|
8
|
+
= card.header_text(current_lang)
|
|
9
|
+
.card_text.mt-1.text-xs.font-medium{ prose_classes }
|
|
10
|
+
= markdown(card,current_lang)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
.grid.grid-cols-1.gap-4.md:gap-8.lg:gap-12{ id: card.type_id}
|
|
2
|
+
%div{ order_option(card)}
|
|
3
|
+
= image_for( card , "h-full w-full object-cover")
|
|
4
|
+
.grid.h-70{options(card , :text_align , :text_color , :background )}
|
|
5
|
+
%h3.card_header.p-4.mt-10.text-3xl.font-bold= card.header_text(current_lang)
|
|
6
|
+
-if card.has_option?("subheader")
|
|
7
|
+
%h4.p-4.text-xl= card.option("subheader")
|
|
8
|
+
.m-6{options(card , :background , :text_color ) }
|
|
9
|
+
.card_text{ prose_classes }
|
|
10
|
+
= markdown(card,current_lang)
|
|
11
|
+
=view_button(card , "my-2")
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
.flex.justify-center.flex-col{options(card , :background) , id: card.type_id}
|
|
2
|
+
.flex.justify-center.overflow-hidden
|
|
3
|
+
= image_for(card)
|
|
4
|
+
.flex.justify-center.w-full.max-w.px-6.my-4{options(card , :text_align , :text_color)}
|
|
5
|
+
%h2.card_header.text-4xl.font-bold.text-center= card.header_text(current_lang)
|
|
6
|
+
.card_text.ml-10.text-center= card.text_text(current_lang)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
.fex.flex-col.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm{ id: card.type_id}
|
|
2
|
+
= image_for( card , class: "h-full w-full object-cover")
|
|
3
|
+
%h3.card_header.p-5.text-2xl.bg-gray-100.text-black.font-bold{ text_align_option(card)}= card.header_text(current_lang)
|
|
4
|
+
%div.h-full{background_option(card)}
|
|
5
|
+
.p-5{options(card , :text_align , :text_color)}
|
|
6
|
+
.card_text.m-2.text-sm.leading-relaxed.line-clamp-3{ prose_classes }
|
|
7
|
+
= markdown(card,current_lang)
|
|
8
|
+
=view_button(card , "my-2")
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
.flex.flex-col.justify-between{background_option(card), id: card.type_id}
|
|
2
|
+
%div{ order_option(card , "align-bottom")}
|
|
3
|
+
= image_for( card , "h-full w-full object-cover")
|
|
4
|
+
.m-6{options(card , :text_align , :text_color )}
|
|
5
|
+
%h3.card_header.p-4.text-2xl.font-bold= card.header_text(current_lang)
|
|
6
|
+
-if card.has_option?("subheader")
|
|
7
|
+
%h4.p-4.text-xl= card.option("subheader")
|
|
8
|
+
.card_text.mt-2.p-4{prose_classes}= markdown(card,current_lang)
|
|
9
|
+
=view_button(card)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
.flex.flex-col.lg:flex-row{background_option(card), id: card.type_id}
|
|
2
|
+
= image_for( card , "object-cover lg:w-3/5")
|
|
3
|
+
.ml-0.lg:ml-10.mt-6.lg:mt0{options(card , :text_align , :text_color , :order , "lg:w-2/5")}
|
|
4
|
+
%h3.card_header.text-2xl.font-bold= card.header_text(current_lang)
|
|
5
|
+
-if card.has_option?("subheader")
|
|
6
|
+
%h4.py-4.text-xl= card.option("subheader")
|
|
7
|
+
.card_text.py-4{prose_classes}= markdown(card,current_lang)
|
|
8
|
+
=view_button(card , "mb-2")
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
-if card.option("form_type") == "message"
|
|
2
|
+
.relative.z-0.col-span-2.mt-3
|
|
3
|
+
%textarea.peer.block.w-full.appearance-none.border-0.border-b.border-gray-500.bg-transparent.px-0.text-sm.text-gray-900.focus:border-blue-600.focus:outline-none.focus:ring-0{:class => "py-2.5", :name => card.header_text(current_lang) , :placeholder => " ", :rows => "5"}=params[card.header_text(current_lang)]
|
|
4
|
+
%label.absolute.top-3.-z-10.-translate-y-6.scale-75.transform.text-sm.text-gray-500.duration-300.peer-placeholder-shown:translate-y-0.peer-placeholder-shown:scale-100.peer-focus:left-0.peer-focus:-translate-y-6.peer-focus:scale-75.peer-focus:text-blue-600.peer-focus:dark:text-blue-500{:class => "origin-[0]"}= card.header_text(current_lang)
|
|
5
|
+
-else
|
|
6
|
+
.relative.z-0.mt-3
|
|
7
|
+
%input.peer.block.w-full.appearance-none.border-0.border-b.border-gray-500.bg-transparent.px-0.text-sm.text-gray-900.focus:border-blue-600.focus:outline-none.focus:ring-0{:class => "py-2.5", :name => card.header_text(current_lang), :placeholder => " " , "value" => params[card.header_text(current_lang)], :type => "text"}
|
|
8
|
+
%label.absolute.top-3.-z-10.-translate-y-6.scale-75.transform.text-sm.text-gray-500.duration-300.peer-placeholder-shown:translate-y-0.peer-placeholder-shown:scale-100.peer-focus:left-0.peer-focus:-translate-y-6.peer-focus:scale-75.peer-focus:text-blue-600.peer-focus:dark:text-blue-500{:class => "origin-[0]"}= card_field_name(card)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
.flex.mx-6.md:mx-12.mx-20.my-6.h-16.justify-between
|
|
2
|
+
.flex.items-center.gap-16
|
|
3
|
+
%a{:href => "/"}
|
|
4
|
+
%span.sr-only Home
|
|
5
|
+
=image_tag("breeze/home" , class: "h-10")
|
|
6
|
+
%a{:href => "/breeze/pages"}
|
|
7
|
+
%span.sr-only Breeze Home
|
|
8
|
+
=image_tag("breeze/breeze_logo" , class: "h-10")
|
|
9
|
+
|
|
10
|
+
%ul.flex.items-center.gap-6.text-lg
|
|
11
|
+
%li
|
|
12
|
+
%a.text-gray-500.transition{:class => "hover:text-gray-500/75", :href => breeze.pages_path}
|
|
13
|
+
Pages
|
|
14
|
+
%li
|
|
15
|
+
%a.text-gray-500.transition{:class => "hover:text-gray-500/75", :href => breeze.images_path}
|
|
16
|
+
Images
|
|
17
|
+
%li
|
|
18
|
+
%a.text-gray-500.transition{:class => "hover:text-gray-500/75", :href => breeze.styles_index_path}
|
|
19
|
+
Styles
|
|
20
|
+
%li
|
|
21
|
+
%a.text-gray-500.transition{:class => "hover:text-gray-500/75", :href => breeze.changes_index_path}
|
|
22
|
+
Changes
|
|
23
|
+
-if ENV['WARNING']
|
|
24
|
+
%li.ml-20
|
|
25
|
+
%a.bg-red-200.rounded.p-2{ href: "/"}
|
|
26
|
+
This is a read only version of breeze. Click to go back to the documentation
|
|
27
|
+
|
|
28
|
+
.flex.items-center.gap-16
|
|
29
|
+
= link_to breeze.changes_index_path do
|
|
30
|
+
%button.my-3.button{class: last_change_class}= last_change_text
|
|
31
|
+
|
|
32
|
+
- if main_app.respond_to? :destroy_member_session_path
|
|
33
|
+
= form_tag( main_app.destroy_member_session_path , {method: :delete } ) do
|
|
34
|
+
%button.flex.w-full.items-center.gap-2.rounded-lg.px-4.py-2.text-sm.text-blue-700.hover:bg-red-50{:role => "menuitem", :type => "submit"}
|
|
35
|
+
%svg.h-4.w-4{:fill => "none", :stroke => "currentColor", "stroke-width" => "2", :viewbox => "0 0 24 24", :xmlns => "http://www.w3.org/2000/svg"}
|
|
36
|
+
%path{:d => "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16", "stroke-linecap" => "round", "stroke-linejoin" => "round"}
|
|
37
|
+
Sign out
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-if flash.alert
|
|
2
|
+
#flash
|
|
3
|
+
.m-20.rounded.border-l-4.border-red-500.bg-red-50.p-4{:role => "alert"}
|
|
4
|
+
%strong.block.font-medium.text-red-700 Oops
|
|
5
|
+
%p.mt-2.text-sm.text-red-700
|
|
6
|
+
=flash.alert
|
|
7
|
+
|
|
8
|
+
-if flash.notice
|
|
9
|
+
#flash
|
|
10
|
+
.m-20.rounded-xl.border.border-gray-100.p-4.shadow-xl{:role => "alert"}
|
|
11
|
+
.flex.items-start.gap-4
|
|
12
|
+
%span.text-green-600
|
|
13
|
+
%svg.h-6.w-6{:fill => "none", :stroke => "currentColor", "stroke-width" => "1.5", :viewbox => "0 0 24 24", :xmlns => "http://www.w3.org/2000/svg"}
|
|
14
|
+
%path{:d => "M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z", "stroke-linecap" => "round", "stroke-linejoin" => "round"}
|
|
15
|
+
.flex-1
|
|
16
|
+
%strong.block.font-medium.text-gray-900 Ok
|
|
17
|
+
%p.mt-1.text-sm.text-gray-700
|
|
18
|
+
= flash.notice
|
|
19
|
+
:javascript
|
|
20
|
+
function hideNotice() {
|
|
21
|
+
const notification = document.querySelector('#flash')
|
|
22
|
+
if (notification) {
|
|
23
|
+
setInterval(function() {
|
|
24
|
+
notification.classList.add('hidden');
|
|
25
|
+
}, 5000);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
hideNotice();
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
!!!
|
|
2
|
+
%html
|
|
3
|
+
%head
|
|
4
|
+
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
|
5
|
+
%title Breeze CMS
|
|
6
|
+
%meta{:content => "width=device-width,initial-scale=1", :name => "viewport"}/
|
|
7
|
+
= csrf_meta_tags
|
|
8
|
+
= csp_meta_tag
|
|
9
|
+
= stylesheet_link_tag "tailwind"
|
|
10
|
+
= stylesheet_link_tag "breeze/breeze"
|
|
11
|
+
|
|
12
|
+
= javascript_include_tag "breeze_application"
|
|
13
|
+
|
|
14
|
+
- if false
|
|
15
|
+
%script{:src => "https://cdn.tailwindcss.com"}
|
|
16
|
+
|
|
17
|
+
%body
|
|
18
|
+
= render "layouts/breeze/header"
|
|
19
|
+
= render "layouts/breeze/messages"
|
|
20
|
+
= yield
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= yield %>
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
- :template: card_full_image
|
|
3
|
+
:header: Full background
|
|
4
|
+
:text: Text in box on top of the imag. Adjustable background
|
|
5
|
+
and text color to mix/match with images. Box is fixed height.
|
|
6
|
+
Images can be wide or square, for 2 column 800 wide,
|
|
7
|
+
3 column 600 , 4 column 400
|
|
8
|
+
:fields:
|
|
9
|
+
- header
|
|
10
|
+
- text
|
|
11
|
+
:options:
|
|
12
|
+
- background
|
|
13
|
+
- text_color
|
|
14
|
+
- text_align
|
|
15
|
+
- :template: card_large_image
|
|
16
|
+
:header: Image as is
|
|
17
|
+
:text: Image as is, ie no sizing
|
|
18
|
+
:fields:
|
|
19
|
+
- header
|
|
20
|
+
- text
|
|
21
|
+
:options:
|
|
22
|
+
- background
|
|
23
|
+
- text_color
|
|
24
|
+
- text_align
|
|
25
|
+
- :template: card_gap_square
|
|
26
|
+
:header: Narrow card with up down section
|
|
27
|
+
:text: Smaller image, large margins, possible subheader
|
|
28
|
+
Order turns it upside down, image bottom
|
|
29
|
+
Images can be wide or square, for 2 column 800 wide,
|
|
30
|
+
3 column 600 , 4 column 400
|
|
31
|
+
:fields:
|
|
32
|
+
- header
|
|
33
|
+
- text
|
|
34
|
+
:options:
|
|
35
|
+
- background
|
|
36
|
+
- text_color
|
|
37
|
+
- order
|
|
38
|
+
- text_align
|
|
39
|
+
- subheader
|
|
40
|
+
- :template: card_normal_square
|
|
41
|
+
:header: Standard card with square image
|
|
42
|
+
:text: Image, header, text, normal stuff. No margin between image and text.
|
|
43
|
+
Possible subheader. Text alignment option. Also option to turn upside
|
|
44
|
+
down with order.
|
|
45
|
+
Images can be wide or square, for 2 column 800 wide,
|
|
46
|
+
3 column 600 , 4 column 400
|
|
47
|
+
:fields:
|
|
48
|
+
- header
|
|
49
|
+
- text
|
|
50
|
+
:options:
|
|
51
|
+
- background
|
|
52
|
+
- text_color
|
|
53
|
+
- text_align
|
|
54
|
+
- subheader
|
|
55
|
+
- order
|
|
56
|
+
- button_link
|
|
57
|
+
- button_text
|
|
58
|
+
- :template: card_wide_square
|
|
59
|
+
:header: Sideway card with square image
|
|
60
|
+
:text: Much like standard square card, just turned sideways.
|
|
61
|
+
Works best for 2 or three columns. Wide pictures, unless there is a lot of text.
|
|
62
|
+
Images can be wide or square, for 2 column 600 wide,
|
|
63
|
+
3 columns 400
|
|
64
|
+
|
|
65
|
+
:fields:
|
|
66
|
+
- header
|
|
67
|
+
- text
|
|
68
|
+
:options:
|
|
69
|
+
- background
|
|
70
|
+
- text_color
|
|
71
|
+
- text_align
|
|
72
|
+
- subheader
|
|
73
|
+
- order
|
|
74
|
+
- button_link
|
|
75
|
+
- button_text
|
|
76
|
+
- :template: card_feature_normal
|
|
77
|
+
:header: Card looking feature
|
|
78
|
+
:text: For things where no image is available or apropriate.
|
|
79
|
+
Making lists a little more interesting to look at.
|
|
80
|
+
May use svg as image, or normal with transparent bg.
|
|
81
|
+
Small images or icons.
|
|
82
|
+
:fields:
|
|
83
|
+
- header
|
|
84
|
+
- text
|
|
85
|
+
:options:
|
|
86
|
+
- background
|
|
87
|
+
- text_color
|
|
88
|
+
- text_align
|
|
89
|
+
- button_link
|
|
90
|
+
- button_text
|
|
91
|
+
- :template: card_feature_box
|
|
92
|
+
:header: Feature card with box
|
|
93
|
+
:text: For things where no image is available or apropriate.
|
|
94
|
+
Making lists a little more interesting to look at.
|
|
95
|
+
May use svg as image.
|
|
96
|
+
:fields:
|
|
97
|
+
- header
|
|
98
|
+
- text
|
|
99
|
+
:options:
|
|
100
|
+
- background
|
|
101
|
+
- text_color
|
|
102
|
+
- text_align
|
|
103
|
+
- button_link
|
|
104
|
+
- button_text
|
|
105
|
+
- :template: card_normal_round
|
|
106
|
+
:header: Standard card with rounded look
|
|
107
|
+
:text: Otherwise quite similar to standard. But there is gap under the image.
|
|
108
|
+
Images can be wide or square, for 2 column 800 wide,
|
|
109
|
+
3 column 600 , 4 column 400
|
|
110
|
+
|
|
111
|
+
:fields:
|
|
112
|
+
- header
|
|
113
|
+
- text
|
|
114
|
+
:options:
|
|
115
|
+
- background
|
|
116
|
+
- text_color
|
|
117
|
+
- text_align
|
|
118
|
+
- button_link
|
|
119
|
+
- button_text
|
|
120
|
+
- :template: form_field
|
|
121
|
+
:header: A single field in a form
|
|
122
|
+
:text: The header is the Name of the field, the description
|
|
123
|
+
serves as a placeholder. (No image)
|
|
124
|
+
:fields:
|
|
125
|
+
- header
|
|
126
|
+
- text
|
|
127
|
+
:options:
|
|
128
|
+
- compulsory
|
|
129
|
+
- form_type
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
- :name: fixed
|
|
3
|
+
:description: Paralax effect where background stays fixed during scrolling
|
|
4
|
+
:values: on off
|
|
5
|
+
:default: false
|
|
6
|
+
:id: 1
|
|
7
|
+
- :name: columns
|
|
8
|
+
:description: Number of columns in a layout that supports cards
|
|
9
|
+
:values: 1 2 3 4 5 6
|
|
10
|
+
:default: 3
|
|
11
|
+
:id: 2
|
|
12
|
+
- :name: background
|
|
13
|
+
:description: Background colors. Light colors stay with black text. Solid colors
|
|
14
|
+
invert to white text.
|
|
15
|
+
:values: white none light_blue light_gray light_orange solid_blue solid_red solid_indigo
|
|
16
|
+
:default: none
|
|
17
|
+
:id: 3
|
|
18
|
+
- :name: text_color
|
|
19
|
+
:description: Text colors. Don't use with solid background colors. Same colors as
|
|
20
|
+
background available. Default none, meas as parent.
|
|
21
|
+
:values: none white black light_blue light_gray solid_black solid_blue solid_red
|
|
22
|
+
solid_indigo
|
|
23
|
+
:default: none
|
|
24
|
+
:id: 4
|
|
25
|
+
- :name: shade_color
|
|
26
|
+
:description: Color of transparent shaded area. The number means transparency.
|
|
27
|
+
:values: none black_25 white_25 light_red_25 light_blue_25 solid_blue_25 solid_red_25
|
|
28
|
+
:default: none
|
|
29
|
+
:id: 5
|
|
30
|
+
- :name: text_align
|
|
31
|
+
:description: Align text of children. Normal Word meaning
|
|
32
|
+
:values: left center right
|
|
33
|
+
:default: center
|
|
34
|
+
:id: 6
|
|
35
|
+
- :name: order
|
|
36
|
+
:description: For two column layout determine order of sub-cards Values of left
|
|
37
|
+
and right usually refer to where the image is For cards it can also mean up and
|
|
38
|
+
down
|
|
39
|
+
:values: left right
|
|
40
|
+
:default: left
|
|
41
|
+
:id: 7
|
|
42
|
+
- :name: margin
|
|
43
|
+
:description: Most sections have standard margin of 20. This option makes it possible
|
|
44
|
+
to remove that
|
|
45
|
+
:values: none small medium large
|
|
46
|
+
:default: large
|
|
47
|
+
:id: 8
|
|
48
|
+
- :name: button_text
|
|
49
|
+
:description: Text for an optional button. Must also set button_link
|
|
50
|
+
:values:
|
|
51
|
+
:default:
|
|
52
|
+
:id: 9
|
|
53
|
+
- :name: subheader
|
|
54
|
+
:description: Smaller header between Header and text
|
|
55
|
+
:values:
|
|
56
|
+
:default:
|
|
57
|
+
:id: 10
|
|
58
|
+
- :name: text
|
|
59
|
+
:description: Second text. Just a second paragraph
|
|
60
|
+
:values:
|
|
61
|
+
:default:
|
|
62
|
+
:id: 11
|
|
63
|
+
- :name: button_link
|
|
64
|
+
:description: Link for an option button. Must also set button_text. Link must be
|
|
65
|
+
a page name, ie only internal links allowed.
|
|
66
|
+
:values:
|
|
67
|
+
:default:
|
|
68
|
+
:id: 12
|
|
69
|
+
- :name: compulsory
|
|
70
|
+
:description: Form fields may be compulsory or not. By default they are.
|
|
71
|
+
:values: yes no
|
|
72
|
+
:default: false
|
|
73
|
+
:id: 13
|
|
74
|
+
- :name: form_type
|
|
75
|
+
:description: Form fields may have a type for special handling. The default is text
|
|
76
|
+
but message would be a longer text, and email checked to be a name.
|
|
77
|
+
:values: text message email phone date
|
|
78
|
+
:default: text
|
|
79
|
+
:id: 14
|
|
80
|
+
- :name: ok_message
|
|
81
|
+
:description: Message shown to the user when a form was submitted
|
|
82
|
+
:values:
|
|
83
|
+
:default:
|
|
84
|
+
:id: 15
|
|
85
|
+
- :name: handler
|
|
86
|
+
:description: Form handler
|
|
87
|
+
:values: FormHandler
|
|
88
|
+
:default: FormHandler
|
|
89
|
+
:id: 16
|
|
90
|
+
- :name: item_align
|
|
91
|
+
:description: Alignment of actual children. Usually some kind of boxes.
|
|
92
|
+
Does not affect text, see text_align
|
|
93
|
+
:values: left center right
|
|
94
|
+
:default: center
|
|
95
|
+
:id: 17
|
|
96
|
+
- :name: meta
|
|
97
|
+
:description: Meta tag for page
|
|
98
|
+
:values:
|
|
99
|
+
:default:
|
|
100
|
+
:id: 18
|
|
101
|
+
- :name: published_date
|
|
102
|
+
:description: Date when the blog is published
|
|
103
|
+
:type: date
|
|
104
|
+
:values:
|
|
105
|
+
:default:
|
|
106
|
+
:id: 19
|
|
107
|
+
- :name: date_precision
|
|
108
|
+
:description: Either the axact day, or something like in the middle
|
|
109
|
+
of October, or the end of December
|
|
110
|
+
:values: precise rough
|
|
111
|
+
:default: precise
|
|
112
|
+
:id: 20
|
|
113
|
+
- :name: image_align
|
|
114
|
+
:description: Alignment of images. This affect what stays visible
|
|
115
|
+
on different size screens. Default is center, but if the focus
|
|
116
|
+
of the image is left or right, that may be choosen.
|
|
117
|
+
:values: left-top left left-bottom top center bottom right-top right right-bottom
|
|
118
|
+
:default: center
|
|
119
|
+
:id: 21
|
|
120
|
+
- :name: text_columns
|
|
121
|
+
:description: Number of text columns in a newspaper style layout
|
|
122
|
+
:values: 2 3 4 5
|
|
123
|
+
:default: 3
|
|
124
|
+
:id: 22
|
|
125
|
+
- :name: slider_columns
|
|
126
|
+
:description: Number of slide columns in a slider
|
|
127
|
+
:values: 1 2 3 4
|
|
128
|
+
:default: 1
|
|
129
|
+
:id: 23
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
- :type: page
|
|
3
|
+
:description: A general page, may contain anykind of section.
|
|
4
|
+
No restrictions of any kind. No options either.
|
|
5
|
+
:options:
|
|
6
|
+
- meta
|
|
7
|
+
- :type: blog
|
|
8
|
+
:description: An news or similar article.
|
|
9
|
+
:section_template: blog_header
|
|
10
|
+
:options:
|
|
11
|
+
- published_date
|
|
12
|
+
- date_precision
|