activeadmin-settings 0.2.6 → 0.2.7

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 (51) hide show
  1. data/app/{controller → controllers}/activeadmin_settings/admin_users_controller.rb +0 -0
  2. data/app/controllers/activeadmin_settings/pictures_controller.rb +19 -0
  3. data/app/{controller → controllers}/activeadmin_settings/settings_controller.rb +0 -0
  4. data/app/models/activeadmin_settings/picture.rb +48 -0
  5. data/app/uploaders/activeadmin_settings/redactor_picture_uploader.rb +97 -0
  6. data/app/views/admin/settings/_settings_table.html.erb +8 -4
  7. data/config/routes.rb +3 -0
  8. data/lib/activeadmin-settings.rb +13 -0
  9. data/lib/activeadmin-settings/version.rb +1 -1
  10. data/vendor/assets/javascripts/activeadmin_settings/index.js.coffee +1 -0
  11. data/vendor/assets/javascripts/activeadmin_settings/settings.js.coffee +0 -2
  12. data/vendor/assets/javascripts/activeadmin_settings/tabs.js.coffee +26 -0
  13. data/vendor/assets/javascripts/redactor/css/docstyle.css +139 -0
  14. data/vendor/assets/javascripts/redactor/css/style.css +135 -0
  15. data/vendor/assets/javascripts/redactor/css/wym.css +151 -0
  16. data/vendor/assets/javascripts/redactor/index.js +1 -0
  17. data/vendor/assets/javascripts/redactor/langs/bg.js +67 -0
  18. data/vendor/assets/javascripts/redactor/langs/by.js +65 -0
  19. data/vendor/assets/javascripts/redactor/langs/cs.js +77 -0
  20. data/vendor/assets/javascripts/redactor/langs/de.js +70 -0
  21. data/vendor/assets/javascripts/redactor/langs/en.js +66 -0
  22. data/vendor/assets/javascripts/redactor/langs/eo.js +66 -0
  23. data/vendor/assets/javascripts/redactor/langs/es.js +66 -0
  24. data/vendor/assets/javascripts/redactor/langs/fa.js +66 -0
  25. data/vendor/assets/javascripts/redactor/langs/fi.js +69 -0
  26. data/vendor/assets/javascripts/redactor/langs/fr.js +76 -0
  27. data/vendor/assets/javascripts/redactor/langs/hr.js +69 -0
  28. data/vendor/assets/javascripts/redactor/langs/hu.js +67 -0
  29. data/vendor/assets/javascripts/redactor/langs/it.js +68 -0
  30. data/vendor/assets/javascripts/redactor/langs/ja.js +66 -0
  31. data/vendor/assets/javascripts/redactor/langs/ko.js +66 -0
  32. data/vendor/assets/javascripts/redactor/langs/lv.js +65 -0
  33. data/vendor/assets/javascripts/redactor/langs/nl.js +69 -0
  34. data/vendor/assets/javascripts/redactor/langs/pl.js +66 -0
  35. data/vendor/assets/javascripts/redactor/langs/pt_br.js +72 -0
  36. data/vendor/assets/javascripts/redactor/langs/ru.js +66 -0
  37. data/vendor/assets/javascripts/redactor/langs/sk.js +66 -0
  38. data/vendor/assets/javascripts/redactor/langs/sq.js +69 -0
  39. data/vendor/assets/javascripts/redactor/langs/tr.js +66 -0
  40. data/vendor/assets/javascripts/redactor/langs/ua.js +67 -0
  41. data/vendor/assets/javascripts/redactor/langs/zh_cn.js +67 -0
  42. data/vendor/assets/javascripts/redactor/langs/zh_tw.js +66 -0
  43. data/vendor/assets/javascripts/redactor/redactor.js.erb +3375 -0
  44. data/vendor/assets/stylesheets/activeadmin_settings.css.scss +4 -1
  45. data/vendor/assets/stylesheets/redactor/css/docstyle.css +139 -0
  46. data/vendor/assets/stylesheets/redactor/css/redactor.css +410 -0
  47. data/vendor/assets/stylesheets/redactor/css/style.css +135 -0
  48. data/vendor/assets/stylesheets/redactor/css/wym.css +151 -0
  49. data/vendor/assets/stylesheets/redactor/img/icons.png +0 -0
  50. data/vendor/assets/stylesheets/redactor/index.css +1 -0
  51. metadata +44 -4
