ckeditor 4.1.5 → 4.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98d6e5ef0ffcd85208e9967eff65d4e2806ff52c
4
- data.tar.gz: fc3e3ca42567885c35a1309a9484f3a6f4b91566
3
+ metadata.gz: 5eabd9522c6e41cc16b578e752c34cb931454a92
4
+ data.tar.gz: c11df316e009cde1dcef7c0046ee8db5ab08bdbe
5
5
  SHA512:
6
- metadata.gz: 919f1f59cd67acacfde54f07eb72fa9d4869ea26b98f2e5a3f22a7e3b0e481787e1ab0763aaccbc4ea177727b727e675485e137689e115a14eb22ceba926f7bf
7
- data.tar.gz: 8d50d48d082eaec29ba500c2c426f3b9e8eab36dc50ca0cbd2794b60a8623bac2ef233903619ad4a10ebb730d7e7e6d4296995a20901c7bf660e6f048bccb45d
6
+ metadata.gz: ba3eab2c3f744e674b0569974f4cab7832c1c64d5927f25d1d3155dc13160d78d0610966c16661b9d422c4bc84c7eeb28b49cad85168571689f5a9e18e20eb04
7
+ data.tar.gz: 1d01d18849af4afcb915182b1caf1d4fc2df8159001ceceed5e72c597e6a62943c45abe81254f19a7948768d8f2347a475444c3af0d37e48ed8fd44e50ab03a7
data/README.md CHANGED
@@ -8,7 +8,7 @@ CKEditor is a WYSIWYG text editor designed to simplify web content creation. It
8
8
 
9
9
  ## Features
10
10
 
11
- * Ckeditor version 4.5.5 (full 12 Nov 2015)
11
+ * Ckeditor version 4.5.6 (9 Dec 2015)
12
12
  * Rails 4 integration
13
13
  * Files browser
14
14
  * HTML5 file uploader
@@ -29,14 +29,6 @@ or if you'd like to use the latest version from Github:
29
29
  gem 'ckeditor', github: 'galetahub/ckeditor'
30
30
  ```
31
31
 
32
- #### Using with ruby 1.8.7
33
-
34
- For usage with ruby 1.8.7 you need to specify the gem version:
35
-
36
- ```
37
- gem 'ckeditor', '4.0.4'
38
- ```
39
-
40
32
  For file upload support, you must generate the necessary file storage models.
41
33
  The currently supported backends are:
42
34
 
@@ -73,7 +65,6 @@ gem 'refile-mini_magick'
73
65
  rails generate ckeditor:install --orm=active_record --backend=refile
74
66
  ```
75
67
 
76
-
77
68
  #### ActiveRecord + dragonfly
78
69
 
79
70
  Requires Dragonfly 1.0 or greater.
@@ -118,24 +109,40 @@ mount Ckeditor::Engine => '/ckeditor'
118
109
 
119
110
  ## Usage
120
111
 
112
+ ### Load editor from gem vendor
113
+
121
114
  Include ckeditor javascripts in your `app/assets/javascripts/application.js`:
122
115
 
123
116
  ```
124
117
  //= require ckeditor/init
125
118
  ```
126
119
 
127
- Form helpers:
120
+ ### Load editor via CKEditor CDN
128
121
 
