breeze_cms 1.0.3 → 1.1.0

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/breeze/card_preview/big_card.png +0 -0
  3. data/app/assets/images/breeze/card_preview/card_image_wide.png +0 -0
  4. data/app/assets/stylesheets/breeze/breeze.css +301 -188
  5. data/app/assets/stylesheets/breeze/breeze.email.css +158 -39
  6. data/app/controllers/breeze/pages_controller.rb +8 -2
  7. data/app/controllers/breeze/translations_controller.rb +9 -2
  8. data/app/helpers/breeze/view_helper.rb +9 -3
  9. data/app/models/breeze/active_yaml.rb +1 -0
  10. data/app/models/breeze/page.rb +6 -0
  11. data/app/models/breeze/section.rb +5 -0
  12. data/app/models/breeze/translation.rb +15 -1
  13. data/app/models/breeze/view_base.rb +6 -1
  14. data/app/views/breeze/images/show.haml +4 -2
  15. data/app/views/breeze/pages/index.haml +5 -1
  16. data/app/views/breeze/translations/_row.haml +8 -0
  17. data/app/views/breeze/translations/show.haml +4 -4
  18. data/app/views/breeze/view/_form_section.haml +11 -9
  19. data/app/views/breeze/view/_section_faq.haml +11 -8
  20. data/app/views/breeze/view/_section_full_up.haml +3 -2
  21. data/app/views/breeze/view/_section_half_slider.haml +5 -3
  22. data/app/views/breeze/view/_section_slider.haml +6 -3
  23. data/app/views/breeze/view/cards/_big_card.haml +10 -0
  24. data/app/views/breeze/view/cards/_card_image_wide.haml +10 -0
  25. data/app/views/breeze/view/cards/_faq_item.haml +3 -3
  26. data/app/views/breeze/view/cards/_form_field.haml +4 -4
  27. data/app/views/layouts/breeze/_header.haml +1 -1
  28. data/config/breeze/card_styles.yml +43 -0
  29. data/config/breeze/option_definitions.yml +3 -3
  30. data/config/breeze/section_styles.yml +4 -0
  31. data/config/initializers/deepl.rb +5 -0
  32. data/config/routes.rb +5 -2
  33. data/lib/breeze/engine.rb +1 -1
  34. data/lib/breeze/version.rb +1 -1
  35. data/lib/breeze.rb +3 -1
  36. metadata +30 -5
@@ -23,7 +23,11 @@
23
23
  %td.whitespace-nowrap.px-4.py-2.text-gray-700
24
24
  = page.sections.length
25
25
  %td.whitespace-nowrap.px-4.py-2.text-gray-700
26
- = link_to page.missing_translations , breeze.translation_path(page.id)
26
+ .flex.justify-between
27
+ = link_to page.missing_translations , breeze.translation_path(page.id)
28
+ = form_tag( breeze.page_translate_path(page_id: page.id)) do
29
+ %button.ml-2.rounded.bg-amber-100.px-3.text-xs.font-medium.text-amber-700{:class => "py-1.5"}
30
+ Auto
27
31
  %td.whitespace-nowrap.px-4.py-2.text-gray-700
28
32
  =page.updated_by
29
33
  - s = page.sections_update
@@ -5,14 +5,22 @@
5
5
  %button{onclick: "button_ok(event)" , id: "#{trans.id}_idbutton"}
6
6
  = trans.object.index_name
7
7
  = trans.language
8
+ - if trans.is_manual?
9
+ .bg-orange-500.py-1.px-2.rounded-md
10
+ manual
8
11
  .grow
9
12
  .text{id: "#{trans.id}_headerfield" , onclick: "text_to_form(event)"}
10
13
  = trans.header
14
+ = form_tag( breeze.translation_auto_path(translation_id: trans.id)) do
15
+ %button.button.change.mt-4
16
+ Auto
11
17
  .grow
12
18
  .text{id: "#{trans.id}_textfield" , onclick: "text_to_form(event)" }
13
19
  = trans.text
14
20
  .hidden.form{id: "#{trans.id}_form"}
21
+ = trans.object.header
15
22
  %input.mt-1.w-full.rounded-md.border-gray-200.bg-white.text-sm.text-gray-800.shadow-sm{ id: "#{trans.id}_header", type: "text" , value: trans.header}
