adminpanel 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|