imperavi-rails 0.0.2.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +72 -0
- data/Rakefile +39 -0
- data/app/assets/images/imperavi_rails/imperavi/bg.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/bg_modal.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/close.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/avi.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/csv.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/doc.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/gif.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/html.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/jpg.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/mov.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/other.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/pdf.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/png.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/ppt.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/rar.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/rtf.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/txt.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/xls.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/fileicons/zip.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/hover.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/icons.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/resizer.gif +0 -0
- data/app/assets/images/imperavi_rails/imperavi/separator.png +0 -0
- data/app/assets/images/imperavi_rails/imperavi/video_box.png +0 -0
- data/app/assets/javascripts/imperavi-rails/application.js +9 -0
- data/app/assets/javascripts/imperavi-rails/imperavi/redactor.js +1833 -0
- data/app/assets/stylesheets/imperavi-rails/application.css +7 -0
- data/app/assets/stylesheets/imperavi-rails/imperavi/imperavi-base.css.scss +150 -0
- data/app/assets/stylesheets/imperavi-rails/imperavi/imperavi.css.scss +150 -0
- data/app/assets/stylesheets/imperavi-rails/imperavi/redactor.css.scss +303 -0
- data/app/assets/stylesheets/imperavi-rails/imperavi/wym.css.scss +2 -0
- data/app/controllers/imperavi_rails/application_controller.rb +4 -0
- data/app/controllers/imperavi_rails/imperavi_controller.rb +46 -0
- data/app/helpers/imperavi_rails/imperavi_helper.rb +96 -0
- data/app/views/imperavi_rails/imperavi/file.html.erb +3 -0
- data/app/views/imperavi_rails/imperavi/file_edit.html.erb +11 -0
- data/app/views/imperavi_rails/imperavi/image.html.erb +27 -0
- data/app/views/imperavi_rails/imperavi/image_edit.html.erb +28 -0
- data/app/views/imperavi_rails/imperavi/language.js.erb +65 -0
- data/app/views/imperavi_rails/imperavi/link.html.erb +29 -0
- data/app/views/imperavi_rails/imperavi/table.html.erb +13 -0
- data/app/views/imperavi_rails/imperavi/toolbar.js.erb +69 -0
- data/app/views/imperavi_rails/imperavi/video.html.erb +13 -0
- data/app/views/imperavi_rails/layouts/imperavi-rails/application.html.erb +14 -0
- data/config/routes.rb +12 -0
- data/lib/imperavi-rails/engine.rb +5 -0
- data/lib/imperavi-rails/version.rb +3 -0
- data/lib/imperavi-rails.rb +8 -0
- data/lib/tasks/imperavi-rails_tasks.rake +4 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/javascripts/pages.js +2 -0
- data/spec/dummy/app/assets/stylesheets/application.css.scss +35 -0
- data/spec/dummy/app/assets/stylesheets/pages.css +4 -0
- data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/images_controller.rb +40 -0
- data/spec/dummy/app/controllers/pages_controller.rb +83 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/helpers/pages_helper.rb +2 -0
- data/spec/dummy/app/models/image.rb +18 -0
- data/spec/dummy/app/models/page.rb +4 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/pages/_form.html.erb +40 -0
- data/spec/dummy/app/views/pages/edit.html.erb +6 -0
- data/spec/dummy/app/views/pages/index.html.erb +25 -0
- data/spec/dummy/app/views/pages/new.html.erb +5 -0
- data/spec/dummy/app/views/pages/show.html.erb +12 -0
- data/spec/dummy/config/application.rb +45 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +30 -0
- data/spec/dummy/config/environments/production.rb +60 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/dragonfly.rb +8 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +8 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20120202062643_create_pages.rb +10 -0
- data/spec/dummy/db/migrate/20120202074740_create_images.rb +11 -0
- data/spec/dummy/db/schema.rb +31 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +11285 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/test_helper.rb +10 -0
- 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,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%" />
|
8
|
+
<input type="button" name="delete" id="redactorFileDeleteBtn" value="%RLANG._delete%" />
|
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="✓" />
|
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%" />
|
25
|
+
<input type="button" name="" id="redactor_image_edit_delete" value="%RLANG._delete%" />
|
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"> <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"> <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();" />
|
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();" />
|
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: '• ' + 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();" />
|
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
|
data/spec/dummy/Rakefile
ADDED
@@ -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,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,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,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
|