rails_admin_featured_content_rails_6 1.0.4

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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/CODE_OF_CONDUCT.md +74 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +92 -0
  7. data/Rakefile +2 -0
  8. data/app/assets/images/fc-image-default.jpg +0 -0
  9. data/app/assets/images/fc-loading.svg +1 -0
  10. data/app/assets/images/fc-snippet-float-one.jpg +0 -0
  11. data/app/assets/images/fc-snippet-float-one.psd +0 -0
  12. data/app/assets/images/fc-snippet-float-three.jpg +0 -0
  13. data/app/assets/images/fc-snippet-float-three.psd +0 -0
  14. data/app/assets/images/fc-snippet-float-two.jpg +0 -0
  15. data/app/assets/images/fc-snippet-float-two.psd +0 -0
  16. data/app/assets/images/fc-snippet-four.jpg +0 -0
  17. data/app/assets/images/fc-snippet-four.psd +0 -0
  18. data/app/assets/images/fc-snippet-highlight.jpg +0 -0
  19. data/app/assets/images/fc-snippet-highlight.psd +0 -0
  20. data/app/assets/images/fc-snippet-one.jpg +0 -0
  21. data/app/assets/images/fc-snippet-one.psd +0 -0
  22. data/app/assets/images/fc-snippet-slide.jpg +0 -0
  23. data/app/assets/images/fc-snippet-slide.psd +0 -0
  24. data/app/assets/images/fc-snippet-text-one.jpg +0 -0
  25. data/app/assets/images/fc-snippet-text-one.psd +0 -0
  26. data/app/assets/images/fc-snippet-text-three.jpg +0 -0
  27. data/app/assets/images/fc-snippet-text-three.psd +0 -0
  28. data/app/assets/images/fc-snippet-text-two.jpg +0 -0
  29. data/app/assets/images/fc-snippet-text-two.psd +0 -0
  30. data/app/assets/images/fc-snippet-text.jpg +0 -0
  31. data/app/assets/images/fc-snippet-text.psd +0 -0
  32. data/app/assets/images/fc-snippet-three.jpg +0 -0
  33. data/app/assets/images/fc-snippet-three.psd +0 -0
  34. data/app/assets/images/fc-snippet-two.jpg +0 -0
  35. data/app/assets/images/fc-snippet-two.psd +0 -0
  36. data/app/assets/javascripts/rails_admin/featured_content.js.erb +574 -0
  37. data/app/assets/javascripts/rails_admin/helpers/autocomplete.js +21 -0
  38. data/app/assets/javascripts/rails_admin/helpers/events.js +4 -0
  39. data/app/assets/javascripts/rails_admin/helpers/generate_radom_id.js +4 -0
  40. data/app/assets/javascripts/rails_admin/helpers/slide.js.erb +77 -0
  41. data/app/assets/javascripts/rails_admin/helpers/upload_file.js +32 -0
  42. data/app/assets/stylesheets/rails_admin/featured_content.scss +661 -0
  43. data/app/controllers/rails_admin_featured_content/featured_content_controller.rb +37 -0
  44. data/app/models/.keep +0 -0
  45. data/app/models/rails_admin_featured_content/featured_content.rb +16 -0
  46. data/app/models/rails_admin_featured_content/featured_content_image.rb +11 -0
  47. data/app/views/.gitkeep +0 -0
  48. data/app/views/rails_admin/main/featured_content.html.erb +113 -0
  49. data/bin/console +14 -0
  50. data/bin/setup +8 -0
  51. data/config/initializers/assets.rb +15 -0
  52. data/config/locales/featured_content.en.yml +32 -0
  53. data/config/locales/featured_content.pt-BR.yml +32 -0
  54. data/config/routes.rb +9 -0
  55. data/lib/generators/rails_admin_featured_content_generator.rb +36 -0
  56. data/lib/generators/templates/create_featured_content_images_migration.rb +10 -0
  57. data/lib/generators/templates/create_featured_content_migration.rb +11 -0
  58. data/lib/generators/templates/featured_content_image_uploader.rb +64 -0
  59. data/lib/generators/templates/rails_admin_featured_content.rb +22 -0
  60. data/lib/rails_admin_featured_content_rails_6.rb +55 -0
  61. data/lib/rails_admin_featured_content_rails_6/engine.rb +22 -0
  62. data/lib/rails_admin_featured_content_rails_6/version.rb +3 -0
  63. data/rails_admin_featured_content_rails_6.gemspec +45 -0
  64. data/screenshots/image-1.png +0 -0
  65. data/vendor/assets/stylesheets/rails_admin_featured_content.scss +459 -0
  66. metadata +426 -0