@@ -0,0 +1,19 @@
1
+ class ActiveadminSettings::PicturesController < ApplicationController
2
+ before_filter :authenticate_admin_user!
3
+
4
+ def index
5
+ @pictures = ActiveadminSettings::Picture.all
6
+ render :json => @pictures
7
+ end
8
+
9
+ def create
10
+ @picture = ActiveadminSettings::Picture.new
11
+ @picture.data = params[:file]
12
+
13
+ if @picture.save
14
+ render :json => { :filelink => @picture.url }
15
+ else
16
+ render :nothing => true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,48 @@
1
+ class ActiveadminSettings::Picture
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps
4
+
5
+ # Fields
6
+ field :data_file_size
7
+ field :data_content_type
8
+ field :width, :type => Integer
9
+ field :height, :type => Integer
10
+
11
+ # Features
12
+ mount_uploader :data, ActiveadminSettings::RedactorPictureUploader
13
+
14
+ # Scopes
15
+ default_scope order_by(:created_at => :desc)
16
+
17
+ # Helpers
18
+ def has_dimensions?
19
+ respond_to?(:width) && respond_to?(:height)
20
+ end
21
+
22
+ def image?
23
+ ActiveadminSettings::IMAGE_TYPES.include?(data_content_type)
24
+ end
25
+
26
+ def url
27
+ data.url
28
+ end
29
+
30
+ def image
31
+ url
32
+ end
33
+
34
+ def thumb
35
+ data.thumb.url
36
+ end
37
+
38
+ def as_json_methods
39
+ [:image, :thumb]
40
+ end
41
+
42
+ def as_json(options = nil)
43
+ options = {
44
+ :methods => as_json_methods
45
+ }
46
+ super options
47
+ end
48
+ end
@@ -0,0 +1,97 @@
1
+ # encoding: utf-8
2
+ class ActiveadminSettings::RedactorPictureUploader < CarrierWave::Uploader::Base
3
+
4
+ # Include RMagick or ImageScience support:
5
+ # include CarrierWave::RMagick
6
+ include CarrierWave::MiniMagick
7
+ # include CarrierWave::ImageScience
8
+
9
+ # Instance
10
+ def strip
11
+ manipulate! do |img|
12
+ img.strip
13
+ img = yield(img) if block_given?
14
+ img
15
+ end
16
+ end
17
+
18
+ # process :quality => 85
19
+ def quality(percentage)
20
+ manipulate! do |img|
21
+ img.quality(percentage)
22
+ img = yield(img) if block_given?
23
+ img
24
+ end
25
+ end
26
+
27
+ def extract_content_type
28
+ if file.content_type == 'application/octet-stream' || file.content_type.blank?
29
+ content_type = MIME::Types.type_for(original_filename).first
30
+ else
31
+ content_type = file.content_type
32
+ end
33
+
34
+ model.data_content_type = content_type.to_s
35
+ end
36
+
37
+ def set_size
38
+ model.data_file_size = file.size
39
+ end
40
+
41
+ def read_dimensions
42
+ if model.image? && model.has_dimensions?
43
+ magick = ::MiniMagick::Image.new(current_path)
44
+ model.width, model.height = magick[:width], magick[:height]
45
+ end
46
+ end
47
+
48
+ # Override the directory where uploaded files will be stored.
49
+ # This is a sensible default for uploaders that are meant to be mounted:
50
+ def store_dir
51
+ "system/settings/redactor/pictures/#{model.id}"
52
+ end
53
+
54
+ # Provide a default URL as a default if there hasn't been a file uploaded:
55
+ # def default_url
56
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
57
+ # end
58
+
59
+ # Process files as they are uploaded:
60
+ # process :scale => [200, 300]
61
+ #
62
+ # def scale(width, height)
63
+ # # do something
64
+ # end
65
+
66
+ process :read_dimensions
67
+
68
+ # Create different versions of your uploaded files:
69
+ version :thumb do
70
+ process :resize_to_fill => [118, 100]
71
+ end
72
+
73
+ #version :content do
74
+ # process :resize_to_limit => [800, 800]
75
+ #end
76
+
77
+ # Add a white list of extensions which are allowed to be uploaded.
78
+ # For images you might use something like this:
79
+ def extension_white_list
80
+ ActiveadminSettings.image_file_types
81
+ end
82
+
83
+ # Override the filename of the uploaded files:
84
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
85
+ # def filename
86
+ # "something.jpg" if original_filename
87
+ # end
88
+
89
+
90
+ # Class
91
+ def self.extended(base)
92
+ base.class_eval do
93
+ process :extract_content_type
94
+ process :set_size
95
+ end
96
+ end
97
+ end
@@ -12,12 +12,12 @@
12
12
  </thead>
