Add widget cards to homepage

This commit is contained in:
rgarcia
2018-05-22 19:56:40 +02:00
committed by decabeza
parent 85c08da7a6
commit 664e77305c
21 changed files with 412 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
class Admin::HomepageController < Admin::BaseController
def show
load_cards
end
private
@@ -9,4 +10,9 @@ class Admin::HomepageController < Admin::BaseController
settings = /feature.homepage.widgets/
@settings = Setting.select {|setting| setting.key =~ /#{settings}/ }
end
def load_cards
@cards = ::Widget::Card.body
end
end

View File

@@ -0,0 +1,51 @@
class Admin::Widget::CardsController < Admin::BaseController
def new
@card = ::Widget::Card.new(header: header_card?)
end
def create
@card = ::Widget::Card.new(card_params)
if @card.save
notice = "Success"
redirect_to admin_homepage_url, notice: notice
else
render :new
end
end
def edit
@card = ::Widget::Card.find(params[:id])
end
def update
@card = ::Widget::Card.find(params[:id])
if @card.update(card_params)
notice = "Updated"
redirect_to admin_homepage_url, notice: notice
else
render :edit
end
end
def destroy
@card = ::Widget::Card.find(params[:id])
@card.destroy
notice = "Removed"
redirect_to admin_homepage_url, notice: notice
end
private
def card_params
params.require(:widget_card).permit(:title, :description, :link_text, :link_url,
:button_text, :button_url, :alignment, :header,
image_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy])
end
def header_card?
params[:header_card].present?
end
end

View File

@@ -5,6 +5,7 @@ class WelcomeController < ApplicationController
layout "devise", only: [:welcome, :verification]
def index
@cards = Widget::Card.body
end
def welcome

2
app/models/widget.rb Normal file
View File

@@ -0,0 +1,2 @@
class Widget
end

15
app/models/widget/card.rb Normal file
View File

@@ -0,0 +1,15 @@
class Widget
class Card < ActiveRecord::Base
include Imageable
self.table_name = "widget_cards"
def self.header
where(header: true)
end
def self.body
where(header: false).order(:created_at)
end
end
end

View File

@@ -0,0 +1,22 @@
<tr id="<%= dom_id(card) %>" class="card">
<td><%= card.title %></td>
<td><%= card.description %></td>
<td><%= card.link_text %></td>
<td><%= card.link_url %></td>
<!-- remove conditional once specs have image validations -->
<td><% if card.image.present? %>
<%= image_tag(card.image_url(:thumb),
class: "margin",
alt: card.image.title) %>
<% end %></td>
<td>
<div>
<%= link_to "Edit", edit_admin_widget_card_path(card) %>
<div>
<%= link_to "Remove", admin_widget_card_path(card),
method: :delete,
data: { confirm: t('admin.actions.confirm') } %>
<div>
</td>
</tr>

View File

@@ -0,0 +1,13 @@
<table>
<tr>
<th>title</th>
<th>text</th>
<th>link text</th>
<th>link</th>
<th>image</th>
<th>actions</th>
</tr>
<% cards.each do |card| %>
<%= render "card", card: card %>
<% end %>
</table>

View File

@@ -1,6 +1,19 @@
<h1>Homepage</h1>
<p>The active modules appear in the homepage in the same order as here.</p>
<h2>Cards</h2>
<div>
<%= link_to "Create card", new_admin_widget_card_path %>
</div>
<div id="cards">
<% if @cards.present? %>
<%= render "cards", cards: @cards %>
<% end %>
</div>
<% @settings.each do |setting| %>
<div>

View File

@@ -0,0 +1,11 @@
<%= form_for [:admin, @card] do |f| %>
<%= f.text_field :title %>
<%= f.text_area :description %>
<%= f.text_field :link_text %>
<%= f.text_field :link_url %>
<%= f.hidden_field :header, value: @card.header? %>
<div class="images small-12 column">
<%= render 'images/nested_image', imageable: @card, f: f %>
</div>
<%= f.submit %>
<% end %>

View File

@@ -0,0 +1,2 @@
Edit
<%= render "form" %>

View File

@@ -0,0 +1,2 @@
New
<%= render "form" %>

View File

@@ -0,0 +1,11 @@
<div id="<%= dom_id(card) %>" class="card">
<%= card.title %>
<%= card.description %>
<%= link_to card.link_text, card.link_url %>
<% if card.image.present? %>
<%= image_tag(card.image_url(:large),
class: "margin",
alt: card.image.title) %>
<% end %>
</div>

View File

@@ -0,0 +1,5 @@
<h1>Cards</h1>
<% @cards.all.each do |card| %>
<%= render "card", card: card %>
<% end %>

View File

@@ -23,6 +23,7 @@
</div>
</div>
<%= render "cards" %>
<% if feature?("user.recommendations") && (@recommended_debates.present? || @recommended_proposals.present?) %>
<%= render "recommended",
recommended_debates: @recommended_debates,