adminpanel 1.2.5 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +0 -1
- data/README.md +9 -6
- data/Rakefile +1 -1
- data/app/helpers/adminpanel/application_helper.rb +2 -2
- data/app/helpers/adminpanel/custom_form_builder.rb +45 -9
- data/app/helpers/adminpanel/shared_pages_helper.rb +10 -3
- data/app/models/adminpanel/gallery.rb +6 -0
- data/app/models/adminpanel/image.rb +3 -8
- data/app/models/adminpanel/section.rb +16 -6
- data/app/uploaders/adminpanel/image_uploader.rb +2 -2
- data/app/views/adminpanel/categories/_categories_table.html.erb +1 -1
- data/app/views/adminpanel/categories/index.html.erb +9 -8
- data/app/views/adminpanel/galleries/edit.html.erb +3 -10
- data/app/views/adminpanel/galleries/index.html.erb +2 -2
- data/app/views/adminpanel/galleries/new.html.erb +3 -3
- data/app/views/adminpanel/sections/edit.html.erb +11 -15
- data/app/views/shared/_form_fields.html.erb +16 -9
- data/app/views/shared/_image_fields.html.erb +2 -23
- data/app/views/shared/_init_editor.html.erb +12 -12
- data/app/views/shared/show.html.erb +4 -3
- data/config/locales/es.yml +3 -0
- data/lib/adminpanel.rb +1 -1
- data/lib/adminpanel/active_record/adminpanel_extension.rb +142 -0
- data/lib/adminpanel/version.rb +1 -1
- data/lib/generators/adminpanel/gallery/gallery_generator.rb +41 -0
- data/lib/generators/adminpanel/gallery/templates/gallery_migration.rb +11 -0
- data/lib/generators/adminpanel/gallery/templates/gallery_template.rb +8 -0
- data/lib/generators/adminpanel/gallery/templates/uploader.rb +86 -0
- data/lib/generators/adminpanel/initialize/initialize_generator.rb +22 -12
- data/lib/generators/adminpanel/initialize/templates/create_adminpanel_categories_table.rb +1 -1
- data/lib/generators/adminpanel/initialize/templates/create_adminpanel_tables.rb +3 -4
- data/lib/generators/adminpanel/initialize/templates/section_uploader.rb +86 -0
- data/lib/generators/adminpanel/resource/resource_generator.rb +72 -22
- data/lib/tasks/adminpanel/adminpanel.rake +1 -1
- data/spec/dummy/.gitignore +2 -1
- data/spec/dummy/app/controllers/adminpanel/categories_controller.rb +2 -2
- data/spec/dummy/app/controllers/adminpanel/products_controller.rb +3 -3
- data/spec/dummy/app/models/adminpanel/categorization.rb +17 -17
- data/spec/dummy/app/models/adminpanel/photo.rb +8 -0
- data/spec/dummy/app/models/adminpanel/product.rb +49 -26
- data/spec/dummy/app/uploader/adminpanel/photo_uploader.rb +86 -0
- data/spec/dummy/app/uploader/adminpanel/section_uploader.rb +86 -0
- data/spec/features/section_pages_spec.rb +4 -4
- data/spec/features/shared_pages_spec.rb +15 -15
- data/spec/generators/gallery_generator_spec.rb +53 -0
- data/spec/generators/initialize_generator_spec.rb +19 -12
- data/spec/generators/resource_generator_spec.rb +44 -37
- data/spec/support/define_factory_models.rb +3 -5
- data/spec/support/test_database.rb +8 -3
- data/spec/tasks/adminpanel_rake_spec.rb +5 -5
- metadata +18 -7
- data/app/helpers/adminpanel/class_definitions_helper.rb +0 -10
- data/app/views/adminpanel/sections/_image_fields.html.erb +0 -24
- data/lib/adminpanel/active_record_extension.rb +0 -123
@@ -1,24 +1,3 @@
|
|
1
1
|
<div class="product-image">
|
2
|
-
|
3
|
-
|
4
|
-
<div class="controls">
|
5
|
-
<%= image_tag f.object.file_url(:thumb) %>
|
6
|
-
</div>
|
7
|
-
</div>
|
8
|
-
<% end %>
|
9
|
-
<div class="control-group">
|
10
|
-
<%= f.label t("model.Adminpanel::Image"), :class => "control-label" %>
|
11
|
-
<div class="controls">
|
12
|
-
<%= f.file_field :file %>
|
13
|
-
<%= f.hidden_field :model, :value => model_name %>
|
14
|
-
<%= f.hidden_field :_destroy %>
|
15
|
-
<%=
|
16
|
-
content_tag(
|
17
|
-
:button,
|
18
|
-
t("action.delete"),
|
19
|
-
:class => "btn btn-danger remove_fields"
|
20
|
-
)
|
21
|
-
%>
|
22
|
-
</div>
|
23
|
-
</div>
|
24
|
-
</div>
|
2
|
+
<%= f.gallery_field :file %>
|
3
|
+
</div>
|
@@ -1,24 +1,24 @@
|
|
1
1
|
var elements = document.querySelectorAll('#<%= field_var %>'),
|
2
2
|
<%= field_var %> = new MediumEditor(elements,{
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
3
|
+
buttons: [
|
4
|
+
'bold',
|
5
|
+
'italic',
|
6
|
+
'underline',
|
7
|
+
'anchor',
|
8
|
+
'header1',
|
9
|
+
'header2',
|
10
|
+
'quote',
|
11
|
+
'unorderedlist'
|
12
|
+
]
|
13
13
|
});
|
14
14
|
|
15
15
|
$(document).ready(function(){
|
16
16
|
$("#<%= field_var %>").on("focusout", function(){
|
17
|
-
|
17
|
+
|
18
18
|
|
19
19
|
//alert(document.getElementById("<%= field_var %>-field").value);
|
20
20
|
//.value = <%= field_var %>.serialize()["editable"]["value"];
|
21
21
|
//$("#<%= field_var %>-field").value = <%= field_var %>.serialize()["editable"]["value"];
|
22
22
|
document.getElementById("<%= field_var %>-field").value = <%= field_var %>.serialize()["<%= field_var %>"]["value"];
|
23
23
|
});
|
24
|
-
});
|
24
|
+
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<% provide(:page_title, t("action.view") + " #{@model.display_name.capitalize}") -%>
|
2
2
|
<% breadcrumb_add(
|
3
|
-
@model.display_name.capitalize.pluralize,
|
3
|
+
@model.display_name.capitalize.pluralize,
|
4
4
|
{
|
5
5
|
:controller => params[:controller],
|
6
6
|
:action => "index"
|
@@ -59,13 +59,14 @@
|
|
59
59
|
<div class="widget-body row-fluid">
|
60
60
|
<div id="gallery-container" class="js-masonry"
|
61
61
|
data-masonry-options='{ "columnWidth": 3, "itemSelector": ".gallery-item" }'>
|
62
|
-
<% resource.
|
62
|
+
<% resource.send(@model.get_image_relationship).each do |image|%>
|
63
63
|
<div class="gallery-item">
|
64
64
|
<%= link_to (image_tag image.file_url(:thumb)), image.file.to_s, :rel => "group", :name => @model.display_name %>
|
65
|
+
<%#= link_to (image_tag image.file_url(:thumb)), image.file.to_s, :rel => "group", :name => @model.display_name %>
|
65
66
|
</div>
|
66
67
|
<% end %>
|
67
68
|
</div>
|
68
69
|
</div>
|
69
70
|
</div>
|
70
71
|
<% end %>
|
71
|
-
</div>
|
72
|
+
</div>
|
data/config/locales/es.yml
CHANGED
@@ -74,9 +74,12 @@ es:
|
|
74
74
|
description: "Descripción"
|
75
75
|
edit: "Editar Sección"
|
76
76
|
default: "Sin Sección"
|
77
|
+
image: "Imagen"
|
77
78
|
session:
|
78
79
|
password: "Contraseña"
|
79
80
|
email: "Correo electrónico"
|
80
81
|
other:
|
81
82
|
choose: "Selecciona %{model} pertenecientes"
|
82
83
|
no description: "No tiene descripción aún"
|
84
|
+
key:
|
85
|
+
telephone: 'Teléfono'
|
data/lib/adminpanel.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "adminpanel/version"
|
2
2
|
require "adminpanel/engine"
|
3
3
|
require "inherited_resources"
|
4
|
-
require "adminpanel/
|
4
|
+
require "adminpanel/active_record/adminpanel_extension"
|
5
5
|
require "carrierwave"
|
6
6
|
require "carrierwave/orm/activerecord"
|
7
7
|
require "google/api_client"
|
@@ -0,0 +1,142 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module AdminpanelExtension
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
#instance methods
|
5
|
+
# def foo
|
6
|
+
|
7
|
+
# end
|
8
|
+
|
9
|
+
# static(class) methods
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def mount_images(relation)
|
13
|
+
has_many relation, :dependent => :destroy
|
14
|
+
accepts_nested_attributes_for relation, :allow_destroy => true
|
15
|
+
end
|
16
|
+
|
17
|
+
def form_attributes
|
18
|
+
[{
|
19
|
+
"name" => {
|
20
|
+
"type" => "text_field",
|
21
|
+
"name" => "name"
|
22
|
+
}
|
23
|
+
}]
|
24
|
+
end
|
25
|
+
|
26
|
+
def display_name
|
27
|
+
"display_name"
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_attribute_name(field)
|
31
|
+
form_attributes.each do |attribute|
|
32
|
+
attribute.each do |name, properties|
|
33
|
+
if name == field
|
34
|
+
return properties["name"]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
return ":("
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def get_attribute_name(field)
|
43
|
+
form_attributes.each do |attribute|
|
44
|
+
attribute.each do |name, properties|
|
45
|
+
if name == field
|
46
|
+
return properties["name"]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
return ":("
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_attribute_label(field)
|
54
|
+
form_attributes.each do |attribute|
|
55
|
+
attribute.each do |name, properties|
|
56
|
+
if name == field
|
57
|
+
return properties["label"]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
return ":("
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_attribute_placeholder(field)
|
65
|
+
form_attributes.each do |attribute|
|
66
|
+
attribute.each do |name, properties|
|
67
|
+
if name == field
|
68
|
+
return properties["placeholder"]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
return ":("
|
73
|
+
end
|
74
|
+
|
75
|
+
def display_attributes
|
76
|
+
display_attributes = []
|
77
|
+
form_attributes.each do |attribute|
|
78
|
+
attribute.each do |name, properties|
|
79
|
+
if properties["show"].nil? || properties["show"] == "true"
|
80
|
+
display_attributes << attribute
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
return display_attributes
|
86
|
+
end
|
87
|
+
|
88
|
+
def has_images?
|
89
|
+
form_attributes.each do |fields|
|
90
|
+
fields.each do |attribute, properties|
|
91
|
+
if properties["type"] == "adminpanel_file_field"
|
92
|
+
return true
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
return false
|
97
|
+
end
|
98
|
+
|
99
|
+
def get_image_relationship
|
100
|
+
form_attributes.each do |fields|
|
101
|
+
fields.each do |attribute, properties|
|
102
|
+
if properties["type"] == "adminpanel_file_field"
|
103
|
+
return attribute
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
return false
|
108
|
+
end
|
109
|
+
|
110
|
+
def belongs_to_relationships
|
111
|
+
belongs_to_classes = []
|
112
|
+
form_attributes.each do |fields|
|
113
|
+
fields.each do |attribute, properties|
|
114
|
+
if properties["type"] == "belongs_to"
|
115
|
+
belongs_to_classes << properties["model"].classify.constantize
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
return belongs_to_classes
|
120
|
+
end
|
121
|
+
|
122
|
+
def has_many_relationships
|
123
|
+
has_many_classes = []
|
124
|
+
form_attributes.each do |fields|
|
125
|
+
fields.each do |attribute, properties|
|
126
|
+
if properties["type"] == "has_many"
|
127
|
+
has_many_classes << properties["model"].classify.constantize
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
return has_many_classes
|
132
|
+
end
|
133
|
+
|
134
|
+
def icon
|
135
|
+
"icon-truck"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# include the extension
|
141
|
+
ActiveRecord::Base.send(:include, AdminpanelExtension)
|
142
|
+
end
|
data/lib/adminpanel/version.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
module Adminpanel
|
3
|
+
module Generators
|
4
|
+
class GalleryGenerator < ActiveRecord::Generators::Base
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
6
|
+
desc "Generate the resource files necessary to use a model"
|
7
|
+
|
8
|
+
# argument :reference_model,
|
9
|
+
# :aliases => "-m",
|
10
|
+
# :type => :string,
|
11
|
+
# :require => true,
|
12
|
+
# :desc => 'Choose the model that you want the uploader to belong_to'
|
13
|
+
|
14
|
+
def create_model
|
15
|
+
template 'gallery_template.rb', "app/models/adminpanel/#{lower_name}.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_uploader
|
19
|
+
template 'uploader.rb', "app/uploader/adminpanel/#{lower_name}_uploader.rb"
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_migration
|
23
|
+
migration_template 'gallery_migration.rb', "db/migrate/create_adminpanel_#{lower_name.pluralize}_table.rb"
|
24
|
+
puts "don't forget to add the form_field, the relationship and #{lower_name}s_attributes it to attr_accessible"
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def reference_name
|
29
|
+
name.singularize.downcase
|
30
|
+
end
|
31
|
+
|
32
|
+
def class_name
|
33
|
+
"#{lower_name.capitalize}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def lower_name
|
37
|
+
"#{name.singularize.downcase}file"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Adminpanel
|
2
|
+
class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
3
|
+
include CarrierWave::RMagick
|
4
|
+
|
5
|
+
storage :file
|
6
|
+
|
7
|
+
def root
|
8
|
+
Rails.root.join 'public/'
|
9
|
+
end
|
10
|
+
|
11
|
+
def store_dir
|
12
|
+
"uploads/image/#{mounted_as}/#{model.id}"
|
13
|
+
end
|
14
|
+
|
15
|
+
# Process files as they are uploaded:
|
16
|
+
# process :resize_to_fill => [1366, 768]
|
17
|
+
|
18
|
+
# THE THUMB VERSION IS NECESSARY!!!!
|
19
|
+
version :thumb do
|
20
|
+
process :resize_to_limit => [220, 220]
|
21
|
+
end
|
22
|
+
|
23
|
+
# however, you can create your own versions:
|
24
|
+
# version :awesome do
|
25
|
+
# process :reside_and_pad => [120, 900]
|
26
|
+
# end
|
27
|
+
|
28
|
+
# resize_and_pad(width, height, background=:transparent, gravity=::Magick::CenterGravity)
|
29
|
+
#
|
30
|
+
# Resize the image to fit within the specified dimensions while retaining
|
31
|
+
# the original aspect ratio. If necessary, will pad the remaining area with
|
32
|
+
# the given color, which defaults to transparent (for gif and png, white for jpeg).
|
33
|
+
#
|
34
|
+
# width (Integer)
|
35
|
+
# the width to scale the image to
|
36
|
+
# height (Integer)
|
37
|
+
# the height to scale the image to
|
38
|
+
# background (String, :transparent)
|
39
|
+
# the color of the background as a hexcode, like “ff45de“
|
40
|
+
# gravity (Magick::GravityType)
|
41
|
+
# how to position the image
|
42
|
+
|
43
|
+
# resize_to_fill(width, height)
|
44
|
+
#
|
45
|
+
# From the RMagick documentation: “Resize the image to fit within the
|
46
|
+
# specified dimensions while retaining the aspect ratio of the original image.
|
47
|
+
# If necessary, crop the image in the larger dimension.“
|
48
|
+
#
|
49
|
+
# See even www.imagemagick.org/RMagick/doc/image3.html#resize_to_fill
|
50
|
+
#
|
51
|
+
# width (Integer)
|
52
|
+
# the width to scale the image to
|
53
|
+
# height (Integer)
|
54
|
+
# the height to scale the image to
|
55
|
+
|
56
|
+
# resize_to_fit(width, height)
|
57
|
+
#
|
58
|
+
# From the RMagick documentation: “Resize the image to fit within the
|
59
|
+
# specified dimensions while retaining the original aspect ratio. The image
|
60
|
+
# may be shorter or narrower than specified in the smaller dimension but
|
61
|
+
# will not be larger than the specified values.“
|
62
|
+
#
|
63
|
+
# See even www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit
|
64
|
+
#
|
65
|
+
# width (Integer)
|
66
|
+
# the width to scale the image to
|
67
|
+
# height (Integer)
|
68
|
+
# the height to scale the image to
|
69
|
+
|
70
|
+
# resize_to_limit(width, height)
|
71
|
+
#
|
72
|
+
# Resize the image to fit within the specified dimensions while retaining
|
73
|
+
# the original aspect ratio. Will only resize the image if it is larger than
|
74
|
+
# the specified dimensions. The resulting image may be shorter or narrower
|
75
|
+
# than specified in the smaller dimension but will not be larger than the
|
76
|
+
# specified values.
|
77
|
+
#
|
78
|
+
# width (Integer)
|
79
|
+
# the width to scale the image to
|
80
|
+
# height (Integer)
|
81
|
+
# the height to scale the image to
|
82
|
+
def extension_white_list
|
83
|
+
%w(jpg jpeg png)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -1,29 +1,39 @@
|
|
1
|
-
|
1
|
+
require 'rails/generators/active_record'
|
2
2
|
module Adminpanel
|
3
3
|
module Generators
|
4
|
-
class InitializeGenerator <
|
4
|
+
class InitializeGenerator < ActiveRecord::Generators::Base
|
5
5
|
desc "Generate the migrations necessary to start the gem"
|
6
6
|
source_root File.expand_path("../templates", __FILE__)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
argument :name, :type => :string, :default => "default", :require => false
|
8
|
+
class_option :'skip-category', :type => :boolean, :aliases => "-c", :default => false, :desc => "Include category skeleton and migration for it"
|
9
|
+
class_option :'skip-uploader', :type => :boolean, :aliases => "-u", :default => false
|
10
|
+
class_option :'skip-migration', :type => :boolean, :aliases => "-m", :default => false
|
11
|
+
class_option :'skip-setup', :type => :boolean, :aliases => "-s", :default => false
|
12
12
|
|
13
13
|
def create_initializers
|
14
|
-
|
14
|
+
if !options[:'skip-setup']
|
15
|
+
copy_file 'adminpanel_setup.rb', 'config/initializers/adminpanel_setup.rb'
|
16
|
+
end
|
15
17
|
end
|
16
18
|
|
17
19
|
def create_categories
|
18
|
-
if options[:
|
19
|
-
puts "including category files"
|
20
|
+
if !options[:'skip-category']
|
21
|
+
# puts "including category files"
|
20
22
|
copy_file "category_template.rb", 'app/models/adminpanel/category.rb'
|
21
|
-
migration_template 'create_adminpanel_categories_table.rb', 'db/migrate/
|
23
|
+
migration_template 'create_adminpanel_categories_table.rb', 'db/migrate/create_adminpanel_categories_table.rb'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_section_uploader
|
28
|
+
if !options[:'skip-uploader']
|
29
|
+
copy_file "section_uploader.rb", 'app/uploader/adminpanel/section_uploader.rb'
|
22
30
|
end
|
23
31
|
end
|
24
32
|
|
25
33
|
def create_migration
|
26
|
-
|
34
|
+
if !options[:'skip-migration']
|
35
|
+
migration_template 'create_adminpanel_tables.rb', 'db/migrate/create_adminpanel_tables.rb'
|
36
|
+
end
|
27
37
|
end
|
28
38
|
|
29
39
|
end
|