typo 4.1 → 4.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. data/Rakefile +1 -1
  2. data/TODO-4.2 +14 -0
  3. data/TODO.MULTIUSERS +45 -0
  4. data/app/controllers/admin/base_controller.rb +18 -0
  5. data/app/controllers/admin/general_controller.rb +14 -0
  6. data/app/controllers/application.rb +2 -1
  7. data/app/controllers/articles_controller.rb +18 -21
  8. data/app/helpers/admin/base_helper.rb +4 -4
  9. data/app/helpers/admin/feedback_helper.rb +3 -3
  10. data/app/helpers/application_helper.rb +2 -6
  11. data/app/helpers/sidebar_helper.rb +2 -2
  12. data/app/models/blog.rb +9 -1
  13. data/app/models/category.rb +9 -9
  14. data/app/models/comment.rb +1 -1
  15. data/app/models/content_state/presumed_ham.rb +2 -2
  16. data/app/models/resource.rb +2 -0
  17. data/app/views/admin/categories/_categories.rhtml +10 -6
  18. data/app/views/admin/categories/edit.rhtml +3 -1
  19. data/app/views/admin/comments/_form.rhtml +3 -3
  20. data/app/views/admin/comments/list.rhtml +7 -5
  21. data/app/views/admin/comments/new.rhtml +3 -1
  22. data/app/views/admin/comments/show.rhtml +3 -1
  23. data/app/views/admin/content/_articles.rhtml +1 -1
  24. data/app/views/admin/content/_form.rhtml +4 -2
  25. data/app/views/admin/content/new.rhtml +1 -0
  26. data/app/views/admin/content/preview.rhtml +8 -8
  27. data/app/views/admin/feedback/_item.rhtml +3 -1
  28. data/app/views/admin/feedback/list.rhtml +4 -4
  29. data/app/views/admin/general/index.rhtml +14 -1
  30. data/app/views/admin/pages/_form.rhtml +1 -1
  31. data/app/views/admin/pages/destroy.rhtml +1 -1
  32. data/app/views/admin/pages/new.rhtml +1 -0
  33. data/app/views/admin/shared/_edit.rhtml +2 -2
  34. data/app/views/layouts/administration.rhtml +5 -2
  35. data/app/views/layouts/minimal.rhtml +134 -2
  36. data/config/boot.rb +1 -1
  37. data/config/environment.rb +11 -3
  38. data/config/environments/test.rb +0 -7
  39. data/config/routes.rb +3 -0
  40. data/db/migrate/004_add_sidebars.rb +21 -3
  41. data/db/migrate/056_create_notifications.rb +1 -1
  42. data/db/migrate/062_add_sitealizer_plugin.rb +18 -0
  43. data/db/schema.mysql-v3.sql +217 -0
  44. data/db/schema.mysql.sql +31 -5
  45. data/db/schema.postgresql.sql +31 -6
  46. data/db/schema.rb +17 -7
  47. data/db/schema.sqlite.sql +31 -6
  48. data/db/schema.sqlserver.sql +32 -6
  49. data/db/schema_version +1 -1
  50. data/lang/de_DE.rb +493 -0
  51. data/lang/fr_FR.rb +28 -4
  52. data/lang/ro_RO.rb +554 -0
  53. data/lib/tasks/release.rake +7 -7
  54. data/lib/typo_version.rb +1 -1
  55. data/public/images/sitealizer/bar.gif +0 -0
  56. data/public/images/sitealizer/uv.png +0 -0
  57. data/public/images/sitealizer/vh.png +0 -0
  58. data/public/javascripts/tiny_mce/blank.htm +9 -0
  59. data/public/javascripts/tiny_mce/langs/en.js +41 -0
  60. data/public/javascripts/tiny_mce/license.txt +504 -0
  61. data/public/javascripts/tiny_mce/themes/advanced/about.htm +52 -0
  62. data/public/javascripts/tiny_mce/themes/advanced/anchor.htm +33 -0
  63. data/public/javascripts/tiny_mce/themes/advanced/charmap.htm +53 -0
  64. data/public/javascripts/tiny_mce/themes/advanced/color_picker.htm +13 -0
  65. data/public/javascripts/tiny_mce/themes/advanced/css/editor_content.css +58 -0
  66. data/public/javascripts/tiny_mce/themes/advanced/css/editor_popup.css +331 -0
  67. data/public/javascripts/tiny_mce/themes/advanced/css/editor_ui.css +97 -0
  68. data/public/javascripts/tiny_mce/themes/advanced/docs/en/about.htm +31 -0
  69. data/public/javascripts/tiny_mce/themes/advanced/docs/en/common_buttons.htm +162 -0
  70. data/public/javascripts/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm +45 -0
  71. data/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif +0 -0
  72. data/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif +0 -0
  73. data/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_link_window.gif +0 -0
  74. data/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif +0 -0
  75. data/public/javascripts/tiny_mce/themes/advanced/docs/en/index.htm +27 -0
  76. data/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm +32 -0
  77. data/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_image_button.htm +65 -0
  78. data/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_link_button.htm +33 -0
  79. data/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_table_button.htm +71 -0
  80. data/public/javascripts/tiny_mce/themes/advanced/docs/en/style.css +28 -0
  81. data/public/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
  82. data/public/javascripts/tiny_mce/themes/advanced/editor_template_src.js +1534 -0
  83. data/public/javascripts/tiny_mce/themes/advanced/image.htm +100 -0
  84. data/public/javascripts/tiny_mce/themes/advanced/images/anchor.gif +0 -0
  85. data/public/javascripts/tiny_mce/themes/advanced/images/anchor_symbol.gif +0 -0
  86. data/public/javascripts/tiny_mce/themes/advanced/images/backcolor.gif +0 -0
  87. data/public/javascripts/tiny_mce/themes/advanced/images/bold.gif +0 -0
  88. data/public/javascripts/tiny_mce/themes/advanced/images/bold_de_se.gif +0 -0
  89. data/public/javascripts/tiny_mce/themes/advanced/images/bold_es.gif +0 -0
  90. data/public/javascripts/tiny_mce/themes/advanced/images/bold_fr.gif +0 -0
  91. data/public/javascripts/tiny_mce/themes/advanced/images/bold_ru.gif +0 -0
  92. data/public/javascripts/tiny_mce/themes/advanced/images/bold_tw.gif +0 -0
  93. data/public/javascripts/tiny_mce/themes/advanced/images/browse.gif +0 -0
  94. data/public/javascripts/tiny_mce/themes/advanced/images/bullist.gif +0 -0
  95. data/public/javascripts/tiny_mce/themes/advanced/images/button_menu.gif +0 -0
  96. data/public/javascripts/tiny_mce/themes/advanced/images/buttons.gif +0 -0
  97. data/public/javascripts/tiny_mce/themes/advanced/images/cancel_button_bg.gif +0 -0
  98. data/public/javascripts/tiny_mce/themes/advanced/images/charmap.gif +0 -0
  99. data/public/javascripts/tiny_mce/themes/advanced/images/cleanup.gif +0 -0
  100. data/public/javascripts/tiny_mce/themes/advanced/images/close.gif +0 -0
  101. data/public/javascripts/tiny_mce/themes/advanced/images/code.gif +0 -0
  102. data/public/javascripts/tiny_mce/themes/advanced/images/color.gif +0 -0
  103. data/public/javascripts/tiny_mce/themes/advanced/images/copy.gif +0 -0
  104. data/public/javascripts/tiny_mce/themes/advanced/images/custom_1.gif +0 -0
  105. data/public/javascripts/tiny_mce/themes/advanced/images/cut.gif +0 -0
  106. data/public/javascripts/tiny_mce/themes/advanced/images/forecolor.gif +0 -0
  107. data/public/javascripts/tiny_mce/themes/advanced/images/help.gif +0 -0
  108. data/public/javascripts/tiny_mce/themes/advanced/images/hr.gif +0 -0
  109. data/public/javascripts/tiny_mce/themes/advanced/images/image.gif +0 -0
  110. data/public/javascripts/tiny_mce/themes/advanced/images/indent.gif +0 -0
  111. data/public/javascripts/tiny_mce/themes/advanced/images/insert_button_bg.gif +0 -0
  112. data/public/javascripts/tiny_mce/themes/advanced/images/italic.gif +0 -0
  113. data/public/javascripts/tiny_mce/themes/advanced/images/italic_de_se.gif +0 -0
  114. data/public/javascripts/tiny_mce/themes/advanced/images/italic_es.gif +0 -0
  115. data/public/javascripts/tiny_mce/themes/advanced/images/italic_ru.gif +0 -0
  116. data/public/javascripts/tiny_mce/themes/advanced/images/italic_tw.gif +0 -0
  117. data/public/javascripts/tiny_mce/themes/advanced/images/justifycenter.gif +0 -0
  118. data/public/javascripts/tiny_mce/themes/advanced/images/justifyfull.gif +0 -0
  119. data/public/javascripts/tiny_mce/themes/advanced/images/justifyleft.gif +0 -0
  120. data/public/javascripts/tiny_mce/themes/advanced/images/justifyright.gif +0 -0
  121. data/public/javascripts/tiny_mce/themes/advanced/images/link.gif +0 -0
  122. data/public/javascripts/tiny_mce/themes/advanced/images/menu_check.gif +0 -0
  123. data/public/javascripts/tiny_mce/themes/advanced/images/newdocument.gif +0 -0
  124. data/public/javascripts/tiny_mce/themes/advanced/images/numlist.gif +0 -0
  125. data/public/javascripts/tiny_mce/themes/advanced/images/opacity.png +0 -0
  126. data/public/javascripts/tiny_mce/themes/advanced/images/outdent.gif +0 -0
  127. data/public/javascripts/tiny_mce/themes/advanced/images/paste.gif +0 -0
  128. data/public/javascripts/tiny_mce/themes/advanced/images/redo.gif +0 -0
  129. data/public/javascripts/tiny_mce/themes/advanced/images/removeformat.gif +0 -0
  130. data/public/javascripts/tiny_mce/themes/advanced/images/separator.gif +0 -0
  131. data/public/javascripts/tiny_mce/themes/advanced/images/spacer.gif +0 -0
  132. data/public/javascripts/tiny_mce/themes/advanced/images/statusbar_resize.gif +0 -0
  133. data/public/javascripts/tiny_mce/themes/advanced/images/strikethrough.gif +0 -0
  134. data/public/javascripts/tiny_mce/themes/advanced/images/sub.gif +0 -0
  135. data/public/javascripts/tiny_mce/themes/advanced/images/sup.gif +0 -0
  136. data/public/javascripts/tiny_mce/themes/advanced/images/underline.gif +0 -0
  137. data/public/javascripts/tiny_mce/themes/advanced/images/underline_es.gif +0 -0
  138. data/public/javascripts/tiny_mce/themes/advanced/images/underline_fr.gif +0 -0
  139. data/public/javascripts/tiny_mce/themes/advanced/images/underline_ru.gif +0 -0
  140. data/public/javascripts/tiny_mce/themes/advanced/images/underline_tw.gif +0 -0
  141. data/public/javascripts/tiny_mce/themes/advanced/images/undo.gif +0 -0
  142. data/public/javascripts/tiny_mce/themes/advanced/images/unlink.gif +0 -0
  143. data/public/javascripts/tiny_mce/themes/advanced/images/visualaid.gif +0 -0
  144. data/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_bg.gif +0 -0
  145. data/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_end.gif +0 -0
  146. data/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_sel_bg.gif +0 -0
  147. data/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_sel_end.gif +0 -0
  148. data/public/javascripts/tiny_mce/themes/advanced/images/xp/tabs_bg.gif +0 -0
  149. data/public/javascripts/tiny_mce/themes/advanced/jscripts/about.js +75 -0
  150. data/public/javascripts/tiny_mce/themes/advanced/jscripts/anchor.js +74 -0
  151. data/public/javascripts/tiny_mce/themes/advanced/jscripts/charmap.js +326 -0
  152. data/public/javascripts/tiny_mce/themes/advanced/jscripts/color_picker.js +108 -0
  153. data/public/javascripts/tiny_mce/themes/advanced/jscripts/image.js +81 -0
  154. data/public/javascripts/tiny_mce/themes/advanced/jscripts/link.js +70 -0
  155. data/public/javascripts/tiny_mce/themes/advanced/jscripts/source_editor.js +60 -0
  156. data/public/javascripts/tiny_mce/themes/advanced/langs/en.js +82 -0
  157. data/public/javascripts/tiny_mce/themes/advanced/link.htm +100 -0
  158. data/public/javascripts/tiny_mce/themes/advanced/source_editor.htm +32 -0
  159. data/public/javascripts/tiny_mce/tiny_mce.js +1 -0
  160. data/public/javascripts/tiny_mce/tiny_mce_popup.js +288 -0
  161. data/public/javascripts/tiny_mce/tiny_mce_src.js +7284 -0
  162. data/public/javascripts/tiny_mce/utils/editable_selects.js +61 -0
  163. data/public/javascripts/tiny_mce/utils/form_utils.js +210 -0
  164. data/public/javascripts/tiny_mce/utils/mclayer.js +210 -0
  165. data/public/javascripts/tiny_mce/utils/mctabs.js +74 -0
  166. data/public/javascripts/tiny_mce/utils/validate.js +219 -0
  167. data/public/stylesheets/administration.css +5 -1
  168. data/public/stylesheets/minimal.css +1 -0
  169. data/test/functional/admin/categories_controller_test.rb +2 -2
  170. data/test/functional/xml_controller_test.rb +72 -40
  171. data/test/test_helper.rb +1 -17
  172. data/test/unit/article_test.rb +1 -1
  173. data/test/unit/trigger_test.rb +1 -1
  174. data/themes/scribbish/views/articles/_comment.rhtml +13 -17
  175. data/themes/scribbish/views/articles/_comment_form.rhtml +7 -5
  176. data/themes/scribbish/views/articles/_comment_list.rhtml +7 -0
  177. data/themes/scribbish/views/articles/read.rhtml +1 -1
  178. data/vendor/plugins/aimpresence_sidebar/views/content.rhtml +1 -1
  179. data/vendor/plugins/archives_sidebar/views/content.rhtml +1 -1
  180. data/vendor/plugins/audioscrobbler_sidebar/MAINTAINERS +26 -0
  181. data/vendor/plugins/audioscrobbler_sidebar/MIT-LICENSE +21 -0
  182. data/vendor/plugins/audioscrobbler_sidebar/README +27 -0
  183. data/vendor/plugins/backpack_sidebar/MAINTAINERS +26 -0
  184. data/vendor/plugins/backpack_sidebar/MIT-LICENSE +21 -0
  185. data/vendor/plugins/backpack_sidebar/README +27 -0
  186. data/vendor/plugins/category_sidebar/views/content.rhtml +1 -1
  187. data/vendor/plugins/sitealizer/CHANGELOG +6 -0
  188. data/vendor/plugins/sitealizer/LICENSE +22 -0
  189. data/vendor/plugins/sitealizer/README +82 -0
  190. data/vendor/plugins/sitealizer/Rakefile +22 -0
  191. data/vendor/plugins/sitealizer/init.rb +24 -0
  192. data/vendor/plugins/sitealizer/install.rb +22 -0
  193. data/vendor/plugins/sitealizer/lib/app/assets/images/bar.gif +0 -0
  194. data/vendor/plugins/sitealizer/lib/app/assets/images/uv.png +0 -0
  195. data/vendor/plugins/sitealizer/lib/app/assets/images/vh.png +0 -0
  196. data/vendor/plugins/sitealizer/lib/app/controllers/sitealizer_controller.rb +118 -0
  197. data/vendor/plugins/sitealizer/lib/app/models/site_tracker.rb +145 -0
  198. data/vendor/plugins/sitealizer/lib/app/views/layouts/sitealizer.rhtml +66 -0
  199. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_browsers.rhtml +23 -0
  200. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_daily_stats.rhtml +67 -0
  201. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_hits_summary.rhtml +0 -0
  202. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_hosts.rhtml +21 -0
  203. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_keywords.rhtml +19 -0
  204. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_languages.rhtml +21 -0
  205. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_main_frame.rhtml +84 -0
  206. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_monthly_hits.rhtml +67 -0
  207. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_page_urls.rhtml +20 -0
  208. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_platforms.rhtml +21 -0
  209. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_referers.rhtml +22 -0
  210. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_robots.rhtml +19 -0
  211. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/_search_engines.rhtml +19 -0
  212. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/hourly_stats.rhtml +39 -0
  213. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/index.rhtml +8 -0
  214. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/login.rhtml +20 -0
  215. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/menu.rhtml +74 -0
  216. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/referrer_stats.rhtml +20 -0
  217. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/search_stats.rhtml +25 -0
  218. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/summary.rhtml +22 -0
  219. data/vendor/plugins/sitealizer/lib/app/views/sitealizer/visitor_info.rhtml +30 -0
  220. data/vendor/plugins/sitealizer/lib/config.yml +18 -0
  221. data/vendor/plugins/sitealizer/lib/sitealizer/parser.rb +347 -0
  222. data/vendor/plugins/sitealizer/lib/sitealizer.rb +78 -0
  223. data/vendor/plugins/sitealizer/lib/tasks/sitealizer.rake +36 -0
  224. data/vendor/plugins/sitealizer/test/fixtures/sitealizer.yml +89 -0
  225. data/vendor/plugins/sitealizer/test/sitealizer_controller_test.rb +208 -0
  226. data/vendor/plugins/sitealizer/test/sitealizer_parser_test.rb +169 -0
  227. data/vendor/plugins/sitealizer/test/test_helper.rb +7 -0
  228. data/vendor/plugins/tada_sidebar/MAINTAINERS +26 -0
  229. data/vendor/plugins/tada_sidebar/MIT-LICENSE +21 -0
  230. data/vendor/plugins/tada_sidebar/README +27 -0
  231. data/vendor/plugins/tag_sidebar/views/content.rhtml +1 -1
  232. data/vendor/plugins/tiny_mce/README +10 -0
  233. data/vendor/plugins/tiny_mce/Rakefile +22 -0
  234. data/vendor/plugins/tiny_mce/TODO +2 -0
  235. data/vendor/plugins/tiny_mce/changelog +1017 -0
  236. data/vendor/plugins/tiny_mce/init.rb +3 -0
  237. data/vendor/plugins/tiny_mce/install.rb +1 -0
  238. data/vendor/plugins/tiny_mce/lib/tiny_mce.rb +36 -0
  239. data/vendor/plugins/tiny_mce/lib/tiny_mce_helper.rb +48 -0
  240. data/vendor/plugins/tiny_mce/tasks/tiny_mce.rake +40 -0
  241. data/vendor/plugins/tiny_mce/test/helper_testcase.rb +38 -0
  242. data/vendor/plugins/tiny_mce/test/tiny_mce_helper_test.rb +67 -0
  243. data/vendor/plugins/tiny_mce/test/tiny_mce_test.rb +85 -0
  244. data/vendor/plugins/tiny_mce/tiny_mce_options.yml +121 -0
  245. data/vendor/plugins/xbox_sidebar/MAINTAINERS +26 -0
  246. data/vendor/plugins/xbox_sidebar/MIT-LICENSE +21 -0
  247. data/vendor/plugins/xbox_sidebar/README +27 -0
  248. data/vendor/plugins/xml_sidebar/lib/xml_sidebar.rb +1 -1
  249. data/vendor/plugins/xml_sidebar/views/content.rhtml +4 -4
  250. metadata +220 -4
  251. data/TODO-4.1 +0 -16
