jonleighton-bcms_feeds 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (622) hide show
  1. data/.gitignore +4 -0
  2. data/README +10 -0
  3. data/Rakefile +33 -0
  4. data/VERSION +1 -0
  5. data/app/controllers/application_controller.rb +10 -0
  6. data/app/helpers/application_helper.rb +3 -0
  7. data/app/models/feed.rb +35 -0
  8. data/app/portlets/feed_portlet.rb +9 -0
  9. data/app/views/portlets/feed/_form.html.erb +4 -0
  10. data/app/views/portlets/feed/render.html.erb +1 -0
  11. data/bcms_feeds.gemspec +675 -0
  12. data/config/boot.rb +110 -0
  13. data/config/database.example.yml +22 -0
  14. data/config/environment.rb +44 -0
  15. data/config/environments/development.rb +18 -0
  16. data/config/environments/production.rb +31 -0
  17. data/config/environments/test.rb +29 -0
  18. data/config/initializers/backtrace_silencers.rb +7 -0
  19. data/config/initializers/browsercms.rb +1 -0
  20. data/config/initializers/inflections.rb +10 -0
  21. data/config/initializers/mime_types.rb +5 -0
  22. data/config/initializers/new_rails_defaults.rb +19 -0
  23. data/config/initializers/session_store.rb +15 -0
  24. data/config/locales/en.yml +5 -0
  25. data/config/routes.rb +45 -0
  26. data/db/migrate/20090813213104_add_feeds.rb +13 -0
  27. data/db/schema.rb +436 -0
  28. data/doc/README_FOR_APP +2 -0
  29. data/lib/bcms_feeds.rb +1 -0
  30. data/public/404.html +30 -0
  31. data/public/422.html +30 -0
  32. data/public/500.html +30 -0
  33. data/public/favicon.ico +0 -0
  34. data/public/fckeditor/editor/css/behaviors/disablehandles.htc +15 -0
  35. data/public/fckeditor/editor/css/behaviors/showtableborders.htc +36 -0
  36. data/public/fckeditor/editor/css/fck_editorarea.css +110 -0
  37. data/public/fckeditor/editor/css/fck_internal.css +199 -0
  38. data/public/fckeditor/editor/css/fck_showtableborders_gecko.css +49 -0
  39. data/public/fckeditor/editor/css/images/block_address.png +0 -0
  40. data/public/fckeditor/editor/css/images/block_blockquote.png +0 -0
  41. data/public/fckeditor/editor/css/images/block_div.png +0 -0
  42. data/public/fckeditor/editor/css/images/block_h1.png +0 -0
  43. data/public/fckeditor/editor/css/images/block_h2.png +0 -0
  44. data/public/fckeditor/editor/css/images/block_h3.png +0 -0
  45. data/public/fckeditor/editor/css/images/block_h4.png +0 -0
  46. data/public/fckeditor/editor/css/images/block_h5.png +0 -0
  47. data/public/fckeditor/editor/css/images/block_h6.png +0 -0
  48. data/public/fckeditor/editor/css/images/block_p.png +0 -0
  49. data/public/fckeditor/editor/css/images/block_pre.png +0 -0
  50. data/public/fckeditor/editor/css/images/fck_anchor.gif +0 -0
  51. data/public/fckeditor/editor/css/images/fck_flashlogo.gif +0 -0
  52. data/public/fckeditor/editor/css/images/fck_hiddenfield.gif +0 -0
  53. data/public/fckeditor/editor/css/images/fck_pagebreak.gif +0 -0
  54. data/public/fckeditor/editor/css/images/fck_plugin.gif +0 -0
  55. data/public/fckeditor/editor/dialog/common/fck_dialog_common.css +85 -0
  56. data/public/fckeditor/editor/dialog/common/fck_dialog_common.js +311 -0
  57. data/public/fckeditor/editor/dialog/common/images/locked.gif +0 -0
  58. data/public/fckeditor/editor/dialog/common/images/reset.gif +0 -0
  59. data/public/fckeditor/editor/dialog/common/images/unlocked.gif +0 -0
  60. data/public/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif +0 -0
  61. data/public/fckeditor/editor/dialog/fck_about/logo_fredck.gif +0 -0
  62. data/public/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif +0 -0
  63. data/public/fckeditor/editor/dialog/fck_about.html +161 -0
  64. data/public/fckeditor/editor/dialog/fck_anchor.html +220 -0
  65. data/public/fckeditor/editor/dialog/fck_button.html +104 -0
  66. data/public/fckeditor/editor/dialog/fck_checkbox.html +104 -0
  67. data/public/fckeditor/editor/dialog/fck_colorselector.html +172 -0
  68. data/public/fckeditor/editor/dialog/fck_div.html +364 -0
  69. data/public/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html +113 -0
  70. data/public/fckeditor/editor/dialog/fck_docprops.html +600 -0
  71. data/public/fckeditor/editor/dialog/fck_flash/fck_flash.js +300 -0
  72. data/public/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html +50 -0
  73. data/public/fckeditor/editor/dialog/fck_flash.html +152 -0
  74. data/public/fckeditor/editor/dialog/fck_form.html +109 -0
  75. data/public/fckeditor/editor/dialog/fck_hiddenfield.html +115 -0
  76. data/public/fckeditor/editor/dialog/fck_image/fck_image.js +512 -0
  77. data/public/fckeditor/editor/dialog/fck_image/fck_image_preview.html +72 -0
  78. data/public/fckeditor/editor/dialog/fck_image.html +258 -0
  79. data/public/fckeditor/editor/dialog/fck_link/fck_link.js +893 -0
  80. data/public/fckeditor/editor/dialog/fck_link.html +295 -0
  81. data/public/fckeditor/editor/dialog/fck_listprop.html +120 -0
  82. data/public/fckeditor/editor/dialog/fck_paste.html +346 -0
  83. data/public/fckeditor/editor/dialog/fck_radiobutton.html +104 -0
  84. data/public/fckeditor/editor/dialog/fck_replace.html +648 -0
  85. data/public/fckeditor/editor/dialog/fck_select/fck_select.js +194 -0
  86. data/public/fckeditor/editor/dialog/fck_select.html +180 -0
  87. data/public/fckeditor/editor/dialog/fck_smiley.html +111 -0
  88. data/public/fckeditor/editor/dialog/fck_source.html +68 -0
  89. data/public/fckeditor/editor/dialog/fck_specialchar.html +121 -0
  90. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html +0 -0
  91. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js +87 -0
  92. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html +153 -0
  93. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm +148 -0
  94. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php +199 -0
  95. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl +181 -0
  96. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js +461 -0
  97. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html +71 -0
  98. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css +49 -0
  99. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js +272 -0
  100. data/public/fckeditor/editor/dialog/fck_spellerpages.html +70 -0
  101. data/public/fckeditor/editor/dialog/fck_table.html +298 -0
  102. data/public/fckeditor/editor/dialog/fck_tablecell.html +257 -0
  103. data/public/fckeditor/editor/dialog/fck_template/images/template1.gif +0 -0
  104. data/public/fckeditor/editor/dialog/fck_template/images/template2.gif +0 -0
  105. data/public/fckeditor/editor/dialog/fck_template/images/template3.gif +0 -0
  106. data/public/fckeditor/editor/dialog/fck_template.html +242 -0
  107. data/public/fckeditor/editor/dialog/fck_textarea.html +94 -0
  108. data/public/fckeditor/editor/dialog/fck_textfield.html +136 -0
  109. data/public/fckeditor/editor/dtd/fck_dtd_test.html +41 -0
  110. data/public/fckeditor/editor/dtd/fck_xhtml10strict.js +116 -0
  111. data/public/fckeditor/editor/dtd/fck_xhtml10transitional.js +140 -0
  112. data/public/fckeditor/editor/fckdebug.html +153 -0
  113. data/public/fckeditor/editor/fckdialog.html +812 -0
  114. data/public/fckeditor/editor/fckeditor.html +317 -0
  115. data/public/fckeditor/editor/fckeditor.original.html +424 -0
  116. data/public/fckeditor/editor/filemanager/browser/default/browser.css +87 -0
  117. data/public/fckeditor/editor/filemanager/browser/default/browser.html +200 -0
  118. data/public/fckeditor/editor/filemanager/browser/default/frmactualfolder.html +95 -0
  119. data/public/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html +114 -0
  120. data/public/fckeditor/editor/filemanager/browser/default/frmfolders.html +198 -0
  121. data/public/fckeditor/editor/filemanager/browser/default/frmresourceslist.html +169 -0
  122. data/public/fckeditor/editor/filemanager/browser/default/frmresourcetype.html +68 -0
  123. data/public/fckeditor/editor/filemanager/browser/default/frmupload.html +115 -0
  124. data/public/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif +0 -0
  125. data/public/fckeditor/editor/filemanager/browser/default/images/Folder.gif +0 -0
  126. data/public/fckeditor/editor/filemanager/browser/default/images/Folder32.gif +0 -0
  127. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif +0 -0
  128. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif +0 -0
  129. data/public/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif +0 -0
  130. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif +0 -0
  131. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif +0 -0
  132. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif +0 -0
  133. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif +0 -0
  134. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif +0 -0
  135. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif +0 -0
  136. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif +0 -0
  137. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif +0 -0
  138. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif +0 -0
  139. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif +0 -0
  140. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif +0 -0
  141. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif +0 -0
  142. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif +0 -0
  143. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif +0 -0
  144. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif +0 -0
  145. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif +0 -0
  146. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif +0 -0
  147. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif +0 -0
  148. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif +0 -0
  149. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif +0 -0
  150. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif +0 -0
  151. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif +0 -0
  152. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif +0 -0
  153. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif +0 -0
  154. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif +0 -0
  155. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif +0 -0
  156. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif +0 -0
  157. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif +0 -0
  158. data/public/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif +0 -0
  159. data/public/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif +0 -0
  160. data/public/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif +0 -0
  161. data/public/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif +0 -0
  162. data/public/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif +0 -0
  163. data/public/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif +0 -0
  164. data/public/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif +0 -0
  165. data/public/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif +0 -0
  166. data/public/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif +0 -0
  167. data/public/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif +0 -0
  168. data/public/fckeditor/editor/filemanager/browser/default/images/icons/html.gif +0 -0
  169. data/public/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif +0 -0
  170. data/public/fckeditor/editor/filemanager/browser/default/images/icons/js.gif +0 -0
  171. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif +0 -0
  172. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif +0 -0
  173. data/public/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif +0 -0
  174. data/public/fckeditor/editor/filemanager/browser/default/images/icons/png.gif +0 -0
  175. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif +0 -0
  176. data/public/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif +0 -0
  177. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif +0 -0
  178. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif +0 -0
  179. data/public/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif +0 -0
  180. data/public/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif +0 -0
  181. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif +0 -0
  182. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif +0 -0
  183. data/public/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif +0 -0
  184. data/public/fckeditor/editor/filemanager/browser/default/images/spacer.gif +0 -0
  185. data/public/fckeditor/editor/filemanager/browser/default/js/common.js +88 -0
  186. data/public/fckeditor/editor/filemanager/browser/default/js/fckxml.js +147 -0
  187. data/public/fckeditor/editor/images/anchor.gif +0 -0
  188. data/public/fckeditor/editor/images/arrow_ltr.gif +0 -0
  189. data/public/fckeditor/editor/images/arrow_rtl.gif +0 -0
  190. data/public/fckeditor/editor/images/smiley/msn/angel_smile.gif +0 -0
  191. data/public/fckeditor/editor/images/smiley/msn/angry_smile.gif +0 -0
  192. data/public/fckeditor/editor/images/smiley/msn/broken_heart.gif +0 -0
  193. data/public/fckeditor/editor/images/smiley/msn/cake.gif +0 -0
  194. data/public/fckeditor/editor/images/smiley/msn/confused_smile.gif +0 -0
  195. data/public/fckeditor/editor/images/smiley/msn/cry_smile.gif +0 -0
  196. data/public/fckeditor/editor/images/smiley/msn/devil_smile.gif +0 -0
  197. data/public/fckeditor/editor/images/smiley/msn/embaressed_smile.gif +0 -0
  198. data/public/fckeditor/editor/images/smiley/msn/envelope.gif +0 -0
  199. data/public/fckeditor/editor/images/smiley/msn/heart.gif +0 -0
  200. data/public/fckeditor/editor/images/smiley/msn/kiss.gif +0 -0
  201. data/public/fckeditor/editor/images/smiley/msn/lightbulb.gif +0 -0
  202. data/public/fckeditor/editor/images/smiley/msn/omg_smile.gif +0 -0
  203. data/public/fckeditor/editor/images/smiley/msn/regular_smile.gif +0 -0
  204. data/public/fckeditor/editor/images/smiley/msn/sad_smile.gif +0 -0
  205. data/public/fckeditor/editor/images/smiley/msn/shades_smile.gif +0 -0
  206. data/public/fckeditor/editor/images/smiley/msn/teeth_smile.gif +0 -0
  207. data/public/fckeditor/editor/images/smiley/msn/thumbs_down.gif +0 -0
  208. data/public/fckeditor/editor/images/smiley/msn/thumbs_up.gif +0 -0
  209. data/public/fckeditor/editor/images/smiley/msn/tounge_smile.gif +0 -0
  210. data/public/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif +0 -0
  211. data/public/fckeditor/editor/images/smiley/msn/wink_smile.gif +0 -0
  212. data/public/fckeditor/editor/images/spacer.gif +0 -0
  213. data/public/fckeditor/editor/js/fckadobeair.js +176 -0
  214. data/public/fckeditor/editor/js/fckeditorcode_gecko.js +108 -0
  215. data/public/fckeditor/editor/js/fckeditorcode_ie.js +109 -0
  216. data/public/fckeditor/editor/lang/_translationstatus.txt +78 -0
  217. data/public/fckeditor/editor/lang/af.js +526 -0
  218. data/public/fckeditor/editor/lang/ar.js +526 -0
  219. data/public/fckeditor/editor/lang/bg.js +526 -0
  220. data/public/fckeditor/editor/lang/bn.js +526 -0
  221. data/public/fckeditor/editor/lang/bs.js +526 -0
  222. data/public/fckeditor/editor/lang/ca.js +526 -0
  223. data/public/fckeditor/editor/lang/cs.js +526 -0
  224. data/public/fckeditor/editor/lang/da.js +526 -0
  225. data/public/fckeditor/editor/lang/de.js +526 -0
  226. data/public/fckeditor/editor/lang/el.js +526 -0
  227. data/public/fckeditor/editor/lang/en-au.js +526 -0
  228. data/public/fckeditor/editor/lang/en-ca.js +526 -0
  229. data/public/fckeditor/editor/lang/en-uk.js +526 -0
  230. data/public/fckeditor/editor/lang/en.js +526 -0
  231. data/public/fckeditor/editor/lang/eo.js +526 -0
  232. data/public/fckeditor/editor/lang/es.js +526 -0
  233. data/public/fckeditor/editor/lang/et.js +526 -0
  234. data/public/fckeditor/editor/lang/eu.js +527 -0
  235. data/public/fckeditor/editor/lang/fa.js +526 -0
  236. data/public/fckeditor/editor/lang/fi.js +526 -0
  237. data/public/fckeditor/editor/lang/fo.js +526 -0
  238. data/public/fckeditor/editor/lang/fr-ca.js +526 -0
  239. data/public/fckeditor/editor/lang/fr.js +526 -0
  240. data/public/fckeditor/editor/lang/gl.js +526 -0
  241. data/public/fckeditor/editor/lang/gu.js +526 -0
  242. data/public/fckeditor/editor/lang/he.js +526 -0
  243. data/public/fckeditor/editor/lang/hi.js +526 -0
  244. data/public/fckeditor/editor/lang/hr.js +526 -0
  245. data/public/fckeditor/editor/lang/hu.js +526 -0
  246. data/public/fckeditor/editor/lang/it.js +526 -0
  247. data/public/fckeditor/editor/lang/ja.js +526 -0
  248. data/public/fckeditor/editor/lang/km.js +526 -0
  249. data/public/fckeditor/editor/lang/ko.js +526 -0
  250. data/public/fckeditor/editor/lang/lt.js +526 -0
  251. data/public/fckeditor/editor/lang/lv.js +526 -0
  252. data/public/fckeditor/editor/lang/mn.js +526 -0
  253. data/public/fckeditor/editor/lang/ms.js +526 -0
  254. data/public/fckeditor/editor/lang/nb.js +526 -0
  255. data/public/fckeditor/editor/lang/nl.js +526 -0
  256. data/public/fckeditor/editor/lang/no.js +526 -0
  257. data/public/fckeditor/editor/lang/pl.js +526 -0
  258. data/public/fckeditor/editor/lang/pt-br.js +526 -0
  259. data/public/fckeditor/editor/lang/pt.js +526 -0
  260. data/public/fckeditor/editor/lang/ro.js +526 -0
  261. data/public/fckeditor/editor/lang/ru.js +526 -0
  262. data/public/fckeditor/editor/lang/sk.js +526 -0
  263. data/public/fckeditor/editor/lang/sl.js +526 -0
  264. data/public/fckeditor/editor/lang/sr-latn.js +526 -0
  265. data/public/fckeditor/editor/lang/sr.js +526 -0
  266. data/public/fckeditor/editor/lang/sv.js +526 -0
  267. data/public/fckeditor/editor/lang/th.js +526 -0
  268. data/public/fckeditor/editor/lang/tr.js +526 -0
  269. data/public/fckeditor/editor/lang/uk.js +526 -0
  270. data/public/fckeditor/editor/lang/vi.js +526 -0
  271. data/public/fckeditor/editor/lang/zh-cn.js +526 -0
  272. data/public/fckeditor/editor/lang/zh.js +526 -0
  273. data/public/fckeditor/editor/plugins/autogrow/fckplugin.js +99 -0
  274. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.config.js +26 -0
  275. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.html +67 -0
  276. data/public/fckeditor/editor/plugins/bbcode/fckplugin.js +123 -0
  277. data/public/fckeditor/editor/plugins/dragresizetable/fckplugin.js +524 -0
  278. data/public/fckeditor/editor/plugins/placeholder/fck_placeholder.html +105 -0
  279. data/public/fckeditor/editor/plugins/placeholder/fckplugin.js +187 -0
  280. data/public/fckeditor/editor/plugins/placeholder/lang/de.js +27 -0
  281. data/public/fckeditor/editor/plugins/placeholder/lang/en.js +27 -0
  282. data/public/fckeditor/editor/plugins/placeholder/lang/es.js +27 -0
  283. data/public/fckeditor/editor/plugins/placeholder/lang/fr.js +27 -0
  284. data/public/fckeditor/editor/plugins/placeholder/lang/it.js +27 -0
  285. data/public/fckeditor/editor/plugins/placeholder/lang/pl.js +27 -0
  286. data/public/fckeditor/editor/plugins/placeholder/placeholder.gif +0 -0
  287. data/public/fckeditor/editor/plugins/simplecommands/fckplugin.js +29 -0
  288. data/public/fckeditor/editor/plugins/tablecommands/fckplugin.js +33 -0
  289. data/public/fckeditor/editor/skins/_fckviewstrips.html +121 -0
  290. data/public/fckeditor/editor/skins/default/fck_dialog.css +402 -0
  291. data/public/fckeditor/editor/skins/default/fck_dialog_ie6.js +110 -0
  292. data/public/fckeditor/editor/skins/default/fck_editor.css +464 -0
  293. data/public/fckeditor/editor/skins/default/fck_strip.gif +0 -0
  294. data/public/fckeditor/editor/skins/default/images/dialog.sides.gif +0 -0
  295. data/public/fckeditor/editor/skins/default/images/dialog.sides.png +0 -0
  296. data/public/fckeditor/editor/skins/default/images/dialog.sides.rtl.png +0 -0
  297. data/public/fckeditor/editor/skins/default/images/sprites.gif +0 -0
  298. data/public/fckeditor/editor/skins/default/images/sprites.png +0 -0
  299. data/public/fckeditor/editor/skins/default/images/toolbar.arrowright.gif +0 -0
  300. data/public/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif +0 -0
  301. data/public/fckeditor/editor/skins/default/images/toolbar.collapse.gif +0 -0
  302. data/public/fckeditor/editor/skins/default/images/toolbar.end.gif +0 -0
  303. data/public/fckeditor/editor/skins/default/images/toolbar.expand.gif +0 -0
  304. data/public/fckeditor/editor/skins/default/images/toolbar.separator.gif +0 -0
  305. data/public/fckeditor/editor/skins/default/images/toolbar.start.gif +0 -0
  306. data/public/fckeditor/editor/skins/office2003/fck_dialog.css +402 -0
  307. data/public/fckeditor/editor/skins/office2003/fck_dialog_ie6.js +110 -0
  308. data/public/fckeditor/editor/skins/office2003/fck_editor.css +476 -0
  309. data/public/fckeditor/editor/skins/office2003/fck_strip.gif +0 -0
  310. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.gif +0 -0
  311. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.png +0 -0
  312. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.rtl.png +0 -0
  313. data/public/fckeditor/editor/skins/office2003/images/sprites.gif +0 -0
  314. data/public/fckeditor/editor/skins/office2003/images/sprites.png +0 -0
  315. data/public/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif +0 -0
  316. data/public/fckeditor/editor/skins/office2003/images/toolbar.bg.gif +0 -0
  317. data/public/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif +0 -0
  318. data/public/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif +0 -0
  319. data/public/fckeditor/editor/skins/office2003/images/toolbar.end.gif +0 -0
  320. data/public/fckeditor/editor/skins/office2003/images/toolbar.expand.gif +0 -0
  321. data/public/fckeditor/editor/skins/office2003/images/toolbar.separator.gif +0 -0
  322. data/public/fckeditor/editor/skins/office2003/images/toolbar.start.gif +0 -0
  323. data/public/fckeditor/editor/skins/silver/fck_dialog.css +402 -0
  324. data/public/fckeditor/editor/skins/silver/fck_dialog_ie6.js +110 -0
  325. data/public/fckeditor/editor/skins/silver/fck_editor.css +473 -0
  326. data/public/fckeditor/editor/skins/silver/fck_strip.gif +0 -0
  327. data/public/fckeditor/editor/skins/silver/images/dialog.sides.gif +0 -0
  328. data/public/fckeditor/editor/skins/silver/images/dialog.sides.png +0 -0
  329. data/public/fckeditor/editor/skins/silver/images/dialog.sides.rtl.png +0 -0
  330. data/public/fckeditor/editor/skins/silver/images/sprites.gif +0 -0
  331. data/public/fckeditor/editor/skins/silver/images/sprites.png +0 -0
  332. data/public/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif +0 -0
  333. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif +0 -0
  334. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif +0 -0
  335. data/public/fckeditor/editor/skins/silver/images/toolbar.collapse.gif +0 -0
  336. data/public/fckeditor/editor/skins/silver/images/toolbar.end.gif +0 -0
  337. data/public/fckeditor/editor/skins/silver/images/toolbar.expand.gif +0 -0
  338. data/public/fckeditor/editor/skins/silver/images/toolbar.separator.gif +0 -0
  339. data/public/fckeditor/editor/skins/silver/images/toolbar.start.gif +0 -0
  340. data/public/fckeditor/fckconfig.js +364 -0
  341. data/public/fckeditor/fckdebug.html +153 -0
  342. data/public/fckeditor/fckdialog.html +812 -0
  343. data/public/fckeditor/fckeditor.html +317 -0
  344. data/public/fckeditor/fckeditor.js +328 -0
  345. data/public/fckeditor/fckeditor.original.html +424 -0
  346. data/public/fckeditor/fckpackager.xml +262 -0
  347. data/public/fckeditor/fckstyles.xml +111 -0
  348. data/public/fckeditor/fcktemplates.xml +103 -0
  349. data/public/images/cms/administration/user_browser_bg.gif +0 -0
  350. data/public/images/cms/bg.png +0 -0
  351. data/public/images/cms/bl_curve.png +0 -0
  352. data/public/images/cms/bottom_cap.png +0 -0
  353. data/public/images/cms/bottom_cap_content.png +0 -0
  354. data/public/images/cms/browse.gif +0 -0
  355. data/public/images/cms/browser_media_logo.png +0 -0
  356. data/public/images/cms/browsercms_logo.png +0 -0
  357. data/public/images/cms/buttons/button.png +0 -0
  358. data/public/images/cms/buttons/button_bg.png +0 -0
  359. data/public/images/cms/buttons/button_cap.png +0 -0
  360. data/public/images/cms/buttons/button_cap_h.png +0 -0
  361. data/public/images/cms/buttons/button_cap_off.gif +0 -0
  362. data/public/images/cms/buttons/button_cap_off_middle.gif +0 -0
  363. data/public/images/cms/buttons/button_h.png +0 -0
  364. data/public/images/cms/buttons/button_left_bg.png +0 -0
  365. data/public/images/cms/buttons/button_off.png +0 -0
  366. data/public/images/cms/buttons/button_off_middle.png +0 -0
  367. data/public/images/cms/buttons/delete_x.png +0 -0
  368. data/public/images/cms/buttons/delete_x_disabled.png +0 -0
  369. data/public/images/cms/buttons/delete_x_h.png +0 -0
  370. data/public/images/cms/buttons/sm_button.gif +0 -0
  371. data/public/images/cms/buttons/sm_button_2.gif +0 -0
  372. data/public/images/cms/buttons/sm_button_2_h.gif +0 -0
  373. data/public/images/cms/buttons/sm_button_h.gif +0 -0
  374. data/public/images/cms/containers/add.gif +0 -0
  375. data/public/images/cms/containers/alpha.png +0 -0
  376. data/public/images/cms/containers/beta.png +0 -0
  377. data/public/images/cms/containers/delete.gif +0 -0
  378. data/public/images/cms/containers/down.gif +0 -0
  379. data/public/images/cms/containers/edit.gif +0 -0
  380. data/public/images/cms/containers/up.gif +0 -0
  381. data/public/images/cms/containers/view.gif +0 -0
  382. data/public/images/cms/content_bg.gif +0 -0
  383. data/public/images/cms/dashboard/bottom_cap.png +0 -0
  384. data/public/images/cms/dashboard/bottom_cap_content.png +0 -0
  385. data/public/images/cms/dashboard/header_bg.gif +0 -0
  386. data/public/images/cms/dashboard/header_left_bg.gif +0 -0
  387. data/public/images/cms/dashboard/table_header_bg.gif +0 -0
  388. data/public/images/cms/dashboard/top_cap.png +0 -0
  389. data/public/images/cms/dashed.gif +0 -0
  390. data/public/images/cms/datepicker/clear.gif +0 -0
  391. data/public/images/cms/datepicker/close.gif +0 -0
  392. data/public/images/cms/dk_button_l.gif +0 -0
  393. data/public/images/cms/dk_button_r.gif +0 -0
  394. data/public/images/cms/dot.png +0 -0
  395. data/public/images/cms/draft_status.gif +0 -0
  396. data/public/images/cms/gray_long_bg.gif +0 -0
  397. data/public/images/cms/icons/actions/add.png +0 -0
  398. data/public/images/cms/icons/actions/config.png +0 -0
  399. data/public/images/cms/icons/actions/connect.png +0 -0
  400. data/public/images/cms/icons/actions/delete.png +0 -0
  401. data/public/images/cms/icons/actions/down.png +0 -0
  402. data/public/images/cms/icons/actions/edit.png +0 -0
  403. data/public/images/cms/icons/actions/folder.png +0 -0
  404. data/public/images/cms/icons/actions/folder_add.png +0 -0
  405. data/public/images/cms/icons/actions/folder_delete.png +0 -0
  406. data/public/images/cms/icons/actions/folder_edit.png +0 -0
  407. data/public/images/cms/icons/actions/folder_move.png +0 -0
  408. data/public/images/cms/icons/actions/folder_open.png +0 -0
  409. data/public/images/cms/icons/actions/history.png +0 -0
  410. data/public/images/cms/icons/actions/home.png +0 -0
  411. data/public/images/cms/icons/actions/left.png +0 -0
  412. data/public/images/cms/icons/actions/link.png +0 -0
  413. data/public/images/cms/icons/actions/page.png +0 -0
  414. data/public/images/cms/icons/actions/page_add.png +0 -0
  415. data/public/images/cms/icons/actions/page_edit.png +0 -0
  416. data/public/images/cms/icons/actions/page_move.png +0 -0
  417. data/public/images/cms/icons/actions/redo.png +0 -0
  418. data/public/images/cms/icons/actions/refresh.png +0 -0
  419. data/public/images/cms/icons/actions/right.png +0 -0
  420. data/public/images/cms/icons/actions/root_folder.png +0 -0
  421. data/public/images/cms/icons/actions/root_link.png +0 -0
  422. data/public/images/cms/icons/actions/root_page.png +0 -0
  423. data/public/images/cms/icons/actions/undo.png +0 -0
  424. data/public/images/cms/icons/actions/up.png +0 -0
  425. data/public/images/cms/icons/actions/view.png +0 -0
  426. data/public/images/cms/icons/file_types/doc.png +0 -0
  427. data/public/images/cms/icons/file_types/file.png +0 -0
  428. data/public/images/cms/icons/file_types/gif.png +0 -0
  429. data/public/images/cms/icons/file_types/htm.png +0 -0
  430. data/public/images/cms/icons/file_types/pdf.png +0 -0
  431. data/public/images/cms/icons/file_types/ppt.png +0 -0
  432. data/public/images/cms/icons/file_types/swf.png +0 -0
  433. data/public/images/cms/icons/file_types/txt.png +0 -0
  434. data/public/images/cms/icons/file_types/xls.png +0 -0
  435. data/public/images/cms/icons/file_types/xml.png +0 -0
  436. data/public/images/cms/icons/file_types/zip.png +0 -0
  437. data/public/images/cms/icons/status/archived.gif +0 -0
  438. data/public/images/cms/icons/status/draft.gif +0 -0
  439. data/public/images/cms/icons/status/hidden.gif +0 -0
  440. data/public/images/cms/icons/status/locked.gif +0 -0
  441. data/public/images/cms/icons/status/published.gif +0 -0
  442. data/public/images/cms/icons/status/unlocked.gif +0 -0
  443. data/public/images/cms/icons/user.png +0 -0
  444. data/public/images/cms/login_bg.jpg +0 -0
  445. data/public/images/cms/login_bottom.jpg +0 -0
  446. data/public/images/cms/login_top.gif +0 -0
  447. data/public/images/cms/lt_button_bg.gif +0 -0
  448. data/public/images/cms/lt_button_l.gif +0 -0
  449. data/public/images/cms/lt_button_r.gif +0 -0
  450. data/public/images/cms/menu/block_cap_h.gif +0 -0
  451. data/public/images/cms/menu/bottom_cap.png +0 -0
  452. data/public/images/cms/menu/bottom_cap_menu.png +0 -0
  453. data/public/images/cms/menu/bottom_cap_menu_first.png +0 -0
  454. data/public/images/cms/menu/menu_header_first_bg.gif +0 -0
  455. data/public/images/cms/menu/selected_block_cap.gif +0 -0
  456. data/public/images/cms/menu/top_cap.png +0 -0
  457. data/public/images/cms/menu/top_cap_menu_header.png +0 -0
  458. data/public/images/cms/menu.png +0 -0
  459. data/public/images/cms/menu_h.gif +0 -0
  460. data/public/images/cms/menu_header.png +0 -0
  461. data/public/images/cms/menu_open.png +0 -0
  462. data/public/images/cms/menu_open_bg.gif +0 -0
  463. data/public/images/cms/nav/on_bg.gif +0 -0
  464. data/public/images/cms/nav.png +0 -0
  465. data/public/images/cms/nav_admin.gif +0 -0
  466. data/public/images/cms/nav_admin_h.gif +0 -0
  467. data/public/images/cms/nav_admin_on.gif +0 -0
  468. data/public/images/cms/nav_cap.png +0 -0
  469. data/public/images/cms/nav_cap_h.gif +0 -0
  470. data/public/images/cms/nav_content_library.gif +0 -0
  471. data/public/images/cms/nav_content_library_h.gif +0 -0
  472. data/public/images/cms/nav_content_library_on.gif +0 -0
  473. data/public/images/cms/nav_dash.gif +0 -0
  474. data/public/images/cms/nav_dash_h.gif +0 -0
  475. data/public/images/cms/nav_dash_on.gif +0 -0
  476. data/public/images/cms/nav_h.gif +0 -0
  477. data/public/images/cms/nav_sitemap.gif +0 -0
  478. data/public/images/cms/nav_sitemap_h.gif +0 -0
  479. data/public/images/cms/nav_sitemap_on.gif +0 -0
  480. data/public/images/cms/page_toolbar/page_toolbar_bg.gif +0 -0
  481. data/public/images/cms/page_toolbar/page_toolbar_inset_bg.gif +0 -0
  482. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_bg.gif +0 -0
  483. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_l.gif +0 -0
  484. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_r.gif +0 -0
  485. data/public/images/cms/page_toolbar/page_toolbar_inset_l.gif +0 -0
  486. data/public/images/cms/page_toolbar/page_toolbar_inset_published_bg.gif +0 -0
  487. data/public/images/cms/page_toolbar/page_toolbar_inset_published_l.gif +0 -0
  488. data/public/images/cms/page_toolbar/page_toolbar_inset_published_r.gif +0 -0
  489. data/public/images/cms/page_toolbar/page_toolbar_inset_r.gif +0 -0
  490. data/public/images/cms/page_toolbar/page_toolbar_l.gif +0 -0
  491. data/public/images/cms/page_toolbar/page_toolbar_r.gif +0 -0
  492. data/public/images/cms/page_toolbar/status_draft_bg.gif +0 -0
  493. data/public/images/cms/page_toolbar/status_draft_l.gif +0 -0
  494. data/public/images/cms/page_toolbar/status_l.gif +0 -0
  495. data/public/images/cms/page_toolbar/status_published_bg.gif +0 -0
  496. data/public/images/cms/page_toolbar/status_published_l.gif +0 -0
  497. data/public/images/cms/page_toolbar/visual_editor_bg.gif +0 -0
  498. data/public/images/cms/page_toolbar/visual_editor_end.gif +0 -0
  499. data/public/images/cms/page_toolbar/visual_editor_r.gif +0 -0
  500. data/public/images/cms/page_toolbar/visual_editor_state_bg.gif +0 -0
  501. data/public/images/cms/pages/add_connectable.gif +0 -0
  502. data/public/images/cms/pages/connect_connectable.gif +0 -0
  503. data/public/images/cms/pages/container_border.gif +0 -0
  504. data/public/images/cms/pages/container_border_l.gif +0 -0
  505. data/public/images/cms/pages/container_border_r.gif +0 -0
  506. data/public/images/cms/pages/delete_connectable.gif +0 -0
  507. data/public/images/cms/pages/down_connectable.gif +0 -0
  508. data/public/images/cms/pages/down_connectable_disabled.gif +0 -0
  509. data/public/images/cms/pages/edit_connectable.gif +0 -0
  510. data/public/images/cms/pages/edit_connectable_2.gif +0 -0
  511. data/public/images/cms/pages/show_connectable.gif +0 -0
  512. data/public/images/cms/pages/up_connectable.gif +0 -0
  513. data/public/images/cms/pages/up_connectable_disabled.gif +0 -0
  514. data/public/images/cms/pagination/first.gif +0 -0
  515. data/public/images/cms/pagination/first_h.gif +0 -0
  516. data/public/images/cms/pagination/input.gif +0 -0
  517. data/public/images/cms/pagination/last.gif +0 -0
  518. data/public/images/cms/pagination/last_h.gif +0 -0
  519. data/public/images/cms/pagination/next.gif +0 -0
  520. data/public/images/cms/pagination/next_h.gif +0 -0
  521. data/public/images/cms/pagination/previous.gif +0 -0
  522. data/public/images/cms/pagination/previous_h.gif +0 -0
  523. data/public/images/cms/published_status.gif +0 -0
  524. data/public/images/cms/search.png +0 -0
  525. data/public/images/cms/search_submit.gif +0 -0
  526. data/public/images/cms/search_submit_h.gif +0 -0
  527. data/public/images/cms/searchbox_gradient.gif +0 -0
  528. data/public/images/cms/select_bg.gif +0 -0
  529. data/public/images/cms/select_bg_2.gif +0 -0
  530. data/public/images/cms/sitemap/bottom_cap.png +0 -0
  531. data/public/images/cms/sitemap/buffer_caps.png +0 -0
  532. data/public/images/cms/sitemap/contract.png +0 -0
  533. data/public/images/cms/sitemap/corners.gif +0 -0
  534. data/public/images/cms/sitemap/corners_hover.gif +0 -0
  535. data/public/images/cms/sitemap/divider.gif +0 -0
  536. data/public/images/cms/sitemap/expand.png +0 -0
  537. data/public/images/cms/sitemap/gradient.gif +0 -0
  538. data/public/images/cms/sitemap/gray_contract.png +0 -0
  539. data/public/images/cms/sitemap/gray_expand.png +0 -0
  540. data/public/images/cms/sitemap/no_contents.png +0 -0
  541. data/public/images/cms/sitemap/site_root_cap.png +0 -0
  542. data/public/images/cms/sitemap/tooltip.gif +0 -0
  543. data/public/images/cms/sitemap/top_cap_content.png +0 -0
  544. data/public/images/cms/solid.gif +0 -0
  545. data/public/images/cms/table/bl.gif +0 -0
  546. data/public/images/cms/table/br.gif +0 -0
  547. data/public/images/cms/table/divider.gif +0 -0
  548. data/public/images/cms/table/td_cap_first_h.gif +0 -0
  549. data/public/images/cms/table/td_cap_first_s.gif +0 -0
  550. data/public/images/cms/table/td_cap_last_h.gif +0 -0
  551. data/public/images/cms/table/td_cap_last_s.gif +0 -0
  552. data/public/images/cms/table/td_last_bg.gif +0 -0
  553. data/public/images/cms/table/th_bg.gif +0 -0
  554. data/public/images/cms/table/th_divider.gif +0 -0
  555. data/public/images/cms/table/th_last_bg.gif +0 -0
  556. data/public/images/cms/table/tl.gif +0 -0
  557. data/public/images/cms/table/tr.gif +0 -0
  558. data/public/images/cms/table/tr_bg.gif +0 -0
  559. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  560. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  561. data/public/images/cms/toolbar_bg.png +0 -0
  562. data/public/images/cms/top_cap.png +0 -0
  563. data/public/images/cms/top_cap_content.png +0 -0
  564. data/public/images/cms/top_cap_menu_header.png +0 -0
  565. data/public/images/cms/user_search_submit.gif +0 -0
  566. data/public/images/cms/usercontrols_bg.png +0 -0
  567. data/public/images/cms/usercontrols_bg_cap.png +0 -0
  568. data/public/images/rails.png +0 -0
  569. data/public/javascripts/application.js +2 -0
  570. data/public/javascripts/cms/application.js +148 -0
  571. data/public/javascripts/cms/editor.js +56 -0
  572. data/public/javascripts/cms/sitemap.js +426 -0
  573. data/public/javascripts/controls.js +963 -0
  574. data/public/javascripts/dragdrop.js +973 -0
  575. data/public/javascripts/effects.js +1128 -0
  576. data/public/javascripts/jquery-ui.js +591 -0
  577. data/public/javascripts/jquery.contextMenu.js +211 -0
  578. data/public/javascripts/jquery.cookie.js +96 -0
  579. data/public/javascripts/jquery.dimensions.js +119 -0
  580. data/public/javascripts/jquery.js +11 -0
  581. data/public/javascripts/jquery.selectbox-0.5.js +209 -0
  582. data/public/javascripts/jquery.taglist.js +136 -0
  583. data/public/javascripts/jquery.thickbox.js +10 -0
  584. data/public/javascripts/prototype.js +4320 -0
  585. data/public/robots.txt +5 -0
  586. data/public/site/customconfig.js +1 -0
  587. data/public/stylesheets/cms/administration.css +91 -0
  588. data/public/stylesheets/cms/application.css +166 -0
  589. data/public/stylesheets/cms/block.css +26 -0
  590. data/public/stylesheets/cms/buttons.css +120 -0
  591. data/public/stylesheets/cms/content_library.css +139 -0
  592. data/public/stylesheets/cms/content_types.css +4 -0
  593. data/public/stylesheets/cms/dashboard.css +118 -0
  594. data/public/stylesheets/cms/data_table.css +156 -0
  595. data/public/stylesheets/cms/date_picker.css +73 -0
  596. data/public/stylesheets/cms/form_layout.css +283 -0
  597. data/public/stylesheets/cms/jquery.contextMenu.css +61 -0
  598. data/public/stylesheets/cms/login.css +78 -0
  599. data/public/stylesheets/cms/menu.css +116 -0
  600. data/public/stylesheets/cms/nav.css +99 -0
  601. data/public/stylesheets/cms/page_toolbar.css +135 -0
  602. data/public/stylesheets/cms/reset.css +46 -0
  603. data/public/stylesheets/cms/selectbox.css +56 -0
  604. data/public/stylesheets/cms/sitemap.css +390 -0
  605. data/public/stylesheets/cms/taglist.css +18 -0
  606. data/public/stylesheets/cms/thickbox.css +163 -0
  607. data/rails/init.rb +3 -0
  608. data/script/about +4 -0
  609. data/script/console +3 -0
  610. data/script/dbconsole +3 -0
  611. data/script/destroy +3 -0
  612. data/script/generate +3 -0
  613. data/script/performance/benchmarker +3 -0
  614. data/script/performance/profiler +3 -0
  615. data/script/plugin +3 -0
  616. data/script/runner +3 -0
  617. data/script/server +3 -0
  618. data/test/performance/browsing_test.rb +9 -0
  619. data/test/test_helper.rb +39 -0
  620. data/test/unit/feed_test.rb +72 -0
  621. data/test/unit/portlets/feed_portlet_test.rb +9 -0
  622. metadata +686 -0