13
13
  <tbody>
14
14
  <% settings.each do |setting| %>
15
- <tr class="odd" id="setting_<%= setting.id %>">
16
- <td class="">
15
+ <tr class="odd option-type-<%= setting.type %>" id="setting_<%= setting.id %>">
16
+ <td>
17
17
  <strong><%= setting.name %></strong></br>
18
18
  <em><%= setting.description %></em>
19
19
  </td>
20
- <td class="">
20
+ <td>
21
21
  <div class="form <%= setting.type %>">
22
22
  <%= semantic_form_for setting,
23
23
  :method => :put,
@@ -29,6 +29,10 @@
29
29
  <%= f.input :remove_file, :as => :boolean %>
30
30
  <% when "text" %>
31
31
  <%= f.input :string, :as => :text %>
32
+ <% when "html" %>
33
+ <%= f.input :string,
34
+ :as => :text,
35
+ :input_html => { :class => "settings-redactor" } %>
32
36
  <% else %>
33
37
  <%= f.input :string, :placeholder => "Default: " + setting.default_value %>
34
38
  <% end %>
@@ -36,7 +40,7 @@
36
40
  <% end %>
37
41
  </div>
38
42
  </td>
39
- <td class="">
43
+ <td>
40
44
  <a href="#" class="member_link update_link"
41
45
  data-id="#setting_<%= setting.id %>">
42
46
  Update
data/config/routes.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  ActiveadminSettings::Engine.routes.draw do
2
+ scope "redactor" do
3
+ resources :pictures, :only => [:index, :create]
4
+ end
2
5
  resources :settings, :only => [:update]
3
6
  resources :admin_users, :only => [:create, :update, :destroy]
4
7
  end
@@ -4,6 +4,19 @@ module ActiveadminSettings
4
4
  require 'activeadmin-settings/engine'
5
5
  require 'activeadmin-settings/helper'
6
6
 
7
+ IMAGE_TYPES = [ 'image/jpeg',
8
+ 'image/png',
9
+ 'image/gif',
10
+ 'image/jpg',
11
+ 'image/pjpeg',
12
+ 'image/tiff',
13
+ 'image/x-png' ]
14
+
15
+ mattr_accessor :image_file_types
16
+ @@image_file_types = ["jpg", "jpeg", "png", "gif", "tiff"]
17
+
18
+
19
+ # Load configuration from config/activeadmin_settings.yml
7
20
  def self.load_config
8
21
  config_file = ::Rails.root.join("config/activeadmin_settings.yml")
9
22
  @load_config = {}
@@ -1,3 +1,3 @@
1
1
  module ActiveadminSettings
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  end
@@ -1,3 +1,4 @@
1
1
  #= require jquery.form
2
2
  #= require jquery.easytabs
3
+ #= require redactor
3
4
  #= require_tree ./
@@ -15,8 +15,6 @@ $ ->
15
15
  $('#settings .form form').submit ->
16
16
  false
17
17
 
18
- $('#settings .update_link').hide()
19
-
20
18
  $('#settings .update_link').click (e) ->
21
19
  e.preventDefault()
22
20
  btn = $(this)
@@ -1,6 +1,32 @@
1
1
  # Tabs