data/Rakefile CHANGED
@@ -7,4 +7,4 @@ require 'rake'
7
7
  require 'rake/testtask'
8
8
  require 'rake/rdoctask'
9
9
 
10
- require 'tasks/rails'
10
+ require 'tasks/rails'
data/TODO-4.2 ADDED
@@ -0,0 +1,14 @@
1
+ Short Term To-Do for 4.2
2
+ ------------------------
3
+
4
+ – Fix bugs
5
+ – Finish admin ergonomic revamping
6
+ – Change admin theme
7
+ – Change default theme for something more modern
8
+ – Convert submited patches as plugins (see on the trac)
9
+ – Add users contributed translations (ES, JP, BR...)
10
+
11
+ If I have the time :
12
+ – Real mutiple users roles
13
+ – Multi blogs
14
+ – Go to the grocery and buy more beer
data/TODO.MULTIUSERS ADDED
@@ -0,0 +1,45 @@
1
+ This documents aims at describing what I plan for Typo to go multiusers
2
+
3
+ A profile :
4
+ has many right
5
+
6
+ A user :
7
+ has one profile
8
+ has many rights
9
+
10
+ When a user is created, he's given a profile. His profile is marked as "clean"
11
+ The administrator can assign specific rights to that user. His profile is marked as "tainted"
12
+ When a profile is modified, changes are made on users who have a "clean" profile.
13
+
14
+ Here are the profiles and rights :
15
+
16
+ Administrator
17
+ - admin the blog
18
+ - create, edit, delete users
19
+ - create, edit, delete roles
20
+ - write, edit, publish, unpublish, delete drafts
21
+ - write, edit, publish, unpublish, delete posts
22
+ - write comments
23
+ - edit / delete his own comments
24
+ - edit / delete other people's comments
25
+ - moderate comments marked as spam
26
+
27
+ Publisher
28
+ - write, edit, publish, unpublish, delete drafts
29
+ - write, edit, publish, unpublish, delete posts
30
+ - write comments
31
+ - edit / delete his own comments
32
+ - moderate comments marked as spam
33
+
34
+ Writer
35
+ - write, edit, publish, unpublish, delete drafts
36
+ - write comments
37
+
38
+ Moderator
39
+ - write comments
40
+ - edit / delete his own comments
41
+ - edit / delete other people's comments
42
+ - moderate comments marked as spam
43
+
44
+ Subscriber
45
+ - write comments
@@ -1,6 +1,24 @@
1
1
  class Admin::BaseController < ApplicationController
