imperavi-rails 0.0.2.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +72 -0
  3. data/Rakefile +39 -0
  4. data/app/assets/images/imperavi_rails/imperavi/bg.png +0 -0
  5. data/app/assets/images/imperavi_rails/imperavi/bg_modal.png +0 -0
  6. data/app/assets/images/imperavi_rails/imperavi/close.png +0 -0
  7. data/app/assets/images/imperavi_rails/imperavi/fileicons/avi.png +0 -0
  8. data/app/assets/images/imperavi_rails/imperavi/fileicons/csv.png +0 -0
  9. data/app/assets/images/imperavi_rails/imperavi/fileicons/doc.png +0 -0
  10. data/app/assets/images/imperavi_rails/imperavi/fileicons/gif.png +0 -0
  11. data/app/assets/images/imperavi_rails/imperavi/fileicons/html.png +0 -0
  12. data/app/assets/images/imperavi_rails/imperavi/fileicons/jpg.png +0 -0
  13. data/app/assets/images/imperavi_rails/imperavi/fileicons/mov.png +0 -0
  14. data/app/assets/images/imperavi_rails/imperavi/fileicons/other.png +0 -0
  15. data/app/assets/images/imperavi_rails/imperavi/fileicons/pdf.png +0 -0
  16. data/app/assets/images/imperavi_rails/imperavi/fileicons/png.png +0 -0
  17. data/app/assets/images/imperavi_rails/imperavi/fileicons/ppt.png +0 -0
  18. data/app/assets/images/imperavi_rails/imperavi/fileicons/rar.png +0 -0
  19. data/app/assets/images/imperavi_rails/imperavi/fileicons/rtf.png +0 -0
  20. data/app/assets/images/imperavi_rails/imperavi/fileicons/txt.png +0 -0
  21. data/app/assets/images/imperavi_rails/imperavi/fileicons/xls.png +0 -0
  22. data/app/assets/images/imperavi_rails/imperavi/fileicons/zip.png +0 -0
  23. data/app/assets/images/imperavi_rails/imperavi/hover.png +0 -0
  24. data/app/assets/images/imperavi_rails/imperavi/icons.png +0 -0
  25. data/app/assets/images/imperavi_rails/imperavi/resizer.gif +0 -0
  26. data/app/assets/images/imperavi_rails/imperavi/separator.png +0 -0
  27. data/app/assets/images/imperavi_rails/imperavi/video_box.png +0 -0
  28. data/app/assets/javascripts/imperavi-rails/application.js +9 -0
  29. data/app/assets/javascripts/imperavi-rails/imperavi/redactor.js +1833 -0
  30. data/app/assets/stylesheets/imperavi-rails/application.css +7 -0
  31. data/app/assets/stylesheets/imperavi-rails/imperavi/imperavi-base.css.scss +150 -0
  32. data/app/assets/stylesheets/imperavi-rails/imperavi/imperavi.css.scss +150 -0
  33. data/app/assets/stylesheets/imperavi-rails/imperavi/redactor.css.scss +303 -0
  34. data/app/assets/stylesheets/imperavi-rails/imperavi/wym.css.scss +2 -0
  35. data/app/controllers/imperavi_rails/application_controller.rb +4 -0
  36. data/app/controllers/imperavi_rails/imperavi_controller.rb +46 -0
  37. data/app/helpers/imperavi_rails/imperavi_helper.rb +96 -0
  38. data/app/views/imperavi_rails/imperavi/file.html.erb +3 -0
  39. data/app/views/imperavi_rails/imperavi/file_edit.html.erb +11 -0
  40. data/app/views/imperavi_rails/imperavi/image.html.erb +27 -0
  41. data/app/views/imperavi_rails/imperavi/image_edit.html.erb +28 -0
  42. data/app/views/imperavi_rails/imperavi/language.js.erb +65 -0
  43. data/app/views/imperavi_rails/imperavi/link.html.erb +29 -0
  44. data/app/views/imperavi_rails/imperavi/table.html.erb +13 -0
  45. data/app/views/imperavi_rails/imperavi/toolbar.js.erb +69 -0
  46. data/app/views/imperavi_rails/imperavi/video.html.erb +13 -0
  47. data/app/views/imperavi_rails/layouts/imperavi-rails/application.html.erb +14 -0
  48. data/config/routes.rb +12 -0
  49. data/lib/imperavi-rails/engine.rb +5 -0
  50. data/lib/imperavi-rails/version.rb +3 -0
  51. data/lib/imperavi-rails.rb +8 -0
  52. data/lib/tasks/imperavi-rails_tasks.rake +4 -0
  53. data/spec/dummy/Rakefile +7 -0
  54. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  55. data/spec/dummy/app/assets/javascripts/pages.js +2 -0
  56. data/spec/dummy/app/assets/stylesheets/application.css.scss +35 -0
  57. data/spec/dummy/app/assets/stylesheets/pages.css +4 -0
  58. data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
  59. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  60. data/spec/dummy/app/controllers/images_controller.rb +40 -0
  61. data/spec/dummy/app/controllers/pages_controller.rb +83 -0
  62. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  63. data/spec/dummy/app/helpers/pages_helper.rb +2 -0
  64. data/spec/dummy/app/models/image.rb +18 -0
  65. data/spec/dummy/app/models/page.rb +4 -0
  66. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  67. data/spec/dummy/app/views/pages/_form.html.erb +40 -0
  68. data/spec/dummy/app/views/pages/edit.html.erb +6 -0
  69. data/spec/dummy/app/views/pages/index.html.erb +25 -0
  70. data/spec/dummy/app/views/pages/new.html.erb +5 -0
  71. data/spec/dummy/app/views/pages/show.html.erb +12 -0
  72. data/spec/dummy/config/application.rb +45 -0
  73. data/spec/dummy/config/boot.rb +10 -0
  74. data/spec/dummy/config/database.yml +25 -0
  75. data/spec/dummy/config/environment.rb +5 -0
  76. data/spec/dummy/config/environments/development.rb +30 -0
  77. data/spec/dummy/config/environments/production.rb +60 -0
  78. data/spec/dummy/config/environments/test.rb +39 -0
  79. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  80. data/spec/dummy/config/initializers/dragonfly.rb +8 -0
  81. data/spec/dummy/config/initializers/inflections.rb +10 -0
  82. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  83. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  84. data/spec/dummy/config/initializers/session_store.rb +8 -0
  85. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  86. data/spec/dummy/config/locales/en.yml +5 -0
  87. data/spec/dummy/config/routes.rb +8 -0
  88. data/spec/dummy/config.ru +4 -0
  89. data/spec/dummy/db/development.sqlite3 +0 -0
  90. data/spec/dummy/db/migrate/20120202062643_create_pages.rb +10 -0
  91. data/spec/dummy/db/migrate/20120202074740_create_images.rb +11 -0
  92. data/spec/dummy/db/schema.rb +31 -0
  93. data/spec/dummy/db/test.sqlite3 +0 -0
  94. data/spec/dummy/log/development.log +11285 -0
  95. data/spec/dummy/public/404.html +26 -0
  96. data/spec/dummy/public/422.html +26 -0
  97. data/spec/dummy/public/500.html +26 -0
  98. data/spec/dummy/public/favicon.ico +0 -0
  99. data/spec/dummy/script/rails +6 -0
  100. data/spec/test_helper.rb +10 -0
  101. metadata +281 -0
