unageanu-jiji 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (564) hide show
  1. data/ChangeLog +0 -0
  2. data/README +0 -0
  3. data/bin/jiji.rb +6 -0
  4. data/html/css/calendar.css +432 -0
  5. data/html/css/datatable.css +299 -0
  6. data/html/css/default.css +557 -0
  7. data/html/css/dialog.css +77 -0
  8. data/html/img/auto_trade_off.gif +0 -0
  9. data/html/img/auto_trade_on.gif +0 -0
  10. data/html/img/back_bottom.gif +0 -0
  11. data/html/img/back_middle.gif +0 -0
  12. data/html/img/back_top.gif +0 -0
  13. data/html/img/bt-create-title-1.gif +0 -0
  14. data/html/img/bt-create-title-2.gif +0 -0
  15. data/html/img/bt-create-title-3.gif +0 -0
  16. data/html/img/button_add.gif +0 -0
  17. data/html/img/button_add_gray.gif +0 -0
  18. data/html/img/button_add_over.gif +0 -0
  19. data/html/img/button_apply.gif +0 -0
  20. data/html/img/button_apply_gray.gif +0 -0
  21. data/html/img/button_apply_over.gif +0 -0
  22. data/html/img/button_calendar.gif +0 -0
  23. data/html/img/button_calendar_over.gif +0 -0
  24. data/html/img/button_cancel.gif +0 -0
  25. data/html/img/button_cancel.jpg +0 -0
  26. data/html/img/button_cancel_gray.gif +0 -0
  27. data/html/img/button_cancel_over.gif +0 -0
  28. data/html/img/button_cancel_over.jpg +0 -0
  29. data/html/img/button_close.gif +0 -0
  30. data/html/img/button_close_gray.gif +0 -0
  31. data/html/img/button_close_over.gif +0 -0
  32. data/html/img/button_ok.gif +0 -0
  33. data/html/img/button_ok_gray.gif +0 -0
  34. data/html/img/button_ok_over.gif +0 -0
  35. data/html/img/button_remove.gif +0 -0
  36. data/html/img/button_remove_gray.gif +0 -0
  37. data/html/img/button_remove_over.gif +0 -0
  38. data/html/img/button_start.gif +0 -0
  39. data/html/img/button_start_over.gif +0 -0
  40. data/html/img/button_update.gif +0 -0
  41. data/html/img/button_update_gray.gif +0 -0
  42. data/html/img/button_update_over.gif +0 -0
  43. data/html/img/circle.gif +0 -0
  44. data/html/img/delta.gif +0 -0
  45. data/html/img/dialog_info.jpg +0 -0
  46. data/html/img/dialog_input.jpg +0 -0
  47. data/html/img/dialog_warn.jpg +0 -0
  48. data/html/img/dt-arrow-dn.png +0 -0
  49. data/html/img/dt-arrow-up.png +0 -0
  50. data/html/img/foot.jpg +0 -0
  51. data/html/img/h3_bt-create_0.gif +0 -0
  52. data/html/img/h3_bt-create_1.gif +0 -0
  53. data/html/img/h3_bt-create_2.gif +0 -0
  54. data/html/img/h3_result_0.gif +0 -0
  55. data/html/img/h3_result_1.gif +0 -0
  56. data/html/img/h3_result_2.gif +0 -0
  57. data/html/img/h3_result_3.gif +0 -0
  58. data/html/img/h3_result_4.gif +0 -0
  59. data/html/img/h3_result_5.gif +0 -0
  60. data/html/img/h3_result_6.gif +0 -0
  61. data/html/img/h3_rt-setting_0.gif +0 -0
  62. data/html/img/h3_rt-setting_1.gif +0 -0
  63. data/html/img/head.jpg +0 -0
  64. data/html/img/line_white.gif +0 -0
  65. data/html/img/loading.gif +0 -0
  66. data/html/img/panel_100_bottom.gif +0 -0
  67. data/html/img/panel_100_middle.gif +0 -0
  68. data/html/img/panel_100_top.gif +0 -0
  69. data/html/img/panel_140_650_b.gif +0 -0
  70. data/html/img/panel_140_650_m.gif +0 -0
  71. data/html/img/panel_140_650_t.gif +0 -0
  72. data/html/img/panel_140_660_b.gif +0 -0
  73. data/html/img/panel_140_660_m.gif +0 -0
  74. data/html/img/panel_140_660_t.gif +0 -0
  75. data/html/img/panel_140_b.gif +0 -0
  76. data/html/img/panel_140_m.gif +0 -0
  77. data/html/img/panel_140_t.gif +0 -0
  78. data/html/img/panel_260_b.gif +0 -0
  79. data/html/img/panel_260_m.gif +0 -0
  80. data/html/img/panel_260_t.gif +0 -0
  81. data/html/img/panel_300_b.gif +0 -0
  82. data/html/img/panel_300_m.gif +0 -0
  83. data/html/img/panel_300_t.gif +0 -0
  84. data/html/img/panel_320_b.gif +0 -0
  85. data/html/img/panel_320_m.gif +0 -0
  86. data/html/img/panel_320_t.gif +0 -0
  87. data/html/img/panel_360_b.gif +0 -0
  88. data/html/img/panel_360_m.gif +0 -0
  89. data/html/img/panel_360_t.gif +0 -0
  90. data/html/img/panel_380_b.gif +0 -0
  91. data/html/img/panel_380_m.gif +0 -0
  92. data/html/img/panel_380_t.gif +0 -0
  93. data/html/img/panel_500_b.gif +0 -0
  94. data/html/img/panel_500_m.gif +0 -0
  95. data/html/img/panel_500_t.gif +0 -0
  96. data/html/img/panel_620_b.gif +0 -0
  97. data/html/img/panel_620_m.gif +0 -0
  98. data/html/img/panel_620_t.gif +0 -0
  99. data/html/img/panel_780_b.gif +0 -0
  100. data/html/img/panel_780_m.gif +0 -0
  101. data/html/img/panel_780_t.gif +0 -0
  102. data/html/img/problem.gif +0 -0
  103. data/html/img/progressbar.gif +0 -0
  104. data/html/img/result-title-1-1.gif +0 -0
  105. data/html/img/result-title-1-2.gif +0 -0
  106. data/html/img/result-title-2-1.gif +0 -0
  107. data/html/img/result-title-2-2.gif +0 -0
  108. data/html/img/result-title-3-1.gif +0 -0
  109. data/html/img/result-title-4-1.gif +0 -0
  110. data/html/img/rt-setting-title-1.gif +0 -0
  111. data/html/img/rt-setting-title-2.gif +0 -0
  112. data/html/img/s.gif +0 -0
  113. data/html/img/scroll.gif +0 -0
  114. data/html/img/separator.gif +0 -0
  115. data/html/img/sidebar_agent.png +0 -0
  116. data/html/img/sidebar_agent_edit.png +0 -0
  117. data/html/img/sidebar_agent_edit_agent.png +0 -0
  118. data/html/img/sidebar_agent_edit_agent_over.png +0 -0
  119. data/html/img/sidebar_agent_edit_agent_s.png +0 -0
  120. data/html/img/sidebar_agent_edit_over.png +0 -0
  121. data/html/img/sidebar_agent_edit_s.png +0 -0
  122. data/html/img/sidebar_agent_edit_shared_lib.png +0 -0
  123. data/html/img/sidebar_agent_edit_shared_lib_over.png +0 -0
  124. data/html/img/sidebar_agent_edit_shared_lib_s.png +0 -0
  125. data/html/img/sidebar_back.gif +0 -0
  126. data/html/img/sidebar_bt.png +0 -0
  127. data/html/img/sidebar_bt_create.png +0 -0
  128. data/html/img/sidebar_bt_create_over.png +0 -0
  129. data/html/img/sidebar_bt_create_s.png +0 -0
  130. data/html/img/sidebar_bt_result.png +0 -0
  131. data/html/img/sidebar_bt_result_over.png +0 -0
  132. data/html/img/sidebar_bt_result_s.png +0 -0
  133. data/html/img/sidebar_result_rmt.png +0 -0
  134. data/html/img/sidebar_result_rmt_over.png +0 -0
  135. data/html/img/sidebar_result_rmt_s.png +0 -0
  136. data/html/img/sidebar_rt.png +0 -0
  137. data/html/img/sidebar_rt_setting.png +0 -0
  138. data/html/img/sidebar_rt_setting_over.png +0 -0
  139. data/html/img/sidebar_rt_setting_s.png +0 -0
  140. data/html/img/sprite.png +0 -0
  141. data/html/img/submenu_agents.png +0 -0
  142. data/html/img/submenu_agents_over.png +0 -0
  143. data/html/img/submenu_agents_s.png +0 -0
  144. data/html/img/submenu_graph.png +0 -0
  145. data/html/img/submenu_graph_over.png +0 -0
  146. data/html/img/submenu_graph_s.png +0 -0
  147. data/html/img/submenu_info.png +0 -0
  148. data/html/img/submenu_info_over.png +0 -0
  149. data/html/img/submenu_info_s.png +0 -0
  150. data/html/img/submenu_log.png +0 -0
  151. data/html/img/submenu_log_over.png +0 -0
  152. data/html/img/submenu_log_s.png +0 -0
  153. data/html/img/submenu_operation.png +0 -0
  154. data/html/img/submenu_operation_over.png +0 -0
  155. data/html/img/submenu_operation_s.png +0 -0
  156. data/html/img/submenu_trade.png +0 -0
  157. data/html/img/submenu_trade_over.png +0 -0
  158. data/html/img/submenu_trade_s.png +0 -0
  159. data/html/img/td_over.gif +0 -0
  160. data/html/img/td_over_d.gif +0 -0
  161. data/html/img/td_selected.gif +0 -0
  162. data/html/img/thead.gif +0 -0
  163. data/html/img/transparent.gif +0 -0
  164. data/html/index.html +480 -0
  165. data/html/js/W3CDTF.js +131 -0
  166. data/html/js/agent-editor-page.js +350 -0
  167. data/html/js/agent-selector.js +642 -0
  168. data/html/js/app.js +226 -0
  169. data/html/js/bt-create-page.js +186 -0
  170. data/html/js/codepress/codepress.css +21 -0
  171. data/html/js/codepress/codepress.html +35 -0
  172. data/html/js/codepress/codepress.js +138 -0
  173. data/html/js/codepress/engines/gecko.js +293 -0
  174. data/html/js/codepress/engines/khtml.js +0 -0
  175. data/html/js/codepress/engines/msie.js +304 -0
  176. data/html/js/codepress/engines/older.js +0 -0
  177. data/html/js/codepress/engines/opera.js +260 -0
  178. data/html/js/codepress/images/line-numbers.gif +0 -0
  179. data/html/js/codepress/images/line-numbers.png +0 -0
  180. data/html/js/codepress/index.html +443 -0
  181. data/html/js/codepress/languages/asp.css +71 -0
  182. data/html/js/codepress/languages/asp.js +117 -0
  183. data/html/js/codepress/languages/autoit.css +13 -0
  184. data/html/js/codepress/languages/autoit.js +32 -0
  185. data/html/js/codepress/languages/csharp.css +9 -0
  186. data/html/js/codepress/languages/csharp.js +25 -0
  187. data/html/js/codepress/languages/css.css +10 -0
  188. data/html/js/codepress/languages/css.js +23 -0
  189. data/html/js/codepress/languages/generic.css +9 -0
  190. data/html/js/codepress/languages/generic.js +25 -0
  191. data/html/js/codepress/languages/html.css +13 -0
  192. data/html/js/codepress/languages/html.js +59 -0
  193. data/html/js/codepress/languages/java.css +7 -0
  194. data/html/js/codepress/languages/java.js +24 -0
  195. data/html/js/codepress/languages/javascript.css +8 -0
  196. data/html/js/codepress/languages/javascript.js +30 -0
  197. data/html/js/codepress/languages/perl.css +11 -0
  198. data/html/js/codepress/languages/perl.js +27 -0
  199. data/html/js/codepress/languages/php.css +12 -0
  200. data/html/js/codepress/languages/php.js +61 -0
  201. data/html/js/codepress/languages/ruby.css +10 -0
  202. data/html/js/codepress/languages/ruby.js +26 -0
  203. data/html/js/codepress/languages/sql.css +10 -0
  204. data/html/js/codepress/languages/sql.js +30 -0
  205. data/html/js/codepress/languages/text.css +5 -0
  206. data/html/js/codepress/languages/text.js +9 -0
  207. data/html/js/codepress/languages/vbscript.css +71 -0
  208. data/html/js/codepress/languages/vbscript.js +117 -0
  209. data/html/js/codepress/languages/xsl.css +15 -0
  210. data/html/js/codepress/languages/xsl.js +103 -0
  211. data/html/js/codepress/license.txt +458 -0
  212. data/html/js/container-min.js +1 -0
  213. data/html/js/container-utils.js +78 -0
  214. data/html/js/dialog.js +270 -0
  215. data/html/js/edit_area/autocompletion.js +493 -0
  216. data/html/js/edit_area/edit_area.css +507 -0
  217. data/html/js/edit_area/edit_area.js +510 -0
  218. data/html/js/edit_area/edit_area_compressor.php +408 -0
  219. data/html/js/edit_area/edit_area_full.gz +0 -0
  220. data/html/js/edit_area/edit_area_full.js +38 -0
  221. data/html/js/edit_area/edit_area_full_with_plugins.gz +0 -0
  222. data/html/js/edit_area/edit_area_full_with_plugins.js +39 -0
  223. data/html/js/edit_area/edit_area_functions.js +1098 -0
  224. data/html/js/edit_area/edit_area_loader.js +1070 -0
  225. data/html/js/edit_area/elements_functions.js +337 -0
  226. data/html/js/edit_area/highlight.js +283 -0
  227. data/html/js/edit_area/images/Thumbs.db +0 -0
  228. data/html/js/edit_area/images/autocompletion.gif +0 -0
  229. data/html/js/edit_area/images/close.gif +0 -0
  230. data/html/js/edit_area/images/fullscreen.gif +0 -0
  231. data/html/js/edit_area/images/go_to_line.gif +0 -0
  232. data/html/js/edit_area/images/help.gif +0 -0
  233. data/html/js/edit_area/images/highlight.gif +0 -0
  234. data/html/js/edit_area/images/load.gif +0 -0
  235. data/html/js/edit_area/images/move.gif +0 -0
  236. data/html/js/edit_area/images/newdocument.gif +0 -0
  237. data/html/js/edit_area/images/opacity.png +0 -0
  238. data/html/js/edit_area/images/processing.gif +0 -0
  239. data/html/js/edit_area/images/redo.gif +0 -0
  240. data/html/js/edit_area/images/reset_highlight.gif +0 -0
  241. data/html/js/edit_area/images/save.gif +0 -0
  242. data/html/js/edit_area/images/search.gif +0 -0
  243. data/html/js/edit_area/images/smooth_selection.gif +0 -0
  244. data/html/js/edit_area/images/spacer.gif +0 -0
  245. data/html/js/edit_area/images/statusbar_resize.gif +0 -0
  246. data/html/js/edit_area/images/undo.gif +0 -0
  247. data/html/js/edit_area/keyboard.js +145 -0
  248. data/html/js/edit_area/langs/cs.js +65 -0
  249. data/html/js/edit_area/langs/de.js +65 -0
  250. data/html/js/edit_area/langs/dk.js +65 -0
  251. data/html/js/edit_area/langs/en.js +65 -0
  252. data/html/js/edit_area/langs/eo.js +65 -0
  253. data/html/js/edit_area/langs/es.js +62 -0
  254. data/html/js/edit_area/langs/fr.js +65 -0
  255. data/html/js/edit_area/langs/hr.js +65 -0
  256. data/html/js/edit_area/langs/it.js +65 -0
  257. data/html/js/edit_area/langs/ja.js +65 -0
  258. data/html/js/edit_area/langs/mk.js +65 -0
  259. data/html/js/edit_area/langs/nl.js +65 -0
  260. data/html/js/edit_area/langs/pl.js +65 -0
  261. data/html/js/edit_area/langs/pt.js +65 -0
  262. data/html/js/edit_area/langs/ru.js +65 -0
  263. data/html/js/edit_area/langs/sk.js +65 -0
  264. data/html/js/edit_area/license_apache.txt +7 -0
  265. data/html/js/edit_area/license_bsd.txt +10 -0
  266. data/html/js/edit_area/license_lgpl.txt +458 -0
  267. data/html/js/edit_area/manage_area.js +466 -0
  268. data/html/js/edit_area/plugins/charmap/charmap.js +90 -0
  269. data/html/js/edit_area/plugins/charmap/css/charmap.css +64 -0
  270. data/html/js/edit_area/plugins/charmap/images/charmap.gif +0 -0
  271. data/html/js/edit_area/plugins/charmap/jscripts/map.js +373 -0
  272. data/html/js/edit_area/plugins/charmap/langs/cs.js +6 -0
  273. data/html/js/edit_area/plugins/charmap/langs/de.js +6 -0
  274. data/html/js/edit_area/plugins/charmap/langs/dk.js +6 -0
  275. data/html/js/edit_area/plugins/charmap/langs/en.js +6 -0
  276. data/html/js/edit_area/plugins/charmap/langs/eo.js +6 -0
  277. data/html/js/edit_area/plugins/charmap/langs/es.js +6 -0
  278. data/html/js/edit_area/plugins/charmap/langs/fr.js +6 -0
  279. data/html/js/edit_area/plugins/charmap/langs/hr.js +6 -0
  280. data/html/js/edit_area/plugins/charmap/langs/it.js +6 -0
  281. data/html/js/edit_area/plugins/charmap/langs/ja.js +6 -0
  282. data/html/js/edit_area/plugins/charmap/langs/mk.js +6 -0
  283. data/html/js/edit_area/plugins/charmap/langs/nl.js +6 -0
  284. data/html/js/edit_area/plugins/charmap/langs/pl.js +6 -0
  285. data/html/js/edit_area/plugins/charmap/langs/pt.js +6 -0
  286. data/html/js/edit_area/plugins/charmap/langs/ru.js +6 -0
  287. data/html/js/edit_area/plugins/charmap/langs/sk.js +6 -0
  288. data/html/js/edit_area/plugins/charmap/popup.html +24 -0
  289. data/html/js/edit_area/plugins/test/css/test.css +3 -0
  290. data/html/js/edit_area/plugins/test/images/Thumbs.db +0 -0
  291. data/html/js/edit_area/plugins/test/images/test.gif +0 -0
  292. data/html/js/edit_area/plugins/test/langs/cs.js +4 -0
  293. data/html/js/edit_area/plugins/test/langs/de.js +4 -0
  294. data/html/js/edit_area/plugins/test/langs/dk.js +4 -0
  295. data/html/js/edit_area/plugins/test/langs/en.js +4 -0
  296. data/html/js/edit_area/plugins/test/langs/eo.js +4 -0
  297. data/html/js/edit_area/plugins/test/langs/es.js +4 -0
  298. data/html/js/edit_area/plugins/test/langs/fr.js +4 -0
  299. data/html/js/edit_area/plugins/test/langs/hr.js +4 -0
  300. data/html/js/edit_area/plugins/test/langs/it.js +4 -0
  301. data/html/js/edit_area/plugins/test/langs/ja.js +4 -0
  302. data/html/js/edit_area/plugins/test/langs/mk.js +4 -0
  303. data/html/js/edit_area/plugins/test/langs/nl.js +4 -0
  304. data/html/js/edit_area/plugins/test/langs/pl.js +4 -0
  305. data/html/js/edit_area/plugins/test/langs/pt.js +4 -0
  306. data/html/js/edit_area/plugins/test/langs/ru.js +4 -0
  307. data/html/js/edit_area/plugins/test/langs/sk.js +4 -0
  308. data/html/js/edit_area/plugins/test/test.js +110 -0
  309. data/html/js/edit_area/plugins/test/test2.js +1 -0
  310. data/html/js/edit_area/reg_syntax.js +164 -0
  311. data/html/js/edit_area/reg_syntax/basic.js +69 -0
  312. data/html/js/edit_area/reg_syntax/brainfuck.js +44 -0
  313. data/html/js/edit_area/reg_syntax/c.js +62 -0
  314. data/html/js/edit_area/reg_syntax/coldfusion.js +119 -0
  315. data/html/js/edit_area/reg_syntax/cpp.js +65 -0
  316. data/html/js/edit_area/reg_syntax/css.js +84 -0
  317. data/html/js/edit_area/reg_syntax/html.js +50 -0
  318. data/html/js/edit_area/reg_syntax/js.js +93 -0
  319. data/html/js/edit_area/reg_syntax/pas.js +82 -0
  320. data/html/js/edit_area/reg_syntax/perl.js +88 -0
  321. data/html/js/edit_area/reg_syntax/php.js +156 -0
  322. data/html/js/edit_area/reg_syntax/python.js +144 -0
  323. data/html/js/edit_area/reg_syntax/robotstxt.js +24 -0
  324. data/html/js/edit_area/reg_syntax/ruby.js +67 -0
  325. data/html/js/edit_area/reg_syntax/sql.js +55 -0
  326. data/html/js/edit_area/reg_syntax/tsql.js +87 -0
  327. data/html/js/edit_area/reg_syntax/vb.js +52 -0
  328. data/html/js/edit_area/reg_syntax/xml.js +56 -0
  329. data/html/js/edit_area/regexp.js +135 -0
  330. data/html/js/edit_area/resize_area.js +82 -0
  331. data/html/js/edit_area/search_replace.js +174 -0
  332. data/html/js/edit_area/template.html +99 -0
  333. data/html/js/json-broker-client.js +61 -0
  334. data/html/js/page-manager.js +93 -0
  335. data/html/js/prototype.js +4184 -0
  336. data/html/js/result-page.js +707 -0
  337. data/html/js/rt-setting-page.js +122 -0
  338. data/html/js/sidebar.js +246 -0
  339. data/html/js/templates.js +208 -0
  340. data/html/js/utils.js +716 -0
  341. data/html/js/uuid.js +103 -0
  342. data/html/swf/chart.swf +0 -0
  343. data/lib/jiji/agent/agent.rb +93 -0
  344. data/lib/jiji/agent/agent_manager.rb +133 -0
  345. data/lib/jiji/agent/agent_registry.rb +248 -0
  346. data/lib/jiji/agent/permitter.rb +128 -0
  347. data/lib/jiji/agent/util.rb +16 -0
  348. data/lib/jiji/collector.rb +219 -0
  349. data/lib/jiji/command.rb +129 -0
  350. data/lib/jiji/configuration.rb +80 -0
  351. data/lib/jiji/dao/rate_dao.rb +149 -0
  352. data/lib/jiji/dao/timed_data_dao.rb +334 -0
  353. data/lib/jiji/dao/trade_result_dao.rb +128 -0
  354. data/lib/jiji/error.rb +33 -0
  355. data/lib/jiji/models.rb +169 -0
  356. data/lib/jiji/observer.rb +105 -0
  357. data/lib/jiji/operator.rb +405 -0
  358. data/lib/jiji/output.rb +165 -0
  359. data/lib/jiji/process.rb +182 -0
  360. data/lib/jiji/process_manager.rb +189 -0
  361. data/lib/jiji/registry.rb +255 -0
  362. data/lib/jiji/server.rb +115 -0
  363. data/lib/jiji/service/agent_service.rb +131 -0
  364. data/lib/jiji/service/hello_service.rb +10 -0
  365. data/lib/jiji/service/output_service.rb +58 -0
  366. data/lib/jiji/service/process_service.rb +78 -0
  367. data/lib/jiji/service/rate_service.rb +33 -0
  368. data/lib/jiji/service/system_service.rb +14 -0
  369. data/lib/jiji/service/trade_result_service.rb +32 -0
  370. data/lib/jiji/single_click_client.rb +95 -0
  371. data/lib/jiji/util/block_to_session.rb +70 -0
  372. data/lib/jiji/util/cache.rb +79 -0
  373. data/lib/jiji/util/csv_append_support.rb +15 -0
  374. data/lib/jiji/util/file_lock.rb +86 -0
  375. data/lib/jiji/util/fix_yaml_bug.rb +11 -0
  376. data/lib/jiji/util/iterator.rb +70 -0
  377. data/lib/jiji/util/json_broker.rb +53 -0
  378. data/lib/jiji/util/json_rpc_requestor.rb +30 -0
  379. data/lib/jiji/util/synchronize_interceptor.rb +41 -0
  380. data/lib/jiji/util/thread_use_generator.rb +52 -0
  381. data/lib/jiji/util/util.rb +179 -0
  382. data/swf/build.xml +23 -0
  383. data/swf/chart/FxChart-config.xml +9 -0
  384. data/swf/chart/FxChart.mxml +17 -0
  385. data/swf/chart/fx/chart/Chart.as +155 -0
  386. data/swf/chart/fx/chart/ctrl/AutoUpdate.as +96 -0
  387. data/swf/chart/fx/chart/ctrl/Controller.as +258 -0
  388. data/swf/chart/fx/chart/ctrl/Event.as +75 -0
  389. data/swf/chart/fx/chart/model/Model.as +226 -0
  390. data/swf/chart/fx/chart/model/TimedData.as +40 -0
  391. data/swf/chart/fx/chart/ui/AbstractChartUI.as +59 -0
  392. data/swf/chart/fx/chart/ui/AbstractDrawChartUI.as +63 -0
  393. data/swf/chart/fx/chart/ui/Constants.as +233 -0
  394. data/swf/chart/fx/chart/ui/InformationWindow.as +224 -0
  395. data/swf/chart/fx/chart/ui/LayerManager.as +95 -0
  396. data/swf/chart/fx/chart/ui/Loading.as +32 -0
  397. data/swf/chart/fx/chart/ui/Pointer.as +59 -0
  398. data/swf/chart/fx/chart/ui/RangeInfoWindow.as +84 -0
  399. data/swf/chart/fx/chart/ui/RenderingContext.as +54 -0
  400. data/swf/chart/fx/chart/ui/ScaleSelector.as +95 -0
  401. data/swf/chart/fx/chart/ui/Scroll.as +240 -0
  402. data/swf/chart/fx/chart/ui/ScrollBar.as +378 -0
  403. data/swf/chart/fx/chart/ui/Stage.as +97 -0
  404. data/swf/chart/fx/chart/ui/TradeDetailWindow.as +146 -0
  405. data/swf/chart/fx/chart/ui/TradeResult.as +334 -0
  406. data/swf/chart/fx/chart/ui/Window.as +96 -0
  407. data/swf/chart/fx/chart/ui/candle/Axis.as +112 -0
  408. data/swf/chart/fx/chart/ui/candle/Candle.as +79 -0
  409. data/swf/chart/fx/chart/ui/candle/CandleChart.as +81 -0
  410. data/swf/chart/fx/chart/ui/graph/Graph.as +198 -0
  411. data/swf/chart/fx/chart/ui/graph/GraphManager.as +177 -0
  412. data/swf/chart/fx/chart/ui/resource/buy.gif +0 -0
  413. data/swf/chart/fx/chart/ui/resource/cursor_hand.gif +0 -0
  414. data/swf/chart/fx/chart/ui/resource/diff_label.gif +0 -0
  415. data/swf/chart/fx/chart/ui/resource/down.gif +0 -0
  416. data/swf/chart/fx/chart/ui/resource/down_buy.gif +0 -0
  417. data/swf/chart/fx/chart/ui/resource/down_buy_1.gif +0 -0
  418. data/swf/chart/fx/chart/ui/resource/down_buy_2.gif +0 -0
  419. data/swf/chart/fx/chart/ui/resource/down_buy_3.gif +0 -0
  420. data/swf/chart/fx/chart/ui/resource/down_sell.gif +0 -0
  421. data/swf/chart/fx/chart/ui/resource/down_sell_1.gif +0 -0
  422. data/swf/chart/fx/chart/ui/resource/down_sell_2.gif +0 -0
  423. data/swf/chart/fx/chart/ui/resource/down_sell_3.gif +0 -0
  424. data/swf/chart/fx/chart/ui/resource/draw_buy.gif +0 -0
  425. data/swf/chart/fx/chart/ui/resource/draw_sell.gif +0 -0
  426. data/swf/chart/fx/chart/ui/resource/end_label.gif +0 -0
  427. data/swf/chart/fx/chart/ui/resource/fixed.gif +0 -0
  428. data/swf/chart/fx/chart/ui/resource/loading.gif +0 -0
  429. data/swf/chart/fx/chart/ui/resource/max_label.gif +0 -0
  430. data/swf/chart/fx/chart/ui/resource/min_label.gif +0 -0
  431. data/swf/chart/fx/chart/ui/resource/scroll_bar.gif +0 -0
  432. data/swf/chart/fx/chart/ui/resource/scroll_bar_a.gif +0 -0
  433. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle.gif +0 -0
  434. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_a.gif +0 -0
  435. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_o.gif +0 -0
  436. data/swf/chart/fx/chart/ui/resource/scroll_bar_left.gif +0 -0
  437. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_a.gif +0 -0
  438. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_o.gif +0 -0
  439. data/swf/chart/fx/chart/ui/resource/scroll_bar_o.gif +0 -0
  440. data/swf/chart/fx/chart/ui/resource/scroll_bar_right.gif +0 -0
  441. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_a.gif +0 -0
  442. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_o.gif +0 -0
  443. data/swf/chart/fx/chart/ui/resource/scroll_handle.gif +0 -0
  444. data/swf/chart/fx/chart/ui/resource/scroll_info_handle.gif +0 -0
  445. data/swf/chart/fx/chart/ui/resource/scroll_left_button.gif +0 -0
  446. data/swf/chart/fx/chart/ui/resource/scroll_left_button_d.gif +0 -0
  447. data/swf/chart/fx/chart/ui/resource/scroll_left_button_down.gif +0 -0
  448. data/swf/chart/fx/chart/ui/resource/scroll_left_button_g.gif +0 -0
  449. data/swf/chart/fx/chart/ui/resource/scroll_left_button_o.gif +0 -0
  450. data/swf/chart/fx/chart/ui/resource/scroll_left_button_up.gif +0 -0
  451. data/swf/chart/fx/chart/ui/resource/scroll_outer.gif +0 -0
  452. data/swf/chart/fx/chart/ui/resource/scroll_outer_left.gif +0 -0
  453. data/swf/chart/fx/chart/ui/resource/scroll_outer_right.gif +0 -0
  454. data/swf/chart/fx/chart/ui/resource/scroll_right_button.gif +0 -0
  455. data/swf/chart/fx/chart/ui/resource/scroll_right_button_d.gif +0 -0
  456. data/swf/chart/fx/chart/ui/resource/scroll_right_button_down.gif +0 -0
  457. data/swf/chart/fx/chart/ui/resource/scroll_right_button_g.gif +0 -0
  458. data/swf/chart/fx/chart/ui/resource/scroll_right_button_o.gif +0 -0
  459. data/swf/chart/fx/chart/ui/resource/scroll_right_button_up.gif +0 -0
  460. data/swf/chart/fx/chart/ui/resource/scroll_slider_left.gif +0 -0
  461. data/swf/chart/fx/chart/ui/resource/scroll_slider_right.gif +0 -0
  462. data/swf/chart/fx/chart/ui/resource/sell.gif +0 -0
  463. data/swf/chart/fx/chart/ui/resource/start_label.gif +0 -0
  464. data/swf/chart/fx/chart/ui/resource/stripe.gif +0 -0
  465. data/swf/chart/fx/chart/ui/resource/stripe_b.gif +0 -0
  466. data/swf/chart/fx/chart/ui/resource/stripe_r.gif +0 -0
  467. data/swf/chart/fx/chart/ui/resource/unfixed.gif +0 -0
  468. data/swf/chart/fx/chart/ui/resource/up.gif +0 -0
  469. data/swf/chart/fx/chart/ui/resource/up_buy.gif +0 -0
  470. data/swf/chart/fx/chart/ui/resource/up_buy_1.gif +0 -0
  471. data/swf/chart/fx/chart/ui/resource/up_buy_2.gif +0 -0
  472. data/swf/chart/fx/chart/ui/resource/up_buy_3.gif +0 -0
  473. data/swf/chart/fx/chart/ui/resource/up_sell.gif +0 -0
  474. data/swf/chart/fx/chart/ui/resource/up_sell_1.gif +0 -0
  475. data/swf/chart/fx/chart/ui/resource/up_sell_2.gif +0 -0
  476. data/swf/chart/fx/chart/ui/resource/up_sell_3.gif +0 -0
  477. data/swf/chart/fx/net/StubFactory.as +113 -0
  478. data/swf/chart/fx/util/ListenerSupport.as +55 -0
  479. data/swf/chart/fx/util/PositionManager.as +94 -0
  480. data/swf/chart/fx/util/ScaleFormatter.as +156 -0
  481. data/swf/chart/fx/util/Util.as +61 -0
  482. data/swf/chart/log.as +40 -0
  483. data/swf/lib/corelib.swc +0 -0
  484. data/test/BackCollectorTest/basic/2008-08-04/AUDJPY.csv +5 -0
  485. data/test/BackCollectorTest/basic/2008-08-04/USDJPY.csv +5 -0
  486. data/test/BackCollectorTest/basic/2008-08-04/ZARJPY.csv +5 -0
  487. data/test/BackCollectorTest/basic/2008-08-05/AUDJPY.csv +5 -0
  488. data/test/BackCollectorTest/basic/2008-08-05/USDJPY.csv +5 -0
  489. data/test/BackCollectorTest/basic/2008-08-05/ZARJPY.csv +5 -0
  490. data/test/BackCollectorTest/basic/2008-08-06/AUDJPY.csv +5 -0
  491. data/test/BackCollectorTest/basic/2008-08-06/USDJPY.csv +5 -0
  492. data/test/BackCollectorTest/basic/2008-08-06/ZARJPY.csv +5 -0
  493. data/test/BackCollectorTest/basic/2008-08-07/AUDJPY.csv +5 -0
  494. data/test/BackCollectorTest/basic/2008-08-07/USDJPY.csv +5 -0
  495. data/test/BackCollectorTest/basic/2008-08-07/ZARJPY.csv +5 -0
  496. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-04.csv +5 -0
  497. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-05.csv +5 -0
  498. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-06.csv +5 -0
  499. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-07.csv +5 -0
  500. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-04.csv +5 -0
  501. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-05.csv +5 -0
  502. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-06.csv +5 -0
  503. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-07.csv +5 -0
  504. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-04.csv +5 -0
  505. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-05.csv +5 -0
  506. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-06.csv +5 -0
  507. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-07.csv +5 -0
  508. data/test/BackCollectorTest/lack/2008-08-04/AUDJPY.csv +5 -0
  509. data/test/BackCollectorTest/lack/2008-08-04/USDJPY.csv +5 -0
  510. data/test/BackCollectorTest/lack/2008-08-04/ZARJPY.csv +5 -0
  511. data/test/BackCollectorTest/lack/2008-08-06/AUDJPY.csv +5 -0
  512. data/test/BackCollectorTest/lack/2008-08-06/USDJPY.csv +5 -0
  513. data/test/BackCollectorTest/lack/2008-08-06/ZARJPY.csv +5 -0
  514. data/test/BackCollectorTest/lack/2008-08-07/AUDJPY.csv +5 -0
  515. data/test/BackCollectorTest/lack/2008-08-07/USDJPY.csv +5 -0
  516. data/test/BackCollectorTest/lack/2008-08-07/ZARJPY.csv +5 -0
  517. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-04.csv +5 -0
  518. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-06.csv +5 -0
  519. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-07.csv +5 -0
  520. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-04.csv +5 -0
  521. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-06.csv +5 -0
  522. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-07.csv +5 -0
  523. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-04.csv +5 -0
  524. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-06.csv +5 -0
  525. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-07.csv +5 -0
  526. data/test/ProcessManagerTest/agents/moving_average.rb +95 -0
  527. data/test/ProcessManagerTest/conf/configuration.yaml +19 -0
  528. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-21.csv +5853 -0
  529. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-22.csv +5821 -0
  530. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-23.csv +5921 -0
  531. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-24.csv +5956 -0
  532. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-25.csv +5796 -0
  533. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-21.csv +5853 -0
  534. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-22.csv +5821 -0
  535. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-23.csv +5921 -0
  536. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-24.csv +5956 -0
  537. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-25.csv +5796 -0
  538. data/test/all_tests.rb +26 -0
  539. data/test/service/all_service_tests.rb +10 -0
  540. data/test/service/test_AgentService.rb +185 -0
  541. data/test/service/test_OutputService.rb +33 -0
  542. data/test/service/test_RateService.rb +56 -0
  543. data/test/test_AgentManager.rb +307 -0
  544. data/test/test_AgentRegistory.rb +566 -0
  545. data/test/test_BackTestCollector.rb +281 -0
  546. data/test/test_BlockToSession.rb +74 -0
  547. data/test/test_CSV.rb +85 -0
  548. data/test/test_Collector.rb +246 -0
  549. data/test/test_Configuration.rb +61 -0
  550. data/test/test_Configuration_a.yaml +6 -0
  551. data/test/test_Operator.rb +501 -0
  552. data/test/test_Output.rb +169 -0
  553. data/test/test_Output_registry.rb +49 -0
  554. data/test/test_PeriodicallyAgent.rb +180 -0
  555. data/test/test_Permitter.rb +217 -0
  556. data/test/test_Process.rb +186 -0
  557. data/test/test_ProcessManager.rb +312 -0
  558. data/test/test_RateDao.rb +697 -0
  559. data/test/test_SingleClickClient.rb +115 -0
  560. data/test/test_SynchronizeInterceptor.rb +75 -0
  561. data/test/test_TradeResultDao.rb +487 -0
  562. data/test/test_configuration.yaml +16 -0
  563. data/test/testutils.rb +37 -0
  564. metadata +750 -0