2
+
3
+ enable_redactor = ->
4
+ # Workaround for redactor and easytabs integration,
5
+ # the problem is that not current redactors are not
6
+ # clickable after init.
7
+
8
+ window.redactor_settings =
9
+ buttons: ['html', '|',
10
+ 'formatting', '|',
11
+ 'bold', 'italic', 'deleted', '|',
12
+ 'unorderedlist', 'orderedlist', 'outdent', 'indent', '|',
13
+ 'image', 'video', 'file', 'table', 'link', '|',
14
+ 'alignleft', 'aligncenter', 'alignright', 'justify', '|',
15
+ 'fullscreen' ]
16
+
17
+ # after tab was clicked there is a workaround to turn on redactor
18
+ $('#settings_tabs').bind 'easytabs:after', (event, $clicked, $targetPanel, settings) ->
19
+ text_input = $targetPanel.find('.settings-redactor')
20
+ if text_input.css("display") != "none"
21
+ text_input.redactor window.redactor_settings
22
+
23
+ # init redactor for the first visible tab
24
+ $('#settings_tabs .settings-redactor:visible').redactor window.redactor_settings
25
+
2
26
  $ ->
3
27
  $('#settings_tabs').easytabs
4
28
  animate:true
5
29
  animationSpeed:0
6
30
  tabActiveClass:"selected"
