adminpanel 3.1.0 → 3.2.0
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.
- checksums.yaml +4 -4
- data/adminpanel.gemspec +1 -0
- data/app/assets/javascripts/adminpanel/realm.js +43 -43
- data/app/assets/javascripts/adminpanel/trix-upload.coffee +45 -0
- data/app/controllers/concerns/adminpanel/gallery_actions.rb +2 -1
- data/app/controllers/concerns/adminpanel/rest_actions.rb +12 -11
- data/app/helpers/adminpanel/adminpanel_form_builder.rb +28 -2
- data/app/helpers/adminpanel/application_helper.rb +14 -9
- data/app/helpers/adminpanel/router_helper.rb +1 -1
- data/app/models/adminpanel/image.rb +1 -8
- data/app/models/concerns/adminpanel/base.rb +63 -37
- data/app/views/adminpanel/icons/_delete.html.erb +3 -0
- data/app/views/adminpanel/icons/_edit.html.erb +6 -1
- data/app/views/adminpanel/icons/_facebook.html.erb +3 -1
- data/app/views/adminpanel/icons/_new.html.erb +6 -1
- data/app/views/adminpanel/icons/_show.html.erb +6 -1
- data/app/views/adminpanel/icons/_twitter.html.erb +3 -0
- data/config/routes.rb +2 -2
- data/lib/adminpanel/version.rb +1 -1
- data/test/dummy/app/controllers/adminpanel/test_objects_controller.rb +4 -0
- data/test/dummy/app/models/adminpanel/test_object.rb +3 -0
- data/test/dummy/app/models/adminpanel/textfile.rb +7 -0
- data/test/dummy/config/initializers/adminpanel_setup.rb +1 -0
- data/test/features/shared/form/checkbox_test.rb +0 -1
- data/test/features/shared/form/enum_field_test.rb +0 -1
- data/test/features/shared/form/has_many_through_remote_test.rb +1 -2
- data/test/features/shared/form/modal_contents_test.rb +0 -1
- data/test/features/shared/form/resource_field_test.rb +0 -1
- data/test/features/shared/form/select_test.rb +0 -1
- data/test/features/shared/form/wysiwyg_test.rb +23 -0
- metadata +24 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5f00c2db221e6cb620e033aa8a68858d6b3981a
|
4
|
+
data.tar.gz: 5bd1f80432627e6a24dd8a133ea42eb652dde722
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 271dcd2b02ed4b3ef483d2ada2e043910a9894b7c4660fda66e066bac6e18aae5034d76d04825c48205a8094c5837d47c6a992a0f9b0245164f59499958b042f
|
7
|
+
data.tar.gz: f32a7d5d6d64d5af11b35fd42286a7b7c0dbc529c185ba0b5d011c22750eb1ab942bb71b222d82a43d2660a821cac84815b3ba5cddc656eee01b48dd9c6f5af2
|
data/adminpanel.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
var ready = function(){
|
2
2
|
|
3
3
|
// toggle arrow on menu items
|
4
|
-
$('.accordion-heading .accordion-toggle').click(function(){
|
5
|
-
|
6
|
-
});
|
4
|
+
// $('.accordion-heading .accordion-toggle').click(function(){
|
5
|
+
// $('.accordion-heading .accordion-toggle').not($(this)[0], '.accordion-heading .accordion-toggle.collapse').addClass('collapsed');
|
6
|
+
// });
|
7
7
|
|
8
8
|
// show the overview boxes on the dashboard once they are loaded
|
9
|
-
$('.overview_boxes .box_row').css('display', 'inline-block');
|
9
|
+
// $('.overview_boxes .box_row').css('display', 'inline-block');
|
10
10
|
|
11
11
|
// init tooltips on .tips class elements, text for the tooltip is in the data-title attribute on the element itself
|
12
|
-
|
12
|
+
$('[data-toggle="tooltip"]').tooltip();
|
13
13
|
|
14
14
|
// init popover on .pop class elements
|
15
15
|
// $('.pop').popover({
|
@@ -25,22 +25,22 @@ var ready = function(){
|
|
25
25
|
|
26
26
|
|
27
27
|
// funtion to slide menu out from the left
|
28
|
-
$('.slide_menu_left').click(function(e){
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
});
|
28
|
+
// $('.slide_menu_left').click(function(e){
|
29
|
+
//
|
30
|
+
// e.preventDefault();
|
31
|
+
// if($(".nav-collapse.collapse").hasClass('open_left')){
|
32
|
+
// sidemenu_close();
|
33
|
+
// }else{
|
34
|
+
// sidemenu_open();
|
35
|
+
// $('.main_container').bind('click', function(){
|
36
|
+
// sidemenu_close();
|
37
|
+
// });
|
38
|
+
// // var handler = function() {
|
39
|
+
// // sidemenu_close();
|
40
|
+
// // };
|
41
|
+
// // $(window).bind('resize', handler);
|
42
|
+
// }
|
43
|
+
// });
|
44
44
|
|
45
45
|
|
46
46
|
// collapse function for the widget
|
@@ -65,25 +65,25 @@ $(document).on('page:load', ready);
|
|
65
65
|
//----- Side menu functions -----
|
66
66
|
|
67
67
|
// slide menu out of view
|
68
|
-
function sidemenu_close(){
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
}
|
80
|
-
|
81
|
-
// slide menu in
|
82
|
-
function sidemenu_open(){
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
}
|
68
|
+
// function sidemenu_close(){
|
69
|
+
// $(".main_container").stop().animate({
|
70
|
+
// 'left': '0'
|
71
|
+
// }, 250, 'swing');
|
72
|
+
// $(".nav-collapse.collapse").stop().animate({
|
73
|
+
// 'left': '-150px'
|
74
|
+
// }, 250, 'swing').removeClass('open_left');
|
75
|
+
// $('.main_container').unbind('click');
|
76
|
+
// if(typeof handler != 'undefined'){
|
77
|
+
// $(window).unbind('resize', handler);
|
78
|
+
// }
|
79
|
+
// }
|
80
|
+
//
|
81
|
+
// // slide menu in
|
82
|
+
// function sidemenu_open(){
|
83
|
+
// $(".main_container").stop().animate({
|
84
|
+
// 'left': '150px'
|
85
|
+
// }, 250, 'swing');
|
86
|
+
// $(".nav-collapse.collapse").stop().animate({
|
87
|
+
// 'left': '0'
|
88
|
+
// }, 250, 'swing').addClass('open_left');
|
89
|
+
// }
|
@@ -0,0 +1,45 @@
|
|
1
|
+
document.addEventListener "trix-attachment-add", (event) ->
|
2
|
+
attachment = event.attachment
|
3
|
+
if attachment.file
|
4
|
+
return uploadAttachment(event)
|
5
|
+
|
6
|
+
document.addEventListener "trix-attachment-remove", (event) ->
|
7
|
+
image_url = event.attachment.attachment.preloadedURL
|
8
|
+
$("input[data-url='#{image_url}']").remove()
|
9
|
+
|
10
|
+
uploadAttachment = (e) ->
|
11
|
+
$element = $(e.srcElement)
|
12
|
+
$form = $('form:first')
|
13
|
+
host = $form.data('trix-url')
|
14
|
+
attachment = e.attachment
|
15
|
+
file = attachment.file
|
16
|
+
formData = new FormData
|
17
|
+
formData.append("parent_object_class", $form.data('parent-class'))
|
18
|
+
formData.append("model", $element.data('uploader-class'))
|
19
|
+
formData.append("file", file)
|
20
|
+
|
21
|
+
xhr = new XMLHttpRequest
|
22
|
+
xhr.open("POST", host, true)
|
23
|
+
|
24
|
+
xhr.upload.onprogress = (event) ->
|
25
|
+
progress = event.loaded / event.total * 100
|
26
|
+
return attachment.setUploadProgress(progress)
|
27
|
+
|
28
|
+
xhr.onload = ->
|
29
|
+
if (xhr.status is 204 || xhr.status is 200)
|
30
|
+
response = JSON.parse(xhr.responseText)
|
31
|
+
|
32
|
+
uploader = $element.data('uploader-name')
|
33
|
+
console.log $element
|
34
|
+
console.log uploader
|
35
|
+
$form.append("<input type=\"hidden\" name=\"#{$form.data('params-key')}[#{uploader.slice(0, -1)}_ids][]\" value=\"#{response.id}\" />")
|
36
|
+
return attachment.setAttributes({
|
37
|
+
url: response.image_url,
|
38
|
+
href: response.image_url
|
39
|
+
})
|
40
|
+
|
41
|
+
xhr.setRequestHeader(
|
42
|
+
"X-CSRF-Token",
|
43
|
+
$('meta[name="csrf-token"]').attr('content')
|
44
|
+
)
|
45
|
+
return xhr.send(formData)
|
@@ -31,7 +31,12 @@ module Adminpanel
|
|
31
31
|
def new
|
32
32
|
@resource_instance = @model.new
|
33
33
|
respond_to do |format|
|
34
|
-
|
34
|
+
format.html do
|
35
|
+
render 'adminpanel/templates/new'
|
36
|
+
end
|
37
|
+
format.js do
|
38
|
+
render 'adminpanel/templates/new'
|
39
|
+
end
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
@@ -52,7 +57,12 @@ module Adminpanel
|
|
52
57
|
end
|
53
58
|
end
|
54
59
|
else
|
55
|
-
|
60
|
+
format.html do
|
61
|
+
render 'adminpanel/templates/new'
|
62
|
+
end
|
63
|
+
format.js do
|
64
|
+
render 'adminpanel/templates/new'
|
65
|
+
end
|
56
66
|
end
|
57
67
|
end
|
58
68
|
end
|
@@ -102,14 +112,5 @@ module Adminpanel
|
|
102
112
|
resource = controller_name.singularize.to_sym
|
103
113
|
"#{resource}_params"
|
104
114
|
end
|
105
|
-
|
106
|
-
def render_new(format)
|
107
|
-
format.html do
|
108
|
-
render 'adminpanel/templates/new'
|
109
|
-
end
|
110
|
-
format.js do
|
111
|
-
render 'adminpanel/templates/new'
|
112
|
-
end
|
113
|
-
end
|
114
115
|
end
|
115
116
|
end
|
@@ -55,7 +55,14 @@ module Adminpanel
|
|
55
55
|
|
56
56
|
options = args.extract_options!
|
57
57
|
|
58
|
-
hidden_field(
|
58
|
+
hidden_field(
|
59
|
+
method,
|
60
|
+
id: "#{self.object.class.to_s.demodulize}-trix-#{method}"
|
61
|
+
) + base_layout(
|
62
|
+
method,
|
63
|
+
options,
|
64
|
+
'trix_field'
|
65
|
+
)
|
59
66
|
end
|
60
67
|
|
61
68
|
def text_area(method, *args)
|
@@ -204,10 +211,29 @@ module Adminpanel
|
|
204
211
|
options = args.extract_options!
|
205
212
|
options.reverse_merge! input: "#{self.object.class.to_s.demodulize}-trix-#{method}", id: "#{method}-trix-editor"
|
206
213
|
options[:class] << ' trix-content'
|
214
|
+
options[:data] ||= {}
|
215
|
+
editor_images = []
|
216
|
+
if options['uploader'].present?
|
217
|
+
options[:data][:uploader_name] = options['uploader'].to_s
|
218
|
+
options[:data][:uploader_class] = "Adminpanel::#{options['uploader'].to_s.singularize.capitalize}"
|
219
|
+
relation_name = "#{options['uploader'].to_s.singularize}_ids"
|
220
|
+
editor_images = self.object.send(options['uploader'].to_s)
|
221
|
+
empty_uploader_field = @template.hidden_field_tag "#{self.object.class.name.demodulize.underscore}[#{relation_name}][]"
|
222
|
+
end
|
207
223
|
|
208
|
-
@template.content_tag 'trix-editor', options do
|
224
|
+
editor = @template.content_tag 'trix-editor', options do
|
209
225
|
self.object.send(method)
|
210
226
|
end
|
227
|
+
editor_images_fields = editor_images.map {|image|
|
228
|
+
@template.hidden_field_tag(
|
229
|
+
"#{self.object.class.name.demodulize.underscore}[#{relation_name}][]",
|
230
|
+
image.id,
|
231
|
+
data: {
|
232
|
+
url: image.file_url(:thumb)
|
233
|
+
}
|
234
|
+
)
|
235
|
+
}.join('').html_safe
|
236
|
+
editor + empty_uploader_field + editor_images_fields
|
211
237
|
end
|
212
238
|
|
213
239
|
private
|
@@ -4,19 +4,24 @@ module Adminpanel
|
|
4
4
|
include BreadcrumbsHelper
|
5
5
|
include SharedPagesHelper
|
6
6
|
|
7
|
-
def adminpanel_form_for(
|
7
|
+
def adminpanel_form_for(object, *args, &block)
|
8
8
|
options = args.extract_options!
|
9
9
|
options.reverse_merge! builder: Adminpanel::AdminpanelFormBuilder, html: { class: 'form-horizontal' }
|
10
|
-
if
|
11
|
-
options[:html][:"data-parent-object-class"] =
|
12
|
-
options[:html][:"data-parent-object-id"] =
|
13
|
-
options[:html][:"data-dropzone"] =
|
14
|
-
options[:html][:"data-dropzone-galleries"] =
|
15
|
-
options[:html][:"data-dropzone-url"] = url_for(controller:
|
16
|
-
options[:html][:"data-dropzone-delete-url"] = url_for(controller:
|
10
|
+
if @model.has_gallery?
|
11
|
+
options[:html][:"data-parent-object-class"] = @model.to_s
|
12
|
+
options[:html][:"data-parent-object-id"] = object.id
|
13
|
+
options[:html][:"data-dropzone"] = @model.to_s.demodulize.underscore
|
14
|
+
options[:html][:"data-dropzone-galleries"] = @model.galleries.to_json
|
15
|
+
options[:html][:"data-dropzone-url"] = url_for(controller: @model.to_controller_name, action: :add_to_gallery)
|
16
|
+
options[:html][:"data-dropzone-delete-url"] = url_for(controller: @model.to_controller_name, action: :remove_image)
|
17
|
+
end
|
18
|
+
if @model.has_trix_gallery?
|
19
|
+
options[:html][:"data-trix-url"] = url_for(controller: @model.to_controller_name, action: :add_to_gallery)
|
20
|
+
options[:html][:"data-parent-class"] ||= @model.to_s
|
21
|
+
options[:html][:"data-params-key"] ||= @model.to_s.demodulize.underscore
|
17
22
|
end
|
18
23
|
|
19
|
-
form_for(
|
24
|
+
form_for(object, *(args << options), &block)
|
20
25
|
end
|
21
26
|
|
22
27
|
def full_title(page_title)
|
@@ -5,7 +5,7 @@ module Adminpanel
|
|
5
5
|
belongs_to :model, polymorphic: true
|
6
6
|
|
7
7
|
before_save :store_file_size_and_content_type
|
8
|
-
|
8
|
+
|
9
9
|
before_destroy :remove_attachment
|
10
10
|
|
11
11
|
private
|
@@ -20,12 +20,5 @@ module Adminpanel
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# def delete_old_unused_images
|
24
|
-
# self.class.where('created_at < ?', Time.now - 30.minutes)
|
25
|
-
# .delete_all(
|
26
|
-
# model_id: nil,
|
27
|
-
# type: self.type
|
28
|
-
# )
|
29
|
-
# end
|
30
23
|
end
|
31
24
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# Adminpanel API
|
2
|
+
# This file must be included on every adminpanel resource.
|
3
|
+
|
1
4
|
module Adminpanel
|
2
5
|
module Base
|
3
6
|
extend ActiveSupport::Concern
|
4
7
|
|
5
8
|
module ClassMethods
|
6
|
-
|
9
|
+
FILE_FIELD_NAME = 'adminpanel_file_field'
|
7
10
|
|
8
11
|
|
9
|
-
# Adminpanel API
|
10
12
|
def mount_images(relation)
|
11
13
|
has_many relation, dependent: :destroy, as: :model
|
12
14
|
accepts_nested_attributes_for relation, allow_destroy: true
|
@@ -31,7 +33,7 @@ module Adminpanel
|
|
31
33
|
'please overwrite self.display_name'
|
32
34
|
end
|
33
35
|
|
34
|
-
# side
|
36
|
+
# fontawesome icon to be used in the side-menu
|
35
37
|
def icon
|
36
38
|
'truck'
|
37
39
|
end
|
@@ -59,7 +61,7 @@ module Adminpanel
|
|
59
61
|
def display_attributes(type)
|
60
62
|
display_attributes = []
|
61
63
|
form_attributes.each do |attribute|
|
62
|
-
attribute.each do |
|
64
|
+
attribute.each do |_, properties|
|
63
65
|
if (
|
64
66
|
properties['show'].nil? ||
|
65
67
|
properties['show'] == 'true' ||
|
@@ -75,8 +77,8 @@ module Adminpanel
|
|
75
77
|
return display_attributes
|
76
78
|
end
|
77
79
|
|
78
|
-
#
|
79
|
-
#
|
80
|
+
# Check if this models has a gallery in its attributes
|
81
|
+
# @return boolean
|
80
82
|
def has_gallery?
|
81
83
|
form_attributes.each do |fields|
|
82
84
|
fields.each do |attribute, properties|
|
@@ -85,16 +87,32 @@ module Adminpanel
|
|
85
87
|
end
|
86
88
|
end
|
87
89
|
end
|
88
|
-
|
90
|
+
false
|
89
91
|
end
|
90
92
|
|
91
|
-
#
|
93
|
+
# Check if this models has a trix editor with a gallery in its attributes
|
94
|
+
# @return boolean
|
95
|
+
def has_trix_gallery?
|
96
|
+
form_attributes.each do |fields|
|
97
|
+
fields.each do |attribute, properties|
|
98
|
+
if properties['type'] == 'wysiwyg_field' || properties['uploader'].present?
|
99
|
+
return true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
false
|
104
|
+
end
|
105
|
+
|
106
|
+
# Returns an array with all the adminpanel_file_field`s attributes found
|
107
|
+
# in form_attributes
|
108
|
+
# @return Hash
|
109
|
+
# => { sectionfiles: Adminpanel::SectionFile, ... }
|
92
110
|
def galleries
|
93
111
|
galleries = {}
|
94
112
|
form_attributes.each do |fields|
|
95
|
-
fields.each do |
|
113
|
+
fields.each do |relation, properties|
|
96
114
|
if properties['type'] == FILE_FIELD_NAME
|
97
|
-
galleries["#{
|
115
|
+
galleries["#{relation.singularize}"] = "adminpanel/#{relation}".classify.constantize.to_s
|
98
116
|
end
|
99
117
|
end
|
100
118
|
end
|
@@ -102,12 +120,15 @@ module Adminpanel
|
|
102
120
|
return galleries
|
103
121
|
end
|
104
122
|
|
123
|
+
# Returns an array with all the adminpanel_file_field`s attributes who are
|
124
|
+
# sortable found in form_attributes
|
125
|
+
# @return Hash
|
105
126
|
def sortable_galleries
|
106
127
|
galleries = {}
|
107
128
|
form_attributes.each do |fields|
|
108
|
-
fields.each do |
|
109
|
-
if properties['type'] == FILE_FIELD_NAME && "adminpanel/#{
|
110
|
-
galleries["#{
|
129
|
+
fields.each do |relation, properties|
|
130
|
+
if properties['type'] == FILE_FIELD_NAME && "adminpanel/#{relation}".classify.constantize.is_sortable?
|
131
|
+
galleries["#{relation.singularize}"] = "adminpanel/#{relation}".classify.constantize.to_s
|
111
132
|
end
|
112
133
|
end
|
113
134
|
end
|
@@ -133,7 +154,8 @@ module Adminpanel
|
|
133
154
|
"adminpanel/#{gallery_relationship}".classify.constantize
|
134
155
|
end
|
135
156
|
|
136
|
-
#
|
157
|
+
# Search for a model attribute's that are of a given type
|
158
|
+
# @return Array
|
137
159
|
# Usage:
|
138
160
|
# To get all classes of all belongs_to attributes:
|
139
161
|
# @model.relationships_of('belongs_to')
|
@@ -150,12 +172,14 @@ module Adminpanel
|
|
150
172
|
return classes_of_relation
|
151
173
|
end
|
152
174
|
|
175
|
+
# routes options to be used when generating this model routes
|
176
|
+
# @return Hash
|
153
177
|
def routes_options
|
154
178
|
{ path: collection_name.parameterize }
|
155
179
|
end
|
156
180
|
|
157
181
|
def has_route?(route)
|
158
|
-
if (!
|
182
|
+
if (!exclude_route?(route)) && include_route?(route)
|
159
183
|
true
|
160
184
|
else
|
161
185
|
false
|
@@ -170,10 +194,12 @@ module Adminpanel
|
|
170
194
|
false
|
171
195
|
end
|
172
196
|
|
197
|
+
# Additional member routes for this resource
|
173
198
|
def member_routes
|
174
199
|
[]
|
175
200
|
end
|
176
201
|
|
202
|
+
# Additional collection routes for this resource
|
177
203
|
def collection_routes
|
178
204
|
[]
|
179
205
|
end
|
@@ -192,34 +218,34 @@ module Adminpanel
|
|
192
218
|
|
193
219
|
private
|
194
220
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
221
|
+
def exclude_route?(route)
|
222
|
+
if routes_options[:except].nil?
|
223
|
+
false
|
224
|
+
elsif routes_options[:except].include?(route)
|
225
|
+
true
|
226
|
+
else
|
227
|
+
false
|
228
|
+
end
|
202
229
|
end
|
203
|
-
end
|
204
230
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
231
|
+
def include_route?(route)
|
232
|
+
if routes_options[:only].nil? || routes_options[:only].include?(route)
|
233
|
+
true
|
234
|
+
else
|
235
|
+
false
|
236
|
+
end
|
210
237
|
end
|
211
|
-
end
|
212
238
|
|
213
|
-
|
239
|
+
end
|
214
240
|
|
215
|
-
|
216
|
-
|
217
|
-
|
241
|
+
def destroy_unattached_images
|
242
|
+
self.class.galleries.each{|gallery| gallery.last.constantize.delete_all(model_id: nil) }
|
243
|
+
end
|
218
244
|
|
219
|
-
|
220
|
-
|
221
|
-
|
245
|
+
def correlative_order_gallery
|
246
|
+
self.class.galleries.each do |gallery|
|
247
|
+
self.send(gallery.first.pluralize).ordered.each_with_index{ |image, index| image.update(position: index + 1) }
|
248
|
+
end
|
222
249
|
end
|
223
|
-
end
|
224
250
|
end
|
225
251
|
end
|
@@ -8,7 +8,12 @@
|
|
8
8
|
),
|
9
9
|
[:edit, resource],
|
10
10
|
title: I18n.t('action.update', resource: resource.name),
|
11
|
-
|
11
|
+
data: {
|
12
|
+
toggle: :tooltip,
|
13
|
+
placement: :left,
|
14
|
+
title: I18n.t('action.update', resource: resource.name)
|
15
|
+
},
|
16
|
+
class: 'tip spinner-link'
|
12
17
|
)
|
13
18
|
%>
|
14
19
|
<% end %>
|
@@ -6,8 +6,10 @@ if @model.fb_share? && can?(:publish, @model)
|
|
6
6
|
else
|
7
7
|
link = '#'
|
8
8
|
options = { target: "#fb-#{resource.id}", toggle: 'modal' }
|
9
|
-
|
10
9
|
end
|
10
|
+
options[:toggle] ||= ''
|
11
|
+
options[:toggle] << ' tooltip'
|
12
|
+
options[:title] = 'Compartir en Facebook'
|
11
13
|
%>
|
12
14
|
<%=
|
13
15
|
link_to(
|
@@ -11,7 +11,12 @@
|
|
11
11
|
action: :new
|
12
12
|
},
|
13
13
|
title: I18n.t('action.create', resource: @model.display_name),
|
14
|
-
class: 'spinner-link'
|
14
|
+
class: 'spinner-link',
|
15
|
+
data: {
|
16
|
+
toggle: :tooltip,
|
17
|
+
placement: :left,
|
18
|
+
title: I18n.t('action.create', resource: @model.display_name),
|
19
|
+
}
|
15
20
|
)
|
16
21
|
%>
|
17
22
|
<% end %>
|
@@ -9,7 +9,12 @@
|
|
9
9
|
[resource],
|
10
10
|
class: 'spinner-link',
|
11
11
|
title: I18n.t('action.show', resource: resource.name),
|
12
|
-
id: 'show-resource-icon'
|
12
|
+
id: 'show-resource-icon',
|
13
|
+
data: {
|
14
|
+
toggle: :tooltip,
|
15
|
+
placement: :left,
|
16
|
+
title: I18n.t('action.show', resource: resource.name)
|
17
|
+
}
|
13
18
|
)
|
14
19
|
%>
|
15
20
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -47,7 +47,7 @@ Adminpanel::Engine.routes.draw do
|
|
47
47
|
if has_fb_share?(resource)
|
48
48
|
# include facebook concern
|
49
49
|
get :fb_choose_page, as: 'fb_choose_page', path: I18n.t('routes.publish', location: I18n.t('routes.facebook_page'))
|
50
|
-
post :fb_save_token, as: 'fb_save_token',
|
50
|
+
post :fb_save_token, as: 'fb_save_token', path: 'guardar-token-fb'
|
51
51
|
post :fb_publish, to: "#{resource}#fb_publish", as: 'fb_publish', path: I18n.t('routes.publish', location: 'facebook')
|
52
52
|
end
|
53
53
|
|
@@ -67,7 +67,7 @@ Adminpanel::Engine.routes.draw do
|
|
67
67
|
|
68
68
|
if has_gallery?(resource)
|
69
69
|
post :add_to_gallery, to: "#{resource}#add_to_gallery", as: 'add_to_gallery', path: I18n.t('routes.add_to_gallery')
|
70
|
-
delete :remove_image, to: "#{resource}#remove_image",
|
70
|
+
delete :remove_image, to: "#{resource}#remove_image", as: 'remove_image', path: I18n.t('routes.remove_image')
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
data/lib/adminpanel/version.rb
CHANGED
@@ -4,6 +4,8 @@ module Adminpanel
|
|
4
4
|
has_and_belongs_to_many :categories,
|
5
5
|
join_table: "adminpanel_test_object_category"
|
6
6
|
|
7
|
+
mount_images :textfiles
|
8
|
+
|
7
9
|
def self.form_attributes
|
8
10
|
[
|
9
11
|
{
|
@@ -29,6 +31,7 @@ module Adminpanel
|
|
29
31
|
{
|
30
32
|
'text' => {
|
31
33
|
'type' => 'wysiwyg_field',
|
34
|
+
'uploader' => 'textfiles',
|
32
35
|
'label' => 'wysi'
|
33
36
|
}
|
34
37
|
},
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class WysiwygTest < ViewCase
|
4
|
+
|
5
|
+
setup :sign_in
|
6
|
+
teardown :teardown
|
7
|
+
|
8
|
+
def test_form_with_trix_data_attributes_when_uploader
|
9
|
+
visit adminpanel.new_test_object_path
|
10
|
+
|
11
|
+
assert_equal '/adminpanel/please-overwrite-self-display_names/agregar-a-galeria', find('form')['data-trix-url'], "data-trix-url not correct"
|
12
|
+
assert_equal 'Adminpanel::TestObject', find('form')['data-parent-class'], "data-parent-class not correct"
|
13
|
+
assert_equal 'test_object', find('form')['data-params-key'], "data-params-key not correct"
|
14
|
+
|
15
|
+
assert_selector 'input[name="test_object[textfile_ids][]"]'
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def sign_in
|
20
|
+
visit adminpanel.signin_path
|
21
|
+
login
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adminpanel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jose Ramon Camacho
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-04-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -424,6 +424,20 @@ dependencies:
|
|
424
424
|
- - ">="
|
425
425
|
- !ruby/object:Gem::Version
|
426
426
|
version: 1.3.10
|
427
|
+
- !ruby/object:Gem::Dependency
|
428
|
+
name: byebug
|
429
|
+
requirement: !ruby/object:Gem::Requirement
|
430
|
+
requirements:
|
431
|
+
- - ">="
|
432
|
+
- !ruby/object:Gem::Version
|
433
|
+
version: '0'
|
434
|
+
type: :development
|
435
|
+
prerelease: false
|
436
|
+
version_requirements: !ruby/object:Gem::Requirement
|
437
|
+
requirements:
|
438
|
+
- - ">="
|
439
|
+
- !ruby/object:Gem::Version
|
440
|
+
version: '0'
|
427
441
|
description: |-
|
428
442
|
Gem that focus on making a public site's resources very quickly while being very configurable!,
|
429
443
|
supports facebook sharing, twitter, instagram and google analytics integration
|
@@ -491,6 +505,7 @@ files:
|
|
491
505
|
- app/assets/javascripts/adminpanel/sortable.js.coffee
|
492
506
|
- app/assets/javascripts/adminpanel/spinner.js.coffee
|
493
507
|
- app/assets/javascripts/adminpanel/tables.js
|
508
|
+
- app/assets/javascripts/adminpanel/trix-upload.coffee
|
494
509
|
- app/assets/javascripts/adminpanel/trix.js.erb
|
495
510
|
- app/assets/stylesheets/adminpanel/_clearfix.css
|
496
511
|
- app/assets/stylesheets/adminpanel/_search-input.scss.erb
|
@@ -641,6 +656,7 @@ files:
|
|
641
656
|
- test/dummy/app/controllers/adminpanel/mugs_controller.rb
|
642
657
|
- test/dummy/app/controllers/adminpanel/products_controller.rb
|
643
658
|
- test/dummy/app/controllers/adminpanel/salesmen_controller.rb
|
659
|
+
- test/dummy/app/controllers/adminpanel/test_objects_controller.rb
|
644
660
|
- test/dummy/app/controllers/application_controller.rb
|
645
661
|
- test/dummy/app/mailers/.gitkeep
|
646
662
|
- test/dummy/app/models/adminpanel/categorization.rb
|
@@ -656,6 +672,7 @@ files:
|
|
656
672
|
- test/dummy/app/models/adminpanel/product.rb
|
657
673
|
- test/dummy/app/models/adminpanel/salesman.rb
|
658
674
|
- test/dummy/app/models/adminpanel/test_object.rb
|
675
|
+
- test/dummy/app/models/adminpanel/textfile.rb
|
659
676
|
- test/dummy/app/uploader/adminpanel/file_resourcefile_uploader.rb
|
660
677
|
- test/dummy/app/uploader/adminpanel/photo_uploader.rb
|
661
678
|
- test/dummy/app/uploader/adminpanel/section_uploader.rb
|
@@ -705,6 +722,7 @@ files:
|
|
705
722
|
- test/features/shared/form/modal_contents_test.rb
|
706
723
|
- test/features/shared/form/resource_field_test.rb
|
707
724
|
- test/features/shared/form/select_test.rb
|
725
|
+
- test/features/shared/form/wysiwyg_test.rb
|
708
726
|
- test/features/shared/resource/edit_test.rb
|
709
727
|
- test/features/shared/resource/index_test.rb
|
710
728
|
- test/features/shared/resource/new_test.rb
|
@@ -753,7 +771,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
753
771
|
requirements:
|
754
772
|
- imagemagick installed
|
755
773
|
rubyforge_project:
|
756
|
-
rubygems_version: 2.
|
774
|
+
rubygems_version: 2.4.5.1
|
757
775
|
signing_key:
|
758
776
|
specification_version: 4
|
759
777
|
summary: Made with <3 by CoDN
|
@@ -770,6 +788,7 @@ test_files:
|
|
770
788
|
- test/dummy/app/controllers/adminpanel/mugs_controller.rb
|
771
789
|
- test/dummy/app/controllers/adminpanel/products_controller.rb
|
772
790
|
- test/dummy/app/controllers/adminpanel/salesmen_controller.rb
|
791
|
+
- test/dummy/app/controllers/adminpanel/test_objects_controller.rb
|
773
792
|
- test/dummy/app/controllers/application_controller.rb
|
774
793
|
- test/dummy/app/mailers/.gitkeep
|
775
794
|
- test/dummy/app/models/adminpanel/categorization.rb
|
@@ -785,6 +804,7 @@ test_files:
|
|
785
804
|
- test/dummy/app/models/adminpanel/product.rb
|
786
805
|
- test/dummy/app/models/adminpanel/salesman.rb
|
787
806
|
- test/dummy/app/models/adminpanel/test_object.rb
|
807
|
+
- test/dummy/app/models/adminpanel/textfile.rb
|
788
808
|
- test/dummy/app/uploader/adminpanel/file_resourcefile_uploader.rb
|
789
809
|
- test/dummy/app/uploader/adminpanel/photo_uploader.rb
|
790
810
|
- test/dummy/app/uploader/adminpanel/section_uploader.rb
|
@@ -834,6 +854,7 @@ test_files:
|
|
834
854
|
- test/features/shared/form/modal_contents_test.rb
|
835
855
|
- test/features/shared/form/resource_field_test.rb
|
836
856
|
- test/features/shared/form/select_test.rb
|
857
|
+
- test/features/shared/form/wysiwyg_test.rb
|
837
858
|
- test/features/shared/resource/edit_test.rb
|
838
859
|
- test/features/shared/resource/index_test.rb
|
839
860
|
- test/features/shared/resource/new_test.rb
|
@@ -860,4 +881,3 @@ test_files:
|
|
860
881
|
- test/support/view_case.rb
|
861
882
|
- test/tasks/adminpanel_rake_test.rb
|
862
883
|
- test/test_helper.rb
|
863
|
-
has_rdoc:
|