browsercms 3.1.5 → 3.3.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (425) hide show
  1. data/app/controllers/cms/base_controller.rb +3 -3
  2. data/app/controllers/cms/content_block_controller.rb +2 -2
  3. data/app/controllers/cms/content_controller.rb +5 -4
  4. data/app/controllers/cms/error_handling.rb +1 -1
  5. data/app/controllers/cms/routes_controller.rb +4 -5
  6. data/app/controllers/cms/section_nodes_controller.rb +1 -6
  7. data/app/controllers/cms/sections_controller.rb +2 -3
  8. data/app/controllers/cms/tasks_controller.rb +3 -0
  9. data/app/controllers/cms/users_controller.rb +1 -1
  10. data/app/helpers/cms/application_helper.rb +137 -34
  11. data/app/helpers/cms/form_builder.rb +33 -21
  12. data/app/helpers/cms/page_helper.rb +43 -10
  13. data/app/helpers/cms/path_helper.rb +1 -1
  14. data/app/helpers/cms/rendering_helper.rb +3 -4
  15. data/app/helpers/cms/section_nodes_helper.rb +5 -43
  16. data/app/models/abstract_file_block.rb +1 -16
  17. data/app/models/attachment.rb +57 -22
  18. data/app/models/category.rb +4 -4
  19. data/app/models/category_type.rb +2 -2
  20. data/app/models/cms/view_context.rb +46 -0
  21. data/app/models/connector.rb +7 -6
  22. data/app/models/content_type.rb +3 -3
  23. data/app/models/dynamic_view.rb +1 -1
  24. data/app/models/email_message.rb +2 -2
  25. data/app/models/file_block.rb +12 -0
  26. data/app/models/group.rb +4 -4
  27. data/app/models/group_type.rb +4 -4
  28. data/app/models/html_block.rb +1 -1
  29. data/app/models/image_block.rb +12 -0
  30. data/app/models/link.rb +22 -5
  31. data/app/models/page.rb +87 -46
  32. data/app/models/page_route.rb +61 -6
  33. data/app/models/permission.rb +1 -1
  34. data/app/models/portlet.rb +14 -4
  35. data/app/models/section.rb +48 -86
  36. data/app/models/section_node.rb +25 -40
  37. data/app/models/site.rb +1 -1
  38. data/app/models/tag.rb +1 -1
  39. data/app/models/task.rb +8 -7
  40. data/app/models/user.rb +2 -7
  41. data/app/portlets/forgot_password_portlet.rb +6 -2
  42. data/app/portlets/reset_password_portlet.rb +1 -1
  43. data/app/views/cms/blocks/_toolbar.html.erb +1 -1
  44. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +3 -6
  45. data/app/views/cms/blocks/_toolbar_for_member.html.erb +3 -5
  46. data/app/views/cms/blocks/edit.html.erb +4 -4
  47. data/app/views/cms/blocks/index.html.erb +7 -7
  48. data/app/views/cms/blocks/new.html.erb +4 -4
  49. data/app/views/cms/blocks/show.html.erb +2 -2
  50. data/app/views/cms/blocks/usages.html.erb +2 -2
  51. data/app/views/cms/blocks/versions.html.erb +4 -4
  52. data/app/views/cms/cache/show.html.erb +2 -2
  53. data/app/views/cms/categories/_form.html.erb +2 -2
  54. data/app/views/cms/connectors/new.html.erb +6 -8
  55. data/app/views/cms/content/no_page.html.erb +1 -1
  56. data/app/views/cms/content/show.html.erb +2 -7
  57. data/app/views/cms/dashboard/_page_drafts.html.erb +1 -1
  58. data/app/views/cms/dashboard/_tasks.html.erb +1 -1
  59. data/app/views/cms/dashboard/index.html.erb +1 -1
  60. data/app/views/cms/dynamic_views/_form.html.erb +2 -2
  61. data/app/views/cms/dynamic_views/index.html.erb +7 -10
  62. data/app/views/cms/email_messages/show.html.erb +2 -2
  63. data/app/views/cms/file_blocks/_form.html.erb +4 -4
  64. data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +2 -2
  65. data/app/views/cms/form_builder/_cms_file_field.html.erb +2 -2
  66. data/app/views/cms/form_builder/_cms_tag_list.html.erb +2 -2
  67. data/app/views/cms/form_builder/_cms_text_editor.html.erb +2 -2
  68. data/app/views/cms/groups/_form.html.erb +5 -5
  69. data/app/views/cms/groups/_permissions.html.erb +4 -4
  70. data/app/views/cms/groups/_sections.html.erb +1 -2
  71. data/app/views/cms/groups/index.html.erb +1 -1
  72. data/app/views/cms/html_blocks/render.html.erb +1 -1
  73. data/app/views/cms/image_blocks/_form.html.erb +4 -5
  74. data/app/views/cms/links/_form.html.erb +1 -1
  75. data/app/views/cms/links/edit.html.erb +2 -2
  76. data/app/views/cms/links/new.html.erb +2 -2
  77. data/app/views/cms/page_routes/_form.html.erb +2 -2
  78. data/app/views/cms/page_routes/index.html.erb +6 -9
  79. data/app/views/cms/page_routes/show.html.erb +5 -8
  80. data/app/views/cms/pages/_edit_connector.html.erb +1 -1
  81. data/app/views/cms/pages/_form.html.erb +3 -3
  82. data/app/views/cms/pages/edit.html.erb +2 -2
  83. data/app/views/cms/pages/new.html.erb +7 -7
  84. data/app/views/cms/pages/versions.html.erb +4 -4
  85. data/app/views/cms/redirects/_form.html.erb +2 -2
  86. data/app/views/cms/redirects/index.html.erb +8 -7
  87. data/app/views/cms/routes/index.html.erb +2 -2
  88. data/app/views/cms/section_nodes/_link.html.erb +3 -6
  89. data/app/views/cms/section_nodes/_node.html.erb +4 -13
  90. data/app/views/cms/section_nodes/_page.html.erb +7 -13
  91. data/app/views/cms/section_nodes/_section.html.erb +8 -24
  92. data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
  93. data/app/views/cms/section_nodes/index.html.erb +18 -30
  94. data/app/views/cms/sections/_form.html.erb +4 -6
  95. data/app/views/cms/sections/edit.html.erb +2 -2
  96. data/app/views/cms/sections/index.html.erb +3 -3
  97. data/app/views/cms/sections/new.html.erb +3 -3
  98. data/app/views/cms/sessions/new.html.erb +3 -3
  99. data/app/views/cms/shared/_pagination.html.erb +1 -1
  100. data/app/views/cms/shared/error.html.erb +1 -1
  101. data/app/views/cms/tags/render.html.erb +2 -2
  102. data/app/views/cms/tasks/new.html.erb +4 -4
  103. data/app/views/cms/users/_form.html.erb +3 -3
  104. data/app/views/cms/users/_toolbar.html.erb +3 -3
  105. data/app/views/cms/users/change_password.html.erb +5 -5
  106. data/app/views/cms/users/edit.html.erb +2 -2
  107. data/app/views/cms/users/index.html.erb +4 -4
  108. data/app/views/cms/users/new.html.erb +2 -2
  109. data/app/views/cms/users/show.html.erb +16 -16
  110. data/app/views/layouts/_cms_toolbar.html.erb +5 -5
  111. data/app/views/layouts/_page_toolbar.html.erb +11 -11
  112. data/app/views/layouts/cms/_footer.erb +1 -1
  113. data/app/views/layouts/cms/_head.html.erb +2 -6
  114. data/app/views/layouts/cms/administration.html.erb +32 -32
  115. data/app/views/layouts/cms/content_library.html.erb +5 -5
  116. data/app/views/layouts/cms/toolbar.html.erb +1 -1
  117. data/app/views/portlets/email_page/render.html.erb +2 -2
  118. data/app/views/portlets/forgot_password/render.html.erb +1 -1
  119. data/app/views/portlets/login/render.html.erb +4 -2
  120. data/app/views/portlets/reset_password/render.html.erb +1 -1
  121. data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
  122. data/bin/bcms +0 -0
  123. data/bin/bcms-upgrade +232 -0
  124. data/bin/browsercms +2 -2
  125. data/browsercms.gemspec +16 -14
  126. data/db/migrate/20100705083859_browsercms_3_3_0.rb +56 -0
  127. data/db/seeds.rb +58 -0
  128. data/doc/guides/html/authentication.html +448 -192
  129. data/doc/guides/html/build_it_yourself.html +454 -175
  130. data/doc/guides/html/building_modules.html +451 -220
  131. data/doc/guides/html/building_templates.html +448 -498
  132. data/doc/guides/html/content_blocks.html +450 -470
  133. data/doc/guides/html/customizing_browsercms.html +453 -169
  134. data/doc/guides/html/deployment_guide.html +443 -82
  135. data/doc/guides/html/files/bcmsorg.js +28 -0
  136. data/doc/guides/html/files/clearfix.css +8 -0
  137. data/doc/guides/html/files/cufon.js +7 -0
  138. data/doc/guides/html/files/global.css +190 -0
  139. data/doc/guides/html/files/helvetica.js +91 -0
  140. data/doc/guides/html/files/jquery.js +11 -0
  141. data/doc/guides/html/getting_started.html +454 -213
  142. data/doc/guides/html/index.html +454 -174
  143. data/doc/guides/html/installing_modules.html +454 -186
  144. data/doc/guides/html/portlets.html +451 -232
  145. data/doc/guides/html/user_guide.html +452 -270
  146. data/doc/guides/html/writing_guides.html +454 -161
  147. data/lib/acts_as_list.rb +1 -1
  148. data/lib/browsercms.rb +10 -6
  149. data/lib/cms/acts.rb +7 -0
  150. data/lib/cms/authentication.rb +4 -0
  151. data/lib/cms/authentication/controller.rb +1 -1
  152. data/lib/cms/behaviors.rb +1 -1
  153. data/lib/cms/behaviors/archiving.rb +2 -2
  154. data/lib/cms/behaviors/attaching.rb +28 -43
  155. data/lib/cms/behaviors/categorizing.rb +1 -1
  156. data/lib/cms/behaviors/connecting.rb +27 -12
  157. data/lib/cms/behaviors/dynamic_attributes.rb +8 -5
  158. data/lib/cms/behaviors/hiding.rb +2 -2
  159. data/lib/cms/behaviors/publishing.rb +32 -22
  160. data/lib/cms/behaviors/rendering.rb +41 -18
  161. data/lib/cms/behaviors/searching.rb +1 -1
  162. data/lib/cms/behaviors/soft_deleting.rb +58 -29
  163. data/lib/cms/behaviors/taggable.rb +1 -1
  164. data/lib/cms/behaviors/userstamping.rb +5 -4
  165. data/lib/cms/behaviors/versioning.rb +192 -111
  166. data/lib/cms/content_rendering_support.rb +3 -3
  167. data/lib/cms/date_picker.rb +23 -0
  168. data/lib/cms/engine.rb +46 -0
  169. data/lib/cms/extensions.rb +1 -1
  170. data/lib/cms/extensions/active_record/errors.rb +2 -2
  171. data/lib/cms/extensions/hash.rb +4 -2
  172. data/lib/cms/extensions/string.rb +7 -2
  173. data/lib/cms/init.rb +32 -21
  174. data/lib/cms/module.rb +22 -0
  175. data/lib/cms/module_installation.rb +38 -0
  176. data/lib/cms/routes.rb +127 -115
  177. data/lib/cms/version.rb +2 -2
  178. data/lib/generators/browser_cms.rb +12 -0
  179. data/lib/generators/browser_cms/cms/USAGE +2 -0
  180. data/lib/generators/browser_cms/cms/cms_generator.rb +36 -0
  181. data/{rails_generators/browser_cms → lib/generators/browser_cms/cms}/templates/README +0 -0
  182. data/{rails_generators/browser_cms_demo_site → lib/generators/browser_cms/demo_site}/USAGE +0 -0
  183. data/lib/generators/browser_cms/demo_site/demo_site_generator.rb +138 -0
  184. data/lib/generators/browser_cms/demo_site/templates/demo_site.rake +11 -0
  185. data/{rails_generators/browser_cms_demo_site/templates/migration.rb → lib/generators/browser_cms/demo_site/templates/migration.erb} +2 -8
  186. data/lib/generators/cms/content_block/USAGE +22 -0
  187. data/lib/generators/cms/content_block/content_block_generator.rb +55 -0
  188. data/{rails_generators → lib/generators/cms}/content_block/templates/_form.html.erb +0 -0
  189. data/{rails_generators → lib/generators/cms}/content_block/templates/content_block.rb +0 -0
  190. data/{rails_generators → lib/generators/cms}/content_block/templates/controller.rb +0 -0
  191. data/{rails_generators → lib/generators/cms}/content_block/templates/functional_test.erb +0 -0
  192. data/{rails_generators/content_block/templates/migration.rb → lib/generators/cms/content_block/templates/migration.erb} +1 -1
  193. data/{rails_generators → lib/generators/cms}/content_block/templates/render.html.erb +0 -0
  194. data/{rails_generators → lib/generators/cms}/content_block/templates/unit_test.erb +0 -0
  195. data/lib/generators/cms/install/USAGE +8 -0
  196. data/lib/generators/cms/install/install_generator.rb +20 -0
  197. data/{rails_generators → lib/generators/cms}/portlet/USAGE +3 -16
  198. data/lib/generators/cms/portlet/portlet_generator.rb +38 -0
  199. data/{rails_generators → lib/generators/cms}/portlet/templates/_form.html.erb +0 -0
  200. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet.rb +0 -0
  201. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet_helper.rb +0 -0
  202. data/{rails_generators → lib/generators/cms}/portlet/templates/render.html.erb +0 -0
  203. data/{rails_generators → lib/generators/cms}/portlet/templates/unit_test.erb +0 -0
  204. data/{rails_generators → lib/generators/cms}/template/USAGE +1 -1
  205. data/lib/generators/cms/template/template_generator.rb +18 -0
  206. data/lib/generators/cms/template/templates/template.erb +2 -0
  207. data/lib/generators/cms/upgrade_module/README.txt +3 -0
  208. data/lib/generators/cms/upgrade_module/templates/20100705083859_browsercms_3_3_0.rb +56 -0
  209. data/lib/generators/cms/upgrade_module/templates/README +1 -0
  210. data/lib/generators/cms/upgrade_module/templates/USAGE.erb +10 -0
  211. data/lib/generators/cms/upgrade_module/templates/build_gem.rake +5 -0
  212. data/lib/generators/cms/upgrade_module/templates/engine.erb +7 -0
  213. data/lib/generators/cms/upgrade_module/templates/gemspec.erb +25 -0
  214. data/lib/generators/cms/upgrade_module/templates/gitignore.erb +11 -0
  215. data/lib/generators/cms/upgrade_module/templates/install.erb +9 -0
  216. data/lib/generators/cms/upgrade_module/templates/module_file.erb +3 -0
  217. data/lib/generators/cms/upgrade_module/templates/routes.erb +7 -0
  218. data/lib/generators/cms/upgrade_module/upgrade_module_generator.rb +61 -0
  219. data/lib/tasks/build_gem.rake +1 -0
  220. data/lib/tasks/cms.rake +34 -6
  221. data/lib/tasks/cucumber.rake +53 -0
  222. data/lib/tasks/db.rake +2 -2
  223. data/public/javascripts/cms/application.js +144 -135
  224. data/public/javascripts/cms/sitemap.js +383 -357
  225. data/public/javascripts/jquery-ui.js +782 -591
  226. data/public/javascripts/jquery.cookie.js +38 -43
  227. data/public/javascripts/jquery.js +13 -8
  228. data/public/javascripts/jquery.taglist.js +7 -0
  229. data/public/stylesheets/cms/date_picker.css +49 -40
  230. data/rails/init.rb +2 -3
  231. data/templates/blank.rb +13 -7
  232. data/templates/demo.rb +15 -7
  233. data/templates/module.rb +12 -75
  234. metadata +87 -407
  235. data/app/helpers/cms/content_block_helper.rb +0 -27
  236. data/app/views/layouts/cms/thickbox.html.erb +0 -24
  237. data/db/migrate/20120117144039_browsercms315.rb +0 -94
  238. data/db/migrate/20121114172307_load_seeds.rb +0 -70
  239. data/lib/cms/addressable.rb +0 -83
  240. data/lib/cms/error_pages.rb +0 -8
  241. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  242. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  243. data/public/javascripts/jquery.contextMenu.js +0 -211
  244. data/public/javascripts/jquery.dimensions.js +0 -119
  245. data/public/javascripts/jquery.thickbox.js +0 -10
  246. data/public/stylesheets/cms/jquery.contextMenu.css +0 -61
  247. data/public/stylesheets/cms/thickbox.css +0 -163
  248. data/rails_generators/browser_cms/USAGE +0 -2
  249. data/rails_generators/browser_cms/browser_cms_generator.rb +0 -35
  250. data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +0 -63
  251. data/rails_generators/content_block/USAGE +0 -32
  252. data/rails_generators/content_block/content_block_generator.rb +0 -69
  253. data/rails_generators/portlet/portlet_generator.rb +0 -35
  254. data/rails_generators/template/template_generator.rb +0 -18
  255. data/rails_generators/template/templates/template.erb +0 -3
  256. data/test/custom_assertions.rb +0 -74
  257. data/test/factories.rb +0 -111
  258. data/test/factories/sitemap_factories.rb +0 -28
  259. data/test/fixtures/connectors.yml +0 -97
  260. data/test/fixtures/content_type_groups.yml +0 -13
  261. data/test/fixtures/content_types.yml +0 -50
  262. data/test/fixtures/dynamic_view_versions.yml +0 -26
  263. data/test/fixtures/dynamic_views.yml +0 -26
  264. data/test/fixtures/group_permissions.yml +0 -16
  265. data/test/fixtures/group_sections.yml +0 -31
  266. data/test/fixtures/group_type_permissions.yml +0 -11
  267. data/test/fixtures/group_types.yml +0 -25
  268. data/test/fixtures/groups.yml +0 -25
  269. data/test/fixtures/html_block_versions.yml +0 -67
  270. data/test/fixtures/html_blocks.yml +0 -63
  271. data/test/fixtures/page_versions.yml +0 -265
  272. data/test/fixtures/pages.yml +0 -85
  273. data/test/fixtures/permissions.yml +0 -28
  274. data/test/fixtures/section_nodes.yml +0 -46
  275. data/test/fixtures/sections.yml +0 -19
  276. data/test/fixtures/sites.yml +0 -9
  277. data/test/fixtures/user_group_memberships.yml +0 -11
  278. data/test/fixtures/users.yml +0 -15
  279. data/test/functional/cms/cache_controller_test.rb +0 -14
  280. data/test/functional/cms/categories_controller_test.rb +0 -25
  281. data/test/functional/cms/connectors_controller_test.rb +0 -60
  282. data/test/functional/cms/content_block_controller_test.rb +0 -120
  283. data/test/functional/cms/content_controller_test.rb +0 -439
  284. data/test/functional/cms/content_types_controller_test.rb +0 -18
  285. data/test/functional/cms/dashboard_controller_test.rb +0 -16
  286. data/test/functional/cms/dynamic_views_controller_test.rb +0 -52
  287. data/test/functional/cms/file_blocks_controller_test.rb +0 -52
  288. data/test/functional/cms/groups_controller_test.rb +0 -50
  289. data/test/functional/cms/home_controller_test.rb +0 -156
  290. data/test/functional/cms/html_blocks_controller_test.rb +0 -164
  291. data/test/functional/cms/image_blocks_controller_test.rb +0 -82
  292. data/test/functional/cms/links_controller_test.rb +0 -148
  293. data/test/functional/cms/pages_controller_test.rb +0 -227
  294. data/test/functional/cms/portlets_controller_test.rb +0 -67
  295. data/test/functional/cms/section_nodes_controller_test.rb +0 -112
  296. data/test/functional/cms/sections_controller_test.rb +0 -227
  297. data/test/functional/cms/sessions_controller_test.rb +0 -76
  298. data/test/functional/cms/toolbar_controller_test.rb +0 -64
  299. data/test/functional/cms/users_controller_test.rb +0 -231
  300. data/test/functional/tests/pretend_controller_test.rb +0 -57
  301. data/test/integration/cms/ckeditor_test.rb +0 -30
  302. data/test/integration/cms/password_management_test.rb +0 -56
  303. data/test/integration/login_test.rb +0 -14
  304. data/test/integration/sitemap_performance_test.rb +0 -26
  305. data/test/selenium-core/Blank.html +0 -7
  306. data/test/selenium-core/InjectedRemoteRunner.html +0 -8
  307. data/test/selenium-core/RemoteRunner.html +0 -110
  308. data/test/selenium-core/SeleniumLog.html +0 -109
  309. data/test/selenium-core/TestPrompt.html +0 -145
  310. data/test/selenium-core/TestRunner-splash.html +0 -55
  311. data/test/selenium-core/TestRunner.hta +0 -176
  312. data/test/selenium-core/TestRunner.html +0 -176
  313. data/test/selenium-core/domviewer/butmin.gif +0 -0
  314. data/test/selenium-core/domviewer/butplus.gif +0 -0
  315. data/test/selenium-core/domviewer/domviewer.css +0 -298
  316. data/test/selenium-core/domviewer/domviewer.html +0 -16
  317. data/test/selenium-core/domviewer/selenium-domviewer.js +0 -205
  318. data/test/selenium-core/icons/all.png +0 -0
  319. data/test/selenium-core/icons/continue.png +0 -0
  320. data/test/selenium-core/icons/continue_disabled.png +0 -0
  321. data/test/selenium-core/icons/pause.png +0 -0
  322. data/test/selenium-core/icons/pause_disabled.png +0 -0
  323. data/test/selenium-core/icons/selected.png +0 -0
  324. data/test/selenium-core/icons/step.png +0 -0
  325. data/test/selenium-core/icons/step_disabled.png +0 -0
  326. data/test/selenium-core/iedoc-core.xml +0 -1515
  327. data/test/selenium-core/iedoc.xml +0 -1469
  328. data/test/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  329. data/test/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  330. data/test/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  331. data/test/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  332. data/test/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  333. data/test/selenium-core/lib/prototype.js +0 -2006
  334. data/test/selenium-core/lib/scriptaculous/builder.js +0 -101
  335. data/test/selenium-core/lib/scriptaculous/controls.js +0 -815
  336. data/test/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  337. data/test/selenium-core/lib/scriptaculous/effects.js +0 -958
  338. data/test/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  339. data/test/selenium-core/lib/scriptaculous/slider.js +0 -283
  340. data/test/selenium-core/lib/scriptaculous/unittest.js +0 -383
  341. data/test/selenium-core/scripts/find_matching_child.js +0 -69
  342. data/test/selenium-core/scripts/htmlutils.js +0 -894
  343. data/test/selenium-core/scripts/injection.html +0 -72
  344. data/test/selenium-core/scripts/js2html.js +0 -70
  345. data/test/selenium-core/scripts/narcissus-defs.js +0 -175
  346. data/test/selenium-core/scripts/narcissus-exec.js +0 -1054
  347. data/test/selenium-core/scripts/narcissus-parse.js +0 -1003
  348. data/test/selenium-core/scripts/se2html.js +0 -63
  349. data/test/selenium-core/scripts/selenium-api.js +0 -2409
  350. data/test/selenium-core/scripts/selenium-browserbot.js +0 -2203
  351. data/test/selenium-core/scripts/selenium-browserdetect.js +0 -150
  352. data/test/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  353. data/test/selenium-core/scripts/selenium-executionloop.js +0 -175
  354. data/test/selenium-core/scripts/selenium-logging.js +0 -147
  355. data/test/selenium-core/scripts/selenium-remoterunner.js +0 -571
  356. data/test/selenium-core/scripts/selenium-testrunner.js +0 -1333
  357. data/test/selenium-core/scripts/selenium-version.js +0 -5
  358. data/test/selenium-core/scripts/user-extensions.js +0 -3
  359. data/test/selenium-core/scripts/user-extensions.js.sample +0 -75
  360. data/test/selenium-core/scripts/xmlextras.js +0 -153
  361. data/test/selenium-core/selenium-logo.png +0 -0
  362. data/test/selenium-core/selenium-test.css +0 -43
  363. data/test/selenium-core/selenium.css +0 -299
  364. data/test/selenium-core/xpath/dom.js +0 -428
  365. data/test/selenium-core/xpath/misc.js +0 -252
  366. data/test/selenium-core/xpath/xpath.js +0 -2223
  367. data/test/selenium/_login_as_cmsadmin.rsel +0 -4
  368. data/test/selenium/dashboard.rsel +0 -5
  369. data/test/selenium/html_blocks.rsel +0 -4
  370. data/test/selenium/login/failed_login.rsel +0 -8
  371. data/test/selenium/login/successful_login.rsel +0 -9
  372. data/test/selenium/page_templates.rsel +0 -12
  373. data/test/selenium/pages/edit_properties.rsel +0 -5
  374. data/test/selenium/site/view_home_page.rsel +0 -4
  375. data/test/selenium/sitemap/move_page.rsel +0 -9
  376. data/test/selenium/sitemap/open_section.rsel +0 -6
  377. data/test/selenium/sitemap/select_page.rsel +0 -12
  378. data/test/selenium/sitemap/select_section.rsel +0 -17
  379. data/test/test_helper.rb +0 -193
  380. data/test/test_logging.rb +0 -67
  381. data/test/unit/behaviors/attaching_test.rb +0 -357
  382. data/test/unit/behaviors/connectable_test.rb +0 -29
  383. data/test/unit/behaviors/dynamic_attributes_test.rb +0 -38
  384. data/test/unit/behaviors/publishable_test.rb +0 -84
  385. data/test/unit/behaviors/searching_test.rb +0 -102
  386. data/test/unit/behaviors/taggable_test.rb +0 -109
  387. data/test/unit/behaviors/versioning_test.rb +0 -36
  388. data/test/unit/extensions/active_record/base_test.rb +0 -10
  389. data/test/unit/extensions/hash_test.rb +0 -17
  390. data/test/unit/extensions/integer_test.rb +0 -10
  391. data/test/unit/helpers/application_helper_test.rb +0 -77
  392. data/test/unit/helpers/form_builder_test.rb +0 -36
  393. data/test/unit/helpers/menu_helper_test.rb +0 -242
  394. data/test/unit/helpers/page_helper_test.rb +0 -67
  395. data/test/unit/helpers/path_helper_test.rb +0 -57
  396. data/test/unit/lib/acts_as_content_page_test.rb +0 -72
  397. data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
  398. data/test/unit/lib/cms/sitemap_test.rb +0 -206
  399. data/test/unit/lib/cms_domain_support_test.rb +0 -43
  400. data/test/unit/lib/command_line_test.rb +0 -70
  401. data/test/unit/lib/content_block_test.rb +0 -203
  402. data/test/unit/lib/content_rendering_support_test.rb +0 -40
  403. data/test/unit/lib/generators_test.rb +0 -40
  404. data/test/unit/lib/routes_test.rb +0 -57
  405. data/test/unit/models/attachment_test.rb +0 -116
  406. data/test/unit/models/category_test.rb +0 -40
  407. data/test/unit/models/category_type_test.rb +0 -8
  408. data/test/unit/models/connector_test.rb +0 -152
  409. data/test/unit/models/content_type_test.rb +0 -56
  410. data/test/unit/models/email_page_portlet_test.rb +0 -14
  411. data/test/unit/models/file_block_test.rb +0 -230
  412. data/test/unit/models/group_test.rb +0 -13
  413. data/test/unit/models/html_block_test.rb +0 -102
  414. data/test/unit/models/link_test.rb +0 -52
  415. data/test/unit/models/page_partial_test.rb +0 -29
  416. data/test/unit/models/page_route_test.rb +0 -29
  417. data/test/unit/models/page_template_test.rb +0 -40
  418. data/test/unit/models/page_test.rb +0 -792
  419. data/test/unit/models/permission_test.rb +0 -10
  420. data/test/unit/models/portlet_test.rb +0 -69
  421. data/test/unit/models/sections_test.rb +0 -264
  422. data/test/unit/models/site_test.rb +0 -50
  423. data/test/unit/models/task_test.rb +0 -141
  424. data/test/unit/models/user_test.rb +0 -352
  425. data/test/unit/schema_statements_test.rb +0 -41
