ckeditor 3.5.4 → 3.6.0.pre

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 (179) hide show
  1. data/Gemfile +23 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +96 -97
  4. data/Rakefile +16 -33
  5. data/app/controllers/ckeditor/attachment_files_controller.rb +4 -4
  6. data/app/controllers/ckeditor/base_controller.rb +15 -42
  7. data/app/controllers/ckeditor/pictures_controller.rb +3 -3
  8. data/app/views/ckeditor/attachment_files/index.html.erb +13 -51
  9. data/app/views/ckeditor/pictures/index.html.erb +14 -52
  10. data/app/views/ckeditor/shared/_asset.html.erb +19 -0
  11. data/app/views/ckeditor/shared/_asset_tmpl.html.erb +21 -0
  12. data/app/views/layouts/ckeditor.html.erb +16 -23
  13. data/config/locales/en.ckeditor.yml +3 -7
  14. data/config/locales/ru.ckeditor.yml +4 -8
  15. data/config/locales/uk.ckeditor.yml +4 -8
  16. data/config/routes.rb +3 -3
  17. data/lib/ckeditor.rb +30 -79
  18. data/lib/ckeditor/engine.rb +14 -13
  19. data/lib/ckeditor/helpers/controllers.rb +30 -0
  20. data/lib/ckeditor/helpers/form_builder.rb +11 -0
  21. data/lib/ckeditor/helpers/form_helper.rb +25 -0
  22. data/lib/ckeditor/helpers/view_helper.rb +19 -0
  23. data/lib/ckeditor/http.rb +81 -0
  24. data/lib/ckeditor/orm/active_record.rb +91 -0
  25. data/lib/ckeditor/utils.rb +51 -70
  26. data/lib/ckeditor/version.rb +2 -7
  27. data/lib/generators/ckeditor/install_generator.rb +62 -0
  28. data/lib/generators/ckeditor/models_generator.rb +51 -0
  29. data/lib/generators/ckeditor/templates/ckeditor.rb +18 -0
  30. data/lib/generators/ckeditor/templates/ckeditor/config.js +52 -0
  31. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/images/gal_add.jpg +0 -0
  32. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/images/gal_add.png +0 -0
  33. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/images/gal_del.png +0 -0
  34. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/images/gal_more.gif +0 -0
  35. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/images/preloader.gif +0 -0
  36. data/lib/generators/ckeditor/{base/templates/ckeditor/images → templates/ckeditor/filebrowser/images/thumbs}/ckfnothumb.gif +0 -0
  37. data/lib/generators/ckeditor/{base/templates/ckeditor/images → templates/ckeditor/filebrowser/images/thumbs}/mp3.gif +0 -0
  38. data/lib/generators/ckeditor/{base/templates/ckeditor/images → templates/ckeditor/filebrowser/images/thumbs}/pdf.gif +0 -0
  39. data/lib/generators/ckeditor/{base/templates/ckeditor/images → templates/ckeditor/filebrowser/images/thumbs}/rar.gif +0 -0
  40. data/lib/generators/ckeditor/{base/templates/ckeditor/images → templates/ckeditor/filebrowser/images/thumbs}/swf.gif +0 -0
  41. data/lib/generators/ckeditor/{base/templates/ckeditor/images → templates/ckeditor/filebrowser/images/thumbs}/xls.gif +0 -0
  42. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/javascripts/application.js +222 -0
  43. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/stylesheets/uploader.css +112 -0
  44. data/lib/generators/ckeditor/{base/templates → templates}/ckeditor/plugins/attachment/dialogs/attachment.js +0 -0
  45. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/attachment/images/attachment.png +0 -0
  46. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/attachment/lang/en.js +0 -0
  47. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/attachment/lang/ru.js +0 -0
  48. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/attachment/lang/uk.js +0 -0
  49. data/lib/generators/ckeditor/{base/templates → templates}/ckeditor/plugins/attachment/plugin.js +0 -0
  50. data/lib/generators/ckeditor/{base/templates → templates}/ckeditor/plugins/embed/dialogs/embed.js +0 -0
  51. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/embed/images/embed.png +0 -0
  52. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/embed/lang/en.js +0 -0
  53. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/embed/lang/ru.js +0 -0
  54. data/lib/generators/ckeditor/{base/templates/ckeditor/_source → templates/ckeditor}/plugins/embed/lang/uk.js +0 -0
  55. data/lib/generators/ckeditor/{base/templates → templates}/ckeditor/plugins/embed/plugin.js +0 -0
  56. data/lib/generators/ckeditor/templates/models/active_record/asset.rb +7 -0
  57. data/lib/generators/ckeditor/templates/models/active_record/attachment_file.rb +15 -0
  58. data/lib/generators/ckeditor/{migration/templates/models/paperclip → templates/models/active_record}/migration.rb +3 -8
  59. data/lib/generators/ckeditor/templates/models/active_record/picture.rb +13 -0
  60. data/test/ckeditor_test.rb +13 -0
  61. data/test/controllers/attachment_files_controller_test.rb +52 -0
  62. data/test/controllers/pictures_controller_test.rb +52 -0
  63. data/test/dummy/Rakefile +7 -0
  64. data/test/dummy/app/controllers/application_controller.rb +4 -0
  65. data/test/dummy/app/controllers/posts_controller.rb +83 -0
  66. data/test/dummy/app/helpers/application_helper.rb +2 -0
  67. data/test/dummy/app/helpers/posts_helper.rb +2 -0
  68. data/test/dummy/app/models/ckeditor/asset.rb +7 -0
  69. data/test/dummy/app/models/ckeditor/attachment_file.rb +15 -0
  70. data/test/dummy/app/models/ckeditor/picture.rb +13 -0
  71. data/test/dummy/app/models/post.rb +3 -0
  72. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  73. data/test/dummy/app/views/posts/_form.html.erb +30 -0
  74. data/test/dummy/app/views/posts/edit.html.erb +6 -0
  75. data/test/dummy/app/views/posts/index.html.erb +27 -0
  76. data/test/dummy/app/views/posts/new.html.erb +5 -0
  77. data/test/dummy/app/views/posts/show.html.erb +5 -0
  78. data/test/dummy/config.ru +4 -0
  79. data/test/dummy/config/application.rb +46 -0
  80. data/test/dummy/config/boot.rb +10 -0
  81. data/test/dummy/config/database.yml +34 -0
  82. data/test/dummy/config/environment.rb +5 -0
  83. data/test/dummy/config/environments/development.rb +26 -0
  84. data/test/dummy/config/environments/production.rb +49 -0
  85. data/test/dummy/config/environments/test.rb +35 -0
  86. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  87. data/test/dummy/config/initializers/ckeditor.rb +18 -0
  88. data/test/dummy/config/initializers/inflections.rb +10 -0
  89. data/test/dummy/config/initializers/mime_types.rb +5 -0
  90. data/test/dummy/config/initializers/secret_token.rb +7 -0
  91. data/test/dummy/config/initializers/session_store.rb +8 -0
  92. data/test/dummy/config/locales/en.yml +5 -0
  93. data/test/dummy/config/routes.rb +4 -0
  94. data/test/dummy/db/migrate/20110623120047_create_posts.rb +14 -0
  95. data/test/dummy/db/migrate/20110705195648_create_ckeditor_assets.rb +26 -0
  96. data/test/dummy/db/schema.rb +36 -0
  97. data/test/dummy/log/development.log +818 -0
  98. data/test/dummy/log/production.log +0 -0
  99. data/test/dummy/log/server.log +0 -0
  100. data/test/dummy/log/test.log +5398 -0
  101. data/test/dummy/public/404.html +26 -0
  102. data/test/dummy/public/422.html +26 -0
  103. data/test/dummy/public/500.html +26 -0
  104. data/test/dummy/public/favicon.ico +0 -0
  105. data/test/dummy/public/javascripts/application.js +2 -0
  106. data/test/dummy/public/javascripts/controls.js +965 -0
  107. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  108. data/test/dummy/public/javascripts/effects.js +1123 -0
  109. data/test/dummy/public/javascripts/prototype.js +6001 -0
  110. data/test/dummy/public/javascripts/rails.js +191 -0
  111. data/test/dummy/public/stylesheets/scaffold.css +56 -0
  112. data/test/dummy/script/rails +6 -0
  113. data/test/dummy/test/fixtures/files/rails.png +0 -0
  114. data/test/dummy/test/fixtures/files/rails.tar.gz +0 -0
  115. data/test/generators/install_generator_test.rb +18 -0
  116. data/test/generators/models_generator_test.rb +21 -0
  117. data/test/integration/navigation_test.rb +7 -0
  118. data/test/integration/posts_test.rb +41 -0
  119. data/test/routes_test.rb +47 -0
  120. data/test/support/integration_case.rb +5 -0
  121. data/test/test_helper.rb +28 -0
  122. data/test/tmp/app/models/ckeditor/asset.rb +7 -0
  123. data/test/tmp/app/models/ckeditor/attachment_file.rb +15 -0
  124. data/test/tmp/app/models/ckeditor/picture.rb +13 -0
  125. data/test/tmp/db/migrate/20110711170413_create_ckeditor_assets.rb +26 -0
  126. metadata +220 -99
  127. data/CHANGELOG +0 -15
  128. data/app/helpers/ckeditor/base_helper.rb +0 -21
  129. data/app/views/ckeditor/_asset.html.erb +0 -20
  130. data/app/views/ckeditor/_swfupload.html.erb +0 -73
  131. data/lib/ckeditor/form_builder.rb +0 -22
  132. data/lib/ckeditor/middleware.rb +0 -18
  133. data/lib/ckeditor/view_helper.rb +0 -92
  134. data/lib/generators/ckeditor/base/USAGE +0 -9
  135. data/lib/generators/ckeditor/base/base_generator.rb +0 -41
  136. data/lib/generators/ckeditor/base/templates/ckeditor.rb +0 -54
  137. data/lib/generators/ckeditor/base/templates/ckeditor/_source/plugins/attachment/dialogs/attachment.js +0 -384
  138. data/lib/generators/ckeditor/base/templates/ckeditor/_source/plugins/attachment/plugin.js +0 -44
  139. data/lib/generators/ckeditor/base/templates/ckeditor/_source/plugins/embed/dialogs/embed.js +0 -65
  140. data/lib/generators/ckeditor/base/templates/ckeditor/_source/plugins/embed/plugin.js +0 -43
  141. data/lib/generators/ckeditor/base/templates/ckeditor/config.js +0 -43
  142. data/lib/generators/ckeditor/base/templates/ckeditor/css/ckfinder.css +0 -316
  143. data/lib/generators/ckeditor/base/templates/ckeditor/css/fck_dialog.css +0 -119
  144. data/lib/generators/ckeditor/base/templates/ckeditor/css/fck_editor.css +0 -448
  145. data/lib/generators/ckeditor/base/templates/ckeditor/css/swfupload.css +0 -94
  146. data/lib/generators/ckeditor/base/templates/ckeditor/images/add.gif +0 -0
  147. data/lib/generators/ckeditor/base/templates/ckeditor/images/cancelbutton.gif +0 -0
  148. data/lib/generators/ckeditor/base/templates/ckeditor/images/doc.gif +0 -0
  149. data/lib/generators/ckeditor/base/templates/ckeditor/images/refresh.gif +0 -0
  150. data/lib/generators/ckeditor/base/templates/ckeditor/images/select_files.png +0 -0
  151. data/lib/generators/ckeditor/base/templates/ckeditor/images/spacer.gif +0 -0
  152. data/lib/generators/ckeditor/base/templates/ckeditor/images/toolbar.start.gif +0 -0
  153. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/attachment/images/attachment.png +0 -0
  154. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/attachment/lang/en.js +0 -10
  155. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/attachment/lang/ru.js +0 -10
  156. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/attachment/lang/uk.js +0 -10
  157. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/embed/images/embed.png +0 -0
  158. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/embed/lang/en.js +0 -9
  159. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/embed/lang/ru.js +0 -9
  160. data/lib/generators/ckeditor/base/templates/ckeditor/plugins/embed/lang/uk.js +0 -9
  161. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/fileprogress.js +0 -266
  162. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/handlers.js +0 -181
  163. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/jquery-1.5.1.min.js +0 -16
  164. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/querystring.js +0 -40
  165. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/rails.js +0 -158
  166. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/swfupload.js +0 -1
  167. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/swfupload.queue.js +0 -1
  168. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/swfupload.swf +0 -0
  169. data/lib/generators/ckeditor/base/templates/ckeditor/swfupload/swfupload.swfobject.js +0 -111
  170. data/lib/generators/ckeditor/migration/USAGE +0 -12
  171. data/lib/generators/ckeditor/migration/migration_generator.rb +0 -46
  172. data/lib/generators/ckeditor/migration/templates/models/attachment_fu/asset.rb +0 -32
  173. data/lib/generators/ckeditor/migration/templates/models/attachment_fu/attachment_file.rb +0 -24
  174. data/lib/generators/ckeditor/migration/templates/models/attachment_fu/migration.rb +0 -30
  175. data/lib/generators/ckeditor/migration/templates/models/attachment_fu/picture.rb +0 -25
  176. data/lib/generators/ckeditor/migration/templates/models/paperclip/asset.rb +0 -97
  177. data/lib/generators/ckeditor/migration/templates/models/paperclip/attachment_file.rb +0 -40
  178. data/lib/generators/ckeditor/migration/templates/models/paperclip/picture.rb +0 -23
  179. data/lib/tasks/ckeditor_tasks.rake +0 -3
