Add widget cards to homepage
This commit is contained in:
@@ -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
|
||||
51
app/controllers/admin/widget/cards_controller.rb
Normal file
51
app/controllers/admin/widget/cards_controller.rb
Normal 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
|
||||
@@ -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
2
app/models/widget.rb
Normal file
@@ -0,0 +1,2 @@
|
||||
class Widget
|
||||
end
|
||||
15
app/models/widget/card.rb
Normal file
15
app/models/widget/card.rb
Normal 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
|
||||
22
app/views/admin/homepage/_card.html.erb
Normal file
22
app/views/admin/homepage/_card.html.erb
Normal 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>
|
||||
13
app/views/admin/homepage/_cards.html.erb
Normal file
13
app/views/admin/homepage/_cards.html.erb
Normal 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>
|
||||
@@ -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>
|
||||
|
||||
11
app/views/admin/widget/cards/_form.html.erb
Normal file
11
app/views/admin/widget/cards/_form.html.erb
Normal 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 %>
|
||||
2
app/views/admin/widget/cards/edit.html.erb
Normal file
2
app/views/admin/widget/cards/edit.html.erb
Normal file
@@ -0,0 +1,2 @@
|
||||
Edit
|
||||
<%= render "form" %>
|
||||
2
app/views/admin/widget/cards/new.html.erb
Normal file
2
app/views/admin/widget/cards/new.html.erb
Normal file
@@ -0,0 +1,2 @@
|
||||
New
|
||||
<%= render "form" %>
|
||||
11
app/views/welcome/_card.html.erb
Normal file
11
app/views/welcome/_card.html.erb
Normal 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>
|
||||
5
app/views/welcome/_cards.html.erb
Normal file
5
app/views/welcome/_cards.html.erb
Normal file
@@ -0,0 +1,5 @@
|
||||
<h1>Cards</h1>
|
||||
|
||||
<% @cards.all.each do |card| %>
|
||||
<%= render "card", card: card %>
|
||||
<% end %>
|
||||
@@ -23,6 +23,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render "cards" %>
|
||||
<% if feature?("user.recommendations") && (@recommended_debates.present? || @recommended_proposals.present?) %>
|
||||
<%= render "recommended",
|
||||
recommended_debates: @recommended_debates,
|
||||
|
||||
Reference in New Issue
Block a user