scrivito_editors 0.30.1 → 0.40.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -3
  3. data/app/assets/javascripts/redactor.js +6620 -6697
  4. data/app/assets/javascripts/scrivito_editors/binary_editor.js.coffee +49 -0
  5. data/app/assets/javascripts/scrivito_editors/date_editor.js.coffee +2 -2
  6. data/app/assets/javascripts/scrivito_editors/enum_editor.js.coffee +4 -1
  7. data/app/assets/javascripts/scrivito_editors/helpers/file_drop_zone.js.coffee +43 -0
  8. data/app/assets/javascripts/scrivito_editors/html_editor.js.coffee +96 -80
  9. data/app/assets/javascripts/scrivito_editors/image_editor.js.coffee +5 -39
  10. data/app/assets/javascripts/scrivito_editors/multienum_editor.js.coffee +4 -1
  11. data/app/assets/javascripts/scrivito_editors/placeholder.js.coffee +1 -0
  12. data/app/assets/javascripts/scrivito_editors/redactor_plugins/table.js +337 -0
  13. data/app/assets/javascripts/scrivito_editors/reference_editor.js.coffee +1 -1
  14. data/app/assets/javascripts/scrivito_editors/referencelist_editor.js.coffee +1 -1
  15. data/app/assets/javascripts/scrivito_editors/slider_editor.js.coffee +1 -1
  16. data/app/assets/javascripts/scrivito_editors/string_editor.js.coffee +1 -1
  17. data/app/assets/javascripts/scrivito_editors/text_editor.js.coffee +1 -1
  18. data/app/assets/javascripts/scrivito_editors_core.js +3 -1
  19. data/app/assets/stylesheets/{redactor.css.erb → redactor.css} +536 -596
  20. data/app/assets/stylesheets/scrivito_editors/binary_editor.css +14 -0
  21. data/app/assets/stylesheets/scrivito_editors/editors/html_editor.css +8 -5
  22. metadata +36 -34
  23. data/app/assets/fonts/redactor-font.eot +0 -0
  24. data/lib/scrivito_editors/version.rb +0 -3