@@ -0,0 +1,30 @@
1
+ module Ckeditor
2
+ module Helpers
3
+ module Controllers
4
+ extend ActiveSupport::Concern
5
+
6
+ protected
7
+
8
+ def ckeditor_authenticate
9
+ return true
10
+ end
11
+
12
+ def ckeditor_before_create_asset(asset)
13
+ asset.assetable = current_user if respond_to?(:current_user)
14
+ return true
15
+ end
16
+
17
+ def ckeditor_pictures_scope(options = {})
18
+ ckeditor_filebrowser_scope(options)
19
+ end
20
+
21
+ def ckeditor_attachment_files_scope(options = {})
22
+ ckeditor_filebrowser_scope(options)
23
+ end
24
+
25
+ def ckeditor_filebrowser_scope(options = {})
26
+ { :order => [:id, :desc] }.merge(options)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ module Ckeditor
2
+ module Helpers
3
+ module FormBuilder
4
+ extend ActiveSupport::Concern
5
+
6
+ def cktext_area(method, options = {})
7
+ @template.send("cktext_area", @object_name, method, objectify_options(options))
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ module Ckeditor
2
+ module Helpers
3
+ module FormHelper
4
+ extend ActiveSupport::Concern
5
+
6
+ include ActionView::Helpers::TagHelper
7
+ include ActionView::Helpers::JavaScriptHelper
8
+
9
+ def cktext_area(object_name, method, options = {})
10
+ options = { :language => I18n.locale.to_s }.merge(options)
11
+ input_html = (options.delete(:input_html) || {})
12
+ hash = input_html.stringify_keys
13
+
14
+ instance_tag = ActionView::Base::InstanceTag.new(object_name, method, self, options.delete(:object))
15
+ instance_tag.send(:add_default_name_and_id, hash)
16
+
17
+ output_buffer = ActiveSupport::SafeBuffer.new
18
+ output_buffer << instance_tag.to_text_area_tag(input_html)
19
+ output_buffer << javascript_tag(Utils.js_replace(hash['id'], options))
20
+
21
+ output_buffer
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ module Ckeditor
2
+ module Helpers
3
+ module ViewHelper
4
+ extend ActiveSupport::Concern
5
+
6
+ def cktext_area_tag(name, content = nil, options = {})
7
+ element_id = sanitize_to_id(name)
8
+ options = { :language => I18n.locale.to_s }.merge(options)
9
+ input_html = { :id => element_id }.merge( options.delete(:input_html) || {} )
10
+
11
+ output_buffer = ActiveSupport::SafeBuffer.new
12
+ output_buffer << text_area_tag(name, content, input_html)
13
+ output_buffer << javascript_tag(Utils.js_replace(element_id, options))
14
+
15
+ output_buffer
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ require 'digest/sha1'
3
+ require 'mime/types'
4
+
5
+ module Ckeditor
6
+ module Http
7
+ # Create tempfile from hash
8
+ class UploadedFile
9
+ attr_accessor :original_filename, :content_type, :tempfile, :headers
10
+
11
+ def initialize(hash)
12
+ @original_filename = hash[:filename]
13
+ @content_type = hash[:type]
14
+ @headers = hash[:head]
15
+ @tempfile = hash[:tempfile]
16
+ raise(ArgumentError, ':tempfile is required') unless @tempfile
17
+ end
18
+
19
+ def open
20
+ @tempfile.open
21
+ end
22
+
23
+ def path
24
+ @tempfile.path
25
+ end
26
+
27
+ def read(*args)
28
+ @tempfile.read(*args)
29
+ end
30
+
31
+ def rewind
32
+ @tempfile.rewind
33
+ end
34
+
35
+ def size
36
+ @tempfile.size
37
+ end
38
+ end
39
+
40
+ # Usage (paperclip example)
41
+ # @asset.data = QqFile.new(params[:qqfile], request)
42
+ class QqFile < ::Tempfile
43
+
44
+ def initialize(filename, request, tmpdir = Dir::tmpdir)
45
+ @original_filename = filename
46
+ @request = request
47
+
48
+ super Digest::SHA1.hexdigest(filename), tmpdir
49
+ fetch
50
+ end
51
+
52
+ def fetch
53
+ self.write @request.raw_post
54
+ self.rewind
55
+ self
56
+ end
57
+
58
+ def original_filename
59
+ @original_filename
60
+ end
61
+
62
+ def content_type
63
+ types = MIME::Types.type_for(@request.content_type)
64
+ types.empty? ? @request.content_type : types.first.to_s
65
+ end
66
+ end
67
+
68
+ # Convert nested Hash to HashWithIndifferentAccess and replace
69
+ # file upload hash with UploadedFile objects
70
+ def self.normalize_param(*args)
71
+ value = args.first
72
+ if Hash === value && value.has_key?(:tempfile)
73
+ UploadedFile.new(value)
74
+ elsif value.is_a?(String)
75
+ QqFile.new(*args)
76
+ else
77
+ value
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,91 @@
1
+ module Ckeditor
2
+ module Orm
3
+ module ActiveRecord
4
+ module AssetBase
5
+ def self.included(base)
6
+ base.send(:include, InstanceMethods)
7
+ base.send(:extend, ClassMethods)
8
+ end
9
+
10
+ module ClassMethods
11
+ def self.extended(base)
12
+ base.class_eval do
13
+ set_table_name "ckeditor_assets"
14
+
15
+ belongs_to :assetable, :polymorphic => true
16
+
17
+ before_validation :extract_content_type
18
+ before_create :read_dimensions, :parameterize_filename
19
+
20
+ delegate :url, :path, :styles, :size, :content_type, :to => :data
21
+ end
22
+ end
23
+ end
24
+
25
+ module InstanceMethods
26
+ def filename
27
+ data_file_name
28
+ end
29
+
30
+ def format_created_at
31
+ I18n.l(created_at, :format => "%d.%m.%Y")
32
+ end
33
+
34
+ def has_dimensions?
35
+ respond_to?(:width) && respond_to?(:height)
36
+ end
37
+
38
+ def image?
39
+ Ckeditor::IMAGE_TYPES.include?(data_content_type)
40
+ end
41
+
42
+ def geometry
43
+ @geometry ||= Paperclip::Geometry.from_file(data.to_file)
44
+ @geometry
45
+ end
46
+
47
+ def url_content
48
+ url
49
+ end
50
+
51
+ def url_thumb
52
+ url(:thumb)
53
+ end
54
+
55
+ def as_json(options = nil)
56
+ options = {
57
+ :methods => [:url_content, :url_thumb, :size, :filename, :format_created_at],
58
+ :root => "asset"
59
+ }.merge(options || {})
60
+
61
+ super options
62
+ end
63
+
64
+ protected
65
+
66
+ def parameterize_filename
67
+ unless data_file_name.blank?
68
+ filename = Ckeditor::Utils.parameterize_filename(data_file_name)
69
+ self.data.instance_write(:file_name, filename)
70
+ end
71
+ end
72
+
73
+ def read_dimensions
74
+ if image? && has_dimensions?
75
+ self.width = geometry.width
76
+ self.height = geometry.height
77
+ end
78
+ end
79
+
80
+ # Extract content_type from filename using mime/types gem
81
+ def extract_content_type
82
+ if data_content_type == "application/octet-stream" && !data_file_name.blank?
83
+ content_types = MIME::Types.type_for(data_file_name)
84
+ self.data_content_type = content_types.first.to_s unless content_types.empty?
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -1,70 +1,7 @@
1
1
  # encoding: utf-8
