rails_admin_image_manager 0.1.3
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +125 -0
- data/Rakefile +36 -0
- data/app/assets/config/rails_admin_image_manager_manifest.js +2 -0
- data/app/assets/fonts/FontAwesome.otf +0 -0
- data/app/assets/fonts/Simple-Line-Icons.eot +0 -0
- data/app/assets/fonts/Simple-Line-Icons.svg +1369 -0
- data/app/assets/fonts/Simple-Line-Icons.ttf +0 -0
- data/app/assets/fonts/Simple-Line-Icons.woff +0 -0
- data/app/assets/fonts/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/fontawesome-webfont.svg +2671 -0
- data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/fontawesome-webfont.woff +0 -0
- data/app/assets/fonts/fontawesome-webfont.woff2 +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.svg +288 -0
- data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/app/assets/images/rails_admin_image_manager/image.png +0 -0
- data/app/assets/javascripts/rails_admin_image_manager/app-compiled.js.erb +34896 -0
- data/app/assets/javascripts/rails_admin_image_manager/app-vue.js +51 -0
- data/app/assets/javascripts/rails_admin_image_manager/application.js +17 -0
- data/app/assets/javascripts/rails_admin_image_manager/base.js.erb +62 -0
- data/app/assets/javascripts/rails_admin_image_manager/ckeditor_plugin.js.erb +58 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/confirmationOverlay.vue +69 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/imageInsertButton.vue +41 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/imageInsertOverlay.vue +92 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/imageListing.vue +167 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/imageShow.vue +112 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/imageTagSelector.vue +94 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/imageUpload.vue +94 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/listingFilter.vue +32 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/notificationOverlay.vue +47 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/progressOverlay.vue +37 -0
- data/app/assets/javascripts/rails_admin_image_manager/components/searchAutocomplete.vue +140 -0
- data/app/assets/javascripts/rails_admin_image_manager/editor/image_manager_picker.js.erb +41 -0
- data/app/assets/javascripts/rails_admin_image_manager/filters/index.js +7 -0
- data/app/assets/javascripts/rails_admin_image_manager/libs/helpers.js +13 -0
- data/app/assets/javascripts/rails_admin_image_manager/libs/lazyload.js +63 -0
- data/app/assets/javascripts/rails_admin_image_manager/router/index.js +55 -0
- data/app/assets/javascripts/rails_admin_image_manager/stores/ckeditor.js +25 -0
- data/app/assets/javascripts/rails_admin_image_manager/stores/index.js +16 -0
- data/app/assets/javascripts/rails_admin_image_manager/stores/medias.js +342 -0
- data/app/assets/javascripts/rails_admin_image_manager/stores/overlay.js +57 -0
- data/app/assets/javascripts/rails_admin_image_manager/stores/railsAdmin.js +28 -0
- data/app/assets/javascripts/rails_admin_image_manager/vendors/fuse.min.js +9 -0
- data/app/assets/javascripts/rails_admin_image_manager/vendors/oneui.min.js +8 -0
- data/app/assets/javascripts/rails_admin_image_manager/vendors/underscore.min.js +6 -0
- data/app/assets/stylesheets/rails_admin_image_manager/_font.scss +2845 -0
- data/app/assets/stylesheets/rails_admin_image_manager/application.css +16 -0
- data/app/assets/stylesheets/rails_admin_image_manager/global.css.erb +3723 -0
- data/app/assets/stylesheets/rails_admin_image_manager/global.sass +1 -0
- data/app/assets/stylesheets/rails_admin_image_manager/vendors/bootstrap.min.css +5 -0
- data/app/assets/stylesheets/rails_admin_image_manager/vendors/oneui.css +8865 -0
- data/app/controllers/rails_admin_image_manager/application_controller.rb +41 -0
- data/app/controllers/rails_admin_image_manager/home_controller.rb +8 -0
- data/app/controllers/rails_admin_image_manager/images_controller.rb +117 -0
- data/app/helpers/rails_admin_image_manager/application_helper.rb +4 -0
- data/app/jobs/rails_admin_image_manager/application_job.rb +4 -0
- data/app/models/rails_admin_image_manager/application_record.rb +5 -0
- data/app/models/rails_admin_image_manager/file.rb +78 -0
- data/app/models/rails_admin_image_manager/tag.rb +41 -0
- data/app/views/layouts/rails_admin_image_manager/application.html.erb +26 -0
- data/app/views/rails_admin/main/_form_image_manager_picker.html.erb +45 -0
- data/app/views/rails_admin_image_manager/images/index.html.erb +2 -0
- data/config/initializers/rails_admin/image_manager_file.rb +87 -0
- data/config/initializers/rails_admin/image_manager_tag.rb +22 -0
- data/config/locales/rails_admin_image_manager.en.yml +33 -0
- data/config/locales/rails_admin_image_manager.fr.yml +33 -0
- data/config/routes.rb +12 -0
- data/db/migrate/20170626000000_create_image_manager.rb +37 -0
- data/lib/dynamic_paperclip_patch.rb +92 -0
- data/lib/generators/rails_admin_image_manager/install/install_generator.rb +22 -0
- data/lib/paperclip_patch.rb +22 -0
- data/lib/rails_admin_image_manager.rb +46 -0
- data/lib/rails_admin_image_manager/engine.rb +36 -0
- data/lib/rails_admin_image_manager/has_managed_file.rb +47 -0
- data/lib/rails_admin_image_manager/rails_admin/config/fields/types/image_manager_picker.rb +49 -0
- data/lib/rails_admin_image_manager/version.rb +3 -0
- data/lib/tasks/rails_admin_image_manager_tasks.rake +4 -0
- metadata +253 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
RailsAdmin.config do |config|
|
2
|
+
config.model RailsAdminImageManager::Tag do
|
3
|
+
navigation_label I18n.t('admin.navigation_label.tag')
|
4
|
+
|
5
|
+
list do
|
6
|
+
field :name do
|
7
|
+
filterable false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
edit do
|
12
|
+
field :name
|
13
|
+
end
|
14
|
+
|
15
|
+
show do
|
16
|
+
field :name
|
17
|
+
field :created_at
|
18
|
+
field :updated_at
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
en:
|
2
|
+
admin:
|
3
|
+
navigation_label:
|
4
|
+
file: Image manager
|
5
|
+
tag: Image manager
|
6
|
+
image_manager_picker:
|
7
|
+
browse: Select or upload an image
|
8
|
+
edit: Select or upload an other image
|
9
|
+
deselect: Deselect this image
|
10
|
+
|
11
|
+
activerecord:
|
12
|
+
models:
|
13
|
+
rails_admin_image_manager/file:
|
14
|
+
one: Image
|
15
|
+
other: Images
|
16
|
+
rails_admin_image_manager/tag:
|
17
|
+
one: Tag
|
18
|
+
other: Tags
|
19
|
+
|
20
|
+
attributes:
|
21
|
+
rails_admin_image_manager/file:
|
22
|
+
url: URL
|
23
|
+
name: Title
|
24
|
+
description: Description
|
25
|
+
copyright: Copyright (author)
|
26
|
+
image: Image
|
27
|
+
tags: Tags
|
28
|
+
created_at: Creation date
|
29
|
+
updated_at: Last modification date
|
30
|
+
rails_admin_image_manager/tag:
|
31
|
+
name: Tag
|
32
|
+
created_at: Creation date
|
33
|
+
updated_at: Last modification date
|
@@ -0,0 +1,33 @@
|
|
1
|
+
fr:
|
2
|
+
admin:
|
3
|
+
navigation_label:
|
4
|
+
file: Gestionnaire d'images
|
5
|
+
tag: Gestionnaire d'images
|
6
|
+
image_manager_picker:
|
7
|
+
browse: Sélectionner ou télécharger une image
|
8
|
+
edit: Sélectionner ou télécharger une autre image
|
9
|
+
deselect: Désélectionner cette image
|
10
|
+
|
11
|
+
activerecord:
|
12
|
+
models:
|
13
|
+
rails_admin_image_manager/file:
|
14
|
+
one: Image
|
15
|
+
other: Images
|
16
|
+
rails_admin_image_manager/tag:
|
17
|
+
one: Étiquette
|
18
|
+
other: Étiquettes
|
19
|
+
|
20
|
+
attributes:
|
21
|
+
rails_admin_image_manager/file:
|
22
|
+
url: URL
|
23
|
+
name: Titre
|
24
|
+
description: Description
|
25
|
+
copyright: Droits (auteur)
|
26
|
+
image: Image
|
27
|
+
tags: Étiquettes
|
28
|
+
created_at: Date de création
|
29
|
+
updated_at: Date de dernière modification
|
30
|
+
rails_admin_image_manager/tag:
|
31
|
+
name: Étiquette
|
32
|
+
created_at: Date de création
|
33
|
+
updated_at: Date de dernière modification
|
data/config/routes.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
RailsAdminImageManager::Engine.routes.draw do
|
2
|
+
|
3
|
+
root 'home#index'
|
4
|
+
get '/tags' => 'images#tags', as: 'image_manager_tag_index'
|
5
|
+
get '/images' => 'images#index', as: 'image_manager_index'
|
6
|
+
get '/images/new' => 'images#new'
|
7
|
+
get '/images/:id' => 'images#show'
|
8
|
+
put '/images' => 'images#update'
|
9
|
+
post '/images' => 'images#create'
|
10
|
+
delete '/images' => 'images#destroy'
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class CreateImageManager < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :image_manager_files do |t|
|
4
|
+
t.string :name, null: false
|
5
|
+
t.text :description
|
6
|
+
t.string :copyright
|
7
|
+
t.string :image_file_name
|
8
|
+
t.string :image_content_type
|
9
|
+
t.integer :image_file_size
|
10
|
+
t.datetime :image_updated_at
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
# ---------------------------------------------
|
16
|
+
|
17
|
+
create_table :image_manager_tags do |t|
|
18
|
+
t.string :name, null: false
|
19
|
+
|
20
|
+
t.timestamps
|
21
|
+
end
|
22
|
+
|
23
|
+
add_index :image_manager_tags, :name, unique: true
|
24
|
+
|
25
|
+
# ---------------------------------------------
|
26
|
+
|
27
|
+
create_join_table :image_manager_files, :image_manager_tags do |t|
|
28
|
+
t.integer :image_manager_file_id
|
29
|
+
t.integer :image_manager_tag_id
|
30
|
+
end
|
31
|
+
|
32
|
+
execute "ALTER TABLE image_manager_files_tags ADD PRIMARY KEY (image_manager_file_id, image_manager_tag_id)"
|
33
|
+
|
34
|
+
add_foreign_key :image_manager_files_tags, :image_manager_files, on_update: :cascade, on_delete: :cascade
|
35
|
+
add_foreign_key :image_manager_files_tags, :image_manager_tags, on_update: :cascade, on_delete: :cascade
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module DynamicPaperclip
|
2
|
+
# Patch to avoid the following error :
|
3
|
+
# actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:35:in `build': undefined method `new' for "DynamicPaperclip::AttachmentStyleGenerator":String (NoMethodError). Did you mean? next
|
4
|
+
# https://github.com/mbouchard/dynamic_paperclip/commit/ad6c209cdd08efb202140faaa6aa647987726409
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
initializer 'dynamic_paperclip_patch.insert_middleware' do |app|
|
7
|
+
app.config.middleware.use DynamicPaperclip::AttachmentStyleGenerator
|
8
|
+
end
|
9
|
+
|
10
|
+
config.before_configuration do
|
11
|
+
initializers.delete_if do |initializer|
|
12
|
+
true if initializer.name == 'dynamic_paperclip.insert_middleware'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module DynamicPaperclip
|
19
|
+
class Attachment < Paperclip::Attachment
|
20
|
+
def dynamic_url(definition)
|
21
|
+
raise DynamicPaperclip::Errors::SecretNotSet, "No secret has been configured. Please run the dynamic_paperclip:install generator." unless DynamicPaperclip.config.secret.present?
|
22
|
+
|
23
|
+
style_name = StyleNaming.dynamic_style_name_from_definition(definition)
|
24
|
+
|
25
|
+
url = url(style_name)
|
26
|
+
|
27
|
+
# iXmedia
|
28
|
+
# Fix to avoid url with 2 "?" when timestamp is used in paperclip
|
29
|
+
# Ex: "/system/rails_admin_image_manager/files/images/000/000/001/dynamic_10x10/test.jpg?1498751741?s=c3ac6269a728f8e9a8d625ef84455a082bdd3bbf
|
30
|
+
# delimiter_char = url.match(/\?.+=/) ? '&' : '?'
|
31
|
+
delimiter_char = url.match(/\?/) ? '&' : '?'
|
32
|
+
|
33
|
+
"#{url}#{delimiter_char}s=#{UrlSecurity.generate_hash(style_name)}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
require 'action_dispatch/http/response.rb'
|
39
|
+
|
40
|
+
module DynamicPaperclip
|
41
|
+
class AttachmentStyleGenerator
|
42
|
+
|
43
|
+
def call(env)
|
44
|
+
request = Rack::Request.new(env)
|
45
|
+
|
46
|
+
DynamicPaperclip::AttachmentRegistry.each_definition do |klass, name, options|
|
47
|
+
if match = regexp_for_attachment_url(klass, (options[:url] || Attachment.default_options[:url])).match(request.path)
|
48
|
+
id = id_from_partition(match[:id])
|
49
|
+
attachment = klass.find(id).send(name)
|
50
|
+
|
51
|
+
# iXmedia
|
52
|
+
# Fix to avoid error: uninitialized constant ActionController::DataStreaming::FileBody
|
53
|
+
# When the filename is wrong
|
54
|
+
# Return a 404 instead
|
55
|
+
if !attachment.exists? || attachment.original_filename != URI.unescape(match[:filename])
|
56
|
+
return [404, {}, []]
|
57
|
+
end
|
58
|
+
|
59
|
+
# The definition will be escaped twice in the URL, so we need to unescape it once.
|
60
|
+
# We should always reference dynamic style names after escaping once - that's how they reside on the FS.
|
61
|
+
style_name = StyleNaming.dynamic_style_name_from_definition(CGI.unescape(match[:definition]), false)
|
62
|
+
|
63
|
+
# Validate URL hash against requested style name
|
64
|
+
if DynamicPaperclip::UrlSecurity.valid_hash?(request.params['s'], style_name)
|
65
|
+
|
66
|
+
# Only process style if it doesn't exist,
|
67
|
+
# otherwise we may just be fielding a request for
|
68
|
+
# an existing style
|
69
|
+
attachment.process_dynamic_style style_name unless attachment.exists?(style_name)
|
70
|
+
|
71
|
+
return [
|
72
|
+
200,
|
73
|
+
{
|
74
|
+
'Content-Type' => attachment.content_type,
|
75
|
+
'Content-Transfer-Encoding' => 'binary',
|
76
|
+
'Content-Disposition' => "inline; filename=#{File.basename(attachment.path(style_name))}"
|
77
|
+
},
|
78
|
+
ActionDispatch::Response::FileBody.new(attachment.path(style_name))
|
79
|
+
]
|
80
|
+
else
|
81
|
+
# Invalid hash, just 403
|
82
|
+
|
83
|
+
return [403, {}, []]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
@app.call env
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
module RailsAdminImageManager
|
3
|
+
module Generators
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
5
|
+
|
6
|
+
# desc "Installs RailsAdminImageManager into your app. Get wealthy."
|
7
|
+
|
8
|
+
def setup_route
|
9
|
+
route "mount RailsAdminImageManager::Engine => '/admin/image-manager', as: 'image_manager'"
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_migrations
|
13
|
+
rake "rails_admin_image_manager:install:migrations"
|
14
|
+
end
|
15
|
+
|
16
|
+
def configure_dynamic_paperclip
|
17
|
+
generate "dynamic_paperclip:install"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# We will replace every underscores (_) in the filename for a hyphen (-)
|
2
|
+
# This must be done in a patch because Paperclip has hardcoded that all :restricted_characters
|
3
|
+
# will be replaced by an underscore in the FilenameCleaner class: https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/filename_cleaner.rb
|
4
|
+
# For this reason, we can't add the underscore char to the :restricted_characters config.
|
5
|
+
|
6
|
+
module Paperclip
|
7
|
+
class FilenameCleaner
|
8
|
+
def call(filename)
|
9
|
+
# Dirty hack to keep the dot in the filename (it's removed by the parameterize function)
|
10
|
+
placeholder = '-p-l-a-c-e-h-o-l-d-e-r-'
|
11
|
+
filename.sub!('.', placeholder)
|
12
|
+
filename = filename.parameterize()
|
13
|
+
filename.sub!(placeholder, '.')
|
14
|
+
|
15
|
+
if @invalid_character_regex
|
16
|
+
filename = filename.gsub(@invalid_character_regex, "_").gsub("_", "-")
|
17
|
+
else
|
18
|
+
filename
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "rails_admin_image_manager/rails_admin/config/fields/types/image_manager_picker"
|
2
|
+
require "rails_admin_image_manager/has_managed_file"
|
3
|
+
require "rails_admin_image_manager/engine"
|
4
|
+
|
5
|
+
module RailsAdminImageManager
|
6
|
+
extend ActiveSupport::Autoload
|
7
|
+
|
8
|
+
# configuration for picker
|
9
|
+
mattr_accessor :placeholder_image
|
10
|
+
@@placeholder_image = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" # a transparent pixel
|
11
|
+
|
12
|
+
mattr_accessor :hidden_input
|
13
|
+
@@hidden_input = true
|
14
|
+
# end configuration for picker
|
15
|
+
|
16
|
+
# Configuration defaults (these map directly to ckeditor settings)
|
17
|
+
mattr_accessor :editor
|
18
|
+
@@editor = {
|
19
|
+
imageManagerBrowserUrl: '/admin/image_manager/',
|
20
|
+
}
|
21
|
+
# End configuration defaults
|
22
|
+
|
23
|
+
mattr_accessor :paginates_per
|
24
|
+
@@paginates_per = 15
|
25
|
+
|
26
|
+
def self.options(overrides={})
|
27
|
+
# merge in editor settings configured elsewhere
|
28
|
+
|
29
|
+
base = {
|
30
|
+
placeholder_image: self.placeholder_image,
|
31
|
+
hidden_input: self.hidden_input,
|
32
|
+
paginates_per: self.paginates_per
|
33
|
+
}
|
34
|
+
editor_options = self.editor.merge(base)
|
35
|
+
|
36
|
+
# merge in local overrides
|
37
|
+
editor_options.merge!(overrides) if overrides
|
38
|
+
|
39
|
+
editor_options
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
ActiveSupport.on_load(:active_record) do
|
45
|
+
extend RailsAdminImageManager::HasManagedFile
|
46
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'paperclip'
|
2
|
+
require 'paperclip_patch'
|
3
|
+
require 'dynamic_paperclip'
|
4
|
+
require 'dynamic_paperclip_patch'
|
5
|
+
|
6
|
+
module RailsAdminImageManager
|
7
|
+
class Engine < ::Rails::Engine
|
8
|
+
isolate_namespace RailsAdminImageManager
|
9
|
+
|
10
|
+
initializer :add_to_precompile do |app|
|
11
|
+
app.config.assets.precompile += %w( rails_admin_image_manager/base.js.erb )
|
12
|
+
end
|
13
|
+
|
14
|
+
initializer :reload_rails_admin_configs do |app|
|
15
|
+
Rails.application.config.to_prepare do
|
16
|
+
RailsAdmin::ApplicationController.class_eval do
|
17
|
+
before_action :reload_rails_admin_image_manager, if: :reload_rails_image_manager? # Reloading RailsAdmin Config Automatically
|
18
|
+
|
19
|
+
def reload_rails_admin_image_manager
|
20
|
+
gem_dir = Gem::Specification.find_by_name("rails_admin_image_manager").gem_dir
|
21
|
+
|
22
|
+
Dir.foreach("#{gem_dir}/config/initializers/rails_admin") do |item|
|
23
|
+
next if item == '.' or item == '..'
|
24
|
+
load("#{gem_dir}/config/initializers/rails_admin/#{item}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def reload_rails_image_manager?
|
29
|
+
Rails.env.development?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module RailsAdminImageManager
|
2
|
+
module HasManagedFile
|
3
|
+
|
4
|
+
def has_managed_file(attribute, id, options={})
|
5
|
+
var_options_name = "@has_managed_file_#{attribute}_options"
|
6
|
+
var_options_value = instance_variable_get(var_options_name)
|
7
|
+
|
8
|
+
# If the same attribute is passed twice, we'll skip it
|
9
|
+
if var_options_value.nil?
|
10
|
+
instance_variable_set(var_options_name, options)
|
11
|
+
|
12
|
+
add_managed_file_belongs_to(attribute)
|
13
|
+
add_managed_file_validates_presence_of(id) if managed_file_options_mandatory(options)
|
14
|
+
add_managed_file_before_validation(attribute, id) unless managed_file_options_mandatory(options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def managed_file_is_mandatory?(attribute)
|
19
|
+
validators_on(attribute).any?{|validator| validator.kind_of?(ActiveModel::Validations::PresenceValidator)}
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def managed_file_options_mandatory(options)
|
25
|
+
options.key?(:mandatory) && options[:mandatory] == true ? true : false
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_managed_file_belongs_to(attribute)
|
29
|
+
belongs_to attribute, class_name: "RailsAdminImageManager::File"
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_managed_file_validates_presence_of(id)
|
33
|
+
validates_presence_of id
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_managed_file_before_validation(attribute, id)
|
37
|
+
attr_accessor "#{id}_deselect"
|
38
|
+
|
39
|
+
define_method "#{id}_deselect=" do |val|
|
40
|
+
attribute_will_change!("#{id}_deselect") if val == '1'
|
41
|
+
instance_variable_set("@#{id}_deselect", val)
|
42
|
+
end
|
43
|
+
|
44
|
+
before_validation { send("#{attribute}=", nil) if send("#{id}_deselect") == '1' }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#require 'rails_admin/config/fields/types/string'
|
2
|
+
module RailsAdmin::Config::Fields::Types
|
3
|
+
class ImageManagerPicker < RailsAdmin::Config::Fields::Base
|
4
|
+
RailsAdmin::Config::Fields::Types::register(:image_manager_picker, self)
|
5
|
+
|
6
|
+
register_instance_option(:config) do
|
7
|
+
{}
|
8
|
+
end
|
9
|
+
|
10
|
+
register_instance_option(:partial) do
|
11
|
+
:form_image_manager_picker
|
12
|
+
end
|
13
|
+
|
14
|
+
register_instance_option(:delete_method) do
|
15
|
+
"#{name}_deselect"
|
16
|
+
end
|
17
|
+
|
18
|
+
register_instance_option :allowed_methods do
|
19
|
+
[method_name, delete_method].compact
|
20
|
+
end
|
21
|
+
|
22
|
+
def editor_options
|
23
|
+
RailsAdminImageManager.options(config)
|
24
|
+
end
|
25
|
+
|
26
|
+
def preview_image_path
|
27
|
+
if value.to_s.html_safe != ""
|
28
|
+
if (true if Float(value) rescue false)
|
29
|
+
# if the value is numeric we assume its an object id
|
30
|
+
# Check if the id exist otherwise show placeholder image
|
31
|
+
if RailsAdminImageManager::File.exists?(value)
|
32
|
+
image_manager_file = RailsAdminImageManager::File.find(value)
|
33
|
+
image_manager_file.image.url(:rails_admin)
|
34
|
+
else
|
35
|
+
editor_options[:placeholder_image]
|
36
|
+
end
|
37
|
+
else
|
38
|
+
# if not, we assume its a url
|
39
|
+
value.to_s
|
40
|
+
end
|
41
|
+
else
|
42
|
+
# no value, show placeholder image
|
43
|
+
editor_options[:placeholder_image]
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|