tinymce-rails-config-manager 0.0.6
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/MIT-LICENSE +20 -0
- data/README.md +86 -0
- data/Rakefile +68 -0
- data/app/assets/javascripts/tinymce-rails-config-manager/manager.js.coffee +194 -0
- data/app/assets/javascripts/tinymce-rails-config-manager.js +1 -0
- data/lib/tasks/jasmine.rake +8 -0
- data/lib/tasks/tinymce-rails-config-manager_tasks.rake +4 -0
- data/lib/tinymce-rails-config-manager/engine.rb +5 -0
- data/lib/tinymce-rails-config-manager/version.rb +3 -0
- data/lib/tinymce-rails-config-manager.rb +7 -0
- metadata +78 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2012 ITHouse Latvia and Arturs Meisters
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# TinymceRailsConfigManager
|
2
|
+
Simple tinyMCE configuration manager
|
3
|
+
|
4
|
+
## Instructions
|
5
|
+
|
6
|
+
1. Add **tinymce-rails-config-manager**
|
7
|
+
|
8
|
+
```ruby
|
9
|
+
gem 'tinymce-rails-config-manager'
|
10
|
+
```
|
11
|
+
|
12
|
+
2. Include asset in your JS manifest file
|
13
|
+
|
14
|
+
` //= require tinymce-rails-config-manager `
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
### How to change setting properties
|
19
|
+
|
20
|
+
* To add new property (added only once)
|
21
|
+
|
22
|
+
This will add **template** to plugin option existing value
|
23
|
+
|
24
|
+
```javascript
|
25
|
+
TinyMCEConfigManager.get().config.add("plugin", "template")
|
26
|
+
```
|
27
|
+
|
28
|
+
* To add new value after some other (added only once; buttons is shortcut to all theme_advanced_buttonsX)
|
29
|
+
|
30
|
+
This will add fullscreen button after bold
|
31
|
+
|
32
|
+
```javascript
|
33
|
+
TinyMCEConfigManager.get().config.addAfter("buttons", "fullscreen", "bold")
|
34
|
+
```
|
35
|
+
|
36
|
+
* To add new value before some other (added only once)
|
37
|
+
|
38
|
+
This will add fullscreen button before bold
|
39
|
+
|
40
|
+
```javascript
|
41
|
+
TinyMCEConfigManager.get().config.addBefore("buttons", "fullscreen", "bold")
|
42
|
+
```
|
43
|
+
|
44
|
+
* To set property
|
45
|
+
|
46
|
+
This will set value **right** for theme_advanced_toolbar_align
|
47
|
+
|
48
|
+
```javascript
|
49
|
+
TinyMCEConfigManager.get().config.set("theme_advanced_toolbar_align", "right")
|
50
|
+
```
|
51
|
+
|
52
|
+
* To add callback (new callback function will be added with every call)
|
53
|
+
|
54
|
+
This will add callback for **setup**
|
55
|
+
|
56
|
+
```javascript
|
57
|
+
TinyMCEConfigManager.get().config.addFunction("setup", function(editor){ /*do something here*/})
|
58
|
+
```
|
59
|
+
|
60
|
+
|
61
|
+
### How to change settings
|
62
|
+
|
63
|
+
To add or change settings for specific textareas use
|
64
|
+
|
65
|
+
```javascript
|
66
|
+
TinyMCEConfigManager.get().configFor("#my_special_textarea")
|
67
|
+
```
|
68
|
+
|
69
|
+
and then use all property modifiers as mentioned above. Default settings will be loaded for all other textareas.
|
70
|
+
|
71
|
+
### How to load
|
72
|
+
|
73
|
+
Simply call `load()`. Also it is possible to pass some specific configuration there, but that will overwrite existing and
|
74
|
+
that is not recommended.
|
75
|
+
|
76
|
+
```javascript
|
77
|
+
TinyMCEConfigManager.get().load()
|
78
|
+
```
|
79
|
+
|
80
|
+
## Roadmap
|
81
|
+
|
82
|
+
* Make it possible to change order of existing values
|
83
|
+
* add tests
|
84
|
+
|
85
|
+
This project rocks and uses MIT-LICENSE.
|
86
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'TinymceRailsConfigManager'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'jasmine'
|
24
|
+
load 'jasmine/tasks/jasmine.rake'
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
27
|
+
|
28
|
+
namespace :jasmine do
|
29
|
+
desc "Compile CoffeeScript files"
|
30
|
+
task :compile do
|
31
|
+
require 'coffee-script'
|
32
|
+
source_files = Dir["./app/assets/javascripts/**/*.coffee"]
|
33
|
+
source_specs = Dir["./spec/javascripts/**/*.coffee"]
|
34
|
+
|
35
|
+
dest_dir = "./spec/javascripts/generated"
|
36
|
+
spec_dest_dir = File.join(dest_dir, "spec")
|
37
|
+
js_dest_dir = File.join(dest_dir, "javascripts")
|
38
|
+
|
39
|
+
[spec_dest_dir, js_dest_dir].each do |dir|
|
40
|
+
unless File.directory?(dir)
|
41
|
+
Dir.mkdir(dir)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
{ spec_dest_dir => source_specs, js_dest_dir => source_files}.each do |dest_dir, files|
|
46
|
+
files.each do |file_path|
|
47
|
+
dest_path = File.join(dest_dir, File.basename(file_path, ".coffee"))
|
48
|
+
File.open(dest_path, "w") do |f|
|
49
|
+
f.write(CoffeeScript.compile(File.read(file_path)))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
namespace :ci do
|
56
|
+
desc "Run Jasmine CI for CoffeeScripts"
|
57
|
+
task :coffee do
|
58
|
+
Rake::Task['jasmine:compile'].invoke
|
59
|
+
Rake::Task['jasmine:ci'].invoke
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "Run Jasmine for CoffeeScripts"
|
64
|
+
task :coffee do
|
65
|
+
Rake::Task['jasmine:compile'].invoke
|
66
|
+
Rake::Task['jasmine'].invoke
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,194 @@
|
|
1
|
+
# TinyMCEConfigManager class makes it easier to manage configuration for TinyMCE.
|
2
|
+
# There are only one instance of TinyMCEConfigManager and to access it call
|
3
|
+
# TinyMCEConfigManager.get()
|
4
|
+
# To access default configuration call
|
5
|
+
# TinyMCEConfigManager.get().config.[someMethod]
|
6
|
+
# To access configuration for specific selector call
|
7
|
+
# TinyMCEConfigManager.get().configFor("#myTextFieldID").[someMethod]
|
8
|
+
# To load tinymce call
|
9
|
+
# TinyMCEConfigManager.load([optional settings here])
|
10
|
+
# Those selector that are used with selector specific configurations are not used with default selector in when tinyMCE is initialized with default selector
|
11
|
+
class TinyMCEConfigManager
|
12
|
+
|
13
|
+
TEXTAREA_SELECTOR = "textarea[data-simple!=true]"
|
14
|
+
DEFAULT_SETTINGS = {
|
15
|
+
theme: "advanced",
|
16
|
+
skin: "cirkuit",
|
17
|
+
mode: "textareas",
|
18
|
+
plugins: "table,fullscreen,lists,paste",
|
19
|
+
theme_advanced_buttons1 : "bold,italic,underline,|,bullist,numlist,|,justifyleft,justifycenter,justifyright,|,formatselect,|,image,removeformat,code,fullscreen",
|
20
|
+
theme_advanced_buttons2 : "tablecontrols,|,paste,pastetext,pasteword,|,anchor,link,unlink",
|
21
|
+
theme_advanced_buttons3 : "",
|
22
|
+
theme_advanced_toolbar_location: "top",
|
23
|
+
theme_advanced_toolbar_align: "left",
|
24
|
+
}
|
25
|
+
|
26
|
+
@_instance: null
|
27
|
+
|
28
|
+
@get: ->
|
29
|
+
if not @_instance?
|
30
|
+
@_instance = new @
|
31
|
+
@_instance.init()
|
32
|
+
@_instance
|
33
|
+
|
34
|
+
init: ->
|
35
|
+
@defaultConfig = @_createNewConfiguration()
|
36
|
+
@defaultConfig.setAsDefault()
|
37
|
+
@config = @defaultConfig
|
38
|
+
@_configs = {}
|
39
|
+
|
40
|
+
#TODO any configuration added to specific selectors should go in queue and only when load is called
|
41
|
+
# then those commands should be applied to real settings. Then always any other selector will use latest
|
42
|
+
# default config settings, and in right order will apply their settings to it
|
43
|
+
configFor: (selector) ->
|
44
|
+
unless @_configs[selector]
|
45
|
+
@_configs[selector] = @_createNewConfiguration(@config.settings)
|
46
|
+
@_configs[selector]
|
47
|
+
|
48
|
+
load: (extendedSettings) ->
|
49
|
+
for selector, config of @_configs
|
50
|
+
@_initializeTinyMCEFor(selector, config, extendedSettings)
|
51
|
+
@_initializeDefaultTinyMCE(extendedSettings)
|
52
|
+
|
53
|
+
defaultSettings: ->
|
54
|
+
DEFAULT_SETTINGS
|
55
|
+
|
56
|
+
textareaSelector: ->
|
57
|
+
TEXTAREA_SELECTOR
|
58
|
+
|
59
|
+
_createNewConfiguration: (givenSettings) ->
|
60
|
+
new TinyMCEConfigManagerConfiguration(@_settings(givenSettings))
|
61
|
+
|
62
|
+
_settings: (givenSettings) ->
|
63
|
+
newSettings = $.extend(true, {}, @defaultSettings())
|
64
|
+
if givenSettings
|
65
|
+
$.extend(true, newSettings, givenSettings)
|
66
|
+
newSettings
|
67
|
+
|
68
|
+
_initializeTinyMCEFor: (selector, config, extendedSettings) ->
|
69
|
+
newSettings = $.extend(true, $.extend(true, {}, config.settings), extendedSettings)
|
70
|
+
$(selector).tinymce(newSettings)
|
71
|
+
|
72
|
+
_initializeDefaultTinyMCE: (extendedSettings) ->
|
73
|
+
newSettings = $.extend(true, $.extend(true, {}, @config.settings), extendedSettings)
|
74
|
+
$selector = $(@textareaSelector())
|
75
|
+
for selector, config of @_configs
|
76
|
+
$selector = $selector.not(selector)
|
77
|
+
$selector.tinymce(newSettings)
|
78
|
+
|
79
|
+
# TinyMCEConfigManagerConfiguration allow to change values of tinyMCE configuration.
|
80
|
+
@TinyMCEConfigManagerConfiguration = class TinyMCEConfigManagerConfiguration
|
81
|
+
|
82
|
+
constructor: (settings) ->
|
83
|
+
@settings = settings
|
84
|
+
@callbacks = {}
|
85
|
+
@default = false
|
86
|
+
|
87
|
+
add: (keyName, newValue) ->
|
88
|
+
listManager = new TinyMCEListSettingManager(this)
|
89
|
+
listManager.add(keyName, newValue)
|
90
|
+
|
91
|
+
addAfter: (keyName, newValue, oldValue) ->
|
92
|
+
listManager = new TinyMCEListSettingManager(this)
|
93
|
+
listManager.addAfter(keyName, newValue, oldValue)
|
94
|
+
|
95
|
+
addBefore: (keyName, newValue, oldValue) ->
|
96
|
+
listManager = new TinyMCEListSettingManager(this)
|
97
|
+
listManager.addBefore(keyName, newValue, oldValue)
|
98
|
+
|
99
|
+
set: (keyName, newValue) ->
|
100
|
+
valueManager = new TinyMCEValueSettingManager(this)
|
101
|
+
valueManager.set(keyName, newValue)
|
102
|
+
|
103
|
+
addFunction: (keyName, newFunction) ->
|
104
|
+
functionManager = new TinyMCEFunctionSettingManager(this)
|
105
|
+
functionManager.add(keyName, newFunction)
|
106
|
+
|
107
|
+
callCallbacksOn: (callbackName, args) ->
|
108
|
+
for callback in @callbacks[callbackName]
|
109
|
+
callback.apply(window, args)
|
110
|
+
|
111
|
+
setValue: (keyName, newValue) ->
|
112
|
+
@settings[keyName] = newValue
|
113
|
+
|
114
|
+
setAsDefault: ->
|
115
|
+
@default = true
|
116
|
+
|
117
|
+
|
118
|
+
class TinyMCESettingManager
|
119
|
+
constructor: (config) ->
|
120
|
+
@config = config
|
121
|
+
|
122
|
+
_getValue: (keyName) ->
|
123
|
+
@config.settings[keyName]
|
124
|
+
|
125
|
+
_setValue: (keyName, newValue) ->
|
126
|
+
@config.setValue(keyName, newValue)
|
127
|
+
|
128
|
+
# Manage options that consist of string values that are seperated with commas
|
129
|
+
class TinyMCEListSettingManager extends TinyMCESettingManager
|
130
|
+
COMPLEX_OPTIONS = {
|
131
|
+
buttons: ['theme_advanced_buttons1', 'theme_advanced_buttons2', 'theme_advanced_buttons3']
|
132
|
+
}
|
133
|
+
|
134
|
+
add:(keyName, newValue) ->
|
135
|
+
for listKeyName, list of @_valuesList(keyName)
|
136
|
+
if list
|
137
|
+
if list.length > 0
|
138
|
+
newList = list + "," + newValue
|
139
|
+
else
|
140
|
+
newList = newValue
|
141
|
+
@_setValue(listKeyName, newList)
|
142
|
+
|
143
|
+
addAfter: (keyName, newValue, oldValue) ->
|
144
|
+
for listKeyName, list of @_valuesList(keyName)
|
145
|
+
if list && @_valueExist(list, oldValue) and not @_valueExist(list, newValue)
|
146
|
+
newList = list.replace(@_valueRegExp(oldValue), oldValue + "," + newValue)
|
147
|
+
@_setValue(listKeyName, newList)
|
148
|
+
|
149
|
+
addBefore: (keyName, newValue, oldValue) ->
|
150
|
+
for listKeyName, list of @_valuesList(keyName)
|
151
|
+
if list && @_valueExist(list, oldValue) and not @_valueExist(list, newValue)
|
152
|
+
newList = list.replace(@_valueRegExp(oldValue), newValue + "," + oldValue)
|
153
|
+
@_setValue(listKeyName, newList)
|
154
|
+
|
155
|
+
_valueRegExp: (value)->
|
156
|
+
new RegExp("\\b" + value + "\\b")
|
157
|
+
|
158
|
+
_valueExist: (list, value) ->
|
159
|
+
list.match(@_valueRegExp(value))
|
160
|
+
|
161
|
+
_valuesList: (keyName) ->
|
162
|
+
complexKeys = COMPLEX_OPTIONS[keyName]
|
163
|
+
result = {}
|
164
|
+
if complexKeys
|
165
|
+
for key in complexKeys
|
166
|
+
result[key] = @_getValue(key)
|
167
|
+
else
|
168
|
+
result[keyName] = @_getValue(keyName)
|
169
|
+
result
|
170
|
+
|
171
|
+
|
172
|
+
class TinyMCEValueSettingManager extends TinyMCESettingManager
|
173
|
+
|
174
|
+
set: (keyName, newValue) ->
|
175
|
+
@_setValue(keyName, newValue)
|
176
|
+
|
177
|
+
class TinyMCEFunctionSettingManager extends TinyMCESettingManager
|
178
|
+
|
179
|
+
add: (keyName, newFunction) ->
|
180
|
+
@_addCallback(keyName, newFunction)
|
181
|
+
config = @config
|
182
|
+
@_setValue(keyName, (@arguments)->
|
183
|
+
config.callCallbacksOn(keyName, arguments)
|
184
|
+
)
|
185
|
+
|
186
|
+
_addCallback: (keyName, newFunction) ->
|
187
|
+
unless @config.callbacks[keyName]
|
188
|
+
@config.callbacks[keyName] = [newFunction]
|
189
|
+
else
|
190
|
+
@config.callbacks[keyName].push(newFunction)
|
191
|
+
|
192
|
+
|
193
|
+
window.TinyMCEConfigManager = TinyMCEConfigManager
|
194
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_directory ./tinymce-rails-config-manager
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tinymce-rails-config-manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- ITHouse (Latvia) and Arturs Meisters
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: railties
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.8
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.2.8
|
30
|
+
description: Simple tinyMCE configuration manager that makes it easier to manage different
|
31
|
+
configurations without changing templates
|
32
|
+
email:
|
33
|
+
- support@ithouse.lv
|
34
|
+
executables: []
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- app/assets/javascripts/tinymce-rails-config-manager/manager.js.coffee
|
39
|
+
- app/assets/javascripts/tinymce-rails-config-manager.js
|
40
|
+
- lib/tinymce-rails-config-manager/version.rb
|
41
|
+
- lib/tinymce-rails-config-manager/engine.rb
|
42
|
+
- lib/tinymce-rails-config-manager.rb
|
43
|
+
- lib/tasks/tinymce-rails-config-manager_tasks.rake
|
44
|
+
- lib/tasks/jasmine.rake
|
45
|
+
- MIT-LICENSE
|
46
|
+
- Rakefile
|
47
|
+
- README.md
|
48
|
+
homepage: http://github.com/ithouse/tinymce-rails-config-manager
|
49
|
+
licenses: []
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
hash: 2286425305098803774
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
hash: 2286425305098803774
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.8.24
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Simple tinyMCE configuration manager.
|
78
|
+
test_files: []
|