From 277d4dce3659d19ef6a5b526afa37d0fa2d1d0f0 Mon Sep 17 00:00:00 2001 From: Torsten Date: Wed, 30 Nov 2022 11:22:45 +0200 Subject: [PATCH] start on card editing --- app/controllers/merged/cards_controller.rb | 17 ++++++++ app/helpers/merged/cards_helper.rb | 4 ++ app/models/merged/card.rb | 16 ++++++++ app/models/merged/section.rb | 8 +++- app/views/merged/cards/editors/_button.haml | 9 ++++ .../merged/cards/editors/_card_template.haml | 11 +++++ app/views/merged/cards/editors/_cards.haml | 0 app/views/merged/cards/editors/_header.haml | 6 +++ app/views/merged/cards/editors/_id.haml | 0 app/views/merged/cards/editors/_image.haml | 13 ++++++ app/views/merged/cards/editors/_template.haml | 6 +++ app/views/merged/cards/editors/_text.haml | 7 ++++ app/views/merged/cards/index.haml | 29 +++++++++++++ app/views/merged/cards/view/_button.haml | 8 ++++ app/views/merged/cards/view/_card | 0 .../merged/cards/view/_card_template.haml | 5 +++ app/views/merged/cards/view/_cards.haml | 0 app/views/merged/cards/view/_header.haml | 3 ++ app/views/merged/cards/view/_id.haml | 0 app/views/merged/cards/view/_image.haml | 6 +++ app/views/merged/cards/view/_template.haml | 4 ++ app/views/merged/cards/view/_text.haml | 3 ++ .../sections/editors/_card_template.haml | 2 + app/views/merged/sections/index.html.haml | 41 +++++++++++-------- config/routes.rb | 1 + spec/models/merged/card_spec.rb | 7 ++++ 26 files changed, 187 insertions(+), 19 deletions(-) create mode 100644 app/controllers/merged/cards_controller.rb create mode 100644 app/helpers/merged/cards_helper.rb create mode 100644 app/models/merged/card.rb create mode 100644 app/views/merged/cards/editors/_button.haml create mode 100644 app/views/merged/cards/editors/_card_template.haml create mode 100644 app/views/merged/cards/editors/_cards.haml create mode 100644 app/views/merged/cards/editors/_header.haml create mode 100644 app/views/merged/cards/editors/_id.haml create mode 100644 app/views/merged/cards/editors/_image.haml create mode 100644 app/views/merged/cards/editors/_template.haml create mode 100644 app/views/merged/cards/editors/_text.haml create mode 100644 app/views/merged/cards/index.haml create mode 100644 app/views/merged/cards/view/_button.haml create mode 100644 app/views/merged/cards/view/_card create mode 100644 app/views/merged/cards/view/_card_template.haml create mode 100644 app/views/merged/cards/view/_cards.haml create mode 100644 app/views/merged/cards/view/_header.haml create mode 100644 app/views/merged/cards/view/_id.haml create mode 100644 app/views/merged/cards/view/_image.haml create mode 100644 app/views/merged/cards/view/_template.haml create mode 100644 app/views/merged/cards/view/_text.haml create mode 100644 spec/models/merged/card_spec.rb diff --git a/app/controllers/merged/cards_controller.rb b/app/controllers/merged/cards_controller.rb new file mode 100644 index 0000000..49bdced --- /dev/null +++ b/app/controllers/merged/cards_controller.rb @@ -0,0 +1,17 @@ +module Merged + class CardsController < MergedController + before_action :set_page + + def index + + end + + private + def set_page + @page = Page.find(params[:page_id]) + section_id = params[:id] || params[:section_id] + @section = @page.find_section( section_id ) + end + + end +end diff --git a/app/helpers/merged/cards_helper.rb b/app/helpers/merged/cards_helper.rb new file mode 100644 index 0000000..ea6c452 --- /dev/null +++ b/app/helpers/merged/cards_helper.rb @@ -0,0 +1,4 @@ +module Merged + module CardsHelper + end +end diff --git a/app/models/merged/card.rb b/app/models/merged/card.rb new file mode 100644 index 0000000..14d39ea --- /dev/null +++ b/app/models/merged/card.rb @@ -0,0 +1,16 @@ +module Merged + class Card + include ActiveModel::API + include ActiveModel::Conversion + extend ActiveModel::Naming + + attr_reader :content , :section + + def initialize(section , card_data) + @section = section + raise "No data #{card_data}" unless card_data.is_a?(Hash) + @content = card_data + end + + end +end diff --git a/app/models/merged/section.rb b/app/models/merged/section.rb index d799cf7..1d850ea 100644 --- a/app/models/merged/section.rb +++ b/app/models/merged/section.rb @@ -13,7 +13,7 @@ module Merged def initialize(page , index , section_data) @page = page raise "No number #{index}" unless index.is_a?(Integer) - raise "No has #{section_data}" unless section_data.is_a?(Hash) + raise "No hash #{section_data}" unless section_data.is_a?(Hash) @index = index @content = section_data end @@ -28,6 +28,12 @@ module Merged @content[key] = value end + def cards + element = @content["cards"] + return [] if element.nil? + element.collect{|card_content| Card.new(self , card_content)} + end + def template @content["template"] end diff --git a/app/views/merged/cards/editors/_button.haml b/app/views/merged/cards/editors/_button.haml new file mode 100644 index 0000000..bd91f0e --- /dev/null +++ b/app/views/merged/cards/editors/_button.haml @@ -0,0 +1,9 @@ +.relative.block.border.border-gray-100 + %h3.mt-4.text-lg.font-bold= key.upcase + %p + .font-bold Text + = value["text"] +.relative.block.border.border-gray-100 + %p + .font-bold Link + = value["link"] diff --git a/app/views/merged/cards/editors/_card_template.haml b/app/views/merged/cards/editors/_card_template.haml new file mode 100644 index 0000000..2122cb6 --- /dev/null +++ b/app/views/merged/cards/editors/_card_template.haml @@ -0,0 +1,11 @@ +.relative.block.border.border-gray-100 + %h3.mt-4.text-lg.font-bold= key.upcase + %p= value + %p #{section.content['cards'].length} cards + %p view cards (index) + %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-md.font-medium.text-white + =link_to "View and Edit Cards" , page_section_card_url(@page.name,@section.id) + %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-md.font-medium.text-white + =link_to "Change Card Template" , page_section_select_card_template_url(@page.name,@section.id) +.relative.block.border.border-gray-100 + =image_tag("merged/card_preview/#{value}" , class: "w-full object-contain") diff --git a/app/views/merged/cards/editors/_cards.haml b/app/views/merged/cards/editors/_cards.haml new file mode 100644 index 0000000..e69de29 diff --git a/app/views/merged/cards/editors/_header.haml b/app/views/merged/cards/editors/_header.haml new file mode 100644 index 0000000..d637171 --- /dev/null +++ b/app/views/merged/cards/editors/_header.haml @@ -0,0 +1,6 @@ +.relative.block.border.border-gray-100 + %h3.mt-4.text-lg.font-bold= key.upcase += section_form( class: "mx-auto mt-8 mb-0 max-w space-y-4") do + = text_field_tag( :header , @section.content["header"], class: "w-full rounded-lg border-gray-200 p-4 pr-12 text-sm shadow-sm") + %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-sm.font-medium.text-white{:type => "submit"} + Update diff --git a/app/views/merged/cards/editors/_id.haml b/app/views/merged/cards/editors/_id.haml new file mode 100644 index 0000000..e69de29 diff --git a/app/views/merged/cards/editors/_image.haml b/app/views/merged/cards/editors/_image.haml new file mode 100644 index 0000000..e81fd09 --- /dev/null +++ b/app/views/merged/cards/editors/_image.haml @@ -0,0 +1,13 @@ +.relative.block.border.border-gray-100 + %h3.mt-4.text-lg.font-bold= key.upcase + %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-md.font-medium.text-white + =link_to "Change Image" , page_section_select_image_url(@page.name,@section.id) + %button.ml-3.inline-block.rounded-lg.bg-red-500.px-5.py-3.text-md.font-medium.text-white + = link_to( "Remove image" , page_section_set_image_path( @page.name, @section.id , image: "")) + + +.relative.block.border.border-gray-100 + -if( value.blank? ) + No image + -else + = image_tag( "cms/" + value) diff --git a/app/views/merged/cards/editors/_template.haml b/app/views/merged/cards/editors/_template.haml new file mode 100644 index 0000000..4169be3 --- /dev/null +++ b/app/views/merged/cards/editors/_template.haml @@ -0,0 +1,6 @@ +.relative.block.border.border-gray-100 + %h3.mt-4.text-lg.font-bold= key.upcase + " : " + value + %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-md.font-medium.text-white + =link_to "Change Template" , page_section_select_template_url(@page.name,@section.id) +.relative.block.border.border-gray-100 + =image_tag("merged/section_preview/#{section.template}" , class: "w-full object-contain") diff --git a/app/views/merged/cards/editors/_text.haml b/app/views/merged/cards/editors/_text.haml new file mode 100644 index 0000000..72e3700 --- /dev/null +++ b/app/views/merged/cards/editors/_text.haml @@ -0,0 +1,7 @@ +.relative.block.border.border-gray-100 + %h3.mt-4.text-lg.font-bold= key.upcase +.relative.block.border.border-gray-100 + = section_form( class: "mx-auto mt-8 mb-0 max-w space-y-4") do + = text_area_tag( :text , @section.content["text"], class: "w-full rounded-lg border-gray-200 p-4 pr-12 text-sm shadow-sm") + %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-sm.font-medium.text-white{:type => "submit"} + Update diff --git a/app/views/merged/cards/index.haml b/app/views/merged/cards/index.haml new file mode 100644 index 0000000..35af970 --- /dev/null +++ b/app/views/merged/cards/index.haml @@ -0,0 +1,29 @@ +%p#notice= notice + +.flex.flex-col.bg-white + .flex.items-center.justify-center.flex-1 + .max-w-xl.px-4.py-8.mx-auto.text-center + %h1.text-2xl.font-bold.tracking-tight.text-gray-900 + Page #{@page.name} + .flex.items-center.justify-center.flex-1 + %h3.text-xl.font-bold.tracking-tight.text-gray-900 + Cards for Section #{@section.id} + +.grid.grid-cols-4.gap-2.m-8 + - @section.cards.each_with_index do |card , index| + .relative.block.border.border-gray-100 + .p-4 + %h3.mt-4.text-lg.font-bold Card #{index + 1} + %button.mt-4.rounded-lg.bg-yellow-500.p-4 + =link_to( "Up" , "/index") + %button.mt-4.rounded-lg.bg-yellow-500.p-4 + =link_to "Down" , "/index" + %button.mt-4.rounded-lg.bg-blue-400.p-4 + =link_to "Edit" , page_section_path(@page.name , @section.id) + %button.mt-4.rounded-lg.bg-cyan-400.p-4 + =link_to "New" , "/index" + %button.mt-4.rounded-lg.bg-red-400.p-4 + =link_to "Delete" , "/index" + + - card.content.each do |key , value| + = render "merged/cards/view/#{key}", card: card , key: key , value: value diff --git a/app/views/merged/cards/view/_button.haml b/app/views/merged/cards/view/_button.haml new file mode 100644 index 0000000..fe2d63a --- /dev/null +++ b/app/views/merged/cards/view/_button.haml @@ -0,0 +1,8 @@ +.p-6 + %h3.mt-4.text-lg.font-bold= key.upcase + %p + .font-bold Text + = value["text"] + %p + .font-bold Link + = value["link"] diff --git a/app/views/merged/cards/view/_card b/app/views/merged/cards/view/_card new file mode 100644 index 0000000..e69de29 diff --git a/app/views/merged/cards/view/_card_template.haml b/app/views/merged/cards/view/_card_template.haml new file mode 100644 index 0000000..216b5ef --- /dev/null +++ b/app/views/merged/cards/view/_card_template.haml @@ -0,0 +1,5 @@ +.p-6 + %h3.mt-4.text-lg.font-bold= key.upcase + %p= value + =image_tag("merged/card_preview/#{value}" , class: "w-full object-contain") + %p #{section.content['cards'].length} cards diff --git a/app/views/merged/cards/view/_cards.haml b/app/views/merged/cards/view/_cards.haml new file mode 100644 index 0000000..e69de29 diff --git a/app/views/merged/cards/view/_header.haml b/app/views/merged/cards/view/_header.haml new file mode 100644 index 0000000..eaf2df3 --- /dev/null +++ b/app/views/merged/cards/view/_header.haml @@ -0,0 +1,3 @@ +.p-6 + %h3.mt-4.text-lg.font-bold= key.upcase + %p= value diff --git a/app/views/merged/cards/view/_id.haml b/app/views/merged/cards/view/_id.haml new file mode 100644 index 0000000..e69de29 diff --git a/app/views/merged/cards/view/_image.haml b/app/views/merged/cards/view/_image.haml new file mode 100644 index 0000000..2beb501 --- /dev/null +++ b/app/views/merged/cards/view/_image.haml @@ -0,0 +1,6 @@ +.p-6 + %h3.mt-4.text-lg.font-bold= key.upcase + -if value + = image_tag "cms/" + value + -else + No image diff --git a/app/views/merged/cards/view/_template.haml b/app/views/merged/cards/view/_template.haml new file mode 100644 index 0000000..d8aafb3 --- /dev/null +++ b/app/views/merged/cards/view/_template.haml @@ -0,0 +1,4 @@ +.p-6 + %h3.mt-4.text-lg.font-bold= key.upcase + %p= value + =image_tag("merged/section_preview/#{section.template}" , class: "w-full object-contain") diff --git a/app/views/merged/cards/view/_text.haml b/app/views/merged/cards/view/_text.haml new file mode 100644 index 0000000..eaf2df3 --- /dev/null +++ b/app/views/merged/cards/view/_text.haml @@ -0,0 +1,3 @@ +.p-6 + %h3.mt-4.text-lg.font-bold= key.upcase + %p= value diff --git a/app/views/merged/sections/editors/_card_template.haml b/app/views/merged/sections/editors/_card_template.haml index ff7435f..2122cb6 100644 --- a/app/views/merged/sections/editors/_card_template.haml +++ b/app/views/merged/sections/editors/_card_template.haml @@ -3,6 +3,8 @@ %p= value %p #{section.content['cards'].length} cards %p view cards (index) + %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-md.font-medium.text-white + =link_to "View and Edit Cards" , page_section_card_url(@page.name,@section.id) %button.ml-3.inline-block.rounded-lg.bg-blue-500.px-5.py-3.text-md.font-medium.text-white =link_to "Change Card Template" , page_section_select_card_template_url(@page.name,@section.id) .relative.block.border.border-gray-100 diff --git a/app/views/merged/sections/index.html.haml b/app/views/merged/sections/index.html.haml index 3395fb6..171d124 100644 --- a/app/views/merged/sections/index.html.haml +++ b/app/views/merged/sections/index.html.haml @@ -1,19 +1,24 @@ -%h1 Listing merged_sections +%p#notice= notice +.flex.flex-col.bg-white + .flex.items-center.justify-center.flex-1 + .max-w-xl.px-4.py-8.mx-auto.text-center + %h1.text-2xl.font-bold.tracking-tight.text-gray-900.sm:text-4xl + Page #{@page.name} -%table - %thead - %tr - %th - %th - %th - - %tbody - - @merged_sections.each do |merged_section| - %tr - %td= link_to 'Show', section - %td= link_to 'Edit', edit_section_path(merged_section) - %td= link_to 'Destroy', section, method: :delete, data: { confirm: 'Are you sure?' } - -%br - -= link_to 'New Section', new_section_path +-@page.sections.each_with_index do |section , index| + .grid.grid-cols-6.gap-2.m-8{class: (index%2)==1 ? 'bg-cyan-50' : 'bg-red-50' } + .relative.block.border.border-gray-100 + .p-4 + %h3.mt-4.text-lg.font-bold Section #{index + 1} + %button.mt-4.rounded-lg.bg-yellow-500.p-4 + =link_to( "Up" , "/index") + %button.mt-4.rounded-lg.bg-yellow-500.p-4 + =link_to "Down" , "/index" + %button.mt-4.rounded-lg.bg-blue-400.p-4 + =link_to "Edit" , page_section_path(@page.name , section.id) + %button.mt-4.rounded-lg.bg-cyan-400.p-4 + =link_to "New" , "/index" + %button.mt-4.rounded-lg.bg-red-400.p-4 + =link_to "Delete" , "/index" + -section.content.each do |key , value| + = render "merged/sections/overview/#{key}", section: section , key: key , value: value diff --git a/config/routes.rb b/config/routes.rb index 5cb6bc9..a4eba73 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,6 +9,7 @@ Merged::Engine.routes.draw do get :set_template get :select_card_template get :set_card_template + resources :cards end end resources :images diff --git a/spec/models/merged/card_spec.rb b/spec/models/merged/card_spec.rb new file mode 100644 index 0000000..3f1a945 --- /dev/null +++ b/spec/models/merged/card_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +module Merged + RSpec.describe Card, type: :model do + pending "add some examples to (or delete) #{__FILE__}" + end +end