2
2
  cattr_accessor :look_for_migrations
3
3
  @@look_for_migrations = true
4
+ if Blog.default && Blog.default.editor == 2
5
+ uses_tiny_mce(
6
+ :options => {
7
+ :theme => 'advanced',
8
+ :theme_advanced_toolbar_location => "top",
9
+ :theme_advanced_toolbar_align => "left",
10
+ :theme_advanced_resizing => true,
11
+ :theme_advanced_resize_horizontal => false,
12
+ :paste_auto_cleanup_on_paste => true,
13
+ :theme_advanced_buttons1 => %w{formatselect bold italic underline strikethrough
14
+ separator justifyleft justifycenter justifyright
15
+ separator bullist numlist forecolor backcolor
16
+ separator link unlink image},
17
+ :theme_advanced_buttons2 => [],
18
+ :theme_advanced_buttons3 => [],
19
+ :plugins => %w{contextmenu paste}},
20
+ :only => [:new, :edit])
21
+ end
4
22
 
5
23
  layout 'administration'
6
24
  before_filter :login_required, :except => [ :login, :signup ]
@@ -1,4 +1,7 @@
1
1
  class Admin::GeneralController < Admin::BaseController
2
+ # Deprecation warning for plugins removal
3
+ before_filter :deprecation_warning
4
+
2
5
  def index