23
+ = trans.object.text
16
24
  %textarea.mt-2.w-full.rounded-lg.border-gray-200.align-top.shadow-sm.sm:text-sm{ cols: 100 ,
17
25
  id: "#{trans.id}_text" , rows: rows(trans.text) }
18
26
  = trans.text
@@ -1,13 +1,13 @@
1
1
  .mx-6.md:mx-12.mx-20.flex.h-16.items-center.gap-16
2
2
  .text-xl.font-bold.text-gray-900
3
- - previous = @page.previous_page
4
- = link_to( "<< previous (#{previous.name})" , breeze.translation_path(id: previous.id) )
3
+ - if previous = @page.previous_page
4
+ = link_to( "<< previous (#{previous&.name})" , breeze.translation_path(id: previous&.id) )
5
5
  .text-xl.font-bold.text-gray-900
6
6
  Page
7
7
  = @page.name
8
8
  .text-xl.font-bold.text-gray-900
9
- - next_page = @page.next_page
10
- = link_to( "(#{next_page.name}) next >> " , breeze.translation_path(id: next_page.id) )
9
+ - if next_page = @page.next_page
10
+ = link_to( "(#{next_page.name}) next >> " , breeze.translation_path(id: next_page.id) )
11
11
 
12
12
  -Breeze.language_strings.each do |lang|
13
13
  -@page.sections.each do |section|
@@ -1,10 +1,12 @@
1
- .flex.flex-col.m-5.md:m-12.lg:m-20{ options(section , :background , :text_color)}
2
- .flex.items-center.justify-center.flex-1
3
- .max-w-prose.px-4.mt-16.mx-auto.text-center
4
- %h1.text-4xl.font-medium= section.header_text(current_lang)
5
- .mt-4.text-lg.pt-10{ prose_classes }
6
- = markdown(section,current_lang)
7
- .flex.items-center.justify-start.m-10.md:m-20
1
+ %section{ options(section , :background , :margin) , id: section.type_id}
2
+ .flex{ options(section , :item_align )}
3
+ .px-4.py-4.md:py-10.lg:py-16.mx-5.md:mx-12.lg:mx-20{options(section , :text_align , :text_color)}
4
+ %h1.section_header.text-2xl.font-bold.tracking-tight.sm:text-4xl
5
+ = section.header_text(current_lang)
6
+ -unless( section.text_text(current_lang).blank?)
7
+ .section_text.mt-4.text-lg.pt-10{ prose_classes }
8
+ = markdown(section,current_lang)
9
+ .flex.items-center.justify-start.mx-10.md:mx-20.mb-20
8
10
  .mx-auto.w-full.max-w-4xl{class: "max-w-[90%]"}
9
11
  = form_tag( main_app.post_form_path , {class: "mt-10" }) do
10
12
  - challenge = rand(8)
@@ -16,8 +18,8 @@
16
18
  = render( template , card: card)
17
19
  .grid.gap-6.md:grid-cols-2
18
20
  .relative.z-0.mt-10
19
- %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 => "challenge", :placeholder => " ", :type => "text"}
20
- %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]"}
21
+ %input.peer.block.w-full.appearance-none.border-0.border-b.border-gray-500.bg-transparent.px-0.text-gray-900.focus:border-blue-600.focus:outline-none.focus:ring-0{:class => "py-2.5", :name => "challenge", :placeholder => " ", :type => "text"}
22
+ %label.absolute.top-3.-z-10.-translate-y-6.scale-75.transform.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]"}
21
23
  = I18n.t("anti_bot")
22
24
  = challenge
23
25
  +
@@ -1,22 +1,25 @@
1
- %section.m-6.md:m-12.lg:m-20{ options(section , :background , :text_color), id: section.type_id}
1
+ %section.m-6.md:m-12.lg:m-20{ options(section , :background , :text_color ), id: section.type_id}
2
2
  .flex.justify-center
3
- .px-4.py-4.md:py-10.lg:py-16{ options(section , :text_align)}
3
+ .px-4.py-4.md:py-10.lg:py-16{ options(section , :text_align , :margin)}
4
4
  %h1.section_header.text-2xl.font-bold.tracking-tight.sm:text-4xl
5
5
  = section.header_text(current_lang)
