imagine_cms 3.0.0.beta6 → 3.0.0.beta7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (278) hide show
  1. data/README.rdoc +1 -1
  2. data/app/assets/images/codepress/line-numbers.png +0 -0
  3. data/app/assets/images/cropper/marqueeHoriz.gif +0 -0
  4. data/app/assets/images/cropper/marqueeVert.gif +0 -0
  5. data/app/assets/images/management/btn_add.gif +0 -0
  6. data/app/assets/images/management/btn_archive.gif +0 -0
  7. data/app/assets/images/management/btn_delete.gif +0 -0
  8. data/app/assets/images/management/btn_duplicate.gif +0 -0
  9. data/app/assets/images/management/btn_edit.gif +0 -0
  10. data/app/assets/images/management/btn_help.gif +0 -0
  11. data/app/assets/images/management/btn_new_page.gif +0 -0
  12. data/app/assets/images/management/btn_preview.gif +0 -0
  13. data/app/assets/images/management/btn_properties.gif +0 -0
  14. data/app/assets/images/management/btn_restore.gif +0 -0
  15. data/app/assets/images/management/btn_top_delete.gif +0 -0
  16. data/app/assets/images/management/btn_top_duplicate.gif +0 -0
  17. data/app/assets/images/management/btn_top_edit.gif +0 -0
  18. data/app/assets/images/management/btn_top_new.gif +0 -0
  19. data/app/assets/images/management/btn_top_preview.gif +0 -0
  20. data/app/assets/images/management/btn_top_properties.gif +0 -0
  21. data/app/assets/{manage → images/management}/bullet.gif +0 -0
  22. data/app/assets/images/management/cvv2_graphic.gif +0 -0
  23. data/app/assets/images/management/error.gif +0 -0
  24. data/app/assets/images/management/gallery_index.gif +0 -0
  25. data/app/assets/images/management/gallery_preview_overlay.png +0 -0
  26. data/app/assets/images/management/gallery_small_drag_overlay.png +0 -0
  27. data/app/assets/images/management/gallery_small_overlay.png +0 -0
  28. data/app/assets/images/management/gallery_sort.gif +0 -0
  29. data/app/assets/images/management/icon_download.gif +0 -0
  30. data/app/assets/images/management/icon_locked.png +0 -0
  31. data/app/assets/images/management/icon_page.gif +0 -0
  32. data/app/assets/images/management/icon_time.gif +0 -0
  33. data/app/assets/images/management/icon_unlocked.png +0 -0
  34. data/app/assets/images/management/page_loading.gif +0 -0
  35. data/app/assets/{manage → images/management}/start.gif +0 -0
  36. data/app/assets/images/management/vcard.gif +0 -0
  37. data/app/assets/javascripts/builder.js +101 -0
  38. data/app/assets/javascripts/codepress/codepress.html +36 -0
  39. data/app/assets/javascripts/codepress/codepress.js +130 -0
  40. data/app/assets/javascripts/codepress/engines/gecko.js +240 -0
  41. data/{vendor/gems/acts_as_tree/test/abstract_unit.rb → app/assets/javascripts/codepress/engines/khtml.js} +0 -0
  42. data/app/assets/javascripts/codepress/engines/msie.js +263 -0
  43. data/{vendor/gems/acts_as_tree/test/database.yml → app/assets/javascripts/codepress/engines/older.js} +0 -0
  44. data/app/assets/javascripts/codepress/engines/opera.js +259 -0
  45. data/app/assets/javascripts/codepress/languages/css.js +23 -0
  46. data/app/assets/javascripts/codepress/languages/generic.js +25 -0
  47. data/app/assets/javascripts/codepress/languages/html.js +63 -0
  48. data/app/assets/javascripts/codepress/languages/java.js +24 -0
  49. data/app/assets/javascripts/codepress/languages/javascript.js +30 -0
  50. data/app/assets/javascripts/codepress/languages/perl.js +27 -0
  51. data/app/assets/javascripts/codepress/languages/php.js +60 -0
  52. data/app/assets/javascripts/codepress/languages/ruby.js +26 -0
  53. data/app/assets/javascripts/codepress/languages/sql.js +30 -0
  54. data/app/assets/javascripts/codepress/languages/text.js +9 -0
  55. data/app/assets/javascripts/cropper.js +568 -0
  56. data/app/assets/javascripts/dojo/dojo.js +14155 -0
  57. data/app/assets/javascripts/dojo/src/html/images/shadowB.png +0 -0
  58. data/app/assets/javascripts/dojo/src/html/images/shadowBL.png +0 -0
  59. data/app/assets/javascripts/dojo/src/html/images/shadowBR.png +0 -0
  60. data/app/assets/javascripts/dojo/src/html/images/shadowL.png +0 -0
  61. data/app/assets/javascripts/dojo/src/html/images/shadowR.png +0 -0
  62. data/app/assets/javascripts/dojo/src/html/images/shadowT.png +0 -0
  63. data/app/assets/javascripts/dojo/src/html/images/shadowTL.png +0 -0
  64. data/app/assets/javascripts/dojo/src/html/images/shadowTR.png +0 -0
  65. data/app/assets/javascripts/dojo/src/widget/templates/Editor2/showtableborder_gecko.css +19 -0
  66. data/app/assets/javascripts/dojo/src/widget/templates/HslColorPicker.svg +30 -0
  67. data/app/assets/javascripts/dojo/src/widget/templates/buttons/aggregate.gif +0 -0
  68. data/app/assets/javascripts/dojo/src/widget/templates/buttons/aggregate.psd +0 -0
  69. data/app/assets/javascripts/dojo/src/widget/templates/buttons/backcolor.gif +0 -0
  70. data/app/assets/javascripts/dojo/src/widget/templates/buttons/bg-fade.png +0 -0
  71. data/app/assets/javascripts/dojo/src/widget/templates/buttons/bold.gif +0 -0
  72. data/app/assets/javascripts/dojo/src/widget/templates/buttons/cancel.gif +0 -0
  73. data/app/assets/javascripts/dojo/src/widget/templates/buttons/copy.gif +0 -0
  74. data/app/assets/javascripts/dojo/src/widget/templates/buttons/createlink.gif +0 -0
  75. data/app/assets/javascripts/dojo/src/widget/templates/buttons/cut.gif +0 -0
  76. data/app/assets/javascripts/dojo/src/widget/templates/buttons/delete.gif +0 -0
  77. data/app/assets/javascripts/dojo/src/widget/templates/buttons/forecolor.gif +0 -0
  78. data/app/assets/javascripts/dojo/src/widget/templates/buttons/hilitecolor.gif +0 -0
  79. data/app/assets/javascripts/dojo/src/widget/templates/buttons/indent.gif +0 -0
  80. data/app/assets/javascripts/dojo/src/widget/templates/buttons/inserthorizontalrule.gif +0 -0
  81. data/app/assets/javascripts/dojo/src/widget/templates/buttons/insertimage.gif +0 -0
  82. data/app/assets/javascripts/dojo/src/widget/templates/buttons/insertorderedlist.gif +0 -0
  83. data/app/assets/javascripts/dojo/src/widget/templates/buttons/inserttable.gif +0 -0
  84. data/app/assets/javascripts/dojo/src/widget/templates/buttons/insertunorderedlist.gif +0 -0
  85. data/app/assets/javascripts/dojo/src/widget/templates/buttons/italic.gif +0 -0
  86. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifycenter.gif +0 -0
  87. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifyfull.gif +0 -0
  88. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifyleft.gif +0 -0
  89. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifyright.gif +0 -0
  90. data/app/assets/javascripts/dojo/src/widget/templates/buttons/left_to_right.gif +0 -0
  91. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_bullet_indent.gif +0 -0
  92. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_bullet_outdent.gif +0 -0
  93. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_num_indent.gif +0 -0
  94. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_num_outdent.gif +0 -0
  95. data/app/assets/javascripts/dojo/src/widget/templates/buttons/outdent.gif +0 -0
  96. data/app/assets/javascripts/dojo/src/widget/templates/buttons/paste.gif +0 -0
  97. data/app/assets/javascripts/dojo/src/widget/templates/buttons/redo.gif +0 -0
  98. data/app/assets/javascripts/dojo/src/widget/templates/buttons/removeformat.gif +0 -0
  99. data/app/assets/javascripts/dojo/src/widget/templates/buttons/right_to_left.gif +0 -0
  100. data/app/assets/javascripts/dojo/src/widget/templates/buttons/save.gif +0 -0
  101. data/app/assets/javascripts/dojo/src/widget/templates/buttons/sep.gif +0 -0
  102. data/app/assets/javascripts/dojo/src/widget/templates/buttons/space.gif +0 -0
  103. data/app/assets/javascripts/dojo/src/widget/templates/buttons/strikethrough.gif +0 -0
  104. data/app/assets/javascripts/dojo/src/widget/templates/buttons/subscript.gif +0 -0
  105. data/app/assets/javascripts/dojo/src/widget/templates/buttons/superscript.gif +0 -0
  106. data/app/assets/javascripts/dojo/src/widget/templates/buttons/underline.gif +0 -0
  107. data/app/assets/javascripts/dojo/src/widget/templates/buttons/undo.gif +0 -0
  108. data/app/assets/javascripts/dojo/src/widget/templates/buttons/wikiword.gif +0 -0
  109. data/app/assets/javascripts/dojo/src/widget/templates/check.gif +0 -0
  110. data/app/assets/javascripts/dojo/src/widget/templates/decrementMonth.gif +0 -0
  111. data/app/assets/javascripts/dojo/src/widget/templates/decrementWeek.gif +0 -0
  112. data/app/assets/javascripts/dojo/src/widget/templates/grabCorner.gif +0 -0
  113. data/app/assets/javascripts/dojo/src/widget/templates/images/floatingPaneClose.gif +0 -0
  114. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaAccordionOff.gif +0 -0
  115. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaAccordionSelected.gif +0 -0
  116. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaActive-c.gif +0 -0
  117. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaActive-l.gif +0 -0
  118. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaActive-r.gif +0 -0
  119. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaBarBg.gif +0 -0
  120. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaButton-c.gif +0 -0
  121. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaButton-l.gif +0 -0
  122. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaButton-r.gif +0 -0
  123. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaDisabled-c.gif +0 -0
  124. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaDisabled-l.gif +0 -0
  125. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaDisabled-r.gif +0 -0
  126. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaMenuBg.gif +0 -0
  127. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaPressed-c.gif +0 -0
  128. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaPressed-l.gif +0 -0
  129. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaPressed-r.gif +0 -0
  130. data/app/assets/javascripts/dojo/src/widget/templates/images/tab_close.gif +0 -0
  131. data/app/assets/javascripts/dojo/src/widget/templates/images/toolbar-bg.gif +0 -0
  132. data/app/assets/javascripts/dojo/src/widget/templates/incrementMonth.gif +0 -0
  133. data/app/assets/javascripts/dojo/src/widget/templates/incrementWeek.gif +0 -0
  134. data/app/assets/javascripts/dojo/src/widget/templates/richtextframe.html +24 -0
  135. data/app/assets/javascripts/imagine.js +1385 -0
  136. data/app/assets/javascripts/jquery_no_conflict.js +9405 -0
  137. data/app/assets/stylesheets/codepress/codepress.css +7 -0
  138. data/app/assets/stylesheets/codepress/languages/css.css +10 -0
  139. data/app/assets/stylesheets/codepress/languages/generic.css +9 -0
  140. data/app/assets/stylesheets/codepress/languages/html.css +18 -0
  141. data/app/assets/stylesheets/codepress/languages/java.css +7 -0
  142. data/app/assets/stylesheets/codepress/languages/javascript.css +8 -0
  143. data/app/assets/stylesheets/codepress/languages/perl.css +11 -0
  144. data/app/assets/stylesheets/codepress/languages/php.css +12 -0
  145. data/app/assets/stylesheets/codepress/languages/ruby.css +10 -0
  146. data/app/assets/stylesheets/codepress/languages/sql.css +10 -0
  147. data/app/assets/stylesheets/codepress/languages/text.css +5 -0
  148. data/app/assets/stylesheets/cropper.css +182 -0
  149. data/app/assets/stylesheets/management.css +96 -0
  150. data/app/assets/stylesheets/reset.css +58 -0
  151. data/app/controllers/cms/content_controller.rb +318 -2
  152. data/app/controllers/management/cms_controller.rb +1669 -0
  153. data/app/controllers/management/user_controller.rb +4 -4
  154. data/app/controllers/management/users_controller.rb +18 -4
  155. data/app/controllers/util_controller.rb +45 -0
  156. data/app/helpers/cms_application_helper.rb +662 -15
  157. data/app/models/cms_content_sweeper.rb +21 -0
  158. data/app/models/cms_page.rb +126 -0
  159. data/app/models/cms_page_object.rb +23 -0
  160. data/app/models/cms_page_tag.rb +5 -0
  161. data/app/models/cms_page_version.rb +3 -0
  162. data/app/models/cms_snippet.rb +16 -0
  163. data/app/models/cms_template.rb +29 -0
  164. data/app/models/user.rb +6 -3
  165. data/app/views/management/cms/_complete_gallery.html.erb +5 -0
  166. data/app/views/management/cms/_create_file_link.html.erb +21 -0
  167. data/app/views/management/cms/_crop_feature_image.html.erb +188 -0
  168. data/app/views/management/cms/_crop_image.html.erb +188 -0
  169. data/app/views/management/cms/_crop_results.html.erb +1 -0
  170. data/app/views/management/cms/_crop_results_feature_image.html.erb +1 -0
  171. data/app/views/management/cms/_crop_results_thumb.html.erb +1 -0
  172. data/app/views/management/cms/_crop_thumb.html.erb +188 -0
  173. data/app/views/management/cms/_dialogs.html.erb +39 -0
  174. data/app/views/management/cms/_edit_page.html.erb +176 -0
  175. data/app/views/management/cms/_gallery_index.html.erb +10 -0
  176. data/app/views/management/cms/_gallery_setup.html.erb +22 -0
  177. data/app/views/management/cms/_image.html.erb +3 -0
  178. data/app/views/management/cms/_image_details.html.erb +26 -0
  179. data/app/views/management/cms/_image_draggable.html.erb +4 -0
  180. data/app/views/management/cms/_list_page.html.erb +8 -0
  181. data/app/views/management/cms/_list_page_select.html.erb +8 -0
  182. data/app/views/management/cms/_list_pages.html.erb +1 -0
  183. data/app/views/management/cms/_list_pages_select.html.erb +1 -0
  184. data/app/views/management/cms/_page_attribute.html.erb +6 -0
  185. data/app/views/management/cms/_page_list.html.erb +171 -0
  186. data/app/views/management/cms/_page_list_source_folder.html.erb +20 -0
  187. data/app/views/management/cms/_page_list_source_tag.html.erb +18 -0
  188. data/app/views/management/cms/_select_gallery.html.erb +117 -0
  189. data/app/views/management/cms/_snippet.html.erb +3 -0
  190. data/app/views/management/cms/_sort_images.html.erb +15 -0
  191. data/app/views/management/cms/_temp.html.erb +3 -0
  192. data/app/views/management/cms/_template_options.html.erb +21 -0
  193. data/app/views/management/cms/_template_reference.html.erb +42 -0
  194. data/app/views/management/cms/_upload_feature_image.html.erb +35 -0
  195. data/app/views/management/cms/_upload_file.html.erb +31 -0
  196. data/app/views/management/cms/_upload_image.html.erb +74 -0
  197. data/app/views/management/cms/_upload_thumb.html.erb +35 -0
  198. data/app/views/management/cms/edit_master.html.erb +48 -0
  199. data/app/views/management/cms/edit_page_content.html.erb +4 -0
  200. data/app/views/management/cms/edit_snippet.html.erb +47 -0
  201. data/app/views/management/cms/edit_template.html.erb +48 -0
  202. data/app/views/management/cms/gallery_management.html.erb +108 -0
  203. data/app/views/management/cms/index.html.erb +20 -0
  204. data/app/views/management/cms/page_tags_for_lookup.html.erb +5 -0
  205. data/app/views/management/cms/pages.html.erb +99 -0
  206. data/app/views/management/cms/permission_denied.html.erb +1 -0
  207. data/app/views/management/cms/select_page.html.erb +57 -0
  208. data/app/views/management/cms/snippets.html.erb +14 -0
  209. data/app/views/management/cms/templates.html.erb +14 -0
  210. data/app/views/management/cms/toolbar_edit.html.erb +269 -0
  211. data/app/views/management/cms/toolbar_preview.html.erb +109 -0
  212. data/app/views/util/_calendar_days.html.erb +72 -0
  213. data/app/views/util/_calendar_month_year.html.erb +1 -0
  214. data/app/views/util/_date_picker.html.erb +56 -0
  215. data/app/views/util/_message.html.erb +1 -0
  216. data/app/views/util/_show_message.js.erb +6 -0
  217. data/app/views/util/_tab.html.erb +4 -0
  218. data/config/routes.rb +4 -1
  219. data/imagine_cms.gemspec +4 -0
  220. data/{vendor/gems → lib}/acts_as_versioned/.document +0 -0
  221. data/{vendor/gems → lib}/acts_as_versioned/.gitignore +2 -0
  222. data/{vendor/gems → lib}/acts_as_versioned/CHANGELOG +0 -0
  223. data/lib/acts_as_versioned/Gemfile +7 -0
  224. data/{vendor/gems → lib}/acts_as_versioned/MIT-LICENSE +0 -0
  225. data/{vendor/gems → lib}/acts_as_versioned/README +0 -0
  226. data/{vendor/gems → lib}/acts_as_versioned/RUNNING_UNIT_TESTS +0 -0
  227. data/{vendor/gems → lib}/acts_as_versioned/Rakefile +1 -1
  228. data/{vendor/gems → lib}/acts_as_versioned/acts_as_versioned.gemspec +4 -4
  229. data/{vendor/gems → lib}/acts_as_versioned/init.rb +0 -0
  230. data/{vendor/gems → lib}/acts_as_versioned/lib/acts_as_versioned.rb +109 -107
  231. data/{vendor/gems → lib}/acts_as_versioned/test/abstract_unit.rb +0 -0
  232. data/{vendor/gems → lib}/acts_as_versioned/test/database.yml +0 -0
  233. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/authors.yml +0 -0
  234. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/landmark.rb +0 -0
  235. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/landmark_versions.yml +0 -0
  236. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/landmarks.yml +0 -0
  237. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/locked_pages.yml +0 -0
  238. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/locked_pages_revisions.yml +0 -0
  239. data/{vendor/gems/acts_as_versioned/test/fixtures/migrations/1_add_versioned_tables.rb → lib/acts_as_versioned/test/fixtures/migrations/2_add_versioned_tables.rb} +0 -0
  240. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/page.rb +0 -0
  241. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/page_versions.yml +0 -0
  242. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/pages.yml +0 -0
  243. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/widget.rb +0 -0
  244. data/{vendor/gems → lib}/acts_as_versioned/test/migration_test.rb +0 -1
  245. data/{vendor/gems → lib}/acts_as_versioned/test/schema.rb +0 -0
  246. data/{vendor/gems → lib}/acts_as_versioned/test/versioned_test.rb +0 -0
  247. data/lib/extensions/action_controller.rb +154 -143
  248. data/lib/imagine_cms/engine.rb +33 -12
  249. data/lib/imagine_cms/version.rb +1 -1
  250. data/lib/imagine_cms.rb +30 -6
  251. data/lib/prototype_legacy_helper/README.markdown +13 -0
  252. data/lib/prototype_legacy_helper/init.rb +1 -0
  253. data/lib/prototype_legacy_helper/lib/prototype_legacy_helper.rb +430 -0
  254. data/lib/prototype_legacy_helper/test/test_prototype_helper.rb +297 -0
  255. data/lib/upload_progress/CHANGELOG +5 -0
  256. data/lib/upload_progress/MIT-LICENSE +20 -0
  257. data/lib/upload_progress/README +45 -0
  258. data/{vendor/gems/acts_as_tree → lib/upload_progress}/Rakefile +6 -5
  259. data/lib/upload_progress/init.rb +7 -0
  260. data/lib/upload_progress/lib/multipart_progress.rb +176 -0
  261. data/lib/upload_progress/lib/progress.rb +145 -0
  262. data/lib/upload_progress/lib/upload_progress.rb +303 -0
  263. data/lib/upload_progress/lib/upload_progress_helper.rb +425 -0
  264. data/lib/upload_progress/public/stylesheets/upload_progress.css +21 -0
  265. data/lib/upload_progress/test/multipart_progress_testx.rb +364 -0
  266. data/lib/upload_progress/test/upload_progress_helper_testx.rb +134 -0
  267. data/lib/upload_progress/test/upload_progress_testx.rb +88 -0
  268. metadata +305 -43
  269. data/app/assets/manage/btn_delete.gif +0 -0
  270. data/vendor/gems/.DS_Store +0 -0
  271. data/vendor/gems/acts_as_tree/README +0 -26
  272. data/vendor/gems/acts_as_tree/init.rb +0 -1
  273. data/vendor/gems/acts_as_tree/lib/active_record/acts/tree.rb +0 -96
  274. data/vendor/gems/acts_as_tree/test/acts_as_tree_test.rb +0 -219
  275. data/vendor/gems/acts_as_tree/test/fixtures/mixin.rb +0 -0
  276. data/vendor/gems/acts_as_tree/test/fixtures/mixins.yml +0 -0
  277. data/vendor/gems/acts_as_tree/test/schema.rb +0 -0
  278. data/vendor/gems/acts_as_versioned/Gemfile +0 -7