@@ -0,0 +1,893 @@
1
+ /*
2
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
3
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
4
+ *
5
+ * == BEGIN LICENSE ==
6
+ *
7
+ * Licensed under the terms of any of the following licenses at your
8
+ * choice:
9
+ *
10
+ * - GNU General Public License Version 2 or later (the "GPL")
11
+ * http://www.gnu.org/licenses/gpl.html
12
+ *
13
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
14
+ * http://www.gnu.org/licenses/lgpl.html
15
+ *
16
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
17
+ * http://www.mozilla.org/MPL/MPL-1.1.html
18
+ *
19
+ * == END LICENSE ==
20
+ *
21
+ * Scripts related to the Link dialog window (see fck_link.html).
22
+ */
23
+
24
+ var dialog = window.parent ;
25
+ var oEditor = dialog.InnerDialogLoaded() ;
26
+
27
+ var FCK = oEditor.FCK ;
28
+ var FCKLang = oEditor.FCKLang ;
29
+ var FCKConfig = oEditor.FCKConfig ;
30
+ var FCKRegexLib = oEditor.FCKRegexLib ;
31
+ var FCKTools = oEditor.FCKTools ;
32
+
33
+ //#### Dialog Tabs
34
+
35
+ // Set the dialog tabs.
36
+ dialog.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
37
+
38
+ if ( !FCKConfig.LinkDlgHideTarget )
39
+ dialog.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
40
+
41
+ if ( FCKConfig.LinkUpload )
42
+ dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
43
+
44
+ if ( !FCKConfig.LinkDlgHideAdvanced )
45
+ dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
46
+
47
+ // Function called when a dialog tag is selected.
48
+ function OnDialogTabChange( tabCode )
49
+ {
50
+ ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
51
+ ShowE('divTarget' , ( tabCode == 'Target' ) ) ;
52
+ ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
53
+ ShowE('divAttribs' , ( tabCode == 'Advanced' ) ) ;
54
+
55
+ dialog.SetAutoSize( true ) ;
56
+ }
57
+
58
+ //#### Regular Expressions library.
59
+ var oRegex = new Object() ;
60
+
61
+ oRegex.UriProtocol = /^(((http|https|ftp|news):\/\/)|mailto:)/gi ;
62
+
63
+ oRegex.UrlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi ;
64
+
65
+ oRegex.UrlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi ;
66
+
67
+ oRegex.ReserveTarget = /^_(blank|self|top|parent)$/i ;
68
+
69
+ oRegex.PopupUri = /^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$/ ;
70
+
71
+ // Accessible popups
72
+ oRegex.OnClickPopup = /^\s*on[cC]lick="\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*"$/ ;
73
+
74
+ oRegex.PopupFeatures = /(?:^|,)([^=]+)=(\d+|yes|no)/gi ;
75
+
76
+ //#### Parser Functions
77
+
78
+ var oParser = new Object() ;
79
+
80
+ // This method simply returns the two inputs in numerical order. You can even
81
+ // provide strings, as the method would parseInt() the values.
82
+ oParser.SortNumerical = function(a, b)
83
+ {
84
+ return parseInt( a, 10 ) - parseInt( b, 10 ) ;
85
+ }
86
+
87
+ oParser.ParseEMailParams = function(sParams)
88
+ {
89
+ // Initialize the oEMailParams object.
90
+ var oEMailParams = new Object() ;
91
+ oEMailParams.Subject = '' ;
92
+ oEMailParams.Body = '' ;
93
+
94
+ var aMatch = sParams.match( /(^|^\?|&)subject=([^&]+)/i ) ;
95
+ if ( aMatch ) oEMailParams.Subject = decodeURIComponent( aMatch[2] ) ;
96
+
97
+ aMatch = sParams.match( /(^|^\?|&)body=([^&]+)/i ) ;
98
+ if ( aMatch ) oEMailParams.Body = decodeURIComponent( aMatch[2] ) ;
99
+
100
+ return oEMailParams ;
101
+ }
102
+
103
+ // This method returns either an object containing the email info, or FALSE
104
+ // if the parameter is not an email link.
105
+ oParser.ParseEMailUri = function( sUrl )
106
+ {
107
+ // Initializes the EMailInfo object.
108
+ var oEMailInfo = new Object() ;
109
+ oEMailInfo.Address = '' ;
110
+ oEMailInfo.Subject = '' ;
111
+ oEMailInfo.Body = '' ;
112
+
113
+ var aLinkInfo = sUrl.match( /^(\w+):(.*)$/ ) ;
114
+ if ( aLinkInfo && aLinkInfo[1] == 'mailto' )
115
+ {
116
+ // This seems to be an unprotected email link.
117
+ var aParts = aLinkInfo[2].match( /^([^\?]+)\??(.+)?/ ) ;
118
+ if ( aParts )
119
+ {
120
+ // Set the e-mail address.
121
+ oEMailInfo.Address = aParts[1] ;
122
+
123
+ // Look for the optional e-mail parameters.
124
+ if ( aParts[2] )
125
+ {
126
+ var oEMailParams = oParser.ParseEMailParams( aParts[2] ) ;
127
+ oEMailInfo.Subject = oEMailParams.Subject ;
128
+ oEMailInfo.Body = oEMailParams.Body ;
129
+ }
130
+ }
131
+ return oEMailInfo ;
132
+ }
133
+ else if ( aLinkInfo && aLinkInfo[1] == 'javascript' )
134
+ {
135
+ // This may be a protected email.
136
+
137
+ // Try to match the url against the EMailProtectionFunction.
138
+ var func = FCKConfig.EMailProtectionFunction ;
139
+ if ( func != null )
140
+ {
141
+ try
142
+ {
143
+ // Escape special chars.
144
+ func = func.replace( /([\/^$*+.?()\[\]])/g, '\\$1' ) ;
145
+
146
+ // Define the possible keys.
147
+ var keys = new Array('NAME', 'DOMAIN', 'SUBJECT', 'BODY') ;
148
+
149
+ // Get the order of the keys (hold them in the array <pos>) and
150
+ // the function replaced by regular expression patterns.
151
+ var sFunc = func ;
152
+ var pos = new Array() ;
153
+ for ( var i = 0 ; i < keys.length ; i ++ )
154
+ {
155
+ var rexp = new RegExp( keys[i] ) ;
156
+ var p = func.search( rexp ) ;
157
+ if ( p >= 0 )
158
+ {
159
+ sFunc = sFunc.replace( rexp, '\'([^\']*)\'' ) ;
160
+ pos[pos.length] = p + ':' + keys[i] ;
161
+ }
162
+ }
163
+
164
+ // Sort the available keys.
165
+ pos.sort( oParser.SortNumerical ) ;
166
+
167
+ // Replace the excaped single quotes in the url, such they do
168
+ // not affect the regexp afterwards.
169
+ aLinkInfo[2] = aLinkInfo[2].replace( /\\'/g, '###SINGLE_QUOTE###' ) ;
170
+
171
+ // Create the regexp and execute it.
172
+ var rFunc = new RegExp( '^' + sFunc + '$' ) ;
173
+ var aMatch = rFunc.exec( aLinkInfo[2] ) ;
174
+ if ( aMatch )
175
+ {
176
+ var aInfo = new Array();
177
+ for ( var i = 1 ; i < aMatch.length ; i ++ )
178
+ {
179
+ var k = pos[i-1].match(/^\d+:(.+)$/) ;
180
+ aInfo[k[1]] = aMatch[i].replace(/###SINGLE_QUOTE###/g, '\'') ;
181
+ }
182
+
183
+ // Fill the EMailInfo object that will be returned
184
+ oEMailInfo.Address = aInfo['NAME'] + '@' + aInfo['DOMAIN'] ;
185
+ oEMailInfo.Subject = decodeURIComponent( aInfo['SUBJECT'] ) ;
186
+ oEMailInfo.Body = decodeURIComponent( aInfo['BODY'] ) ;
187
+
188
+ return oEMailInfo ;
189
+ }
190
+ }
191
+ catch (e)
192
+ {
193
+ }
194
+ }
195
+
196
+ // Try to match the email against the encode protection.
197
+ var aMatch = aLinkInfo[2].match( /^location\.href='mailto:'\+(String\.fromCharCode\([\d,]+\))\+'(.*)'$/ ) ;
198
+ if ( aMatch )
199
+ {
200
+ // The link is encoded
201
+ oEMailInfo.Address = eval( aMatch[1] ) ;
202
+ if ( aMatch[2] )
203
+ {
204
+ var oEMailParams = oParser.ParseEMailParams( aMatch[2] ) ;
205
+ oEMailInfo.Subject = oEMailParams.Subject ;
206
+ oEMailInfo.Body = oEMailParams.Body ;
207
+ }
208
+ return oEMailInfo ;
209
+ }
210
+ }
211
+ return false;
212
+ }
213
+
214
+ oParser.CreateEMailUri = function( address, subject, body )
215
+ {
216
+ // Switch for the EMailProtection setting.
217
+ switch ( FCKConfig.EMailProtection )
218
+ {
219
+ case 'function' :
220
+ var func = FCKConfig.EMailProtectionFunction ;
221
+ if ( func == null )
222
+ {
223
+ if ( FCKConfig.Debug )
224
+ {
225
+ alert('EMailProtection alert!\nNo function defined. Please set "FCKConfig.EMailProtectionFunction"') ;
226
+ }
227
+ return '';
228
+ }
229
+
230
+ // Split the email address into name and domain parts.
231
+ var aAddressParts = address.split( '@', 2 ) ;
232
+ if ( aAddressParts[1] == undefined )
233
+ {
234
+ aAddressParts[1] = '' ;
235
+ }
236
+
237
+ // Replace the keys by their values (embedded in single quotes).
238
+ func = func.replace(/NAME/g, "'" + aAddressParts[0].replace(/'/g, '\\\'') + "'") ;
239
+ func = func.replace(/DOMAIN/g, "'" + aAddressParts[1].replace(/'/g, '\\\'') + "'") ;
240
+ func = func.replace(/SUBJECT/g, "'" + encodeURIComponent( subject ).replace(/'/g, '\\\'') + "'") ;
241
+ func = func.replace(/BODY/g, "'" + encodeURIComponent( body ).replace(/'/g, '\\\'') + "'") ;
242
+
243
+ return 'javascript:' + func ;
244
+
245
+ case 'encode' :
246
+ var aParams = [] ;
247
+ var aAddressCode = [] ;
248
+
249
+ if ( subject.length > 0 )
250
+ aParams.push( 'subject='+ encodeURIComponent( subject ) ) ;
251
+ if ( body.length > 0 )
252
+ aParams.push( 'body=' + encodeURIComponent( body ) ) ;
253
+ for ( var i = 0 ; i < address.length ; i++ )
254
+ aAddressCode.push( address.charCodeAt( i ) ) ;
255
+
256
+ return 'javascript:location.href=\'mailto:\'+String.fromCharCode(' + aAddressCode.join( ',' ) + ')+\'?' + aParams.join( '&' ) + '\'' ;
257
+ }
258
+
259
+ // EMailProtection 'none'
260
+
261
+ var sBaseUri = 'mailto:' + address ;
262
+
263
+ var sParams = '' ;
264
+
265
+ if ( subject.length > 0 )
266
+ sParams = '?subject=' + encodeURIComponent( subject ) ;
267
+
268
+ if ( body.length > 0 )
269
+ {
270
+ sParams += ( sParams.length == 0 ? '?' : '&' ) ;
271
+ sParams += 'body=' + encodeURIComponent( body ) ;
272
+ }
273
+
274
+ return sBaseUri + sParams ;
275
+ }
276
+
277
+ //#### Initialization Code
278
+
279
+ // oLink: The actual selected link in the editor.
280
+ var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
281
+ if ( oLink )
282
+ FCK.Selection.SelectNode( oLink ) ;
283
+
284
+ window.onload = function()
285
+ {
286
+ // Translate the dialog box texts.
287
+ oEditor.FCKLanguageManager.TranslatePage(document) ;
288
+
289
+ // Fill the Anchor Names and Ids combos.
290
+ LoadAnchorNamesAndIds() ;
291
+
292
+ // Load the selected link information (if any).
293
+ LoadSelection() ;
294
+
295
+ // Update the dialog box.
296
+ SetLinkType( GetE('cmbLinkType').value ) ;
297
+
298
+ // Show/Hide the "Browse Server" button.
299
+ GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
300
+
301
+ // Show the initial dialog content.
302
+ GetE('divInfo').style.display = '' ;
303
+
304
+ // Set the actual uploader URL.
305
+ if ( FCKConfig.LinkUpload )
306
+ GetE('frmUpload').action = FCKConfig.LinkUploadURL ;
307
+
308
+ // Set the default target (from configuration).
309
+ SetDefaultTarget() ;
310
+
311
+ // Activate the "OK" button.
312
+ dialog.SetOkButton( true ) ;
313
+
314
+ // Select the first field.
315
+ switch( GetE('cmbLinkType').value )
316
+ {
317
+ case 'url' :
318
+ SelectField( 'txtUrl' ) ;
319
+ break ;
320
+ case 'email' :
321
+ SelectField( 'txtEMailAddress' ) ;
322
+ break ;
323
+ case 'anchor' :
324
+ if ( GetE('divSelAnchor').style.display != 'none' )
325
+ SelectField( 'cmbAnchorName' ) ;
326
+ else
327
+ SelectField( 'cmbLinkType' ) ;
328
+ }
329
+ }
330
+
331
+ var bHasAnchors ;
332
+
333
+ function LoadAnchorNamesAndIds()
334
+ {
335
+ // Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon
336
+ // to edit them. So, we must look for that images now.
337
+ var aAnchors = new Array() ;
338
+ var i ;
339
+ var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ;
340
+ for( i = 0 ; i < oImages.length ; i++ )
341
+ {
342
+ if ( oImages[i].getAttribute('_fckanchor') )
343
+ aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ;
344
+ }
345
+
346
+ // Add also real anchors
347
+ var oLinks = oEditor.FCK.EditorDocument.getElementsByTagName( 'A' ) ;
348
+ for( i = 0 ; i < oLinks.length ; i++ )
349
+ {
350
+ if ( oLinks[i].name && ( oLinks[i].name.length > 0 ) )
351
+ aAnchors[ aAnchors.length ] = oLinks[i] ;
352
+ }
353
+
354
+ var aIds = FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
355
+
356
+ bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ;
357
+
358
+ for ( i = 0 ; i < aAnchors.length ; i++ )
359
+ {
360
+ var sName = aAnchors[i].name ;
361
+ if ( sName && sName.length > 0 )
362
+ FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ;
363
+ }
364
+
365
+ for ( i = 0 ; i < aIds.length ; i++ )
366
+ {
367
+ FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ;
368
+ }
369
+
370
+ ShowE( 'divSelAnchor' , bHasAnchors ) ;
371
+ ShowE( 'divNoAnchor' , !bHasAnchors ) ;
372
+ }
373
+
374
+ function LoadSelection()
375
+ {
376
+ if ( !oLink ) return ;
377
+
378
+ var sType = 'url' ;
379
+
380
+ // Get the actual Link href.
381
+ var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
382
+ if ( sHRef == null )
383
+ sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
384
+
385
+ // Look for a popup javascript link.
386
+ var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ;
387
+ if( oPopupMatch )
388
+ {
389
+ GetE('cmbTarget').value = 'popup' ;
390
+ sHRef = oPopupMatch[1] ;
391
+ FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ;
392
+ SetTarget( 'popup' ) ;
393
+ }
394
+
395
+ // Accessible popups, the popup data is in the onclick attribute
396
+ if ( !oPopupMatch )
397
+ {
398
+ var onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
399
+ if ( onclick )
400
+ {
401
+ // Decode the protected string
402
+ onclick = decodeURIComponent( onclick ) ;
403
+
404
+ oPopupMatch = oRegex.OnClickPopup.exec( onclick ) ;
405
+ if( oPopupMatch )
406
+ {
407
+ GetE( 'cmbTarget' ).value = 'popup' ;
408
+ FillPopupFields( oPopupMatch[1], oPopupMatch[2] ) ;
409
+ SetTarget( 'popup' ) ;
410
+ }
411
+ }
412
+ }
413
+
414
+ // Search for the protocol.
415
+ var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
416
+
417
+ // Search for a protected email link.
418
+ var oEMailInfo = oParser.ParseEMailUri( sHRef );
419
+
420
+ if ( oEMailInfo )
421
+ {
422
+ sType = 'email' ;
423
+
424
+ GetE('txtEMailAddress').value = oEMailInfo.Address ;
425
+ GetE('txtEMailSubject').value = oEMailInfo.Subject ;
426
+ GetE('txtEMailBody').value = oEMailInfo.Body ;
427
+ }
428
+ else if ( sProtocol )
429
+ {
430
+ sProtocol = sProtocol[0].toLowerCase() ;
431
+ GetE('cmbLinkProtocol').value = sProtocol ;
432
+
433
+ // Remove the protocol and get the remaining URL.
434
+ var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
435
+ sType = 'url' ;
436
+ GetE('txtUrl').value = sUrl ;
437
+ }
438
+ else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link.
439
+ {
440
+ sType = 'anchor' ;
441
+ GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ;
442
+ }
443
+ else // It is another type of link.
444
+ {
445
+ sType = 'url' ;
446
+
447
+ GetE('cmbLinkProtocol').value = '' ;
448
+ GetE('txtUrl').value = sHRef ;
449
+ }
450
+
451
+ if ( !oPopupMatch )
452
+ {
453
+ // Get the target.
454
+ var sTarget = oLink.target ;
455
+
456
+ if ( sTarget && sTarget.length > 0 )
457
+ {
458
+ if ( oRegex.ReserveTarget.test( sTarget ) )
459
+ {
460
+ sTarget = sTarget.toLowerCase() ;
461
+ GetE('cmbTarget').value = sTarget ;
462
+ }
463
+ else
464
+ GetE('cmbTarget').value = 'frame' ;
465
+ GetE('txtTargetFrame').value = sTarget ;
466
+ }
467
+ }
468
+
469
+ // Get Advances Attributes
470
+ GetE('txtAttId').value = oLink.id ;
471
+ GetE('txtAttName').value = oLink.name ;
472
+ GetE('cmbAttLangDir').value = oLink.dir ;
473
+ GetE('txtAttLangCode').value = oLink.lang ;
474
+ GetE('txtAttAccessKey').value = oLink.accessKey ;
475
+ GetE('txtAttTabIndex').value = oLink.tabIndex <= 0 ? '' : oLink.tabIndex ;
476
+ GetE('txtAttTitle').value = oLink.title ;
477
+ GetE('txtAttContentType').value = oLink.type ;
478
+ GetE('txtAttCharSet').value = oLink.charset ;
479
+
480
+ var sClass ;
481
+ if ( oEditor.FCKBrowserInfo.IsIE )
482
+ {
483
+ sClass = oLink.getAttribute('className',2) || '' ;
484
+ // Clean up temporary classes for internal use:
485
+ sClass = sClass.replace( FCKRegexLib.FCK_Class, '' ) ;
486
+
487
+ GetE('txtAttStyle').value = oLink.style.cssText ;
488
+ }
489
+ else
490
+ {
491
+ sClass = oLink.getAttribute('class',2) || '' ;
492
+ GetE('txtAttStyle').value = oLink.getAttribute('style',2) || '' ;
493
+ }
494
+ GetE('txtAttClasses').value = sClass ;
495
+
496
+ // Update the Link type combo.
497
+ GetE('cmbLinkType').value = sType ;
498
+ }
499
+
500
+ //#### Link type selection.
501
+ function SetLinkType( linkType )
502
+ {
503
+ ShowE('divLinkTypeUrl' , (linkType == 'url') ) ;
504
+ ShowE('divLinkTypeAnchor' , (linkType == 'anchor') ) ;
505
+ ShowE('divLinkTypeEMail' , (linkType == 'email') ) ;
506
+
507
+ if ( !FCKConfig.LinkDlgHideTarget )
508
+ dialog.SetTabVisibility( 'Target' , (linkType == 'url') ) ;
509
+
510
+ if ( FCKConfig.LinkUpload )
511
+ dialog.SetTabVisibility( 'Upload' , (linkType == 'url') ) ;
512
+
513
+ if ( !FCKConfig.LinkDlgHideAdvanced )
514
+ dialog.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ;
515
+
516
+ if ( linkType == 'email' )
517
+ dialog.SetAutoSize( true ) ;
518
+ }
519
+
520
+ //#### Target type selection.
521
+ function SetTarget( targetType )
522
+ {
523
+ GetE('tdTargetFrame').style.display = ( targetType == 'popup' ? 'none' : '' ) ;
524
+ GetE('tdPopupName').style.display =
525
+ GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ;
526
+
527
+ switch ( targetType )
528
+ {
529
+ case "_blank" :
530
+ case "_self" :
531
+ case "_parent" :
532
+ case "_top" :
533
+ GetE('txtTargetFrame').value = targetType ;
534
+ break ;
535
+ case "" :
536
+ GetE('txtTargetFrame').value = '' ;
537
+ break ;
538
+ }
539
+
540
+ if ( targetType == 'popup' )
541
+ dialog.SetAutoSize( true ) ;
542
+ }
543
+
544
+ //#### Called while the user types the URL.
545
+ function OnUrlChange()
546
+ {
547
+ var sUrl = GetE('txtUrl').value ;
548
+ var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ;
549
+
550
+ if ( sProtocol )
551
+ {
552
+ sUrl = sUrl.substr( sProtocol[0].length ) ;
553
+ GetE('txtUrl').value = sUrl ;
554
+ GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ;
555
+ }
556
+ else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) )
557
+ {
558
+ GetE('cmbLinkProtocol').value = '' ;
559
+ }
560
+ }
561
+
562
+ //#### Called while the user types the target name.
563
+ function OnTargetNameChange()
564
+ {
565
+ var sFrame = GetE('txtTargetFrame').value ;
566
+
567
+ if ( sFrame.length == 0 )
568
+ GetE('cmbTarget').value = '' ;
569
+ else if ( oRegex.ReserveTarget.test( sFrame ) )
570
+ GetE('cmbTarget').value = sFrame.toLowerCase() ;
571
+ else
572
+ GetE('cmbTarget').value = 'frame' ;
573
+ }
574
+
575
+ // Accessible popups
576
+ function BuildOnClickPopup()
577
+ {
578
+ var sWindowName = "'" + GetE('txtPopupName').value.replace(/\W/gi, "") + "'" ;
579
+
580
+ var sFeatures = '' ;
581
+ var aChkFeatures = document.getElementsByName( 'chkFeature' ) ;
582
+ for ( var i = 0 ; i < aChkFeatures.length ; i++ )
583
+ {
584
+ if ( i > 0 ) sFeatures += ',' ;
585
+ sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ;
586
+ }
587
+
588
+ if ( GetE('txtPopupWidth').value.length > 0 ) sFeatures += ',width=' + GetE('txtPopupWidth').value ;
589
+ if ( GetE('txtPopupHeight').value.length > 0 ) sFeatures += ',height=' + GetE('txtPopupHeight').value ;
590
+ if ( GetE('txtPopupLeft').value.length > 0 ) sFeatures += ',left=' + GetE('txtPopupLeft').value ;
591
+ if ( GetE('txtPopupTop').value.length > 0 ) sFeatures += ',top=' + GetE('txtPopupTop').value ;
592
+
593
+ if ( sFeatures != '' )
594
+ sFeatures = sFeatures + ",status" ;
595
+
596
+ return ( "window.open(this.href," + sWindowName + ",'" + sFeatures + "'); return false" ) ;
597
+ }
598
+
599
+ //#### Fills all Popup related fields.
600
+ function FillPopupFields( windowName, features )
601
+ {
602
+ if ( windowName )
603
+ GetE('txtPopupName').value = windowName ;
604
+
605
+ var oFeatures = new Object() ;
606
+ var oFeaturesMatch ;
607
+ while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null )
608
+ {
609
+ var sValue = oFeaturesMatch[2] ;
610
+ if ( sValue == ( 'yes' || '1' ) )
611
+ oFeatures[ oFeaturesMatch[1] ] = true ;
612
+ else if ( ! isNaN( sValue ) && sValue != 0 )
613
+ oFeatures[ oFeaturesMatch[1] ] = sValue ;
614
+ }
615
+
616
+ // Update all features check boxes.
617
+ var aChkFeatures = document.getElementsByName('chkFeature') ;
618
+ for ( var i = 0 ; i < aChkFeatures.length ; i++ )
619
+ {
620
+ if ( oFeatures[ aChkFeatures[i].value ] )
621
+ aChkFeatures[i].checked = true ;
622
+ }
623
+
624
+ // Update position and size text boxes.
625
+ if ( oFeatures['width'] ) GetE('txtPopupWidth').value = oFeatures['width'] ;
626
+ if ( oFeatures['height'] ) GetE('txtPopupHeight').value = oFeatures['height'] ;
627
+ if ( oFeatures['left'] ) GetE('txtPopupLeft').value = oFeatures['left'] ;
628
+ if ( oFeatures['top'] ) GetE('txtPopupTop').value = oFeatures['top'] ;
629
+ }
630
+
631
+ //#### The OK button was hit.
632
+ function Ok()
633
+ {
634
+ var sUri, sInnerHtml ;
635
+ oEditor.FCKUndo.SaveUndoStep() ;
636
+
637
+ switch ( GetE('cmbLinkType').value )
638
+ {
639
+ case 'url' :
640
+ sUri = GetE('txtUrl').value ;
641
+
642
+ if ( sUri.length == 0 )
643
+ {
644
+ alert( FCKLang.DlnLnkMsgNoUrl ) ;
645
+ return false ;
646
+ }
647
+
648
+ sUri = GetE('cmbLinkProtocol').value + sUri ;
649
+
650
+ break ;
651
+
652
+ case 'email' :
653
+ sUri = GetE('txtEMailAddress').value ;
654
+
655
+ if ( sUri.length == 0 )
656
+ {
657
+ alert( FCKLang.DlnLnkMsgNoEMail ) ;
658
+ return false ;
659
+ }
660
+
661
+ sUri = oParser.CreateEMailUri(
662
+ sUri,
663
+ GetE('txtEMailSubject').value,
664
+ GetE('txtEMailBody').value ) ;
665
+ break ;
666
+
667
+ case 'anchor' :
668
+ var sAnchor = GetE('cmbAnchorName').value ;
669
+ if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
670
+
671
+ if ( sAnchor.length == 0 )
672
+ {
673
+ alert( FCKLang.DlnLnkMsgNoAnchor ) ;
674
+ return false ;
675
+ }
676
+
677
+ sUri = '#' + sAnchor ;
678
+ break ;
679
+ }
680
+
681
+ // If no link is selected, create a new one (it may result in more than one link creation - #220).
682
+ var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri, true ) ;
683
+
684
+ // If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26)
685
+ var aHasSelection = ( aLinks.length > 0 ) ;
686
+ if ( !aHasSelection )
687
+ {
688
+ sInnerHtml = sUri;
689
+
690
+ // Built a better text for empty links.
691
+ switch ( GetE('cmbLinkType').value )
692
+ {
693
+ // anchor: use old behavior --> return true
694
+ case 'anchor':
695
+ sInnerHtml = sInnerHtml.replace( /^#/, '' ) ;
696
+ break ;
697
+
698
+ // url: try to get path
699
+ case 'url':
700
+ var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ;
701
+ var asLinkPath = oLinkPathRegEx.exec( sUri ) ;
702
+ if (asLinkPath != null)
703
+ sInnerHtml = asLinkPath[1]; // use matched path
704
+ break ;
705
+
706
+ // mailto: try to get email address
707
+ case 'email':
708
+ sInnerHtml = GetE('txtEMailAddress').value ;
709
+ break ;
710
+ }
711
+
712
+ // Create a new (empty) anchor.
713
+ aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ;
714
+ }
715
+
716
+ for ( var i = 0 ; i < aLinks.length ; i++ )
717
+ {
718
+ oLink = aLinks[i] ;
719
+
720
+ if ( aHasSelection )
721
+ sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL).
722
+
723
+ oLink.href = sUri ;
724
+ SetAttribute( oLink, '_fcksavedurl', sUri ) ;
725
+
726
+ var onclick;
727
+ // Accessible popups
728
+ if( GetE('cmbTarget').value == 'popup' )
729
+ {
730
+ onclick = BuildOnClickPopup() ;
731
+ // Encode the attribute
732
+ onclick = encodeURIComponent( " onclick=\"" + onclick + "\"" ) ;
733
+ SetAttribute( oLink, 'onclick_fckprotectedatt', onclick ) ;
734
+ }
735
+ else
736
+ {
737
+ // Check if the previous onclick was for a popup:
738
+ // In that case remove the onclick handler.
739
+ onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
740
+ if ( onclick )
741
+ {
742
+ // Decode the protected string
743
+ onclick = decodeURIComponent( onclick ) ;
744
+
745
+ if( oRegex.OnClickPopup.test( onclick ) )
746
+ SetAttribute( oLink, 'onclick_fckprotectedatt', '' ) ;
747
+ }
748
+ }
749
+
750
+ oLink.innerHTML = sInnerHtml ; // Set (or restore) the innerHTML
751
+
752
+ // Target
753
+ if( GetE('cmbTarget').value != 'popup' )
754
+ SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
755
+ else
756
+ SetAttribute( oLink, 'target', null ) ;
757
+
758
+ // Let's set the "id" only for the first link to avoid duplication.
759
+ if ( i == 0 )
760
+ SetAttribute( oLink, 'id', GetE('txtAttId').value ) ;
761
+
762
+ // Advances Attributes
763
+ SetAttribute( oLink, 'name' , GetE('txtAttName').value ) ;
764
+ SetAttribute( oLink, 'dir' , GetE('cmbAttLangDir').value ) ;
765
+ SetAttribute( oLink, 'lang' , GetE('txtAttLangCode').value ) ;
766
+ SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ;
767
+ SetAttribute( oLink, 'tabindex' , ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ;
768
+ SetAttribute( oLink, 'title' , GetE('txtAttTitle').value ) ;
769
+ SetAttribute( oLink, 'type' , GetE('txtAttContentType').value ) ;
770
+ SetAttribute( oLink, 'charset' , GetE('txtAttCharSet').value ) ;
771
+
772
+ if ( oEditor.FCKBrowserInfo.IsIE )
773
+ {
774
+ var sClass = GetE('txtAttClasses').value ;
775
+ // If it's also an anchor add an internal class
776
+ if ( GetE('txtAttName').value.length != 0 )
777
+ sClass += ' FCK__AnchorC' ;
778
+ SetAttribute( oLink, 'className', sClass ) ;
779
+
780
+ oLink.style.cssText = GetE('txtAttStyle').value ;
781
+ }
782
+ else
783
+ {
784
+ SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ;
785
+ SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
786
+ }
787
+ }
788
+
789
+ // Select the (first) link.
790
+ oEditor.FCKSelection.SelectNode( aLinks[0] );
791
+
792
+ return true ;
793
+ }
794
+
795
+ function BrowseServer()
796
+ {
797
+ OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ;
798
+ }
799
+
800
+ function SetUrl( url )
801
+ {
802
+ GetE('txtUrl').value = url ;
803
+ OnUrlChange() ;
804
+ dialog.SetSelectedTab( 'Info' ) ;
805
+ }
806
+
807
+ function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
808
+ {
809
+ // Remove animation
810
+ window.parent.Throbber.Hide() ;
811
+ GetE( 'divUpload' ).style.display = '' ;
812
+
813
+ switch ( errorNumber )
814
+ {
815
+ case 0 : // No errors
816
+ alert( 'Your file has been successfully uploaded' ) ;
817
+ break ;
818
+ case 1 : // Custom error
819
+ alert( customMsg ) ;
820
+ return ;
821
+ case 101 : // Custom warning
822
+ alert( customMsg ) ;
823
+ break ;
824
+ case 201 :
825
+ alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
826
+ break ;
827
+ case 202 :
828
+ alert( 'Invalid file type' ) ;
829
+ return ;
830
+ case 203 :
831
+ alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
832
+ return ;
833
+ case 500 :
834
+ alert( 'The connector is disabled' ) ;
835
+ break ;
836
+ default :
837
+ alert( 'Error on file upload. Error number: ' + errorNumber ) ;
838
+ return ;
839
+ }
840
+
841
+ SetUrl( fileUrl ) ;
842
+ GetE('frmUpload').reset() ;
843
+ }
844
+
845
+ var oUploadAllowedExtRegex = new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ;
846
+ var oUploadDeniedExtRegex = new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ;
847
+
848
+ function CheckUpload()
849
+ {
850
+ var sFile = GetE('txtUploadFile').value ;
851
+
852
+ if ( sFile.length == 0 )
853
+ {
854
+ alert( 'Please select a file to upload' ) ;
855
+ return false ;
856
+ }
857
+
858
+ if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
859
+ ( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
860
+ {
861
+ OnUploadCompleted( 202 ) ;
862
+ return false ;
863
+ }
864
+
865
+ // Show animation
866
+ window.parent.Throbber.Show( 100 ) ;
867
+ GetE( 'divUpload' ).style.display = 'none' ;
868
+
869
+ return true ;
870
+ }
871
+
872
+ function SetDefaultTarget()
873
+ {
874
+ var target = FCKConfig.DefaultLinkTarget || '' ;
875
+
876
+ if ( oLink || target.length == 0 )
877
+ return ;
878
+
879
+ switch ( target )
880
+ {
881
+ case '_blank' :
882
+ case '_self' :
883
+ case '_parent' :
884
+ case '_top' :
885
+ GetE('cmbTarget').value = target ;
886
+ break ;
887
+ default :
888
+ GetE('cmbTarget').value = 'frame' ;
889
+ break ;
890
+ }
891
+
892
+ GetE('txtTargetFrame').value = target ;
893
+ }