breeze_cms 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|