shixian-redactor-rails 0.5.0

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 (100) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/Gemfile +25 -0
  4. data/MIT-LICENSE +22 -0
  5. data/README.md +234 -0
  6. data/Rakefile +3 -0
  7. data/app/controller/redactor_rails/documents_controller.rb +34 -0
  8. data/app/controller/redactor_rails/pictures_controller.rb +39 -0
  9. data/config/routes.rb +4 -0
  10. data/lib/generators/redactor/config_generator.rb +18 -0
  11. data/lib/generators/redactor/install_generator.rb +75 -0
  12. data/lib/generators/redactor/templates/active_record/carrierwave/devise_migration.rb +30 -0
  13. data/lib/generators/redactor/templates/active_record/carrierwave/migration.rb +28 -0
  14. data/lib/generators/redactor/templates/active_record/carrierwave/redactor/asset.rb +5 -0
  15. data/lib/generators/redactor/templates/active_record/carrierwave/redactor/document.rb +11 -0
  16. data/lib/generators/redactor/templates/active_record/carrierwave/redactor/picture.rb +7 -0
  17. data/lib/generators/redactor/templates/base/carrierwave/uploaders/redactor_rails_document_uploader.rb +15 -0
  18. data/lib/generators/redactor/templates/base/carrierwave/uploaders/redactor_rails_picture_uploader.rb +53 -0
  19. data/lib/generators/redactor/templates/config.js +22 -0
  20. data/lib/generators/redactor/templates/mongoid/carrierwave/redactor/asset.rb +9 -0
  21. data/lib/generators/redactor/templates/mongoid/carrierwave/redactor/document.rb +14 -0
  22. data/lib/generators/redactor/templates/mongoid/carrierwave/redactor/picture.rb +7 -0
  23. data/lib/redactor-rails/backend/carrierwave.rb +64 -0
  24. data/lib/redactor-rails/devise.rb +11 -0
  25. data/lib/redactor-rails/engine.rb +14 -0
  26. data/lib/redactor-rails/helper.rb +5 -0
  27. data/lib/redactor-rails/http.rb +89 -0
  28. data/lib/redactor-rails/orm/active_record.rb +31 -0
  29. data/lib/redactor-rails/orm/base.rb +38 -0
  30. data/lib/redactor-rails/orm/mongoid.rb +37 -0
  31. data/lib/redactor-rails/version.rb +3 -0
  32. data/lib/redactor-rails.rb +41 -0
  33. data/redactor-rails.gemspec +21 -0
  34. data/vendor/assets/javascripts/redactor-rails/config.js +16 -0
  35. data/vendor/assets/javascripts/redactor-rails/css/docstyle.css +139 -0
  36. data/vendor/assets/javascripts/redactor-rails/css/style.css +26 -0
  37. data/vendor/assets/javascripts/redactor-rails/css/wym.css +151 -0
  38. data/vendor/assets/javascripts/redactor-rails/index.js +2 -0
  39. data/vendor/assets/javascripts/redactor-rails/langs/ar.js +73 -0
  40. data/vendor/assets/javascripts/redactor-rails/langs/az.js +72 -0
  41. data/vendor/assets/javascripts/redactor-rails/langs/ba.js +76 -0
  42. data/vendor/assets/javascripts/redactor-rails/langs/bg.js +74 -0
  43. data/vendor/assets/javascripts/redactor-rails/langs/by.js +72 -0
  44. data/vendor/assets/javascripts/redactor-rails/langs/ca.js +72 -0
  45. data/vendor/assets/javascripts/redactor-rails/langs/cs.js +84 -0
  46. data/vendor/assets/javascripts/redactor-rails/langs/da.js +73 -0
  47. data/vendor/assets/javascripts/redactor-rails/langs/de.js +77 -0
  48. data/vendor/assets/javascripts/redactor-rails/langs/el.js +72 -0
  49. data/vendor/assets/javascripts/redactor-rails/langs/en.js +72 -0
  50. data/vendor/assets/javascripts/redactor-rails/langs/eo.js +73 -0
  51. data/vendor/assets/javascripts/redactor-rails/langs/es.js +73 -0
  52. data/vendor/assets/javascripts/redactor-rails/langs/es_ar.js +73 -0
  53. data/vendor/assets/javascripts/redactor-rails/langs/fa.js +73 -0
  54. data/vendor/assets/javascripts/redactor-rails/langs/fi.js +72 -0
  55. data/vendor/assets/javascripts/redactor-rails/langs/fr.js +72 -0
  56. data/vendor/assets/javascripts/redactor-rails/langs/he.js +72 -0
  57. data/vendor/assets/javascripts/redactor-rails/langs/hr.js +71 -0
  58. data/vendor/assets/javascripts/redactor-rails/langs/hu.js +74 -0
  59. data/vendor/assets/javascripts/redactor-rails/langs/id.js +73 -0
  60. data/vendor/assets/javascripts/redactor-rails/langs/it.js +75 -0
  61. data/vendor/assets/javascripts/redactor-rails/langs/ja.js +73 -0
  62. data/vendor/assets/javascripts/redactor-rails/langs/ko.js +73 -0
  63. data/vendor/assets/javascripts/redactor-rails/langs/lt.js +72 -0
  64. data/vendor/assets/javascripts/redactor-rails/langs/lv.js +72 -0
  65. data/vendor/assets/javascripts/redactor-rails/langs/mk.js +72 -0
  66. data/vendor/assets/javascripts/redactor-rails/langs/nl.js +76 -0
  67. data/vendor/assets/javascripts/redactor-rails/langs/no_NB.js +72 -0
  68. data/vendor/assets/javascripts/redactor-rails/langs/pl.js +73 -0
  69. data/vendor/assets/javascripts/redactor-rails/langs/pt_br.js +79 -0
  70. data/vendor/assets/javascripts/redactor-rails/langs/pt_pt.js +72 -0
  71. data/vendor/assets/javascripts/redactor-rails/langs/ro.js +73 -0
  72. data/vendor/assets/javascripts/redactor-rails/langs/ru.js +73 -0
  73. data/vendor/assets/javascripts/redactor-rails/langs/sk.js +73 -0
  74. data/vendor/assets/javascripts/redactor-rails/langs/sl.js +76 -0
  75. data/vendor/assets/javascripts/redactor-rails/langs/sq.js +76 -0
  76. data/vendor/assets/javascripts/redactor-rails/langs/sr-cir.js +76 -0
  77. data/vendor/assets/javascripts/redactor-rails/langs/sr-lat.js +76 -0
  78. data/vendor/assets/javascripts/redactor-rails/langs/sv.js +73 -0
  79. data/vendor/assets/javascripts/redactor-rails/langs/th.js +72 -0
  80. data/vendor/assets/javascripts/redactor-rails/langs/tr.js +73 -0
  81. data/vendor/assets/javascripts/redactor-rails/langs/ua.js +74 -0
  82. data/vendor/assets/javascripts/redactor-rails/langs/vi.js +72 -0
  83. data/vendor/assets/javascripts/redactor-rails/langs/zh_cn.js +74 -0
  84. data/vendor/assets/javascripts/redactor-rails/langs/zh_tw.js +73 -0
  85. data/vendor/assets/javascripts/redactor-rails/plugins/clips.js +61 -0
  86. data/vendor/assets/javascripts/redactor-rails/plugins/fontcolor.js +76 -0
  87. data/vendor/assets/javascripts/redactor-rails/plugins/fontfamily.js +35 -0
  88. data/vendor/assets/javascripts/redactor-rails/plugins/fontsize.js +34 -0
  89. data/vendor/assets/javascripts/redactor-rails/plugins/fullscreen.js +123 -0
  90. data/vendor/assets/javascripts/redactor-rails/plugins/textdirection.js +31 -0
  91. data/vendor/assets/javascripts/redactor-rails/plugins.js +6 -0
  92. data/vendor/assets/javascripts/redactor-rails/redactor.js +8053 -0
  93. data/vendor/assets/javascripts/redactor-rails/redactor.min.js +12 -0
  94. data/vendor/assets/stylesheets/redactor-rails/css/redactor-iframe.css +202 -0
  95. data/vendor/assets/stylesheets/redactor-rails/css/redactor.css +930 -0
  96. data/vendor/assets/stylesheets/redactor-rails/css/style.css +26 -0
  97. data/vendor/assets/stylesheets/redactor-rails/index.css +1 -0
  98. data/vendor/assets/stylesheets/redactor-rails/plugins/clips.css +6 -0
  99. data/vendor/assets/stylesheets/redactor-rails/plugins.css +3 -0
  100. metadata +183 -0
