breeze_cms 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +24 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/config/breeze_manifest.js +2 -0
  6. data/app/assets/images/breeze/breeze_logo.png +0 -0
  7. data/app/assets/images/breeze/card_preview/card_feature_box.png +0 -0
  8. data/app/assets/images/breeze/card_preview/card_feature_normal.png +0 -0
  9. data/app/assets/images/breeze/card_preview/card_full_image.png +0 -0
  10. data/app/assets/images/breeze/card_preview/card_gap_square.png +0 -0
  11. data/app/assets/images/breeze/card_preview/card_large_image.png +0 -0
  12. data/app/assets/images/breeze/card_preview/card_normal_round.png +0 -0
  13. data/app/assets/images/breeze/card_preview/card_normal_square.png +0 -0
  14. data/app/assets/images/breeze/card_preview/card_wide_square.png +0 -0
  15. data/app/assets/images/breeze/card_preview/form_field.png +0 -0
  16. data/app/assets/images/breeze/home.jpg +0 -0
  17. data/app/assets/images/breeze/section_preview/blog_header.png +0 -0
  18. data/app/assets/images/breeze/section_preview/form_section.png +0 -0
  19. data/app/assets/images/breeze/section_preview/section_cards.png +0 -0
  20. data/app/assets/images/breeze/section_preview/section_feature.png +0 -0
  21. data/app/assets/images/breeze/section_preview/section_full_image.png +0 -0
  22. data/app/assets/images/breeze/section_preview/section_full_up.png +0 -0
  23. data/app/assets/images/breeze/section_preview/section_half_image.png +0 -0
  24. data/app/assets/images/breeze/section_preview/section_large_image.png +0 -0
  25. data/app/assets/images/breeze/section_preview/section_news.png +0 -0
  26. data/app/assets/images/breeze/section_preview/section_slider.png +0 -0
  27. data/app/assets/images/breeze/section_preview/section_small_image.png +0 -0
  28. data/app/assets/images/breeze/section_preview/section_spacer.png +0 -0
  29. data/app/assets/images/breeze/section_preview/section_text.png +0 -0
  30. data/app/assets/javascript/breeze_application.js.rb +101 -0
  31. data/app/assets/javascript/marked.js +6 -0
  32. data/app/assets/stylesheets/breeze/breeze.css +3633 -0
  33. data/app/assets/stylesheets/breeze/breeze.email.css +1344 -0
  34. data/app/assets/stylesheets/breeze.tailwind.css +2 -0
  35. data/app/assets/stylesheets/breeze_tailwind_styles.css +21 -0
  36. data/app/assets/stylesheets/tailwind_base.css +3 -0
  37. data/app/controllers/breeze/application_controller.rb +4 -0
  38. data/app/controllers/breeze/breeze_controller.rb +16 -0
  39. data/app/controllers/breeze/cards_controller.rb +58 -0
  40. data/app/controllers/breeze/changes_controller.rb +45 -0
  41. data/app/controllers/breeze/form_controller.rb +67 -0
  42. data/app/controllers/breeze/images_controller.rb +100 -0
  43. data/app/controllers/breeze/pages_controller.rb +66 -0
  44. data/app/controllers/breeze/sections_controller.rb +96 -0
  45. data/app/controllers/breeze/styles_controller.rb +11 -0
  46. data/app/controllers/breeze/translations_controller.rb +56 -0
  47. data/app/controllers/breeze/view_controller.rb +10 -0
  48. data/app/helpers/breeze/breeze_helper.rb +54 -0
  49. data/app/helpers/breeze/cards_helper.rb +11 -0
  50. data/app/helpers/breeze/changes_helper.rb +29 -0
  51. data/app/helpers/breeze/form_helper.rb +5 -0
  52. data/app/helpers/breeze/images_helper.rb +57 -0
  53. data/app/helpers/breeze/options_helper.rb +120 -0
  54. data/app/helpers/breeze/pages_helper.rb +5 -0
  55. data/app/helpers/breeze/sections_helper.rb +14 -0
  56. data/app/helpers/breeze/styles_helper.rb +4 -0
  57. data/app/helpers/breeze/translations_helper.rb +14 -0
  58. data/app/helpers/breeze/view_helper.rb +74 -0
  59. data/app/jobs/breeze/application_job.rb +4 -0
  60. data/app/mailers/breeze/application_mailer.rb +6 -0
  61. data/app/models/breeze/active_base.rb +34 -0
  62. data/app/models/breeze/active_yaml.rb +143 -0
  63. data/app/models/breeze/card.rb +90 -0
  64. data/app/models/breeze/card_style.rb +12 -0
  65. data/app/models/breeze/change_set.rb +58 -0
  66. data/app/models/breeze/image.rb +104 -0
  67. data/app/models/breeze/option_definition.rb +43 -0
  68. data/app/models/breeze/page.rb +97 -0
  69. data/app/models/breeze/page_style.rb +12 -0
  70. data/app/models/breeze/section.rb +137 -0
  71. data/app/models/breeze/section_style.rb +17 -0
  72. data/app/models/breeze/shared_base.rb +20 -0
  73. data/app/models/breeze/style.rb +17 -0
  74. data/app/models/breeze/translation.rb +83 -0
  75. data/app/models/breeze/view_base.rb +134 -0
  76. data/app/views/breeze/cards/index.haml +84 -0
  77. data/app/views/breeze/changes/index.haml +52 -0
  78. data/app/views/breeze/form/_editor.haml +33 -0
  79. data/app/views/breeze/form/form.haml +8 -0
  80. data/app/views/breeze/images/_editor.haml +144 -0
  81. data/app/views/breeze/images/index.haml +83 -0
  82. data/app/views/breeze/images/new.haml +12 -0
  83. data/app/views/breeze/images/show.haml +60 -0
  84. data/app/views/breeze/pages/_sections.rabl +4 -0
  85. data/app/views/breeze/pages/index.haml +49 -0
  86. data/app/views/breeze/pages/show.haml +85 -0
  87. data/app/views/breeze/sections/_option_form_date.haml +4 -0
  88. data/app/views/breeze/sections/_option_form_select.haml +4 -0
  89. data/app/views/breeze/sections/_option_form_text.haml +4 -0
  90. data/app/views/breeze/sections/_overlay.haml +33 -0
  91. data/app/views/breeze/sections/_section.rabl +5 -0
  92. data/app/views/breeze/sections/_sections_pagination.haml +29 -0
  93. data/app/views/breeze/sections/index.haml +88 -0
  94. data/app/views/breeze/sections/new.haml +12 -0
  95. data/app/views/breeze/sections/select_card_template.haml +13 -0
  96. data/app/views/breeze/sections/select_template.haml +15 -0
  97. data/app/views/breeze/sections/show.haml +91 -0
  98. data/app/views/breeze/styles/_options.haml +9 -0
  99. data/app/views/breeze/styles/index.haml +84 -0
  100. data/app/views/breeze/translations/_row.haml +29 -0
  101. data/app/views/breeze/translations/show.haml +79 -0
  102. data/app/views/breeze/view/_blog_header.haml +13 -0
  103. data/app/views/breeze/view/_form_section.haml +21 -0
  104. data/app/views/breeze/view/_section_cards.haml +17 -0
  105. data/app/views/breeze/view/_section_feature.haml +13 -0
  106. data/app/views/breeze/view/_section_full_image.haml +10 -0
  107. data/app/views/breeze/view/_section_full_up.haml +11 -0
  108. data/app/views/breeze/view/_section_half_image.haml +13 -0
  109. data/app/views/breeze/view/_section_large_image.haml +13 -0
  110. data/app/views/breeze/view/_section_news.haml +16 -0
  111. data/app/views/breeze/view/_section_slider.haml +51 -0
  112. data/app/views/breeze/view/_section_small_image.haml +11 -0
  113. data/app/views/breeze/view/_section_spacer.haml +1 -0
  114. data/app/views/breeze/view/_section_text.haml +17 -0
  115. data/app/views/breeze/view/cards/_card_feature_box.haml +13 -0
  116. data/app/views/breeze/view/cards/_card_feature_normal.haml +7 -0
  117. data/app/views/breeze/view/cards/_card_full_image.haml +10 -0
  118. data/app/views/breeze/view/cards/_card_gap_square.haml +11 -0
  119. data/app/views/breeze/view/cards/_card_large_image.haml +6 -0
  120. data/app/views/breeze/view/cards/_card_normal_round.haml +8 -0
  121. data/app/views/breeze/view/cards/_card_normal_square.haml +9 -0
  122. data/app/views/breeze/view/cards/_card_wide_square.haml +8 -0
  123. data/app/views/breeze/view/cards/_form_field.haml +8 -0
  124. data/app/views/breeze/view/elements/_button.haml +4 -0
  125. data/app/views/breeze/view/page.haml +2 -0
  126. data/app/views/layouts/breeze/_header.haml +37 -0
  127. data/app/views/layouts/breeze/_messages.haml +28 -0
  128. data/app/views/layouts/breeze/application.haml +20 -0
  129. data/app/views/layouts/mailer.html.haml +8 -0
  130. data/app/views/layouts/mailer.text.erb +1 -0
  131. data/config/breeze/card_styles.yml +129 -0
  132. data/config/breeze/option_definitions.yml +129 -0
  133. data/config/breeze/page_styles.yml +12 -0
  134. data/config/breeze/section_styles.yml +199 -0
  135. data/config/initializers/breeze.rb +13 -0
  136. data/config/initializers/rabl.rb +31 -0
  137. data/config/initializers/simple_form.rb +212 -0
  138. data/config/routes.rb +40 -0
  139. data/config/tailwind.config.js +17 -0
  140. data/config/tailwind.email.js +14 -0
  141. data/lib/breeze/engine.rb +97 -0
  142. data/lib/breeze/shared_helper.rb +44 -0
  143. data/lib/breeze/version.rb +3 -0
  144. data/lib/breeze.rb +104 -0
  145. data/lib/generators/breeze/install/install_generator.rb +19 -0
  146. data/lib/generators/breeze/install/templates/empty.yml +1 -0
  147. data/lib/generators/breeze/install/templates/initializer.rb +70 -0
  148. data/lib/generators/breeze/update/update_generator.rb +11 -0
  149. data/lib/tasks/condense.rake +60 -0
  150. data/lib/tasks/consistency.rake +84 -0
  151. 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,4 @@
1
+ - if section.has_option?("button_text") and section.has_option?("button_link")
2
+ = link_to section.option("button_link") do
3
+ .mr-3.inline-block.rounded-lg.px-4.py-3.text-md.font-medium.border.border-gray-400.bg-green-700.hover:bg-blue-800
4
+ = section.option("button_text")
@@ -0,0 +1,2 @@
1
+ - @page.sections.each do |section|
2
+ = render_section( section )
@@ -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,8 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}/
5
+ %style
6
+ = Rails.application.assets_manifest.find_sources('breeze/breeze.email.css').first.to_s.html_safe
7
+ %body
8
+ = 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