6
6
  - unless section.text.blank?
7
7
  .section_text.text-lg.pt-10{ prose_classes }
8
8
  = markdown(section , current_lang)
9
9
  - template = "breeze/view/cards/" + section.card_template
10
- .max-w-3xl.mx-auto.mt-8.space-y-4.md:mt-16
11
- - section.cards.each_with_index do |card, index|
12
- = render( template , card: card , index: index + 1)
10
+ .flex.justify-center
11
+ .mt-8.space-y-4.md:mt-16{ options(section , :margin)}
12
+ - section.cards.each do |card|
13
+ = render( template , card: card )
13
14
 
14
15
  :javascript
16
+ var section_id = "question#{section.id}" ;
15
17
  // JavaScript to toggle the answers and rotate the arrows
16
- document.querySelectorAll('[id^="question"]').forEach(function(button, index) {
18
+ document.querySelectorAll('[id^="question#{section.id}"]').forEach(function(button, index) {
17
19
  button.addEventListener('click', function() {
18
- var answer = document.getElementById('answer' + (index + 1));
19
- var arrow = document.getElementById('arrow' + (index + 1));
20
+ var ind = button.id.split("_")[1];
21
+ var answer = document.getElementById('answer#{section.id}_' + ind);
22
+ var arrow = document.getElementById('arrow#{section.id}_' + ind);
20
23
 
21
24
  if (answer.style.display === 'none' || answer.style.display === '') {
22
25
  answer.style.display = 'block';
@@ -3,6 +3,7 @@
3
3
  .px-4.py-4.md:py-10.lg:py-16.mx-5.md:mx-12.lg:mx-20{options(section , :text_align , :text_color)}
4
4
  %h1.section_header.text-2xl.font-bold.tracking-tight.sm:text-4xl
5
5
  = section.header_text(current_lang)
6
- .section_text.mt-4.text-lg.pt-10{ prose_classes }
7
- = markdown(section,current_lang)
6
+ -unless( section.text_text(current_lang).blank?)
7
+ .section_text.mt-4.text-lg.pt-10{ prose_classes }
8
+ = markdown(section,current_lang)
8
9
  =view_button(section , "my-4")
@@ -11,8 +11,8 @@
11
11
  .swiper-button-prev
12
12
  .swiper-button-next
13
13
 
14
- .p-8.md:p-12.lg:px-16.lg:py-24{ background_option(section)}
15
- .mx-auto.max-w-xl{options(section , :text_align , :text_color)}
14
+ .content-center.px-8.md:px-12.lg:px-16.lg:py-8{ background_option(section)}
15
+ .max-w-xl{options(section , :text_align , :text_color)}
16
16
  %h2.section_header.text-2xl.font-bold.md:text-4xl
17
17
  = section.header_text(current_lang)
18
18
  .section_text.mt-8{ prose_classes }
@@ -30,7 +30,9 @@
30
30
  loop: true,
31
31
  speed: 1500,
32
32
  breakpoints: breaks ,
33
- autoplay: true,
33
+ autoplay: {
34
+ delay: #{1200 + rand(600)} ,
35
+ },
34
36
  pagination: {
35
37
  el: '.swiper-pagination',
36
38
  },
@@ -4,8 +4,9 @@
4
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
5
  %h1.section_header.text-2xl.font-bold.tracking-tight.sm:text-4xl
6
6
  = section.header_text(current_lang)
7
- .section_text.mt-4.text-lg.pt-10{ prose_classes }
8
- = markdown(section,current_lang)
7
+ -unless( section.text_text(current_lang).blank?)
8
+ .section_text.mt-4.text-lg.pt-10{ prose_classes }
9
+ = markdown(section,current_lang)
9
10
  =view_button(section , "my-4")
10
11
  .swiper{ class: "swiper-#{section.id}"}
11
12
  .swiper-wrapper
@@ -29,7 +30,9 @@
29
30
  loop: true,
30
31
  speed: 1500,
31
32
  breakpoints: breaks ,
32
- autoplay: true,
33
+ autoplay: {
34
+ delay: #{slider_speed(section)} ,
35
+ },
33
36
  pagination: {
34
37
  el: '.swiper-pagination',
35
38
  },
@@ -0,0 +1,10 @@
1
+ .flex.justify-center.flex-col.lg:flex-row{options(card , :margin , :background ), id: card.type_id}
2
+ .flex.justify-center.h-60.w-full.overflow-hidden{order_option(card, "lg:w-1/3")}
3
+ = image_for(card ,"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(card, "lg:w-2/3")}
5
+ -unless( card.header_text(current_lang).blank?)
6
+ %h2.section_header.text-4xl.font-bold.text-left.mb-4.lg:mb-8{text_align_option(card)}= card.header_text(current_lang)
7
+ -unless( card.text_text(current_lang).blank?)
8
+ .section_text.mt-3{ prose_classes }
9
+ = markdown(card,current_lang)
10
+ =view_button(card , "my-4")
@@ -0,0 +1,10 @@
1
+ %section.overflow-hidden.bg-cover.bg-no-repeat{bg(card , "h-full") , id: card.type_id}
2
+ .px-4.py-24.sm:px-6.lg:px-8
3
+ .flex{ item_align_option( card )}
4
+ .p-8.md:p-12.lg:px-16.lg:py-24{options(card , :shade )}
5
+ .mx-auto.max-w-xl{ options(card , :text_color, :text_align)}
6
+ %h2.section_header.text-2xl.font-bold.md:text-5xl
7
+ = card.header_text(current_lang)
8
+ .section_text.sm:mt-4.text-2xl{ prose_classes }
9
+ = markdown(card,current_lang)
10
+ =view_button(card , "my-4")
@@ -1,9 +1,9 @@
1
1
  .transition-all.duration-200.bg-white.border.border-gray-200.shadow-lg.cursor-pointer.hover:bg-gray-50{options(card, :text_color)}
2
2
  %button.flex.items-center.justify-between.w-full.px-4.py-5.sm:p-6{"data-state" => "closed",
3
- :type => "button" , id: "question#{index}" }
3
+ :type => "button" , id: "question#{card.section.id}_#{card.id}" }
4
4
  %span.flex.text-lg.font-semibold.text-black= card.header_text(current_lang)
5
- %svg.w-6.h-6.text-gray-400{fill: :none, stroke: :currentColor, id: "arrow#{index}",
5
+ %svg.w-6.h-6.text-gray-400{fill: :none, stroke: :currentColor, id: "arrow#{card.section.id}_#{card.id}",
6
6
  :viewbox => "0 0 24 24", :xmlns => "http://www.w3.org/2000/svg"}
7
7
  %path{:d => "M19 9l-7 7-7-7", "stroke-linecap" => "round", "stroke-linejoin" => "round", "stroke-width" => "2"}
8
- .px-4.pb-5.sm:px-6.sm:pb-6{style: "display:none" , id: "answer#{index}"}
8
+ .px-4.pb-5.sm:px-6.sm:pb-6{style: "display:none" , id: "answer#{card.section.id}_#{card.id}"}
9
9
  %p= markdown(card,current_lang)
@@ -1,8 +1,8 @@
1
1
  -if card.option("form_type") == "message"
2
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)
3
+ %textarea.peer.block.w-full.appearance-none.border-0.border-b.border-gray-500.bg-transparent.px-0.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-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
5
  -else
6
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)
7
+ %input.peer.block.w-full.appearance-none.border-0.border-b.border-gray-500.bg-transparent.px-0.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-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)
@@ -3,7 +3,7 @@
3
3
  %a{:href => "/"}
4
4
  %span.sr-only Home
5
5
  =image_tag("breeze/home" , class: "h-10")
6
- %a{:href => "/breeze/pages"}
6
+ %a{:href => breeze.pages_path}
7
7
  %span.sr-only Breeze Home
8
8
  =image_tag("breeze/breeze_logo" , class: "h-10")
9
9
 
@@ -43,6 +43,27 @@
43
43
  - background
44
44
  - text_color
45
45
  - text_align
46
+ - :template: card_image_wide
47
+ :header: Full image header with adjustable text
48
+ :text: Really a section for use in slider, large picture background with
49
+ Header and text on top.
50
+ Adjustable text text alignment (left, center, right).
51
+ Text may be slightly shaded for readability,
52
+ text color can be changed too.
53
+ Image should be 1600 wide and can be between 400 and 900 for
54
+ different looks
55
+ :fields:
56
+ - header
57
+ - text
58
+ :options:
59
+ - fixed
60
+ - text_color
61
+ - text_align
62
+ - item_align
63
+ - image_align
64
+ - shade_color
65
+ - button_link
66
+ - button_text
46
67
  - :template: card_large_image
47
68
  :header: Image as is
48
69
  :text: Image as is, ie no sizing
@@ -133,3 +154,25 @@
133
154
  :options:
134
155
  - background
135
156
  - text_color
157
+ - :template: big_card
158
+ :header: Section card with one third image header and larger text area.
159
+ :text: Card to add text heacy content to slider. Not really in column
160
+ Smaller picture with Header and text offset that use more space.
161
+ Adjustable text alignment (left, center, right).
162
+ Text section may have background color.
163
+ Text color can be changed too
164
+ :fields:
165
+ - header
166
+ - text
167
+ :options:
168
+ :fields:
169
+ - header
170
+ - text
171
+ :options:
172
+ - margin
173
+ - order
174
+ - text_color
175
+ - text_align
176
+ - background
177
+ - button_link
178
+ - button_text
@@ -41,8 +41,8 @@
41
41
  :id: 7
42
42
  - :name: margin
43
43
  :description: Most sections have standard margin of 20. This option makes it possible
44
- to remove that
45
- :values: none small medium large
44
+ to remove that. Also auto is possible with varying results (depends on content)
45
+ :values: none small medium large auto
46
46
  :default: large
47
47
  :id: 8
48
48
  - :name: button_text
@@ -135,7 +135,7 @@
135
135
  - :name: main_image
136
136
  :description: Image that should be shown in posts (fb)
137
137
  Should be the number of a breeze picture,
138
- ie what is in the url eg 381 for /breeze/images/381
138
+ ie what is in the url eg 381 for /breeze/images/381
139
139
  :values:
140
140
  :default:
141
141
  :id: 26
@@ -199,6 +199,9 @@
199
199
  - handler
200
200
  - background
201
201
  - text_color
202
+ - margin
203
+ - text_align
204
+ - item_align
202
205
  - :template: blog_header
203
206
  :header: Start of blog, with image left or right
204
207
  :text: Image on one side, header and text on the other.
@@ -225,6 +228,7 @@
225
228
  - background
226
229
  - text_color
227
230
  - text_align
231
+ - margin
228
232
  - :template: section_slider
229
233
  :header: Slider with optional header with text
230
234
  :text: Slider slides any (number) of cards. Columns means how many
@@ -0,0 +1,5 @@
1
+ require "deepl"
2
+ DeepL.configure do |config|
3
+ config.auth_key = "#{Rails.application.credentials.deepl}"
4
+ config.host = 'https://api-free.deepl.com' # Default value is 'https://api.deepl.com'
5
+ end if Rails.application.credentials.deepl
data/config/routes.rb CHANGED
@@ -9,6 +9,7 @@ Breeze::Engine.routes.draw do
9
9
 
10
10
 
11
11
  resources :pages , except: [:edit , :new] , shallow: true do
12
+ post :translate
12
13
  resources :sections , except: [:new] do
13
14
  post :new #new is post because it already create the section
14
15
  get :set_image
@@ -36,6 +37,8 @@ Breeze::Engine.routes.draw do
36
37
  post :scale
37
38
  end
38
39
 
39
- resources :translations
40
-
40
+ resources :translations do
41
+ post :auto
42
+ end
43
+
41
44
  end
data/lib/breeze/engine.rb CHANGED
@@ -66,7 +66,7 @@ module ActionDispatch::Routing
66
66
  Rails.application.routes.draw do
67
67
  begin
68
68
  if options[:root]
69
- root "breeze/view#page" , id: 'index'
69
+ root "breeze/view#page" , id: 'index'
70
70
  end
71
71
  Breeze.language_strings.each do |lang|
72
72
  get "/#{lang}/:id" , to: "breeze/view#page" , lang: lang , id: :id
@@ -1,3 +1,3 @@
1
1
  module Breeze
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/breeze.rb CHANGED
@@ -44,7 +44,9 @@ module Breeze
44
44
  @@margin = { "none" => "m-0",
45
45
  "small" => " m-2 md:m-4 lg:6 xl:m-8",
46
46
  "medium" => "m-5 md:m-8 lg:10 xl:m-14",
47
- "large" => " m-8 md:m-12 lg:16 xl:m-20",}
47
+ "large" => " m-8 md:m-12 lg:16 xl:m-20",
48
+ "auto" => "mx-auto" ,
49
+ }
48
50
 
49
51
  # background colors
50
52
  mattr_accessor :background
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: breeze_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Torsten
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-29 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rails
@@ -161,14 +161,14 @@ dependencies:
161
161
  requirements:
162
162
  - - "~>"
163
163
  - !ruby/object:Gem::Version
164
- version: '2.7'
164
+ version: '3.3'
165
165
  type: :runtime
166
166
  prerelease: false
167
167
  version_requirements: !ruby/object:Gem::Requirement
168
168
  requirements:
169
169
  - - "~>"
170
170
  - !ruby/object:Gem::Version
171
- version: '2.7'
171
+ version: '3.3'
172
172
  - !ruby/object:Gem::Dependency
173
173
  name: rabl
174
174
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +183,26 @@ dependencies:
183
183
  - - "~>"
184
184
  - !ruby/object:Gem::Version
185
185
  version: '0.15'
186
+ - !ruby/object:Gem::Dependency
187
+ name: deepl-rb
188
+ requirement: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '3.6'
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: 3.6.1
196
+ type: :runtime
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '3.6'
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: 3.6.1
186
206
  description: |-
187
207
  Breeze integrates a content editor into the rails workflow and lets developers define the layouts they create. It renders pages, that are made up of sections, that may include cards. Breeze also manages images, even lets you edit them, and manages translations when you go international.
188
208
  All data is stored in yaml files, images as assets.
@@ -197,10 +217,12 @@ files:
197
217
  - Rakefile
198
218
  - app/assets/config/breeze_manifest.js
199
219
  - app/assets/images/breeze/breeze_logo.png
220
+ - app/assets/images/breeze/card_preview/big_card.png
200
221
  - app/assets/images/breeze/card_preview/card_feature_box.png
201
222
  - app/assets/images/breeze/card_preview/card_feature_normal.png
202
223
  - app/assets/images/breeze/card_preview/card_full_image.png
203
224
  - app/assets/images/breeze/card_preview/card_gap_square.png
225
+ - app/assets/images/breeze/card_preview/card_image_wide.png
204
226
  - app/assets/images/breeze/card_preview/card_large_image.png
205
227
  - app/assets/images/breeze/card_preview/card_normal_round.png
206
228
  - app/assets/images/breeze/card_preview/card_normal_square.png
@@ -310,10 +332,12 @@ files:
310
332
  - app/views/breeze/view/_section_small_image.haml
311
333
  - app/views/breeze/view/_section_spacer.haml
312
334
  - app/views/breeze/view/_section_text.haml
335
+ - app/views/breeze/view/cards/_big_card.haml
313
336
  - app/views/breeze/view/cards/_card_feature_box.haml
314
337
  - app/views/breeze/view/cards/_card_feature_normal.haml
315
338
  - app/views/breeze/view/cards/_card_full_image.haml
316
339
  - app/views/breeze/view/cards/_card_gap_square.haml
340
+ - app/views/breeze/view/cards/_card_image_wide.haml
317
341
  - app/views/breeze/view/cards/_card_large_image.haml
318
342
  - app/views/breeze/view/cards/_card_normal_round.haml
319
343
  - app/views/breeze/view/cards/_card_normal_square.haml
@@ -333,6 +357,7 @@ files:
333
357
  - config/breeze/page_styles.yml
334
358
  - config/breeze/section_styles.yml
335
359
  - config/initializers/breeze.rb
360
+ - config/initializers/deepl.rb
336
361
  - config/initializers/rabl.rb
337
362
  - config/initializers/simple_form_tailwind.rb
338
363
  - config/locales/breeze_en.yml
@@ -371,7 +396,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
371
396
  - !ruby/object:Gem::Version
372
397
  version: '0'
373
398
  requirements: []
374
- rubygems_version: 3.6.2
399
+ rubygems_version: 4.0.17
375
400
  specification_version: 4
376
401
  summary: The tailwind based, developers CMS
377
402
  test_files: []