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,33 @@
|
|
1
|
+
:javascript
|
2
|
+
var authenticity_token = "#{form_authenticity_token}"
|
3
|
+
|
4
|
+
:opal
|
5
|
+
Document.ready? do
|
6
|
+
init_section
|
7
|
+
end
|
8
|
+
|
9
|
+
:css
|
10
|
+
#overlay {
|
11
|
+
position: fixed;
|
12
|
+
display: none;
|
13
|
+
width: 100%;
|
14
|
+
height: 100%;
|
15
|
+
top: 0;
|
16
|
+
left: 0;
|
17
|
+
right: 0;
|
18
|
+
bottom: 0;
|
19
|
+
background-color: rgba(0,0,0,0.5);
|
20
|
+
z-index: 2;
|
21
|
+
cursor: pointer;
|
22
|
+
}
|
23
|
+
|
24
|
+
#text {
|
25
|
+
position: absolute;
|
26
|
+
}
|
27
|
+
#overlay
|
28
|
+
#text.text-gray-800
|
29
|
+
%input.header.mt-1.w-full.rounded-md.border-gray-200.bg-white.shadow-sm{ id: "_header", type: "text" , value: "trans.header"}
|
30
|
+
%textarea.textarea.mt-2.w-full.rounded-lg.border-gray-200.align-top.shadow-sm.sm:text-sm{ cols: 100 , rows: 10 }
|
31
|
+
|
32
|
+
%button#hidden_button.button.change.mt-4{type: :submit }
|
33
|
+
Update Texts
|
@@ -0,0 +1,29 @@
|
|
1
|
+
.text-xl.font-bold.text-gray-900
|
2
|
+
= section.page.type.capitalize
|
3
|
+
\:
|
4
|
+
= link_to section.page.name, breeze.page_sections_path(section.page.id), class: "underline text-3xl ml-3"
|
5
|
+
.text-xl.font-bold.text-gray-900
|
6
|
+
%span
|
7
|
+
Section
|
8
|
+
\:
|
9
|
+
= link_to section.header, section_path(section), class: "underline text-3xl ml-3"
|
10
|
+
|
11
|
+
.inline-flex.items-center.justify-center.gap-3
|
12
|
+
- if section.previous_section
|
13
|
+
=link_to breeze.section_path(section.previous_section.id) , class: "inline-flex h-8 w-8 items-center justify-center rounded border border-gray-100 hover:bg-sky-100" do
|
14
|
+
%span.sr-only Next Section
|
15
|
+
%svg.h-3.w-3{:fill => "currentColor", :viewbox => "0 0 20 20", :xmlns => "http://www.w3.org/2000/svg"}
|
16
|
+
%path{"clip-rule" => "evenodd", :d => "M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z", "fill-rule" => "evenodd"}
|
17
|
+
- else
|
18
|
+
.inline-flex.h-8.w-8.items-center.justify-center.rounded.border.border-gray-100
|
19
|
+
%p.text-xs
|
20
|
+
= section.index
|
21
|
+
%span{:class => "mx-0.25"} /
|
22
|
+
= section.page.sections.length
|
23
|
+
- if section.next_section
|
24
|
+
=link_to breeze.section_path(section.next_section.id), class: "inline-flex h-8 w-8 items-center justify-center rounded border border-gray-100 hover:bg-sky-100" do
|
25
|
+
%span.sr-only Next Section
|
26
|
+
%svg.h-3.w-3{:fill => "currentColor", :viewbox => "0 0 20 20", :xmlns => "http://www.w3.org/2000/svg"}
|
27
|
+
%path{"clip-rule" => "evenodd", :d => "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z", "fill-rule" => "evenodd"}
|
28
|
+
- else
|
29
|
+
.inline-flex.h-8.w-8.items-center.justify-center.rounded.border.border-gray-100
|
@@ -0,0 +1,88 @@
|
|
1
|
+
.mx-6.md:mx-12.mx-20.flex.h-16.items-center.gap-16.mb-10
|
2
|
+
.text-xl.font-bold.text-gray-900
|
3
|
+
= @page.type.capitalize
|
4
|
+
= link_to @page.name , breeze.page_path(@page)
|
5
|
+
.text-xl.text-gray-900
|
6
|
+
=link_to "View live" , "/#{@page.name}" , target: @page.name
|
7
|
+
= form_tag( breeze.section_new_path(@page.id), method: :post ) do
|
8
|
+
%button.button.change.mr-3{type: :submit} New Section
|
9
|
+
|
10
|
+
-@page.sections.each do |section |
|
11
|
+
.flex.gap-10.mt-2.pt-4.pb-2.border-2.bg-neutral-50.border-slate-400{ id: "section_#{section.id}"}
|
12
|
+
.basis-72.ml-20
|
13
|
+
%h3.text-lg.font-bold Section #{section.index} : #{section.header}
|
14
|
+
.flex.flex-wrap.gap-3
|
15
|
+
= link_to breeze.section_path(section.id) do
|
16
|
+
%button.button.action Edit
|
17
|
+
= form_tag( breeze.section_new_path(@page.id , template: section.template), method: :post ) do
|
18
|
+
%button.button.change.mr-3{type: :submit} Copy
|
19
|
+
.p-2
|
20
|
+
=link_to(breeze.section_move_path(section.id , dir: :down)) do
|
21
|
+
%svg.w-6.h-6{:fill => "none", :stroke => "currentColor", "stroke-width" => "1.5", :viewbox => "0 0 24 24", :xmlns => "http://www.w3.org/2000/svg"}
|
22
|
+
%path{:d => "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3", "stroke-linecap" => "round", "stroke-linejoin" => "round"}
|
23
|
+
.p-2
|
24
|
+
=link_to(breeze.section_move_path(section.id , dir: :up)) do
|
25
|
+
%svg.w-6.h-6{:fill => "none", :stroke => "currentColor", "stroke-width" => "1.5", :viewbox => "0 0 24 24", :xmlns => "http://www.w3.org/2000/svg"}
|
26
|
+
%path{:d => "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18", "stroke-linecap" => "round", "stroke-linejoin" => "round"}
|
27
|
+
.basis-full.mt-3
|
28
|
+
Updated at:
|
29
|
+
= distance_of_time_in_words_to_now(section.updated_at)
|
30
|
+
.basis-full.mb-3
|
31
|
+
Updated by:
|
32
|
+
= updated_by(section)
|
33
|
+
- if section.has_cards?
|
34
|
+
- if card = section.cards_update
|
35
|
+
.basis-full
|
36
|
+
Cards updated at:
|
37
|
+
= distance_of_time_in_words_to_now(card.updated_at)
|
38
|
+
.basis-full.mb-3
|
39
|
+
Cards updated by:
|
40
|
+
= card.updated_by
|
41
|
+
.basis-full.mb-3
|
42
|
+
= form_tag( breeze.section_path(section.id) , {method: :delete } ) do
|
43
|
+
%button.button.remove{type: :submit} Delete
|
44
|
+
|
45
|
+
.basis-72
|
46
|
+
.flow.flow-cols
|
47
|
+
%h3.text-lg.font-bold.border-bottom-2 Style
|
48
|
+
%p= section.template_style.header
|
49
|
+
= section_preview(section , class: "object-contain")
|
50
|
+
= form_tag( breeze.section_select_template_path(section.id), method: :post ) do
|
51
|
+
%button.button.action.mt-3{type: :submit} Change Section Style
|
52
|
+
|
53
|
+
.basis-52.grow
|
54
|
+
%h3.my-4.text-lg.font-bold Header
|
55
|
+
%p= section.header
|
56
|
+
%h3.mt-4.text-lg.font-bold Text
|
57
|
+
%p= section.text[0..100] + " ..." if section.text
|
58
|
+
.basis-72
|
59
|
+
- if section.has_cards?
|
60
|
+
%h3.text-lg.font-bold #{section.cards.length} Cards
|
61
|
+
=link_to breeze.section_cards_path(section.id) do
|
62
|
+
=card_preview(section , class: "object-contain")
|
63
|
+
- else
|
64
|
+
= link_to(breeze.images_path(section_id: section.id)) do
|
65
|
+
-if section.image
|
66
|
+
%h3.text-lg.font-bold Image #{section.image.name}
|
67
|
+
.flex.align-center.justify-between.mb-4
|
68
|
+
.text-lg.font-bold.mt-2.mx-2
|
69
|
+
= section.image.size.to_s + "k"
|
70
|
+
%strong.inline-block.rounded.bg-gray-200.px-3.py-1.text-md.font-medium
|
71
|
+
= section.image.aspect_ratio
|
72
|
+
= image_for( section , "h-40 mb-1")
|
73
|
+
-else
|
74
|
+
%h3.mt-y.text-lg.font-bold No Image
|
75
|
+
.basis-96
|
76
|
+
%h3.text-lg.font-bold Options
|
77
|
+
.grid.grid-cols-2.gap-3.mx-10
|
78
|
+
- section.safe_options.each do|name , value|
|
79
|
+
-unless value.blank?
|
80
|
+
.font-bold.mt-1= name.camelcase
|
81
|
+
.font-xl= value
|
82
|
+
.grid.grid-cols-2.gap-2.m-8
|
83
|
+
.relative.block
|
84
|
+
= form_tag( breeze.section_new_path(@page.id), method: :post ) do
|
85
|
+
%button.button.change.mr-3{type: :submit} New Section
|
86
|
+
.relative.block.delete_page
|
87
|
+
= form_tag( breeze.page_path(@page.id) , {method: :delete } ) do
|
88
|
+
%button.button.remove{type: :submit} Delete Page
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.mx-6.md:mx-12.mx-20.flex.h-16.items-center.gap-16
|
2
|
+
.text-xl.font-bold.text-gray-900
|
3
|
+
Page #{link_to @section.page.name, breeze.page_sections_path(@section.page.id), class: "underline"}
|
4
|
+
.text-xl.text-gray-900
|
5
|
+
Select Card Style for Section #{@section.index} - #{@section.header}
|
6
|
+
|
7
|
+
.grid.grid-cols-4.gap-6.m-8
|
8
|
+
- @cards.each do |style|
|
9
|
+
.flex.flex-col.border.border-gray-300.rounded-lg.p-2.bg-neutral-50
|
10
|
+
= link_to( breeze.section_set_card_template_path( card_template: style.template )) do
|
11
|
+
.font-bold.text-lg.text-center.pb-4= style.header
|
12
|
+
=image_tag(style.card_preview , class: "w-full object-contain")
|
13
|
+
.text-left.pt-4.bg-gray-50= style.text
|
@@ -0,0 +1,15 @@
|
|
1
|
+
.mx-6.md:mx-12.mx-20.flex.h-16.items-center.gap-16
|
2
|
+
.text-xl.font-bold.text-gray-900
|
3
|
+
Page #{link_to @section.page.name, breeze.page_sections_path(@section.page.id), class: "underline"}
|
4
|
+
.text-4xl.font-bold.text-gray-900
|
5
|
+
Select Style
|
6
|
+
.text-xl.text-gray-900
|
7
|
+
for Section #{@section.index} - #{@section.header}
|
8
|
+
|
9
|
+
.grid.grid-cols-4.gap-6.my-10.mx-6.md:mx-12.mx-20
|
10
|
+
- @sections.each do |style|
|
11
|
+
.flex.flex-col.border.border-gray-300.rounded-lg.p-2.bg-neutral-50
|
12
|
+
= link_to( breeze.section_set_template_path( template: style.template )) do
|
13
|
+
.font-bold.text-lg.text-center.pb-4= style.header
|
14
|
+
=image_tag(style.section_preview , class: "w-full object-contain")
|
15
|
+
.text-left.pt-4.bg-gray-50= style.text
|
@@ -0,0 +1,91 @@
|
|
1
|
+
.mx-6.md:mx-12.mx-20.flex.h-16.items-center.gap-16.w-full
|
2
|
+
= render "sections_pagination" , section: @section
|
3
|
+
= form_tag( breeze.section_new_path(@section.page.id), method: :post ) do
|
4
|
+
%button.button.change.mr-3{type: :submit} New Section
|
5
|
+
|
6
|
+
.xl:mx-auto{class: "max-w-[1920px]"}
|
7
|
+
= render_section( @section )
|
8
|
+
|
9
|
+
.flex.gap-8.my-10.flex-wrap.mx-20
|
10
|
+
.basis-80
|
11
|
+
%h3.text-lg.font-bold= @section.template_style.header
|
12
|
+
= section_preview(@section , class: "w-full object-contain my-4")
|
13
|
+
.flex
|
14
|
+
= form_tag( breeze.section_select_template_path(@section.id), method: :post ) do
|
15
|
+
%button.button.action.mr-3{type: :submit} Change Section Style
|
16
|
+
= form_tag( breeze.section_new_path(@section.page.id , template: @section.template), method: :post ) do
|
17
|
+
%button.button.change.mr-3{type: :submit} New Section
|
18
|
+
.basis-full.mt-3
|
19
|
+
Updated at:
|
20
|
+
= distance_of_time_in_words_to_now(@section.updated_at)
|
21
|
+
.basis-full.mb-3
|
22
|
+
Updated by:
|
23
|
+
= updated_by(@section)
|
24
|
+
= simple_form_for( @section , method: :patch ) do |f|
|
25
|
+
= f.input :page_id , label: "move to page" , include_blank: false ,
|
26
|
+
collection: Breeze::Page.all.collect{|p| [p.name , p.id]}
|
27
|
+
%button.button.change.mt-3{type: :submit} Move
|
28
|
+
|
29
|
+
.basis-80.image
|
30
|
+
= link_to(breeze.images_path(section_id: @section.id)) do
|
31
|
+
-if @section.image
|
32
|
+
%h3.text-lg.font-bold Image #{@section.image.name}
|
33
|
+
.flex.align-center.justify-between.mb-4
|
34
|
+
.text-lg.font-bold.mt-2.mx-2
|
35
|
+
= @section.image.size.to_s + "k"
|
36
|
+
%strong.inline-block.rounded.bg-slate-200.px-3.py-1.text-md.font-medium
|
37
|
+
= @section.image.aspect_ratio
|
38
|
+
= image_for( @section )
|
39
|
+
-else
|
40
|
+
%h3.text-lg.font-bold No Image
|
41
|
+
.flex
|
42
|
+
=link_to breeze.images_path(section_id: @section.id) do
|
43
|
+
.button.action.mt-4.mr-3 Change Image
|
44
|
+
- if( @section.image )
|
45
|
+
=link_to breeze.image_path(@section.image.id) do
|
46
|
+
.button.change.mt-4.mr-3 Edit Image
|
47
|
+
=link_to breeze.section_set_image_path( @section.id , image: "") do
|
48
|
+
.button.remove.mt-4 Remove image
|
49
|
+
|
50
|
+
.basis-80.grow.content_update
|
51
|
+
%label.block
|
52
|
+
%h4.text-lg.font-bold Texts
|
53
|
+
= simple_form_for( @section , method: :patch) do |f|
|
54
|
+
= f.input :header
|
55
|
+
= f.input :text , as: :text , input_html: {rows: rows(@section)}
|
56
|
+
%button.button.change.mt-4{type: :submit} Update Texts
|
57
|
+
|
58
|
+
- if( @section.has_cards? )
|
59
|
+
.basis-full.h-0
|
60
|
+
.basis-96
|
61
|
+
.mx-3.text-lg.font-bold Card Style: #{@section.card_template_style.header}
|
62
|
+
=card_preview(@section , class: "my-3")
|
63
|
+
.flex.py-3
|
64
|
+
= form_tag( breeze.section_select_card_template_path(@section.id), method: :post ) do
|
65
|
+
%button.button.action.mr-3{type: :submit} Change Card Style
|
66
|
+
|
67
|
+
.basis-96.grow
|
68
|
+
%h3.text-lg.font-bold #{@section.cards.length} Cards
|
69
|
+
-@section.cards.each do |card|
|
70
|
+
.mt-4.text-md.font-bold= card.header
|
71
|
+
.text-sm #{card.text[0..70]} .....
|
72
|
+
.flex.mt-3.gap-3
|
73
|
+
= link_to breeze.section_cards_path(@section.id) do
|
74
|
+
%button.button.action View and Edit Cards
|
75
|
+
= form_tag( breeze.card_new_path(@section.id) , method: :post ) do
|
76
|
+
%button.button.change.mr-3{type: :submit} New Card
|
77
|
+
|
78
|
+
.basis-80.grow
|
79
|
+
= simple_form_for( @section , method: :patch , class: "mx-auto mb-0 max-w space-y-4") do
|
80
|
+
- @section.option_definitions.each do |option|
|
81
|
+
.grid.grid-cols-3
|
82
|
+
=render "option_form_#{option.type}" , section: @section , option: option
|
83
|
+
-if @section.option_definitions.empty?
|
84
|
+
%p No options
|
85
|
+
-else
|
86
|
+
%button.button.change.mt-4{type: :submit} Update Options
|
87
|
+
|
88
|
+
:javascript
|
89
|
+
var sections = [#{ render( partial: "section" , formats: :json).html_safe } ]
|
90
|
+
|
91
|
+
= render partial: 'overlay'
|
@@ -0,0 +1,9 @@
|
|
1
|
+
.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm
|
2
|
+
.p-6
|
3
|
+
%h3.text-lg.font-medium
|
4
|
+
Options
|
5
|
+
%p.mt-2.text-sm.leading-relaxed.line-clamp-3
|
6
|
+
-style.options_definitions.each do | style |
|
7
|
+
%label.block
|
8
|
+
.text-lg.font-bold=style.name
|
9
|
+
=style.description
|
@@ -0,0 +1,84 @@
|
|
1
|
+
.mx-6.md:mx-12.mx-20.flex.h-16.items-center.gap-16
|
2
|
+
.text-xl.font-bold
|
3
|
+
Page styles
|
4
|
+
.text-xl.font-bold
|
5
|
+
=link_to "Section styles" , "#section_styles"
|
6
|
+
.text-xl.font-bold
|
7
|
+
=link_to "Card styles" , "#cards_styles"
|
8
|
+
|
9
|
+
.flex.bg-cyan-100
|
10
|
+
.px-4.py-8.mx-auto.text-center
|
11
|
+
%h1.text-4xl.font-bold
|
12
|
+
Page styles
|
13
|
+
|
14
|
+
.grid.grid-cols-3.gap-4.m-8
|
15
|
+
-@page_styles.each do |style|
|
16
|
+
%article.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm
|
17
|
+
.p-6
|
18
|
+
%h3.text-lg.font-medium
|
19
|
+
=style.type
|
20
|
+
%p.mt-2.text-sm
|
21
|
+
Shorthand:
|
22
|
+
=style.section_template
|
23
|
+
.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm
|
24
|
+
.p-6
|
25
|
+
-if style.section_template
|
26
|
+
= style.section_template
|
27
|
+
.w-full.object-contain
|
28
|
+
=image_tag(style.section_preview )
|
29
|
+
-else style.section_template
|
30
|
+
.w-full
|
31
|
+
Any Section allowed
|
32
|
+
=render "options" , style: style
|
33
|
+
|
34
|
+
#section_styles.flex.bg-cyan-100
|
35
|
+
.px-4.py-8.mx-auto.text-center
|
36
|
+
%h1.text-4xl.font-bold
|
37
|
+
Section styles
|
38
|
+
|
39
|
+
.grid.grid-cols-3.gap-4.m-8
|
40
|
+
-@section_styles.each do | style|
|
41
|
+
.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm
|
42
|
+
.p-6
|
43
|
+
%h3.text-lg.font-medium
|
44
|
+
=style.header
|
45
|
+
%p.mt-2.text-sm.leading-relaxed.line-clamp-3
|
46
|
+
= style.text
|
47
|
+
%p.mt-2.text-sm
|
48
|
+
Shorthand:
|
49
|
+
=style.template
|
50
|
+
%h3.text-lg.font-medium.mt-4
|
51
|
+
Cards
|
52
|
+
%p.mt-2.text-sm.leading-relaxed.line-clamp-3
|
53
|
+
-if(style.has_cards?)
|
54
|
+
Section may include cards. See card styles below
|
55
|
+
-else
|
56
|
+
Section may not include cards
|
57
|
+
.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm
|
58
|
+
.p-6
|
59
|
+
.w-full.object-contain.h-72
|
60
|
+
=image_tag(style.section_preview )
|
61
|
+
|
62
|
+
=render "options" , style: style
|
63
|
+
|
64
|
+
#cards_styles.flex.bg-cyan-100
|
65
|
+
.px-4.py-8.mx-auto.text-center
|
66
|
+
%h1.text-4xl.font-bold
|
67
|
+
Card styles
|
68
|
+
.grid.grid-cols-3.gap-4.m-8
|
69
|
+
-@cards_styles.each do |style|
|
70
|
+
%article.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm
|
71
|
+
.p-6
|
72
|
+
%h3.text-lg.font-medium
|
73
|
+
=style.header
|
74
|
+
%p.mt-2.text-sm.leading-relaxed.line-clamp-3
|
75
|
+
= style.text
|
76
|
+
%p.mt-2.text-sm
|
77
|
+
Shorthand:
|
78
|
+
=style.template
|
79
|
+
.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm
|
80
|
+
.p-6
|
81
|
+
.w-full.object-contain.h-72
|
82
|
+
=image_tag(style.card_preview )
|
83
|
+
|
84
|
+
=render "options" , style: style
|
@@ -0,0 +1,29 @@
|
|
1
|
+
.flex.gap-10.mt-2.pt-4.bg-neutral-50.mx-10.border-b-2{class: language_bg(trans.language)}
|
2
|
+
.basis-10.ml-3
|
3
|
+
%h3.text-lg.font-bold.text-center
|
4
|
+
= trans.object.index_name
|
5
|
+
= trans.language
|
6
|
+
.grow
|
7
|
+
.text{id: "#{trans.id}_header_text" ,
|
8
|
+
onclick: "text_to_form(event)" ,
|
9
|
+
class: ("bg-orange-200" if trans.is_old?) }
|
10
|
+
= trans.header
|
11
|
+
.hidden.form{id: "#{trans.id}_header_form"}
|
12
|
+
%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}
|
13
|
+
%button.button.change.mt-4{type: :submit ,
|
14
|
+
id: "#{trans.id}_header_button" ,
|
15
|
+
onclick: "submit_switch(event)" }
|
16
|
+
Update Texts
|
17
|
+
.grow
|
18
|
+
.text{id: "#{trans.id}_text_text" ,
|
19
|
+
onclick: "text_to_form(event)" ,
|
20
|
+
class: ("bg-orange-200" if trans.is_old?) }
|
21
|
+
= trans.text
|
22
|
+
.hidden.form{id: "#{trans.id}_text_form"}
|
23
|
+
%textarea.mt-2.w-full.rounded-lg.border-gray-200.align-top.shadow-sm.sm:text-sm{ cols: 100 ,
|
24
|
+
id: "#{trans.id}_text" , rows: rows(trans.text) }
|
25
|
+
=trans.text
|
26
|
+
%button.button.change.mt-4{type: :submit ,
|
27
|
+
id: "#{trans.id}_text_button" ,
|
28
|
+
onclick: "submit_switch(event)"}
|
29
|
+
Update Texts
|
@@ -0,0 +1,79 @@
|
|
1
|
+
.mx-6.md:mx-12.mx-20.flex.h-16.items-center.gap-16
|
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) )
|
5
|
+
.text-xl.font-bold.text-gray-900
|
6
|
+
Page
|
7
|
+
= @page.name
|
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) )
|
11
|
+
|
12
|
+
-Breeze.language_strings.each do |lang|
|
13
|
+
-@page.sections.each do |section|
|
14
|
+
-trans = section.get_translation(lang)
|
15
|
+
= render "row" , trans: trans
|
16
|
+
|
17
|
+
-section.cards.each do |card|
|
18
|
+
-trans = card.get_translation(lang)
|
19
|
+
= render "row" , trans: trans
|
20
|
+
|
21
|
+
|
22
|
+
:javascript
|
23
|
+
// element ids conform to the following namng scheme (trans is tanslation id)
|
24
|
+
// trans_type_text is the text div for type (text/header)
|
25
|
+
// trans_type_form is the form div for type (gets switched with above)
|
26
|
+
// trans_type_button is the button for form for type
|
27
|
+
// trans_type is the input/textarea (value is put to trans_type_text)
|
28
|
+
|
29
|
+
// change visibility id_text /id_form according to param 2/3
|
30
|
+
function toggle_vis(id , text_visability , form_visability){
|
31
|
+
var text_id = id + "_text";
|
32
|
+
var text = document.getElementById(text_id);
|
33
|
+
text.style.display = text_visability;
|
34
|
+
var form_id = id + "_form";
|
35
|
+
var form = document.getElementById(form_id);
|
36
|
+
form.style.display = form_visability ;
|
37
|
+
return text ;
|
38
|
+
}
|
39
|
+
|
40
|
+
|
41
|
+
function form_submit(trans_id , field ){
|
42
|
+
var input_id = trans_id + "_" + field
|
43
|
+
var input = document.getElementById(input_id);
|
44
|
+
|
45
|
+
var postObj = {
|
46
|
+
authenticity_token: "#{form_authenticity_token}"
|
47
|
+
}
|
48
|
+
postObj[field] = input.value ;
|
49
|
+
const url = "/breeze/translations/" + trans_id
|
50
|
+
fetch(url, {
|
51
|
+
method: 'put', body: JSON.stringify(postObj),
|
52
|
+
headers: { 'Accept': 'application/json', 'Content-Type': 'application/json'}
|
53
|
+
}).then((response) => {
|
54
|
+
return response.json()
|
55
|
+
}).then((res) => {
|
56
|
+
console.log(input_id + " updated")
|
57
|
+
}).catch((error) => {
|
58
|
+
console.log(error)
|
59
|
+
})
|
60
|
+
var text = toggle_vis( input_id , "block", "none")
|
61
|
+
text.innerHTML = input.value ;
|
62
|
+
text.classList.remove("bg-orange-200");
|
63
|
+
}
|
64
|
+
|
65
|
+
|
66
|
+
function submit_switch(event){
|
67
|
+
var input_id = event.target.id; // eg 123_header
|
68
|
+
console.log("switch " + input_id)
|
69
|
+
var parts = input_id.split("_")
|
70
|
+
form_submit( parts[0] , parts[1] );
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
function text_to_form(event) {
|
75
|
+
var text_id = event.target.id; // eg 123_header_text
|
76
|
+
console.log("text2form " + text_id)
|
77
|
+
var parts = text_id.split("_");
|
78
|
+
toggle_vis( parts[0] + "_" + parts[1] , "none" , "block")
|
79
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.flex.justify-center.p-8.flex-col.md:flex-row{options(section , :margin , :background )}
|
2
|
+
.flex.items-center.h-40.md:h-60.lg:h-96.w-full.overflow-hidden{order_option(section, "lg:w-1/3")}
|
3
|
+
= image_for(section ,"")
|
4
|
+
.flex.items-center.w-full.max-w.px-6.mt-6.mx-auto{:class => "lg:w-2/3"}
|
5
|
+
.flex-1{text_color_option(section)}
|
6
|
+
.text-center
|
7
|
+
%h2.text-4xl.font-bold.text-center.mb-2
|
8
|
+
= section.header_text(current_lang)
|
9
|
+
.font-bold.text-center.mb-4.lg:mb-8
|
10
|
+
= date_precision(section.page , "published_date")
|
11
|
+
.max-w-full.mt-4.gap-16{ options(section , :text_columns , :prose ) }
|
12
|
+
= markdown(section,current_lang)
|
13
|
+
= header_list
|
@@ -0,0 +1,21 @@
|
|
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
|
8
|
+
.mx-auto.w-full.max-w-4xl{class: "max-w-[50%]"}
|
9
|
+
= form_tag( main_app.post_form_path , {class: "mt-10" }) do
|
10
|
+
- challenge = rand(8)
|
11
|
+
= hidden_field_tag :section_id , section.id
|
12
|
+
= hidden_field_tag :bot_fudder , "#{challenge*2}"
|
13
|
+
.md:grid.gap-6.grid-cols-2
|
14
|
+
- template = "breeze/view/cards/" + section.card_template
|
15
|
+
- section.cards.each do |card|
|
16
|
+
= render( template , card: card)
|
17
|
+
.grid.gap-6.md:grid-cols-2
|
18
|
+
.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]"}Anti bot question: #{challenge} + #{challenge + 1} is
|
21
|
+
%button.mt-10.rounded-md.bg-cyan-700.px-20.py-2.text-white{:type => "submit"} Send
|
@@ -0,0 +1,17 @@
|
|
1
|
+
%section.m-6.md:m-12.lg:m-20{ options(section , :background , :text_color), id: section.type_id}
|
2
|
+
.flex.justify-center
|
3
|
+
- unless section.header.blank? and section.text.blank?
|
4
|
+
.px-4.py-4.md:py-10.lg:py-16{ options(section , :text_align)}
|
5
|
+
- unless section.header.blank?
|
6
|
+
%h1.section_header.text-2xl.font-bold.tracking-tight.sm:text-4xl
|
7
|
+
= section.header_text(current_lang)
|
8
|
+
- if section.has_option?("subheader")
|
9
|
+
%h2.text-xl.pt-10.font-bold.tracking-tight.sm:text-2xl
|
10
|
+
= section.option("subheader")
|
11
|
+
- unless section.text.blank?
|
12
|
+
.section_text.text-lg.pt-10{ prose_classes }
|
13
|
+
= markdown(section , current_lang)
|
14
|
+
- template = "breeze/view/cards/" + section.card_template
|
15
|
+
.grid{ column_option(section)}
|
16
|
+
- section.cards.each do |card|
|
17
|
+
= render( template , card: card)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
%section.m-5.md:m-12.lg:m-20{ options(section , :background , :text_color), id: section.type_id}
|
2
|
+
.grid.grid-cols-1.md:grid-cols-2
|
3
|
+
.flex.flex-col.lg:flex-row
|
4
|
+
.max-w-xl.pr-16.mx-auto.mb-10
|
5
|
+
%h2.section_header.my-4.md:my-10.text-4xl.font-extrabold.leading-none
|
6
|
+
= section.header_text(current_lang)
|
7
|
+
.section_text.mb-6{ prose_classes }
|
8
|
+
= markdown(section,current_lang)
|
9
|
+
.flex.items-center
|
10
|
+
- template = "breeze/view/cards/" + section.card_template
|
11
|
+
.grid{ column_option(section)}
|
12
|
+
- section.cards.each do |card|
|
13
|
+
= render( template , card: card)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
%section.overflow-hidden.bg-cover.bg-no-repeat{bg(section , "h-full") , id: section.type_id}
|
2
|
+
.px-4.py-24.sm:px-6.lg:px-8
|
3
|
+
.flex{ item_align_option( section)}
|
4
|
+
.p-8.md:p-12.lg:px-16.lg:py-24{options(section , :shade )}
|
5
|
+
.mx-auto.max-w-xl{ options(section , :text_color, :text_align)}
|
6
|
+
%h2.section_header.text-2xl.font-bold.md:text-5xl
|
7
|
+
= section.header_text(current_lang)
|
8
|
+
.section_text.sm:mt-4.text-2xl{ prose_classes }
|
9
|
+
= markdown(section,current_lang)
|
10
|
+
=view_button(section , "my-2")
|
@@ -0,0 +1,11 @@
|
|
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
|
+
-if section.has_option?("subheader")
|
7
|
+
%h4.text-xl.mt-10.md:text-2xl
|
8
|
+
= section.option("subheader")
|
9
|
+
.section_text.mt-4.text-lg.pt-10{ prose_classes }
|
10
|
+
= markdown(section,current_lang)
|
11
|
+
=view_button(section , "my-2")
|
@@ -0,0 +1,13 @@
|
|
1
|
+
%section.overflow-hidden.grid.grid-cols-1.m-5.md:m-12.lg:m-20.md:grid-cols-2{id: section.type_id}
|
2
|
+
%div{ order_option(section)}
|
3
|
+
= image_for( section , "h-56 w-full object-cover sm:h-full")
|
4
|
+
.p-8.md:p-12.lg:px-16.lg:py-24{ background_option(section)}
|
5
|
+
.mx-auto.max-w-xl{options(section , :text_align , :text_color)}
|
6
|
+
%h2.section_header.text-2xl.font-bold.md:text-4xl
|
7
|
+
= section.header_text(current_lang)
|
8
|
+
-if section.has_option?("subheader")
|
9
|
+
%h4.text-xl.mt-10.md:text-2xl
|
10
|
+
= section.option("subheader")
|
11
|
+
.section_text.mt-8{ prose_classes }
|
12
|
+
= markdown(section,current_lang)
|
13
|
+
=view_button(section , "my-2")
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.flex.justify-center.flex-col.md:flex-row{options(section , :margin , :background ), id: section.type_id}
|
2
|
+
.flex.items-center.sm:my-2.lg:my-0.h-40.md:h-60.lg:h-96.w-full.overflow-hidden{order_option(section, "lg:w-2/3")}
|
3
|
+
= image_for(section ,"object-cover")
|
4
|
+
.flex.items-center.w-full.max-w.px-6.mt-6.mx-auto{:class => "lg:w-1/3"}
|
5
|
+
.flex-1{text_color_option(section)}
|
6
|
+
.text-center
|
7
|
+
%h2.section_header.text-4xl.font-bold.text-center.mb-4.lg:mb-8= section.header_text(current_lang)
|
8
|
+
-if section.has_option?("subheader")
|
9
|
+
%h4.text-xl.mt-4.lg:mt-8.md:text-2xl
|
10
|
+
= section.option("subheader")
|
11
|
+
.section_text.mt-3{ prose_classes }
|
12
|
+
= markdown(section,current_lang)
|
13
|
+
=view_button(section , "my-2")
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- if blog = last_blog
|
2
|
+
%section.border.border-xl.mt-20{ options(section , :background ), id: section.type_id}
|
3
|
+
.flex.my-5.mx-6.md:mx-12.mx-20.justify-between.items-center
|
4
|
+
.section_header.text-2xl.font-bold.tracking-tight.sm:text-4xl
|
5
|
+
= section.header_text(current_lang)
|
6
|
+
.text-lg
|
7
|
+
= distance_of_time_in_words_to_now last_blog.updated_at
|
8
|
+
ago
|
9
|
+
%hr.mt-2.border.border-4.border-gray-600
|
10
|
+
= render_section( last_blog )
|
11
|
+
.flex.justify-between.items-center.border-b-8.border-gray-600
|
12
|
+
.ml-20.mb-2.text-lg
|
13
|
+
= section.text_text(current_lang)
|
14
|
+
.mr-20.mb-2.text-lg
|
15
|
+
%a.transition{:class => "hover:text-gray-500/75", :href => main_app.view_blog_path(blog.page.name)}
|
16
|
+
Read More . . .
|