2
- require 'fileutils'
3
- require 'open-uri'
4
- require 'digest/sha1'
5
- require 'mime/types'
6
-
7
2
  module Ckeditor
8
3
  module Utils
9
- # RemoteFile
10
- #
11
- # remote_file = RemoteFile.new("http://www.google.com/intl/en_ALL/images/logo.gif")
12
- # remote_file.original_filename #=> logo.gif
13
- # remote_file.content_type #= image/gif
14
- #
15
- class RemoteFile < ::Tempfile
16
-
17
- def initialize(path, tmpdir = Dir::tmpdir)
18
- @original_filename = File.basename(path)
19
- @remote_path = path
20
-
21
- super Digest::SHA1.hexdigest(path), tmpdir
22
- fetch
23
- end
24
-
25
- def fetch
26
- string_io = OpenURI.send(:open, @remote_path)
27
- body = string_io.read
28
-
29
- # Fix for ruby 1.9.2 (ASCII-8BIT and UTF-8 in hell issue)
30
- if body && body.respond_to?(:encoding) && body.encoding.name == 'ASCII-8BIT'
31
- body.force_encoding('UTF-8')
32
- end
33
-
34
- self.write body
35
- self.rewind
36
- self
37
- end
38
-
39
- def original_filename
40
- @original_filename
41
- end
42
-
43
- def content_type
44
- types = MIME::Types.type_for(self.path)
45
- types.empty? ? extract_content_type : types.first.to_s
46
- end
47
-
48
- protected
49
-
50
- def extract_content_type
51
- mime = `file --mime -br #{self.path}`.strip
52
- mime = mime.gsub(/^.*: */,"")
53
- mime = mime.gsub(/;.*$/,"")
54
- mime = mime.gsub(/,.*$/,"")
55
- mime
56
- end
57
- end
58
-
59
4
  class << self