3
6
  if this_blog.base_url.blank?
4
7
  this_blog.base_url = blog_base_url
@@ -38,5 +41,16 @@ class Admin::GeneralController < Admin::BaseController
38
41
  end
39
42
  end
40
43
 
44
+ # Deprecation warning for plugins removal
45
+ def deprecation_warning
46
+ if this_blog.deprecation_warning == 1
47
+ Blog.transaction do
48
+ this_blog.deprecation_warning = 0
49
+ this_blog.save
50
+ end
51
+ flash[:notice] = "Deprecation warning: please, notice that most plugins are going to be removed from the main engine in the next version. <a href='http://blog.typosphere.org/articles/2007/04/15/the-futur-of-typo-sidebar-plugins'>Read more on the official Typo blog</a>"
52
+ end
53
+ end
54
+
41
55
  private
42
56
  end
@@ -2,7 +2,8 @@
2
2
  # Likewise will all the methods added be available for all controllers.
3
3
  class ApplicationController < ActionController::Base
4
4
  include LoginSystem
5
- before_filter :reset_local_cache, :fire_triggers
5
+ include Sitealizer
6
+ before_filter :use_sitealizer, :reset_local_cache, :fire_triggers
6
7
  after_filter :reset_local_cache
7
8
 
8
9
 
