tiny_mce_helper 0.0.2 → 0.0.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.
- data/CHANGELOG +8 -0
- data/README +11 -12
- data/Rakefile +5 -5
- data/install.rb +2 -2
- data/lib/tiny_mce_helper.rb +214 -217
- data/tasks/tiny_mce_helper_tasks.rake +7 -7
- data/test/files/sourceforge.html +992 -442
- data/test/files/tinymce_3_0_6_2.zip +0 -0
- data/test/files/tinymce_3_0_8.zip +0 -0
- data/test/test_helper.rb +7 -12
- data/test/unit/tiny_mce_helper_test.rb +149 -99
- data/uninstall.rb +1 -1
- metadata +48 -41
- data/test/files/tinymce_2_0_8.tgz +0 -0
- data/test/files/tinymce_2_1_1_1.tgz +0 -0
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -5,25 +5,21 @@ script.
|
|
5
5
|
|
6
6
|
== Resources
|
7
7
|
|
8
|
-
API
|
9
|
-
|
10
|
-
* http://api.pluginaweek.org/tiny_mce_helper
|
11
|
-
|
12
8
|
Wiki
|
13
9
|
|
14
10
|
* http://wiki.pluginaweek.org/Tiny_mce_helper
|
15
11
|
|
16
|
-
|
12
|
+
API
|
17
13
|
|
18
|
-
* http://
|
14
|
+
* http://api.pluginaweek.org/tiny_mce_helper
|
19
15
|
|
20
|
-
|
16
|
+
Development
|
21
17
|
|
22
|
-
* http://
|
18
|
+
* http://dev.pluginaweek.org/browser/trunk/tiny_mce_helper
|
23
19
|
|
24
|
-
|
20
|
+
Source
|
25
21
|
|
26
|
-
* http://
|
22
|
+
* http://svn.pluginaweek.org/trunk/tiny_mce_helper
|
27
23
|
|
28
24
|
== Description
|
29
25
|
|
@@ -158,10 +154,13 @@ will generate the following javascript:
|
|
158
154
|
'content_css' : '/stylesheets/tiny_mce_content.css'
|
159
155
|
});
|
160
156
|
|
161
|
-
To see additional initialization helpers, see the API for PluginAWeek::
|
157
|
+
To see additional initialization helpers, see the API for PluginAWeek::TinyMCEHelper
|
162
158
|
|
163
159
|
== Testing
|
164
160
|
|
161
|
+
Before you can run any tests, the following gem must be installed:
|
162
|
+
* plugin_test_helper[http://wiki.pluginaweek.org/Plugin_test_helper]
|
163
|
+
|
165
164
|
Since the rake tasks for installing TinyMCE and updating the configuration
|
166
165
|
options are part of the unit tests, already-downloaded files are included with
|
167
166
|
the plugin. If you want to perform a "live" test which actually downloads the
|
@@ -177,4 +176,4 @@ Rails applications. TinyMCE is a WYSIWYG HTML editing component released under
|
|
177
176
|
the GNU Public License (GPL) by Moxiecode Systems (http://tinymce.moxiecode.com/).
|
178
177
|
|
179
178
|
This plugin was originally created by by Blake Watters <blake@near-time.com> and
|
180
|
-
later modified by Aaron Pfeifer
|
179
|
+
later modified by Aaron Pfeifer.
|
data/Rakefile
CHANGED
@@ -4,7 +4,7 @@ require 'rake/gempackagetask'
|
|
4
4
|
require 'rake/contrib/sshpublisher'
|
5
5
|
|
6
6
|
PKG_NAME = 'tiny_mce_helper'
|
7
|
-
PKG_VERSION = '0.0.
|
7
|
+
PKG_VERSION = '0.0.3'
|
8
8
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
9
9
|
RUBY_FORGE_PROJECT = 'pluginaweek'
|
10
10
|
|
@@ -39,8 +39,8 @@ spec = Gem::Specification.new do |s|
|
|
39
39
|
s.has_rdoc = true
|
40
40
|
s.test_files = Dir['test/**/*_test.rb']
|
41
41
|
|
42
|
-
s.author = 'Aaron Pfeifer
|
43
|
-
s.email = '
|
42
|
+
s.author = 'Aaron Pfeifer'
|
43
|
+
s.email = 'aaron@pluginaweek.org'
|
44
44
|
s.homepage = 'http://www.pluginaweek.org'
|
45
45
|
end
|
46
46
|
|
@@ -52,12 +52,12 @@ end
|
|
52
52
|
|
53
53
|
desc 'Publish the beta gem'
|
54
54
|
task :pgem => [:package] do
|
55
|
-
Rake::SshFilePublisher.new('
|
55
|
+
Rake::SshFilePublisher.new('aaron@pluginaweek.org', '/home/aaron/gems.pluginaweek.org/public/gems', 'pkg', "#{PKG_FILE_NAME}.gem").upload
|
56
56
|
end
|
57
57
|
|
58
58
|
desc 'Publish the API documentation'
|
59
59
|
task :pdoc => [:rdoc] do
|
60
|
-
Rake::SshDirPublisher.new('
|
60
|
+
Rake::SshDirPublisher.new('aaron@pluginaweek.org', "/home/aaron/api.pluginaweek.org/public/#{PKG_NAME}", 'rdoc').upload
|
61
61
|
end
|
62
62
|
|
63
63
|
desc 'Publish the API docs and gem'
|
data/install.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Install TinyMCE
|
2
2
|
puts 'Installing TinyMCE...'
|
3
|
-
PluginAWeek::
|
3
|
+
PluginAWeek::TinyMCEHelper.install(:version => ENV['VERSION'], :target => ENV['TARGET'])
|
4
4
|
|
5
5
|
# Update the configuration options
|
6
6
|
puts 'Updating TinyMCE configuration options...'
|
7
|
-
PluginAWeek::
|
7
|
+
PluginAWeek::TinyMCEHelper.update_options
|
data/lib/tiny_mce_helper.rb
CHANGED
@@ -1,244 +1,241 @@
|
|
1
1
|
module PluginAWeek #:nodoc:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
# javascripts folder.
|
25
|
-
#
|
26
|
-
# == Versions
|
27
|
-
#
|
28
|
-
# By default, this will install the latest version of TinyMCE. You can
|
29
|
-
# install a specific version of TinyMCE (if you are using an old API) by
|
30
|
-
# passing in the version number.
|
31
|
-
#
|
32
|
-
# For example,
|
33
|
-
# PluginAWeek::Helpers::TinyMCEHelper.install #=> Installs the latest version
|
34
|
-
# PluginAWeek::Helpers::TinyMCEHelper.install('2.0.8') #=> Installs version 2.0.8
|
35
|
-
#
|
36
|
-
# An exception will be raised if the specified version cannot be found.
|
37
|
-
#
|
38
|
-
# == Target path
|
39
|
-
#
|
40
|
-
# By default, this will install TinyMCE into RAILS_ROOT/public/javascripts/tiny_mce.
|
41
|
-
# If you want to install it to a different directory, you can pass in
|
42
|
-
# a parameter with the relative path from RAILS_ROOT.
|
43
|
-
#
|
44
|
-
# For example,
|
45
|
-
# PluginAWeek::Helpers::TinyMCEHelper.install(nil, 'public/javascripts/richtext')
|
46
|
-
def install(options = {})
|
47
|
-
options.assert_valid_keys(:version, :target, :force)
|
48
|
-
options.reverse_merge!(:force => false)
|
49
|
-
|
50
|
-
version = options[:version]
|
51
|
-
base_target = options[:target] || 'public/javascripts/tiny_mce'
|
52
|
-
source_path = 'tinymce'
|
53
|
-
target_path = File.expand_path(File.join(RAILS_ROOT, base_target))
|
54
|
-
|
55
|
-
# If TinyMCE is already installed, make sure the user wants to continue
|
56
|
-
if !options[:force] && File.exists?(target_path)
|
57
|
-
print "TinyMCE already be installed in #{target_path}. Overwrite? (y/n): "
|
58
|
-
while !%w(y n).include?(option = STDIN.gets.chop)
|
59
|
-
print "Invalid option. Overwrite #{target_path}? (y/n): "
|
60
|
-
end
|
61
|
-
return if option == 'n'
|
62
|
-
end
|
63
|
-
|
64
|
-
require 'hpricot'
|
65
|
-
require 'open-uri'
|
66
|
-
|
67
|
-
# Get the url of the TinyMCE version
|
68
|
-
doc = Hpricot(open('http://sourceforge.net/project/showfiles.php?group_id=103281&package_id=111430'))
|
69
|
-
if version
|
70
|
-
version.gsub!('.', '_')
|
71
|
-
file_element = (doc/'tr[@id*="rel0_"] a').detect {|file| file.innerHTML =~ /#{version}.tgz$/}
|
72
|
-
raise ArgumentError, "Could not find TinyMCE version #{version}" if !file_element
|
73
|
-
else
|
74
|
-
file_element = (doc/'tr[@id^="pkg0_1rel0_"] a').detect {|file| file.innerHTML.to_s =~ /\d\.tgz$/}
|
75
|
-
raise ArgumentError, 'Could not find latest TinyMCE version' if !file_element
|
76
|
-
end
|
77
|
-
|
78
|
-
filename = file_element.innerHTML
|
79
|
-
file_url = file_element['href']
|
80
|
-
|
81
|
-
# Download and install it
|
82
|
-
Dir.chdir('/tmp/') do
|
83
|
-
begin
|
84
|
-
puts 'Downloading TinyMCE source...' if verbose
|
85
|
-
system("wget '#{file_url}' &> wget.log")
|
86
|
-
puts 'Extracting...' if verbose
|
87
|
-
system("tar xf #{filename} &> tar.log")
|
88
|
-
File.delete(filename)
|
89
|
-
FileUtils.mkdir_p(target_path)
|
90
|
-
FileUtils.cp_r("#{source_path}/jscripts/tiny_mce/.", target_path)
|
91
|
-
FileUtils.rmtree(source_path)
|
92
|
-
puts 'Done!' if verbose
|
93
|
-
rescue Object => e
|
94
|
-
puts "Error: #{e.inspect}"
|
95
|
-
puts 'Also see the last modified log file (wget.log or tar.log) in /tmp/.'
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
# Uninstalls the TinyMCE installation and optional configuration file
|
101
|
-
def uninstall
|
102
|
-
# Remove the TinyMCE configuration file
|
103
|
-
File.delete(OPTIONS_FILE_PATH)
|
104
|
-
|
105
|
-
# Remove the TinyMCE installation
|
106
|
-
FileUtils.rm_rf("#{RAILS_ROOT}/public/javascripts/tiny_mce")
|
107
|
-
end
|
108
|
-
|
109
|
-
# Updates the list of possible configuration options that can be used
|
110
|
-
# when initializing the TinyMCE script. These are always installed to
|
111
|
-
# the application folder, config/tiny_mce_options.yml. If this file
|
112
|
-
# does not exist, then the TinyMCE helper will not be able to verify
|
113
|
-
# that all of the initialization options are valid.
|
114
|
-
def update_options
|
115
|
-
require 'hpricot'
|
116
|
-
require 'open-uri'
|
117
|
-
require 'yaml'
|
118
|
-
|
119
|
-
puts 'Downloading configuration options from TinyMCE Wiki...' if verbose
|
120
|
-
doc = Hpricot(open('http://wiki.moxiecode.com/index.php/TinyMCE:Configuration'))
|
121
|
-
options = (doc/'a[@title*="Configuration/"]/').collect {|option| option.to_s}.sort
|
122
|
-
options.reject! {|option| option =~ DYNAMIC_OPTIONS}
|
123
|
-
|
124
|
-
File.open("#{RAILS_ROOT}/config/tiny_mce_options.yml", 'w') do |out|
|
125
|
-
YAML.dump(options, out)
|
126
|
-
end
|
127
|
-
puts 'Done!' if verbose
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# Are we using TinyMCE?
|
132
|
-
def using_tiny_mce?
|
133
|
-
@uses_tiny_mce
|
134
|
-
end
|
135
|
-
|
136
|
-
# Create the TinyMCE initialization scripts. The default configuration
|
137
|
-
# is for a simple theme that replaces all textareas on the page. For
|
138
|
-
# example, the default initialization script will generate the following:
|
2
|
+
# Adds helper methods for generating the TinyMCE initialization script
|
3
|
+
# within your Rails views
|
4
|
+
module TinyMCEHelper
|
5
|
+
# The path to the file which contains all valid options that can be used
|
6
|
+
# to configure TinyMCE
|
7
|
+
OPTIONS_FILE_PATH = "#{Rails.root}/config/tiny_mce_options.yml"
|
8
|
+
|
9
|
+
# A regular expression matching options that are dynamic (i.e. they can
|
10
|
+
# vary on an integer or string basis)
|
11
|
+
DYNAMIC_OPTIONS = /theme_advanced_buttons|theme_advanced_container/
|
12
|
+
|
13
|
+
# Whether or not to use verbose output
|
14
|
+
mattr_accessor :verbose
|
15
|
+
@@verbose = true
|
16
|
+
|
17
|
+
# A list of all valid options that can be used to configure TinyMCE
|
18
|
+
mattr_accessor :valid_options
|
19
|
+
@@valid_options = File.exists?(OPTIONS_FILE_PATH) ? File.open(OPTIONS_FILE_PATH) {|f| YAML.load(f.read)} : []
|
20
|
+
|
21
|
+
class << self
|
22
|
+
# Installs TinyMCE by downloading it and adding it to your application's
|
23
|
+
# javascripts folder.
|
139
24
|
#
|
140
|
-
#
|
141
|
-
# 'mode' : 'textareas',
|
142
|
-
# 'theme' : 'simple'
|
143
|
-
# });
|
25
|
+
# == Versions
|
144
26
|
#
|
145
|
-
#
|
27
|
+
# By default, this will install the latest version of TinyMCE. You can
|
28
|
+
# install a specific version of TinyMCE (if you are using an old API) by
|
29
|
+
# passing in the version number.
|
146
30
|
#
|
147
|
-
#
|
148
|
-
#
|
31
|
+
# For example,
|
32
|
+
# PluginAWeek::TinyMCEHelper.install #=> Installs the latest version
|
33
|
+
# PluginAWeek::TinyMCEHelper.install('2.0.8') #=> Installs version 2.0.8
|
149
34
|
#
|
150
|
-
#
|
151
|
-
# :theme => 'advanced',
|
152
|
-
# :editor_selector => 'rich_text',
|
153
|
-
# :content_css => '/stylesheets/tiny_mce_content.css',
|
154
|
-
# :editor_css => '/stylesheets/tiny_mce_editor.css',
|
155
|
-
# :auto_reset_designmode => true
|
156
|
-
# )
|
35
|
+
# An exception will be raised if the specified version cannot be found.
|
157
36
|
#
|
158
|
-
#
|
37
|
+
# == Target path
|
159
38
|
#
|
160
|
-
#
|
161
|
-
#
|
162
|
-
#
|
163
|
-
# 'editor_selected' : 'rich_text',
|
164
|
-
# 'content_css' : '/stylesheets/tiny_mce_content.css'
|
165
|
-
# });
|
39
|
+
# By default, this will install TinyMCE into Rails.root/public/javascripts/tiny_mce.
|
40
|
+
# If you want to install it to a different directory, you can pass in
|
41
|
+
# a parameter with the relative path from Rails.root.
|
166
42
|
#
|
167
|
-
#
|
168
|
-
#
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
# You can generate this file by invoke the rake task tiny_mce:update_options.
|
173
|
-
def tiny_mce_init_script(options = @tiny_mce_options)
|
174
|
-
options ||= {}
|
175
|
-
options.stringify_keys!.reverse_merge!(
|
176
|
-
'mode' => 'textareas',
|
177
|
-
'theme' => 'simple'
|
178
|
-
)
|
179
|
-
|
180
|
-
# Check validity
|
181
|
-
plugins = options['plugins']
|
182
|
-
options_to_validate = options.reject {|option, value| plugins && plugins.include?(option.split('_')[0]) || option =~ DYNAMIC_OPTIONS}
|
183
|
-
options_to_validate.assert_valid_keys(@@valid_options) if @@valid_options && @@valid_options.any?
|
43
|
+
# For example,
|
44
|
+
# PluginAWeek::TinyMCEHelper.install(nil, 'public/javascripts/richtext')
|
45
|
+
def install(options = {})
|
46
|
+
options.assert_valid_keys(:version, :target, :force)
|
47
|
+
options.reverse_merge!(:force => false)
|
184
48
|
|
185
|
-
|
49
|
+
version = options[:version]
|
50
|
+
base_target = options[:target] || 'public/javascripts/tiny_mce'
|
51
|
+
source_path = 'tinymce'
|
52
|
+
target_path = File.expand_path(File.join(Rails.root, base_target))
|
186
53
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
init_script << "'#{value}'"
|
193
|
-
when Array
|
194
|
-
init_script << "'#{value.join(',')}'"
|
195
|
-
when TrueClass
|
196
|
-
init_script << 'true'
|
197
|
-
when FalseClass
|
198
|
-
init_script << 'false'
|
199
|
-
else
|
200
|
-
raise ArgumentError, "Cannot parse value of type #{value.class} passed for TinyMCE option #{key}"
|
54
|
+
# If TinyMCE is already installed, make sure the user wants to continue
|
55
|
+
if !options[:force] && File.exists?(target_path)
|
56
|
+
print "TinyMCE already installed in #{target_path}. Overwrite? (y/n): "
|
57
|
+
while !%w(y n).include?(option = STDIN.gets.chop)
|
58
|
+
print "Invalid option. Overwrite #{target_path}? (y/n): "
|
201
59
|
end
|
202
|
-
|
203
|
-
|
60
|
+
return if option == 'n'
|
61
|
+
end
|
62
|
+
|
63
|
+
require 'hpricot'
|
64
|
+
require 'open-uri'
|
65
|
+
|
66
|
+
# Get the url of the TinyMCE version
|
67
|
+
doc = Hpricot(open('http://sourceforge.net/project/showfiles.php?group_id=103281&package_id=111430'))
|
68
|
+
if version
|
69
|
+
version.gsub!('.', '_')
|
70
|
+
file_element = (doc/'tr[@id*="rel0_"] a').detect {|file| file.innerHTML =~ /#{version}.zip$/}
|
71
|
+
raise ArgumentError, "Could not find TinyMCE version #{version}" if !file_element
|
72
|
+
else
|
73
|
+
file_element = (doc/'tr[@id^="pkg0_1rel0_"] a').detect {|file| file.innerHTML.to_s =~ /\d\.zip$/}
|
74
|
+
raise ArgumentError, 'Could not find latest TinyMCE version' if !file_element
|
204
75
|
end
|
205
76
|
|
206
|
-
|
77
|
+
filename = file_element.innerHTML
|
78
|
+
file_url = file_element['href']
|
79
|
+
|
80
|
+
# Download and install it
|
81
|
+
Dir.chdir('/tmp/') do
|
82
|
+
begin
|
83
|
+
puts 'Downloading TinyMCE source...' if verbose
|
84
|
+
system('wget', file_url)
|
85
|
+
puts 'Extracting...' if verbose
|
86
|
+
system('unzip', filename)
|
87
|
+
File.delete(filename)
|
88
|
+
FileUtils.mkdir_p(target_path)
|
89
|
+
FileUtils.cp_r("#{source_path}/jscripts/tiny_mce/.", target_path)
|
90
|
+
FileUtils.rmtree(source_path)
|
91
|
+
puts 'Done!' if verbose
|
92
|
+
rescue Object => ex
|
93
|
+
puts "Error: #{ex.inspect}"
|
94
|
+
end
|
95
|
+
end
|
207
96
|
end
|
208
97
|
|
209
|
-
#
|
210
|
-
def
|
211
|
-
|
98
|
+
# Uninstalls the TinyMCE installation and optional configuration file
|
99
|
+
def uninstall
|
100
|
+
# Remove the TinyMCE configuration file
|
101
|
+
File.delete(OPTIONS_FILE_PATH)
|
102
|
+
|
103
|
+
# Remove the TinyMCE installation
|
104
|
+
FileUtils.rm_rf("#{Rails.root}/public/javascripts/tiny_mce")
|
212
105
|
end
|
213
106
|
|
214
|
-
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
#
|
218
|
-
|
219
|
-
|
107
|
+
# Updates the list of possible configuration options that can be used
|
108
|
+
# when initializing the TinyMCE script. These are always installed to
|
109
|
+
# the application folder, config/tiny_mce_options.yml. If this file
|
110
|
+
# does not exist, then the TinyMCE helper will not be able to verify
|
111
|
+
# that all of the initialization options are valid.
|
112
|
+
def update_options
|
113
|
+
require 'hpricot'
|
114
|
+
require 'open-uri'
|
115
|
+
require 'yaml'
|
116
|
+
|
117
|
+
puts 'Downloading configuration options from TinyMCE Wiki...' if verbose
|
118
|
+
doc = Hpricot(open('http://wiki.moxiecode.com/index.php/TinyMCE:Configuration'))
|
119
|
+
options = (doc/'a[@title*="Configuration/"]/').collect {|option| option.to_s}.sort
|
120
|
+
options.reject! {|option| option =~ DYNAMIC_OPTIONS}
|
121
|
+
|
122
|
+
File.open("#{Rails.root}/config/tiny_mce_options.yml", 'w') do |out|
|
123
|
+
YAML.dump(options, out)
|
124
|
+
end
|
125
|
+
puts 'Done!' if verbose
|
220
126
|
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Are we using TinyMCE?
|
130
|
+
def using_tiny_mce?
|
131
|
+
@uses_tiny_mce
|
132
|
+
end
|
133
|
+
|
134
|
+
# Create the TinyMCE initialization scripts. The default configuration
|
135
|
+
# is for a simple theme that replaces all textareas on the page. For
|
136
|
+
# example, the default initialization script will generate the following:
|
137
|
+
#
|
138
|
+
# tinyMCE.init({
|
139
|
+
# 'mode' : 'textareas',
|
140
|
+
# 'theme' : 'simple'
|
141
|
+
# });
|
142
|
+
#
|
143
|
+
# == Customizing initialization options
|
144
|
+
#
|
145
|
+
# To customize the options to be included in the initialization script,
|
146
|
+
# you can pass in a hash to +tiny_mce_init_script+. For example,
|
147
|
+
#
|
148
|
+
# tiny_mce_init_script(
|
149
|
+
# :theme => 'advanced',
|
150
|
+
# :editor_selector => 'rich_text',
|
151
|
+
# :content_css => '/stylesheets/tiny_mce_content.css',
|
152
|
+
# :editor_css => '/stylesheets/tiny_mce_editor.css',
|
153
|
+
# :auto_reset_designmode => true
|
154
|
+
# )
|
155
|
+
#
|
156
|
+
# will generate:
|
157
|
+
#
|
158
|
+
# tinyMCE.init({
|
159
|
+
# 'mode' : 'textareas',
|
160
|
+
# 'theme' : 'advanced',
|
161
|
+
# 'editor_selected' : 'rich_text',
|
162
|
+
# 'content_css' : '/stylesheets/tiny_mce_content.css'
|
163
|
+
# });
|
164
|
+
#
|
165
|
+
# == Validating options
|
166
|
+
#
|
167
|
+
# If additional options are passed in to initialize TinyMCE, they will be
|
168
|
+
# validated against the list of valid options in PluginAWeek::TinyMCEHelper#valid_options.
|
169
|
+
# These options are configured in the file config/tiny_mce_options.yml.
|
170
|
+
# You can generate this file by invoke the rake task tiny_mce:update_options.
|
171
|
+
def tiny_mce_init_script(options = @tiny_mce_options)
|
172
|
+
options ||= {}
|
173
|
+
options.stringify_keys!.reverse_merge!(
|
174
|
+
'mode' => 'textareas',
|
175
|
+
'theme' => 'simple'
|
176
|
+
)
|
221
177
|
|
222
|
-
#
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
# <script type="text/javascript" src="/javascripts/tiny_mce/tiny_mce.js"></script>
|
229
|
-
def javascript_include_tiny_mce
|
230
|
-
javascript_include_tag tiny_mce_file_name
|
231
|
-
end
|
178
|
+
# Check validity
|
179
|
+
plugins = options['plugins']
|
180
|
+
options_to_validate = options.reject {|option, value| plugins && plugins.include?(option.split('_')[0]) || option =~ DYNAMIC_OPTIONS}
|
181
|
+
options_to_validate.assert_valid_keys(@@valid_options) if @@valid_options && @@valid_options.any?
|
182
|
+
|
183
|
+
init_script = 'tinyMCE.init({'
|
232
184
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
185
|
+
options.sort.each do |key, value|
|
186
|
+
init_script += "\n#{key} : "
|
187
|
+
|
188
|
+
case value
|
189
|
+
when String, Symbol, Fixnum
|
190
|
+
init_script << "'#{value}'"
|
191
|
+
when Array
|
192
|
+
init_script << "'#{value.join(',')}'"
|
193
|
+
when TrueClass
|
194
|
+
init_script << 'true'
|
195
|
+
when FalseClass
|
196
|
+
init_script << 'false'
|
197
|
+
else
|
198
|
+
raise ArgumentError, "Cannot parse value of type #{value.class} passed for TinyMCE option #{key}"
|
199
|
+
end
|
200
|
+
|
201
|
+
init_script << ','
|
237
202
|
end
|
203
|
+
|
204
|
+
init_script.chop << "\n});"
|
205
|
+
end
|
206
|
+
|
207
|
+
# Generate the TinyMCE
|
208
|
+
def tiny_mce(*args)
|
209
|
+
javascript_tag tiny_mce_init_script(*args)
|
210
|
+
end
|
211
|
+
|
212
|
+
# The name of the TinyMCE javascript file to use. In development, this
|
213
|
+
# will use the source (uncompressed) file in order to help with debugging
|
214
|
+
# issues that occur within TinyMCE. In production, the compressed version
|
215
|
+
# of TinyMCE will be used in order to increased download speed.
|
216
|
+
def tiny_mce_file_name
|
217
|
+
Rails.env == 'development' ? 'tiny_mce/tiny_mce_src' : 'tiny_mce/tiny_mce'
|
218
|
+
end
|
219
|
+
|
220
|
+
# Generates the javascript include for TinyMCE. For example,
|
221
|
+
#
|
222
|
+
# javascript_include_tiny_mce
|
223
|
+
#
|
224
|
+
# will generate:
|
225
|
+
#
|
226
|
+
# <script type="text/javascript" src="/javascripts/tiny_mce/tiny_mce.js"></script>
|
227
|
+
def javascript_include_tiny_mce
|
228
|
+
javascript_include_tag tiny_mce_file_name
|
229
|
+
end
|
230
|
+
|
231
|
+
# Conditionally includes the TinyMCE javascript file if the variable
|
232
|
+
# @uses_tiny_mce has been set to true.
|
233
|
+
def javascript_include_tiny_mce_if_used
|
234
|
+
javascript_include_tiny_mce if using_tiny_mce?
|
238
235
|
end
|
239
236
|
end
|
240
237
|
end
|
241
238
|
|
242
239
|
ActionController::Base.class_eval do
|
243
|
-
helper PluginAWeek::
|
240
|
+
helper PluginAWeek::TinyMCEHelper
|
244
241
|
end
|