data/README.rdoc CHANGED
@@ -21,7 +21,7 @@ be a good time to get on board.
21
21
 
22
22
  =Roadmap
23
23
 
24
- Current status: Original functionality 25% restored
24
+ Current status: Original functionality 75% restored
25
25
 
26
26
  Here's what's coming up:
27
27
 
File without changes
File without changes
@@ -0,0 +1,101 @@
1
+ // Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
2
+ //
3
+ // See scriptaculous.js for full license.
4
+
5
+ var Builder = {
6
+ NODEMAP: {
7
+ AREA: 'map',
8
+ CAPTION: 'table',
9
+ COL: 'table',
10
+ COLGROUP: 'table',
11
+ LEGEND: 'fieldset',
12
+ OPTGROUP: 'select',
13
+ OPTION: 'select',
14
+ PARAM: 'object',
15
+ TBODY: 'table',
16
+ TD: 'table',
17
+ TFOOT: 'table',
18
+ TH: 'table',
19
+ THEAD: 'table',
20
+ TR: 'table'
21
+ },
22
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
23
+ // due to a Firefox bug
24
+ node: function(elementName) {
25
+ elementName = elementName.toUpperCase();
26
+
27
+ // try innerHTML approach
28
+ var parentTag = this.NODEMAP[elementName] || 'div';
29
+ var parentElement = document.createElement(parentTag);
30
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
31
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
32
+ } catch(e) {}
33
+ var element = parentElement.firstChild || null;
34
+
35
+ // see if browser added wrapping tags
36
+ if(element && (element.tagName != elementName))
37
+ element = element.getElementsByTagName(elementName)[0];
38
+
39
+ // fallback to createElement approach
40
+ if(!element) element = document.createElement(elementName);
41
+
42
+ // abort if nothing could be created
43
+ if(!element) return;
44
+
45
+ // attributes (or text)
46
+ if(arguments[1])
47
+ if(this._isStringOrNumber(arguments[1]) ||
48
+ (arguments[1] instanceof Array)) {
49
+ this._children(element, arguments[1]);
50
+ } else {
51
+ var attrs = this._attributes(arguments[1]);
52
+ if(attrs.length) {
53
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
54
+ parentElement.innerHTML = "<" +elementName + " " +
55
+ attrs + "></" + elementName + ">";
56
+ } catch(e) {}
57
+ element = parentElement.firstChild || null;
58
+ // workaround firefox 1.0.X bug
59
+ if(!element) {
60
+ element = document.createElement(elementName);
61
+ for(attr in arguments[1])
62
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
63
+ }
64
+ if(element.tagName != elementName)
65
+ element = parentElement.getElementsByTagName(elementName)[0];
66
+ }
67
+ }
68
+
69
+ // text, or array of children
70
+ if(arguments[2])
71
+ this._children(element, arguments[2]);
72
+
73
+ return element;
74
+ },
75
+ _text: function(text) {
76
+ return document.createTextNode(text);
77
+ },
78
+ _attributes: function(attributes) {
79
+ var attrs = [];
80
+ for(attribute in attributes)
81
+ attrs.push((attribute=='className' ? 'class' : attribute) +
82
+ '="' + attributes[attribute].toString().escapeHTML() + '"');
83
+ return attrs.join(" ");
84
+ },
85
+ _children: function(element, children) {
86
+ if(typeof children=='object') { // array can hold nodes and text
87
+ children.flatten().each( function(e) {
88
+ if(typeof e=='object')
89
+ element.appendChild(e)
90
+ else
91
+ if(Builder._isStringOrNumber(e))
92
+ element.appendChild(Builder._text(e));
93
+ });
94
+ } else
95
+ if(Builder._isStringOrNumber(children))
96
+ element.appendChild(Builder._text(children));
97
+ },
98
+ _isStringOrNumber: function(param) {
99
+ return(typeof param=='string' || typeof param=='number');
100
+ }
101
+ }
@@ -0,0 +1,36 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html>
3
+ <head>
4
+ <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title>
5
+ <meta name="description" content="CodePress - source code editor window" />
6
+
7
+ <script type="text/javascript">
8
+ var language = 'generic';
9
+ var engine = 'older';
10
+ var ua = navigator.userAgent;
11
+ var ts = (new Date).getTime(); // timestamp to avoid cache
12
+ var lh = location.href;
13
+
14
+ if(ua.match('MSIE')) engine = 'msie';
15
+ else if(ua.match('KHTML')) engine = 'khtml';
16
+ else if(ua.match('Opera')) engine = 'opera';
17
+ else if(ua.match('Gecko')) engine = 'gecko';
18
+
19
+ if(lh.match('language=')) language = lh.replace(/.*language=(.*?)(&.*)?$/,'$1');
20
+
21
+ document.write('<link type="text/css" href="codepress.css?ts='+ts+'" rel="stylesheet" />');
22
+ document.write('<link type="text/css" href="languages/'+language+'.css?ts='+ts+'" rel="stylesheet" id="cp-lang-style" />');
23
+ document.write('<scr'+'ipt type="text/javascript" src="engines/'+engine+'.js?ts='+ts+'"></scr'+'ipt>');
24
+ document.write('<scr'+'ipt type="text/javascript" src="languages/'+language+'.js?ts='+ts+'"></scr'+'ipt>');
25
+ </script>
26
+
27
+ </head>
28
+
29
+ <script type="text/javascript">
30
+ if (engine == "gecko") document.write('<body> </body>');
31
+ else if(engine == "msie") document.write('<body><pre></pre></body>');
32
+ else if(engine == "opera") document.write('<body></body>');
33
+ // else if(engine == "khtml") document.write('<body> </body>');
34
+ </script>
35
+
36
+ </html>
@@ -0,0 +1,130 @@
1
+ /*
2
+ * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
3
+ *
4
+ * Copyright (C) 2006 Fernando M.A.d.S. <fermads@gmail.com>
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
7
+ * GNU Lesser General Public License as published by the Free Software Foundation.
8
+ *
9
+ * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php
10
+ */
11
+
12
+ CodePress = function(obj) {
13
+ var self = document.createElement('iframe');
14
+ self.textarea = obj;
15
+ self.textarea.disabled = true;
16
+ self.textarea.style.overflow = 'hidden';
17
+ self.style.height = self.textarea.clientHeight +'px';
18
+ self.style.width = self.textarea.clientWidth +'px';
19
+ self.textarea.style.overflow = 'auto';
20
+ self.style.border = '1px solid gray';
21
+ self.frameBorder = 0; // remove IE internal iframe border
22
+ self.style.visibility = 'hidden';
23
+ self.style.position = 'absolute';
24
+ self.options = self.textarea.className;
25
+
26
+ self.initialize = function() {
27
+ self.editor = self.contentWindow.CodePress;
28
+ self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0];
29
+ self.editor.setCode(self.textarea.value);
30
+ self.setOptions();
31
+ self.editor.syntaxHighlight('init');
32
+ self.textarea.style.display = 'none';
33
+ self.style.position = 'static';
34
+ self.style.visibility = 'visible';
35
+ self.style.display = 'inline';
36
+ }
37
+
38
+ self.edit = function(id,language) {
39
+ if(id) self.textarea.value = document.getElementById(id).value;
40
+ if(!self.textarea.disabled) return;
41
+ self.language = language ? language : self.options.replace(/ ?codepress ?| ?readonly-on ?| ?autocomplete-off ?| ?linenumbers-off ?/g,'');
42
+ if(!CodePress.languages[self.language]) self.language = 'generic';
43
+ self.src = CodePress.path+'codepress.html?language='+self.language+'&ts='+(new Date).getTime();
44
+ if(self.attachEvent) self.attachEvent('onload',self.initialize);
45
+ else self.addEventListener('load',self.initialize,false);
46
+ }
47
+
48
+ self.setOptions = function() {
49
+ if(self.options.match('autocomplete-off')) self.toggleAutoComplete();
50
+ if(self.options.match('readonly-on')) self.toggleReadOnly();
51
+ if(self.options.match('linenumbers-off')) self.toggleLineNumbers();
52
+ }
53
+
54
+ self.getCode = function() {
55
+ return self.textarea.disabled ? self.editor.getCode() : self.textarea.value;
56
+ }
57
+
58
+ self.setCode = function(code) {
59
+ self.textarea.disabled ? self.editor.setCode(code) : self.textarea.value = code;
60
+ }
61
+
62
+ self.toggleAutoComplete = function() {
63
+ self.editor.autocomplete = (self.editor.autocomplete) ? false : true;
64
+ }
65
+
66
+ self.toggleReadOnly = function() {
67
+ self.textarea.readOnly = (self.textarea.readOnly) ? false : true;
68
+ if(self.style.display != 'none') // prevent exception on FF + iframe with display:none
69
+ self.editor.readOnly(self.textarea.readOnly ? true : false);
70
+ }
71
+
72
+ self.toggleLineNumbers = function() {
73
+ var cn = self.editor.body.className;
74
+ self.editor.body.className = (cn==''||cn=='show-line-numbers') ? 'hide-line-numbers' : 'show-line-numbers';
75
+ }
76
+
77
+ self.toggleEditor = function() {
78
+ if(self.textarea.disabled) {
79
+ self.textarea.value = self.getCode();
80
+ self.textarea.disabled = false;
81
+ self.style.display = 'none';
82
+ self.textarea.style.display = 'inline';
83
+ }
84
+ else {
85
+ self.textarea.disabled = true;
86
+ self.setCode(self.textarea.value);
87
+ self.editor.syntaxHighlight('init');
88
+ self.style.display = 'inline';
89
+ self.textarea.style.display = 'none';
90
+ }
91
+ }
92
+
93
+ self.edit();
94
+ return self;
95
+ }
96
+
97
+ CodePress.languages = {
98
+ css : 'CSS',
99
+ generic : 'Generic',
100
+ html : 'HTML',
101
+ java : 'Java',
102
+ javascript : 'JavaScript',
103
+ perl : 'Perl',
104
+ ruby : 'Ruby',
105
+ php : 'PHP',
106
+ text : 'Text',
107
+ sql : 'SQL'
108
+ }
109
+
110
+
111
+ CodePress.run = function() {
112
+ s = document.getElementsByTagName('script');
113
+ for(var i=0,n=s.length;i<n;i++) {
114
+ if(s[i].src.match('codepress.js')) {
115
+ CodePress.path = s[i].src.replace(/codepress\.js.*/,'');
116
+ }
117
+ }
118
+ t = document.getElementsByTagName('textarea');
119
+ for(var i=0,n=t.length;i<n;i++) {
120
+ if(t[i].className.match('codepress')) {
121
+ id = t[i].id;
122
+ t[i].id = id+'_cp';
123
+ eval(id+' = new CodePress(t[i])');
124
+ t[i].parentNode.insertBefore(eval(id), t[i]);
125
+ }
126
+ }
127
+ }
128
+
129
+ if(window.attachEvent) window.attachEvent('onload',CodePress.run);
130
+ else window.addEventListener('DOMContentLoaded',CodePress.run,false);
@@ -0,0 +1,240 @@
1
+ /*
2
+ * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
3
+ *
4
+ * Copyright (C) 2007 Fernando M.A.d.S. <fermads@gmail.com>
5
+ *
6
+ * Contributors :
7
+ *
8
+ * Michael Hurni <michael.hurni@gmail.com>
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
11
+ * GNU Lesser General Public License as published by the Free Software Foundation.
12
+ *
13
+ * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php
14
+ */
15
+
16
+
17
+ CodePress = {
18
+ scrolling : false,
19
+ autocomplete : true,
20
+
21
+ // set initial vars and start sh
22
+ initialize : function() {
23
+ if(typeof(editor)=='undefined' && !arguments[0]) return;
24
+ chars = '|32|46|62|'; // charcodes that trigger syntax highlighting
25
+ cc = '\u2009'; // control char
26
+ editor = document.getElementsByTagName('body')[0];
27
+ document.designMode = 'on';
28
+ document.addEventListener('keypress', this.keyHandler, true);
29
+ window.addEventListener('scroll', function() { if(!CodePress.scrolling) CodePress.syntaxHighlight('scroll') }, false);
30
+ completeChars = this.getCompleteChars();
31
+ // CodePress.syntaxHighlight('init');
32
+ },
33
+
34
+ // treat key bindings
35
+ keyHandler : function(evt) {
36
+ keyCode = evt.keyCode;
37
+ charCode = evt.charCode;
38
+
39
+ if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && charCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo)
40
+ CodePress.shortcuts(charCode?charCode:keyCode);
41
+ }
42
+ else if(completeChars.indexOf('|'+String.fromCharCode(charCode)+'|')!=-1 && CodePress.autocomplete) { // auto complete
43
+ CodePress.complete(String.fromCharCode(charCode));
44
+ }
45
+ else if(chars.indexOf('|'+charCode+'|')!=-1||keyCode==13) { // syntax highlighting
46
+ CodePress.syntaxHighlight('generic');
47
+ }
48
+ else if(keyCode==9 || evt.tabKey) { // snippets activation (tab)
49
+ CodePress.snippets(evt);
50
+ }
51
+ else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed
52
+ CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML;
53
+ }
54
+ else if((charCode==122||charCode==121||charCode==90) && evt.ctrlKey) { // undo and redo
55
+ (charCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo();
56
+ evt.preventDefault();
57
+ }
58
+ else if(keyCode==86 && evt.ctrlKey) { // paste
59
+ // TODO: pasted text should be parsed and highlighted
60
+ }
61
+ },
62
+
63
+ // put cursor back to its original position after every parsing
64
+ findString : function() {
65
+ if(self.find(cc))
66
+ window.getSelection().getRangeAt(0).deleteContents();
67
+ },
68
+
69
+ // split big files, highlighting parts of it
70
+ split : function(code,flag) {
71
+ if(flag=='scroll') {
72
+ this.scrolling = true;
73
+ return code;
74
+ }
75
+ else {
76
+ this.scrolling = false;
77
+ mid = code.indexOf(cc);
78
+ if(mid-2000<0) {ini=0;end=4000;}
79
+ else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;}
80
+ else {ini=mid-2000;end=mid+2000;}
81
+ code = code.substring(ini,end);
82
+ return code;
83
+ }
84
+ },
85
+
86
+ // syntax highlighting parser
87
+ syntaxHighlight : function(flag) {
88
+ //if(document.designMode=='off') document.designMode='on'
89
+ if(flag!='init') window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc));
90
+
91
+ o = editor.innerHTML;
92
+ o = o.replace(/<br>/g,'\n');
93
+ o = o.replace(/<.*?>/g,'');
94
+ x = z = this.split(o,flag);
95
+ x = x.replace(/\n/g,'<br>');
96
+
97
+ if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]);
98
+
99
+ for(i=0;i<Language.syntax.length;i++)
100
+ x = x.replace(Language.syntax[i].input,Language.syntax[i].output);
101
+
102
+ editor.innerHTML = this.actions.history[this.actions.next()] = (flag=='scroll') ? x : o.split(z).join(x);
103
+ if(flag!='init') this.findString();
104
+ },
105
+
106
+ getLastWord : function() {
107
+ var rangeAndCaret = CodePress.getRangeAndCaret();
108
+ var words = rangeAndCaret[0].substring(rangeAndCaret[1]-40,rangeAndCaret[1]).split(/[\s\r\n\);]/);
109
+ return words[words.length-1].replace(/_/g,'');
110
+ },
111
+
112
+ snippets : function(evt) {
113
+ var snippets = Language.snippets;
114
+ var trigger = this.getLastWord();
115
+ for (var i=0; i<snippets.length; i++) {
116
+ if(snippets[i].input == trigger) {
117
+ var content = snippets[i].output.replace(/</g,'&lt;');
118
+ content = content.replace(/>/g,'&gt;');
119
+ if(content.indexOf('$0')<0) content += cc;
120
+ else content = content.replace(/\$0/,cc);
121
+ content = content.replace(/\n/g,'<br>');
122
+ var pattern = new RegExp(trigger+cc,'g');
123
+ evt.preventDefault(); // prevent the tab key from being added
124
+ this.syntaxHighlight('snippets',pattern,content);
125
+ }
126
+ }
127
+ },
128
+
129
+ readOnly : function() {
130
+ document.designMode = (arguments[0]) ? 'off' : 'on';
131
+ },
132
+
133
+ complete : function(trigger) {
134
+ window.getSelection().getRangeAt(0).deleteContents();
135
+ var complete = Language.complete;
136
+ for (var i=0; i<complete.length; i++) {
137
+ if(complete[i].input == trigger) {
138
+ var pattern = new RegExp('\\'+trigger+cc);
139
+ var content = complete[i].output.replace(/\$0/g,cc);
140
+ parent.setTimeout(function () { CodePress.syntaxHighlight('complete',pattern,content)},0); // wait for char to appear on screen
141
+ }
142
+ }
143
+ },
144
+
145
+ getCompleteChars : function() {
146
+ var cChars = '';
147
+ for(var i=0;i<Language.complete.length;i++)
148
+ cChars += '|'+Language.complete[i].input;
149
+ return cChars+'|';
150
+ },
151
+
152
+ shortcuts : function() {
153
+ var cCode = arguments[0];
154
+ if(cCode==13) cCode = '[enter]';
155
+ else if(cCode==32) cCode = '[space]';
156
+ else cCode = '['+String.fromCharCode(charCode).toLowerCase()+']';
157
+ for(var i=0;i<Language.shortcuts.length;i++)
158
+ if(Language.shortcuts[i].input == cCode)
159
+ this.insertCode(Language.shortcuts[i].output,false);
160
+ },
161
+
162
+ getRangeAndCaret : function() {
163
+ var range = window.getSelection().getRangeAt(0);
164
+ var range2 = range.cloneRange();
165
+ var node = range.endContainer;
166
+ var caret = range.endOffset;
167
+ range2.selectNode(node);
168
+ return [range2.toString(),caret];
169
+ },
170
+
171
+ insertCode : function(code,replaceCursorBefore) {
172
+ var range = window.getSelection().getRangeAt(0);
173
+ var node = window.document.createTextNode(code);
174
+ var selct = window.getSelection();
175
+ var range2 = range.cloneRange();
176
+ // Insert text at cursor position
177
+ selct.removeAllRanges();
178
+ range.deleteContents();
179
+ range.insertNode(node);
180
+ // Move the cursor to the end of text
181
+ range2.selectNode(node);
182
+ range2.collapse(replaceCursorBefore);
183
+ selct.removeAllRanges();
184
+ selct.addRange(range2);
185
+ },
186
+
187
+ // get code from editor
188
+ getCode : function() {
189
+ var code = editor.innerHTML;
190
+ code = code.replace(/<br>/g,'\n');
191
+ code = code.replace(/\u2009/g,'');
192
+ code = code.replace(/<.*?>/g,'');
193
+ code = code.replace(/&lt;/g,'<');
194
+ code = code.replace(/&gt;/g,'>');
195
+ code = code.replace(/&amp;/gi,'&');
196
+ return code;
197
+ },
198
+
199
+ // put code inside editor
200
+ setCode : function() {
201
+ var code = arguments[0];
202
+ code = code.replace(/\u2009/gi,'');
203
+ code = code.replace(/&/gi,'&amp;');
204
+ code = code.replace(/</g,'&lt;');
205
+ code = code.replace(/>/g,'&gt;');
206
+ editor.innerHTML = code;
207
+ },
208
+
209
+ // undo and redo methods
210
+ actions : {
211
+ pos : -1, // actual history position
212
+ history : [], // history vector
213
+
214
+ undo : function() {
215
+ if(editor.innerHTML.indexOf(cc)==-1){
216
+ window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc));
217
+ this.history[this.pos] = editor.innerHTML;
218
+ }
219
+ this.pos--;
220
+ if(typeof(this.history[this.pos])=='undefined') this.pos++;
221
+ editor.innerHTML = this.history[this.pos];
222
+ CodePress.findString();
223
+ },
224
+
225
+ redo : function() {
226
+ this.pos++;
227
+ if(typeof(this.history[this.pos])=='undefined') this.pos--;
228
+ editor.innerHTML = this.history[this.pos];
229
+ CodePress.findString();
230
+ },
231
+
232
+ next : function() { // get next vector position and clean old ones
233
+ if(this.pos>20) this.history[this.pos-21] = undefined;
234
+ return ++this.pos;
235
+ }
236
+ }
237
+ }
238
+
239
+ Language={};
240
+ window.addEventListener('load', function() { CodePress.initialize('new'); }, true);