129
- ```erb
130
- <%= form_for @page do |form| -%>
131
- ...
132
- <%= form.cktext_area :notes, :class => 'someclass', :ckeditor => {:language => 'uk'} %>
133
- ...
134
- <%= form.cktext_area :content, :value => 'Default value', :id => 'sometext' %>
135
- ...
136
- <%= cktext_area :page, :info, :cols => 40, :ckeditor => {:uiColor => '#AADC6E', :toolbar => 'mini'} %>
137
- ...
138
- <% end -%>
122
+ Setup editor version to load (more info here http://cdn.ckeditor.com/)
123
+
124
+ ```ruby
125
+ # in config/initializers/ckeditor.rb
126
+
127
+ Ckeditor.setup do |config|
128
+ # //cdn.ckeditor.com/<version.number>/<distribution>/ckeditor.js
129
+ config.cdn_url = "//cdn.ckeditor.com/4.5.6/standard/ckeditor.js"
130
+ end
131
+ ```
132
+
133
+ In view template include ckeditor CDN:
134
+
135
+ ```slim
136
+ = javascript_include_tag Ckeditor.cdn_url
137
+ ```
138
+
139
+ ### Form helpers
140
+
141
+ ```slim
142
+ = form_for @page do |form|
143
+ = form.cktext_area :notes, :class => 'someclass', :ckeditor => {:language => 'uk'}
144
+ = form.cktext_area :content, :value => 'Default value', :id => 'sometext'
145
+ = cktext_area :page, :info, :cols => 40, :ckeditor => {:uiColor => '#AADC6E', :toolbar => 'mini'}
139
146
  ```
140
147
 
141
148
  ### Customize ckeditor
@@ -171,7 +178,7 @@ CKEDITOR.editorConfig = function (config) {
171
178
 
172
179
  When overriding the default `config.js` file, you must set all configuration options yourself as the bundled `config.js` will not be loaded. To see the default configuration, run `bundle open ckeditor`, copy `app/assets/javascripts/ckeditor/config.js` into your project and customize it to your needs.
173
180
 
174
- ### Deployment
181
+ ### Deployment (only if you use ckeditor from gem vendor)
175
182
 
176
183
  For Rails 4, add the following to `config/initializers/assets.rb`:
177
184
 
@@ -229,15 +236,15 @@ jQuery sample:
229
236
 
230
237
  ### Formtastic integration
231
238
 
232
- ```erb
233
- <%= form.input :content, :as => :ckeditor %>
234
- <%= form.input :content, :as => :ckeditor, :input_html => { :ckeditor => { :height => 400 } } %>
239
+ ```slim
240
+ = form.input :content, :as => :ckeditor
241
+ = form.input :content, :as => :ckeditor, :input_html => { :ckeditor => { :height => 400 } }
235
242
  ```
236
243
 
237
244
  ### SimpleForm integration
238
245
 
