simple_showcase_admin 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/simple_showcase_admin/application.js +23 -0
- data/app/assets/javascripts/simple_showcase_admin/jquery.photo_featured.js +3 -0
- data/app/assets/javascripts/simple_showcase_admin/jquery.photos.js +18 -0
- data/app/assets/stylesheets/simple_showcase_admin/application.css.scss +123 -0
- data/app/controllers/simple_showcase_admin/application_controller.rb +10 -0
- data/app/controllers/simple_showcase_admin/categories_controller.rb +44 -0
- data/app/controllers/simple_showcase_admin/details_controller.rb +20 -0
- data/app/controllers/simple_showcase_admin/items_controller.rb +48 -0
- data/app/controllers/simple_showcase_admin/password_resets_controller.rb +40 -0
- data/app/controllers/simple_showcase_admin/sessions_controller.rb +25 -0
- data/app/helpers/simple_showcase_admin/application_helper.rb +12 -0
- data/app/helpers/simple_showcase_admin/items_helper.rb +15 -0
- data/app/mailers/simple_showcase_admin/user_mailer.rb +12 -0
- data/app/models/simple_showcase_admin/category.rb +20 -0
- data/app/models/simple_showcase_admin/item.rb +24 -0
- data/app/models/simple_showcase_admin/photo.rb +13 -0
- data/app/models/simple_showcase_admin/user.rb +25 -0
- data/app/uploaders/image_uploader.rb +22 -0
- data/app/views/layouts/simple_showcase_admin/application.html.haml +47 -0
- data/app/views/simple_showcase_admin/categories/edit.html.haml +9 -0
- data/app/views/simple_showcase_admin/categories/index.html.haml +26 -0
- data/app/views/simple_showcase_admin/categories/new.html.haml +9 -0
- data/app/views/simple_showcase_admin/categories/show.html.haml +49 -0
- data/app/views/simple_showcase_admin/details/edit.html.haml +11 -0
- data/app/views/simple_showcase_admin/details/show.html.haml +7 -0
- data/app/views/simple_showcase_admin/items/_photos.html.haml +12 -0
- data/app/views/simple_showcase_admin/items/edit.html.haml +26 -0
- data/app/views/simple_showcase_admin/items/index.html.haml +48 -0
- data/app/views/simple_showcase_admin/items/new.html.haml +24 -0
- data/app/views/simple_showcase_admin/items/show.html.haml +15 -0
- data/app/views/simple_showcase_admin/password_resets/edit.html.haml +9 -0
- data/app/views/simple_showcase_admin/password_resets/new.html.haml +8 -0
- data/app/views/simple_showcase_admin/sessions/new.html.haml +19 -0
- data/app/views/simple_showcase_admin/user_mailer/reset_password_email.html.haml +8 -0
- data/config/initializers/simple_form.rb +177 -0
- data/config/initializers/sorcery.rb +386 -0
- data/config/routes.rb +13 -0
- data/db/migrate/001_sorcery_core.rb +15 -0
- data/db/migrate/002_sorcery_remember_me.rb +15 -0
- data/db/migrate/003_sorcery_reset_password.rb +17 -0
- data/db/migrate/004_add_slug_to_users.rb +7 -0
- data/db/migrate/005_add_first_name_to_users.rb +6 -0
- data/db/migrate/006_create_categories.rb +9 -0
- data/db/migrate/007_create_items.rb +10 -0
- data/db/migrate/008_create_photos.rb +9 -0
- data/db/migrate/009_add_category_id_to_items.rb +6 -0
- data/db/migrate/010_add_slug_to_categories.rb +7 -0
- data/db/migrate/011_add_slug_to_items.rb +6 -0
- data/db/migrate/012_add_item_id_to_photos.rb +5 -0
- data/db/migrate/013_add_featured_to_photos.rb +5 -0
- data/db/migrate/014_add_landscape_to_photos.rb +5 -0
- data/lib/generators/simple_showcase_admin/install_generator.rb +69 -0
- data/lib/simple_showcase_admin/configuration.rb +11 -0
- data/lib/simple_showcase_admin/engine.rb +21 -0
- data/lib/simple_showcase_admin/version.rb +3 -0
- data/lib/simple_showcase_admin.rb +5 -0
- data/lib/tasks/simple_showcase_admin_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/simple_showcase_admin_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +477 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
module SimpleShowcaseAdmin
|
2
|
+
module ItemsHelper
|
3
|
+
def new_child_fields_template(form_builder)
|
4
|
+
content_tag(:div, :id => "photos_fields_template", :style => "display: none") do
|
5
|
+
form_builder.fields_for(:photos, Photo.new, :child_index => "new_photos") do |f|
|
6
|
+
render(:partial => 'photos', :locals => { :f => f })
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_child_link(name, association)
|
12
|
+
link_to(name, "javascript:void(0)", :class => "add_child btn btn-mini", :"data-association" => association)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module SimpleShowcaseAdmin
|
2
|
+
class UserMailer < ActionMailer::Base
|
3
|
+
default from: "notifier@mandyjane.co.uk"
|
4
|
+
def reset_password_email user
|
5
|
+
@user = user
|
6
|
+
@url = "http://0.0.0.0:3000/password_resets/#{user.reset_password_token}/edit"
|
7
|
+
mail(:to => user.email,
|
8
|
+
:subject => "Your password has been reset")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'friendly_id'
|
2
|
+
|
3
|
+
module SimpleShowcaseAdmin
|
4
|
+
class Category < ActiveRecord::Base
|
5
|
+
attr_accessible :category, :slug
|
6
|
+
has_many :items, dependent: :destroy
|
7
|
+
|
8
|
+
extend FriendlyId
|
9
|
+
friendly_id :category, use: :slugged
|
10
|
+
|
11
|
+
validates_presence_of :category
|
12
|
+
validates_uniqueness_of :category
|
13
|
+
|
14
|
+
before_save :format
|
15
|
+
|
16
|
+
def format
|
17
|
+
self.category = self.category.titleize
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'friendly_id'
|
2
|
+
|
3
|
+
module SimpleShowcaseAdmin
|
4
|
+
class Item < ActiveRecord::Base
|
5
|
+
belongs_to :category
|
6
|
+
has_many :photos, dependent: :destroy
|
7
|
+
accepts_nested_attributes_for :photos, reject_if: proc { |a| a[:id].blank? && a[:image].blank? }, allow_destroy: true
|
8
|
+
attr_accessible :photos_attributes, :title, :description
|
9
|
+
|
10
|
+
extend FriendlyId
|
11
|
+
friendly_id :title, use: :slugged
|
12
|
+
|
13
|
+
validates_presence_of :title
|
14
|
+
validates_presence_of :description
|
15
|
+
|
16
|
+
validates_uniqueness_of :title
|
17
|
+
|
18
|
+
before_validation :format
|
19
|
+
|
20
|
+
def format
|
21
|
+
self.title = self.title.downcase.titleize
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module SimpleShowcaseAdmin
|
2
|
+
class Photo < ActiveRecord::Base
|
3
|
+
attr_accessible :image, :featured, :landscape
|
4
|
+
mount_uploader :image, ImageUploader
|
5
|
+
before_save :reset_featured_post, :if => :featured_changed?
|
6
|
+
|
7
|
+
def reset_featured_post
|
8
|
+
if self.featured?
|
9
|
+
Photo.update_all :featured => false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'friendly_id'
|
2
|
+
|
3
|
+
module SimpleShowcaseAdmin
|
4
|
+
class User < ActiveRecord::Base
|
5
|
+
attr_accessible :first_name, :email, :password, :password_confirmation, :slug
|
6
|
+
authenticates_with_sorcery!
|
7
|
+
|
8
|
+
extend FriendlyId
|
9
|
+
friendly_id :first_name, use: :slugged
|
10
|
+
|
11
|
+
before_save :format_attributes
|
12
|
+
|
13
|
+
validates_presence_of :first_name
|
14
|
+
validates_presence_of :email
|
15
|
+
validates_presence_of :password, on: :create
|
16
|
+
validates_confirmation_of :password
|
17
|
+
validates_confirmation_of :email, on: :update
|
18
|
+
validates_length_of :password, minimum: 6
|
19
|
+
|
20
|
+
def format_attributes
|
21
|
+
self.email = self.email.downcase
|
22
|
+
self.first_name = self.first_name.titleize
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class ImageUploader < CarrierWave::Uploader::Base
|
4
|
+
include CarrierWave::RMagick
|
5
|
+
storage :file
|
6
|
+
|
7
|
+
def store_dir
|
8
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def extension_white_list
|
12
|
+
%w(jpg jpeg gif png bmp tiff)
|
13
|
+
end
|
14
|
+
|
15
|
+
def filename
|
16
|
+
!super.nil? ? super.chomp(File.extname(super)) + '.png' : super
|
17
|
+
end
|
18
|
+
|
19
|
+
process :resize_to_fit => [750, 502]
|
20
|
+
process :convert => 'png'
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
!!!
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%title Administrator Area
|
5
|
+
= stylesheet_link_tag "simple_showcase_admin/application"
|
6
|
+
= javascript_include_tag "simple_showcase_admin/application"
|
7
|
+
= csrf_meta_tag
|
8
|
+
%body
|
9
|
+
#container
|
10
|
+
.navbar.navbar-fixed-top
|
11
|
+
.navbar-inner
|
12
|
+
.container
|
13
|
+
- if current_user
|
14
|
+
%ul.nav
|
15
|
+
%li.dropdown
|
16
|
+
= link_to "Categories <b class='caret'></b>".html_safe, '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown"
|
17
|
+
%ul.dropdown-menu
|
18
|
+
- if SimpleShowcaseAdmin::Category.all.count > 0
|
19
|
+
%li= link_to 'Manage Categories', [ :categories]
|
20
|
+
%li.divider
|
21
|
+
- else
|
22
|
+
%li= link_to 'Create a Category', [:new, :category]
|
23
|
+
- SimpleShowcaseAdmin::Category.all.each do |c|
|
24
|
+
%li= link_to c.category, [ c]
|
25
|
+
- unless featured_photo_exists
|
26
|
+
%li.warning.label.label-important(rel="popover" data-content="You can select an image to be featured by editing a product and selecting 'Featured?' for one of the associated images." data-original-title="Please Select An Image To Be Featured.")
|
27
|
+
%i.icon-info-sign.icon-white
|
28
|
+
No Feature Photo Has Been Selected!
|
29
|
+
%ul.nav.pull-right
|
30
|
+
%li.dropdown
|
31
|
+
= link_to "<i class='icon-user icon-white'></i> #{current_user.first_name} <b class='caret'></b>".html_safe, '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown"
|
32
|
+
%ul.dropdown-menu
|
33
|
+
%li= link_to 'Your Details', detail_path(current_user)
|
34
|
+
%li.divider
|
35
|
+
%li= link_to 'Log Out', logout_path
|
36
|
+
.container
|
37
|
+
.flash
|
38
|
+
- if flash[:alert]
|
39
|
+
.message.alert.alert-error
|
40
|
+
= link_to '×'.html_safe, '#', class: 'close', "data-dismiss" => "alert"
|
41
|
+
= flash[:alert]
|
42
|
+
- if flash[:notice]
|
43
|
+
.message.alert.alert-success
|
44
|
+
= link_to '×'.html_safe, '#', class: 'close', "data-dismiss" => "alert"
|
45
|
+
= flash[:notice]
|
46
|
+
.content
|
47
|
+
= yield
|
@@ -0,0 +1,9 @@
|
|
1
|
+
%h1 Edit Category
|
2
|
+
%br
|
3
|
+
%br
|
4
|
+
= simple_form_for(@category, :html => {:multipart => true, :class => 'form-horizontal'}, :url => category_path(@category)) do |f|
|
5
|
+
= f.error_notification
|
6
|
+
= f.input :category, input_html: { class: "span6" }
|
7
|
+
.form-actions
|
8
|
+
= f.button :submit, 'Save', :class => 'btn-primary'
|
9
|
+
= link_to 'Cancel', categories_path, class: 'btn'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
%h1 Listing Categories
|
2
|
+
|
3
|
+
= link_to 'New Category', new_category_path, :class => 'btn-primary btn pull-right'
|
4
|
+
|
5
|
+
%br
|
6
|
+
%br
|
7
|
+
|
8
|
+
= paginate @categories
|
9
|
+
|
10
|
+
%table.table.table-bordered.table-striped
|
11
|
+
%thead
|
12
|
+
%tr
|
13
|
+
%th Category
|
14
|
+
%th  
|
15
|
+
|
16
|
+
%tbody
|
17
|
+
- @categories.each do |category|
|
18
|
+
%tr
|
19
|
+
%td= category.category
|
20
|
+
%td
|
21
|
+
= link_to 'View', category_path(category), :class => 'btn'
|
22
|
+
= link_to 'Edit', edit_category_path(category), :class => 'btn btn-primary'
|
23
|
+
= link_to 'Delete', category_path(category), :confirm => 'Are you sure?', :method => :delete, :class => 'btn btn-danger'
|
24
|
+
|
25
|
+
= paginate @categories
|
26
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
%h1 New Category
|
2
|
+
%br
|
3
|
+
%br
|
4
|
+
= simple_form_for([ @category], :html => {:multipart => true, :class => 'form-horizontal'}) do |f|
|
5
|
+
= f.error_notification
|
6
|
+
= f.input :category, input_html: { class: "span6" }
|
7
|
+
.form-actions
|
8
|
+
= f.button :submit, 'Save', :class => 'btn-primary'
|
9
|
+
= link_to 'Cancel', categories_path, class: 'btn'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
%h1 #{@category.category.titleize} Category
|
2
|
+
|
3
|
+
%br
|
4
|
+
%br
|
5
|
+
|
6
|
+
%table.table.table-bordered.table-striped
|
7
|
+
%thead
|
8
|
+
%tr
|
9
|
+
%th Category
|
10
|
+
%th Date Created
|
11
|
+
%th  
|
12
|
+
|
13
|
+
%tbody
|
14
|
+
%tr
|
15
|
+
%td= @category.category
|
16
|
+
%td=l @category.created_at
|
17
|
+
%td
|
18
|
+
= link_to 'Edit', edit_category_path(@category), :class => 'btn btn-primary'
|
19
|
+
= link_to 'Delete', category_path(@category), :confirm => 'Are you sure?', :method => :delete, :class => 'btn btn-danger'
|
20
|
+
|
21
|
+
%br
|
22
|
+
%br
|
23
|
+
|
24
|
+
%h2
|
25
|
+
Category Items
|
26
|
+
= link_to "New Item", new_category_item_path(@category), class: 'btn btn-primary pull-right'
|
27
|
+
|
28
|
+
%br
|
29
|
+
|
30
|
+
= paginate @items
|
31
|
+
|
32
|
+
%table.table.table-bordered.table-striped
|
33
|
+
%thead
|
34
|
+
%tr
|
35
|
+
%th Title
|
36
|
+
%th Description
|
37
|
+
%th
|
38
|
+
|
39
|
+
%tbody
|
40
|
+
- @items.each do |item|
|
41
|
+
%tr
|
42
|
+
%td= item.title
|
43
|
+
%td= item.description.truncate(150)
|
44
|
+
%td.right
|
45
|
+
= link_to 'View', [ @category, item], :class => 'btn'
|
46
|
+
= link_to 'Edit', [:edit, @category, item], :class => 'btn btn-primary'
|
47
|
+
= link_to 'Delete', [ @category, item], :confirm => 'Are you sure?', :method => :delete, :class => 'btn btn-danger'
|
48
|
+
|
49
|
+
= paginate @items
|
@@ -0,0 +1,11 @@
|
|
1
|
+
%h1 Edit Your Details
|
2
|
+
%br
|
3
|
+
%br
|
4
|
+
= simple_form_for(@user, :html => { :class => 'form-horizontal' }, :url => detail_path(@user)) do |f|
|
5
|
+
= f.input :email, :input_html => { :class => "span6" }
|
6
|
+
= f.input :email_confirmation, :input_html => { :class => "span6" }, required: true
|
7
|
+
= f.input :password, :input_html => { :class => "span6" }
|
8
|
+
= f.input :password_confirmation, :input_html => { :class => "span6" }
|
9
|
+
.form-actions
|
10
|
+
= f.button :submit, 'Save', :class => 'btn-primary'
|
11
|
+
= link_to 'Cancel', detail_path(@user), class: 'btn'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
.photo-fields
|
2
|
+
.controls.item-photo
|
3
|
+
- if f.object.new_record?
|
4
|
+
= f.file_field :image
|
5
|
+
- else
|
6
|
+
= image_tag f.object.image.url
|
7
|
+
%label.checkbox
|
8
|
+
- if SimpleShowcaseAdmin::Config.featured_image
|
9
|
+
Featured?
|
10
|
+
= f.check_box :featured
|
11
|
+
= link_to 'Remove', '#', class: 'remove_child btn btn-mini btn-danger'
|
12
|
+
= f.hidden_field :_destroy, class: :destroy
|
@@ -0,0 +1,26 @@
|
|
1
|
+
%h1 Edit Item
|
2
|
+
%br
|
3
|
+
%br
|
4
|
+
= simple_form_for([@category, @item], :html => {:multipart => true, :class => 'form-horizontal'}) do |f|
|
5
|
+
- f.object.errors.full_messages.each do |msg|
|
6
|
+
= msg
|
7
|
+
= f.error_notification
|
8
|
+
= f.input :title, input_html: { class: "span6" }
|
9
|
+
= f.input :description, input_html: { class: "span6" }
|
10
|
+
.control-group#foo
|
11
|
+
= new_child_fields_template f
|
12
|
+
= f.label :image, 'Photos', class: 'control-label'
|
13
|
+
.controls
|
14
|
+
%div.hint
|
15
|
+
Supports
|
16
|
+
%b.red .jpg .jpeg .png .bmp
|
17
|
+
and
|
18
|
+
%b.red .tiff
|
19
|
+
formats
|
20
|
+
= f.fields_for :photos, @photos do |builder|
|
21
|
+
= render "photos", f: builder
|
22
|
+
.control-group#photo-inputs
|
23
|
+
.controls= add_child_link "Add Another Photo", :photos
|
24
|
+
.form-actions
|
25
|
+
= f.button :submit, 'Save', :class => 'btn-primary'
|
26
|
+
= link_to 'Cancel', category_path(@category), class: 'btn'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
%h1 #{@category.category.titleize} Category
|
2
|
+
|
3
|
+
%br
|
4
|
+
%br
|
5
|
+
|
6
|
+
%table.table.table-bordered.table-striped
|
7
|
+
%thead
|
8
|
+
%tr
|
9
|
+
%th Category
|
10
|
+
%th Date Created
|
11
|
+
%th  
|
12
|
+
|
13
|
+
%tbody
|
14
|
+
%tr
|
15
|
+
%td= @category.category
|
16
|
+
%td=l @category.created_at
|
17
|
+
%td
|
18
|
+
= link_to 'Edit', edit_category_path(@category), :class => 'btn btn-primary'
|
19
|
+
= link_to 'Delete', category_path(@category), :confirm => 'Are you sure?', :method => :delete, :class => 'btn btn-danger'
|
20
|
+
|
21
|
+
%br
|
22
|
+
%br
|
23
|
+
|
24
|
+
%h2
|
25
|
+
Category Items
|
26
|
+
= link_to "New Item", new_category_item_path(@category), class: 'btn btn-primary pull-right'
|
27
|
+
|
28
|
+
%br
|
29
|
+
|
30
|
+
= paginate @items
|
31
|
+
|
32
|
+
%table.table.table-bordered.table-striped
|
33
|
+
%thead
|
34
|
+
%tr
|
35
|
+
%th Items
|
36
|
+
%th  
|
37
|
+
|
38
|
+
%tbody
|
39
|
+
- @items.each do |item|
|
40
|
+
%tr
|
41
|
+
%td= item.title
|
42
|
+
%td= item.description.truncate(150)
|
43
|
+
%td
|
44
|
+
= link_to 'View', category_item_path(@item), :class => 'btn'
|
45
|
+
= link_to 'Edit', edit_category_item_path(@item), :class => 'btn btn-primary'
|
46
|
+
= link_to 'Delete', category_item_path(@item), :confirm => 'Are you sure?', :method => :delete, :class => 'btn btn-danger'
|
47
|
+
|
48
|
+
= paginate @items
|
@@ -0,0 +1,24 @@
|
|
1
|
+
%h1 New Item
|
2
|
+
%br
|
3
|
+
%br
|
4
|
+
= simple_form_for([:category, @item], :html => {:multipart => true, :class => 'form-horizontal'}) do |f|
|
5
|
+
= f.error_notification
|
6
|
+
= f.input :title, input_html: { class: "span6" }
|
7
|
+
= f.input :description, input_html: { class: "span6" }
|
8
|
+
.control-group
|
9
|
+
= f.label :image, 'Photos', class: 'control-label'
|
10
|
+
.controls
|
11
|
+
%div.hint
|
12
|
+
Supports
|
13
|
+
%b.red .jpg .jpeg .png .bmp
|
14
|
+
and
|
15
|
+
%b.red .tiff
|
16
|
+
formats
|
17
|
+
= f.simple_fields_for :photos, @photos do |builder|
|
18
|
+
= render "photos", f: builder
|
19
|
+
.control-group
|
20
|
+
.controls= add_child_link "Add Another Photo", :photos
|
21
|
+
= new_child_fields_template f
|
22
|
+
.form-actions
|
23
|
+
= f.button :submit, 'Save', :class => 'btn-primary'
|
24
|
+
= link_to 'Cancel', category_path(params[:category_id]), class: 'btn'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
= link_to 'Back', category_path(@category), class: 'btn'
|
2
|
+
%br
|
3
|
+
%br
|
4
|
+
%h1= @item.title
|
5
|
+
%br
|
6
|
+
%br
|
7
|
+
%p= markdown(@item.description)
|
8
|
+
%br
|
9
|
+
- @item.photos.each.with_index do |p, i|
|
10
|
+
- if p.image.present?
|
11
|
+
= image_tag p.image.url, alt: "#{@item.title.parameterize}-#{i+1}"
|
12
|
+
%br
|
13
|
+
%br
|
14
|
+
= link_to 'Edit', [:edit, @category, @item], class: 'btn btn-primary'
|
15
|
+
= link_to 'Delete', [@category, @item], method: :delete, class: 'btn btn-danger', confirm: 'Are you sure?'
|