@@ -1,428 +0,0 @@
1
- // Copyright 2005 Google Inc.
2
- // All Rights Reserved
3
- //
4
- // An XML parse and a minimal DOM implementation that just supportes
5
- // the subset of the W3C DOM that is used in the XSLT implementation.
6
- //
7
- // References:
8
- //
9
- // [DOM] W3C DOM Level 3 Core Specification
10
- // <http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/>.
11
- //
12
- //
13
- // Author: Steffen Meschkat <mesch@google.com>
14
-
15
- // NOTE: The split() method in IE omits empty result strings. This is
16
- // utterly annoying. So we don't use it here.
17
-
18
- // Resolve entities in XML text fragments. According to the DOM
19
- // specification, the DOM is supposed to resolve entity references at
20
- // the API level. I.e. no entity references are passed through the
21
- // API. See "Entities and the DOM core", p.12, DOM 2 Core
22
- // Spec. However, different browsers actually pass very different
23
- // values at the API.
24
- //
25
- function xmlResolveEntities(s) {
26
-
27
- var parts = stringSplit(s, '&');
28
-
29
- var ret = parts[0];
30
- for (var i = 1; i < parts.length; ++i) {
31
- var rp = stringSplit(parts[i], ';');
32
- if (rp.length == 1) {
33
- // no entity reference: just a & but no ;
34
- ret += parts[i];
35
- continue;
36
- }
37
-
38
- var ch;
39
- switch (rp[0]) {
40
- case 'lt':
41
- ch = '<';
42
- break;
43
- case 'gt':
44
- ch = '>';
45
- break;
46
- case 'amp':
47
- ch = '&';
48
- break;
49
- case 'quot':
50
- ch = '"';
51
- break;
52
- case 'apos':
53
- ch = '\'';
54
- break;
55
- case 'nbsp':
56
- ch = String.fromCharCode(160);
57
- break;
58
- default:
59
- // Cool trick: let the DOM do the entity decoding. We assign
60
- // the entity text through non-W3C DOM properties and read it
61
- // through the W3C DOM. W3C DOM access is specified to resolve
62
- // entities.
63
- var span = window.document.createElement('span');
64
- span.innerHTML = '&' + rp[0] + '; ';
65
- ch = span.childNodes[0].nodeValue.charAt(0);
66
- }
67
- ret += ch + rp[1];
68
- }
69
-
70
- return ret;
71
- }
72
-
73
-
74
- // Parses the given XML string with our custom, JavaScript XML parser. Written
75
- // by Steffen Meschkat (mesch@google.com).
76
- function xmlParse(xml) {
77
- Timer.start('xmlparse');
78
- var regex_empty = /\/$/;
79
-
80
- // See also <http://www.w3.org/TR/REC-xml/#sec-common-syn> for
81
- // allowed chars in a tag and attribute name. TODO(mesch): the
82
- // following is still not completely correct.
83
-
84
- var regex_tagname = /^([\w:-]*)/;
85
- var regex_attribute = /([\w:-]+)\s?=\s?('([^\']*)'|"([^\"]*)")/g;
86
-
87
- var xmldoc = new XDocument();
88
- var root = xmldoc;
89
-
90
- // For the record: in Safari, we would create native DOM nodes, but
91
- // in Opera that is not possible, because the DOM only allows HTML
92
- // element nodes to be created, so we have to do our own DOM nodes.
93
-
94
- // xmldoc = document.implementation.createDocument('','',null);
95
- // root = xmldoc; // .createDocumentFragment();
96
- // NOTE(mesch): using the DocumentFragment instead of the Document
97
- // crashes my Safari 1.2.4 (v125.12).
98
- var stack = [];
99
-
100
- var parent = root;
101
- stack.push(parent);
102
-
103
- var x = stringSplit(xml, '<');
104
- for (var i = 1; i < x.length; ++i) {
105
- var xx = stringSplit(x[i], '>');
106
- var tag = xx[0];
107
- var text = xmlResolveEntities(xx[1] || '');
108
-
109
- if (tag.charAt(0) == '/') {
110
- stack.pop();
111
- parent = stack[stack.length-1];
112
-
113
- } else if (tag.charAt(0) == '?') {
114
- // Ignore XML declaration and processing instructions
115
- } else if (tag.charAt(0) == '!') {
116
- // Ignore notation and comments
117
- } else {
118
- var empty = tag.match(regex_empty);
119
- var tagname = regex_tagname.exec(tag)[1];
120
- var node = xmldoc.createElement(tagname);
121
-
122
- var att;
123
- while (att = regex_attribute.exec(tag)) {
124
- var val = xmlResolveEntities(att[3] || att[4] || '');
125
- node.setAttribute(att[1], val);
126
- }
127
-
128
- if (empty) {
129
- parent.appendChild(node);
130
- } else {
131
- parent.appendChild(node);
132
- parent = node;
133
- stack.push(node);
134
- }
135
- }
136
-
137
- if (text && parent != root) {
138
- parent.appendChild(xmldoc.createTextNode(text));
139
- }
140
- }
141
-
142
- Timer.end('xmlparse');
143
- return root;
144
- }
145
-
146
-
147
- // Our W3C DOM Node implementation. Note we call it XNode because we
148
- // can't define the identifier Node. We do this mostly for Opera,
149
- // where we can't reuse the HTML DOM for parsing our own XML, and for
150
- // Safari, where it is too expensive to have the template processor
151
- // operate on native DOM nodes.
152
- function XNode(type, name, value, owner) {
153
- this.attributes = [];
154
- this.childNodes = [];
155
-
156
- XNode.init.call(this, type, name, value, owner);
157
- }
158
-
159
- // Don't call as method, use apply() or call().
160
- XNode.init = function(type, name, value, owner) {
161
- this.nodeType = type - 0;
162
- this.nodeName = '' + name;
163
- this.nodeValue = '' + value;
164
- this.ownerDocument = owner;
165
-
166
- this.firstChild = null;
167
- this.lastChild = null;
168
- this.nextSibling = null;
169
- this.previousSibling = null;
170
- this.parentNode = null;
171
- }
172
-
173
- XNode.unused_ = [];
174
-
175
- XNode.recycle = function(node) {
176
- if (!node) {
177
- return;
178
- }
179
-
180
- if (node.constructor == XDocument) {
181
- XNode.recycle(node.documentElement);
182
- return;
183
- }
184
-
185
- if (node.constructor != this) {
186
- return;
187
- }
188
-
189
- XNode.unused_.push(node);
190
- for (var a = 0; a < node.attributes.length; ++a) {
191
- XNode.recycle(node.attributes[a]);
192
- }
193
- for (var c = 0; c < node.childNodes.length; ++c) {
194
- XNode.recycle(node.childNodes[c]);
195
- }
196
- node.attributes.length = 0;
197
- node.childNodes.length = 0;
198
- XNode.init.call(node, 0, '', '', null);
199
- }
200
-
201
- XNode.create = function(type, name, value, owner) {
202
- if (XNode.unused_.length > 0) {
203
- var node = XNode.unused_.pop();
204
- XNode.init.call(node, type, name, value, owner);
205
- return node;
206
- } else {
207
- return new XNode(type, name, value, owner);
208
- }
209
- }
210
-
211
- XNode.prototype.appendChild = function(node) {
212
- // firstChild
213
- if (this.childNodes.length == 0) {
214
- this.firstChild = node;
215
- }
216
-
217
- // previousSibling
218
- node.previousSibling = this.lastChild;
219
-
220
- // nextSibling
221
- node.nextSibling = null;
222
- if (this.lastChild) {
223
- this.lastChild.nextSibling = node;
224
- }
225
-
226
- // parentNode
227
- node.parentNode = this;
228
-
229
- // lastChild
230
- this.lastChild = node;
231
-
232
- // childNodes
233
- this.childNodes.push(node);
234
- }
235
-
236
-
237
- XNode.prototype.replaceChild = function(newNode, oldNode) {
238
- if (oldNode == newNode) {
239
- return;
240
- }
241
-
242
- for (var i = 0; i < this.childNodes.length; ++i) {
243
- if (this.childNodes[i] == oldNode) {
244
- this.childNodes[i] = newNode;
245
-
246
- var p = oldNode.parentNode;
247
- oldNode.parentNode = null;
248
- newNode.parentNode = p;
249
-
250
- p = oldNode.previousSibling;
251
- oldNode.previousSibling = null;
252
- newNode.previousSibling = p;
253
- if (newNode.previousSibling) {
254
- newNode.previousSibling.nextSibling = newNode;
255
- }
256
-
257
- p = oldNode.nextSibling;
258
- oldNode.nextSibling = null;
259
- newNode.nextSibling = p;
260
- if (newNode.nextSibling) {
261
- newNode.nextSibling.previousSibling = newNode;
262
- }
263
-
264
- if (this.firstChild == oldNode) {
265
- this.firstChild = newNode;
266
- }
267
-
268
- if (this.lastChild == oldNode) {
269
- this.lastChild = newNode;
270
- }
271
-
272
- break;
273
- }
274
- }
275
- }
276
-
277
- XNode.prototype.insertBefore = function(newNode, oldNode) {
278
- if (oldNode == newNode) {
279
- return;
280
- }
281
-
282
- if (oldNode.parentNode != this) {
283
- return;
284
- }
285
-
286
- if (newNode.parentNode) {
287
- newNode.parentNode.removeChild(newNode);
288
- }
289
-
290
- var newChildren = [];
291
- for (var i = 0; i < this.childNodes.length; ++i) {
292
- var c = this.childNodes[i];
293
- if (c == oldNode) {
294
- newChildren.push(newNode);
295
-
296
- newNode.parentNode = this;
297
-
298
- newNode.previousSibling = oldNode.previousSibling;
299
- oldNode.previousSibling = newNode;
300
- if (newNode.previousSibling) {
301
- newNode.previousSibling.nextSibling = newNode;
302
- }
303
-
304
- newNode.nextSibling = oldNode;
305
-
306
- if (this.firstChild == oldNode) {
307
- this.firstChild = newNode;
308
- }
309
- }
310
- newChildren.push(c);
311
- }
312
- this.childNodes = newChildren;
313
- }
314
-
315
- XNode.prototype.removeChild = function(node) {
316
- var newChildren = [];
317
- for (var i = 0; i < this.childNodes.length; ++i) {
318
- var c = this.childNodes[i];
319
- if (c != node) {
320
- newChildren.push(c);
321
- } else {
322
- if (c.previousSibling) {
323
- c.previousSibling.nextSibling = c.nextSibling;
324
- }
325
- if (c.nextSibling) {
326
- c.nextSibling.previousSibling = c.previousSibling;
327
- }
328
- if (this.firstChild == c) {
329
- this.firstChild = c.nextSibling;
330
- }
331
- if (this.lastChild == c) {
332
- this.lastChild = c.previousSibling;
333
- }
334
- }
335
- }
336
- this.childNodes = newChildren;
337
- }
338
-
339
-
340
- XNode.prototype.hasAttributes = function() {
341
- return this.attributes.length > 0;
342
- }
343
-
344
-
345
- XNode.prototype.setAttribute = function(name, value) {
346
- for (var i = 0; i < this.attributes.length; ++i) {
347
- if (this.attributes[i].nodeName == name) {
348
- this.attributes[i].nodeValue = '' + value;
349
- return;
350
- }
351
- }
352
- this.attributes.push(new XNode(DOM_ATTRIBUTE_NODE, name, value));
353
- }
354
-
355
-
356
- XNode.prototype.getAttribute = function(name) {
357
- for (var i = 0; i < this.attributes.length; ++i) {
358
- if (this.attributes[i].nodeName == name) {
359
- return this.attributes[i].nodeValue;
360
- }
361
- }
362
- return null;
363
- }
364
-
365
- XNode.prototype.removeAttribute = function(name) {
366
- var a = [];
367
- for (var i = 0; i < this.attributes.length; ++i) {
368
- if (this.attributes[i].nodeName != name) {
369
- a.push(this.attributes[i]);
370
- }
371
- }
372
- this.attributes = a;
373
- }
374
-
375
-
376
- function XDocument() {
377
- XNode.call(this, DOM_DOCUMENT_NODE, '#document', null, this);
378
- this.documentElement = null;
379
- }
380
-
381
- XDocument.prototype = new XNode(DOM_DOCUMENT_NODE, '#document');
382
-
383
- XDocument.prototype.clear = function() {
384
- XNode.recycle(this.documentElement);
385
- this.documentElement = null;
386
- }
387
-
388
- XDocument.prototype.appendChild = function(node) {
389
- XNode.prototype.appendChild.call(this, node);
390
- this.documentElement = this.childNodes[0];
391
- }
392
-
393
- XDocument.prototype.createElement = function(name) {
394
- return XNode.create(DOM_ELEMENT_NODE, name, null, this);
395
- }
396
-
397
- XDocument.prototype.createDocumentFragment = function() {
398
- return XNode.create(DOM_DOCUMENT_FRAGMENT_NODE, '#document-fragment',
399
- null, this);
400
- }
401
-
402
- XDocument.prototype.createTextNode = function(value) {
403
- return XNode.create(DOM_TEXT_NODE, '#text', value, this);
404
- }
405
-
406
- XDocument.prototype.createAttribute = function(name) {
407
- return XNode.create(DOM_ATTRIBUTE_NODE, name, null, this);
408
- }
409
-
410
- XDocument.prototype.createComment = function(data) {
411
- return XNode.create(DOM_COMMENT_NODE, '#comment', data, this);
412
- }
413
-
414
- XNode.prototype.getElementsByTagName = function(name, list) {
415
- if (!list) {
416
- list = [];
417
- }
418
-
419
- if (this.nodeName == name) {
420
- list.push(this);
421
- }
422
-
423
- for (var i = 0; i < this.childNodes.length; ++i) {
424
- this.childNodes[i].getElementsByTagName(name, list);
425
- }
426
-
427
- return list;
428
- }
@@ -1,252 +0,0 @@
1
- // Copyright 2005 Google Inc.
2
- // All Rights Reserved
3
- //
4
- // Miscellania that support the ajaxslt implementation.
5
- //
6
- // Author: Steffen Meschkat <mesch@google.com>
7
- //
8
-
9
- function el(i) {
10
- return document.getElementById(i);
11
- }
12
-
13
- function px(x) {
14
- return x + 'px';
15
- }
16
-
17
- // Split a string s at all occurrences of character c. This is like
18
- // the split() method of the string object, but IE omits empty
19
- // strings, which violates the invariant (s.split(x).join(x) == s).
20
- function stringSplit(s, c) {
21
- var a = s.indexOf(c);
22
- if (a == -1) {
23
- return [ s ];
24
- }
25
-
26
- var parts = [];
27
- parts.push(s.substr(0,a));
28
- while (a != -1) {
29
- var a1 = s.indexOf(c, a + 1);
30
- if (a1 != -1) {
31
- parts.push(s.substr(a + 1, a1 - a - 1));
32
- } else {
33
- parts.push(s.substr(a + 1));
34
- }
35
- a = a1;
36
- }
37
-
38
- return parts;
39
- }
40
-
41
- // Returns the text value if a node; for nodes without children this
42
- // is the nodeValue, for nodes with children this is the concatenation
43
- // of the value of all children.
44
- function xmlValue(node) {
45
- if (!node) {
46
- return '';
47
- }
48
-
49
- var ret = '';
50
- if (node.nodeType == DOM_TEXT_NODE ||
51
- node.nodeType == DOM_CDATA_SECTION_NODE ||
52
- node.nodeType == DOM_ATTRIBUTE_NODE) {
53
- ret += node.nodeValue;
54
-
55
- } else if (node.nodeType == DOM_ELEMENT_NODE ||
56
- node.nodeType == DOM_DOCUMENT_NODE ||
57
- node.nodeType == DOM_DOCUMENT_FRAGMENT_NODE) {
58
- for (var i = 0; i < node.childNodes.length; ++i) {
59
- ret += arguments.callee(node.childNodes[i]);
60
- }
61
- }
62
- return ret;
63
- }
64
-
65
- // Returns the representation of a node as XML text.
66
- function xmlText(node) {
67
- var ret = '';
68
- if (node.nodeType == DOM_TEXT_NODE) {
69
- ret += xmlEscapeText(node.nodeValue);
70
-
71
- } else if (node.nodeType == DOM_ELEMENT_NODE) {
72
- ret += '<' + node.nodeName;
73
- for (var i = 0; i < node.attributes.length; ++i) {
74
- var a = node.attributes[i];
75
- if (a && a.nodeName && a.nodeValue) {
76
- ret += ' ' + a.nodeName;
77
- ret += '="' + xmlEscapeAttr(a.nodeValue) + '"';
78
- }
79
- }
80
-
81
- if (node.childNodes.length == 0) {
82
- ret += '/>';
83
-
84
- } else {
85
- ret += '>';
86
- for (var i = 0; i < node.childNodes.length; ++i) {
87
- ret += arguments.callee(node.childNodes[i]);
88
- }
89
- ret += '</' + node.nodeName + '>';
90
- }
91
-
92
- } else if (node.nodeType == DOM_DOCUMENT_NODE ||
93
- node.nodeType == DOM_DOCUMENT_FRAGMENT_NODE) {
94
- for (var i = 0; i < node.childNodes.length; ++i) {
95
- ret += arguments.callee(node.childNodes[i]);
96
- }
97
- }
98
-
99
- return ret;
100
- }
101
-
102
- // Applies the given function to each element of the array.
103
- function mapExec(array, func) {
104
- for (var i = 0; i < array.length; ++i) {
105
- func(array[i]);
106
- }
107
- }
108
-
109
- // Returns an array that contains the return value of the given
110
- // function applied to every element of the input array.
111
- function mapExpr(array, func) {
112
- var ret = [];
113
- for (var i = 0; i < array.length; ++i) {
114
- ret.push(func(array[i]));
115
- }
116
- return ret;
117
- };
118
-
119
- // Reverses the given array in place.
120
- function reverseInplace(array) {
121
- for (var i = 0; i < array.length / 2; ++i) {
122
- var h = array[i];
123
- var ii = array.length - i - 1;
124
- array[i] = array[ii];
125
- array[ii] = h;
126
- }
127
- }
128
-
129
- // Shallow-copies an array.
130
- function copyArray(dst, src) {
131
- for (var i = 0; i < src.length; ++i) {
132
- dst.push(src[i]);
133
- }
134
- }
135
-
136
- function assert(b) {
137
- if (!b) {
138
- throw 'assertion failed';
139
- }
140
- }
141
-
142
- // Based on
143
- // <http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247>
144
- var DOM_ELEMENT_NODE = 1;
145
- var DOM_ATTRIBUTE_NODE = 2;
146
- var DOM_TEXT_NODE = 3;
147
- var DOM_CDATA_SECTION_NODE = 4;
148
- var DOM_ENTITY_REFERENCE_NODE = 5;
149
- var DOM_ENTITY_NODE = 6;
150
- var DOM_PROCESSING_INSTRUCTION_NODE = 7;
151
- var DOM_COMMENT_NODE = 8;
152
- var DOM_DOCUMENT_NODE = 9;
153
- var DOM_DOCUMENT_TYPE_NODE = 10;
154
- var DOM_DOCUMENT_FRAGMENT_NODE = 11;
155
- var DOM_NOTATION_NODE = 12;
156
-
157
-
158
- var xpathdebug = false; // trace xpath parsing
159
- var xsltdebug = false; // trace xslt processing
160
-
161
-
162
- // Escape XML special markup chracters: tag delimiter < > and entity
163
- // reference start delimiter &. The escaped string can be used in XML
164
- // text portions (i.e. between tags).
165
- function xmlEscapeText(s) {
166
- return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
167
- }
168
-
169
- // Escape XML special markup characters: tag delimiter < > entity
170
- // reference start delimiter & and quotes ". The escaped string can be
171
- // used in double quoted XML attribute value portions (i.e. in
172
- // attributes within start tags).
173
- function xmlEscapeAttr(s) {
174
- return xmlEscapeText(s).replace(/\"/g, '&quot;');
175
- }
176
-
177
- // Escape markup in XML text, but don't touch entity references. The
178
- // escaped string can be used as XML text (i.e. between tags).
179
- function xmlEscapeTags(s) {
180
- return s.replace(/</g, '&lt;').replace(/>/g, '&gt;');
181
- }
182
-
183
- // An implementation of the debug log.
184
-
185
- var logging__ = false;
186
-
187
- function Log() {};
188
-
189
- Log.lines = [];
190
-
191
- Log.write = function(s) {
192
- LOG.debug("xpath logging: " + s);
193
- };
194
-
195
- // Writes the given XML with every tag on a new line.
196
- Log.writeXML = function(xml) {
197
- if (logging__) {
198
- var s0 = xml.replace(/</g, '\n<');
199
- var s1 = xmlEscapeText(s0);
200
- var s2 = s1.replace(/\s*\n(\s|\n)*/g, '<br/>');
201
- this.lines.push(s2);
202
- this.show();
203
- }
204
- }
205
-
206
- // Writes without any escaping
207
- Log.writeRaw = function(s) {
208
- if (logging__) {
209
- this.lines.push(s);
210
- this.show();
211
- }
212
- }
213
-
214
- Log.clear = function() {
215
- if (logging__) {
216
- var l = this.div();
217
- l.innerHTML = '';
218
- this.lines = [];
219
- }
220
- }
221
-
222
- Log.show = function() {
223
- var l = this.div();
224
- l.innerHTML += this.lines.join('<br/>') + '<br/>';
225
- this.lines = [];
226
- l.scrollTop = l.scrollHeight;
227
- }
228
-
229
- Log.div = function() {
230
- var l = document.getElementById('log');
231
- if (!l) {
232
- l = document.createElement('div');
233
- l.id = 'log';
234
- l.style.position = 'absolute';
235
- l.style.right = '5px';
236
- l.style.top = '5px';
237
- l.style.width = '250px';
238
- l.style.height = '150px';
239
- l.style.overflow = 'auto';
240
- l.style.backgroundColor = '#f0f0f0';
241
- l.style.border = '1px solid gray';
242
- l.style.fontSize = '10px';
243
- l.style.padding = '5px';
244
- document.body.appendChild(l);
245
- }
246
- return l;
247
- }
248
-
249
-
250
- function Timer() {}
251
- Timer.start = function() {}
252
- Timer.end = function() {}