@@ -0,0 +1,72 @@
1
+ (function ($) {
2
+ $.Redactor.opts.langs['vi'] = {
3
+ html: 'Xem HTML',
4
+ video: 'Chèn Video...',
5
+ image: 'Chèn hình ảnh...',
6
+ table: 'Tạo bảng',
7
+ link: 'Đường dẫn',
8
+ link_insert: 'Thêm đường dẫn ...',
9
+ link_edit: 'Edit link',
10
+ unlink: 'Loại bỏ đường dẫn',
11
+ formatting: 'Định dạng văn bản',
12
+ paragraph: 'Đoạn văn',
13
+ quote: 'Trích dẫn',
14
+ code: 'Chèn mã',
15
+ header1: 'Tiêu đề 1',
16
+ header2: 'Tiêu đề 2',
17
+ header3: 'Tiêu đề 3',
18
+ header4: 'Tiêu đề 4',
19
+ bold: 'In đậm',
20
+ italic: 'In nghiêng',
21
+ fontcolor: 'Màu chữ',
22
+ backcolor: 'Đánh dấu đoạn văn',
23
+ unorderedlist: 'Sắp xếp theo danh sách',
24
+ orderedlist: 'Sắp xếp theo thứ tự',
25
+ outdent: 'Bỏ thụt đầu dòng',
26
+ indent: 'Thụt đầu dòng',
27
+ cancel: 'Hủy bỏ',
28
+ insert: 'Chèn',
29
+ save: 'Lưu lại',
30
+ _delete: 'Xóa',
31
+ insert_table: 'Chèn bảng...',
32
+ insert_row_above: 'Thêm hàng bên trên',
33
+ insert_row_below: 'Thêm hàng bên dưới',
34
+ insert_column_left: 'Thêm cột trái',
35
+ insert_column_right: 'Thêm cột phải',
36
+ delete_column: 'Xóa cột',
37
+ delete_row: 'Xóa hàng',
38
+ delete_table: 'Xóa bảng',
39
+ rows: 'Hàng',
40
+ columns: 'Cột',
41
+ add_head: 'Thêm tiêu đề bảng',
42
+ delete_head: 'Xóa tiêu đề bảng',
43
+ title: 'Tiêu đề',
44
+ image_position: 'Vị trí',
45
+ none: 'Không thay đổi',
46
+ left: 'Trái',
47
+ right: 'Phải',
48
+ image_web_link: 'Đường dẫn link ảnh',
49
+ text: 'Văn bản',
50
+ mailto: 'Email',
51
+ web: 'Đường dẫn',
52
+ video_html_code: 'Mã nhúng video',
53
+ file: 'Tập tin đính kèm...',
54
+ upload: 'Tải lên',
55
+ download: 'Tải xuống',
56
+ choose: 'Lựa Chọn',
57
+ or_choose: 'Chọn từ máy tính',
58
+ drop_file_here: 'Kéo thả hình ảnh vào đây',
59
+ align_left: 'Căn trái',
60
+ align_center: 'Căn giữa',
61
+ align_right: 'Căn phải',
62
+ align_justify: 'Dàn đều trang',
63
+ horizontalrule: 'Chèn thanh ngang',
64
+ deleted: 'Xóa',
65
+ anchor: 'Liên kết',
66
+ link_new_tab: 'Open link in new tab',
67
+ underline: 'Underline',
68
+ alignment: 'Alignment',
69
+ filename: 'Name (optional)',
70
+ edit: 'Edit'
71
+ };
72
+ })( jQuery );
@@ -0,0 +1,74 @@
1
+ (function ($) {
2
+ $.Redactor.opts.langs['zh_cn'] = {
3
+ html: 'HTML代码',
4
+ video: '视频',
5
+ image: '图片',
6
+ table: '表格',
7
+ link: '链接',
8
+ link_insert: '插入链接',
9
+ link_edit: '编辑链接',
10
+ unlink: '取消链接',
11
+ formatting: '样式',
12
+ paragraph: '段落',
13
+ quote: '引用',
14
+ code: '代码',
15
+ header1: '一级标题',
16
+ header2: '二级标题',
17
+ header3: '三级标题',
18
+ header4: '四级标题',
19
+ header5: '五级标题',
20
+ bold: '粗体',
21
+ italic: '斜体',
22
+ fontcolor: '字体颜色',
23
+ backcolor: '背景颜色',
24
+ unorderedlist: '项目编号',
25
+ orderedlist: '数字编号',
26
+ outdent: '减少缩进',
27
+ indent: '增加缩进',
28
+ cancel: '取消',
29
+ insert: '插入',
30
+ save: '保存',
31
+ _delete: '删除',
32
+ insert_table: '插入表格',
33
+ insert_row_above: '在上方插入',
34
+ insert_row_below: '在下方插入',
35
+ insert_column_left: '在左侧插入',
36
+ insert_column_right: '在右侧插入',
37
+ delete_column: '删除整列',
38
+ delete_row: '删除整行',
39
+ delete_table: '删除表格',
40
+ rows: '行',
41
+ columns: '列',
42
+ add_head: '添加标题',
43
+ delete_head: '删除标题',
44
+ title: '标题',
45
+ image_position: '位置',
46
+ none: '无',
47
+ left: '左',
48
+ right: '右',
49
+ image_web_link: '图片网页链接',
50
+ text: '文本',
51
+ mailto: '邮箱',
52
+ web: '网址',
53
+ video_html_code: '视频嵌入代码',
54
+ file: '文件',
55
+ upload: '上传',
56
+ download: '下载',
57
+ choose: '选择',
58
+ or_choose: '或选择',
59
+ drop_file_here: '将文件拖拽至此区域',
60
+ align_left: '左对齐',
61
+ align_center: '居中',
62
+ align_right: '右对齐',
63
+ align_justify: '两端对齐',
64
+ horizontalrule: '水平线',
65
+ fullscreen: '全屏',
66
+ deleted: '删除',
67
+ anchor: '锚点',
68
+ link_new_tab: '在新窗口打开',
69
+ underline: '下划线',
70
+ alignment: '对齐方式',
71
+ filename: '文件名 (可选)',
72
+ edit: '编辑'
73
+ };
74
+ })( jQuery );
@@ -0,0 +1,73 @@
1
+ (function ($) {
2
+ $.Redactor.opts.langs['zh_tw'] = {
3
+ html: 'HTML',
4
+ video: '插入影片',
5
+ image: '插入圖片',
6
+ table: '表格',
7
+ link: '連結',
8
+ link_insert: '插入連結',
9
+ link_edit: 'Edit link',
10
+ unlink: '移除連結',
11
+ formatting: '樣式',
12
+ paragraph: '段落',
13
+ quote: '引用',
14
+ code: '原始碼',
15
+ header1: '標題 1',
16
+ header2: '標題 2',
17
+ header3: '標題 3',
18
+ header4: '標題 4',
19
+ bold: '將文字變成粗體',
20
+ italic: '將文字變成斜體',
21
+ fontcolor: '選擇文字顏色',
22
+ backcolor: '選擇文字底色',
23
+ unorderedlist: '項目列表',
24
+ orderedlist: '編號列表',
25
+ outdent: '減少縮排',
26
+ indent: '增加縮排',
27
+ cancel: '取消',
28
+ insert: '插入',
29
+ save: '儲存',
30
+ _delete: '刪除',
31
+ insert_table: '插入表格',
32
+ insert_row_above: '加入上方橫列',
33
+ insert_row_below: '加入下方橫列',
34
+ insert_column_left: '加入左方直欄',
35
+ insert_column_right: '加入右方直欄',
36
+ delete_column: '刪除整欄',
37
+ delete_row: '刪除整列',
38
+ delete_table: '刪除表格',
39
+ rows: '橫列',
40
+ columns: '直欄',
41
+ add_head: '加入表格標題',
42
+ delete_head: '刪除表格標題',
43
+ title: '標題',
44
+ image_position: '位置',
45
+ none: '無',
46
+ left: '靠左',
47
+ right: '靠右',
48
+ image_web_link: '連結',
49
+ text: '內文',
50
+ mailto: 'Email',
51
+ web: '網址',
52
+ video_html_code: '嵌入影片的原始碼',
53
+ file: '插入文件',
54
+ upload: '上傳',
55
+ download: '下載',
56
+ choose: '選擇',
57
+ or_choose: '或選擇',
58
+ drop_file_here: '將文件拖曳至此',
59
+ align_left: '將文字對齊至左側',
60
+ align_center: '將文字置中',
61
+ align_right: '將文字對齊至右側',
62
+ align_justify: '對齊至兩側',
63
+ horizontalrule: '插入水平線',
64
+ fullscreen: '全銀幕',
65
+ deleted: '刪除線',
66
+ anchor: '錨點',
67
+ link_new_tab: 'Open link in new tab',
68
+ underline: 'Underline',
69
+ alignment: 'Alignment',
70
+ filename: 'Name (optional)',
71
+ edit: 'Edit'
72
+ };
73
+ })( jQuery );
@@ -0,0 +1,61 @@
1
+ if (!RedactorPlugins) var RedactorPlugins = {};
2
+
3
+ RedactorPlugins.clips = function()
4
+ {
5
+ return {
6
+ init: function()
7
+ {
8
+ var items = [
9
+ ['Lorem ipsum...', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'],
10
+ ['Red label', '<span class="label-red">Label</span>']
11
+ ];
12
+
13
+ this.clips.template = $('<ul id="redactor-modal-list">');
14
+
15
+ for (var i = 0; i < items.length; i++)
16
+ {
17
+ var li = $('<li>');
18
+ var a = $('<a href="#" class="redactor-clip-link">').text(items[i][0]);
19
+ var div = $('<div class="redactor-clip">').hide().html(items[i][1]);
20
+
21
+ li.append(a);
22
+ li.append(div);
23
+ this.clips.template.append(li);
24
+ }
25
+
26
+ this.modal.addTemplate('clips', '<section>' + this.utils.getOuterHtml(this.clips.template) + '</section>');
27
+
28
+ var button = this.button.add('clips', 'Clips');
29
+ this.button.addCallback(button, this.clips.show);
30
+
31
+ },
32
+ show: function()
33
+ {
34
+ this.modal.load('clips', 'Insert Clips', 400);
35
+
36
+ this.modal.createCancelButton();
37
+
38
+ $('#redactor-modal-list').find('.redactor-clip-link').each($.proxy(this.clips.load, this));
39
+
40
+ this.selection.save();
41
+ this.modal.show();
42
+ },
43
+ load: function(i,s)
44
+ {
45
+ $(s).on('click', $.proxy(function(e)
46
+ {
47
+ e.preventDefault();
48
+ this.clips.insert($(s).next().html());
49
+
50
+ }, this));
51
+ },
52
+ insert: function(html)
53
+ {
54
+ this.selection.restore();
55
+ this.insert.html(html);
56
+ this.modal.close();
57
+ this.observe.load();
58
+ }
59
+ };
60
+ };
61
+
@@ -0,0 +1,76 @@
1
+ if (!RedactorPlugins) var RedactorPlugins = {};
2
+
3
+ (function($)
4
+ {
5
+ RedactorPlugins.fontcolor = function()
6
+ {
7
+ return {
8
+ init: function()
9
+ {
10
+ var colors = [
11
+ '#ffffff', '#000000', '#eeece1', '#1f497d', '#4f81bd', '#c0504d', '#9bbb59', '#8064a2', '#4bacc6', '#f79646', '#ffff00',
12
+ '#f2f2f2', '#7f7f7f', '#ddd9c3', '#c6d9f0', '#dbe5f1', '#f2dcdb', '#ebf1dd', '#e5e0ec', '#dbeef3', '#fdeada', '#fff2ca',
13
+ '#d8d8d8', '#595959', '#c4bd97', '#8db3e2', '#b8cce4', '#e5b9b7', '#d7e3bc', '#ccc1d9', '#b7dde8', '#fbd5b5', '#ffe694',
14
+ '#bfbfbf', '#3f3f3f', '#938953', '#548dd4', '#95b3d7', '#d99694', '#c3d69b', '#b2a2c7', '#b7dde8', '#fac08f', '#f2c314',
15
+ '#a5a5a5', '#262626', '#494429', '#17365d', '#366092', '#953734', '#76923c', '#5f497a', '#92cddc', '#e36c09', '#c09100',
16
+ '#7f7f7f', '#0c0c0c', '#1d1b10', '#0f243e', '#244061', '#632423', '#4f6128', '#3f3151', '#31859b', '#974806', '#7f6000'
17
+ ];
18
+
19
+ var buttons = ['fontcolor', 'backcolor'];
20
+
21
+ for (var i = 0; i < 2; i++)
22
+ {
23
+ var name = buttons[i];
24
+
25
+ var button = this.button.add(name, this.lang.get(name));
26
+ var $dropdown = this.button.addDropdown(button);
27
+
28
+ $dropdown.width(242);
29
+ this.fontcolor.buildPicker($dropdown, name, colors);
30
+
31
+ }
32
+ },
33
+ buildPicker: function($dropdown, name, colors)
34
+ {
35
+ var rule = (name == 'backcolor') ? 'background-color' : 'color';
36
+
37
+ var len = colors.length;
38
+ var self = this;
39
+ var func = function(e)
40
+ {
41
+ e.preventDefault();
42
+ self.fontcolor.set($(this).data('rule'), $(this).attr('rel'));
43
+ };
44
+
45
+ for (var z = 0; z < len; z++)
46
+ {
47
+ var color = colors[z];
48
+
49
+ var $swatch = $('<a rel="' + color + '" data-rule="' + rule +'" href="#" style="float: left; font-size: 0; border: 2px solid #fff; padding: 0; margin: 0; width: 22px; height: 22px;"></a>');
50
+ $swatch.css('background-color', color);
51
+ $swatch.on('click', func);
52
+
53
+ $dropdown.append($swatch);
54
+ }
55
+
56
+ var $elNone = $('<a href="#" style="display: block; clear: both; padding: 5px; font-size: 12px; line-height: 1;"></a>').html(this.lang.get('none'));
57
+ $elNone.on('click', $.proxy(function(e)
58
+ {
59
+ e.preventDefault();
60
+ this.fontcolor.remove(rule);
61
+
62
+ }, this));
63
+
64
+ $dropdown.append($elNone);
65
+ },
66
+ set: function(rule, type)
67
+ {
68
+ this.inline.format('span', 'style', rule + ': ' + type + ';');
69
+ },
70
+ remove: function(rule)
71
+ {
72
+ this.inline.removeStyleRule(rule);
73
+ }
74
+ };
75
+ };
76
+ })(jQuery);
@@ -0,0 +1,35 @@
1
+ if (!RedactorPlugins) var RedactorPlugins = {};
2
+
3
+ (function($)
4
+ {
5
+ RedactorPlugins.fontfamily = function()
6
+ {
7
+ return {
8
+ init: function ()
9
+ {
10
+ var fonts = [ 'Arial', 'Helvetica', 'Georgia', 'Times New Roman', 'Monospace' ];
11
+ var that = this;
12
+ var dropdown = {};
13
+
14
+ $.each(fonts, function(i, s)
15
+ {
16
+ dropdown['s' + i] = { title: s, func: function() { that.fontfamily.set(s); }};
17
+ });
18
+
19
+ dropdown.remove = { title: 'Remove Font Family', func: that.fontfamily.reset };
20
+
21
+ var button = this.button.add('fontfamily', 'Change Font Family');
22
+ this.button.addDropdown(button, dropdown);
23
+
24
+ },
25
+ set: function (value)
26
+ {
27
+ this.inline.format('span', 'style', 'font-family:' + value + ';');
28
+ },
29
+ reset: function()
30
+ {
31
+ this.inline.removeStyleRule('font-family');
32
+ }
33
+ };
34
+ };
35
+ })(jQuery);
@@ -0,0 +1,34 @@
1
+ if (!RedactorPlugins) var RedactorPlugins = {};
2
+
3
+ (function($)
4
+ {
5
+ RedactorPlugins.fontsize = function()
6
+ {
7
+ return {
8
+ init: function()
9
+ {
10
+ var fonts = [10, 11, 12, 14, 16, 18, 20, 24, 28, 30];
11
+ var that = this;
12
+ var dropdown = {};
13
+
14
+ $.each(fonts, function(i, s)
15
+ {
16
+ dropdown['s' + i] = { title: s + 'px', func: function() { that.fontsize.set(s); } };
17
+ });
18
+
19
+ dropdown.remove = { title: 'Remove Font Size', func: that.fontsize.reset };
20
+
21
+ var button = this.button.add('fontsize', 'Change Font Size');
22
+ this.button.addDropdown(button, dropdown);
23
+ },
24
+ set: function(size)
25
+ {
26
+ this.inline.format('span', 'style', 'font-size: ' + size + 'px;');
27
+ },
28
+ reset: function()
29
+ {
30
+ this.inline.removeStyleRule('font-size');
31
+ }
32
+ };
33
+ };
34
+ })(jQuery);
@@ -0,0 +1,123 @@
1
+ if (!RedactorPlugins) var RedactorPlugins = {};
2
+
3
+ (function($)
4
+ {
5
+ RedactorPlugins.fullscreen = function()
6
+ {
7
+ return {
8
+ init: function()
9
+ {
10
+ this.fullscreen.isOpen = false;
11
+
12
+ var button = this.button.add('fullscreen', 'Fullscreen');
13
+ this.button.addCallback(button, this.fullscreen.toggle);
14
+
15
+ if (this.opts.fullscreen) this.fullscreen.toggle();
16
+ },
17
+ enable: function()
18
+ {
19
+ this.button.changeIcon('fullscreen', 'normalscreen');
20
+ this.button.setActive('fullscreen');
21
+ this.fullscreen.isOpen = true;
22
+
23
+ if (this.opts.toolbarExternal)
24
+ {
25
+ this.fullscreen.toolcss = {};
26
+ this.fullscreen.boxcss = {};
27
+ this.fullscreen.toolcss.width = this.$toolbar.css('width');
28
+ this.fullscreen.toolcss.top = this.$toolbar.css('top');
29
+ this.fullscreen.toolcss.position = this.$toolbar.css('position');
30
+ this.fullscreen.boxcss.top = this.$box.css('top');
31
+ }
32
+
33
+ this.fullscreen.height = this.$editor.height();
34
+
35
+ if (this.opts.maxHeight) this.$editor.css('max-height', '');
36
+ if (this.opts.minHeight) this.$editor.css('min-height', '');
37
+
38
+ if (!this.$fullscreenPlaceholder) this.$fullscreenPlaceholder = $('<div/>');
39
+ this.$fullscreenPlaceholder.insertAfter(this.$box);
40
+
41
+ this.$box.appendTo(document.body);
42
+
43
+ this.$box.addClass('redactor-box-fullscreen');
44
+ $('body, html').css('overflow', 'hidden');
45
+
46
+ this.fullscreen.resize();
47
+ $(window).on('resize.redactor.fullscreen', $.proxy(this.fullscreen.resize, this));
48
+ $(document).scrollTop(0, 0);
49
+
50
+ $('.redactor-toolbar-tooltip').hide();
51
+ this.$editor.focus();
52
+ this.observe.load();
53
+ },
54
+ disable: function()
55
+ {
56
+ this.button.removeIcon('fullscreen', 'normalscreen');
57
+ this.button.setInactive('fullscreen');
58
+ this.fullscreen.isOpen = false;
59
+
60
+ $(window).off('resize.redactor.fullscreen');
61
+ $('body, html').css('overflow', '');
62
+
63
+ this.$box.insertBefore(this.$fullscreenPlaceholder);
64
+ this.$fullscreenPlaceholder.remove();
65
+
66
+ this.$box.removeClass('redactor-box-fullscreen').css({ width: 'auto', height: 'auto' });
67
+
68
+ this.code.sync();
69
+
70
+ if (this.opts.toolbarExternal)
71
+ {
72
+ this.$box.css('top', this.fullscreen.boxcss.top);
73
+ this.$toolbar.css({
74
+ 'width': this.fullscreen.toolcss.width,
75
+ 'top': this.fullscreen.toolcss.top,
76
+ 'position': this.fullscreen.toolcss.position
77
+ });
78
+ }
79
+
80
+ if (this.opts.minHeight) this.$editor.css('minHeight', this.opts.minHeight);
81
+ if (this.opts.maxHeight) this.$editor.css('maxHeight', this.opts.maxHeight);
82
+
83
+ $('.redactor-toolbar-tooltip').hide();
84
+ this.$editor.css('height', 'auto');
85
+ this.$editor.focus();
86
+ this.observe.load();
87
+ },
88
+ toggle: function()
89
+ {
90
+ if (this.fullscreen.isOpen)
91
+ {
92
+ this.fullscreen.disable();
93
+ }
94
+ else
95
+ {
96
+ this.fullscreen.enable();
97
+ }
98
+ },
99
+ resize: function()
100
+ {
101
+ if (!this.fullscreen.isOpen) return;
102
+
103
+ var toolbarHeight = this.$toolbar.height();
104
+
105
+ var height = $(window).height() - toolbarHeight - this.utils.normalize(this.$editor.css('padding-top')) - this.utils.normalize(this.$editor.css('padding-bottom'));
106
+ this.$box.width($(window).width()).height(height);
107
+
108
+ if (this.opts.toolbarExternal)
109
+ {
110
+ this.$toolbar.css({
111
+ 'top': '0px',
112
+ 'position': 'absolute',
113
+ 'width': '100%'
114
+ });
115
+
116
+ this.$box.css('top', toolbarHeight + 'px');
117
+ }
118
+
119
+ this.$editor.height(height);
120
+ }
121
+ };
122
+ };
123
+ })(jQuery);
@@ -0,0 +1,31 @@
1
+ if (!RedactorPlugins) var RedactorPlugins = {};
2
+
3
+ (function($)
4
+ {
5
+ RedactorPlugins.textdirection = function()
6
+ {
7
+ return {
8
+ init: function()
9
+ {
10
+ var that = this;
11
+ var dropdown = {};
12
+
13
+ dropdown.ltr = { title: 'Left to Right', func: that.textdirection.setLtr };
14
+ dropdown.rtl = { title: 'Right to Left', func: that.textdirection.setRtl};
15
+
16
+ var button = this.button.add('textdirection', 'Change Text Direction');
17
+ this.button.addDropdown(button, dropdown);
18
+ },
19
+ setRtl: function()
20
+ {
21
+ this.buffer.set();
22
+ this.block.setAttr('dir', 'rtl');
23
+ },
24
+ setLtr: function()
25
+ {
26
+ this.buffer.set();
27
+ this.block.removeAttr('dir');
28
+ }
29
+ };
30
+ };
31
+ })(jQuery);
@@ -0,0 +1,6 @@
1
+ //= require redactor-rails/plugins/clips
2
+ //= require redactor-rails/plugins/fontcolor
3
+ //= require redactor-rails/plugins/fontfamily
4
+ //= require redactor-rails/plugins/fontsize
5
+ //= require redactor-rails/plugins/fullscreen
6
+ //= require redactor-rails/plugins/textdirection