31
+
32
+ enable_redactor()
@@ -0,0 +1,139 @@
1
+ html {
2
+ padding: 0;
3
+ margin: 0;
4
+ }
5
+ body {
6
+ font-family: Helvetica, Arial, Verdana, Tahoma, sans-serif;
7
+ font-size: 15px;
8
+ margin: 0;
9
+ padding: 0;
10
+ overflow-x: hidden;
11
+ background: #f4f4f4;
12
+ }
13
+ #page {
14
+ max-width: 900px;
15
+ width: 74%;
16
+ margin: 20px auto;
17
+ padding: 15px 50px;
18
+ background: #fff;
19
+ border: 1px solid #ddd;
20
+ }
21
+ #page:focus {
22
+ outline: none;
23
+ }
24
+
25
+ a {
26
+ color: #15c;
27
+ }
28
+
29
+ object,
30
+ embed,
31
+ video,
32
+ iframe {
33
+ width: auto;
34
+ max-width: 100%;
35
+ }
36
+ video,
37
+ iframe {
38
+ height: auto;
39
+ }
40
+
41
+ ::selection {
42
+ background-color: #333;
43
+ color: #fff;
44
+ text-shadow: none;
45
+ }
46
+
47
+ div,
48
+ p,
49
+ ul,
50
+ ol,
51
+ table,
52
+ dl,
53
+ blockquote,
54
+ pre,
55
+ iframe,
56
+ object,
57
+ hr {
58
+ margin-bottom: 15px;
59
+ line-height: 1.5em;
60
+ }
61
+ blockquote {
62
+ margin-left: 3em;
63
+ font-style: italic;
64
+ color: #777;
65
+ }
66
+ ul, ol {
67
+ padding-left: 2em;
68
+ }
69
+ ul ul,
70
+ ol ol,
71
+ ul ol,
72
+ ol ul {
73
+ border: none;
74
+ margin: 2px !important;
75
+ padding: 0;
76
+ padding-left: 2em;
77
+ }
78
+ dl dt { font-weight: bold; }
79
+ dd { margin-left: 1em;}
80
+
81
+ table {
82
+ border-collapse: collapse;
83
+ font-size: 1em;
84
+ }
85
+ table td {
86
+ border: 1px solid #ddd;
87
+ padding: 5px;
88
+ }
89
+ table thead td {
90
+ border-bottom: 2px solid #000 !important;
91
+ font-weight: bold;
92
+ }
93
+ code, pre {
94
+ font-family: monospace sans-serif;
95
+ }
96
+ code {
97
+ background-color: #d8d7d7;
98
+ }
99
+ pre {
100
+ padding: 1em;
101
+ border: 1px dashed #ccc;
102
+ background: #f5f5f5;
103
+ overflow: auto;
104
+ }
105
+ hr {
106
+ display: block;
107
+ height: 1px;
108
+ border: 0;
109
+ border-top: 1px solid #ccc;
110
+ }
111
+
112
+ h1, h2, h3, h4,h5 {
113
+ font-weight: bold;
114
+ }
115
+
116
+ h1 {
117
+ font-size: 36px;
118
+ line-height: 40px;
119
+ margin-bottom: 10px;
120
+ }
121
+ h2 {
122
+ font-size: 30px;
123
+ line-height: 36px;
124
+ margin-bottom: 15px;
125
+ }
126
+ h3 {
127
+ font-size: 24px;
128
+ line-height: 30px;
129
+ margin-bottom: 10px;
130
+ }
131
+ h4 {
132
+ font-size: 18px;
133
+ line-height: 24px;
134
+ margin-bottom: 10px;
135
+ }
136
+ h4 {
137
+ font-size: 1em;
138
+ margin-bottom: 10px;
139
+ }
@@ -0,0 +1,135 @@
1
+ html {
2
+ padding: 0;
3
+ margin: 0;
4
+ }
5
+ body {
6
+ font-family: Helvetica, Arial, Verdana, Tahoma, sans-serif;
7
+ font-size: 15px;
8
+ margin: 0;
9
+ padding: 0;
10
+ overflow-x: hidden;
11
+ background: #fff;
12
+ }
13
+ #page {
14
+ margin: 20px;
15
+ background: #fff;
16
+ }
17
+ #page:focus {
18
+ outline: none;
19
+ }
20
+
21
+ a {
22
+ color: #15c;
23
+ }
24
+
25
+ object,
26
+ embed,
27
+ video,
28
+ iframe {
29
+ width: auto;
30
+ max-width: 100%;
31
+ }
32
+ video,
33
+ iframe {
34
+ height: auto;
35
+ }
36
+
37
+ ::selection {
38
+ background-color: #333;
39
+ color: #fff;
40
+ text-shadow: none;
41
+ }
42
+
43
+ div,
44
+ p,
45
+ ul,
46
+ ol,
47
+ table,
48
+ dl,
49
+ blockquote,
50
+ pre,
51
+ iframe,
52
+ object,
53
+ hr {
54
+ margin-bottom: 15px;
55
+ line-height: 1.5em;
56
+ }
57
+ blockquote {
58
+ margin-left: 3em;
59
+ font-style: italic;
60
+ color: #777;
61
+ }
62
+ ul, ol {
63
+ padding-left: 2em;
64
+ }
65
+ ul ul,
66
+ ol ol,
67
+ ul ol,
68
+ ol ul {
69
+ border: none;
70
+ margin: 2px !important;
71
+ padding: 0;
72
+ padding-left: 2em;
73
+ }
74
+ dl dt { font-weight: bold; }
75
+ dd { margin-left: 1em;}
76
+
77
+ table {
78
+ border-collapse: collapse;
79
+ font-size: 1em;
80
+ }
81
+ table td {
82
+ border: 1px solid #ddd;
83
+ padding: 5px;
84
+ }
85
+ table thead td {
86
+ border-bottom: 2px solid #000 !important;
87
+ font-weight: bold;
88
+ }
89
+ code, pre {
90
+ font-family: monospace sans-serif;
91
+ }
92
+ code {
93
+ background-color: #d8d7d7;
94
+ }
95
+ pre {
96
+ padding: 1em;
97
+ border: 1px dashed #ccc;
98
+ background: #f5f5f5;
99
+ overflow: auto;
100
+ }
101
+ hr {
102
+ display: block;
103
+ height: 1px;
104
+ border: 0;
105
+ border-top: 1px solid #ccc;
106
+ }
107
+
108
+ h1, h2, h3, h4,h5 {
109
+ font-weight: bold;
110
+ }
111
+
112
+ h1 {
113
+ font-size: 36px;
114
+ line-height: 40px;
115
+ margin-bottom: 10px;
116
+ }
117
+ h2 {
118
+ font-size: 30px;
119
+ line-height: 38px;
120
+ margin-bottom: 15px;
121
+ }
122
+ h3 {
123
+ font-size: 24px;
124
+ line-height: 30px;
125
+ margin-bottom: 10px;
126
+ }
127
+ h4 {
128
+ font-size: 18px;
129
+ line-height: 24px;
130
+ margin-bottom: 10px;
131
+ }
132
+ h5 {
133
+ font-size: 1em;
134
+ margin-bottom: 10px;
135
+ }