@@ -0,0 +1,337 @@
1
+ if (!RedactorPlugins) var RedactorPlugins = {};
2
+
3
+ (function($)
4
+ {
5
+ RedactorPlugins.table = function()
6
+ {
7
+ return {
8
+ getTemplate: function()
9
+ {
10
+ return String()
11
+ + '<section id="redactor-modal-table-insert">'
12
+ + '<label>' + this.lang.get('rows') + '</label>'
13
+ + '<input type="text" size="5" value="2" id="redactor-table-rows" />'
14
+ + '<label>' + this.lang.get('columns') + '</label>'
15
+ + '<input type="text" size="5" value="3" id="redactor-table-columns" />'
16
+ + '</section>';
17
+ },
18
+ init: function()
19
+ {
20
+
21
+ var dropdown = {};
22
+
23
+ dropdown.insert_table = { title: this.lang.get('insert_table'), func: this.table.show };
24
+ dropdown.insert_row_above = { title: this.lang.get('insert_row_above'), func: this.table.addRowAbove };
25
+ dropdown.insert_row_below = { title: this.lang.get('insert_row_below'), func: this.table.addRowBelow };
26
+ dropdown.insert_column_left = { title: this.lang.get('insert_column_left'), func: this.table.addColumnLeft };
27
+ dropdown.insert_column_right = { title: this.lang.get('insert_column_right'), func: this.table.addColumnRight };
28
+ dropdown.add_head = { title: this.lang.get('add_head'), func: this.table.addHead };
29
+ dropdown.delete_head = { title: this.lang.get('delete_head'), func: this.table.deleteHead };
30
+ dropdown.delete_column = { title: this.lang.get('delete_column'), func: this.table.deleteColumn };
31
+ dropdown.delete_row = { title: this.lang.get('delete_row'), func: this.table.deleteRow };
32
+ dropdown.delete_table = { title: this.lang.get('delete_table'), func: this.table.deleteTable };
33
+
34
+ this.observe.addButton('td', 'table');
35
+ this.observe.addButton('th', 'table');
36
+
37
+ var button = this.button.addBefore('link', 'table', this.lang.get('table'));
38
+ this.button.addDropdown(button, dropdown);
39
+ },
40
+ show: function()
41
+ {
42
+ this.modal.addTemplate('table', this.table.getTemplate());
43
+
44
+ this.modal.load('table', this.lang.get('insert_table'), 300);
45
+ this.modal.createCancelButton();
46
+
47
+ var button = this.modal.createActionButton(this.lang.get('insert'));
48
+ button.on('click', this.table.insert);
49
+
50
+ this.selection.save();
51
+ this.modal.show();
52
+
53
+ $('#redactor-table-rows').focus();
54
+
55
+ },
56
+ insert: function()
57
+ {
58
+
59
+ var rows = $('#redactor-table-rows').val(),
60
+ columns = $('#redactor-table-columns').val(),
61
+ $tableBox = $('<div>'),
62
+ tableId = Math.floor(Math.random() * 99999),
63
+ $table = $('<table id="table' + tableId + '"><tbody></tbody></table>'),
64
+ i, $row, z, $column;
65
+
66
+ for (i = 0; i < rows; i++)
67
+ {
68
+ $row = $('<tr>');
69
+
70
+ for (z = 0; z < columns; z++)
71
+ {
72
+ $column = $('<td>' + this.opts.invisibleSpace + '</td>');
73
+
74
+ // set the focus to the first td
75
+ if (i === 0 && z === 0)
76
+ {
77
+ $column.append(this.selection.getMarker());
78
+ }
79
+
80
+ $($row).append($column);
81
+ }
82
+
83
+ $table.append($row);
84
+ }
85
+
86
+ $tableBox.append($table);
87
+ var html = $tableBox.html();
88
+
89
+
90
+ this.modal.close();
91
+ this.selection.restore();
92
+
93
+ if (this.table.getTable()) return;
94
+
95
+ this.buffer.set();
96
+
97
+ var current = this.selection.getBlock() || this.selection.getCurrent();
98
+ if (current && current.tagName != 'BODY')
99
+ {
100
+ if (current.tagName == 'LI') current = $(current).closest('ul, ol');
101
+ $(current).after(html);
102
+ }
103
+ else
104
+ {
105
+ this.insert.html(html);
106
+ }
107
+
108
+ this.selection.restore();
109
+
110
+ var table = this.$editor.find('#table' + tableId);
111
+
112
+ if (!this.opts.linebreaks && (this.utils.browser('mozilla') || this.utils.browser('msie')))
113
+ {
114
+ var $next = table.next();
115
+ if ($next.length === 0)
116
+ {
117
+ table.after(this.opts.emptyHtml);
118
+ }
119
+ }
120
+
121
+ this.observe.buttons();
122
+
123
+ table.find('span.redactor-selection-marker').remove();
124
+ table.removeAttr('id');
125
+
126
+ this.code.sync();
127
+ this.core.setCallback('insertedTable', table);
128
+ },
129
+ getTable: function()
130
+ {
131
+ var $table = $(this.selection.getParent()).closest('table');
132
+
133
+ if (!this.utils.isRedactorParent($table)) return false;
134
+ if ($table.size() === 0) return false;
135
+
136
+ return $table;
137
+ },
138
+ restoreAfterDelete: function($table)
139
+ {
140
+ this.selection.restore();
141
+ $table.find('span.redactor-selection-marker').remove();
142
+ this.code.sync();
143
+ },
144
+ deleteTable: function()
145
+ {
146
+ var $table = this.table.getTable();
147
+ if (!$table) return;
148
+
149
+ this.buffer.set();
150
+
151
+
152
+ var $next = $table.next();
153
+ if (!this.opts.linebreaks && $next.length !== 0)
154
+ {
155
+ this.caret.setStart($next);
156
+ }
157
+ else
158
+ {
159
+ this.caret.setAfter($table);
160
+ }
161
+
162
+
163
+ $table.remove();
164
+
165
+ this.code.sync();
166
+ },
167
+ deleteRow: function()
168
+ {
169
+ var $table = this.table.getTable();
170
+ if (!$table) return;
171
+
172
+ var $current = $(this.selection.getCurrent());
173
+
174
+ this.buffer.set();
175
+
176
+ var $current_tr = $current.closest('tr');
177
+ var $focus_tr = $current_tr.prev().length ? $current_tr.prev() : $current_tr.next();
178
+ if ($focus_tr.length)
179
+ {
180
+ var $focus_td = $focus_tr.children('td, th').first();
181
+ if ($focus_td.length) $focus_td.prepend(this.selection.getMarker());
182
+ }
183
+
184
+ $current_tr.remove();
185
+ this.table.restoreAfterDelete($table);
186
+ },
187
+ deleteColumn: function()
188
+ {
189
+ var $table = this.table.getTable();
190
+ if (!$table) return;
191
+
192
+ this.buffer.set();
193
+
194
+ var $current = $(this.selection.getCurrent());
195
+ var $current_td = $current.closest('td, th');
196
+ var index = $current_td[0].cellIndex;
197
+
198
+ $table.find('tr').each($.proxy(function(i, elem)
199
+ {
200
+ var $elem = $(elem);
201
+ var focusIndex = index - 1 < 0 ? index + 1 : index - 1;
202
+ if (i === 0) $elem.find('td, th').eq(focusIndex).prepend(this.selection.getMarker());
203
+
204
+ $elem.find('td, th').eq(index).remove();
205
+
206
+ }, this));
207
+
208
+ this.table.restoreAfterDelete($table);
209
+ },
210
+ addHead: function()
211
+ {
212
+ var $table = this.table.getTable();
213
+ if (!$table) return;
214
+
215
+ this.buffer.set();
216
+
217
+ if ($table.find('thead').size() !== 0)
218
+ {
219
+ this.table.deleteHead();
220
+ return;
221
+ }
222
+
223
+ var tr = $table.find('tr').first().clone();
224
+ tr.find('td').replaceWith($.proxy(function()
225
+ {
226
+ return $('<th>').html(this.opts.invisibleSpace);
227
+ }, this));
228
+
229
+ $thead = $('<thead></thead>').append(tr);
230
+ $table.prepend($thead);
231
+
232
+ this.code.sync();
233
+
234
+ },
235
+ deleteHead: function()
236
+ {
237
+ var $table = this.table.getTable();
238
+ if (!$table) return;
239
+
240
+ var $thead = $table.find('thead');
241
+ if ($thead.size() === 0) return;
242
+
243
+ this.buffer.set();
244
+
245
+ $thead.remove();
246
+ this.code.sync();
247
+ },
248
+ addRowAbove: function()
249
+ {
250
+ this.table.addRow('before');
251
+ },
252
+ addRowBelow: function()
253
+ {
254
+ this.table.addRow('after');
255
+ },
256
+ addColumnLeft: function()
257
+ {
258
+ this.table.addColumn('before');
259
+ },
260
+ addColumnRight: function()
261
+ {
262
+ this.table.addColumn('after');
263
+ },
264
+ addRow: function(type)
265
+ {
266
+ var $table = this.table.getTable();
267
+ if (!$table) return;
268
+
269
+ this.buffer.set();
270
+
271
+ var $current = $(this.selection.getCurrent());
272
+ var $current_tr = $current.closest('tr');
273
+ var new_tr = $current_tr.clone();
274
+
275
+ new_tr.find('th').replaceWith(function()
276
+ {
277
+ var $td = $('<td>');
278
+ $td[0].attributes = this.attributes;
279
+
280
+ return $td.append($(this).contents());
281
+ });
282
+
283
+ new_tr.find('td').html(this.opts.invisibleSpace);
284
+
285
+ if (type == 'after')
286
+ {
287
+ $current_tr.after(new_tr);
288
+ }
289
+ else
290
+ {
291
+ $current_tr.before(new_tr);
292
+ }
293
+
294
+ this.code.sync();
295
+ },
296
+ addColumn: function (type)
297
+ {
298
+ var $table = this.table.getTable();
299
+ if (!$table) return;
300
+
301
+ var index = 0;
302
+ var current = $(this.selection.getCurrent());
303
+
304
+ this.buffer.set();
305
+
306
+ var $current_tr = current.closest('tr');
307
+ var $current_td = current.closest('td, th');
308
+
309
+ $current_tr.find('td, th').each($.proxy(function(i, elem)
310
+ {
311
+ if ($(elem)[0] === $current_td[0]) index = i;
312
+
313
+ }, this));
314
+
315
+ $table.find('tr').each($.proxy(function(i, elem)
316
+ {
317
+ var $current = $(elem).find('td, th').eq(index);
318
+
319
+ var td = $current.clone();
320
+ td.html(this.opts.invisibleSpace);
321
+
322
+ if (type == 'after')
323
+ {
324
+ $current.after(td);
325
+ }
326
+ else
327
+ {
328
+ $current.before(td);
329
+ }
330
+
331
+ }, this));
332
+
333
+ this.code.sync();
334
+ }
335
+ };
336
+ };
337
+ })(jQuery);
@@ -26,6 +26,6 @@ $ ->
26
26
  cmsField.scrivito('save', value)