60
- # remove the existing install (if any)
61
- def destroy
62
- directory = Rails.root.join('public', 'javascripts', 'ckeditor')
63
- if File.exist?(directory)
64
- FileUtils.rm_r(directory, :force => true)
65
- end
66
- end
67
-
68
5
  def escape_single_quotes(str)
69
6
  str.gsub('\\','\0\0').gsub('</','<\/').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
70
7
  end
@@ -76,20 +13,64 @@ module Ckeditor
76
13
  [basename.parameterize('_'), extension].join.downcase
77
14
  end
78
15
 
79
- def download(url)
80
- RemoteFile.new(url)
81
- end
82
-
83
16
  def extract(filepath, output)
84
17
  # TODO: need check system OS
85
18
  system("tar --exclude=*.php --exclude=*.asp -C '#{output}' -xzvf '#{filepath}' ckeditor/")
86
19
  end
87
20
 
88
- def clear_dir(dirpath)
89
- FileUtils.rm_r(dirpath, :force => true)
90
- FileUtils.mkdir_p(dirpath)
21
+ def js_replace(dom_id, options = {})
22
+ js_options = applay_options(options)
23
+ js = ["if (CKEDITOR.instances['#{dom_id}']) {CKEDITOR.remove(CKEDITOR.instances['#{dom_id}']);}"]
24
+
25
+ if js_options.blank?
26
+ js << "CKEDITOR.replace('#{dom_id}');"
27
+ else
28
+ js << "CKEDITOR.replace('#{dom_id}', { #{js_options} });"
29
+ end
30
+
31
+ js.join
32
+ end
33
+
34
+ def js_fileuploader(uploader_type, options = {})
35
+ options = { :multiple => true, :element => "fileupload" }.merge(options)
36
+
37
+ case uploader_type.to_s.downcase
38
+ when "image" then
39
+ options[:action] = "^EDITOR.config.filebrowserImageUploadUrl"
40
+ options[:allowedExtensions] = Ckeditor.image_file_types
41
+ when "flash" then
42
+ options[:action] = "^EDITOR.config.filebrowserFlashUploadUrl"
43
+ options[:allowedExtensions] = ["swf"]
44
+ else
45
+ options[:action] = "^EDITOR.config.filebrowserUploadUrl"
46
+ options[:allowedExtensions] = Ckeditor.attachment_file_types
47
+ end
48
+
49
+ js_options = applay_options(options)
50
+
51
+ "$(document).ready(function(){ new qq.FileUploaderInput({ #{js_options} }); });"
91
52
  end
