refinerycms-images 0.9.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/admin/images_controller.rb +108 -0
- data/app/helpers/admin/images_helper.rb +27 -0
- data/app/models/image.rb +72 -0
- data/app/views/admin/images/_existing_image.html.erb +73 -0
- data/app/views/admin/images/_form.html.erb +54 -0
- data/app/views/admin/images/_grid_view.html.erb +19 -0
- data/app/views/admin/images/_images.html.erb +2 -0
- data/app/views/admin/images/_list_view.html.erb +10 -0
- data/app/views/admin/images/_list_view_image.html.erb +17 -0
- data/app/views/admin/images/edit.html.erb +1 -0
- data/app/views/admin/images/index.html.erb +38 -0
- data/app/views/admin/images/insert.html.erb +47 -0
- data/app/views/admin/images/new.html.erb +1 -0
- data/config/locales/cs.yml +41 -0
- data/config/locales/da.yml +41 -0
- data/config/locales/de.yml +41 -0
- data/config/locales/el.yml +41 -0
- data/config/locales/en.yml +41 -0
- data/config/locales/es.yml +40 -0
- data/config/locales/fr.yml +41 -0
- data/config/locales/it.yml +47 -0
- data/config/locales/lolcat.yml +41 -0
- data/config/locales/lt.yml +41 -0
- data/config/locales/lv.yml +41 -0
- data/config/locales/nb.yml +42 -0
- data/config/locales/nl.yml +40 -0
- data/config/locales/pl.yml +42 -0
- data/config/locales/pt-BR.yml +42 -0
- data/config/locales/rs.yml +42 -0
- data/config/locales/ru.yml +41 -0
- data/config/locales/sl.yml +40 -0
- data/config/locales/sv.yml +41 -0
- data/config/locales/vi.yml +41 -0
- data/config/locales/zh-CN.yml +41 -0
- data/config/locales/zh-TW.yml +41 -0
- data/config/routes.rb +12 -0
- data/db/migrate/20100913234707_create_refinerycms_images_schema.rb +23 -0
- data/features/manage_images.feature +49 -0
- data/features/step_definitions/image_steps.rb +40 -0
- data/features/support/factories.rb +5 -0
- data/features/support/paths.rb +17 -0
- data/features/uploads/beach.jpeg +0 -0
- data/features/uploads/id-rather-be-here.jpg +0 -0
- data/features/uploads/refinery_is_awesome.txt +1 -0
- data/lib/gemspec.rb +35 -0
- data/lib/generators/refinerycms_images_generator.rb +8 -0
- data/lib/refinerycms-images.rb +69 -0
- data/license.md +21 -0
- data/readme.md +34 -0
- data/refinerycms-images.gemspec +97 -0
- data/spec/models/image_spec.rb +87 -0
- data/spec/uploads/beach.jpeg +0 -0
- metadata +142 -0
@@ -0,0 +1,108 @@
|
|
1
|
+
module Admin
|
2
|
+
class ImagesController < Admin::BaseController
|
3
|
+
|
4
|
+
include Admin::ImagesHelper
|
5
|
+
|
6
|
+
crudify :image,
|
7
|
+
:order => "created_at DESC",
|
8
|
+
:sortable => false
|
9
|
+
|
10
|
+
before_filter :change_list_mode_if_specified, :init_dialog
|
11
|
+
|
12
|
+
def index
|
13
|
+
search_all_images if searching?
|
14
|
+
paginate_all_images
|
15
|
+
|
16
|
+
render :partial => 'images' if request.xhr?
|
17
|
+
end
|
18
|
+
|
19
|
+
def new
|
20
|
+
@image = Image.new if @image.nil?
|
21
|
+
|
22
|
+
@url_override = admin_images_url(:dialog => from_dialog?)
|
23
|
+
end
|
24
|
+
|
25
|
+
# This renders the image insert dialog
|
26
|
+
def insert
|
27
|
+
self.new if @image.nil?
|
28
|
+
|
29
|
+
@url_override = admin_images_url(:dialog => from_dialog?, :insert => true)
|
30
|
+
|
31
|
+
if params[:conditions].present?
|
32
|
+
extra_condition = params[:conditions].split(',')
|
33
|
+
|
34
|
+
extra_condition[1] = true if extra_condition[1] == "true"
|
35
|
+
extra_condition[1] = false if extra_condition[1] == "false"
|
36
|
+
extra_condition[1] = nil if extra_condition[1] == "nil"
|
37
|
+
end
|
38
|
+
|
39
|
+
find_all_images(({extra_condition[0].to_sym => extra_condition[1]} if extra_condition.present?))
|
40
|
+
search_all_images if searching?
|
41
|
+
|
42
|
+
paginate_images
|
43
|
+
|
44
|
+
render :action => "insert"
|
45
|
+
end
|
46
|
+
|
47
|
+
def create
|
48
|
+
@images = []
|
49
|
+
begin
|
50
|
+
unless params[:image].present? and params[:image][:image].is_a?(Array)
|
51
|
+
@images << (@image = Image.create(params[:image]))
|
52
|
+
else
|
53
|
+
params[:image][:image].each do |image|
|
54
|
+
@images << (@image = Image.create(:image => image))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
rescue Dragonfly::FunctionManager::UnableToHandle
|
58
|
+
logger.warn($!.message)
|
59
|
+
@image = Image.new
|
60
|
+
end
|
61
|
+
|
62
|
+
unless params[:insert]
|
63
|
+
if @images.all?{|i| i.valid?}
|
64
|
+
flash.notice = t('created', :scope => 'refinery.crudify', :what => "'#{@images.collect{|i| i.title}.join("', '")}'")
|
65
|
+
unless from_dialog?
|
66
|
+
redirect_to :action => 'index'
|
67
|
+
else
|
68
|
+
render :text => "<script>parent.window.location = '#{admin_images_url}';</script>"
|
69
|
+
end
|
70
|
+
else
|
71
|
+
self.new # important for dialogs
|
72
|
+
render :action => 'new'
|
73
|
+
end
|
74
|
+
else
|
75
|
+
if @images.all?{|i| i.valid?}
|
76
|
+
@image_id = @image.id if @image.persisted?
|
77
|
+
@image = nil
|
78
|
+
end
|
79
|
+
self.insert
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
protected
|
84
|
+
|
85
|
+
def init_dialog
|
86
|
+
@app_dialog = params[:app_dialog].present?
|
87
|
+
@field = params[:field]
|
88
|
+
@update_image = params[:update_image]
|
89
|
+
@thumbnail = params[:thumbnail]
|
90
|
+
@callback = params[:callback]
|
91
|
+
@conditions = params[:conditions]
|
92
|
+
end
|
93
|
+
|
94
|
+
def paginate_images
|
95
|
+
@images = @images.paginate(:page => (@paginate_page_number ||= params[:page]),
|
96
|
+
:per_page => Image.per_page(from_dialog?, !@app_dialog))
|
97
|
+
end
|
98
|
+
|
99
|
+
def restrict_controller
|
100
|
+
super unless action_name == 'insert'
|
101
|
+
end
|
102
|
+
|
103
|
+
def store_current_location!
|
104
|
+
super unless action_name == 'insert' or from_dialog?
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Admin
|
2
|
+
module ImagesHelper
|
3
|
+
|
4
|
+
def image_views
|
5
|
+
RefinerySetting.find_or_set(:image_views, [:grid, :list])
|
6
|
+
end
|
7
|
+
|
8
|
+
def current_image_view
|
9
|
+
RefinerySetting.find_or_set(:preferred_image_view, :grid)
|
10
|
+
end
|
11
|
+
|
12
|
+
def other_image_views
|
13
|
+
image_views.reject {|image_view| image_view.to_s == current_image_view.to_s }
|
14
|
+
end
|
15
|
+
|
16
|
+
def change_list_mode_if_specified
|
17
|
+
if action_name == 'index' and params[:view].present? and image_views.include?(params[:view].to_sym)
|
18
|
+
RefinerySetting.set(:preferred_image_view, params[:view])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def images_paginator(collection, dialog = false)
|
23
|
+
will_paginate collection, :renderer => Refinery::LinkRenderer
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
data/app/models/image.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class Image < ActiveRecord::Base
|
4
|
+
|
5
|
+
# What is the max image size a user can upload
|
6
|
+
MAX_SIZE_IN_MB = 5
|
7
|
+
|
8
|
+
image_accessor :image
|
9
|
+
|
10
|
+
validates :image, :presence => {},
|
11
|
+
:length => { :maximum => MAX_SIZE_IN_MB.megabytes }
|
12
|
+
validates_property :mime_type, :of => :image, :in => %w(image/jpeg image/png image/gif image/tiff),
|
13
|
+
:message => :incorrect_format
|
14
|
+
|
15
|
+
# Docs for acts_as_indexed http://github.com/dougal/acts_as_indexed
|
16
|
+
acts_as_indexed :fields => [:title]
|
17
|
+
|
18
|
+
# when a dialog pops up with images, how many images per page should there be
|
19
|
+
PAGES_PER_DIALOG = 18
|
20
|
+
|
21
|
+
# when a dialog pops up with images, but that dialog has image resize options
|
22
|
+
# how many images per page should there be
|
23
|
+
PAGES_PER_DIALOG_THAT_HAS_SIZE_OPTIONS = 12
|
24
|
+
|
25
|
+
# when listing images out in the admin area, how many images should show per page
|
26
|
+
PAGES_PER_ADMIN_INDEX = 20
|
27
|
+
|
28
|
+
delegate :size, :mime_type, :url, :width, :height, :to => :image
|
29
|
+
|
30
|
+
class << self
|
31
|
+
# How many images per page should be displayed?
|
32
|
+
def per_page(dialog = false, has_size_options = false)
|
33
|
+
if dialog
|
34
|
+
unless has_size_options
|
35
|
+
PAGES_PER_DIALOG
|
36
|
+
else
|
37
|
+
PAGES_PER_DIALOG_THAT_HAS_SIZE_OPTIONS
|
38
|
+
end
|
39
|
+
else
|
40
|
+
PAGES_PER_ADMIN_INDEX
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def user_image_sizes
|
45
|
+
RefinerySetting.find_or_set(:user_image_sizes, {
|
46
|
+
:small => '110x110>',
|
47
|
+
:medium => '225x255>',
|
48
|
+
:large => '450x450>'
|
49
|
+
}, :destroyable => false)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Get a thumbnail job object given a geometry.
|
54
|
+
def thumbnail(geometry = nil)
|
55
|
+
if geometry.is_a?(Symbol) and self.class.user_image_sizes.keys.include?(geometry)
|
56
|
+
geometry = self.class.user_image_sizes[geometry]
|
57
|
+
end
|
58
|
+
|
59
|
+
if geometry.present? && !geometry.is_a?(Symbol)
|
60
|
+
image.thumb(geometry)
|
61
|
+
else
|
62
|
+
image
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns a titleized version of the filename
|
67
|
+
# my_file.jpg returns My File
|
68
|
+
def title
|
69
|
+
CGI::unescape(image_name.to_s).gsub(/\.\w+$/, '').titleize
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<div id='existing_image_area' class='dialog_area' <%= "style='display:none;'" if @image.errors.any? %>>
|
2
|
+
<%= render :partial => '/shared/admin/search',
|
3
|
+
:locals => {:url => insert_admin_images_url(params.dup.delete(:image))} %>
|
4
|
+
<input type='hidden' name='selected_image' id='selected_image' />
|
5
|
+
<div id='existing_image_area_content' class='clearfix'>
|
6
|
+
<% if @images.any? %>
|
7
|
+
<ul>
|
8
|
+
<%
|
9
|
+
@images.each do |image|
|
10
|
+
thumbnail_urls = {
|
11
|
+
:"data-original" => image.url,
|
12
|
+
:"data-grid" => image.thumbnail('135x135#c').url
|
13
|
+
}
|
14
|
+
::Image.user_image_sizes.sort_by{|key,geometry| geometry}.each do |size, pixels|
|
15
|
+
thumbnail_urls[:"data-#{size.to_s.parameterize}"] = image.thumbnail(pixels).url
|
16
|
+
end
|
17
|
+
-%>
|
18
|
+
<li<%= " class='selected'" if @image_id == image.id %>>
|
19
|
+
<%= image_fu(image, '106x106#c', {
|
20
|
+
:alt => image.title,
|
21
|
+
:title => image.title,
|
22
|
+
:id => "image_#{image.id}",
|
23
|
+
:'data-id' => image.id
|
24
|
+
}.merge(thumbnail_urls)) -%>
|
25
|
+
</li>
|
26
|
+
<% end -%>
|
27
|
+
</ul>
|
28
|
+
<% elsif searching? %>
|
29
|
+
<%= t('no_results', :scope => 'shared.admin.search') %>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<%= images_paginator @images, from_dialog? %>
|
34
|
+
|
35
|
+
<% unless @app_dialog or @images.empty? %>
|
36
|
+
<div id='existing_image_size_area' class='clearfix'>
|
37
|
+
<input type='hidden' name='selected_image_size' id='selected_image_size' />
|
38
|
+
<p>
|
39
|
+
<input type="checkbox" id="wants_to_resize_image" name="wants_to_resize_image" value="1" checked="checked" />
|
40
|
+
<label for='wants_to_resize_image' class='stripped' style='font-weight: bold;'>
|
41
|
+
<%= t('.resize_image') %>
|
42
|
+
</label>
|
43
|
+
</p>
|
44
|
+
<ul>
|
45
|
+
<%
|
46
|
+
::Image.user_image_sizes.sort_by { |key, geometry| geometry }.each_with_index do |(size, pixels), index|
|
47
|
+
safe_pixels = pixels.to_s.gsub(/[<>=]/, '')
|
48
|
+
# (parndt): ' selected' if size.to_s == 'medium' is not very generic, but I
|
49
|
+
# can't think of a decent way of making it so for even sets (e.g. 2,4,6,8,etc image sizes).
|
50
|
+
-%>
|
51
|
+
<li id="image_dialog_size_<%= index %>" class="image_dialog_size<%= ' selected' if size.to_s == 'medium' %>">
|
52
|
+
<%= link_to size.to_s, "##{size}",
|
53
|
+
:'data-geometry' => pixels,
|
54
|
+
:'data-size' => size.to_s.parameterize,
|
55
|
+
:title => "#{size} image (#{safe_pixels})",
|
56
|
+
:tooltip => "#{size} image (#{safe_pixels})" %>
|
57
|
+
</li>
|
58
|
+
<% end -%>
|
59
|
+
</ul>
|
60
|
+
</div>
|
61
|
+
<% end %>
|
62
|
+
|
63
|
+
<%= render :partial => "/shared/admin/form_actions",
|
64
|
+
:locals => {
|
65
|
+
:f => nil,
|
66
|
+
:cancel_url => '',
|
67
|
+
:submit_button_text => t('.button_text'),
|
68
|
+
:hide_submit => @images.empty?,
|
69
|
+
:hide_cancel => false,
|
70
|
+
:hide_delete => true,
|
71
|
+
:cancel_title => nil
|
72
|
+
} if @app_dialog or @images.any? or searching? %>
|
73
|
+
</div>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<%= form_for [:admin, @image], :url => @url_override || @url, :html => {:multipart => true} do |f| %>
|
2
|
+
|
3
|
+
<%= render :partial => "/shared/admin/error_messages",
|
4
|
+
:locals => {
|
5
|
+
:object => @image,
|
6
|
+
:include_object_name => false
|
7
|
+
} %>
|
8
|
+
|
9
|
+
<div class='field'>
|
10
|
+
<% if action_name =~ /(edit)|(update)/ %>
|
11
|
+
<p>
|
12
|
+
<%= t('.use_current_image') %>
|
13
|
+
<em><%= t('.or') %></em><%= t('.replace_image') %>
|
14
|
+
</p>
|
15
|
+
<p>
|
16
|
+
<%= f.file_field :image %>
|
17
|
+
</p>
|
18
|
+
<% else %>
|
19
|
+
<% # we must only hint at multiple when it's a new record otherwise update fails. %>
|
20
|
+
<%= f.file_field :image, :multiple => true %>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class='field'>
|
25
|
+
<label><%= t('.maximum_image_size', :megabytes => Image::MAX_SIZE_IN_MB) %></label>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<input type='hidden' name='wymeditor' value='<%= params[:wymeditor] %>'>
|
29
|
+
|
30
|
+
<%= render :partial => "/shared/admin/form_actions",
|
31
|
+
:locals => {
|
32
|
+
:f => f,
|
33
|
+
:continue_editing => false,
|
34
|
+
:hide_cancel => (@app_dialog or action_name == "insert" or from_dialog?),
|
35
|
+
:delete_title => t('delete', :scope => 'admin.images'),
|
36
|
+
:delete_confirmation => t('message', :scope => 'shared.admin.delete', :title => @image.image_name)
|
37
|
+
} -%>
|
38
|
+
|
39
|
+
<% if @app_dialog %>
|
40
|
+
<input type='hidden' name='app_dialog' value='<%= @app_dialog %>' />
|
41
|
+
<input type='hidden' name='field' value='<%= @field %>' />
|
42
|
+
<input type='hidden' name='update_image' value='<%= @update_image %>' />
|
43
|
+
<input type='hidden' name='thumbnail' value='<%= @thumbnail %>' />
|
44
|
+
<input type='hidden' name='callback' value='<%= @callback %>' />
|
45
|
+
<input type='hidden' name='conditions' value='<%= @conditions %>' />
|
46
|
+
<% end %>
|
47
|
+
<% end %>
|
48
|
+
|
49
|
+
<% if action_name =~ /(edit)|(update)/ %>
|
50
|
+
<div id='existing_image'>
|
51
|
+
<label><%=t('.current_image') %></label>
|
52
|
+
<%= image_fu @image, '225x255>', :class => "brown_border" %>
|
53
|
+
</div>
|
54
|
+
<% end %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<ul id="image_grid" class="<%= ['clearfix', 'pagination_frame', pagination_css_class].compact.join(' ') %>">
|
2
|
+
<% @images.each_with_index do |image, index| -%>
|
3
|
+
<li id="image_<%= image.id %>" class='image_<%= index % 5 %>'>
|
4
|
+
<%= image_fu image, '135x135#c', :title => image.title %>
|
5
|
+
<span class='actions'>
|
6
|
+
<%= link_to refinery_icon_tag('eye.png'), image.url,
|
7
|
+
:target => "_blank",
|
8
|
+
:title => t('.view_live_html') %>
|
9
|
+
<%= link_to refinery_icon_tag('application_edit.png'), edit_admin_image_path(image),
|
10
|
+
:title => t('edit', :scope => 'admin.images') %>
|
11
|
+
<%= link_to refinery_icon_tag('delete.png'), admin_image_path(image),
|
12
|
+
:class => "cancel confirm-delete",
|
13
|
+
:title => t('delete', :scope => 'admin.images'),
|
14
|
+
:confirm => t('message', :scope => 'shared.admin.delete', :title => image.title),
|
15
|
+
:method => :delete %>
|
16
|
+
</span>
|
17
|
+
</li>
|
18
|
+
<% end -%>
|
19
|
+
</ul>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="<%= ['clearfix', 'pagination_frame', pagination_css_class].compact.join(' ') %>">
|
2
|
+
<% group_by_date(@images).each do |container| %>
|
3
|
+
<% date_time = (image_group = container.last).first.created_at %>
|
4
|
+
<% date = Date.parse(date_time.to_s) %>
|
5
|
+
<h3><%= l(date, :format => :long ) %></h3>
|
6
|
+
<ul>
|
7
|
+
<%= render :partial => 'list_view_image', :collection => image_group %>
|
8
|
+
</ul>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<li id="sortable_<%= list_view_image.id %>" class='clearfix record <%= cycle("on", "on-hover") %>'>
|
2
|
+
<span class='title'>
|
3
|
+
<%= list_view_image.title %> <span class="preview"> </span>
|
4
|
+
</span>
|
5
|
+
<span class='actions'>
|
6
|
+
<%= link_to refinery_icon_tag('eye.png'), list_view_image.url,
|
7
|
+
:target => "_blank",
|
8
|
+
:title => "#{image_fu list_view_image, '96x96#c', :size => '96x96'}" %>
|
9
|
+
<%= link_to refinery_icon_tag('application_edit.png'), edit_admin_image_path(list_view_image),
|
10
|
+
:title => t('edit', :scope => 'admin.images') %>
|
11
|
+
<%= link_to refinery_icon_tag('delete.png'), admin_image_path(list_view_image),
|
12
|
+
:class => "cancel confirm-delete",
|
13
|
+
:title => t('delete', :scope => 'admin.images'),
|
14
|
+
:confirm => t('message', :scope => 'shared.admin.delete', :title => list_view_image.title),
|
15
|
+
:method => :delete %>
|
16
|
+
</span>
|
17
|
+
</li>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => "form" %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<div id='records'>
|
2
|
+
<% if searching? %>
|
3
|
+
<h2><%= t('results_for', :scope => 'shared.admin.search', :query => params[:search]) %></h2>
|
4
|
+
<% end %>
|
5
|
+
<% if @images.any? %>
|
6
|
+
<div class='pagination_container'>
|
7
|
+
<%= render :partial => 'images' %>
|
8
|
+
</div>
|
9
|
+
<% else %>
|
10
|
+
<p>
|
11
|
+
<% unless searching? %>
|
12
|
+
<strong>
|
13
|
+
<%= t('.no_images_yet') %>
|
14
|
+
</strong>
|
15
|
+
<% else %>
|
16
|
+
<%= t('no_results', :scope => 'shared.admin.search') %>
|
17
|
+
<% end %>
|
18
|
+
</p>
|
19
|
+
<% end %>
|
20
|
+
</div>
|
21
|
+
<div id='actions'>
|
22
|
+
<ul>
|
23
|
+
<li>
|
24
|
+
<%= render :partial => "/shared/admin/search", :locals => {:url => admin_images_url} %>
|
25
|
+
</li>
|
26
|
+
<li>
|
27
|
+
<%= link_to t('.create_new_image'), new_admin_image_url(:dialog => true, :width => 600, :height => 300),
|
28
|
+
:class => "add_icon" %>
|
29
|
+
</li>
|
30
|
+
<% other_image_views.each do |image_view| %>
|
31
|
+
<li>
|
32
|
+
<%= link_to t('switch_to', :scope => 'admin.images.index.view', :view_name => t("#{image_view}", :scope => 'admin.images.index.view')),
|
33
|
+
admin_images_url(:view => image_view, :page => params[:page]),
|
34
|
+
:class => "reorder_icon" %>
|
35
|
+
</li>
|
36
|
+
<% end %>
|
37
|
+
</ul>
|
38
|
+
</div>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<% user_can_modify_images = ::Refinery::Plugins.active.names.include?("refinery_images") %>
|
2
|
+
<div id='dialog_menu_left'>
|
3
|
+
<% if (any_images = @images.any?) or searching? %>
|
4
|
+
<span id="existing_image_radio" class="radio<%= " selected_radio" if (no_errors = @image.errors.empty?) %>">
|
5
|
+
<input type='radio' name='image_type' value='existing_image' id='image_type_existing'<%= " checked='true'" if no_errors or searching? %> />
|
6
|
+
<label for='image_type_existing' class='stripped'><%= t('.existing_image') %></label>
|
7
|
+
</span>
|
8
|
+
<% end %>
|
9
|
+
<% if user_can_modify_images %>
|
10
|
+
<span id="upload_image_radio" class="radio<%= " selected_radio" if !no_errors and !any_images %>">
|
11
|
+
<input type='radio' name='image_type' value='upload_image' id='image_type_upload'<%= " checked='true'" if (!any_images or !no_errors) and !searching? %> />
|
12
|
+
<label for='image_type_upload' class='stripped'><%= t('.new_image') %></label>
|
13
|
+
</span>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div id='dialog_main'>
|
18
|
+
<% if any_images or user_can_modify_images %>
|
19
|
+
<%= render :partial => "existing_image" if any_images or searching? %>
|
20
|
+
|
21
|
+
<% if user_can_modify_images %>
|
22
|
+
<div id='upload_image_area' class='dialog_area'<%= " style='display:none;'" if any_images and (no_errors or searching?) %>>
|
23
|
+
<%= render :partial => "form", :locals => {:insert => true} %>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
<% else %>
|
27
|
+
<% flash.now[:error] = t('no_images_yet', :scope => 'admin.images.index').split('.').first.html_safe + "." %>
|
28
|
+
<%= render :partial => "/shared/admin/form_actions",
|
29
|
+
:locals => {
|
30
|
+
:f => nil,
|
31
|
+
:cancel_url => '',
|
32
|
+
:hide_cancel => false,
|
33
|
+
:hide_delete => true,
|
34
|
+
:hide_submit => true,
|
35
|
+
:cancel_button_text => t('close', :scope => 'shared.admin.form_actions'),
|
36
|
+
:cancel_title => nil
|
37
|
+
} %>
|
38
|
+
<% end %>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<% content_for :javascripts do %>
|
42
|
+
<script>
|
43
|
+
$(document).ready(function(){
|
44
|
+
image_dialog.init(<%= @callback.present? ? "self.parent.#{@callback}" : "null" %>);
|
45
|
+
});
|
46
|
+
</script>
|
47
|
+
<% end %>
|