@@ -0,0 +1,37 @@
1
+ module RailsAdminFeaturedContent
2
+ class FeaturedContentController < ::ApplicationController
3
+ def search_content
4
+ @content_builder = RailsAdminContentBuilder::ContentBuilder
5
+ .order('date_publish desc').limit(10).search(params[:term])
6
+
7
+ if @content_builder
8
+ render json: @content_builder.to_json(include: {
9
+ content_builder_category: {
10
+ only: [:name, :slug]
11
+ }
12
+ }
13
+ )
14
+ else
15
+ render json: @content_builder.errors
16
+ end
17
+ end
18
+
19
+ def create_images
20
+ @featured_content = FeaturedContent.find(params[:id])
21
+ @image = @featured_content.featured_content_images
22
+ .create(image: params[:featured_content_image])
23
+
24
+ if @image
25
+ render json: find_image(@image.id)
26
+ else
27
+ render json: @image.errors
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def find_image(id)
34
+ FeaturedContentImage.find(id).image.to_json
35
+ end
36
+ end
37
+ end
data/app/models/.keep ADDED
File without changes
@@ -0,0 +1,16 @@
1
+ module RailsAdminFeaturedContent
2
+ class FeaturedContent < ActiveRecord::Base
3
+ has_many :featured_content_images, inverse_of: :featured_content, dependent: :destroy
4
+
5
+ self.table_name = 'featured_contents'
6
+
7
+ def featured_sanitized
8
+ white_list_sanitizer = Rails::Html::WhiteListSanitizer.new
9
+ white_list_sanitizer.sanitize(
10
+ self.content,
11
+ tags: %w(div h1 h2 b u p img section figure figcaption a iframe),
12
+ attributes: %w(src class alt href allowfullscreen frameborder height width)
13
+ ).try(:html_safe)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module RailsAdminFeaturedContent
2
+ class FeaturedContentImage < ActiveRecord::Base
3
+ mount_uploader :image, FeaturedContentImageUploader
4
+
5
+ validates :image, presence: true
6
+
7
+ belongs_to :featured_content, inverse_of: :featured_content_images
8
+
9
+ self.table_name = 'featured_content_images'
10
+ end
11
+ end
File without changes
@@ -0,0 +1,113 @@
1
+ <%= stylesheet_link_tag 'rails_admin/featured_content' %>
2
+ <%= javascript_include_tag 'rails_admin/featured_content' %>
3
+
4
+ <div class="fc-snippet">
5
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '1'} do %>
6
+ <%= image_tag 'fc-snippet-highlight.jpg', class: 'fc-snippet__image' %>
7
+ <span class="fc-snippet__caption">
8
+ <%= t('admin.actions.featured_content.snippet.targe') %>
9
+ </span>
10
+ <% end %>
11
+
12
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '2'} do %>
13
+ <%= image_tag 'fc-snippet-text.jpg', class: 'fc-snippet__image' %>
14
+ <span class="fc-snippet__caption">
15
+ <%= t('admin.actions.featured_content.snippet.title_large') %>
16
+ </span>
17
+ <% end %>
18
+
19
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '3'} do %>
20
+ <%= image_tag 'fc-snippet-slide.jpg', class: 'fc-snippet__image' %>
21
+ <span class="fc-snippet__caption">
22
+ <%= t('admin.actions.featured_content.snippet.slide') %>
23
+ </span>
24
+ <% end %>
25
+
26
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '4'} do %>
27
+ <%= image_tag 'fc-snippet-one.jpg', class: 'fc-snippet__image' %>
28
+ <span class="fc-snippet__caption">
29
+ <%= t('admin.actions.featured_content.snippet.one') %>
30
+ </span>
31
+ <% end %>
32
+
33
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '5'} do %>
34
+ <%= image_tag 'fc-snippet-two.jpg', class: 'fc-snippet__image' %>
35
+ <span class="fc-snippet__caption">
36
+ <%= t('admin.actions.featured_content.snippet.list_two') %>
37
+ </span>
38
+ <% end %>
39
+
40
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '6'} do %>
41
+ <%= image_tag 'fc-snippet-three.jpg', class: 'fc-snippet__image' %>
42
+ <span class="fc-snippet__caption">
43
+ <%= t('admin.actions.featured_content.snippet.list_three') %>
44
+ </span>
45
+ <% end %>
46
+
47
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '7'} do %>
48
+ <%= image_tag 'fc-snippet-four.jpg', class: 'fc-snippet__image' %>
49
+ <span class="fc-snippet__caption">
50
+ <%= t('admin.actions.featured_content.snippet.list_four') %>
51
+ </span>
52
+ <% end %>
53
+
54
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '8'} do %>
55
+ <%= image_tag 'fc-snippet-float-one.jpg', class: 'fc-snippet__image' %>
56
+ <span class="fc-snippet__caption">
57
+ <%= t('admin.actions.featured_content.snippet.float_one') %>
58
+ </span>
59
+ <% end %>
60
+
61
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '9'} do %>
62
+ <%= image_tag 'fc-snippet-float-two.jpg', class: 'fc-snippet__image' %>
63
+ <span class="fc-snippet__caption">
64
+ <%= t('admin.actions.featured_content.snippet.list_float_two') %>
65
+ </span>
66
+ <% end %>
67
+
68
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '10'} do %>
69
+ <%= image_tag 'fc-snippet-float-three.jpg', class: 'fc-snippet__image' %>
70
+ <span class="fc-snippet__caption">
71
+ <%= t('admin.actions.featured_content.snippet.list_float_three') %>
72
+ </span>
73
+ <% end %>
74
+
75
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '11'} do %>
76
+ <%= image_tag 'fc-snippet-text-one.jpg', class: 'fc-snippet__image' %>
77
+ <span class="fc-snippet__caption">
78
+ <%= t('admin.actions.featured_content.snippet.text_one') %>
79
+ </span>
80
+ <% end %>
81
+
82
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '12'} do %>
83
+ <%= image_tag 'fc-snippet-text-two.jpg', class: 'fc-snippet__image' %>
84
+ <span class="fc-snippet__caption">
85
+ <%= t('admin.actions.featured_content.snippet.list_text_two') %>
86
+ </span>
87
+ <% end %>
88
+
89
+ <%= link_to '#', class: 'fc-snippet__btn', data: {snippet: '13'} do %>
90
+ <%= image_tag 'fc-snippet-text-three.jpg', class: 'fc-snippet__image' %>
91
+ <span class="fc-snippet__caption">
92
+ <%= t('admin.actions.featured_content.snippet.list_text_three') %>
93
+ </span>
94
+ <% end %>
95
+ </div>
96
+
97
+ <%= simple_form_for rails_admin.featured_content_url(@abstract_model.to_param, id: @object.id), html: { class: 'fc-form' }, remote: false do |f| %>
98
+ <div class="fc-controls">
99
+ <%= f.button :submit, "Salvar", name: 'save', class: 'btn btn-block btn-primary btn-right' %>
100
+ <% if @object.status %>
101
+ <%= f.button :submit, "Despublicar", name: 'unpublish', class: 'btn btn-block btn-danger btn-left' %>
102
+ <% else %>
103
+ <%= f.button :submit, "Publicar", name: 'publish', class: 'btn btn-block btn-success btn-left' %>
104
+ <% end %>
105
+ </div>
106
+
107
+ <div class="fc-container">
108
+ <%= @object.content.try(:html_safe) %>
109
+ </div>
110
+
111
+ <%= f.input :id, as: :hidden, :input_html => { :name => "id", :value => @object.id } %>
112
+ <%= f.input :content, as: :hidden, :input_html => { :name => "content", :id => "content", :value => @object.content } %>
113
+ <% end %>
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "rails_admin_featured_content_rails_6"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,15 @@
1
+ Rails.application.config.assets.precompile += %w( fc-loading.svg )
2
+ Rails.application.config.assets.precompile += %w( fc-image-default.jpg )
3
+ Rails.application.config.assets.precompile += %w( fc-snippet-highlight.jpg )
4
+ Rails.application.config.assets.precompile += %w( fc-snippet-slide.jpg )
5
+ Rails.application.config.assets.precompile += %w( fc-snippet-text.jpg )
6
+ Rails.application.config.assets.precompile += %w( fc-snippet-one.jpg )
7
+ Rails.application.config.assets.precompile += %w( fc-snippet-two.jpg )
8
+ Rails.application.config.assets.precompile += %w( fc-snippet-three.jpg )
9
+ Rails.application.config.assets.precompile += %w( fc-snippet-four.jpg )
10
+ Rails.application.config.assets.precompile += %w( fc-snippet-float-one.jpg )
11
+ Rails.application.config.assets.precompile += %w( fc-snippet-float-two.jpg )
12
+ Rails.application.config.assets.precompile += %w( fc-snippet-float-three.jpg )
13
+ Rails.application.config.assets.precompile += %w( fc-snippet-text-one.jpg )
14
+ Rails.application.config.assets.precompile += %w( fc-snippet-text-two.jpg )
15
+ Rails.application.config.assets.precompile += %w( fc-snippet-text-three.jpg )
@@ -0,0 +1,32 @@
1
+ en:
2
+ admin:
3
+ actions:
4
+ featured_content:
5
+ title: "Create Featured Content"
6
+ menu: "Create Featured Content"
7
+ breadcrumb: "Create Featured Content"
8
+ delete_block: "Do you want to remove this content?"
9
+ success_save: "Successfully updated"
10
+ error_save: "Error updating"
11
+ written_by: "Writter By"
12
+ news_source: "News source"
13
+ summary: "Summary"
14
+ button:
15
+ save: "Save"
16
+ publish: "Publish"
17
+ unpublish: 'Unpublish'
18
+ snippet:
19
+ targe: "Targe"
20
+ title_large: "Title large"
21
+ slide: "Slide"
22
+ one: "Block image"
23
+ list_two: "List with two block image"
24
+ list_three: "List with three block image"
25
+ list_four: "List with four block image"
26
+ float_one: "Float image"
27
+ list_float_two: "List with two float image"
28
+ list_float_three: "List with three float image"
29
+ text_one: "No image"
30
+ list_text_two: "List with two no image"
31
+ list_text_three: "List with three no image"
32
+ search_news: "Search News"
@@ -0,0 +1,32 @@
1
+ pt-BR:
2
+ admin:
3
+ actions:
4
+ featured_content:
5
+ title: "Criar Destaque"
6
+ menu: "Criar Destaque"
7
+ breadcrumb: "Criar Destaque"
8
+ delete_block: "Deseja mesmo remover esse conteúdo?"
9
+ success_save: "Atualizado com sucesso"
10
+ error_save: "Erro ao atualizar"
11
+ written_by: "Autor"
12
+ news_source: "Fonte"
13
+ summary: "Resumo"
14
+ button:
15
+ save: "Salvar"
16
+ publish: "Publicar"
17
+ unpublish: 'Despublicar'
18
+ snippet:
19
+ targe: "Tarja"
20
+ title_large: "Título grande"
21
+ slide: "Slide"
22
+ one: "Imagem em bloco"
23
+ list_two: "Lista com duas em bloco"
24
+ list_three: "Lista com três em bloco"
25
+ list_four: "Lista com quatro em bloco"
26
+ float_one: "Imagem fluída"
27
+ list_float_two: "Lista com duas fluídas"
28
+ list_float_three: "Lista com três fluídas"
29
+ text_one: "Sem imagem"
30
+ list_text_two: "Lista com duas sem imagem"
31
+ list_text_three: "Lista com três sem imagem"
32
+ search_news: "Buscar Notícia"
data/config/routes.rb ADDED
@@ -0,0 +1,9 @@
1
+ Rails.application.routes.draw do
2
+ get_path_url = 'admin/rails_admin_featured_content~featured_content/:id/search_content'
3
+ get_path_method = 'rails_admin_featured_content/featured_content#search_content'
4
+ get get_path_url => get_path_method
5
+
6
+ put_path_url = 'admin/rails_admin_featured_content~featured_content/:id/create_images'
7
+ put_path_method = 'rails_admin_featured_content/featured_content#create_images'
8
+ put put_path_url => put_path_method
9
+ end
@@ -0,0 +1,36 @@
1
+ require 'rails/generators'
2
+
3
+ class RailsAdminFeaturedContentGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ def self.source_root
7
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates/'))
8
+ end
9
+
10
+ def self.next_migration_number(*)
11
+ unless @migration
12
+ @migration = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
13
+ else
14
+ @migration += 1
15
+ end
16
+ @migration.to_s
17
+ end
18
+
19
+ def create_uploader_featured_content_image_model
20
+ template "featured_content_image_uploader.rb",
21
+ "app/uploaders/featured_content_image_uploader.rb"
22
+ end
23
+
24
+ def create_rails_admin_config_in_initializer
25
+ template "rails_admin_featured_content.rb",
26
+ "config/initializers/rails_admin_featured_content.rb"
27
+ end
28
+
29
+ def create_migrations
30
+ migration_template "create_featured_content_migration.rb",
31
+ File.join('db/migrate', "create_featured_contents.rb")
32
+
33
+ migration_template "create_featured_content_images_migration.rb",
34
+ File.join('db/migrate', "create_featured_content_images.rb")
35
+ end
36
+ end
@@ -0,0 +1,10 @@
1
+ class CreateFeaturedContentImages < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :featured_content_images do |t|
4
+ t.string :image
5
+ t.references :featured_content, index: true, foreign_key: true
6
+
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class CreateFeaturedContents < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :featured_contents do |t|
4
+ t.string :title
5
+ t.text :content
6
+ t.boolean :status, default: false
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+
3
+ class FeaturedContentImageUploader < CarrierWave::Uploader::Base
4
+ # Include RMagick or MiniMagick support:
5
+ # include CarrierWave::RMagick
6
+ include CarrierWave::MiniMagick
7
+
8
+ # Choose what kind of storage to use for this uploader:
9
+ if Rails.env.development? || Rails.env.test?
10
+ storage :file
11
+ else
12
+ storage :sftp
13
+ end
14
+ # storage :fog
15
+
16
+ # Override the directory where uploaded files will be stored.
17
+ # This is a sensible default for uploaders that are meant to be mounted:
18
+ def store_dir
19
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
20
+ end
21
+
22
+ # Provide a default URL as a default if there hasn't been a file uploaded:
23
+ # def default_url
24
+ # # For Rails 3.1+ asset pipeline compatibility:
25
+ # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
26
+ #
27
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
28
+ # end
29
+
30
+ # Process files as they are uploaded:
31
+ # process scale: [200, 300]
32
+ #
33
+ # def scale(width, height)
34
+ # # do something
35
+ # end
36
+
37
+ # Create different versions of your uploaded files:
38
+ # Use quality to compress the image
39
+ version :thumb do
40
+ process resize_to_fit: [400, 400]
41
+ process quality: 80
42
+ end
43
+
44
+ # Add a white list of extensions which are allowed to be uploaded.
45
+ # For images you might use something like this:
46
+ def extension_whitelist
47
+ %w(jpg jpeg gif png)
48
+ end
49
+
50
+ # Mitigate CVE-2016-3714
51
+ def content_type_whitelist
52
+ [/image\//]
53
+ end
54
+
55
+ # Override the filename of the uploaded files:
56
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
57
+ def filename
58
+ if original_filename
59
+ image_format = original_filename.match(/\.([^.]*)$/).to_a.first
60
+ image_name = original_filename.gsub(/\.([^.]*)$/, "").parameterize
61
+ return "#{image_name}#{image_format}"
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,22 @@
1
+ RailsAdmin.config do |config|
2
+ config.actions do
3
+ featured_content do
4
+ only ['RailsAdminFeaturedContent::FeaturedContent']
5
+ end
6
+
7
+ config.model 'RailsAdminFeaturedContent::FeaturedContent' do
8
+ list do
9
+ field :id
10
+ field :title
11
+ field :status
12
+ end
13
+ edit do
14
+ field :title
15
+ end
16
+ end
17
+
18
+ config.model 'RailsAdminFeaturedContent::FeaturedContentImage' do
19
+ visible false
20
+ end
21
+ end
22
+ end