92
53
 
54
+ def applay_options(options)
55
+ str = []
56
+
57
+ options.each do |key, value|
58
+ item = case value
59
+ when String then
60
+ value.split(//).first == '^' ? value.slice(1..-1) : "'#{value}'"
61
+ when Hash then
62
+ "{ #{applay_options(value)} }"
63
+ when Array then
64
+ arr = value.collect { |v| "'#{v}'" }
65
+ "[ #{arr.join(',')} ]"
66
+ else value
67
+ end
68
+
69
+ str << "#{key}: #{item}"
70
+ end
71
+
72
+ str.sort.join(',')
73
+ end
93
74
  end
94
75
  end
95
76
  end
@@ -1,11 +1,6 @@
1
1
  module Ckeditor
2
2
  module Version
3
- MAJOR = 3
4
- MINOR = 5
5
- RELEASE = 4
6
-
7
- def self.dup
8
- "#{MAJOR}.#{MINOR}.#{RELEASE}"
9
- end
3
+ GEM = "3.6.0.pre".freeze
4
+ EDITOR = "3.6.1".freeze
10
5
  end
11
6
  end
@@ -0,0 +1,62 @@
1
+ require 'rails/generators'
2
+ require 'fileutils'
3
+
4
+ module Ckeditor
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ class_option :version, :type => :string, :default => Ckeditor::Version::EDITOR,
8
+ :desc => "Version of ckeditor which be install"
9
+
10
+ desc "Download and install ckeditor"
11
+
12
+ def self.source_root
13
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
14
+ end
15
+
16
+ # copy configuration
17
+ def copy_initializer
18
+ template "ckeditor.rb", "config/initializers/ckeditor.rb"
19
+ end
20
+
21
+ # copy ckeditor files
22
+ def install_ckeditor
23
+ say_status("fetching #{filename}", "", :green)
24
+ get(download_url, "tmp/#{filename}")
25
+
26
+ filepath = Rails.root.join("tmp/#{filename}")
27
+
28
+ if File.exist?(filepath)
29
+ Ckeditor::Utils.extract(filepath, Rails.root.join('public', 'javascripts'))
30
+ directory "ckeditor", "public/javascripts/ckeditor"
31
+ FileUtils.rm_rf(filepath)
32
+ end
33
+ end
34
+
35
+ def download_javascripts
36
+ js_dir = "public/javascripts/ckeditor/filebrowser/javascripts"
37
+
38
+ say_status("fetching rails.js", "", :green)
39
+ get "https://github.com/rails/jquery-ujs/raw/master/src/rails.js", "#{js_dir}/rails.js"
40
+
41
+ say_status("fetching fileuploader.js", "", :green)
42
+ get "https://raw.github.com/galetahub/file-uploader/master/client/fileuploader.js", "#{js_dir}/fileuploader.js"
43
+
44
+ say_status("fetching jquery-1.6.1.min.js", "", :green)
45
+ get "http://code.jquery.com/jquery-1.6.1.min.js", "#{js_dir}/jquery.js"
46
+
47
+ say_status("fetching jquery.tmpl.min.js", "", :green)
48
+ get "https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.min.js", "#{js_dir}/jquery.tmpl.js"
49
+ end
50
+
51
+ protected
52
+
53
+ def download_url
54
+ "http://download.cksource.com/CKEditor/CKEditor/CKEditor%20#{options[:version]}/#{filename}"
55
+ end
56
+
57
+ def filename
58
+ "ckeditor_#{options[:version]}.tar.gz"
59
+ end
60
+ end
61
+ end
62
+ end