@@ -89,33 +89,30 @@ class ArticlesController < ContentController
89
89
  end
90
90
 
91
91
  if request.post?
92
- begin
93
- @article = this_blog.published_articles.find(params[:id])
94
- params[:comment].merge!({:ip => request.remote_ip,
95
- :published => true,
96
- :user => session[:user],
97
- :user_agent => request.env['HTTP_USER_AGENT'],
98
- :referrer => request.env['HTTP_REFERER'],
99
- :permalink => @article.permalink_url})
100
- @comment = @article.comments.build(params[:comment])
101
- @comment.author ||= 'Anonymous'
102
- @comment.save!
103
- add_to_cookies(:author, @comment.author)
104
- add_to_cookies(:url, @comment.url)
105
-
106
- set_headers
107
- render :partial => "comment", :object => @comment
108
- rescue ActiveRecord::RecordInvalid
109
- STDERR.puts @comment.errors.inspect
110
- render_error(@comment)
111
- end
92
+ @article = this_blog.published_articles.find(params[:id])
93
+ params[:comment].merge!({:ip => request.remote_ip,
94
+ :published => true,
95
+ :user => session[:user],
96
+ :user_agent => request.env['HTTP_USER_AGENT'],
97
+ :referrer => request.env['HTTP_REFERER'],
98
+ :permalink => @article.permalink_url})
99
+ @comment = @article.comments.build(params[:comment])
100
+ @comment.author ||= 'Anonymous'
101
+ @comment.save
102
+ add_to_cookies(:author, @comment.author)
103
+ add_to_cookies(:url, @comment.url)
104
+
105
+ set_headers
106
+ render :partial => "comment", :object => @comment
112
107
  end
113
108
  end
114
109
 
115
110
  # Receive trackbacks linked to articles
116
111
  def trackback
117
112
  @error_message = catch(:error) do
118
- if params[:__mode] == "rss"
113
+ if this_blog.global_pings_disable
114
+ throw :error, "Trackback not saved"
115
+ elsif params[:__mode] == "rss"
119
116
  # Part of the trackback spec... will implement later
120
117
  # XXX. Should this throw an error?
121
118
  elsif !(params.has_key?(:url) && params.has_key?(:id))
@@ -29,7 +29,7 @@ module Admin::BaseHelper
29
29
  unless session[:user]
30
30
  link_to "log in", :controller => "/accounts", :action=>"login"
31
31
  else
32
- link_to "log out", :controller => "/accounts", :action=>"logout"
32
+ link_to _("log out"), :controller => "/accounts", :action=>"logout"
33
33
  end
34
34
  end
35
35
 
@@ -42,7 +42,7 @@ module Admin::BaseHelper
42
42
  end
43
43
 
44
44
  def cancel(url = {:action => 'list'})
45
- link_to "Cancel", url
45
+ link_to _("Cancel"), url
46
46
  end
47
47
 
48
48
  def save(val = "Store")
@@ -54,7 +54,7 @@ module Admin::BaseHelper
54
54
  end
55
55
 
56
56
  def link_to_show(record)
57
- link_to image_tag('go.png'), :action => 'show', :id => record.id
57
+ link_to image_tag('show.png'), :action => 'show', :id => record.id
58
58
  end
59
59
 
60
60
  def link_to_edit(record)
@@ -88,7 +88,7 @@ module Admin::BaseHelper
88
88
  end
89
89
 
90
90
  def task_overview
91
- task('Back to overview', 'list')
91
+ task(_('Back to overview'), 'list')
92
92
  end
93
93
 
94
94
  def task_new(title)
@@ -3,10 +3,10 @@ module Admin::FeedbackHelper
3
3
  link_to truncate(article.title, 60), :controller => '/admin/content', :action => 'edit', :id => article.id
4
4
  end
5
5
 
6
- def task_showmod(title)
6
+ def task_showmod(title, action)
7
7
  content_tag :li,
