activeadmin-settings 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
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
+ }