239
- ```erb
240
- <%= form.input :content, :as => :ckeditor, :input_html => { :ckeditor => {:toolbar => 'Full'} } %>
246
+ ```slim
247
+ = form.input :content, :as => :ckeditor, :input_html => { :ckeditor => {:toolbar => 'Full'} }
241
248
  ```
242
249
 
243
250
  ### CanCan integration
@@ -1,4 +1,3 @@
1
- //= require ckeditor/filebrowser/javascripts/jquery.min.js
2
1
  //= require ckeditor/filebrowser/javascripts/jquery.tmpl.min.js
3
2
  //= require ckeditor/filebrowser/javascripts/fileuploader.js
4
3
  //= require ckeditor/filebrowser/javascripts/jquery.endless-scroll.js
@@ -33,65 +33,6 @@ CKEDITOR.editorConfig = function( config )
33
33
 
34
34
  config.allowedContent = true;
35
35
 
36
- // Rails CSRF token
37
- config.filebrowserParams = function(){
38
- var csrf_token, csrf_param, meta,
39
- metas = document.getElementsByTagName('meta'),
40
- params = new Object();
41
-
42
- for ( var i = 0 ; i < metas.length ; i++ ){
43
- meta = metas[i];
44
-
45
- switch(meta.name) {
46
- case "csrf-token":
47
- csrf_token = meta.content;
48
- break;
49
- case "csrf-param":
50
- csrf_param = meta.content;
51
- break;
52
- default:
53
- continue;
54
- }
55
- }
56
-
57
- if (csrf_param !== undefined && csrf_token !== undefined) {
58
- params[csrf_param] = csrf_token;
59
- }
60
-
61
- return params;
62
- };
63
-
64
- config.addQueryString = function( url, params ){
65
- var queryString = [];
66
-
67
- if ( !params ) {
68
- return url;
69
- } else {
70
- for ( var i in params )
71
- queryString.push( i + "=" + encodeURIComponent( params[ i ] ) );
72
- }
73
-
74
- return url + ( ( url.indexOf( "?" ) != -1 ) ? "&" : "?" ) + queryString.join( "&" );
75
- };
76
-
77
- // Integrate Rails CSRF token into file upload dialogs (link, image, attachment and flash)
78
- CKEDITOR.on( 'dialogDefinition', function( ev ){
79
- // Take the dialog name and its definition from the event data.
80
- var dialogName = ev.data.name;
81
- var dialogDefinition = ev.data.definition;
82
- var content, upload;
83
-
84
- if (CKEDITOR.tools.indexOf(['link', 'image', 'attachment', 'flash'], dialogName) > -1) {
85
- content = (dialogDefinition.getContents('Upload') || dialogDefinition.getContents('upload'));
86
- upload = (content == null ? null : content.get('upload'));
87
-
88
- if (upload && upload.filebrowser && upload.filebrowser['params'] === undefined) {
89
- upload.filebrowser['params'] = config.filebrowserParams();
90
- upload.action = config.addQueryString(upload.action, upload.filebrowser['params']);
91
- }
92
- }
93
- });
94
-
95
36
  // Toolbar groups configuration.
96
37
  config.toolbar = [
97
38
  { name: 'document', groups: [ 'mode', 'document', 'doctools' ], items: [ 'Source'] },
@@ -11,20 +11,22 @@ $.QueryString = (function(a) {
11
11
  })(window.location.search.substr(1).split('&'))
12
12
 
13
13
  $(document).ready(function(){
14
- $("div.gal-item div.gal-inner-holder")
15
- .live('mouseover', function(e){
14
+ var selector = "div.gal-item div.gal-inner-holder";
15
+
16
+ $(document)
17
+ .on('mouseover', selector, function(e){
16
18
  $(this).addClass('hover');
17
19
  })
18
- .live('mouseout', function(e){
20
+ .on('mouseout', selector, function(e){
19
21
  $(this).removeClass('hover');
20
22
  })
21
- .live('click', function(e){
23
+ .on('click', selector, function(e){
22
24
  var url = $(this).parents('div.gal-item').data('url');
23
25
  CKEDITOR.tools.callFunction(CKEditorFuncNum, url);
24
26
  window.close();
25
27
  });
26
-
27
- $("div.gal-item a.gal-del").live('ajax:complete', function(xhr, status){
28
+
29
+ $(document).on('ajax:complete', "div.gal-item a.gal-del", function(xhr, status){
28
30
  $(this).parents('div.gal-item').remove();
29
31
  });
30
32
 
@@ -49,15 +51,15 @@ qq.FileUploader.instances = new Object();
49
51
  qq.FileUploaderInput = function(o){
50
52
  // call parent constructor
51
53
  qq.FileUploaderBasic.apply(this, arguments);
52
-
53
- // additional options
54
+
55
+ // additional options
54
56
  qq.extend(this._options, {
55
57
  element: null,
56
58
  // if set, will be used instead of qq-upload-list in template
57
59
  listElement: null,
58
-
59
- template_id: '#fileupload_tmpl',
60
-
60
+
61
+ template_id: '#fileupload_tmpl',
62
+
61
63
  classes: {
62
64
  // used to get elements from templates
63
65
  button: 'fileupload-button',
@@ -65,7 +67,7 @@ qq.FileUploaderInput = function(o){
65
67
  dropActive: 'fileupload-drop-area-active',
66
68
  list: 'fileupload-list',
67
69
  preview: 'fileupload-preview',
68
-
70
+
69
71
  file: 'fileupload-file',
70
72
  spinner: 'fileupload-spinner',
71
73
  size: 'fileupload-size',
@@ -77,18 +79,18 @@ qq.FileUploaderInput = function(o){
77
79
  fail: 'fileupload-fail'
78
80
  }
79
81
  });
80
- // overwrite options with user supplied
81
- qq.extend(this._options, o);
82
+ // overwrite options with user supplied
83
+ qq.extend(this._options, o);
82
84
 
83
85
  this._element = document.getElementById(this._options.element);
84
86
  this._listElement = this._options.listElement || this._find(this._element, 'list');
85
-
87
+
86
88
  this._classes = this._options.classes;
87
-
88
- this._button = this._createUploadButton(this._find(this._element, 'button'));
89
-
89
+
90
+ this._button = this._createUploadButton(this._find(this._element, 'button'));
91
+
90
92
  //this._setupDragDrop();
91
-
93
+
92
94
  qq.FileUploader.instances[this._element.id] = this;
93
95
  };
94
96
 
@@ -99,18 +101,18 @@ qq.extend(qq.FileUploaderInput.prototype, {
99
101
  /**
100
102
  * Gets one of the elements listed in this._options.classes
101
103
  **/
102
- _find: function(parent, type){
103
- var element = qq.getByClass(parent, this._options.classes[type])[0];
104
+ _find: function(parent, type){
105
+ var element = qq.getByClass(parent, this._options.classes[type])[0];
104
106
  if (!element){
105
107
  alert(type);
106
108
  throw new Error('element not found ' + type);
107
109
  }
108
-
110
+
109
111
  return element;
110
112
  },
111
113
  _setupDragDrop: function(){
112
114
  var self = this,
113
- dropArea = this._find(this._element, 'drop');
115
+ dropArea = this._find(this._element, 'drop');
114
116
 
115
117
  var dz = new qq.UploadDropZone({
116
118
  element: dropArea,
@@ -122,49 +124,49 @@ qq.extend(qq.FileUploaderInput.prototype, {
122
124
  e.stopPropagation();
123
125
  },
124
126
  onLeaveNotDescendants: function(e){
125
- qq.removeClass(dropArea, self._classes.dropActive);
127
+ qq.removeClass(dropArea, self._classes.dropActive);
126
128
  },
127
129
  onDrop: function(e){
128
130
  dropArea.style.display = 'none';
129
131
  qq.removeClass(dropArea, self._classes.dropActive);
130
- self._uploadFileList(e.dataTransfer.files);
132
+ self._uploadFileList(e.dataTransfer.files);
131
133
  }
132
134
  });
133
-
135
+
134
136
  dropArea.style.display = 'none';
135
137
 
136
- qq.attach(document, 'dragenter', function(e){
137
- if (!dz._isValidFileDrag(e)) return;
138
-
139
- dropArea.style.display = 'block';
140
- });
138
+ qq.attach(document, 'dragenter', function(e){
139
+ if (!dz._isValidFileDrag(e)) return;
140
+
141
+ dropArea.style.display = 'block';
142
+ });
141
143
  qq.attach(document, 'dragleave', function(e){
142
- if (!dz._isValidFileDrag(e)) return;
143
-
144
+ if (!dz._isValidFileDrag(e)) return;
145
+
144
146
  var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);
145
147
  // only fire when leaving document out
146
- if ( ! relatedTarget || relatedTarget.nodeName == "HTML"){
147
- dropArea.style.display = 'none';
148
+ if ( ! relatedTarget || relatedTarget.nodeName == "HTML"){
149
+ dropArea.style.display = 'none';
148
150
  }
149
- });
151
+ });
150
152
  },
151
153
  _onSubmit: function(id, fileName){
152
154
  qq.FileUploaderBasic.prototype._onSubmit.apply(this, arguments);
153
- this._addToList(id, fileName);
155
+ this._addToList(id, fileName);
154
156
  },
155
157
  _onProgress: function(id, fileName, loaded, total){
156
158
  qq.FileUploaderBasic.prototype._onProgress.apply(this, arguments);
157
159
 
158
160
  var item = this._getItemByFileId(id);
159
161
  var size = this._find(item, 'size');
160
-
161
- var text;
162
+
163
+ var text;
162
164
  if (loaded != total){
163
165
  text = Math.round(loaded / total * 100) + '% from ' + this._formatSize(total);
164
- } else {
166
+ } else {
165
167
  text = this._formatSize(total);
166
- }
167
-
168
+ }
169
+
168
170
  qq.setText(size, text);
169
171
  },
170
172
  _onComplete: function(id, fileName, result){
@@ -172,13 +174,13 @@ qq.extend(qq.FileUploaderInput.prototype, {
172
174
 
173
175
  var item = this._getItemByFileId(id);
174
176
  var asset = result.asset ? result.asset : result;
175
-
177
+
176
178
  if (asset && asset.id){
177
179
  qq.addClass(item, this._classes.success);
178
-
180
+
179
181
  asset.size = this._formatSize(asset.size);
180
182
  asset.controller = (asset.type !== undefined && asset.type.toLowerCase() == "ckeditor::picture" ? "pictures" : "attachment_files");
181
-
183
+
182
184
  $(item).replaceWith($(this._options.template_id).tmpl(asset));
183
185
  } else {
184
186
  qq.addClass(item, this._classes.fail);
@@ -189,37 +191,37 @@ qq.extend(qq.FileUploaderInput.prototype, {
189
191
  if (this._options.multiple === false) {
190
192
  $(this._listElement).empty();
191
193
  }
192
-
194
+
193
195
  var asset = {
194
- id: 0,
195
- filename: this._formatFileName(fileName),
196
+ id: 0,
197
+ filename: this._formatFileName(fileName),
196
198
  size: 0,
197
199
  format_created_at: '',
198
200
  url_content: "#",
199
201
  controller: "assets",
200
202
  url_thumb: "<%= asset_path('ckeditor/filebrowser/images/preloader.gif') %>"
201
203
  };
202
-
204
+
203
205
  var item = $(this._options.template_id)
204
206
  .tmpl(asset)
205
207
  .attr('qqfileid', id)
206
208
  .prependTo( this._listElement );
207
-
209
+
208
210
  item.find('div.img').addClass('preloader');
209
-
211
+
210
212
  this._bindCancelEvent(item);
211
213
  }
212
214
  },
213
215
  _getItemByFileId: function(id){
214
- return $(this._listElement).find('div[qqfileid=' + id +']').get(0);
216
+ return $(this._listElement).find('div[qqfileid=' + id +']').get(0);
215
217
  },
216
218
  /**
217
- * delegate click event for cancel link
219
+ * delegate click event for cancel link
218
220
  **/
219
221
  _bindCancelEvent: function(element){
220
222
  var self = this,
221
- item = $(element);
222
-
223
+ item = $(element);
224
+
223
225
  item.find('a.' + this._classes.cancel).bind('click', function(e){
224
226
  self._handler.cancel( item.attr('qqfileid') );
225
227
  item.remove();
@@ -5,17 +5,18 @@
5
5
  <meta name="robots" content="noindex, nofollow">
6
6
  <%= csrf_meta_tag %>
7
7
  <title><%= I18n.t('page_title', :scope => [:ckeditor]) %></title>
8
+ <script src="//code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script>
8
9
 
9
10
  <% if assets_pipeline_enabled? -%>
10
11
  <%= stylesheet_link_tag "ckeditor/application" %>
11
12
  <%= javascript_include_tag "ckeditor/application" %>
12
13
  <% else -%>
13
14
  <link href="/javascripts/ckeditor/filebrowser/stylesheets/uploader.css" type="text/css" rel="stylesheet">
14
- <% ["jquery.js", "jquery.tmpl.js", "fileuploader.js", "rails.js", "application.js"].each do |js| -%>
15
+ <% ["jquery.tmpl.js", "fileuploader.js", "rails.js", "application.js"].each do |js| -%>
15
16
  <script src="/javascripts/ckeditor/filebrowser/javascripts/<%= js %>" type="text/javascript"></script>
16
17
  <% end -%>
17
18
  <% end -%>
18
-
19
+
19
20
  <script type="text/javascript">
20
21
  var CKEditorFuncNum = $.QueryString["CKEditorFuncNum"];
21
22
  var CKEditorName = $.QueryString["CKEditor"];