@@ -0,0 +1,96 @@
1
+ module ImperaviRails
2
+ module ImperaviHelper
3
+ include ActionView::Helpers::AssetTagHelper
4
+
5
+ def imperavi_stylesheet_path(source)
6
+ stylesheet_path("imperavi-rails/imperavi/#{source}")
7
+ end
8
+
9
+ def imperavi_javascript_path(source)
10
+ javascript_path("imperavi-rails/imperavi/#{source}")
11
+ end
12
+
13
+ def include_imperavi_stylesheet
14
+ stylesheet_link_tag imperavi_stylesheet_path('redactor')
15
+ end
16
+
17
+ def include_imperavi_javascript
18
+ javascript_include_tag imperavi_javascript_path('redactor')
19
+ end
20
+
21
+ def imperavi(element, options = {}, wrap = true)
22
+ result = %Q(
23
+ $(document).ready(function() {
24
+ $('##{element}').redactor(#{imperavi_options(options).to_json});
25
+ });
26
+ )
27
+
28
+ raw(wrap ? "<script>#{result}</script>" : result)
29
+ end
30
+
31
+ def imperavi_options(options)
32
+ imperavi_default_options.deep_merge!(options)
33
+ end
34
+
35
+ def imperavi_default_options
36
+ {
37
+ :air => false,
38
+ :autosave => false,
39
+ :interval => 20,
40
+ :resize => true,
41
+ :visual => true,
42
+ :focus => false,
43
+ :autoclear => true,
44
+ :removeClasses => false,
45
+ :removeStyles => true,
46
+ :convertLinks => true,
47
+ :autoformat => true,
48
+ :clearOnInit => false,
49
+ :overlay => true,
50
+ :fileUploadCallback => false,
51
+ :imageUploadCallback => false,
52
+
53
+ # Paths to various handlers
54
+ :paths => {
55
+ # Editor css
56
+ :stylesheets => [imperavi_stylesheet_path('wym')],
57
+
58
+ # Toolbar
59
+ :toolbar => imperavi_rails.toolbar_path(:format => :js),
60
+
61
+ # Interface translations
62
+ :language => imperavi_rails.language_path(:format => :js),
63
+
64
+ # Typograf
65
+ :typograf => imperavi_rails.typograf_path,
66
+
67
+ # Dialogs
68
+ # TODO Add dialogs sizes
69
+ :dialogs => {
70
+ :file => imperavi_rails.file_path,
71
+ :fileEdit => imperavi_rails.file_edit_path,
72
+ :image => imperavi_rails.image_path,
73
+ :imageEdit => imperavi_rails.image_edit_path,
74
+ :link => imperavi_rails.link_path,
75
+ :table => imperavi_rails.table_path,
76
+ :video => imperavi_rails.video_path,
77
+ },
78
+
79
+ # Images
80
+ :images => {
81
+ :upload => '',#'/imperavi/images',
82
+ :download => '',#'/imperavi/images/777',
83
+ :list => '',#'/imperavi/images.json'
84
+ },
85
+
86
+ # Files
87
+ :files => {
88
+ :upload => '',#'/imperavi/files',
89
+ :download => '',#'/imperavi/files/777', # /tests/file_download.php?file=
90
+ :remove => '',#'/imperavi/files/777' # /tests/file_delete.php?delete=
91
+ }
92
+ }
93
+ }
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,3 @@
1
+ <form id="redactorUploadFileForm" method="post" action="" enctype="multipart/form-data">
2
+ <input type="file" id="redactor_file" name="file" />
3
+ </form>
@@ -0,0 +1,11 @@
1
+ <form id="redactorUploadFileForm" method="post" action="" enctype="multipart/form-data">
2
+
3
+ <p><input style="width: 99%;" name="file" id="file" /></p>
4
+
5
+
6
+ <p>
7
+ <input type="button" name="download" id="redactorFileDownloadBtn" value="%RLANG.download%" />&nbsp;&nbsp;
8
+ <input type="button" name="delete" id="redactorFileDeleteBtn" value="%RLANG._delete%" />&nbsp;&nbsp;&nbsp;&nbsp;
9
+ <input type="button" name="" onclick="redactorActive.modalClose();" value="%RLANG.cancel%" />
10
+ </p>
11
+ </form>
@@ -0,0 +1,27 @@
1
+ <form id="redactorInsertImageForm" method="post" action="" enctype="multipart/form-data">
2
+ <input name="utf8" type="hidden" value="&#x2713;" />
3
+
4
+ <ul id="redactor_tabs">
5
+ <li><a href="javascript:void(null);" onclick="showRedactorTabs(this, 1);" class="redactor_tabs_act">%RLANG.choose%</a></li>
6
+ <li><a href="javascript:void(null);" onclick="showRedactorTabs(this, 2);">%RLANG.upload%</a></li>
7
+ <li><a href="javascript:void(null);" onclick="showRedactorTabs(this, 3);">%RLANG.link%</a></li>
8
+ </ul>
9
+ <div id="redactor_tabs1" class="redactor_tabs">
10
+ <div id="redactor_image_box"></div>
11
+ </div>
12
+ <div id="redactor_tabs2" class="redactor_tabs" style="display: none;">
13
+ <input type="file" id="redactor_file" name="image[image]" />
14
+ </div>
15
+ <div id="redactor_tabs3" class="redactor_tabs" style="display: none;">
16
+ <table class="redactor_ruler" width="100%">
17
+ <tr>
18
+ <td class="small">%RLANG.image_web_link%</td>
19
+ <td></td>
20
+ </tr>
21
+ <tr>
22
+ <td width="100%"><input name="image[image]" id="redactor_file_link" style="width: 99%" /></td>
23
+ <td><input type="button" name="upload" id="redactorUploadBtn" value="%RLANG.insert%" /></td>
24
+ </tr>
25
+ </table>
26
+ </div>
27
+ </form>
@@ -0,0 +1,28 @@
1
+ <form id="redactorInsertImageForm" method="post" action="" enctype="multipart/form-data">
2
+ <table class="redactor_ruler">
3
+ <tr>
4
+ <td colspan="2" style="padding-bottom: 15px;"><a href="" target="_blank" id="redactor_image_edit_src">%RLANG.image_view%</a></td>
5
+ </tr>
6
+ <tr>
7
+ <td nowrap class="small">%RLANG.title%</td>
8
+ <td><input id="redactor_file_alt" size="20" /></td>
9
+ </tr>
10
+ <tr>
11
+ <td nowrap class="small">%RLANG.image_position%</td>
12
+ <td width="100%">
13
+ <select id="redactor_form_image_align">
14
+ <option value="0">%RLANG.none%</option>
15
+ <option value="left">%RLANG.left%</option>
16
+ <option value="right">%RLANG.right%</option>
17
+ </select>
18
+ </td>
19
+ </tr>
20
+ </table>
21
+
22
+
23
+ <p>
24
+ <input type="button" name="save" id="redactorSaveBtn" value="%RLANG.save%" />&nbsp;&nbsp;
25
+ <input type="button" name="" id="redactor_image_edit_delete" value="%RLANG._delete%" />&nbsp;&nbsp;
26
+ <input type="button" name="" onclick="redactorActive.modalClose();" value="%RLANG.cancel%" />
27
+ </p>
28
+ </form>
@@ -0,0 +1,65 @@
1
+ var RLANG = {
2
+ html: 'Код',
3
+ video: 'Видео',
4
+ image: 'Изображение',
5
+ table: 'Таблица',
6
+ link: 'Ссылка',
7
+ link_insert: 'Вставить ссылку ...',
8
+ unlink: 'Удалить ссылку',
9
+ styles: 'Стили',
10
+ paragraph: 'Обычный текст',
11
+ quote: 'Цитата',
12
+ code: 'Код',
13
+ header1: 'Заголовок 1',
14
+ header2: 'Заголовок 2',
15
+ format: 'Формат',
16
+ bold: 'Полужирный',
17
+ italic: 'Наклонный',
18
+ superscript: 'Надстрочный',
19
+ strikethrough: 'Зачеркнутый',
20
+ fontcolor: 'Цвет текста',
21
+ backcolor: 'Заливка текста',
22
+ removeformat: 'Удалить формат',
23
+ cleanstyles: 'Удалить стили MS Word',
24
+ lists: 'Списки',
25
+ unorderedlist: 'Обычный список',
26
+ orderedlist: 'Нумерованный список',
27
+ outdent: 'Уменьшить отступ',
28
+ indent: 'Увеличить отступ',
29
+ redo: 'Повтор',
30
+ undo: 'Отмена',
31
+ cut: 'Кат / Врезка',
32
+ cancel: 'Отменить',
33
+ insert: 'Вставить',
34
+ save: 'Сохранить',
35
+ _delete: 'Удалить',
36
+ insert_table: 'Вставить таблицу',
37
+ insert_row_above: 'Добавить строку сверху',
38
+ insert_row_below: 'Добавить строку снизу',
39
+ insert_column_left: 'Добавить столбец слева',
40
+ insert_column_right: 'Добавить столбец справа',
41
+ delete_column: 'Удалить столбец',
42
+ delete_row: 'Удалить строку',
43
+ delete_table: 'Удалить таблицу',
44
+ Rows: 'Строки',
45
+ Columns: 'Столбцы',
46
+ add_head: 'Добавить заголовок',
47
+ delete_head: 'Удалить заголовок',
48
+ title: 'Подсказка',
49
+ image_view: 'Скачать изображение',
50
+ image_position: 'Обтекание текстом',
51
+ none: 'нет',
52
+ left: 'слева',
53
+ right: 'справа',
54
+ image_web_link: 'Cсылка на изображение',
55
+ text: 'Текст',
56
+ mailto: 'Эл. почта',
57
+ web: 'URL',
58
+ video_html_code: 'Код видео ролика',
59
+ file: 'Файл',
60
+ upload: 'Загрузить',
61
+ download: 'Скачать',
62
+ choose: 'Выбрать',
63
+ or_choose: 'Или выберите',
64
+ drop_file_here: 'Перетащите файл сюда'
65
+ };
@@ -0,0 +1,29 @@
1
+ <form id="redactorInsertLinkForm">
2
+ <table class="redactor_ruler" style="margin-bottom: 6px;">
3
+ <tr>
4
+ <td style="white-space: nowrap;"><input value="link" name="redactor_link" id="redactor_link_id_url" type="radio" onclick="$('#redactor_link_url_name').text('URL')" checked="checked">&nbsp;<label for="redactor_link_id_url">%RLANG.web%</label></td>
5
+ <td width="100%"><input value="email" name="redactor_link" id="redactor_link_id_email" onclick="$('#redactor_link_url_name').text('%RLANG.mailto%')" type="radio">&nbsp;<label for="redactor_link_id_email">%RLANG.mailto%</label></td>
6
+ </tr>
7
+ </table>
8
+
9
+ <table class="redactor_ruler">
10
+ <tr>
11
+ <td nowrap id="redactor_link_url_name">URL</td>
12
+ <td width="100%"><input name="redactor_link_url" id="redactor_link_url" style="width: 99%;" /></td>
13
+ </tr>
14
+ <tr>
15
+ <td>%RLANG.text%</td>
16
+ <td><input name="redactor_link_text" id="redactor_link_text" style="width: 99%;" /></td>
17
+ </tr>
18
+ <tr>
19
+ <td>%RLANG.title%</td>
20
+ <td><input name="redactor_link_title" id="redactor_link_title" style="width: 99%;" /></td>
21
+ </tr>
22
+ </table>
23
+
24
+
25
+ </form>
26
+
27
+
28
+ <input type="button" name="" id="" value="%RLANG.insert%" onclick="redactorActive.insertLink();" />&nbsp;&nbsp;
29
+ <input type="button" name="" onclick="redactorActive.modalClose();" value="%RLANG.cancel%" />
@@ -0,0 +1,13 @@
1
+
2
+ <table class="redactor_ruler" width="99%">
3
+ <tr>
4
+ <td>%RLANG.Rows%:</td>
5
+ <td><input size="5" value="2" id="redactor_table_rows" /></td>
6
+ <td>%RLANG.Columns%:</td>
7
+ <td><input size="5" value="3" id="redactor_table_columns" /></td>
8
+ </tr>
9
+ </table>
10
+
11
+
12
+ <p><input type="button" name="" id="" value="%RLANG.insert%" onclick="redactorActive.insertTable();" />&nbsp;&nbsp;
13
+ <input type="button" name="" onclick="redactorActive.modalClose();" value="%RLANG.cancel%" /></p>
@@ -0,0 +1,69 @@
1
+ var RTOOLBAR = {
2
+ html: { name: 'html', title: RLANG.html, func: 'toggle' },
3
+ styles:
4
+ {
5
+ name: 'styles', title: RLANG.styles, func: 'show',
6
+ dropdown:
7
+ {
8
+ p: {exec: 'formatblock', name: '<p>', title: RLANG.paragraph},
9
+ blockquote: {exec: 'formatblock', name: '<blockquote>', title: RLANG.quote},
10
+ code: {exec: 'formatblock', name: '<pre>', title: RLANG.code},
11
+ h2: {exec: 'formatblock', name: '<h2>', title: RLANG.header1, style: 'font-size: 18px;'},
12
+ h3: {exec: 'formatblock', name: '<h3>', title: RLANG.header2, style: 'font-size: 14px; font-weight: bold;'}
13
+ }
14
+ },
15
+ format:
16
+ {
17
+ name: 'format', title: RLANG.format, func: 'show',
18
+ dropdown:
19
+ {
20
+ bold: {exec: 'bold', name: 'bold', title: RLANG.bold, style: 'font-weight: bold;'},
21
+ italic: {exec: 'italic', name: 'italic', title: RLANG.italic, style: 'font-style: italic;'},
22
+ superscript: {exec: 'superscript', name: 'superscript', title: RLANG.superscript},
23
+ strikethrough: {exec: 'StrikeThrough', name: 'StrikeThrough', title: RLANG.strikethrough, style: 'text-decoration: line-through !important;'},
24
+ removeformat: {exec: 'removeformat', name: 'removeformat', title: RLANG.removeformat}
25
+ }
26
+ },
27
+ lists:
28
+ {
29
+ name: 'lists', title: RLANG.lists, func: 'show',
30
+ dropdown:
31
+ {
32
+ ul: {exec: 'insertunorderedlist', name: 'insertunorderedlist', title: '&bull; ' + RLANG.unorderedlist},
33
+ ol: {exec: 'insertorderedlist', name: 'insertorderedlist', title: '1. ' + RLANG.orderedlist},
34
+ outdent: {exec: 'outdent', name: 'outdent', title: '< ' + RLANG.outdent},
35
+ indent: {exec: 'indent', name: 'indent', title: '> ' + RLANG.indent}
36
+ }
37
+ },
38
+ image: { name: 'image', title: RLANG.image, func: 'showImage' },
39
+ table:
40
+ {
41
+ name: 'table', title: RLANG.table, func: 'show',
42
+ dropdown:
43
+ {
44
+ insert_table: { name: 'insert_table', title: RLANG.insert_table, func: 'showTable' },
45
+ separator_drop1: { name: 'separator' },
46
+ insert_row_above: { name: 'insert_row_above', title: RLANG.insert_row_above, func: 'insertRowAbove' },
47
+ insert_row_below: { name: 'insert_row_below', title: RLANG.insert_row_below, func: 'insertRowBelow' },
48
+ insert_column_left: { name: 'insert_column_left', title: RLANG.insert_column_left, func: 'insertColumnLeft' },
49
+ insert_column_right: { name: 'insert_column_right', title: RLANG.insert_column_right, func: 'insertColumnRight' },
50
+ separator_drop2: { name: 'separator' },
51
+ add_head: { name: 'add_head', title: RLANG.add_head, func: 'addHead' },
52
+ delete_head: { name: 'delete_head', title: RLANG.delete_head, func: 'deleteHead' },
53
+ separator_drop3: { name: 'separator' },
54
+ delete_column: { name: 'insert_table', title: RLANG.delete_column, func: 'deleteColumn' },
55
+ delete_row: { name: 'delete_row', title: RLANG.delete_row, func: 'deleteRow' },
56
+ delete_table: { name: 'delete_table', title: RLANG.delete_table, func: 'deleteTable' }
57
+ }
58
+ },
59
+ video: { name: 'video', title: RLANG.video, func: 'showVideo' },
60
+ link:
61
+ {
62
+ name: 'link', title: RLANG.link, func: 'show',
63
+ dropdown:
64
+ {
65
+ link: {name: 'link', title: RLANG.link_insert, func: 'showLink'},
66
+ unlink: {exec: 'unlink', name: 'unlink', title: RLANG.unlink}
67
+ }
68
+ }
69
+ };
@@ -0,0 +1,13 @@
1
+ <form id="redactorInsertVideoForm">
2
+ <div style="font-size: 11px; margin-bottom: 3px;">%RLANG.video_html_code%</div>
3
+ <table class="redactor_ruler" style="width: 99%;">
4
+ <tr>
5
+ <textarea name="redactor_insert_video_area" id="redactor_insert_video_area" style="width: 99%; height: 160px;"></textarea>
6
+ </tr>
7
+ </table>
8
+ </form>
9
+
10
+
11
+ <p><input type="button" name="" id="" value="%RLANG.insert%" onclick="redactorActive.insertVideo();" />&nbsp;&nbsp;
12
+ <input type="button" name="" onclick="redactorActive.modalClose();" value="%RLANG.cancel%" /></p>
13
+
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>ImperaviRails</title>
5
+ <%= stylesheet_link_tag "imperavi-rails/application" %>
6
+ <%= javascript_include_tag "imperavi-rails/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,12 @@
1
+ ImperaviRails::Engine.routes.draw do
2
+ get '/file' => 'imperavi#file', :as => :file
3
+ get '/file_edit' => 'imperavi#file_edit', :as => :file_edit
4
+ get '/image' => 'imperavi#image', :as => :image
5
+ get '/image_edit' => 'imperavi#image_edit', :as => :image_edit
6
+ get '/link' => 'imperavi#link', :as => :link
7
+ get '/table' => 'imperavi#table', :as => :table
8
+ get '/video' => 'imperavi#video', :as => :video
9
+ get '/toolbar' => 'imperavi#toolbar', :as => :toolbar
10
+ get '/language' => 'imperavi#language', :as => :language
11
+ get '/typograf' => 'imperavi#typograf', :as => :typograf
12
+ end
@@ -0,0 +1,5 @@
1
+ module ImperaviRails
2
+ class Engine < Rails::Engine
3
+ isolate_namespace ImperaviRails
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module ImperaviRails
2
+ VERSION = "0.0.2.beta"
3
+ end
@@ -0,0 +1,8 @@
1
+ require "imperavi-rails/engine"
2
+
3
+ module ImperaviRails
4
+ if defined?(ActionController)
5
+ require File.join(File.dirname(__FILE__), '..', 'app', 'helpers', 'imperavi_rails', 'imperavi_helper')
6
+ ActionController::Base.helper(ImperaviHelper)
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :imperavi-rails do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,9 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.
6
+ //
7
+ //= require jquery
8
+ //= require jquery_ujs
9
+ //= require_tree .
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,35 @@
1
+ /*
2
+ * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
+ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
+ * the top of the compiled file, but it's generally better to create a new file per style scope.
5
+ *= require_self
6
+ *= require_tree .
7
+ */
8
+
9
+ @import "imperavi-rails/imperavi/imperavi-base";
10
+
11
+ body {
12
+ width: 700px;
13
+ margin: 0 auto;
14
+
15
+ article {
16
+ overflow: hidden;
17
+ @include imperavi-base;
18
+
19
+ p, div {
20
+ border: 0;
21
+ }
22
+
23
+ p {
24
+ padding: 0;
25
+ margin: 0 0 1.5em 0;
26
+ }
27
+ }
28
+
29
+ form {
30
+ textarea {
31
+ width: 700px;
32
+ height: 600px;
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,56 @@
1
+ body { background-color: #fff; color: #333; }
2
+
3
+ body, p, ol, ul, td {
4
+ font-family: verdana, arial, helvetica, sans-serif;
5
+ font-size: 13px;
6
+ line-height: 18px;
7
+ }
8
+
9
+ pre {
10
+ background-color: #eee;
11
+ padding: 10px;
12
+ font-size: 11px;
13
+ }
14
+
15
+ a { color: #000; }
16
+ a:visited { color: #666; }
17
+ a:hover { color: #fff; background-color:#000; }
18
+
19
+ div.field, div.actions {
20
+ margin-bottom: 10px;
21
+ }
22
+
23
+ #notice {
24
+ color: green;
25
+ }
26
+
27
+ .field_with_errors {
28
+ padding: 2px;
29
+ background-color: red;
30
+ display: table;
31
+ }
32
+
33
+ #error_explanation {
34
+ width: 450px;
35
+ border: 2px solid red;
36
+ padding: 7px;
37
+ padding-bottom: 0;
38
+ margin-bottom: 20px;
39
+ background-color: #f0f0f0;
40
+ }
41
+
42
+ #error_explanation h2 {
43
+ text-align: left;
44
+ font-weight: bold;
45
+ padding: 5px 5px 5px 15px;
46
+ font-size: 12px;
47
+ margin: -7px;
48
+ margin-bottom: 0px;
49
+ background-color: #c00;
50
+ color: #fff;
51
+ }
52
+
53
+ #error_explanation ul li {
54
+ font-size: 12px;
55
+ list-style: square;
56
+ }
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ #protect_from_forgery
3
+ end
@@ -0,0 +1,40 @@
1
+ class ImagesController < ApplicationController
2
+ respond_to :html, :json
3
+
4
+ def index
5
+ @images = Image.scoped
6
+
7
+ respond_with @images do |format|
8
+ format.json { render :json => json_images(@images), :layout => false }
9
+ end
10
+ end
11
+
12
+ def create
13
+ @image = Image.new(params[:image])
14
+
15
+ if @image.save
16
+ render :text => view_context.image_tag(resize_image(@image, 300, 250).url, :alt => '')
17
+ else
18
+ render :json => @image.errors
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def json_images(images)
25
+ json_images = []
26
+
27
+ images.each do |image|
28
+ json_images << {
29
+ :thumb => resize_image(image, 120, 100).url,
30
+ :image => resize_image(image, 300, 250).url
31
+ }
32
+ end
33
+
34
+ json_images
35
+ end
36
+
37
+ def resize_image(image, width = 100, height = 100, gravity = :c)
38
+ image.image.process(:resize_and_crop, :width => width, :height => height, :gravity => gravity.to_s)
39
+ end
40
+ end