@@ -0,0 +1,1070 @@
1
+ /******
2
+ *
3
+ * EditArea
4
+ * Developped by Christophe Dolivet
5
+ * Released under LGPL, Apache and BSD licenses (use the one you want)
6
+ *
7
+ ******/
8
+
9
+ function EditAreaLoader(){
10
+ this.version= "0.7.2.3";
11
+ date= new Date();
12
+ this.start_time=date.getTime();
13
+ this.win= "loading"; // window loading state
14
+ this.error= false; // to know if load is interrrupt
15
+ this.baseURL="";
16
+ //this.suffix="";
17
+ this.template="";
18
+ this.lang= new Object(); // array of loaded speech language
19
+ this.load_syntax= new Object(); // array of loaded syntax language for highlight mode
20
+ this.syntax= new Object(); // array of initilized syntax language for highlight mode
21
+ this.loadedFiles= new Array();
22
+ this.waiting_loading= new Object(); // files that must be loaded in order to allow the script to really start
23
+ // scripts that must be loaded in the iframe
24
+ this.scripts_to_load= new Array("elements_functions", "resize_area", "reg_syntax");
25
+ this.sub_scripts_to_load= new Array("edit_area", "manage_area" ,"edit_area_functions", "keyboard", "search_replace", "highlight", "regexp" );
26
+
27
+ this.resize= new Array(); // contain resizing datas
28
+ this.hidden= new Object(); // store datas of the hidden textareas
29
+
30
+ this.default_settings= {
31
+ //id: "src" // id of the textarea to transform
32
+ debug: false
33
+ ,smooth_selection: true
34
+ ,font_size: "10" // not for IE
35
+ ,font_family: "monospace" // can be "verdana,monospace". Allow non monospace font but Firefox get smaller tabulation with non monospace fonts. IE doesn't change the tabulation width and Opera doesn't take this option into account...
36
+ ,start_highlight: false // if start with highlight
37
+ ,autocompletion: false // DEV ONLY if enable auto completion
38
+ ,toolbar: "search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, |, help"
39
+ ,begin_toolbar: "" // "new_document, save, load, |"
40
+ ,end_toolbar: "" // or end_toolbar
41
+ ,is_multi_files: false // enable the multi file mode (the textarea content is ignored)
42
+ ,allow_resize: "both" // possible values: "no", "both", "x", "y"
43
+ ,show_line_colors: false // if the highlight is disabled for the line currently beeing edited (if enabled => heavy CPU use)
44
+ ,min_width: 400
45
+ ,min_height: 125
46
+ ,replace_tab_by_spaces: false
47
+ ,allow_toggle: true // true or false
48
+ ,language: "en"
49
+ ,syntax: ""
50
+ ,syntax_selection_allow: "basic,brainfuck,c,coldfusion,cpp,css,html,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml"
51
+ ,display: "onload" // onload or later
52
+ ,max_undo: 30
53
+ ,browsers: "known" // all or known
54
+ ,plugins: "" // comma separated plugin list
55
+ ,gecko_spellcheck: false // enable/disable by default the gecko_spellcheck
56
+ ,fullscreen: false
57
+ ,is_editable: true
58
+ ,wrap_text: false // NOT IMPLEMENTED
59
+ ,load_callback: "" // click on load button (function name)
60
+ ,save_callback: "" // click on save button (function name)
61
+ ,change_callback: "" // textarea onchange trigger (function name)
62
+ ,submit_callback: "" // form submited (function name)
63
+ ,EA_init_callback: "" // EditArea initiliazed (function name)
64
+ ,EA_delete_callback: "" // EditArea deleted (function name)
65
+ ,EA_load_callback: "" // EditArea fully loaded and displayed (function name)
66
+ ,EA_unload_callback: "" // EditArea delete while being displayed (function name)
67
+ ,EA_toggle_on_callback: "" // EditArea toggled on (function name)
68
+ ,EA_toggle_off_callback: "" // EditArea toggled off (function name)
69
+ ,EA_file_switch_on_callback: "" // a new tab is selected (called for the newly selected file)
70
+ ,EA_file_switch_off_callback: "" // a new tab is selected (called for the previously selected file)
71
+ ,EA_file_close_callback: "" // close a tab
72
+ };
73
+
74
+ this.advanced_buttons = [
75
+ // id, button img, command (it will try to find the translation of "id"), is_file_specific
76
+ ['new_document', 'newdocument.gif', 'new_document', false],
77
+ ['search', 'search.gif', 'show_search', false],
78
+ ['go_to_line', 'go_to_line.gif', 'go_to_line', false],
79
+ ['undo', 'undo.gif', 'undo', true],
80
+ ['redo', 'redo.gif', 'redo', true],
81
+ ['change_smooth_selection', 'smooth_selection.gif', 'change_smooth_selection_mode', true],
82
+ ['reset_highlight', 'reset_highlight.gif', 'resync_highlight', true],
83
+ ['highlight', 'highlight.gif','change_highlight', true],
84
+ ['help', 'help.gif', 'show_help', false],
85
+ ['save', 'save.gif', 'save', false],
86
+ ['load', 'load.gif', 'load', false],
87
+ ['fullscreen', 'fullscreen.gif', 'toggle_full_screen', false],
88
+ ['autocompletion', 'autocompletion.gif', 'toggle_autocompletion', true]
89
+ ];
90
+
91
+ // navigator identification
92
+ ua= navigator.userAgent;
93
+
94
+ this.nav= new Object();
95
+
96
+ this.nav['isMacOS'] = (ua.indexOf('Mac OS') != -1);
97
+
98
+ this.nav['isIE'] = (navigator.appName == "Microsoft Internet Explorer");
99
+ if(this.nav['isIE']){
100
+ this.nav['isIE'] = ua.replace(/^.*?MSIE ([0-9\.]*).*$/, "$1");
101
+ if(this.nav['isIE']<6)
102
+ this.has_error();
103
+ }
104
+ if(this.nav['isNS'] = ua.indexOf('Netscape/') != -1){ // work only on netscape > 8 with render mode IE
105
+ this.nav['isNS']= ua.substr(ua.indexOf('Netscape/')+9);
106
+ if(this.nav['isNS']<8 || !this.nav['isIE'])
107
+ this.has_error();
108
+ }
109
+
110
+ if(this.nav['isOpera'] = (ua.indexOf('Opera') != -1)){
111
+ this.nav['isOpera']= ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i, "$1");
112
+ if(this.nav['isOpera']<9)
113
+ this.has_error();
114
+ this.nav['isIE']=false;
115
+ }
116
+ this.nav['isGecko'] = (ua.indexOf('Gecko') != -1);
117
+
118
+ if(this.nav['isFirefox'] =(ua.indexOf('Firefox') != -1))
119
+ this.nav['isFirefox'] = ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i, "$1");
120
+ // Iceweasel is a clone of Firefox
121
+ if(this.nav['isIceweasel'] =(ua.indexOf('Iceweasel') != -1))
122
+ this.nav['isFirefox']= this.nav['isIceweasel'] = ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i, "$1");
123
+ // grandparadisio is a clone of Firefox
124
+ if(this.nav['GranParadiso'] =(ua.indexOf('GranParadiso') != -1))
125
+ this.nav['isFirefox']= this.nav['isGranParadiso'] = ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i, "$1");
126
+ // BonEcho is a clone of Firefox
127
+ if(this.nav['BonEcho'] =(ua.indexOf('BonEcho') != -1))
128
+ this.nav['isFirefox']= this.nav['isBonEcho'] = ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i, "$1");
129
+
130
+ if(this.nav['isCamino'] =(ua.indexOf('Camino') != -1))
131
+ this.nav['isCamino'] = ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i, "$1");
132
+
133
+ if(this.nav['isChrome'] =(ua.indexOf('Chrome') != -1))
134
+ this.nav['isChrome'] = ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i, "$1");
135
+
136
+ if(this.nav['isSafari'] =(ua.indexOf('Safari') != -1))
137
+ this.nav['isSafari']= ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i, "$1");
138
+
139
+ if(this.nav['isIE']>=6 || this.nav['isOpera']>=9 || this.nav['isFirefox'] || this.nav['isChrome'] || this.nav['isCamino'] || this.nav['isSafari']>=3)
140
+ this.nav['isValidBrowser']=true;
141
+ else
142
+ this.nav['isValidBrowser']=false;
143
+
144
+ this.set_base_url();
145
+
146
+ for(var i=0; i<this.scripts_to_load.length; i++){
147
+ setTimeout("editAreaLoader.load_script('"+this.baseURL + this.scripts_to_load[i]+ ".js');", 1); // let the time to Object editAreaLoader to be created before loading additionnal scripts
148
+ this.waiting_loading[this.scripts_to_load[i]+ ".js"]= false;
149
+ }
150
+ this.add_event(window, "load", EditAreaLoader.prototype.window_loaded);
151
+ };
152
+
153
+ EditAreaLoader.prototype ={
154
+ has_error : function(){
155
+ this.error= true;
156
+ // set to empty all EditAreaLoader functions
157
+ for(var i in EditAreaLoader.prototype){
158
+ EditAreaLoader.prototype[i]=function(){};
159
+ }
160
+ },
161
+
162
+ window_loaded : function(){
163
+ editAreaLoader.win="loaded";
164
+
165
+ // add events on forms
166
+ if (document.forms) {
167
+ for (var i=0; i<document.forms.length; i++) {
168
+ var form = document.forms[i];
169
+ form.edit_area_replaced_submit=null;
170
+ try {
171
+
172
+ form.edit_area_replaced_submit = form.onsubmit;
173
+ form.onsubmit="";
174
+ } catch (e) {// Do nothing
175
+ }
176
+ editAreaLoader.add_event(form, "submit", EditAreaLoader.prototype.submit);
177
+ editAreaLoader.add_event(form, "reset", EditAreaLoader.prototype.reset);
178
+ }
179
+ }
180
+ editAreaLoader.add_event(window, "unload", function(){for(var i in editAreas){editAreaLoader.delete_instance(i);}}); // ini callback
181
+ },
182
+
183
+ // init the checkup of the selection of the IE textarea
184
+ init_ie_textarea : function(id){
185
+ var t=document.getElementById(id);
186
+ try{
187
+ if(t && typeof(t.focused)=="undefined"){
188
+ t.focus();
189
+ t.focused=true;
190
+ t.selectionStart= t.selectionEnd= 0;
191
+ get_IE_selection(t);
192
+ editAreaLoader.add_event(t, "focus", IE_textarea_focus);
193
+ editAreaLoader.add_event(t, "blur", IE_textarea_blur);
194
+
195
+ }
196
+ }catch(ex){}
197
+ },
198
+
199
+ init : function(settings){
200
+
201
+ if(!settings["id"])
202
+ this.has_error();
203
+
204
+ if(this.error)
205
+ return;
206
+ // if an instance of the editor already exists for this textarea => delete the previous one
207
+ if(editAreas[settings["id"]])
208
+ editAreaLoader.delete_instance(settings["id"]);
209
+
210
+ // init settings
211
+ for(var i in this.default_settings){
212
+ if(typeof(settings[i])=="undefined")
213
+ settings[i]=this.default_settings[i];
214
+ }
215
+
216
+ if(settings["browsers"]=="known" && this.nav['isValidBrowser']==false){
217
+ return;
218
+ }
219
+
220
+ if(settings["begin_toolbar"].length>0)
221
+ settings["toolbar"]= settings["begin_toolbar"] +","+ settings["toolbar"];
222
+ if(settings["end_toolbar"].length>0)
223
+ settings["toolbar"]= settings["toolbar"] +","+ settings["end_toolbar"];
224
+ settings["tab_toolbar"]= settings["toolbar"].replace(/ /g,"").split(",");
225
+
226
+ settings["plugins"]= settings["plugins"].replace(/ /g,"").split(",");
227
+ for(var i=0; i<settings["plugins"].length; i++){
228
+ if(settings["plugins"][i].length==0)
229
+ settings["plugins"].splice(i,1);
230
+ }
231
+ // alert(settings["plugins"].length+": "+ settings["plugins"].join(","));
232
+ /* var tmp="";
233
+ for(var i in settings){
234
+ tmp+=i+" : "+settings[i]+";\n";
235
+ }
236
+ alert(tmp);*/
237
+ this.get_template();
238
+ this.load_script(this.baseURL + "langs/"+ settings["language"] + ".js");
239
+
240
+ if(settings["syntax"].length>0){
241
+ settings["syntax"]=settings["syntax"].toLowerCase();
242
+ this.load_script(this.baseURL + "reg_syntax/"+ settings["syntax"] + ".js");
243
+ }
244
+ //alert(this.template);
245
+
246
+ editAreas[settings["id"]]= {"settings": settings};
247
+ editAreas[settings["id"]]["displayed"]=false;
248
+ editAreas[settings["id"]]["hidden"]=false;
249
+
250
+ //if(settings["display"]=="onload")
251
+ editAreaLoader.start(settings["id"]);
252
+ },
253
+
254
+ // delete an instance of an EditArea
255
+ delete_instance : function(id){
256
+
257
+ editAreaLoader.execCommand(id, "EA_delete");
258
+ if(window.frames["frame_"+id] && window.frames["frame_"+id].editArea)
259
+ {
260
+ if(editAreas[id]["displayed"])
261
+ editAreaLoader.toggle(id, "off");
262
+ window.frames["frame_"+id].editArea.execCommand("EA_unload");
263
+ }
264
+
265
+ // remove toggle infos and debug textarea
266
+ var span= document.getElementById("EditAreaArroundInfos_"+id);
267
+ if(span)
268
+ span.parentNode.removeChild(span);
269
+
270
+ // remove the iframe
271
+ var iframe= document.getElementById("frame_"+id);
272
+ if(iframe){
273
+ iframe.parentNode.removeChild(iframe);
274
+ //delete iframe;
275
+ try {
276
+ delete window.frames["frame_"+id];
277
+ } catch (e) {// Do nothing
278
+ }
279
+ }
280
+
281
+ delete editAreas[id];
282
+
283
+ },
284
+
285
+
286
+ start : function(id){
287
+ // check that the window is loaded
288
+ if(this.win!="loaded"){
289
+ setTimeout("editAreaLoader.start('"+id+"');", 50);
290
+ return;
291
+ }
292
+
293
+ // check that all needed scripts are loaded
294
+ for(var i in editAreaLoader.waiting_loading){
295
+ if(editAreaLoader.waiting_loading[i]!="loaded" && typeof(editAreaLoader.waiting_loading[i])!="function"){
296
+ setTimeout("editAreaLoader.start('"+id+"');", 50);
297
+ return;
298
+ }
299
+ }
300
+
301
+ // wait until language and syntax files are loaded
302
+ if(!editAreaLoader.lang[editAreas[id]["settings"]["language"]] || (editAreas[id]["settings"]["syntax"].length>0 && !editAreaLoader.load_syntax[editAreas[id]["settings"]["syntax"]]) ){
303
+ setTimeout("editAreaLoader.start('"+id+"');", 50);
304
+ return;
305
+ }
306
+ // init the regexp for syntax highlight
307
+ if(editAreas[id]["settings"]["syntax"].length>0)
308
+ editAreaLoader.init_syntax_regexp();
309
+
310
+
311
+ // display toggle option and debug area
312
+ if(!document.getElementById("EditAreaArroundInfos_"+id) && (editAreas[id]["settings"]["debug"] || editAreas[id]["settings"]["allow_toggle"]))
313
+ {
314
+ var span= document.createElement("span");
315
+ span.id= "EditAreaArroundInfos_"+id;
316
+ var html="";
317
+ if(editAreas[id]["settings"]["allow_toggle"]){
318
+ checked=(editAreas[id]["settings"]["display"]=="onload")?"checked":"";
319
+ html+="<div id='edit_area_toggle_"+i+"'>";
320
+ html+="<input id='edit_area_toggle_checkbox_"+ id +"' class='toggle_"+ id +"' type='checkbox' onclick='editAreaLoader.toggle(\""+ id +"\");' accesskey='e' "+checked+" />";
321
+ html+="<label for='edit_area_toggle_checkbox_"+ id +"'>{$toggle}</label></div>";
322
+ }
323
+ if(editAreas[id]["settings"]["debug"])
324
+ html+="<textarea id='edit_area_debug_"+ id +"' style='z-index: 20; width: 100%; height: 120px;overflow: auto; border: solid black 1px;'></textarea><br />";
325
+ html= editAreaLoader.translate(html, editAreas[id]["settings"]["language"]);
326
+ span.innerHTML= html;
327
+ var father= document.getElementById(id).parentNode;
328
+ var next= document.getElementById(id).nextSibling;
329
+ if(next==null)
330
+ father.appendChild(span);
331
+ else
332
+ father.insertBefore(span, next);
333
+ }
334
+
335
+ if(!editAreas[id]["initialized"])
336
+ {
337
+ this.execCommand(id, "EA_init"); // ini callback
338
+ if(editAreas[id]["settings"]["display"]=="later"){
339
+ editAreas[id]["initialized"]= true;
340
+ return;
341
+ }
342
+ }
343
+
344
+ if(this.nav['isIE']){ // launch IE selection checkup
345
+ editAreaLoader.init_ie_textarea(id);
346
+ }
347
+
348
+ // get toolbar content
349
+ var html_toolbar_content="";
350
+ area=editAreas[id];
351
+
352
+ for(var i=0; i<area["settings"]["tab_toolbar"].length; i++){
353
+ // alert(this.tab_toolbar[i]+"\n"+ this.get_control_html(this.tab_toolbar[i]));
354
+ html_toolbar_content+= this.get_control_html(area["settings"]["tab_toolbar"][i], area["settings"]["language"]);
355
+ }
356
+
357
+ // create javascript import rules for the iframe if the javascript has not been already loaded by the compressor
358
+ if(!this.iframe_script){
359
+ this.iframe_script="";
360
+ for(var i=0; i<this.sub_scripts_to_load.length; i++)
361
+ this.iframe_script+='<script language="javascript" type="text/javascript" src="'+ this.baseURL + this.sub_scripts_to_load[i] +'.js"></script>';
362
+ }
363
+
364
+ // add plugins scripts if not already loaded by the compressor (but need to load language in all the case)
365
+ for(var i=0; i<area["settings"]["plugins"].length; i++){
366
+ //if(typeof(area["settings"]["plugins"][i])=="function") continue;
367
+ if(!editAreaLoader.all_plugins_loaded)
368
+ this.iframe_script+='<script language="javascript" type="text/javascript" src="'+ this.baseURL + 'plugins/' + area["settings"]["plugins"][i] + '/' + area["settings"]["plugins"][i] +'.js"></script>';
369
+ this.iframe_script+='<script language="javascript" type="text/javascript" src="'+ this.baseURL + 'plugins/' + area["settings"]["plugins"][i] + '/langs/' + area["settings"]["language"] +'.js"></script>';
370
+ }
371
+
372
+
373
+ // create css link for the iframe if the whole css text has not been already loaded by the compressor
374
+ if(!this.iframe_css){
375
+ this.iframe_css="<link href='"+ this.baseURL +"edit_area.css' rel='stylesheet' type='text/css' />";
376
+ }
377
+
378
+
379
+ // create template
380
+ var template= this.template.replace(/\[__BASEURL__\]/g, this.baseURL);
381
+ template= template.replace("[__TOOLBAR__]",html_toolbar_content);
382
+
383
+
384
+ // fill template with good language sentences
385
+ template= this.translate(template, area["settings"]["language"], "template");
386
+
387
+ // add css_code
388
+ template= template.replace("[__CSSRULES__]", this.iframe_css);
389
+ // add js_code
390
+ template= template.replace("[__JSCODE__]", this.iframe_script);
391
+
392
+ // add version_code
393
+ template= template.replace("[__EA_VERSION__]", this.version);
394
+ //template=template.replace(/\{\$([^\}]+)\}/gm, this.traduc_template);
395
+
396
+ //editAreas[area["settings"]["id"]]["template"]= template;
397
+
398
+ area.textarea=document.getElementById(area["settings"]["id"]);
399
+ editAreas[area["settings"]["id"]]["textarea"]=area.textarea;
400
+
401
+ // if removing previous instances from DOM before (fix from Marcin)
402
+ if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')
403
+ delete window.frames["frame_"+area["settings"]["id"]];
404
+
405
+ // insert template in the document after the textarea
406
+ var father= area.textarea.parentNode;
407
+ /* var container= document.createElement("div");
408
+ container.id= "EditArea_frame_container_"+area["settings"]["id"];
409
+ */
410
+ var content= document.createElement("iframe");
411
+ content.name= "frame_"+area["settings"]["id"];
412
+ content.id= "frame_"+area["settings"]["id"];
413
+ content.style.borderWidth= "0px";
414
+ setAttribute(content, "frameBorder", "0"); // IE
415
+ content.style.overflow="hidden";
416
+ content.style.display="none";
417
+
418
+ /* container.appendChild(content);
419
+ var next= area.textarea.nextSibling;
420
+ if(next==null)
421
+ father.appendChild(container);
422
+ else
423
+ father.insertBefore(container, next) ;*/
424
+
425
+ var next= area.textarea.nextSibling;
426
+ if(next==null)
427
+ father.appendChild(content);
428
+ else
429
+ father.insertBefore(content, next) ;
430
+ var frame=window.frames["frame_"+area["settings"]["id"]];
431
+
432
+ frame.document.open();
433
+ frame.editAreas=editAreas;
434
+ frame.area_id= area["settings"]["id"];
435
+ frame.document.area_id= area["settings"]["id"];
436
+ frame.document.write(template);
437
+ frame.document.close();
438
+
439
+ // frame.editAreaLoader=this;
440
+ //editAreas[area["settings"]["id"]]["displayed"]=true;
441
+
442
+ },
443
+
444
+ toggle : function(id, toggle_to){
445
+
446
+ /* if((editAreas[id]["displayed"]==true && toggle_to!="on") || toggle_to=="off"){
447
+ this.toggle_off(id);
448
+ }else if((editAreas[id]["displayed"]==false && toggle_to!="off") || toggle_to=="on"){
449
+ this.toggle_on(id);
450
+ }*/
451
+ if(!toggle_to)
452
+ toggle_to= (editAreas[id]["displayed"]==true)?"off":"on";
453
+ if(editAreas[id]["displayed"]==true && toggle_to=="off"){
454
+ this.toggle_off(id);
455
+ }else if(editAreas[id]["displayed"]==false && toggle_to=="on"){
456
+ this.toggle_on(id);
457
+ }
458
+
459
+ return false;
460
+ },
461
+
462
+ toggle_off : function(id){
463
+ if(window.frames["frame_"+id])
464
+ {
465
+ var frame=window.frames["frame_"+id];
466
+ if(frame.editArea.fullscreen['isFull'])
467
+ frame.editArea.toggle_full_screen(false);
468
+ editAreas[id]["displayed"]=false;
469
+
470
+ // set wrap to off to keep same display mode (some browser get problem with this, so it need more complex operation
471
+
472
+ editAreas[id]["textarea"].wrap = "off"; // for IE
473
+ setAttribute(editAreas[id]["textarea"], "wrap", "off"); // for Firefox
474
+ var parNod = editAreas[id]["textarea"].parentNode;
475
+ var nxtSib = editAreas[id]["textarea"].nextSibling;
476
+ parNod.removeChild(editAreas[id]["textarea"]);
477
+ parNod.insertBefore(editAreas[id]["textarea"], nxtSib);
478
+
479
+ // restore values
480
+ editAreas[id]["textarea"].value= frame.editArea.textarea.value;
481
+ var selStart= frame.editArea.last_selection["selectionStart"];
482
+ var selEnd= frame.editArea.last_selection["selectionEnd"];
483
+ var scrollTop= frame.document.getElementById("result").scrollTop;
484
+ var scrollLeft= frame.document.getElementById("result").scrollLeft;
485
+
486
+
487
+ document.getElementById("frame_"+id).style.display='none';
488
+
489
+ editAreas[id]["textarea"].style.display="inline";
490
+
491
+
492
+ editAreas[id]["textarea"].focus();
493
+ if(this.nav['isIE']){
494
+ editAreas[id]["textarea"].selectionStart= selStart;
495
+ editAreas[id]["textarea"].selectionEnd= selEnd;
496
+ editAreas[id]["textarea"].focused=true;
497
+ set_IE_selection(editAreas[id]["textarea"]);
498
+ }else{
499
+ if(this.nav['isOpera']){ // Opera bug when moving selection start and selection end
500
+ editAreas[id]["textarea"].setSelectionRange(0, 0);
501
+ }
502
+ try{
503
+ editAreas[id]["textarea"].setSelectionRange(selStart, selEnd);
504
+ } catch(e) {
505
+ };
506
+ }
507
+ editAreas[id]["textarea"].scrollTop= scrollTop;
508
+ editAreas[id]["textarea"].scrollLeft= scrollLeft;
509
+ frame.editArea.execCommand("toggle_off");
510
+
511
+ }
512
+ },
513
+
514
+ toggle_on : function(id){
515
+ /*if(!editAreas[area["settings"]["id"]]["started"])
516
+ editAreaLoader.start(id);*/
517
+
518
+ if(window.frames["frame_"+id])
519
+ {
520
+ var frame=window.frames["frame_"+id];
521
+ area= window.frames["frame_"+id].editArea;
522
+ area.textarea.value= editAreas[id]["textarea"].value;
523
+
524
+ // store display values;
525
+ var selStart= 0;
526
+ var selEnd= 0;
527
+ var scrollTop= 0;
528
+ var scrollLeft= 0;
529
+
530
+ if(editAreas[id]["textarea"].use_last==true)
531
+ {
532
+ var selStart= editAreas[id]["textarea"].last_selectionStart;
533
+ var selEnd= editAreas[id]["textarea"].last_selectionEnd;
534
+ var scrollTop= editAreas[id]["textarea"].last_scrollTop;
535
+ var scrollLeft= editAreas[id]["textarea"].last_scrollLeft;
536
+ editAreas[id]["textarea"].use_last=false;
537
+ }
538
+ else
539
+ {
540
+ try{
541
+ var selStart= editAreas[id]["textarea"].selectionStart;
542
+ var selEnd= editAreas[id]["textarea"].selectionEnd;
543
+ var scrollTop= editAreas[id]["textarea"].scrollTop;
544
+ var scrollLeft= editAreas[id]["textarea"].scrollLeft;
545
+ //alert(scrollTop);
546
+ }catch(ex){}
547
+ }
548
+
549
+ // set to good size
550
+ this.set_editarea_size_from_textarea(id, document.getElementById("frame_"+id));
551
+ editAreas[id]["textarea"].style.display="none";
552
+ document.getElementById("frame_"+id).style.display="inline";
553
+ area.execCommand("focus"); // without this focus opera doesn't manage well the iframe body height
554
+
555
+
556
+ // restore display values
557
+ editAreas[id]["displayed"]=true;
558
+ area.execCommand("update_size");
559
+
560
+ window.frames["frame_"+id].document.getElementById("result").scrollTop= scrollTop;
561
+ window.frames["frame_"+id].document.getElementById("result").scrollLeft= scrollLeft;
562
+ area.area_select(selStart, selEnd-selStart);
563
+ area.execCommand("toggle_on");
564
+
565
+ /*date= new Date();
566
+ end_time=date.getTime();
567
+ alert("load time: "+ (end_time-this.start_time));*/
568
+
569
+ }
570
+ else
571
+ {
572
+ /* if(this.nav['isIE'])
573
+ get_IE_selection(document.getElementById(id)); */
574
+ var elem= document.getElementById(id);
575
+ elem.last_selectionStart= elem.selectionStart;
576
+ elem.last_selectionEnd= elem.selectionEnd;
577
+ elem.last_scrollTop= elem.scrollTop;
578
+ elem.last_scrollLeft= elem.scrollLeft;
579
+ elem.use_last=true;
580
+ editAreaLoader.start(id);
581
+ }
582
+ },
583
+
584
+ set_editarea_size_from_textarea : function(id, frame){
585
+ var elem= document.getElementById(id);
586
+ //var width= elem.offsetWidth+"px";
587
+ //var height= elem.offsetHeight+"px";
588
+ var width=Math.max(editAreas[id]["settings"]["min_width"], elem.offsetWidth)+"px";
589
+ var height=Math.max(editAreas[id]["settings"]["min_height"], elem.offsetHeight)+"px";
590
+ if(elem.style.width.indexOf("%")!=-1)
591
+ width= elem.style.width;
592
+ if(elem.style.height.indexOf("%")!=-1)
593
+ height= elem.style.height;
594
+ //alert("h: "+height+" w: "+width);
595
+
596
+ frame.style.width= width;
597
+ frame.style.height= height;
598
+ },
599
+
600
+ set_base_url : function(){
601
+ //this.baseURL="";
602
+ if (!this.baseURL) {
603
+ var elements = document.getElementsByTagName('script');
604
+
605
+ for (var i=0; i<elements.length; i++) {
606
+ if (elements[i].src && elements[i].src.match(/edit_area_[^\\\/]*$/i) ) {
607
+ var src = elements[i].src;
608
+ src = src.substring(0, src.lastIndexOf('/'));
609
+ this.baseURL = src;
610
+ this.file_name= elements[i].src.substr(elements[i].src.lastIndexOf("/")+1);
611
+ break;
612
+ }
613
+ }
614
+ }
615
+
616
+ var documentBasePath = document.location.href;
617
+ if (documentBasePath.indexOf('?') != -1)
618
+ documentBasePath = documentBasePath.substring(0, documentBasePath.indexOf('?'));
619
+ var documentURL = documentBasePath;
620
+ documentBasePath = documentBasePath.substring(0, documentBasePath.lastIndexOf('/'));
621
+
622
+ // If not HTTP absolute
623
+ if (this.baseURL.indexOf('://') == -1 && this.baseURL.charAt(0) != '/') {
624
+ // If site absolute
625
+ this.baseURL = documentBasePath + "/" + this.baseURL;
626
+ }
627
+ this.baseURL+="/";
628
+ },
629
+
630
+ get_button_html : function(id, img, exec, isFileSpecific, baseURL) {
631
+ if(!baseURL)
632
+ baseURL= this.baseURL;
633
+ var cmd = 'editArea.execCommand(\'' + exec + '\')';
634
+ html= '<a id="a_'+ id +'" href="javascript:' + cmd + '" onclick="' + cmd + ';return false;" onmousedown="return false;" target="_self" fileSpecific="'+ (isFileSpecific?'yes':'no') +'">';
635
+ html+= '<img id="' + id + '" src="'+ baseURL +'images/' + img + '" title="{$' + id + '}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';
636
+ return html;
637
+ },
638
+
639
+ get_control_html : function(button_name, lang) {
640
+
641
+ for (var i=0; i<this.advanced_buttons.length; i++)
642
+ {
643
+ var but = this.advanced_buttons[i];
644
+ if (but[0] == button_name)
645
+ {
646
+ return this.get_button_html(but[0], but[1], but[2], but[3]);
647
+ }
648
+ }
649
+
650
+ switch (button_name){
651
+ case "*":
652
+ case "return":
653
+ return "<br />";
654
+ case "|":
655
+ case "separator":
656
+ return '<img src="'+ this.baseURL +'images/spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';
657
+ case "select_font":
658
+ html= "<select id='area_font_size' onchange='javascript:editArea.execCommand(\"change_font_size\")' fileSpecific='yes'>"
659
+ +"<option value='-1'>{$font_size}</option>"
660
+ +"<option value='8'>8 pt</option>"
661
+ +"<option value='9'>9 pt</option>"
662
+ +"<option value='10'>10 pt</option>"
663
+ +"<option value='11'>11 pt</option>"
664
+ +"<option value='12'>12 pt</option>"
665
+ +"<option value='14'>14 pt</option>"
666
+ +"</select>";
667
+ return html;
668
+ case "syntax_selection":
669
+ var html= "<select id='syntax_selection' onchange='javascript:editArea.execCommand(\"change_syntax\", this.value)' fileSpecific='yes'>";
670
+ html+="<option value='-1'>{$syntax_selection}</option>";
671
+ html+="</select>";
672
+ return html;
673
+ }
674
+
675
+ return "<span id='tmp_tool_"+button_name+"'>["+button_name+"]</span>";
676
+ },
677
+
678
+
679
+ get_template : function(){
680
+ if(this.template=="")
681
+ {
682
+ var xhr_object = null;
683
+ if(window.XMLHttpRequest) // Firefox
684
+ xhr_object = new XMLHttpRequest();
685
+ else if(window.ActiveXObject) // Internet Explorer
686
+ xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
687
+ else { // XMLHttpRequest not supported
688
+ alert("XMLHTTPRequest not supported. EditArea not loaded");
689
+ return;
690
+ }
691
+
692
+ xhr_object.open("GET", this.baseURL+"template.html", false);
693
+ xhr_object.send(null);
694
+ if(xhr_object.readyState == 4)
695
+ this.template=xhr_object.responseText;
696
+ else
697
+ this.has_error();
698
+ }
699
+ },
700
+
701
+ // translate text
702
+ translate : function(text, lang, mode){
703
+
704
+ if(mode=="word")
705
+ text=editAreaLoader.get_word_translation(text, lang);
706
+ else if(mode="template"){
707
+ editAreaLoader.current_language= lang;
708
+ text=text.replace(/\{\$([^\}]+)\}/gm, editAreaLoader.translate_template);
709
+ }
710
+ return text;
711
+ },
712
+
713
+ translate_template : function(){
714
+ return editAreaLoader.get_word_translation(EditAreaLoader.prototype.translate_template.arguments[1], editAreaLoader.current_language);
715
+ },
716
+
717
+ get_word_translation : function(val, lang){
718
+ for(var i in editAreaLoader.lang[lang]){
719
+ if(i == val)
720
+ return editAreaLoader.lang[lang][i];
721
+ }
722
+ return "_"+val;
723
+ },
724
+
725
+ load_script : function(url){
726
+ if (this.loadedFiles[url])
727
+ return;
728
+ //alert("load: "+url);
729
+ try{
730
+ var script= document.createElement("script");
731
+ script.type= "text/javascript";
732
+ script.src= url;
733
+ script.charset= "UTF-8";
734
+ var head= document.getElementsByTagName("head");
735
+ head[0].appendChild(script);
736
+ }catch(e){
737
+ document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '" charset="UTF-8"></sc'+'ript>');
738
+ }
739
+ //var filename= url.replace(/^.*?\/?([a-z\.\_\-]+)$/i, "$1");
740
+ this.loadedFiles[url] = true;
741
+ },
742
+
743
+ add_event : function(obj, name, handler) {
744
+ if (obj.attachEvent) {
745
+ obj.attachEvent("on" + name, handler);
746
+ } else{
747
+ obj.addEventListener(name, handler, false);
748
+ }
749
+ },
750
+
751
+ remove_event : function(obj, name, handler){
752
+ if (obj.detachEvent)
753
+ obj.detachEvent("on" + name, handler);
754
+ else
755
+ obj.removeEventListener(name, handler, false);
756
+ },
757
+
758
+
759
+ // reset all the editareas in the form that have been reseted
760
+ reset : function(e){
761
+ var formObj = editAreaLoader.nav['isIE'] ? window.event.srcElement : e.target;
762
+ if(formObj.tagName!='FORM')
763
+ formObj= formObj.form;
764
+
765
+ for(var i in editAreas){
766
+ var is_child= false;
767
+ for (var x=0;x<formObj.elements.length;x++) {
768
+ if(formObj.elements[x].id == i)
769
+ is_child=true;
770
+ }
771
+
772
+ if(window.frames["frame_"+i] && is_child && editAreas[i]["displayed"]==true){
773
+
774
+ var exec= 'window.frames["frame_'+ i +'"].editArea.textarea.value= document.getElementById("'+ i +'").value;';
775
+ exec+= 'window.frames["frame_'+ i +'"].editArea.execCommand("focus");';
776
+ exec+= 'window.frames["frame_'+ i +'"].editArea.check_line_selection();';
777
+ exec+= 'window.frames["frame_'+ i +'"].editArea.execCommand("reset");';
778
+ window.setTimeout(exec, 10);
779
+ }
780
+ }
781
+ return;
782
+ },
783
+
784
+
785
+ // prepare all the textarea replaced by an editarea to be submited
786
+ submit : function(e){
787
+ var formObj = editAreaLoader.nav['isIE'] ? window.event.srcElement : e.target;
788
+ if(formObj.tagName!='FORM')
789
+ formObj= formObj.form;
790
+
791
+ for(var i in editAreas){
792
+ var is_child= false;
793
+ for (var x=0;x<formObj.elements.length;x++) {
794
+ if(formObj.elements[x].id == i)
795
+ is_child=true;
796
+ }
797
+
798
+ if(is_child)
799
+ {
800
+ if(window.frames["frame_"+i] && editAreas[i]["displayed"]==true)
801
+ document.getElementById(i).value= window.frames["frame_"+ i].editArea.textarea.value;
802
+ editAreaLoader.execCommand(i,"EA_submit");
803
+ }
804
+ }
805
+ if(typeof(formObj.edit_area_replaced_submit) == "function"){
806
+ res= formObj.edit_area_replaced_submit();
807
+ if(res==false){
808
+ if(editAreaLoader.nav['isIE'])
809
+ return false;
810
+ else
811
+ e.preventDefault();
812
+ }
813
+ }
814
+ return ;
815
+ },
816
+
817
+ // allow to get the value of the editarea
818
+ getValue : function(id){
819
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
820
+ return window.frames["frame_"+ id].editArea.textarea.value;
821
+ }else if(elem=document.getElementById(id)){
822
+ return elem.value;
823
+ }
824
+ return false;
825
+ },
826
+
827
+ // allow to set the value of the editarea
828
+ setValue : function(id, new_val){
829
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
830
+ window.frames["frame_"+ id].editArea.textarea.value= new_val;
831
+ window.frames["frame_"+ id].editArea.execCommand("focus");
832
+ window.frames["frame_"+ id].editArea.check_line_selection(false);
833
+ window.frames["frame_"+ id].editArea.execCommand("onchange");
834
+ }else if(elem=document.getElementById(id)){
835
+ elem.value= new_val;
836
+ }
837
+ },
838
+
839
+ // allow to get infos on the selection: array(start, end)
840
+ getSelectionRange : function(id){
841
+ var sel= {"start": 0, "end": 0};
842
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
843
+ var editArea= window.frames["frame_"+ id].editArea;
844
+
845
+ /* if(this.nav['isIE']){
846
+ editArea.getIESelection();
847
+
848
+ }
849
+ sel["start"]=editArea.textarea.selectionStart;
850
+ sel["end"]=editArea.textarea.selectionEnd;
851
+ */
852
+ sel["start"]=editArea.textarea.selectionStart;
853
+ sel["end"]=editArea.textarea.selectionEnd;
854
+
855
+ }else if(elem=document.getElementById(id)){
856
+ sel= getSelectionRange(elem);
857
+ }
858
+ return sel;
859
+ },
860
+
861
+ // allow to set the selection with the given start and end positions
862
+ setSelectionRange : function(id, new_start, new_end){
863
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
864
+ window.frames["frame_"+ id].editArea.area_select(new_start, new_end-new_start);
865
+ // make an auto-scroll to the selection
866
+ if(!this.nav['isIE']){
867
+ window.frames["frame_"+ id].editArea.check_line_selection(false);
868
+ window.frames["frame_"+ id].editArea.scroll_to_view();
869
+ }
870
+ }else if(elem=document.getElementById(id)){
871
+ setSelectionRange(elem, new_start, new_end);
872
+ }
873
+ },
874
+
875
+ getSelectedText : function(id){
876
+ var sel= this.getSelectionRange(id);
877
+ return this.getValue(id).substring(sel["start"], sel["end"]);
878
+ },
879
+
880
+ setSelectedText : function(id, new_val){
881
+ new_val= new_val.replace(/\r/g, "");
882
+ var sel= this.getSelectionRange(id);
883
+ var text= this.getValue(id);
884
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
885
+ var scrollTop= window.frames["frame_"+ id].document.getElementById("result").scrollTop;
886
+ var scrollLeft= window.frames["frame_"+ id].document.getElementById("result").scrollLeft;
887
+ }else{
888
+ var scrollTop= document.getElementById(id).scrollTop;
889
+ var scrollLeft= document.getElementById(id).scrollLeft;
890
+ }
891
+
892
+ text= text.substring(0, sel["start"])+ new_val +text.substring(sel["end"]);
893
+ this.setValue(id, text);
894
+ var new_sel_end= sel["start"]+ new_val.length;
895
+ this.setSelectionRange(id, sel["start"], new_sel_end);
896
+
897
+
898
+ // fix \r problem for selection length count on IE & Opera
899
+ if(new_val != this.getSelectedText(id).replace(/\r/g, "")){
900
+ this.setSelectionRange(id, sel["start"], new_sel_end+ new_val.split("\n").length -1);
901
+ }
902
+ // restore scrolling position
903
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
904
+ window.frames["frame_"+ id].document.getElementById("result").scrollTop= scrollTop;
905
+ window.frames["frame_"+ id].document.getElementById("result").scrollLeft= scrollLeft;
906
+ window.frames["frame_"+ id].editArea.execCommand("onchange");
907
+ }else{
908
+ document.getElementById(id).scrollTop= scrollTop;
909
+ document.getElementById(id).scrollLeft= scrollLeft;
910
+ }
911
+ },
912
+
913
+ insertTags : function(id, open_tag, close_tag){
914
+ var old_sel= this.getSelectionRange(id);
915
+ text= open_tag + this.getSelectedText(id) + close_tag;
916
+ editAreaLoader.setSelectedText(id, text);
917
+ var new_sel= this.getSelectionRange(id);
918
+ if(old_sel["end"] > old_sel["start"]) // if text was selected, cursor at the end
919
+ this.setSelectionRange(id, new_sel["end"], new_sel["end"]);
920
+ else // cursor in the middle
921
+ this.setSelectionRange(id, old_sel["start"]+open_tag.length, old_sel["start"]+open_tag.length);
922
+ },
923
+
924
+ // hide both EditArea and normal textarea
925
+ hide : function(id){
926
+ if(document.getElementById(id) && !this.hidden[id])
927
+ {
928
+ this.hidden[id]= new Object();
929
+ this.hidden[id]["selectionRange"]= this.getSelectionRange(id);
930
+ if(document.getElementById(id).style.display!="none")
931
+ {
932
+ this.hidden[id]["scrollTop"]= document.getElementById(id).scrollTop;
933
+ this.hidden[id]["scrollLeft"]= document.getElementById(id).scrollLeft;
934
+ }
935
+
936
+ if(window.frames["frame_"+id])
937
+ {
938
+ this.hidden[id]["toggle"]= editAreas[id]["displayed"];
939
+
940
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
941
+ var scrollTop= window.frames["frame_"+ id].document.getElementById("result").scrollTop;
942
+ var scrollLeft= window.frames["frame_"+ id].document.getElementById("result").scrollLeft;
943
+ }else{
944
+ var scrollTop= document.getElementById(id).scrollTop;
945
+ var scrollLeft= document.getElementById(id).scrollLeft;
946
+ }
947
+ this.hidden[id]["scrollTop"]= scrollTop;
948
+ this.hidden[id]["scrollLeft"]= scrollLeft;
949
+
950
+ if(editAreas[id]["displayed"]==true)
951
+ editAreaLoader.toggle_off(id);
952
+ }
953
+
954
+ // hide toggle button and debug box
955
+ var span= document.getElementById("EditAreaArroundInfos_"+id);
956
+ if(span){
957
+ span.style.display='none';
958
+ }
959
+
960
+ // hide textarea
961
+ document.getElementById(id).style.display= "none";
962
+ }
963
+ },
964
+
965
+ // restore hidden EditArea and normal textarea
966
+ show : function(id){
967
+ if((elem=document.getElementById(id)) && this.hidden[id])
968
+ {
969
+ elem.style.display= "inline";
970
+ elem.scrollTop= this.hidden[id]["scrollTop"];
971
+ elem.scrollLeft= this.hidden[id]["scrollLeft"];
972
+ var span= document.getElementById("EditAreaArroundInfos_"+id);
973
+ if(span){
974
+ span.style.display='inline';
975
+ }
976
+
977
+ if(window.frames["frame_"+id])
978
+ {
979
+
980
+ // restore toggle button and debug box
981
+
982
+
983
+ // restore textarea
984
+ elem.style.display= "inline";
985
+
986
+ // restore EditArea
987
+ if(this.hidden[id]["toggle"]==true)
988
+ editAreaLoader.toggle_on(id);
989
+
990
+ scrollTop= this.hidden[id]["scrollTop"];
991
+ scrollLeft= this.hidden[id]["scrollLeft"];
992
+
993
+ if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
994
+ window.frames["frame_"+ id].document.getElementById("result").scrollTop= scrollTop;
995
+ window.frames["frame_"+ id].document.getElementById("result").scrollLeft= scrollLeft;
996
+ }else{
997
+ elem.scrollTop= scrollTop;
998
+ elem.scrollLeft= scrollLeft;
999
+ }
1000
+
1001
+ }
1002
+ // restore selection
1003
+ sel= this.hidden[id]["selectionRange"];
1004
+ this.setSelectionRange(id, sel["start"], sel["end"]);
1005
+ delete this.hidden[id];
1006
+ }
1007
+ },
1008
+
1009
+ // get the current file datas (for multi file editing mode)
1010
+ getCurrentFile : function(id){
1011
+ return this.execCommand(id, 'get_file', this.execCommand(id, 'curr_file'));
1012
+ },
1013
+
1014
+ // get the given file datas (for multi file editing mode)
1015
+ getFile : function(id, file_id){
1016
+ return this.execCommand(id, 'get_file', file_id);
1017
+ },
1018
+
1019
+ // get all the openned files datas (for multi file editing mode)
1020
+ getAllFiles : function(id){
1021
+ return this.execCommand(id, 'get_all_files()');
1022
+ },
1023
+
1024
+ // open a file (for multi file editing mode)
1025
+ openFile : function(id, file_infos){
1026
+ return this.execCommand(id, 'open_file', file_infos);
1027
+ },
1028
+
1029
+ // close the given file (for multi file editing mode)
1030
+ closeFile : function(id, file_id){
1031
+ return this.execCommand(id, 'close_file', file_id);
1032
+ },
1033
+
1034
+ // close the given file (for multi file editing mode)
1035
+ setFileEditedMode : function(id, file_id, to){
1036
+ var reg1= new RegExp('\\\\', 'g');
1037
+ var reg2= new RegExp('"', 'g');
1038
+ return this.execCommand(id, 'set_file_edited_mode("'+ file_id.replace(reg1, '\\\\').replace(reg2, '\\"') +'", '+ to +')');
1039
+ },
1040
+
1041
+
1042
+ // allow to access to editarea functions and datas (for advanced users only)
1043
+ execCommand : function(id, cmd, fct_param){
1044
+ switch(cmd){
1045
+ case "EA_init":
1046
+ if(editAreas[id]['settings']["EA_init_callback"].length>0)
1047
+ eval(editAreas[id]['settings']["EA_init_callback"]+"('"+ id +"');");
1048
+ break;
1049
+ case "EA_delete":
1050
+ if(editAreas[id]['settings']["EA_delete_callback"].length>0)
1051
+ eval(editAreas[id]['settings']["EA_delete_callback"]+"('"+ id +"');");
1052
+ break;
1053
+ case "EA_submit":
1054
+ if(editAreas[id]['settings']["submit_callback"].length>0)
1055
+ eval(editAreas[id]['settings']["submit_callback"]+"('"+ id +"');");
1056
+ break;
1057
+ }
1058
+ if(window.frames["frame_"+id] && window.frames["frame_"+ id].editArea){
1059
+ if(fct_param!=undefined)
1060
+ return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +'(fct_param);');
1061
+ else
1062
+ return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +';');
1063
+ }
1064
+ return false;
1065
+ }
1066
+ };
1067
+
1068
+ var editAreaLoader= new EditAreaLoader();
1069
+ var editAreas= new Object();
1070
+