8
- link_to(title, :published => (title =~ /spam/ ? 'f' : ''),
9
- :confirmed => (title =~ /unconfirmed/ ? 'f' : ''),
8
+ link_to(title, :published => (action =~ /spam/ ? 'f' : ''),
9
+ :confirmed => (action =~ /unconfirmed/ ? 'f' : ''),
10
10
  :search => params[:search])
11
11
  end
12
12
  end
@@ -46,12 +46,8 @@ module ApplicationHelper
46
46
  end
47
47
 
48
48
  def js_distance_of_time_in_words_to_now(date)
49
- if date
50
- time = date.utc.strftime("%a, %d %b %Y %H:%M:%S GMT")
51
- else
52
- time = Time.now
53
- end
54
- "<span class=\"typo_date\" title=\"#{time}\">#{time}</span>"
49
+ time = date.utc.strftime("%a, %d %b %Y %H:%M:%S GMT")
50
+ "<span class=\"typo_date\" title=\"#{time}\">#{time}</span>"
55
51
  end
56
52
 
57
53
  def meta_tag(name, value)
@@ -1,6 +1,6 @@
1
1
  module SidebarHelper
2
- def render_sidebars
3
- this_blog.sidebars.inject('') do |acc, sb|
2
+ def render_sidebars(*sidebars)
3
+ (sidebars.blank? ? this_blog.sidebars : sidebars).inject('') do |acc, sb|
4
4
  @sidebar = sb
5
5
  sb.parse_request(contents, params)
6
6
  controller.response.lifetime = sb.lifetime if sb.lifetime
data/app/models/blog.rb CHANGED
@@ -78,11 +78,15 @@ class Blog < CachedModel
78
78
  setting :ping_urls, :string, "http://rpc.technorati.com/rpc/ping\nhttp://ping.blo.gs/\nhttp://rpc.weblogs.com/RPC2"
79
79
  setting :send_outbound_pings, :boolean, true
80
80
  setting :email_from, :string, 'typo@example.com'
81
+ setting :editor, :integer, 1
81
82
 
82
83
  # Jabber config
83
84
  setting :jabber_address, :string, ''
84
85
  setting :jabber_password, :string, ''
85
86
 
87
+ #deprecation warning for plugins removal
88
+ setting :deprecation_warning, :integer, 1
89
+
86
90
  def initialize(*args)
87
91
  super
88
92
  # Yes, this is weird - PDC
@@ -109,7 +113,11 @@ class Blog < CachedModel
109
113
  settings[:blog_id] = self.id
110
114
  article_id = settings[:id]
111
115
  settings.delete(:id)
112
- trackback = published_articles.find(article_id).trackbacks.create!(settings)
116
+ article = published_articles.find(article_id)
117
+ unless article.allow_pings?
118
+ throw :error, "Trackback not saved"
119
+ end
120
+ article.trackbacks.create!(settings)
113
121
  end
114
122
 
115
123
  # Check that all required blog settings have a value.
@@ -5,15 +5,15 @@ class Category < ActiveRecord::Base
5
5
  :order => "published_at DESC, created_at DESC"
6
6
 
7
7
  def self.find_all_with_article_counters(maxcount=nil)
8
- self.find_by_sql([%{
9
- SELECT categories.id, categories.name, categories.permalink, categories.position, COUNT(articles.id) AS article_counter
10
- FROM #{Category.table_name} categories
11
- LEFT OUTER JOIN #{Category.table_name_prefix}categorizations#{Category.table_name_suffix} articles_categories
12
- ON articles_categories.category_id = categories.id
13
- LEFT OUTER JOIN #{Article.table_name} articles
14
- ON (articles_categories.article_id = articles.id AND articles.published = ?)
15
- GROUP BY categories.id, categories.name, categories.position, categories.permalink
16
- ORDER BY position
8
+ self.find_by_sql([%{
9
+ SELECT categories.id, categories.name, categories.permalink, categories.position, COUNT(articles.id) AS article_counter
10
+ FROM #{Category.table_name} categories
11
+ LEFT OUTER JOIN #{Category.table_name_prefix}categorizations#{Category.table_name_suffix} articles_categories
12
+ ON articles_categories.category_id = categories.id
13
+ LEFT OUTER JOIN #{Article.table_name} articles
14
+ ON (articles_categories.article_id = articles.id AND articles.published = ?)
15
+ GROUP BY categories.id, categories.name, categories.position, categories.permalink
16
+ ORDER BY position
17
17
  }, true]).each {|item| item.article_counter = item.article_counter.to_i }
18
18
  end
19
19
 
@@ -21,7 +21,7 @@ class Comment < Feedback
21
21
  def notify_user_via_jabber(user)
22
22
  if user.notify_via_jabber?
23
23
  JabberNotify.send_message(user, "New comment", "A new comment was posted to '#{article.title}' on #{blog.blog_name} by #{author}:
24
- #{body} (#{controller.url_for :anchor => 'comments', :action => 'read', :id => article.id})", self.body_html)
24
+ #{body}", self.html(:body))
25
25
  end
26
26
  end
27
27
 
@@ -29,9 +29,9 @@ module ContentState
29
29
  'Ham?'
30
30
  end
31
31
 
32
- def send_notifications(content, controller)
32
+ def send_notifications(content)
33
33
  content.interested_users.each do |user|
34
- content.send_notification_to_user(controller, user)
34
+ content.send_notification_to_user(user)
35
35
  end
36
36
  end
37
37
  end
@@ -1,3 +1,5 @@
1
+ require 'tempfile'
2
+
1
3
  class Resource < ActiveRecord::Base
2
4
  validates_uniqueness_of :filename
3
5
  after_destroy :delete_filename_on_disk
@@ -1,14 +1,18 @@
1
1
  <table>
2
2
  <tr>
3
- <th><%= _("Category title")%></th>
4
- <th><%= _("Articles")%></th>
5
- <th><%= _("Delete")%></th>
3
+ <th><%= _("Category title") %></th>
4
+ <th><%= _("Articles") %></th>
5
+ <th><%= _("Status") %></th>
6
+ <th colspan="3"><%= _("Action") %></th>
6
7
  </tr>
7
8
  <% for category in @categories -%>
8
9
  <tr <%= alternate_class -%> id="category_<%= category.id -%>">
9
- <td><%= image_tag 'checked.gif' %> <%= link_to category.name, :action => 'show', :id => category.id %></td>
10
- <td><%= link_to pluralize(category.articles.size, 'article'), :action => 'show', :id => category.id %></td>
11
- <td class="operation"><%= link_to_destroy category %></td>
10
+ <td><%= category.name %></td>
11
+ <td><%= pluralize(category.articles.size, 'article') %></td>
12
+ <td class="operation"><%= image_tag 'checked.png' %></td>
13
+ <td class="operation"><%= link_to_show category %></td>
14
+ <td class="operation"><%= link_to_edit category %></td>
15
+ <td class="operation"><%= link_to_destroy category %></td>
12
16
  </tr>
13
17
  <% end -%>
14
18
  </table>
@@ -1,5 +1,7 @@
1
1
  <% @page_heading = _('Categories') %>
2
-
2
+ <% content_for('tasks') do %>
3
+ <%= task_overview %>
4
+ <% end %>
3
5
  <% form_tag :action=>"edit", :id => @category.id do %>
4
6
  <h3><% _("Editing category")%></h3>
5
7
  <div class="form">
@@ -2,15 +2,15 @@
2
2
  <!--[form:comment]-->
3
3
  <p>
4
4
  <label for="comment_author"><%= _("Author")%>:</label><br/>
5
- <%= text_field 'comment', 'author' %>
5
+ <%= text_field 'comment', 'author', "value" => (session[:user][:name] if controller.action_name == "new") %>
6
6
  </p>
7
7
  <p>
8
8
  <label for="comment_url"><%= _("Url") %>:</label><br/>
9
- <%= text_field 'comment', 'url' %>
9
+ <%= text_field 'comment', 'url', "value" => (this_blog.base_url if controller.action_name == "new") %>
10
10
  </p>
11
11
  <p>
12
12
  <label for="comment_email"><%= _("Email")%>:</label><br/>
13
- <%= text_field 'comment', 'email' %>
13
+ <%= text_field 'comment', 'email', "value" => (session[:user][:email] if controller.action_name == "new") %>
14
14
  </p>
15
15
  <p>
16
16
  <label for="comment_body"><%= _("Body")%>:</label><br/>
@@ -13,16 +13,18 @@
13
13
  <th><%= _("Body")%></th>
14
14
  <th><%= _("IP")%></th>
15
15
  <th><%= _("Posted date")%></th>
16
- <th><%= _("Edit")%></th>
17
- <th><%= _("Delete")%></th>
16
+ <th><%= _("Status")%></th>
17
+ <th colspan="3"><%= _("Action") %></th>
18
18
  </tr>
19
19
  <% for comment in @comments -%>
20
20
  <tr>
21
- <td class="field"><%= image_tag 'checked.gif' %> <%=link_to_unless comment.url.blank?, h(comment.author), comment.url %></td>
21
+ <td class="field"> <%=link_to_unless comment.url.blank?, h(comment.author), comment.url %></td>
22
22
  <td class="field"><%=h comment.email %></td>
23
- <td class="field"><%=link_to truncate((comment.body).strip_html), :action => 'show', :id => comment.id %> <%= link_to_permalink comment,image_tag('go.png') %></td>
23
+ <td class="field"><%= link_to_permalink comment, truncate((comment.body).strip_html) %></td>
24
24
  <td class="field"><%=h comment.ip %></td>
25
- <td class="field"><%=h distance_of_time_in_words_to_now(comment.created_at) %></td>
25
+ <td class="field"><%=comment.created_at.strftime("%d/%m/%Y at %H:%M") %></td>
26
+ <td class="operation"><%= image_tag 'checked.png' %></td>
27
+ <td class="operation"><%= link_to_show comment %></td>
26
28
  <td class="operation"><%= link_to_edit comment %></td>
27
29
  <td class="operation"><%= link_to_destroy comment %></td>
28
30
  </tr>
@@ -1,5 +1,7 @@
1
1
  <% @page_heading = _("Comments for") + " #{ link_to h(@article.title), :controller => '/admin/content', :action => 'show', :id => @article }" %>
2
-
2
+ <% content_for('tasks') do %>
3
+ <%= task_overview %>
4
+ <% end %>
3
5
  <h3><%= _("Creating comment")%></h3>
4
6
 
5
7
  <% form_tag :action=>"new" do %>
@@ -1,5 +1,7 @@
1
1
  <% @page_heading = _("Comments for") + " #{ link_to h(@article.title), :controller => '/admin/content', :action => 'show', :id => @article }" %>
2
-
2
+ <% content_for('tasks') do %>
3
+ <%= task_overview %>
4
+ <% end %>
3
5
  <div class="form">
4
6
  <label><%= _("Author")%>:</label> <span class="static"><%=h @comment.author %></span><br/>
5
7
  <label><%= _("URL")%>:</label> <span class="static"><%=h @comment.url %></span><br/>
@@ -10,7 +10,7 @@
10
10
  <% for article in @articles %>
11
11
  <tr <%= alternate_class %>>
12
12
  <td> <%= link_to_permalink article, h(article.title) %></td>
13
- <td><%= article.published_at.strftime("%d/%m/%Y at %H:%M")%></td>
13
+ <td><%= article.published_at.strftime("%d/%m/%Y at %H:%M") %></td>
14
14
  <td><%= link_to _(pluralize(article.comments.size, 'comment')), :controller => '/admin/comments', :article_id => article, :action => 'list' %></td>
15
15
  <td><%= link_to _(pluralize(article.trackbacks.size, 'trackback')), :controller => '/admin/trackbacks', :article_id => article, :action => 'list' %></td>
16
16
  <td class="operation"><%= (article.published?) ? image_tag('checked.png', :alt => "online", :title => _("Online")) : image_tag('cancel.png', :alt => "offline", :title => _("Offline")) %></td>
@@ -3,7 +3,7 @@
3
3
  <fieldset class="set admin" style="display: block">
4
4
  <legend><%=_("Article Body")%></legend>
5
5
  <iframe id="preview" class="post" style="display: none;"></iframe>
6
- <div style="width: 48%; float: left;">
6
+ <div <%='style="width: 48%; float: left;"' if this_blog.editor == 1 %>>
7
7
  <ul>
8
8
  <li>
9
9
  <label for="article_title" class="block">Title:</label>
@@ -14,10 +14,12 @@
14
14
  <%= markup_help_popup @article.text_filter, image_tag('help.png', :alt => "markup help", :title => "Markup Help") %>
15
15
  <%= text_area 'article', 'body', :rows => 25, :style => 'width: 100%;' %>
16
16
  </li>
17
+ <li>
18
+ <%= link_to_function _("Toggle Extended Content") + " (+/-)",update_page { |page| page.visual_effect(:toggle_blind, "extended", :duration => 0.5) } %>
19
+ </li>
17
20
  <li id="extended"<%- if @article.extended.blank? -%> style="display:none;"<%- end -%>>
18
21
  <label for="article_extended"><%= _("Extended Content")%>:</label>
19
22
  <%= text_area 'article', 'extended', :rows => 30, :style => 'width: 100%;' %>
20
- <%= link_to_function "Toggle Extended Content (+/-)",update_page { |page| page.visual_effect(:toggle_blind, "extended", :duration => 0.5) } %>
21
23
  </li>
22
24
  <li>
23
25
  <label for="categories" class="block"><%= _("Categories")%>:</label>
@@ -1,5 +1,6 @@
1
1
  <% content_for('tasks') do %>
2
2
  <%= tab _("Write a Page"), :controller=>"pages", :action=>"new" %>
3
+ <li><%= task_overview %></li>
3
4
  <% end %>
4
5
 
5
6
  <% @page_heading = _('Write an Article') %>
@@ -1,10 +1,10 @@
1
1
  <div class="post">
2
- <h2><%= @article[:title] %></h2>
3
- <p class="auth">
4
- <%_("Posted by")%>
5
- <%= author_link(@article) %>
6
- <%= js_distance_of_time_in_words_to_now @article[:published_at] %>
7
- </p>
2
+ <h2><%= @article[:title] %></h2>
3
+ <p class="auth">
4
+ <%_("Posted by")%>
5
+ <%= author_link(@article) %>
6
+ <%= js_distance_of_time_in_words_to_now(@article[:published_at] || Time.now) %>
7
+ </p>
8
8
 
9
- <%= @article.html %>
10
- </div>
9
+ <%= @article.html %>
10
+ </div>
@@ -12,6 +12,8 @@
12
12
  </td>
13
13
  <td class="field"><%=h truncate(item.body,80)%></td>
14
14
  <td class="field"><%=h item.ip %></td>
15
- <td class="field"><%=h distance_of_time_in_words_to_now(item.created_at) %> ago</td>
15
+ <td class="field"><%=item.created_at.strftime("%d/%m/%Y at %H:%M")%></td>
16
+ <td class="operation"><%= link_to image_tag('show.png', :alt => "show", :title => "Show content"), :controller => 'comments', :article_id => item.article_id, :action => 'show', :id => item.id %></td>
17
+ <td class="operation"><%= link_to image_tag('edit.png', :alt => "edit", :title => "Edit content"), :controller => 'comments', :article_id => item.article_id, :action => 'edit', :id => item.id %></td>
16
18
  <td class="operation"><%= link_to image_tag('delete.png'), {:action => 'delete', :id => item.id, :search => params[:search], :page => params[:page] }, :confirm => "Are you sure?", :method => :post %></td>
17
19
  </tr>
@@ -1,9 +1,9 @@
1
1
  <% @page_heading = _("Comments and Trackbacks for") + " #{ this_blog.settings['blog_name'] }" %>
2
2
 
3
3
  <% content_for('tasks') do %>
4
- <%= task_showmod _('Limit to spam') %>
5
- <%= task_showmod _("Limit to unconfirmed") %>
6
- <%= task_showmod _('Limit to unconfirmed spam') %>
4
+ <%= task_showmod(_('Limit to spam'), "Limit to spam") %>
5
+ <%= task_showmod(_("Limit to unconfirmed"), "Limit to unconfirmed") %>
6
+ <%= task_showmod(_("Limit to unconfirmed spam"), "Limit to unconfirmed spam") %>
7
7
  <%= tab _("Blacklist"), :controller=>"blacklist", :action=>"index"%>
8
8
  <% end %>
9
9
 
@@ -34,7 +34,7 @@
34
34
  <th><%= _("Body")%></th>
35
35
  <th><%= _("IP")%></th>
36
36
  <th><%= _("Posted date")%></th>
37
- <th><%= _("Delete") %></th>
37
+ <th colspan="3"><%= _("Action") %></th>
38
38
  </tr>
39
39
  <%= render :partial => 'item', :collection => @feedback %>
40
40
  </table>
@@ -81,8 +81,21 @@
81
81
 
82
82
  <fieldset id="write" class="set">
83
83
  <legend><%= _("Write")%></legend>
84
-
85
84
  <ul>
85
+ <li>
86
+ <label class="float"><%= _("Editor")%>:</label>
87
+ <input type="radio" name="setting[editor]" value="2" id="editor_2" <%= 'checked="checked"' if this_blog.editor == 2 %>/>
88
+ <label for="editor_2"><%= _("Use visual rich editor")%></label>
89
+ <span class="float">
90
+ <input type="radio" name="setting[editor]" value="1" id="editor_1" <%= 'checked="checked"' if this_blog.editor == 1 %>/>
91
+ <label for="editor_1"><%= _("Use simple editor with live preview (default)")%></label>
92
+ </span>
93
+ <span class="float">
94
+ <input type="radio" name="setting[editor]" value="0" id="editor_0" <%= 'checked="checked"' if this_blog.editor == 0 %>/>
95
+ <label for="editor_0"><%= _("Use simple editor without live preview")%></label>
96
+ </span>
97
+ </li>
98
+
86
99
  <li>
87
100
  <label class="float" for="text_filter"><%= _("Article filter")%>:</label>
88
101
  <select name="setting[text_filter]" id="text_filter">
@@ -3,7 +3,7 @@
3
3
  <fieldset class="set admin" style="display: block">
4
4
  <legend><%= _("Page Body")%></legend>
5
5
  <iframe id="preview" class="post" style="display: none;"></iframe>
6
- <div style="width: 48%; float: left;">
6
+ <div <%='style="width: 48%; float: left;"' if this_blog.editor == 1 %>>
7
7
  <ul>
8
8
  <li>
9
9
  <label for="page_title" class="block"><%= _("Title")%>:</label>
@@ -1,4 +1,4 @@
1
- <% @page_heading = <%= _("Pages") %>
1
+ <% @page_heading = _("Pages") %>
2
2
 
3
3
  <% content_for('tasks') do %>
4
4
  <%= task_show _("Show this page"), @page.id %>
@@ -1,5 +1,6 @@
1
1
  <% content_for('tasks') do %>
2
2
  <%= tab _("Write an Article"), :controller=>"content", :action=>"new" %>
3
+ <li><%= task_overview %></li>
3
4
  <% end %>
4
5
 
5
6
  <% @page_heading = _('Write a Page') %>
@@ -6,7 +6,7 @@
6
6
  <%= render :partial => "form" %>
7
7
 
8
8
  <div id="operations" class="tasks">
9
- <p class="r"><%= save(_("Save")) %> or <%= cancel %></p>
9
+ <p class="r"><%= save(_("Save")) %> <%= _("or") %> <%= cancel %></p>
10
10
  </div>
11
11
 
12
12
  <% end %>
@@ -14,4 +14,4 @@
14
14
  <%= observe_form "#{form_type}_form",
15
15
  :frequency => 2,
16
16
  :complete => "$('preview').src = request.responseText; Element.show('preview');",
17
- :url => { :action => "preview" } %>
17
+ :url => { :action => "preview" } if this_blog.editor == 1 %>