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.
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