27
27
  .done ->
28
28
  cmsField.trigger('save.scrivito_editors')
29
- cmsField.trigger('scrivito_reload')
29
+ cmsField.scrivito('reload')
30
30
 
31
31
  true
@@ -36,7 +36,7 @@ $ ->
36
36
  .done ->
37
37
  storeLastSaved(cmsField, ids)
38
38
  cmsField.trigger('save.scrivito_editors')
39
- cmsField.trigger('scrivito_reload')
39
+ cmsField.scrivito('reload')
40
40
 
41
41
  # Run when clicking the content browser button.
42
42
  onContentBrowserOpen = (event) ->
@@ -11,7 +11,7 @@ $ ->
11
11
  content = ui.value
12
12
  cmsField.scrivito('save', content).done ->
13
13
  cmsField.trigger('save.scrivito_editors')
14
- cmsField.trigger('scrivito_reload')
14
+ cmsField.scrivito('reload')
15
15
 
16
16
  onSlide = (event, ui) ->
17
17
  cmsField = $(@).data('cmsField')
@@ -22,7 +22,7 @@ $ ->
22
22
 
23
23
  save(cmsField, true).done ->
24
24
  if cmsField.attr('data-reload') == 'true'
25
- cmsField.trigger('scrivito_reload')
25
+ cmsField.scrivito('reload')
26
26
 
27
27
  save = (cmsField, andClose) ->
28
28
  cleanUp(cmsField)
@@ -20,7 +20,7 @@ $ ->
20
20
 
21
21
  save(cmsField, true).done ->
22
22
  if cmsField.attr('data-reload') == 'true'
23
- cmsField.trigger('scrivito_reload')
23
+ cmsField.scrivito('reload')
24
24
 
25
25
  save = (cmsField, andClose) ->
26
26
  cleanUp(cmsField)
@@ -1,3 +1,5 @@
1
1
  //= require redactor
2
- //= require scrivito_content_browser
2
+ //= require_self
3
3
  //= require_tree ./scrivito_editors
4
+
5
+ scrivito.editors = {}