aleph_analytics 0.0.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (527) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +0 -0
  3. data/Gemfile +70 -0
  4. data/Gemfile.lock +489 -0
  5. data/LICENSE +21 -0
  6. data/Procfile +2 -0
  7. data/README.md +1 -0
  8. data/ROADMAP.md +7 -0
  9. data/Rakefile +9 -0
  10. data/app/assets/fonts/octicons-local.ttf +0 -0
  11. data/app/assets/fonts/octicons.eot +0 -0
  12. data/app/assets/fonts/octicons.svg +183 -0
  13. data/app/assets/fonts/octicons.ttf +0 -0
  14. data/app/assets/fonts/octicons.woff +0 -0
  15. data/app/assets/javascripts/angular/aleph.js.es6 +90 -0
  16. data/app/assets/javascripts/angular/config/schema_completer_config.js.es6 +71 -0
  17. data/app/assets/javascripts/angular/controllers/alerts/alert_index_controller.js.es6 +16 -0
  18. data/app/assets/javascripts/angular/controllers/alerts/alert_show_controller.js.es6 +99 -0
  19. data/app/assets/javascripts/angular/controllers/controllers.js.es6 +65 -0
  20. data/app/assets/javascripts/angular/controllers/query/query_index_controller.js.es6 +80 -0
  21. data/app/assets/javascripts/angular/controllers/query/query_repl_controller.js.es6 +147 -0
  22. data/app/assets/javascripts/angular/controllers/query/query_show_controller.js.es6 +43 -0
  23. data/app/assets/javascripts/angular/controllers/schema/schema_index_controller.js.es6 +61 -0
  24. data/app/assets/javascripts/angular/controllers/snippet/snippet_index_controller.js.es6 +80 -0
  25. data/app/assets/javascripts/angular/directives/directives.js.es6 +30 -0
  26. data/app/assets/javascripts/angular/directives/query/query_details_directive.js.es6 +87 -0
  27. data/app/assets/javascripts/angular/directives/query/query_version_sidebar_directive.js.es6 +65 -0
  28. data/app/assets/javascripts/angular/directives/result/result_directive.js.es6 +59 -0
  29. data/app/assets/javascripts/angular/directives/result/results_directive.js.es6 +30 -0
  30. data/app/assets/javascripts/angular/directives/visualization_directive.js.es6 +101 -0
  31. data/app/assets/javascripts/angular/filters/filters.js.es6 +27 -0
  32. data/app/assets/javascripts/angular/services/alert/alert.js.es6 +51 -0
  33. data/app/assets/javascripts/angular/services/alert/alert_resource.js.es6 +10 -0
  34. data/app/assets/javascripts/angular/services/lib/ace_completers.js.es6 +29 -0
  35. data/app/assets/javascripts/angular/services/lib/ace_sql_parse.js.es6 +156 -0
  36. data/app/assets/javascripts/angular/services/lib/action_handler.js.es6 +73 -0
  37. data/app/assets/javascripts/angular/services/lib/alert_flash.js.es6 +30 -0
  38. data/app/assets/javascripts/angular/services/lib/default_ace_configurator_service.js.es6 +74 -0
  39. data/app/assets/javascripts/angular/services/lib/github_url_service.js.es6 +53 -0
  40. data/app/assets/javascripts/angular/services/lib/keyword_completer.js.es6 +36 -0
  41. data/app/assets/javascripts/angular/services/lib/local_resource.js.es6 +20 -0
  42. data/app/assets/javascripts/angular/services/lib/lock_service.js.es6 +48 -0
  43. data/app/assets/javascripts/angular/services/lib/locking_poll_service.js.es6 +42 -0
  44. data/app/assets/javascripts/angular/services/lib/matcher_runner.js.es6 +65 -0
  45. data/app/assets/javascripts/angular/services/lib/navigation_guard.js.es6 +45 -0
  46. data/app/assets/javascripts/angular/services/lib/open_repl_service.js.es6 +56 -0
  47. data/app/assets/javascripts/angular/services/lib/page_title_manager.js.es6 +38 -0
  48. data/app/assets/javascripts/angular/services/lib/pagination.js.es6 +114 -0
  49. data/app/assets/javascripts/angular/services/lib/pagination_components.js.es6 +91 -0
  50. data/app/assets/javascripts/angular/services/lib/parameter_methods.js.es6 +35 -0
  51. data/app/assets/javascripts/angular/services/lib/role_model.js.es6 +21 -0
  52. data/app/assets/javascripts/angular/services/lib/schema_completer.js.es6 +56 -0
  53. data/app/assets/javascripts/angular/services/lib/selection_tag_input.js.es6 +42 -0
  54. data/app/assets/javascripts/angular/services/lib/server_configurations.js.es6 +15 -0
  55. data/app/assets/javascripts/angular/services/lib/spinner_state.js.es6 +45 -0
  56. data/app/assets/javascripts/angular/services/lib/tag_resource.js.es6 +14 -0
  57. data/app/assets/javascripts/angular/services/model/collection_dirty_awareness.js.es6 +33 -0
  58. data/app/assets/javascripts/angular/services/model/collection_model_base.js.es6 +75 -0
  59. data/app/assets/javascripts/angular/services/model/dirty_aware_collection_model.js.es6 +31 -0
  60. data/app/assets/javascripts/angular/services/model/dirty_aware_model.js.es6 +50 -0
  61. data/app/assets/javascripts/angular/services/model/model_base.js.es6 +80 -0
  62. data/app/assets/javascripts/angular/services/model/model_state.js.es6 +51 -0
  63. data/app/assets/javascripts/angular/services/model/models.js.es6 +15 -0
  64. data/app/assets/javascripts/angular/services/model/unpersisted_model.js.es6 +20 -0
  65. data/app/assets/javascripts/angular/services/model_generation/model_factory.js.es6 +28 -0
  66. data/app/assets/javascripts/angular/services/model_generation/model_generation.js.es6 +13 -0
  67. data/app/assets/javascripts/angular/services/model_generation/model_manager.js.es6 +86 -0
  68. data/app/assets/javascripts/angular/services/model_generation/resource_factory.js.es6 +38 -0
  69. data/app/assets/javascripts/angular/services/model_generation/standard_collection_model.js.es6 +25 -0
  70. data/app/assets/javascripts/angular/services/model_generation/standard_model.js.es6 +38 -0
  71. data/app/assets/javascripts/angular/services/query/query.js.es6 +55 -0
  72. data/app/assets/javascripts/angular/services/query/query_handler.js.es6 +40 -0
  73. data/app/assets/javascripts/angular/services/query/query_loader.js.es6 +54 -0
  74. data/app/assets/javascripts/angular/services/query/query_request_transformers.js.es6 +26 -0
  75. data/app/assets/javascripts/angular/services/query/query_resource.js.es6 +21 -0
  76. data/app/assets/javascripts/angular/services/query/query_tab.js.es6 +63 -0
  77. data/app/assets/javascripts/angular/services/query/query_versions.js.es6 +21 -0
  78. data/app/assets/javascripts/angular/services/result/result.js.es6 +26 -0
  79. data/app/assets/javascripts/angular/services/result/result_poller.js.es6 +30 -0
  80. data/app/assets/javascripts/angular/services/result/result_runner.js.es6 +48 -0
  81. data/app/assets/javascripts/angular/services/result/results.js.es6 +10 -0
  82. data/app/assets/javascripts/angular/services/schema/schema_column.js.es6 +93 -0
  83. data/app/assets/javascripts/angular/services/schema/schema_column_resource.js.es6 +12 -0
  84. data/app/assets/javascripts/angular/services/schema/schema_columns.js.es6 +57 -0
  85. data/app/assets/javascripts/angular/services/schema/schema_comment_resource.js.es6 +12 -0
  86. data/app/assets/javascripts/angular/services/services.js.es6 +140 -0
  87. data/app/assets/javascripts/angular/services/snippet/ace_snippet_manager.js.es6 +44 -0
  88. data/app/assets/javascripts/angular/services/visualization/source_renderer.js.es6 +70 -0
  89. data/app/assets/javascripts/angular/services/visualization/visualization.js.es6 +47 -0
  90. data/app/assets/javascripts/angular/services/visualization/visualization_service.js.es6 +67 -0
  91. data/app/assets/javascripts/angular/services/visualization/visualizations.js.es6 +11 -0
  92. data/app/assets/javascripts/application.js +22 -0
  93. data/app/assets/javascripts/lib/key_binding.js +24 -0
  94. data/app/assets/javascripts/lib/serialized_storage.js +11 -0
  95. data/app/assets/javascripts/lib/underscore_contrib/array_builders.js +190 -0
  96. data/app/assets/javascripts/lib/underscore_contrib/function_predicates.js +95 -0
  97. data/app/assets/javascripts/lib/underscore_contrib/object_builders.js +111 -0
  98. data/app/assets/javascripts/lib/underscore_contrib/object_selectors.js +112 -0
  99. data/app/assets/javascripts/lib/underscore_contrib/util_existential.js +15 -0
  100. data/app/assets/javascripts/lib/utils.js +29 -0
  101. data/app/assets/stylesheets/alert_bar.css.sass +13 -0
  102. data/app/assets/stylesheets/alerts.css.sass +66 -0
  103. data/app/assets/stylesheets/application.css.sass +35 -0
  104. data/app/assets/stylesheets/comments.css.sass +7 -0
  105. data/app/assets/stylesheets/index_components.css.sass +105 -0
  106. data/app/assets/stylesheets/queries.css.sass +110 -0
  107. data/app/assets/stylesheets/repl.css.sass +59 -0
  108. data/app/assets/stylesheets/results.css.sass +25 -0
  109. data/app/assets/stylesheets/schemas.css.sass +56 -0
  110. data/app/assets/stylesheets/sessions.css.sass +9 -0
  111. data/app/assets/stylesheets/shared.css.sass +157 -0
  112. data/app/assets/stylesheets/sidebar.css.sass +85 -0
  113. data/app/assets/stylesheets/snippets.css.sass +15 -0
  114. data/app/assets/stylesheets/sort_bar.css.sass +10 -0
  115. data/app/assets/stylesheets/spinners.css.sass +67 -0
  116. data/app/assets/stylesheets/summary.css.sass +16 -0
  117. data/app/assets/stylesheets/variables.css.sass +110 -0
  118. data/app/assets/stylesheets/visualizations.css.sass +15 -0
  119. data/app/controllers/alerts_controller.rb +72 -0
  120. data/app/controllers/application_controller.rb +38 -0
  121. data/app/controllers/columns_controller.rb +21 -0
  122. data/app/controllers/queries_controller.rb +85 -0
  123. data/app/controllers/query_versions_controller.rb +38 -0
  124. data/app/controllers/result_csvs_controller.rb +29 -0
  125. data/app/controllers/results_controller.rb +53 -0
  126. data/app/controllers/roles_controller.rb +9 -0
  127. data/app/controllers/schema_comments_controller.rb +47 -0
  128. data/app/controllers/snippets_controller.rb +67 -0
  129. data/app/controllers/tags_controller.rb +19 -0
  130. data/app/controllers/visualizations_controller.rb +61 -0
  131. data/app/mailers/alert_mailer.rb +8 -0
  132. data/app/models/ability.rb +31 -0
  133. data/app/models/alert.rb +139 -0
  134. data/app/models/alert_execution.rb +25 -0
  135. data/app/models/query.rb +85 -0
  136. data/app/models/query_execution.rb +39 -0
  137. data/app/models/query_role.rb +3 -0
  138. data/app/models/query_version.rb +61 -0
  139. data/app/models/result.rb +67 -0
  140. data/app/models/schema_comment.rb +3 -0
  141. data/app/models/snippet.rb +3 -0
  142. data/app/models/user.rb +19 -0
  143. data/app/models/visualization.rb +7 -0
  144. data/app/serializers/alert_serializer.rb +10 -0
  145. data/app/serializers/query_index_serializer.rb +7 -0
  146. data/app/serializers/query_serializer.rb +8 -0
  147. data/app/serializers/query_version_serializer.rb +3 -0
  148. data/app/serializers/result_serializer.rb +3 -0
  149. data/app/views/alert_mailer/alert_failing_email.html.haml +17 -0
  150. data/app/views/alerts/_index.html.haml +10 -0
  151. data/app/views/alerts/_index_item.html.haml +25 -0
  152. data/app/views/alerts/_index_sidebar.html.haml +20 -0
  153. data/app/views/alerts/_index_sort_bar.html.haml +22 -0
  154. data/app/views/alerts/_show.html.haml +90 -0
  155. data/app/views/application/_rollbar.html.erb +9 -0
  156. data/app/views/application/index.html.haml +1 -0
  157. data/app/views/application/unauthorized.html.haml +5 -0
  158. data/app/views/application/unauthorized.json +3 -0
  159. data/app/views/devise/sessions/new.html.haml +22 -0
  160. data/app/views/layouts/application.html.haml +78 -0
  161. data/app/views/queries/_alert.html.haml +6 -0
  162. data/app/views/queries/_comments.html.haml +5 -0
  163. data/app/views/queries/_index.html.haml +15 -0
  164. data/app/views/queries/_index_item.html.haml +37 -0
  165. data/app/views/queries/_index_sidebar.html.haml +58 -0
  166. data/app/views/queries/_index_sort_bar.html.haml +29 -0
  167. data/app/views/queries/_query_details.html.haml +81 -0
  168. data/app/views/queries/_query_version_sidebar.html.haml +46 -0
  169. data/app/views/queries/_repl.html.haml +79 -0
  170. data/app/views/queries/_results.html.haml +29 -0
  171. data/app/views/queries/_role_template.html.haml +3 -0
  172. data/app/views/queries/_show.html.haml +28 -0
  173. data/app/views/queries/_tag_template.html.haml +3 -0
  174. data/app/views/results/_show.html.haml +45 -0
  175. data/app/views/schemas/_index.html.haml +47 -0
  176. data/app/views/snippets/_index.html.haml +30 -0
  177. data/app/views/snippets/_index_item.html.haml +20 -0
  178. data/app/views/visualizations/_show.html.haml +83 -0
  179. data/bin/aleph +71 -0
  180. data/bin/bundle +3 -0
  181. data/bin/executables/bundle_runner.rb +12 -0
  182. data/bin/executables/clock.rb +7 -0
  183. data/bin/executables/deps.rb +10 -0
  184. data/bin/executables/import_env_variables.rb +17 -0
  185. data/bin/executables/init_db.rb +7 -0
  186. data/bin/executables/lib/config_generator.rb +51 -0
  187. data/bin/executables/lib/env_writer.rb +25 -0
  188. data/bin/executables/lib/import_env_file.rb +19 -0
  189. data/bin/executables/lib/seeder.rb +14 -0
  190. data/bin/executables/lib/utils.rb +30 -0
  191. data/bin/executables/playground.rb +130 -0
  192. data/bin/executables/seed_playground_db.rb +9 -0
  193. data/bin/executables/update_db.rb +7 -0
  194. data/bin/executables/web_server.rb +12 -0
  195. data/bin/executables/worker.rb +7 -0
  196. data/bin/rails +4 -0
  197. data/bin/rake +4 -0
  198. data/config/application.rb +59 -0
  199. data/config/attribute-map.yml +4 -0
  200. data/config/boot.rb +4 -0
  201. data/config/database.yml +40 -0
  202. data/config/environment.rb +5 -0
  203. data/config/environments/development.rb +37 -0
  204. data/config/environments/playground.rb +55 -0
  205. data/config/environments/production.rb +68 -0
  206. data/config/environments/staging.rb +75 -0
  207. data/config/environments/test.rb +46 -0
  208. data/config/initializers/01_internalize_configurations.rb +70 -0
  209. data/config/initializers/action_controller_renderers.rb +15 -0
  210. data/config/initializers/active_model_serializer.rb +7 -0
  211. data/config/initializers/assets.rb +8 -0
  212. data/config/initializers/backtrace_silencers.rb +7 -0
  213. data/config/initializers/cookies_serializer.rb +3 -0
  214. data/config/initializers/default_enviorment_variables.rb +8 -0
  215. data/config/initializers/devise.rb +297 -0
  216. data/config/initializers/filter_parameter_logging.rb +4 -0
  217. data/config/initializers/haml.rb +1 -0
  218. data/config/initializers/inflections.rb +16 -0
  219. data/config/initializers/mime_types.rb +4 -0
  220. data/config/initializers/net_http.rb +1 -0
  221. data/config/initializers/pester.rb +15 -0
  222. data/config/initializers/rails_admin.rb +27 -0
  223. data/config/initializers/redis.rb +14 -0
  224. data/config/initializers/rollbar.rb +45 -0
  225. data/config/initializers/session_store.rb +3 -0
  226. data/config/initializers/sql_logging_patch.rb +7 -0
  227. data/config/initializers/to_bool.rb +29 -0
  228. data/config/initializers/wrap_parameters.rb +14 -0
  229. data/config/locales/devise.en.yml +62 -0
  230. data/config/locales/en.yml +23 -0
  231. data/config/puma.rb +10 -0
  232. data/config/resque-pool.yml +15 -0
  233. data/config/resque.yml +10 -0
  234. data/config/routes.rb +33 -0
  235. data/config/secrets.yml +26 -0
  236. data/config.ru +4 -0
  237. data/db/migrate/20140710204753_database_begin.rb +150 -0
  238. data/lib/aleph_log_formatter.rb +5 -0
  239. data/lib/authentication.rb +17 -0
  240. data/lib/aws_s3.rb +7 -0
  241. data/lib/clock.rb +7 -0
  242. data/lib/compilable_parameter.rb +50 -0
  243. data/lib/count_publisher.rb +26 -0
  244. data/lib/csv_helper/aws.rb +30 -0
  245. data/lib/csv_helper/base.rb +20 -0
  246. data/lib/csv_helper/local.rb +18 -0
  247. data/lib/csv_serializer.rb +23 -0
  248. data/lib/csv_service.rb +12 -0
  249. data/lib/github/blob.rb +23 -0
  250. data/lib/github/commit.rb +37 -0
  251. data/lib/github/pusher.rb +94 -0
  252. data/lib/github/refs.rb +39 -0
  253. data/lib/github/tree.rb +29 -0
  254. data/lib/github.rb +64 -0
  255. data/lib/interaction/query_creation.rb +27 -0
  256. data/lib/interaction/query_interaction.rb +35 -0
  257. data/lib/interaction/query_update.rb +62 -0
  258. data/lib/interaction/result_creation.rb +48 -0
  259. data/lib/pagination_search/attribute_set.rb +61 -0
  260. data/lib/pagination_search/base_relation.rb +80 -0
  261. data/lib/pagination_search/hash_paginate.rb +74 -0
  262. data/lib/pagination_search/paginated_records.rb +16 -0
  263. data/lib/pagination_search/pagination.rb +12 -0
  264. data/lib/pagination_search/search_conditions.rb +59 -0
  265. data/lib/query_version_support.rb +14 -0
  266. data/lib/redis_result_row_count.rb +26 -0
  267. data/lib/redshift_connection_pool.rb +8 -0
  268. data/lib/redshift_pg/connection.rb +44 -0
  269. data/lib/redshift_pg/redshift_pg.rb +15 -0
  270. data/lib/result_csv_generator.rb +40 -0
  271. data/lib/role.rb +40 -0
  272. data/lib/sample_skimmer.rb +30 -0
  273. data/lib/schema_comment_matcher.rb +27 -0
  274. data/lib/schemas/descriptor.rb +85 -0
  275. data/lib/schemas/descriptors.rb +10 -0
  276. data/lib/schemas/paginate.rb +21 -0
  277. data/lib/schemas/redis_store.rb +22 -0
  278. data/lib/simple_cache.rb +13 -0
  279. data/lib/sql_compiler.rb +33 -0
  280. data/lib/summarizer.rb +18 -0
  281. data/lib/tasks/karma.rake +32 -0
  282. data/lib/tasks/resque_setup.rake +18 -0
  283. data/playground_data/1.csv +13 -0
  284. data/playground_data/aleph.playground.sqlite3 +0 -0
  285. data/public/404.html +26 -0
  286. data/public/422.html +26 -0
  287. data/public/500.html +25 -0
  288. data/public/aleph.png +0 -0
  289. data/public/assets/.sprockets-manifest-24b5998edb20c5b4d6edf39d44cd3ff7.json +1 -0
  290. data/public/assets/FontAwesome-9ccfa32dd4cd1b8e83f68899d85bd5e6.otf +0 -0
  291. data/public/assets/ZeroClipboard-8b5c117b88fe37e32fd34a70fdf60026.swf +0 -0
  292. data/public/assets/angular/aleph.js-19b4df67407de5dab249abfc391c0eaf.es6 +90 -0
  293. data/public/assets/angular/config/schema_completer_config.js-1b696920b5e04f75620630d75117b201.es6 +71 -0
  294. data/public/assets/angular/controllers/alerts/alert_index_controller.js-4344581b1e9b456c3f991f96bb4d403d.es6 +16 -0
  295. data/public/assets/angular/controllers/alerts/alert_show_controller.js-a984dc82fbcac380cdc8682bf8986933.es6 +99 -0
  296. data/public/assets/angular/controllers/controllers.js-7431ae468ea2f0d392661448a61cfdf3.es6 +65 -0
  297. data/public/assets/angular/controllers/query/query_index_controller.js-828eadeee6a971b11b5c07f65f0c6def.es6 +80 -0
  298. data/public/assets/angular/controllers/query/query_repl_controller.js-3c4bac22e41766e2e83e720d53acade3.es6 +147 -0
  299. data/public/assets/angular/controllers/query/query_show_controller.js-020c83fd94ece7d55bd94b9981a40083.es6 +43 -0
  300. data/public/assets/angular/controllers/schema/schema_index_controller.js-d0d790d168b49caefa4b8f7993c928f1.es6 +61 -0
  301. data/public/assets/angular/controllers/snippet/snippet_index_controller.js-9191ee2e37d16d5807b8a7f45530a6c2.es6 +80 -0
  302. data/public/assets/angular/directives/directives.js-44fda752585bddc5d026feaab8b14108.es6 +30 -0
  303. data/public/assets/angular/directives/query/query_details_directive.js-2dd979e2463826558f166d9dc9e2c8a9.es6 +87 -0
  304. data/public/assets/angular/directives/query/query_version_sidebar_directive.js-b19ba8a9bf4e66c5740e9b9f9495cee1.es6 +65 -0
  305. data/public/assets/angular/directives/result/result_directive.js-76c151e9277e35578f92b076c2fa5b06.es6 +59 -0
  306. data/public/assets/angular/directives/result/results_directive.js-fcbf9750790823a11ca313e630bd2b0f.es6 +30 -0
  307. data/public/assets/angular/directives/visualization_directive.js-82cb45a52eba62deb283a3699add1b33.es6 +101 -0
  308. data/public/assets/angular/filters/filters.js-48cdb16fc89337e861c9f18ad57fd9bf.es6 +27 -0
  309. data/public/assets/angular/services/alert/alert.js-a76ea96e948de324fcc00f3ef3ecae4e.es6 +51 -0
  310. data/public/assets/angular/services/alert/alert_resource.js-ac68ea99936eb213c0fb37d4fbb1511a.es6 +10 -0
  311. data/public/assets/angular/services/lib/ace_completers.js-5353182bc538210dad12865ad6a060fd.es6 +29 -0
  312. data/public/assets/angular/services/lib/ace_sql_parse.js-4114a8ad4fe4dbf4f72c0ab7fca22e83.es6 +156 -0
  313. data/public/assets/angular/services/lib/action_handler.js-85a8f75f507efcf2fe950fa7717b6976.es6 +73 -0
  314. data/public/assets/angular/services/lib/alert_flash.js-7a4fe7ef5510a224677a12ecf2fe973b.es6 +30 -0
  315. data/public/assets/angular/services/lib/default_ace_configurator_service.js-9b83d6b53495dafe10bfed5074c3ec01.es6 +74 -0
  316. data/public/assets/angular/services/lib/github_url_service.js-719084a625f60d20c24097f00813b481.es6 +53 -0
  317. data/public/assets/angular/services/lib/keyword_completer.js-560b51694457619401c72431dd7b647e.es6 +36 -0
  318. data/public/assets/angular/services/lib/local_resource.js-9b57357ed203c783708e48154721242a.es6 +20 -0
  319. data/public/assets/angular/services/lib/lock_service.js-32eb33fda9c27fb5643b25c63099b52c.es6 +48 -0
  320. data/public/assets/angular/services/lib/locking_poll_service.js-d0271cc07d20ec73291e7175e1714d42.es6 +42 -0
  321. data/public/assets/angular/services/lib/matcher_runner.js-bd63f4c6ad965716c5b793d3c4602563.es6 +65 -0
  322. data/public/assets/angular/services/lib/navigation_guard.js-5c7497900f99319f3ef76b83662c20cd.es6 +45 -0
  323. data/public/assets/angular/services/lib/open_repl_service.js-2332490470ea58f3e5ce7f6fe5dd2659.es6 +56 -0
  324. data/public/assets/angular/services/lib/page_title_manager.js-227f9ddb49d23bfa934bf216ef96ccbd.es6 +38 -0
  325. data/public/assets/angular/services/lib/pagination.js-baa9a496d01b87f90c588c51864d1533.es6 +114 -0
  326. data/public/assets/angular/services/lib/pagination_components.js-4fcc03120d1299713347b487f1e8fd44.es6 +91 -0
  327. data/public/assets/angular/services/lib/parameter_methods.js-16ecb25ffb24d5870dfc17f9f408fa5b.es6 +35 -0
  328. data/public/assets/angular/services/lib/role_model.js-3d5072f279676294e7d17cbb4bb3adb5.es6 +21 -0
  329. data/public/assets/angular/services/lib/schema_completer.js-d04d49642967fd9f8e2c95e0df81f2ae.es6 +56 -0
  330. data/public/assets/angular/services/lib/selection_tag_input.js-86cc6d564c108d722951b6fcd2b51221.es6 +42 -0
  331. data/public/assets/angular/services/lib/server_configurations.js-fd8c16a3d02926e7597240566808c141.es6 +15 -0
  332. data/public/assets/angular/services/lib/spinner_state.js-315bb62df18f9370a89f8b865eb1766a.es6 +45 -0
  333. data/public/assets/angular/services/lib/tag_resource.js-8849bbdd579bd38b36a362bed926c2f2.es6 +14 -0
  334. data/public/assets/angular/services/model/collection_dirty_awareness.js-8a78450bd8b565fb03633ab735893508.es6 +33 -0
  335. data/public/assets/angular/services/model/collection_model_base.js-8092335acde425d28718c1a9fc677d39.es6 +75 -0
  336. data/public/assets/angular/services/model/dirty_aware_collection_model.js-6f4d2b409a033f5ffc6bd5a747df2046.es6 +31 -0
  337. data/public/assets/angular/services/model/dirty_aware_model.js-ec1a086f3ec459827dbd5381bd970975.es6 +50 -0
  338. data/public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6 +80 -0
  339. data/public/assets/angular/services/model/model_state.js-3e96e381ea7a9eff857081ffbf3a8bab.es6 +51 -0
  340. data/public/assets/angular/services/model/models.js-6798762a6e263be75c7c4e9f8a19da66.es6 +15 -0
  341. data/public/assets/angular/services/model/unpersisted_model.js-49597959c989e68c713fd826743bb7b5.es6 +20 -0
  342. data/public/assets/angular/services/model_generation/model_factory.js-0bccc6a2e9b4738c67230fc68d9780ae.es6 +28 -0
  343. data/public/assets/angular/services/model_generation/model_generation.js-f08c6eff199b5ad02b2e2bdf866d69ff.es6 +13 -0
  344. data/public/assets/angular/services/model_generation/model_manager.js-b05d8f00bc4499c50098ae31013de88c.es6 +86 -0
  345. data/public/assets/angular/services/model_generation/resource_factory.js-e8ce2f4be9383d885dbb965c8e425bab.es6 +38 -0
  346. data/public/assets/angular/services/model_generation/standard_collection_model.js-19c44dc3a937a85d825c5a2f020a6769.es6 +25 -0
  347. data/public/assets/angular/services/model_generation/standard_model.js-74439b041eebfc7e0fad454cf6e32192.es6 +38 -0
  348. data/public/assets/angular/services/query/query.js-7b6228d0a5c1a6ea76242f4aa49aafd0.es6 +55 -0
  349. data/public/assets/angular/services/query/query_handler.js-d8cb3c66bcf6d16cd13bb5bcd0921496.es6 +40 -0
  350. data/public/assets/angular/services/query/query_loader.js-1fbc8b859778d46b73b9adc300984851.es6 +54 -0
  351. data/public/assets/angular/services/query/query_request_transformers.js-522901477c7848324cd5c014005a85c8.es6 +26 -0
  352. data/public/assets/angular/services/query/query_resource.js-b809fbfd1c379619fa07ef8e52509810.es6 +21 -0
  353. data/public/assets/angular/services/query/query_tab.js-fe34f5e6d0c813d2d92838be14cd6783.es6 +63 -0
  354. data/public/assets/angular/services/query/query_versions.js-aa3aec9021354a7394797101ea500887.es6 +21 -0
  355. data/public/assets/angular/services/result/result.js-be8178c80c767a651a97537b2b0149d5.es6 +26 -0
  356. data/public/assets/angular/services/result/result_poller.js-b15617d53f164cbe5636bb5573a70504.es6 +30 -0
  357. data/public/assets/angular/services/result/result_runner.js-ce2c5b3121c8e67903c302e600749c14.es6 +48 -0
  358. data/public/assets/angular/services/result/results.js-53088d6088f6b4783b274a64322d361c.es6 +10 -0
  359. data/public/assets/angular/services/schema/schema_column.js-3908faecc9874fa08484d7490701a7d4.es6 +93 -0
  360. data/public/assets/angular/services/schema/schema_column_resource.js-a6982ce9698b104192c4e455300df455.es6 +12 -0
  361. data/public/assets/angular/services/schema/schema_columns.js-c63a16e2e0778a885bd27c7cf2ed7d88.es6 +57 -0
  362. data/public/assets/angular/services/schema/schema_comment_resource.js-20254ea1a4e7b4850c9f21f9619130ce.es6 +12 -0
  363. data/public/assets/angular/services/services.js-6225c5ea24a9082506d1932d7884b53b.es6 +140 -0
  364. data/public/assets/angular/services/snippet/ace_snippet_manager.js-dbbba5d8ad5040042b469b294c4d7228.es6 +44 -0
  365. data/public/assets/angular/services/visualization/source_renderer.js-d7274c88b067a35f2e91bf7f39be7d47.es6 +70 -0
  366. data/public/assets/angular/services/visualization/visualization.js-23e36c87721aa263dd3f99769027cabb.es6 +47 -0
  367. data/public/assets/angular/services/visualization/visualization_service.js-25de86b5ceef60cf2b1dfde5fb0e9216.es6 +67 -0
  368. data/public/assets/angular/services/visualization/visualizations.js-1227bc3dcd67e85c8050d82360a26d53.es6 +11 -0
  369. data/public/assets/application-9153e0bf570016651e5eb8c67e037d3a.css +10 -0
  370. data/public/assets/application-ef5c2ae95804ac9785f190a9aea7ad8b.js +149 -0
  371. data/public/assets/bootstrap/glyphicons-halflings-regular-448c34a56d699c29117adc64c43affeb.woff2 +0 -0
  372. data/public/assets/bootstrap/glyphicons-halflings-regular-89889688147bd7575d6327160d64e760.svg +288 -0
  373. data/public/assets/bootstrap/glyphicons-halflings-regular-e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
  374. data/public/assets/bootstrap/glyphicons-halflings-regular-f4769f9bdb7466be65088239c12046d1.eot +0 -0
  375. data/public/assets/bootstrap/glyphicons-halflings-regular-fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
  376. data/public/assets/fontawesome-webfont-4f0022f25672c7f501c339cbf98d9117.ttf +0 -0
  377. data/public/assets/fontawesome-webfont-776d58f453c8fe5d6a89e9c31ee223ff.svg +504 -0
  378. data/public/assets/fontawesome-webfont-90186830c9c50a0fed932494581761d9.eot +0 -0
  379. data/public/assets/fontawesome-webfont-926c93d201fe51c8f351e858468980c3.woff2 +0 -0
  380. data/public/assets/fontawesome-webfont-fdf491ce5ff5b2da02708cd0e9864719.woff +0 -0
  381. data/public/assets/glyphicons-halflings-regular-0a5c48c69a25a93e37ed62db813387fa.svg +229 -0
  382. data/public/assets/glyphicons-halflings-regular-47da44498fc073d9fff9ab0cdb0bef8e.ttf +0 -0
  383. data/public/assets/glyphicons-halflings-regular-5eae1f7217b606d3580dd70ac840fea1.woff +0 -0
  384. data/public/assets/glyphicons-halflings-regular-aa16cd35628e6dddf56e766c9aa4ae63.eot +0 -0
  385. data/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-2a44fbdb7360c60122bcf6dcef0387d8.png +0 -0
  386. data/public/assets/jquery-ui/ui-bg_flat_75_ffffff_40x100-8692e6efddf882acbff144c38ea7dfdf.png +0 -0
  387. data/public/assets/jquery-ui/ui-bg_glass_55_fbf9ee_1x400-f8f4558e0b92ff2cd6136781533902ec.png +0 -0
  388. data/public/assets/jquery-ui/ui-bg_glass_65_ffffff_1x400-e5a8f32e28fd5c27bf0fed33c8a8b9b5.png +0 -0
  389. data/public/assets/jquery-ui/ui-bg_glass_75_dadada_1x400-c12c6510dad3ebfa64c8a30e959a2469.png +0 -0
  390. data/public/assets/jquery-ui/ui-bg_glass_75_e6e6e6_1x400-f4254356c2a8c9a383205ef2c4de22c4.png +0 -0
  391. data/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-5a3be2d8fff8324d59aec3df7b0a0c83.png +0 -0
  392. data/public/assets/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-72c593d16e998952cd8d798fee33c6f3.png +0 -0
  393. data/public/assets/jquery-ui/ui-icons_222222_256x240-9129e086dc488d8bcaf808510bc646ba.png +0 -0
  394. data/public/assets/jquery-ui/ui-icons_2e83ff_256x240-25162bf857a8eb83ea932a58436e1049.png +0 -0
  395. data/public/assets/jquery-ui/ui-icons_454545_256x240-771099482bdc1571ece41073b1752596.png +0 -0
  396. data/public/assets/jquery-ui/ui-icons_888888_256x240-faf6f5dc44e713178784c1fb053990aa.png +0 -0
  397. data/public/assets/jquery-ui/ui-icons_cd0a0a_256x240-5d8808d43cefca6f6781a5316d176632.png +0 -0
  398. data/public/assets/octicons-0a82c1edade24862533bbe96ebeaea47.eot +0 -0
  399. data/public/assets/octicons-103abd6cc0199e2519ef6f1aac4bb0e0.ttf +0 -0
  400. data/public/assets/octicons-adc17600a2b7a648eba306c2e1426b85.svg +183 -0
  401. data/public/assets/octicons-be82065223a03ba577de159d97a5d63d.woff +0 -0
  402. data/public/assets/octicons-local-72e4167c13648cb89e9e96cdd212cb82.ttf +0 -0
  403. data/public/assets/rails_admin/aristo/images/bg_fallback-a7547e71656b1e538b93ddb49dfc98d3.png +0 -0
  404. data/public/assets/rails_admin/aristo/images/icon_sprite-415c1eec8a2d31d217d4d1d5a1d44345.png +0 -0
  405. data/public/assets/rails_admin/aristo/images/progress_bar-449b2fab5cf4122c17a416f6e26569fe.gif +0 -0
  406. data/public/assets/rails_admin/aristo/images/slider_handles-ba57b6efb64ca6263f77ce2624ad71ee.png +0 -0
  407. data/public/assets/rails_admin/aristo/images/ui-icons_222222_256x240-a2c05c5e967f9cf4dae51c1243b3b93c.png +0 -0
  408. data/public/assets/rails_admin/aristo/images/ui-icons_454545_256x240-a7a7eff72c4f562524dc472824aab656.png +0 -0
  409. data/public/assets/rails_admin/base/README-f7dd742c2237cb1959438b94c7503a41.txt +2 -0
  410. data/public/assets/rails_admin/bootstrap/glyphicons-halflings-d4fef5262f29f592560fb59918a1c052.png +0 -0
  411. data/public/assets/rails_admin/bootstrap/glyphicons-halflings-white-9bbc6e9602998a385c2ea13df56470fd.png +0 -0
  412. data/public/assets/rails_admin/bullet_black-06d345566cf9e0f97a23bb07ab3d50d9.png +0 -0
  413. data/public/assets/rails_admin/bullet_white-469b537fa21b7143f719578f7426825d.png +0 -0
  414. data/public/assets/rails_admin/calendar-697f5a44753da70028cfd04b98ac45d2.png +0 -0
  415. data/public/assets/rails_admin/clock-0cc82b549af3df4f730a02335f54b0df.png +0 -0
  416. data/public/assets/rails_admin/colorpicker/colorpicker_background-7aaa2a726200c0ac3ba43c01f073a93d.png +0 -0
  417. data/public/assets/rails_admin/colorpicker/colorpicker_hex-cbc06f4015cbb276a3dd966e1be37c25.png +0 -0
  418. data/public/assets/rails_admin/colorpicker/colorpicker_hsb_b-2315aba3c2fbbcfcc22869b21836c31d.png +0 -0
  419. data/public/assets/rails_admin/colorpicker/colorpicker_hsb_h-3120023551e3601467cf52e1c8aaae9e.png +0 -0
  420. data/public/assets/rails_admin/colorpicker/colorpicker_hsb_s-77a77892bdef0906fdfc3426d06108fd.png +0 -0
  421. data/public/assets/rails_admin/colorpicker/colorpicker_indic-f485d07540a89502e36dc1a55cec05d0.gif +0 -0
  422. data/public/assets/rails_admin/colorpicker/colorpicker_overlay-4b2dd6f78c4aac5cc932e845698b2db5.png +0 -0
  423. data/public/assets/rails_admin/colorpicker/colorpicker_rgb_b-2315aba3c2fbbcfcc22869b21836c31d.png +0 -0
  424. data/public/assets/rails_admin/colorpicker/colorpicker_rgb_g-475afe3f4f69e59ff30a445384a8d961.png +0 -0
  425. data/public/assets/rails_admin/colorpicker/colorpicker_rgb_r-02de28945293fe2fd026c9be3b89955a.png +0 -0
  426. data/public/assets/rails_admin/colorpicker/colorpicker_select-cdf55197d05f18c552dc35bdb858fa2a.gif +0 -0
  427. data/public/assets/rails_admin/colorpicker/colorpicker_submit-9912e5cf348e0be359ff9b1078fbb7da.png +0 -0
  428. data/public/assets/rails_admin/colorpicker/custom_background-a0ab8ff3e2b85b1f8ed5a4d86967471b.png +0 -0
  429. data/public/assets/rails_admin/colorpicker/custom_hex-065e780d7b89f7dda63a472caa7c2bdd.png +0 -0
  430. data/public/assets/rails_admin/colorpicker/custom_hsb_b-66f5963cf1a0a2680acbcac2bb77f40d.png +0 -0
  431. data/public/assets/rails_admin/colorpicker/custom_hsb_h-cd1f2e27122aeca17af416f328b758cd.png +0 -0
  432. data/public/assets/rails_admin/colorpicker/custom_hsb_s-ca6f3e4f0c1fc2cb110c788018369e07.png +0 -0
  433. data/public/assets/rails_admin/colorpicker/custom_indic-04660eb352eb259581a36a0fe8da2d4d.gif +0 -0
  434. data/public/assets/rails_admin/colorpicker/custom_rgb_b-64bc0c5110f84efe32e82c58d50660f6.png +0 -0
  435. data/public/assets/rails_admin/colorpicker/custom_rgb_g-33fe011475956750a457b1f93f1b9075.png +0 -0
  436. data/public/assets/rails_admin/colorpicker/custom_rgb_r-18f2ee37089d850c52b212d8a31aac92.png +0 -0
  437. data/public/assets/rails_admin/colorpicker/custom_submit-9d0a14eebb9ae04edfb8099827a42968.png +0 -0
  438. data/public/assets/rails_admin/colorpicker/select-76bd5c10f34de24b73ff4454735d3e18.png +0 -0
  439. data/public/assets/rails_admin/colorpicker/select2-d3fea9a451ac2c29bcd4a82b6e4f326a.png +0 -0
  440. data/public/assets/rails_admin/colorpicker/slider-db040ce7280fc74269e330a862e738e6.png +0 -0
  441. data/public/assets/rails_admin/jquery.colorpicker-7c36c2fac54a031f6e0dfe6ad137cfb1.js +1 -0
  442. data/public/assets/rails_admin/jquery.colorpicker-e402a30af31a4ba5957fec816dc9239c.css +1 -0
  443. data/public/assets/rails_admin/logo-9b479a57b493ee824767163101a5409f.png +0 -0
  444. data/public/assets/rails_admin/magnifier-4fcdfd820ff2e951458af3d1309ab20c.png +0 -0
  445. data/public/assets/rails_admin/multiselect/icon_sprite-415c1eec8a2d31d217d4d1d5a1d44345.png +0 -0
  446. data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-n-dark-32c1cfdd900379bf62658e475fb2ba38.png +0 -0
  447. data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-n-light-73160d919a189ba13bd4387e3623b7e9.png +0 -0
  448. data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-s-dark-c15e6bff59c80c5473236cf77870f31d.png +0 -0
  449. data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-s-light-fbf43811420f67d49d4dc64c7817f72c.png +0 -0
  450. data/public/assets/rails_admin/rails_admin-d25a684b9f690652469ceb212fbe7b95.js +328 -0
  451. data/public/assets/rails_admin/rails_admin-d85fb3c8bbff377491ed5af5239cf185.css +8 -0
  452. data/public/assets/resque_web/application-b29b34115c3ad5c539f26114fc91e584.css +4 -0
  453. data/public/assets/resque_web/application-d2bc6e68cf7c6215e804fe9e3f46f1d0.js +111 -0
  454. data/public/assets/resque_web/idle-53474088772d9917bd463b19efa32fc3.png +0 -0
  455. data/public/assets/resque_web/lifebuoy-0281230b31ba4078685f4df3e8169534.png +0 -0
  456. data/public/assets/resque_web/poll-af53f85832c41a9cde68b08cb09711f1.png +0 -0
  457. data/public/assets/resque_web/rails-9c0a079bdd7701d7e729bd956823d153.png +0 -0
  458. data/public/assets/resque_web/working-26a36c5119cbdcc64ebade2c5f8c389d.png +0 -0
  459. data/public/assets/twitter/bootstrap/glyphicons-halflings-2516339970d710819585f90773aebe0a.png +0 -0
  460. data/public/assets/twitter/bootstrap/glyphicons-halflings-white-9bbc6e9602998a385c2ea13df56470fd.png +0 -0
  461. data/public/bg_big.svg +2 -0
  462. data/public/bg_new.svg +2 -0
  463. data/public/favicon.ico +0 -0
  464. data/public/resources/keyword_config.json +51 -0
  465. data/public/resources/visualization/area.html +17 -0
  466. data/public/resources/visualization/area_step.html +17 -0
  467. data/public/resources/visualization/bar.html +17 -0
  468. data/public/resources/visualization/custom.html +6 -0
  469. data/public/resources/visualization/line.html +16 -0
  470. data/public/resources/visualization/presets.json +13 -0
  471. data/public/resources/visualization/scatter.html +17 -0
  472. data/public/resources/visualization/spline.html +17 -0
  473. data/public/resources/visualization/spline_area.html +17 -0
  474. data/public/resources/visualization/stacked_area.html +18 -0
  475. data/public/resources/visualization/stacked_bar.html +18 -0
  476. data/public/resources/visualization/stacked_spline_area.html +18 -0
  477. data/public/resources/visualization/template.json +12 -0
  478. data/public/robots.txt +2 -0
  479. data/vendor/assets/javascripts/ace/ace.js +18655 -0
  480. data/vendor/assets/javascripts/ace/ext-language_tools.js +1937 -0
  481. data/vendor/assets/javascripts/ace/mode-html.js +2794 -0
  482. data/vendor/assets/javascripts/ace/mode-pgsql.js +1503 -0
  483. data/vendor/assets/javascripts/ace/snippets/coffee.js +102 -0
  484. data/vendor/assets/javascripts/ace/snippets/css.js +974 -0
  485. data/vendor/assets/javascripts/ace/snippets/haml.js +27 -0
  486. data/vendor/assets/javascripts/ace/snippets/html.js +835 -0
  487. data/vendor/assets/javascripts/ace/snippets/html_elixir.js +7 -0
  488. data/vendor/assets/javascripts/ace/snippets/html_ruby.js +7 -0
  489. data/vendor/assets/javascripts/ace/snippets/javascript.js +202 -0
  490. data/vendor/assets/javascripts/ace/snippets/json.js +7 -0
  491. data/vendor/assets/javascripts/ace/snippets/jsp.js +106 -0
  492. data/vendor/assets/javascripts/ace/snippets/jsx.js +7 -0
  493. data/vendor/assets/javascripts/ace/snippets/less.js +7 -0
  494. data/vendor/assets/javascripts/ace/snippets/mysql.js +7 -0
  495. data/vendor/assets/javascripts/ace/snippets/pgsql.js +7 -0
  496. data/vendor/assets/javascripts/ace/snippets/plain_text.js +7 -0
  497. data/vendor/assets/javascripts/ace/snippets/rhtml.js +7 -0
  498. data/vendor/assets/javascripts/ace/snippets/sass.js +7 -0
  499. data/vendor/assets/javascripts/ace/snippets/scss.js +7 -0
  500. data/vendor/assets/javascripts/ace/snippets/snippets.js +16 -0
  501. data/vendor/assets/javascripts/ace/snippets/sql.js +33 -0
  502. data/vendor/assets/javascripts/ace/snippets/sqlserver.js +76 -0
  503. data/vendor/assets/javascripts/ace/snippets/svg.js +7 -0
  504. data/vendor/assets/javascripts/ace/snippets/text.js +7 -0
  505. data/vendor/assets/javascripts/ace/snippets/textile.js +37 -0
  506. data/vendor/assets/javascripts/ace/theme-monokai.js +105 -0
  507. data/vendor/assets/javascripts/angular-filter/angular-filter.js +2271 -0
  508. data/vendor/assets/javascripts/angular-hotkeys/hotkeys.js +1523 -0
  509. data/vendor/assets/javascripts/angular-selection-model/selection-model.js +563 -0
  510. data/vendor/assets/javascripts/angular-spinner/treasure-overlay-spinner.js +53 -0
  511. data/vendor/assets/javascripts/angular-ui-ace/ui-ace.js +298 -0
  512. data/vendor/assets/javascripts/angular-ui-bootstrap/ui-bootstrap-tpls-0.14.3.js +8503 -0
  513. data/vendor/assets/javascripts/d3/c3.min.js +5 -0
  514. data/vendor/assets/javascripts/d3/d3.v3.min.js +5 -0
  515. data/vendor/assets/javascripts/infinite-scroll/infinite-scroll.js +186 -0
  516. data/vendor/assets/javascripts/ng-clip/ngClip.js +84 -0
  517. data/vendor/assets/javascripts/ng-tags-input/ng-tags-input.min.js +1 -0
  518. data/vendor/assets/javascripts/pluralize/pluralize.js +453 -0
  519. data/vendor/assets/javascripts/underscore-js/underscore.js +1548 -0
  520. data/vendor/assets/stylesheets/angular-hotkeys/hotkeys.css +110 -0
  521. data/vendor/assets/stylesheets/angular-spinner/treasure-overlay-spinner.css +136 -0
  522. data/vendor/assets/stylesheets/c3/c3.min.css +1 -0
  523. data/vendor/assets/stylesheets/ng-tags-input/ng-tags-input.bootstrap.min.css +1 -0
  524. data/vendor/assets/stylesheets/ng-tags-input/ng-tags-input.min.css +1 -0
  525. data/vendor/assets/stylesheets/octicons/README.md +1 -0
  526. data/vendor/assets/stylesheets/octicons/sprockets-octicons.scss +217 -0
  527. metadata +600 -0
@@ -0,0 +1,2794 @@
1
+ define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
2
+ "use strict";
3
+
4
+ var oop = require("../lib/oop");
5
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
+
7
+ var DocCommentHighlightRules = function() {
8
+ this.$rules = {
9
+ "start" : [ {
10
+ token : "comment.doc.tag",
11
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
12
+ },
13
+ DocCommentHighlightRules.getTagRule(),
14
+ {
15
+ defaultToken : "comment.doc",
16
+ caseInsensitive: true
17
+ }]
18
+ };
19
+ };
20
+
21
+ oop.inherits(DocCommentHighlightRules, TextHighlightRules);
22
+
23
+ DocCommentHighlightRules.getTagRule = function(start) {
24
+ return {
25
+ token : "comment.doc.tag.storage.type",
26
+ regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
27
+ };
28
+ }
29
+
30
+ DocCommentHighlightRules.getStartRule = function(start) {
31
+ return {
32
+ token : "comment.doc", // doc comment
33
+ regex : "\\/\\*(?=\\*)",
34
+ next : start
35
+ };
36
+ };
37
+
38
+ DocCommentHighlightRules.getEndRule = function (start) {
39
+ return {
40
+ token : "comment.doc", // closing comment
41
+ regex : "\\*\\/",
42
+ next : start
43
+ };
44
+ };
45
+
46
+
47
+ exports.DocCommentHighlightRules = DocCommentHighlightRules;
48
+
49
+ });
50
+
51
+ define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) {
52
+ "use strict";
53
+
54
+ var oop = require("../lib/oop");
55
+ var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
56
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
57
+ var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
58
+
59
+ var JavaScriptHighlightRules = function(options) {
60
+ var keywordMapper = this.createKeywordMapper({
61
+ "variable.language":
62
+ "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors
63
+ "Namespace|QName|XML|XMLList|" + // E4X
64
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
65
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
66
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors
67
+ "SyntaxError|TypeError|URIError|" +
68
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
69
+ "isNaN|parseFloat|parseInt|" +
70
+ "JSON|Math|" + // Other
71
+ "this|arguments|prototype|window|document" , // Pseudo
72
+ "keyword":
73
+ "const|yield|import|get|set|" +
74
+ "break|case|catch|continue|default|delete|do|else|finally|for|function|" +
75
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
76
+ "__parent__|__count__|escape|unescape|with|__proto__|" +
77
+ "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",
78
+ "storage.type":
79
+ "const|let|var|function",
80
+ "constant.language":
81
+ "null|Infinity|NaN|undefined",
82
+ "support.function":
83
+ "alert",
84
+ "constant.language.boolean": "true|false"
85
+ }, "identifier");
86
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
87
+
88
+ var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
89
+ "u[0-9a-fA-F]{4}|" + // unicode
90
+ "[0-2][0-7]{0,2}|" + // oct
91
+ "3[0-6][0-7]?|" + // oct
92
+ "37[0-7]?|" + // oct
93
+ "[4-7][0-7]?|" + //oct
94
+ ".)";
95
+
96
+ this.$rules = {
97
+ "no_regex" : [
98
+ {
99
+ token : "comment",
100
+ regex : "\\/\\/",
101
+ next : "line_comment"
102
+ },
103
+ DocCommentHighlightRules.getStartRule("doc-start"),
104
+ {
105
+ token : "comment", // multi line comment
106
+ regex : /\/\*/,
107
+ next : "comment"
108
+ }, {
109
+ token : "string",
110
+ regex : "'(?=.)",
111
+ next : "qstring"
112
+ }, {
113
+ token : "string",
114
+ regex : '"(?=.)',
115
+ next : "qqstring"
116
+ }, {
117
+ token : "constant.numeric", // hex
118
+ regex : /0[xX][0-9a-fA-F]+\b/
119
+ }, {
120
+ token : "constant.numeric", // float
121
+ regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/
122
+ }, {
123
+ token : [
124
+ "storage.type", "punctuation.operator", "support.function",
125
+ "punctuation.operator", "entity.name.function", "text","keyword.operator"
126
+ ],
127
+ regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)",
128
+ next: "function_arguments"
129
+ }, {
130
+ token : [
131
+ "storage.type", "punctuation.operator", "entity.name.function", "text",
132
+ "keyword.operator", "text", "storage.type", "text", "paren.lparen"
133
+ ],
134
+ regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
135
+ next: "function_arguments"
136
+ }, {
137
+ token : [
138
+ "entity.name.function", "text", "keyword.operator", "text", "storage.type",
139
+ "text", "paren.lparen"
140
+ ],
141
+ regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
142
+ next: "function_arguments"
143
+ }, {
144
+ token : [
145
+ "storage.type", "punctuation.operator", "entity.name.function", "text",
146
+ "keyword.operator", "text",
147
+ "storage.type", "text", "entity.name.function", "text", "paren.lparen"
148
+ ],
149
+ regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",
150
+ next: "function_arguments"
151
+ }, {
152
+ token : [
153
+ "storage.type", "text", "entity.name.function", "text", "paren.lparen"
154
+ ],
155
+ regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()",
156
+ next: "function_arguments"
157
+ }, {
158
+ token : [
159
+ "entity.name.function", "text", "punctuation.operator",
160
+ "text", "storage.type", "text", "paren.lparen"
161
+ ],
162
+ regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",
163
+ next: "function_arguments"
164
+ }, {
165
+ token : [
166
+ "text", "text", "storage.type", "text", "paren.lparen"
167
+ ],
168
+ regex : "(:)(\\s*)(function)(\\s*)(\\()",
169
+ next: "function_arguments"
170
+ }, {
171
+ token : "keyword",
172
+ regex : "(?:" + kwBeforeRe + ")\\b",
173
+ next : "start"
174
+ }, {
175
+ token : ["support.constant"],
176
+ regex : /that\b/
177
+ }, {
178
+ token : ["storage.type", "punctuation.operator", "support.function.firebug"],
179
+ regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/
180
+ }, {
181
+ token : keywordMapper,
182
+ regex : identifierRe
183
+ }, {
184
+ token : "punctuation.operator",
185
+ regex : /[.](?![.])/,
186
+ next : "property"
187
+ }, {
188
+ token : "keyword.operator",
189
+ regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,
190
+ next : "start"
191
+ }, {
192
+ token : "punctuation.operator",
193
+ regex : /[?:,;.]/,
194
+ next : "start"
195
+ }, {
196
+ token : "paren.lparen",
197
+ regex : /[\[({]/,
198
+ next : "start"
199
+ }, {
200
+ token : "paren.rparen",
201
+ regex : /[\])}]/
202
+ }, {
203
+ token: "comment",
204
+ regex: /^#!.*$/
205
+ }
206
+ ],
207
+ property: [{
208
+ token : "text",
209
+ regex : "\\s+"
210
+ }, {
211
+ token : [
212
+ "storage.type", "punctuation.operator", "entity.name.function", "text",
213
+ "keyword.operator", "text",
214
+ "storage.type", "text", "entity.name.function", "text", "paren.lparen"
215
+ ],
216
+ regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",
217
+ next: "function_arguments"
218
+ }, {
219
+ token : "punctuation.operator",
220
+ regex : /[.](?![.])/
221
+ }, {
222
+ token : "support.function",
223
+ regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
224
+ }, {
225
+ token : "support.function.dom",
226
+ regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
227
+ }, {
228
+ token : "support.constant",
229
+ regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
230
+ }, {
231
+ token : "identifier",
232
+ regex : identifierRe
233
+ }, {
234
+ regex: "",
235
+ token: "empty",
236
+ next: "no_regex"
237
+ }
238
+ ],
239
+ "start": [
240
+ DocCommentHighlightRules.getStartRule("doc-start"),
241
+ {
242
+ token : "comment", // multi line comment
243
+ regex : "\\/\\*",
244
+ next : "comment_regex_allowed"
245
+ }, {
246
+ token : "comment",
247
+ regex : "\\/\\/",
248
+ next : "line_comment_regex_allowed"
249
+ }, {
250
+ token: "string.regexp",
251
+ regex: "\\/",
252
+ next: "regex"
253
+ }, {
254
+ token : "text",
255
+ regex : "\\s+|^$",
256
+ next : "start"
257
+ }, {
258
+ token: "empty",
259
+ regex: "",
260
+ next: "no_regex"
261
+ }
262
+ ],
263
+ "regex": [
264
+ {
265
+ token: "regexp.keyword.operator",
266
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
267
+ }, {
268
+ token: "string.regexp",
269
+ regex: "/[sxngimy]*",
270
+ next: "no_regex"
271
+ }, {
272
+ token : "invalid",
273
+ regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
274
+ }, {
275
+ token : "constant.language.escape",
276
+ regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
277
+ }, {
278
+ token : "constant.language.delimiter",
279
+ regex: /\|/
280
+ }, {
281
+ token: "constant.language.escape",
282
+ regex: /\[\^?/,
283
+ next: "regex_character_class"
284
+ }, {
285
+ token: "empty",
286
+ regex: "$",
287
+ next: "no_regex"
288
+ }, {
289
+ defaultToken: "string.regexp"
290
+ }
291
+ ],
292
+ "regex_character_class": [
293
+ {
294
+ token: "regexp.charclass.keyword.operator",
295
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
296
+ }, {
297
+ token: "constant.language.escape",
298
+ regex: "]",
299
+ next: "regex"
300
+ }, {
301
+ token: "constant.language.escape",
302
+ regex: "-"
303
+ }, {
304
+ token: "empty",
305
+ regex: "$",
306
+ next: "no_regex"
307
+ }, {
308
+ defaultToken: "string.regexp.charachterclass"
309
+ }
310
+ ],
311
+ "function_arguments": [
312
+ {
313
+ token: "variable.parameter",
314
+ regex: identifierRe
315
+ }, {
316
+ token: "punctuation.operator",
317
+ regex: "[, ]+"
318
+ }, {
319
+ token: "punctuation.operator",
320
+ regex: "$"
321
+ }, {
322
+ token: "empty",
323
+ regex: "",
324
+ next: "no_regex"
325
+ }
326
+ ],
327
+ "comment_regex_allowed" : [
328
+ DocCommentHighlightRules.getTagRule(),
329
+ {token : "comment", regex : "\\*\\/", next : "start"},
330
+ {defaultToken : "comment", caseInsensitive: true}
331
+ ],
332
+ "comment" : [
333
+ DocCommentHighlightRules.getTagRule(),
334
+ {token : "comment", regex : "\\*\\/", next : "no_regex"},
335
+ {defaultToken : "comment", caseInsensitive: true}
336
+ ],
337
+ "line_comment_regex_allowed" : [
338
+ DocCommentHighlightRules.getTagRule(),
339
+ {token : "comment", regex : "$|^", next : "start"},
340
+ {defaultToken : "comment", caseInsensitive: true}
341
+ ],
342
+ "line_comment" : [
343
+ DocCommentHighlightRules.getTagRule(),
344
+ {token : "comment", regex : "$|^", next : "no_regex"},
345
+ {defaultToken : "comment", caseInsensitive: true}
346
+ ],
347
+ "qqstring" : [
348
+ {
349
+ token : "constant.language.escape",
350
+ regex : escapedRe
351
+ }, {
352
+ token : "string",
353
+ regex : "\\\\$",
354
+ next : "qqstring"
355
+ }, {
356
+ token : "string",
357
+ regex : '"|$',
358
+ next : "no_regex"
359
+ }, {
360
+ defaultToken: "string"
361
+ }
362
+ ],
363
+ "qstring" : [
364
+ {
365
+ token : "constant.language.escape",
366
+ regex : escapedRe
367
+ }, {
368
+ token : "string",
369
+ regex : "\\\\$",
370
+ next : "qstring"
371
+ }, {
372
+ token : "string",
373
+ regex : "'|$",
374
+ next : "no_regex"
375
+ }, {
376
+ defaultToken: "string"
377
+ }
378
+ ]
379
+ };
380
+
381
+
382
+ if (!options || !options.noES6) {
383
+ this.$rules.no_regex.unshift({
384
+ regex: "[{}]", onMatch: function(val, state, stack) {
385
+ this.next = val == "{" ? this.nextState : "";
386
+ if (val == "{" && stack.length) {
387
+ stack.unshift("start", state);
388
+ return "paren";
389
+ }
390
+ if (val == "}" && stack.length) {
391
+ stack.shift();
392
+ this.next = stack.shift();
393
+ if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1)
394
+ return "paren.quasi.end";
395
+ }
396
+ return val == "{" ? "paren.lparen" : "paren.rparen";
397
+ },
398
+ nextState: "start"
399
+ }, {
400
+ token : "string.quasi.start",
401
+ regex : /`/,
402
+ push : [{
403
+ token : "constant.language.escape",
404
+ regex : escapedRe
405
+ }, {
406
+ token : "paren.quasi.start",
407
+ regex : /\${/,
408
+ push : "start"
409
+ }, {
410
+ token : "string.quasi.end",
411
+ regex : /`/,
412
+ next : "pop"
413
+ }, {
414
+ defaultToken: "string.quasi"
415
+ }]
416
+ });
417
+
418
+ if (!options || !options.noJSX)
419
+ JSX.call(this);
420
+ }
421
+
422
+ this.embedRules(DocCommentHighlightRules, "doc-",
423
+ [ DocCommentHighlightRules.getEndRule("no_regex") ]);
424
+
425
+ this.normalizeRules();
426
+ };
427
+
428
+ oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
429
+
430
+ function JSX() {
431
+ var tagRegex = identifierRe.replace("\\d", "\\d\\-");
432
+ var jsxTag = {
433
+ onMatch : function(val, state, stack) {
434
+ var offset = val.charAt(1) == "/" ? 2 : 1;
435
+ if (offset == 1) {
436
+ if (state != this.nextState)
437
+ stack.unshift(this.next, this.nextState, 0);
438
+ else
439
+ stack.unshift(this.next);
440
+ stack[2]++;
441
+ } else if (offset == 2) {
442
+ if (state == this.nextState) {
443
+ stack[1]--;
444
+ if (!stack[1] || stack[1] < 0) {
445
+ stack.shift();
446
+ stack.shift();
447
+ }
448
+ }
449
+ }
450
+ return [{
451
+ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml",
452
+ value: val.slice(0, offset)
453
+ }, {
454
+ type: "meta.tag.tag-name.xml",
455
+ value: val.substr(offset)
456
+ }];
457
+ },
458
+ regex : "</?" + tagRegex + "",
459
+ next: "jsxAttributes",
460
+ nextState: "jsx"
461
+ };
462
+ this.$rules.start.unshift(jsxTag);
463
+ var jsxJsRule = {
464
+ regex: "{",
465
+ token: "paren.quasi.start",
466
+ push: "start"
467
+ };
468
+ this.$rules.jsx = [
469
+ jsxJsRule,
470
+ jsxTag,
471
+ {include : "reference"},
472
+ {defaultToken: "string"}
473
+ ];
474
+ this.$rules.jsxAttributes = [{
475
+ token : "meta.tag.punctuation.tag-close.xml",
476
+ regex : "/?>",
477
+ onMatch : function(value, currentState, stack) {
478
+ if (currentState == stack[0])
479
+ stack.shift();
480
+ if (value.length == 2) {
481
+ if (stack[0] == this.nextState)
482
+ stack[1]--;
483
+ if (!stack[1] || stack[1] < 0) {
484
+ stack.splice(0, 2);
485
+ }
486
+ }
487
+ this.next = stack[0] || "start";
488
+ return [{type: this.token, value: value}];
489
+ },
490
+ nextState: "jsx"
491
+ },
492
+ jsxJsRule,
493
+ {
494
+ token : "entity.other.attribute-name.xml",
495
+ regex : tagRegex
496
+ }, {
497
+ token : "keyword.operator.attribute-equals.xml",
498
+ regex : "="
499
+ }, {
500
+ token : "text.tag-whitespace.xml",
501
+ regex : "\\s+"
502
+ }, {
503
+ token : "string.attribute-value.xml",
504
+ regex : "'",
505
+ stateName : "jsx_attr_q",
506
+ push : [
507
+ {token : "string.attribute-value.xml", regex: "'", next: "pop"},
508
+ jsxJsRule,
509
+ {include : "reference"},
510
+ {defaultToken : "string.attribute-value.xml"}
511
+ ]
512
+ }, {
513
+ token : "string.attribute-value.xml",
514
+ regex : '"',
515
+ stateName : "jsx_attr_qq",
516
+ push : [
517
+ jsxJsRule,
518
+ {token : "string.attribute-value.xml", regex: '"', next: "pop"},
519
+ {include : "reference"},
520
+ {defaultToken : "string.attribute-value.xml"}
521
+ ]
522
+ }];
523
+ this.$rules.reference = [{
524
+ token : "constant.language.escape.reference.xml",
525
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
526
+ }];
527
+ }
528
+
529
+ exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
530
+ });
531
+
532
+ define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) {
533
+ "use strict";
534
+
535
+ var Range = require("../range").Range;
536
+
537
+ var MatchingBraceOutdent = function() {};
538
+
539
+ (function() {
540
+
541
+ this.checkOutdent = function(line, input) {
542
+ if (! /^\s+$/.test(line))
543
+ return false;
544
+
545
+ return /^\s*\}/.test(input);
546
+ };
547
+
548
+ this.autoOutdent = function(doc, row) {
549
+ var line = doc.getLine(row);
550
+ var match = line.match(/^(\s*\})/);
551
+
552
+ if (!match) return 0;
553
+
554
+ var column = match[1].length;
555
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
556
+
557
+ if (!openBracePos || openBracePos.row == row) return 0;
558
+
559
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
560
+ doc.replace(new Range(row, 0, row, column-1), indent);
561
+ };
562
+
563
+ this.$getIndent = function(line) {
564
+ return line.match(/^\s*/)[0];
565
+ };
566
+
567
+ }).call(MatchingBraceOutdent.prototype);
568
+
569
+ exports.MatchingBraceOutdent = MatchingBraceOutdent;
570
+ });
571
+
572
+ define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
573
+ "use strict";
574
+
575
+ var oop = require("../../lib/oop");
576
+ var Behaviour = require("../behaviour").Behaviour;
577
+ var TokenIterator = require("../../token_iterator").TokenIterator;
578
+ var lang = require("../../lib/lang");
579
+
580
+ var SAFE_INSERT_IN_TOKENS =
581
+ ["text", "paren.rparen", "punctuation.operator"];
582
+ var SAFE_INSERT_BEFORE_TOKENS =
583
+ ["text", "paren.rparen", "punctuation.operator", "comment"];
584
+
585
+ var context;
586
+ var contextCache = {};
587
+ var initContext = function(editor) {
588
+ var id = -1;
589
+ if (editor.multiSelect) {
590
+ id = editor.selection.index;
591
+ if (contextCache.rangeCount != editor.multiSelect.rangeCount)
592
+ contextCache = {rangeCount: editor.multiSelect.rangeCount};
593
+ }
594
+ if (contextCache[id])
595
+ return context = contextCache[id];
596
+ context = contextCache[id] = {
597
+ autoInsertedBrackets: 0,
598
+ autoInsertedRow: -1,
599
+ autoInsertedLineEnd: "",
600
+ maybeInsertedBrackets: 0,
601
+ maybeInsertedRow: -1,
602
+ maybeInsertedLineStart: "",
603
+ maybeInsertedLineEnd: ""
604
+ };
605
+ };
606
+
607
+ var getWrapped = function(selection, selected, opening, closing) {
608
+ var rowDiff = selection.end.row - selection.start.row;
609
+ return {
610
+ text: opening + selected + closing,
611
+ selection: [
612
+ 0,
613
+ selection.start.column + 1,
614
+ rowDiff,
615
+ selection.end.column + (rowDiff ? 0 : 1)
616
+ ]
617
+ };
618
+ };
619
+
620
+ var CstyleBehaviour = function() {
621
+ this.add("braces", "insertion", function(state, action, editor, session, text) {
622
+ var cursor = editor.getCursorPosition();
623
+ var line = session.doc.getLine(cursor.row);
624
+ if (text == '{') {
625
+ initContext(editor);
626
+ var selection = editor.getSelectionRange();
627
+ var selected = session.doc.getTextRange(selection);
628
+ if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
629
+ return getWrapped(selection, selected, '{', '}');
630
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
631
+ if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
632
+ CstyleBehaviour.recordAutoInsert(editor, session, "}");
633
+ return {
634
+ text: '{}',
635
+ selection: [1, 1]
636
+ };
637
+ } else {
638
+ CstyleBehaviour.recordMaybeInsert(editor, session, "{");
639
+ return {
640
+ text: '{',
641
+ selection: [1, 1]
642
+ };
643
+ }
644
+ }
645
+ } else if (text == '}') {
646
+ initContext(editor);
647
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
648
+ if (rightChar == '}') {
649
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
650
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
651
+ CstyleBehaviour.popAutoInsertedClosing();
652
+ return {
653
+ text: '',
654
+ selection: [1, 1]
655
+ };
656
+ }
657
+ }
658
+ } else if (text == "\n" || text == "\r\n") {
659
+ initContext(editor);
660
+ var closing = "";
661
+ if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
662
+ closing = lang.stringRepeat("}", context.maybeInsertedBrackets);
663
+ CstyleBehaviour.clearMaybeInsertedClosing();
664
+ }
665
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
666
+ if (rightChar === '}') {
667
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');
668
+ if (!openBracePos)
669
+ return null;
670
+ var next_indent = this.$getIndent(session.getLine(openBracePos.row));
671
+ } else if (closing) {
672
+ var next_indent = this.$getIndent(line);
673
+ } else {
674
+ CstyleBehaviour.clearMaybeInsertedClosing();
675
+ return;
676
+ }
677
+ var indent = next_indent + session.getTabString();
678
+
679
+ return {
680
+ text: '\n' + indent + '\n' + next_indent + closing,
681
+ selection: [1, indent.length, 1, indent.length]
682
+ };
683
+ } else {
684
+ CstyleBehaviour.clearMaybeInsertedClosing();
685
+ }
686
+ });
687
+
688
+ this.add("braces", "deletion", function(state, action, editor, session, range) {
689
+ var selected = session.doc.getTextRange(range);
690
+ if (!range.isMultiLine() && selected == '{') {
691
+ initContext(editor);
692
+ var line = session.doc.getLine(range.start.row);
693
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
694
+ if (rightChar == '}') {
695
+ range.end.column++;
696
+ return range;
697
+ } else {
698
+ context.maybeInsertedBrackets--;
699
+ }
700
+ }
701
+ });
702
+
703
+ this.add("parens", "insertion", function(state, action, editor, session, text) {
704
+ if (text == '(') {
705
+ initContext(editor);
706
+ var selection = editor.getSelectionRange();
707
+ var selected = session.doc.getTextRange(selection);
708
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
709
+ return getWrapped(selection, selected, '(', ')');
710
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
711
+ CstyleBehaviour.recordAutoInsert(editor, session, ")");
712
+ return {
713
+ text: '()',
714
+ selection: [1, 1]
715
+ };
716
+ }
717
+ } else if (text == ')') {
718
+ initContext(editor);
719
+ var cursor = editor.getCursorPosition();
720
+ var line = session.doc.getLine(cursor.row);
721
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
722
+ if (rightChar == ')') {
723
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
724
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
725
+ CstyleBehaviour.popAutoInsertedClosing();
726
+ return {
727
+ text: '',
728
+ selection: [1, 1]
729
+ };
730
+ }
731
+ }
732
+ }
733
+ });
734
+
735
+ this.add("parens", "deletion", function(state, action, editor, session, range) {
736
+ var selected = session.doc.getTextRange(range);
737
+ if (!range.isMultiLine() && selected == '(') {
738
+ initContext(editor);
739
+ var line = session.doc.getLine(range.start.row);
740
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
741
+ if (rightChar == ')') {
742
+ range.end.column++;
743
+ return range;
744
+ }
745
+ }
746
+ });
747
+
748
+ this.add("brackets", "insertion", function(state, action, editor, session, text) {
749
+ if (text == '[') {
750
+ initContext(editor);
751
+ var selection = editor.getSelectionRange();
752
+ var selected = session.doc.getTextRange(selection);
753
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
754
+ return getWrapped(selection, selected, '[', ']');
755
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
756
+ CstyleBehaviour.recordAutoInsert(editor, session, "]");
757
+ return {
758
+ text: '[]',
759
+ selection: [1, 1]
760
+ };
761
+ }
762
+ } else if (text == ']') {
763
+ initContext(editor);
764
+ var cursor = editor.getCursorPosition();
765
+ var line = session.doc.getLine(cursor.row);
766
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
767
+ if (rightChar == ']') {
768
+ var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
769
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
770
+ CstyleBehaviour.popAutoInsertedClosing();
771
+ return {
772
+ text: '',
773
+ selection: [1, 1]
774
+ };
775
+ }
776
+ }
777
+ }
778
+ });
779
+
780
+ this.add("brackets", "deletion", function(state, action, editor, session, range) {
781
+ var selected = session.doc.getTextRange(range);
782
+ if (!range.isMultiLine() && selected == '[') {
783
+ initContext(editor);
784
+ var line = session.doc.getLine(range.start.row);
785
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
786
+ if (rightChar == ']') {
787
+ range.end.column++;
788
+ return range;
789
+ }
790
+ }
791
+ });
792
+
793
+ this.add("string_dquotes", "insertion", function(state, action, editor, session, text) {
794
+ if (text == '"' || text == "'") {
795
+ initContext(editor);
796
+ var quote = text;
797
+ var selection = editor.getSelectionRange();
798
+ var selected = session.doc.getTextRange(selection);
799
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
800
+ return getWrapped(selection, selected, quote, quote);
801
+ } else if (!selected) {
802
+ var cursor = editor.getCursorPosition();
803
+ var line = session.doc.getLine(cursor.row);
804
+ var leftChar = line.substring(cursor.column-1, cursor.column);
805
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
806
+
807
+ var token = session.getTokenAt(cursor.row, cursor.column);
808
+ var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);
809
+ if (leftChar == "\\" && token && /escape/.test(token.type))
810
+ return null;
811
+
812
+ var stringBefore = token && /string|escape/.test(token.type);
813
+ var stringAfter = !rightToken || /string|escape/.test(rightToken.type);
814
+
815
+ var pair;
816
+ if (rightChar == quote) {
817
+ pair = stringBefore !== stringAfter;
818
+ } else {
819
+ if (stringBefore && !stringAfter)
820
+ return null; // wrap string with different quote
821
+ if (stringBefore && stringAfter)
822
+ return null; // do not pair quotes inside strings
823
+ var wordRe = session.$mode.tokenRe;
824
+ wordRe.lastIndex = 0;
825
+ var isWordBefore = wordRe.test(leftChar);
826
+ wordRe.lastIndex = 0;
827
+ var isWordAfter = wordRe.test(leftChar);
828
+ if (isWordBefore || isWordAfter)
829
+ return null; // before or after alphanumeric
830
+ if (rightChar && !/[\s;,.})\]\\]/.test(rightChar))
831
+ return null; // there is rightChar and it isn't closing
832
+ pair = true;
833
+ }
834
+ return {
835
+ text: pair ? quote + quote : "",
836
+ selection: [1,1]
837
+ };
838
+ }
839
+ }
840
+ });
841
+
842
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
843
+ var selected = session.doc.getTextRange(range);
844
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
845
+ initContext(editor);
846
+ var line = session.doc.getLine(range.start.row);
847
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
848
+ if (rightChar == selected) {
849
+ range.end.column++;
850
+ return range;
851
+ }
852
+ }
853
+ });
854
+
855
+ };
856
+
857
+
858
+ CstyleBehaviour.isSaneInsertion = function(editor, session) {
859
+ var cursor = editor.getCursorPosition();
860
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
861
+ if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
862
+ var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
863
+ if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
864
+ return false;
865
+ }
866
+ iterator.stepForward();
867
+ return iterator.getCurrentTokenRow() !== cursor.row ||
868
+ this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
869
+ };
870
+
871
+ CstyleBehaviour.$matchTokenType = function(token, types) {
872
+ return types.indexOf(token.type || token) > -1;
873
+ };
874
+
875
+ CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
876
+ var cursor = editor.getCursorPosition();
877
+ var line = session.doc.getLine(cursor.row);
878
+ if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))
879
+ context.autoInsertedBrackets = 0;
880
+ context.autoInsertedRow = cursor.row;
881
+ context.autoInsertedLineEnd = bracket + line.substr(cursor.column);
882
+ context.autoInsertedBrackets++;
883
+ };
884
+
885
+ CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
886
+ var cursor = editor.getCursorPosition();
887
+ var line = session.doc.getLine(cursor.row);
888
+ if (!this.isMaybeInsertedClosing(cursor, line))
889
+ context.maybeInsertedBrackets = 0;
890
+ context.maybeInsertedRow = cursor.row;
891
+ context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
892
+ context.maybeInsertedLineEnd = line.substr(cursor.column);
893
+ context.maybeInsertedBrackets++;
894
+ };
895
+
896
+ CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
897
+ return context.autoInsertedBrackets > 0 &&
898
+ cursor.row === context.autoInsertedRow &&
899
+ bracket === context.autoInsertedLineEnd[0] &&
900
+ line.substr(cursor.column) === context.autoInsertedLineEnd;
901
+ };
902
+
903
+ CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
904
+ return context.maybeInsertedBrackets > 0 &&
905
+ cursor.row === context.maybeInsertedRow &&
906
+ line.substr(cursor.column) === context.maybeInsertedLineEnd &&
907
+ line.substr(0, cursor.column) == context.maybeInsertedLineStart;
908
+ };
909
+
910
+ CstyleBehaviour.popAutoInsertedClosing = function() {
911
+ context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);
912
+ context.autoInsertedBrackets--;
913
+ };
914
+
915
+ CstyleBehaviour.clearMaybeInsertedClosing = function() {
916
+ if (context) {
917
+ context.maybeInsertedBrackets = 0;
918
+ context.maybeInsertedRow = -1;
919
+ }
920
+ };
921
+
922
+
923
+
924
+ oop.inherits(CstyleBehaviour, Behaviour);
925
+
926
+ exports.CstyleBehaviour = CstyleBehaviour;
927
+ });
928
+
929
+ define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
930
+ "use strict";
931
+
932
+ var oop = require("../../lib/oop");
933
+ var Range = require("../../range").Range;
934
+ var BaseFoldMode = require("./fold_mode").FoldMode;
935
+
936
+ var FoldMode = exports.FoldMode = function(commentRegex) {
937
+ if (commentRegex) {
938
+ this.foldingStartMarker = new RegExp(
939
+ this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
940
+ );
941
+ this.foldingStopMarker = new RegExp(
942
+ this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
943
+ );
944
+ }
945
+ };
946
+ oop.inherits(FoldMode, BaseFoldMode);
947
+
948
+ (function() {
949
+
950
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
951
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
952
+ this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
953
+ this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
954
+ this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
955
+ this._getFoldWidgetBase = this.getFoldWidget;
956
+ this.getFoldWidget = function(session, foldStyle, row) {
957
+ var line = session.getLine(row);
958
+
959
+ if (this.singleLineBlockCommentRe.test(line)) {
960
+ if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
961
+ return "";
962
+ }
963
+
964
+ var fw = this._getFoldWidgetBase(session, foldStyle, row);
965
+
966
+ if (!fw && this.startRegionRe.test(line))
967
+ return "start"; // lineCommentRegionStart
968
+
969
+ return fw;
970
+ };
971
+
972
+ this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
973
+ var line = session.getLine(row);
974
+
975
+ if (this.startRegionRe.test(line))
976
+ return this.getCommentRegionBlock(session, line, row);
977
+
978
+ var match = line.match(this.foldingStartMarker);
979
+ if (match) {
980
+ var i = match.index;
981
+
982
+ if (match[1])
983
+ return this.openingBracketBlock(session, match[1], row, i);
984
+
985
+ var range = session.getCommentFoldRange(row, i + match[0].length, 1);
986
+
987
+ if (range && !range.isMultiLine()) {
988
+ if (forceMultiline) {
989
+ range = this.getSectionRange(session, row);
990
+ } else if (foldStyle != "all")
991
+ range = null;
992
+ }
993
+
994
+ return range;
995
+ }
996
+
997
+ if (foldStyle === "markbegin")
998
+ return;
999
+
1000
+ var match = line.match(this.foldingStopMarker);
1001
+ if (match) {
1002
+ var i = match.index + match[0].length;
1003
+
1004
+ if (match[1])
1005
+ return this.closingBracketBlock(session, match[1], row, i);
1006
+
1007
+ return session.getCommentFoldRange(row, i, -1);
1008
+ }
1009
+ };
1010
+
1011
+ this.getSectionRange = function(session, row) {
1012
+ var line = session.getLine(row);
1013
+ var startIndent = line.search(/\S/);
1014
+ var startRow = row;
1015
+ var startColumn = line.length;
1016
+ row = row + 1;
1017
+ var endRow = row;
1018
+ var maxRow = session.getLength();
1019
+ while (++row < maxRow) {
1020
+ line = session.getLine(row);
1021
+ var indent = line.search(/\S/);
1022
+ if (indent === -1)
1023
+ continue;
1024
+ if (startIndent > indent)
1025
+ break;
1026
+ var subRange = this.getFoldWidgetRange(session, "all", row);
1027
+
1028
+ if (subRange) {
1029
+ if (subRange.start.row <= startRow) {
1030
+ break;
1031
+ } else if (subRange.isMultiLine()) {
1032
+ row = subRange.end.row;
1033
+ } else if (startIndent == indent) {
1034
+ break;
1035
+ }
1036
+ }
1037
+ endRow = row;
1038
+ }
1039
+
1040
+ return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
1041
+ };
1042
+ this.getCommentRegionBlock = function(session, line, row) {
1043
+ var startColumn = line.search(/\s*$/);
1044
+ var maxRow = session.getLength();
1045
+ var startRow = row;
1046
+
1047
+ var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
1048
+ var depth = 1;
1049
+ while (++row < maxRow) {
1050
+ line = session.getLine(row);
1051
+ var m = re.exec(line);
1052
+ if (!m) continue;
1053
+ if (m[1]) depth--;
1054
+ else depth++;
1055
+
1056
+ if (!depth) break;
1057
+ }
1058
+
1059
+ var endRow = row;
1060
+ if (endRow > startRow) {
1061
+ return new Range(startRow, startColumn, endRow, line.length);
1062
+ }
1063
+ };
1064
+
1065
+ }).call(FoldMode.prototype);
1066
+
1067
+ });
1068
+
1069
+ define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) {
1070
+ "use strict";
1071
+
1072
+ var oop = require("../lib/oop");
1073
+ var TextMode = require("./text").Mode;
1074
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
1075
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
1076
+ var Range = require("../range").Range;
1077
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
1078
+ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
1079
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
1080
+
1081
+ var Mode = function() {
1082
+ this.HighlightRules = JavaScriptHighlightRules;
1083
+
1084
+ this.$outdent = new MatchingBraceOutdent();
1085
+ this.$behaviour = new CstyleBehaviour();
1086
+ this.foldingRules = new CStyleFoldMode();
1087
+ };
1088
+ oop.inherits(Mode, TextMode);
1089
+
1090
+ (function() {
1091
+
1092
+ this.lineCommentStart = "//";
1093
+ this.blockComment = {start: "/*", end: "*/"};
1094
+
1095
+ this.getNextLineIndent = function(state, line, tab) {
1096
+ var indent = this.$getIndent(line);
1097
+
1098
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
1099
+ var tokens = tokenizedLine.tokens;
1100
+ var endState = tokenizedLine.state;
1101
+
1102
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
1103
+ return indent;
1104
+ }
1105
+
1106
+ if (state == "start" || state == "no_regex") {
1107
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
1108
+ if (match) {
1109
+ indent += tab;
1110
+ }
1111
+ } else if (state == "doc-start") {
1112
+ if (endState == "start" || endState == "no_regex") {
1113
+ return "";
1114
+ }
1115
+ var match = line.match(/^\s*(\/?)\*/);
1116
+ if (match) {
1117
+ if (match[1]) {
1118
+ indent += " ";
1119
+ }
1120
+ indent += "* ";
1121
+ }
1122
+ }
1123
+
1124
+ return indent;
1125
+ };
1126
+
1127
+ this.checkOutdent = function(state, line, input) {
1128
+ return this.$outdent.checkOutdent(line, input);
1129
+ };
1130
+
1131
+ this.autoOutdent = function(state, doc, row) {
1132
+ this.$outdent.autoOutdent(doc, row);
1133
+ };
1134
+
1135
+ this.createWorker = function(session) {
1136
+ var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
1137
+ worker.attachToDocument(session.getDocument());
1138
+
1139
+ worker.on("annotate", function(results) {
1140
+ session.setAnnotations(results.data);
1141
+ });
1142
+
1143
+ worker.on("terminate", function() {
1144
+ session.clearAnnotations();
1145
+ });
1146
+
1147
+ return worker;
1148
+ };
1149
+
1150
+ this.$id = "ace/mode/javascript";
1151
+ }).call(Mode.prototype);
1152
+
1153
+ exports.Mode = Mode;
1154
+ });
1155
+
1156
+ define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) {
1157
+ "use strict";
1158
+
1159
+ var oop = require("../lib/oop");
1160
+ var lang = require("../lib/lang");
1161
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
1162
+ var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index";
1163
+ var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
1164
+ var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";
1165
+ var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";
1166
+ var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
1167
+
1168
+ var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
1169
+ var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
1170
+ var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
1171
+
1172
+ var CssHighlightRules = function() {
1173
+
1174
+ var keywordMapper = this.createKeywordMapper({
1175
+ "support.function": supportFunction,
1176
+ "support.constant": supportConstant,
1177
+ "support.type": supportType,
1178
+ "support.constant.color": supportConstantColor,
1179
+ "support.constant.fonts": supportConstantFonts
1180
+ }, "text", true);
1181
+
1182
+ this.$rules = {
1183
+ "start" : [{
1184
+ token : "comment", // multi line comment
1185
+ regex : "\\/\\*",
1186
+ push : "comment"
1187
+ }, {
1188
+ token: "paren.lparen",
1189
+ regex: "\\{",
1190
+ push: "ruleset"
1191
+ }, {
1192
+ token: "string",
1193
+ regex: "@.*?{",
1194
+ push: "media"
1195
+ }, {
1196
+ token: "keyword",
1197
+ regex: "#[a-z0-9-_]+"
1198
+ }, {
1199
+ token: "variable",
1200
+ regex: "\\.[a-z0-9-_]+"
1201
+ }, {
1202
+ token: "string",
1203
+ regex: ":[a-z0-9-_]+"
1204
+ }, {
1205
+ token: "constant",
1206
+ regex: "[a-z0-9-_]+"
1207
+ }, {
1208
+ caseInsensitive: true
1209
+ }],
1210
+
1211
+ "media" : [{
1212
+ token : "comment", // multi line comment
1213
+ regex : "\\/\\*",
1214
+ push : "comment"
1215
+ }, {
1216
+ token: "paren.lparen",
1217
+ regex: "\\{",
1218
+ push: "ruleset"
1219
+ }, {
1220
+ token: "string",
1221
+ regex: "\\}",
1222
+ next: "pop"
1223
+ }, {
1224
+ token: "keyword",
1225
+ regex: "#[a-z0-9-_]+"
1226
+ }, {
1227
+ token: "variable",
1228
+ regex: "\\.[a-z0-9-_]+"
1229
+ }, {
1230
+ token: "string",
1231
+ regex: ":[a-z0-9-_]+"
1232
+ }, {
1233
+ token: "constant",
1234
+ regex: "[a-z0-9-_]+"
1235
+ }, {
1236
+ caseInsensitive: true
1237
+ }],
1238
+
1239
+ "comment" : [{
1240
+ token : "comment",
1241
+ regex : "\\*\\/",
1242
+ next : "pop"
1243
+ }, {
1244
+ defaultToken : "comment"
1245
+ }],
1246
+
1247
+ "ruleset" : [
1248
+ {
1249
+ token : "paren.rparen",
1250
+ regex : "\\}",
1251
+ next: "pop"
1252
+ }, {
1253
+ token : "comment", // multi line comment
1254
+ regex : "\\/\\*",
1255
+ push : "comment"
1256
+ }, {
1257
+ token : "string", // single line
1258
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
1259
+ }, {
1260
+ token : "string", // single line
1261
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
1262
+ }, {
1263
+ token : ["constant.numeric", "keyword"],
1264
+ regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"
1265
+ }, {
1266
+ token : "constant.numeric",
1267
+ regex : numRe
1268
+ }, {
1269
+ token : "constant.numeric", // hex6 color
1270
+ regex : "#[a-f0-9]{6}"
1271
+ }, {
1272
+ token : "constant.numeric", // hex3 color
1273
+ regex : "#[a-f0-9]{3}"
1274
+ }, {
1275
+ token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
1276
+ regex : pseudoElements
1277
+ }, {
1278
+ token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
1279
+ regex : pseudoClasses
1280
+ }, {
1281
+ token : ["support.function", "string", "support.function"],
1282
+ regex : "(url\\()(.*)(\\))"
1283
+ }, {
1284
+ token : keywordMapper,
1285
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
1286
+ }, {
1287
+ caseInsensitive: true
1288
+ }]
1289
+ };
1290
+
1291
+ this.normalizeRules();
1292
+ };
1293
+
1294
+ oop.inherits(CssHighlightRules, TextHighlightRules);
1295
+
1296
+ exports.CssHighlightRules = CssHighlightRules;
1297
+
1298
+ });
1299
+
1300
+ define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) {
1301
+ "use strict";
1302
+
1303
+ var propertyMap = {
1304
+ "background": {"#$0": 1},
1305
+ "background-color": {"#$0": 1, "transparent": 1, "fixed": 1},
1306
+ "background-image": {"url('/$0')": 1},
1307
+ "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1},
1308
+ "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2,},
1309
+ "background-attachment": {"scroll": 1, "fixed": 1},
1310
+ "background-size": {"cover": 1, "contain": 1},
1311
+ "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1},
1312
+ "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1},
1313
+ "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1},
1314
+ "border-color": {"#$0": 1},
1315
+ "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2,},
1316
+ "border-collapse": {"collapse": 1, "separate": 1},
1317
+ "bottom": {"px": 1, "em": 1, "%": 1},
1318
+ "clear": {"left": 1, "right": 1, "both": 1, "none": 1},
1319
+ "color": {"#$0": 1, "rgb(#$00,0,0)": 1},
1320
+ "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1},
1321
+ "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1},
1322
+ "empty-cells": {"show": 1, "hide": 1},
1323
+ "float": {"left": 1, "right": 1, "none": 1},
1324
+ "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1},
1325
+ "font-size": {"px": 1, "em": 1, "%": 1},
1326
+ "font-weight": {"bold": 1, "normal": 1},
1327
+ "font-style": {"italic": 1, "normal": 1},
1328
+ "font-variant": {"normal": 1, "small-caps": 1},
1329
+ "height": {"px": 1, "em": 1, "%": 1},
1330
+ "left": {"px": 1, "em": 1, "%": 1},
1331
+ "letter-spacing": {"normal": 1},
1332
+ "line-height": {"normal": 1},
1333
+ "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1},
1334
+ "margin": {"px": 1, "em": 1, "%": 1},
1335
+ "margin-right": {"px": 1, "em": 1, "%": 1},
1336
+ "margin-left": {"px": 1, "em": 1, "%": 1},
1337
+ "margin-top": {"px": 1, "em": 1, "%": 1},
1338
+ "margin-bottom": {"px": 1, "em": 1, "%": 1},
1339
+ "max-height": {"px": 1, "em": 1, "%": 1},
1340
+ "max-width": {"px": 1, "em": 1, "%": 1},
1341
+ "min-height": {"px": 1, "em": 1, "%": 1},
1342
+ "min-width": {"px": 1, "em": 1, "%": 1},
1343
+ "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
1344
+ "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
1345
+ "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
1346
+ "padding": {"px": 1, "em": 1, "%": 1},
1347
+ "padding-top": {"px": 1, "em": 1, "%": 1},
1348
+ "padding-right": {"px": 1, "em": 1, "%": 1},
1349
+ "padding-bottom": {"px": 1, "em": 1, "%": 1},
1350
+ "padding-left": {"px": 1, "em": 1, "%": 1},
1351
+ "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
1352
+ "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
1353
+ "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1},
1354
+ "right": {"px": 1, "em": 1, "%": 1},
1355
+ "table-layout": {"fixed": 1, "auto": 1},
1356
+ "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1},
1357
+ "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1},
1358
+ "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1},
1359
+ "top": {"px": 1, "em": 1, "%": 1},
1360
+ "vertical-align": {"top": 1, "bottom": 1},
1361
+ "visibility": {"hidden": 1, "visible": 1},
1362
+ "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1},
1363
+ "width": {"px": 1, "em": 1, "%": 1},
1364
+ "word-spacing": {"normal": 1},
1365
+ "filter": {"alpha(opacity=$0100)": 1},
1366
+
1367
+ "text-shadow": {"$02px 2px 2px #777": 1},
1368
+ "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1},
1369
+ "-moz-border-radius": 1,
1370
+ "-moz-border-radius-topright": 1,
1371
+ "-moz-border-radius-bottomright": 1,
1372
+ "-moz-border-radius-topleft": 1,
1373
+ "-moz-border-radius-bottomleft": 1,
1374
+ "-webkit-border-radius": 1,
1375
+ "-webkit-border-top-right-radius": 1,
1376
+ "-webkit-border-top-left-radius": 1,
1377
+ "-webkit-border-bottom-right-radius": 1,
1378
+ "-webkit-border-bottom-left-radius": 1,
1379
+ "-moz-box-shadow": 1,
1380
+ "-webkit-box-shadow": 1,
1381
+ "transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
1382
+ "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
1383
+ "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 }
1384
+ };
1385
+
1386
+ var CssCompletions = function() {
1387
+
1388
+ };
1389
+
1390
+ (function() {
1391
+
1392
+ this.completionsDefined = false;
1393
+
1394
+ this.defineCompletions = function() {
1395
+ if (document) {
1396
+ var style = document.createElement('c').style;
1397
+
1398
+ for (var i in style) {
1399
+ if (typeof style[i] !== 'string')
1400
+ continue;
1401
+
1402
+ var name = i.replace(/[A-Z]/g, function(x) {
1403
+ return '-' + x.toLowerCase();
1404
+ });
1405
+
1406
+ if (!propertyMap.hasOwnProperty(name))
1407
+ propertyMap[name] = 1;
1408
+ }
1409
+ }
1410
+
1411
+ this.completionsDefined = true;
1412
+ }
1413
+
1414
+ this.getCompletions = function(state, session, pos, prefix) {
1415
+ if (!this.completionsDefined) {
1416
+ this.defineCompletions();
1417
+ }
1418
+
1419
+ var token = session.getTokenAt(pos.row, pos.column);
1420
+
1421
+ if (!token)
1422
+ return [];
1423
+ if (state==='ruleset'){
1424
+ var line = session.getLine(pos.row).substr(0, pos.column);
1425
+ if (/:[^;]+$/.test(line)) {
1426
+ /([\w\-]+):[^:]*$/.test(line);
1427
+
1428
+ return this.getPropertyValueCompletions(state, session, pos, prefix);
1429
+ } else {
1430
+ return this.getPropertyCompletions(state, session, pos, prefix);
1431
+ }
1432
+ }
1433
+
1434
+ return [];
1435
+ };
1436
+
1437
+ this.getPropertyCompletions = function(state, session, pos, prefix) {
1438
+ var properties = Object.keys(propertyMap);
1439
+ return properties.map(function(property){
1440
+ return {
1441
+ caption: property,
1442
+ snippet: property + ': $0',
1443
+ meta: "property",
1444
+ score: Number.MAX_VALUE
1445
+ };
1446
+ });
1447
+ };
1448
+
1449
+ this.getPropertyValueCompletions = function(state, session, pos, prefix) {
1450
+ var line = session.getLine(pos.row).substr(0, pos.column);
1451
+ var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1];
1452
+
1453
+ if (!property)
1454
+ return [];
1455
+ var values = [];
1456
+ if (property in propertyMap && typeof propertyMap[property] === "object") {
1457
+ values = Object.keys(propertyMap[property]);
1458
+ }
1459
+ return values.map(function(value){
1460
+ return {
1461
+ caption: value,
1462
+ snippet: value,
1463
+ meta: "property value",
1464
+ score: Number.MAX_VALUE
1465
+ };
1466
+ });
1467
+ };
1468
+
1469
+ }).call(CssCompletions.prototype);
1470
+
1471
+ exports.CssCompletions = CssCompletions;
1472
+ });
1473
+
1474
+ define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) {
1475
+ "use strict";
1476
+
1477
+ var oop = require("../../lib/oop");
1478
+ var Behaviour = require("../behaviour").Behaviour;
1479
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
1480
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1481
+
1482
+ var CssBehaviour = function () {
1483
+
1484
+ this.inherit(CstyleBehaviour);
1485
+
1486
+ this.add("colon", "insertion", function (state, action, editor, session, text) {
1487
+ if (text === ':') {
1488
+ var cursor = editor.getCursorPosition();
1489
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1490
+ var token = iterator.getCurrentToken();
1491
+ if (token && token.value.match(/\s+/)) {
1492
+ token = iterator.stepBackward();
1493
+ }
1494
+ if (token && token.type === 'support.type') {
1495
+ var line = session.doc.getLine(cursor.row);
1496
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1497
+ if (rightChar === ':') {
1498
+ return {
1499
+ text: '',
1500
+ selection: [1, 1]
1501
+ }
1502
+ }
1503
+ if (!line.substring(cursor.column).match(/^\s*;/)) {
1504
+ return {
1505
+ text: ':;',
1506
+ selection: [1, 1]
1507
+ }
1508
+ }
1509
+ }
1510
+ }
1511
+ });
1512
+
1513
+ this.add("colon", "deletion", function (state, action, editor, session, range) {
1514
+ var selected = session.doc.getTextRange(range);
1515
+ if (!range.isMultiLine() && selected === ':') {
1516
+ var cursor = editor.getCursorPosition();
1517
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1518
+ var token = iterator.getCurrentToken();
1519
+ if (token && token.value.match(/\s+/)) {
1520
+ token = iterator.stepBackward();
1521
+ }
1522
+ if (token && token.type === 'support.type') {
1523
+ var line = session.doc.getLine(range.start.row);
1524
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
1525
+ if (rightChar === ';') {
1526
+ range.end.column ++;
1527
+ return range;
1528
+ }
1529
+ }
1530
+ }
1531
+ });
1532
+
1533
+ this.add("semicolon", "insertion", function (state, action, editor, session, text) {
1534
+ if (text === ';') {
1535
+ var cursor = editor.getCursorPosition();
1536
+ var line = session.doc.getLine(cursor.row);
1537
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1538
+ if (rightChar === ';') {
1539
+ return {
1540
+ text: '',
1541
+ selection: [1, 1]
1542
+ }
1543
+ }
1544
+ }
1545
+ });
1546
+
1547
+ }
1548
+ oop.inherits(CssBehaviour, CstyleBehaviour);
1549
+
1550
+ exports.CssBehaviour = CssBehaviour;
1551
+ });
1552
+
1553
+ define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) {
1554
+ "use strict";
1555
+
1556
+ var oop = require("../lib/oop");
1557
+ var TextMode = require("./text").Mode;
1558
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1559
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
1560
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
1561
+ var CssCompletions = require("./css_completions").CssCompletions;
1562
+ var CssBehaviour = require("./behaviour/css").CssBehaviour;
1563
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
1564
+
1565
+ var Mode = function() {
1566
+ this.HighlightRules = CssHighlightRules;
1567
+ this.$outdent = new MatchingBraceOutdent();
1568
+ this.$behaviour = new CssBehaviour();
1569
+ this.$completer = new CssCompletions();
1570
+ this.foldingRules = new CStyleFoldMode();
1571
+ };
1572
+ oop.inherits(Mode, TextMode);
1573
+
1574
+ (function() {
1575
+
1576
+ this.foldingRules = "cStyle";
1577
+ this.blockComment = {start: "/*", end: "*/"};
1578
+
1579
+ this.getNextLineIndent = function(state, line, tab) {
1580
+ var indent = this.$getIndent(line);
1581
+ var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
1582
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
1583
+ return indent;
1584
+ }
1585
+
1586
+ var match = line.match(/^.*\{\s*$/);
1587
+ if (match) {
1588
+ indent += tab;
1589
+ }
1590
+
1591
+ return indent;
1592
+ };
1593
+
1594
+ this.checkOutdent = function(state, line, input) {
1595
+ return this.$outdent.checkOutdent(line, input);
1596
+ };
1597
+
1598
+ this.autoOutdent = function(state, doc, row) {
1599
+ this.$outdent.autoOutdent(doc, row);
1600
+ };
1601
+
1602
+ this.getCompletions = function(state, session, pos, prefix) {
1603
+ return this.$completer.getCompletions(state, session, pos, prefix);
1604
+ };
1605
+
1606
+ this.createWorker = function(session) {
1607
+ var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
1608
+ worker.attachToDocument(session.getDocument());
1609
+
1610
+ worker.on("annotate", function(e) {
1611
+ session.setAnnotations(e.data);
1612
+ });
1613
+
1614
+ worker.on("terminate", function() {
1615
+ session.clearAnnotations();
1616
+ });
1617
+
1618
+ return worker;
1619
+ };
1620
+
1621
+ this.$id = "ace/mode/css";
1622
+ }).call(Mode.prototype);
1623
+
1624
+ exports.Mode = Mode;
1625
+
1626
+ });
1627
+
1628
+ define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
1629
+ "use strict";
1630
+
1631
+ var oop = require("../lib/oop");
1632
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
1633
+
1634
+ var XmlHighlightRules = function(normalize) {
1635
+ var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
1636
+
1637
+ this.$rules = {
1638
+ start : [
1639
+ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"},
1640
+ {
1641
+ token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"],
1642
+ regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true
1643
+ },
1644
+ {
1645
+ token : ["punctuation.instruction.xml", "keyword.instruction.xml"],
1646
+ regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction",
1647
+ },
1648
+ {token : "comment.xml", regex : "<\\!--", next : "comment"},
1649
+ {
1650
+ token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"],
1651
+ regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true
1652
+ },
1653
+ {include : "tag"},
1654
+ {token : "text.end-tag-open.xml", regex: "</"},
1655
+ {token : "text.tag-open.xml", regex: "<"},
1656
+ {include : "reference"},
1657
+ {defaultToken : "text.xml"}
1658
+ ],
1659
+
1660
+ xml_decl : [{
1661
+ token : "entity.other.attribute-name.decl-attribute-name.xml",
1662
+ regex : "(?:" + tagRegex + ":)?" + tagRegex + ""
1663
+ }, {
1664
+ token : "keyword.operator.decl-attribute-equals.xml",
1665
+ regex : "="
1666
+ }, {
1667
+ include: "whitespace"
1668
+ }, {
1669
+ include: "string"
1670
+ }, {
1671
+ token : "punctuation.xml-decl.xml",
1672
+ regex : "\\?>",
1673
+ next : "start"
1674
+ }],
1675
+
1676
+ processing_instruction : [
1677
+ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"},
1678
+ {defaultToken : "instruction.xml"}
1679
+ ],
1680
+
1681
+ doctype : [
1682
+ {include : "whitespace"},
1683
+ {include : "string"},
1684
+ {token : "xml-pe.doctype.xml", regex : ">", next : "start"},
1685
+ {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"},
1686
+ {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"}
1687
+ ],
1688
+
1689
+ int_subset : [{
1690
+ token : "text.xml",
1691
+ regex : "\\s+"
1692
+ }, {
1693
+ token: "punctuation.int-subset.xml",
1694
+ regex: "]",
1695
+ next: "pop"
1696
+ }, {
1697
+ token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"],
1698
+ regex : "(<\\!)(" + tagRegex + ")",
1699
+ push : [{
1700
+ token : "text",
1701
+ regex : "\\s+"
1702
+ },
1703
+ {
1704
+ token : "punctuation.markup-decl.xml",
1705
+ regex : ">",
1706
+ next : "pop"
1707
+ },
1708
+ {include : "string"}]
1709
+ }],
1710
+
1711
+ cdata : [
1712
+ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"},
1713
+ {token : "text.xml", regex : "\\s+"},
1714
+ {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"}
1715
+ ],
1716
+
1717
+ comment : [
1718
+ {token : "comment.xml", regex : "-->", next : "start"},
1719
+ {defaultToken : "comment.xml"}
1720
+ ],
1721
+
1722
+ reference : [{
1723
+ token : "constant.language.escape.reference.xml",
1724
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1725
+ }],
1726
+
1727
+ attr_reference : [{
1728
+ token : "constant.language.escape.reference.attribute-value.xml",
1729
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1730
+ }],
1731
+
1732
+ tag : [{
1733
+ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"],
1734
+ regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")",
1735
+ next: [
1736
+ {include : "attributes"},
1737
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
1738
+ ]
1739
+ }],
1740
+
1741
+ tag_whitespace : [
1742
+ {token : "text.tag-whitespace.xml", regex : "\\s+"}
1743
+ ],
1744
+ whitespace : [
1745
+ {token : "text.whitespace.xml", regex : "\\s+"}
1746
+ ],
1747
+ string: [{
1748
+ token : "string.xml",
1749
+ regex : "'",
1750
+ push : [
1751
+ {token : "string.xml", regex: "'", next: "pop"},
1752
+ {defaultToken : "string.xml"}
1753
+ ]
1754
+ }, {
1755
+ token : "string.xml",
1756
+ regex : '"',
1757
+ push : [
1758
+ {token : "string.xml", regex: '"', next: "pop"},
1759
+ {defaultToken : "string.xml"}
1760
+ ]
1761
+ }],
1762
+
1763
+ attributes: [{
1764
+ token : "entity.other.attribute-name.xml",
1765
+ regex : "(?:" + tagRegex + ":)?" + tagRegex + ""
1766
+ }, {
1767
+ token : "keyword.operator.attribute-equals.xml",
1768
+ regex : "="
1769
+ }, {
1770
+ include: "tag_whitespace"
1771
+ }, {
1772
+ include: "attribute_value"
1773
+ }],
1774
+
1775
+ attribute_value: [{
1776
+ token : "string.attribute-value.xml",
1777
+ regex : "'",
1778
+ push : [
1779
+ {token : "string.attribute-value.xml", regex: "'", next: "pop"},
1780
+ {include : "attr_reference"},
1781
+ {defaultToken : "string.attribute-value.xml"}
1782
+ ]
1783
+ }, {
1784
+ token : "string.attribute-value.xml",
1785
+ regex : '"',
1786
+ push : [
1787
+ {token : "string.attribute-value.xml", regex: '"', next: "pop"},
1788
+ {include : "attr_reference"},
1789
+ {defaultToken : "string.attribute-value.xml"}
1790
+ ]
1791
+ }]
1792
+ };
1793
+
1794
+ if (this.constructor === XmlHighlightRules)
1795
+ this.normalizeRules();
1796
+ };
1797
+
1798
+
1799
+ (function() {
1800
+
1801
+ this.embedTagRules = function(HighlightRules, prefix, tag){
1802
+ this.$rules.tag.unshift({
1803
+ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
1804
+ regex : "(<)(" + tag + "(?=\\s|>|$))",
1805
+ next: [
1806
+ {include : "attributes"},
1807
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"}
1808
+ ]
1809
+ });
1810
+
1811
+ this.$rules[tag + "-end"] = [
1812
+ {include : "attributes"},
1813
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start",
1814
+ onMatch : function(value, currentState, stack) {
1815
+ stack.splice(0);
1816
+ return this.token;
1817
+ }}
1818
+ ]
1819
+
1820
+ this.embedRules(HighlightRules, prefix, [{
1821
+ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
1822
+ regex : "(</)(" + tag + "(?=\\s|>|$))",
1823
+ next: tag + "-end"
1824
+ }, {
1825
+ token: "string.cdata.xml",
1826
+ regex : "<\\!\\[CDATA\\["
1827
+ }, {
1828
+ token: "string.cdata.xml",
1829
+ regex : "\\]\\]>"
1830
+ }]);
1831
+ };
1832
+
1833
+ }).call(TextHighlightRules.prototype);
1834
+
1835
+ oop.inherits(XmlHighlightRules, TextHighlightRules);
1836
+
1837
+ exports.XmlHighlightRules = XmlHighlightRules;
1838
+ });
1839
+
1840
+ define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) {
1841
+ "use strict";
1842
+
1843
+ var oop = require("../lib/oop");
1844
+ var lang = require("../lib/lang");
1845
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1846
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
1847
+ var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
1848
+
1849
+ var tagMap = lang.createMap({
1850
+ a : 'anchor',
1851
+ button : 'form',
1852
+ form : 'form',
1853
+ img : 'image',
1854
+ input : 'form',
1855
+ label : 'form',
1856
+ option : 'form',
1857
+ script : 'script',
1858
+ select : 'form',
1859
+ textarea : 'form',
1860
+ style : 'style',
1861
+ table : 'table',
1862
+ tbody : 'table',
1863
+ td : 'table',
1864
+ tfoot : 'table',
1865
+ th : 'table',
1866
+ tr : 'table'
1867
+ });
1868
+
1869
+ var HtmlHighlightRules = function() {
1870
+ XmlHighlightRules.call(this);
1871
+
1872
+ this.addRules({
1873
+ attributes: [{
1874
+ include : "tag_whitespace"
1875
+ }, {
1876
+ token : "entity.other.attribute-name.xml",
1877
+ regex : "[-_a-zA-Z0-9:.]+"
1878
+ }, {
1879
+ token : "keyword.operator.attribute-equals.xml",
1880
+ regex : "=",
1881
+ push : [{
1882
+ include: "tag_whitespace"
1883
+ }, {
1884
+ token : "string.unquoted.attribute-value.html",
1885
+ regex : "[^<>='\"`\\s]+",
1886
+ next : "pop"
1887
+ }, {
1888
+ token : "empty",
1889
+ regex : "",
1890
+ next : "pop"
1891
+ }]
1892
+ }, {
1893
+ include : "attribute_value"
1894
+ }],
1895
+ tag: [{
1896
+ token : function(start, tag) {
1897
+ var group = tagMap[tag];
1898
+ return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
1899
+ "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
1900
+ },
1901
+ regex : "(</?)([-_a-zA-Z0-9:.]+)",
1902
+ next: "tag_stuff"
1903
+ }],
1904
+ tag_stuff: [
1905
+ {include : "attributes"},
1906
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
1907
+ ],
1908
+ });
1909
+
1910
+ this.embedTagRules(CssHighlightRules, "css-", "style");
1911
+ this.embedTagRules(new JavaScriptHighlightRules({noJSX: true}).getRules(), "js-", "script");
1912
+
1913
+ if (this.constructor === HtmlHighlightRules)
1914
+ this.normalizeRules();
1915
+ };
1916
+
1917
+ oop.inherits(HtmlHighlightRules, XmlHighlightRules);
1918
+
1919
+ exports.HtmlHighlightRules = HtmlHighlightRules;
1920
+ });
1921
+
1922
+ define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
1923
+ "use strict";
1924
+
1925
+ var oop = require("../../lib/oop");
1926
+ var Behaviour = require("../behaviour").Behaviour;
1927
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1928
+ var lang = require("../../lib/lang");
1929
+
1930
+ function is(token, type) {
1931
+ return token.type.lastIndexOf(type + ".xml") > -1;
1932
+ }
1933
+
1934
+ var XmlBehaviour = function () {
1935
+
1936
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
1937
+ if (text == '"' || text == "'") {
1938
+ var quote = text;
1939
+ var selected = session.doc.getTextRange(editor.getSelectionRange());
1940
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
1941
+ return {
1942
+ text: quote + selected + quote,
1943
+ selection: false
1944
+ };
1945
+ }
1946
+
1947
+ var cursor = editor.getCursorPosition();
1948
+ var line = session.doc.getLine(cursor.row);
1949
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1950
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1951
+ var token = iterator.getCurrentToken();
1952
+
1953
+ if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
1954
+ return {
1955
+ text: "",
1956
+ selection: [1, 1]
1957
+ };
1958
+ }
1959
+
1960
+ if (!token)
1961
+ token = iterator.stepBackward();
1962
+
1963
+ if (!token)
1964
+ return;
1965
+
1966
+ while (is(token, "tag-whitespace") || is(token, "whitespace")) {
1967
+ token = iterator.stepBackward();
1968
+ }
1969
+ var rightSpace = !rightChar || rightChar.match(/\s/);
1970
+ if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
1971
+ return {
1972
+ text: quote + quote,
1973
+ selection: [1, 1]
1974
+ };
1975
+ }
1976
+ }
1977
+ });
1978
+
1979
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
1980
+ var selected = session.doc.getTextRange(range);
1981
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
1982
+ var line = session.doc.getLine(range.start.row);
1983
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
1984
+ if (rightChar == selected) {
1985
+ range.end.column++;
1986
+ return range;
1987
+ }
1988
+ }
1989
+ });
1990
+
1991
+ this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
1992
+ if (text == '>') {
1993
+ var position = editor.getCursorPosition();
1994
+ var iterator = new TokenIterator(session, position.row, position.column);
1995
+ var token = iterator.getCurrentToken() || iterator.stepBackward();
1996
+ if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
1997
+ return;
1998
+ if (is(token, "reference.attribute-value"))
1999
+ return;
2000
+ if (is(token, "attribute-value")) {
2001
+ var firstChar = token.value.charAt(0);
2002
+ if (firstChar == '"' || firstChar == "'") {
2003
+ var lastChar = token.value.charAt(token.value.length - 1);
2004
+ var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;
2005
+ if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)
2006
+ return;
2007
+ }
2008
+ }
2009
+ while (!is(token, "tag-name")) {
2010
+ token = iterator.stepBackward();
2011
+ }
2012
+
2013
+ var tokenRow = iterator.getCurrentTokenRow();
2014
+ var tokenColumn = iterator.getCurrentTokenColumn();
2015
+ if (is(iterator.stepBackward(), "end-tag-open"))
2016
+ return;
2017
+
2018
+ var element = token.value;
2019
+ if (tokenRow == position.row)
2020
+ element = element.substring(0, position.column - tokenColumn);
2021
+
2022
+ if (this.voidElements.hasOwnProperty(element.toLowerCase()))
2023
+ return;
2024
+
2025
+ return {
2026
+ text: ">" + "</" + element + ">",
2027
+ selection: [1, 1]
2028
+ };
2029
+ }
2030
+ });
2031
+
2032
+ this.add("autoindent", "insertion", function (state, action, editor, session, text) {
2033
+ if (text == "\n") {
2034
+ var cursor = editor.getCursorPosition();
2035
+ var line = session.getLine(cursor.row);
2036
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
2037
+ var token = iterator.getCurrentToken();
2038
+
2039
+ if (token && token.type.indexOf("tag-close") !== -1) {
2040
+ if (token.value == "/>")
2041
+ return;
2042
+ while (token && token.type.indexOf("tag-name") === -1) {
2043
+ token = iterator.stepBackward();
2044
+ }
2045
+
2046
+ if (!token) {
2047
+ return;
2048
+ }
2049
+
2050
+ var tag = token.value;
2051
+ var row = iterator.getCurrentTokenRow();
2052
+ token = iterator.stepBackward();
2053
+ if (!token || token.type.indexOf("end-tag") !== -1) {
2054
+ return;
2055
+ }
2056
+
2057
+ if (this.voidElements && !this.voidElements[tag]) {
2058
+ var nextToken = session.getTokenAt(cursor.row, cursor.column+1);
2059
+ var line = session.getLine(row);
2060
+ var nextIndent = this.$getIndent(line);
2061
+ var indent = nextIndent + session.getTabString();
2062
+
2063
+ if (nextToken && nextToken.value === "</") {
2064
+ return {
2065
+ text: "\n" + indent + "\n" + nextIndent,
2066
+ selection: [1, indent.length, 1, indent.length]
2067
+ };
2068
+ } else {
2069
+ return {
2070
+ text: "\n" + indent
2071
+ };
2072
+ }
2073
+ }
2074
+ }
2075
+ }
2076
+ });
2077
+
2078
+ };
2079
+
2080
+ oop.inherits(XmlBehaviour, Behaviour);
2081
+
2082
+ exports.XmlBehaviour = XmlBehaviour;
2083
+ });
2084
+
2085
+ define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) {
2086
+ "use strict";
2087
+
2088
+ var oop = require("../../lib/oop");
2089
+ var BaseFoldMode = require("./fold_mode").FoldMode;
2090
+
2091
+ var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
2092
+ this.defaultMode = defaultMode;
2093
+ this.subModes = subModes;
2094
+ };
2095
+ oop.inherits(FoldMode, BaseFoldMode);
2096
+
2097
+ (function() {
2098
+
2099
+
2100
+ this.$getMode = function(state) {
2101
+ if (typeof state != "string")
2102
+ state = state[0];
2103
+ for (var key in this.subModes) {
2104
+ if (state.indexOf(key) === 0)
2105
+ return this.subModes[key];
2106
+ }
2107
+ return null;
2108
+ };
2109
+
2110
+ this.$tryMode = function(state, session, foldStyle, row) {
2111
+ var mode = this.$getMode(state);
2112
+ return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
2113
+ };
2114
+
2115
+ this.getFoldWidget = function(session, foldStyle, row) {
2116
+ return (
2117
+ this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
2118
+ this.$tryMode(session.getState(row), session, foldStyle, row) ||
2119
+ this.defaultMode.getFoldWidget(session, foldStyle, row)
2120
+ );
2121
+ };
2122
+
2123
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
2124
+ var mode = this.$getMode(session.getState(row-1));
2125
+
2126
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
2127
+ mode = this.$getMode(session.getState(row));
2128
+
2129
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
2130
+ mode = this.defaultMode;
2131
+
2132
+ return mode.getFoldWidgetRange(session, foldStyle, row);
2133
+ };
2134
+
2135
+ }).call(FoldMode.prototype);
2136
+
2137
+ });
2138
+
2139
+ define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) {
2140
+ "use strict";
2141
+
2142
+ var oop = require("../../lib/oop");
2143
+ var lang = require("../../lib/lang");
2144
+ var Range = require("../../range").Range;
2145
+ var BaseFoldMode = require("./fold_mode").FoldMode;
2146
+ var TokenIterator = require("../../token_iterator").TokenIterator;
2147
+
2148
+ var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {
2149
+ BaseFoldMode.call(this);
2150
+ this.voidElements = voidElements || {};
2151
+ this.optionalEndTags = oop.mixin({}, this.voidElements);
2152
+ if (optionalEndTags)
2153
+ oop.mixin(this.optionalEndTags, optionalEndTags);
2154
+
2155
+ };
2156
+ oop.inherits(FoldMode, BaseFoldMode);
2157
+
2158
+ var Tag = function() {
2159
+ this.tagName = "";
2160
+ this.closing = false;
2161
+ this.selfClosing = false;
2162
+ this.start = {row: 0, column: 0};
2163
+ this.end = {row: 0, column: 0};
2164
+ };
2165
+
2166
+ function is(token, type) {
2167
+ return token.type.lastIndexOf(type + ".xml") > -1;
2168
+ }
2169
+
2170
+ (function() {
2171
+
2172
+ this.getFoldWidget = function(session, foldStyle, row) {
2173
+ var tag = this._getFirstTagInLine(session, row);
2174
+
2175
+ if (!tag)
2176
+ return "";
2177
+
2178
+ if (tag.closing || (!tag.tagName && tag.selfClosing))
2179
+ return foldStyle == "markbeginend" ? "end" : "";
2180
+
2181
+ if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
2182
+ return "";
2183
+
2184
+ if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
2185
+ return "";
2186
+
2187
+ return "start";
2188
+ };
2189
+ this._getFirstTagInLine = function(session, row) {
2190
+ var tokens = session.getTokens(row);
2191
+ var tag = new Tag();
2192
+
2193
+ for (var i = 0; i < tokens.length; i++) {
2194
+ var token = tokens[i];
2195
+ if (is(token, "tag-open")) {
2196
+ tag.end.column = tag.start.column + token.value.length;
2197
+ tag.closing = is(token, "end-tag-open");
2198
+ token = tokens[++i];
2199
+ if (!token)
2200
+ return null;
2201
+ tag.tagName = token.value;
2202
+ tag.end.column += token.value.length;
2203
+ for (i++; i < tokens.length; i++) {
2204
+ token = tokens[i];
2205
+ tag.end.column += token.value.length;
2206
+ if (is(token, "tag-close")) {
2207
+ tag.selfClosing = token.value == '/>';
2208
+ break;
2209
+ }
2210
+ }
2211
+ return tag;
2212
+ } else if (is(token, "tag-close")) {
2213
+ tag.selfClosing = token.value == '/>';
2214
+ return tag;
2215
+ }
2216
+ tag.start.column += token.value.length;
2217
+ }
2218
+
2219
+ return null;
2220
+ };
2221
+
2222
+ this._findEndTagInLine = function(session, row, tagName, startColumn) {
2223
+ var tokens = session.getTokens(row);
2224
+ var column = 0;
2225
+ for (var i = 0; i < tokens.length; i++) {
2226
+ var token = tokens[i];
2227
+ column += token.value.length;
2228
+ if (column < startColumn)
2229
+ continue;
2230
+ if (is(token, "end-tag-open")) {
2231
+ token = tokens[i + 1];
2232
+ if (token && token.value == tagName)
2233
+ return true;
2234
+ }
2235
+ }
2236
+ return false;
2237
+ };
2238
+ this._readTagForward = function(iterator) {
2239
+ var token = iterator.getCurrentToken();
2240
+ if (!token)
2241
+ return null;
2242
+
2243
+ var tag = new Tag();
2244
+ do {
2245
+ if (is(token, "tag-open")) {
2246
+ tag.closing = is(token, "end-tag-open");
2247
+ tag.start.row = iterator.getCurrentTokenRow();
2248
+ tag.start.column = iterator.getCurrentTokenColumn();
2249
+ } else if (is(token, "tag-name")) {
2250
+ tag.tagName = token.value;
2251
+ } else if (is(token, "tag-close")) {
2252
+ tag.selfClosing = token.value == "/>";
2253
+ tag.end.row = iterator.getCurrentTokenRow();
2254
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
2255
+ iterator.stepForward();
2256
+ return tag;
2257
+ }
2258
+ } while(token = iterator.stepForward());
2259
+
2260
+ return null;
2261
+ };
2262
+
2263
+ this._readTagBackward = function(iterator) {
2264
+ var token = iterator.getCurrentToken();
2265
+ if (!token)
2266
+ return null;
2267
+
2268
+ var tag = new Tag();
2269
+ do {
2270
+ if (is(token, "tag-open")) {
2271
+ tag.closing = is(token, "end-tag-open");
2272
+ tag.start.row = iterator.getCurrentTokenRow();
2273
+ tag.start.column = iterator.getCurrentTokenColumn();
2274
+ iterator.stepBackward();
2275
+ return tag;
2276
+ } else if (is(token, "tag-name")) {
2277
+ tag.tagName = token.value;
2278
+ } else if (is(token, "tag-close")) {
2279
+ tag.selfClosing = token.value == "/>";
2280
+ tag.end.row = iterator.getCurrentTokenRow();
2281
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
2282
+ }
2283
+ } while(token = iterator.stepBackward());
2284
+
2285
+ return null;
2286
+ };
2287
+
2288
+ this._pop = function(stack, tag) {
2289
+ while (stack.length) {
2290
+
2291
+ var top = stack[stack.length-1];
2292
+ if (!tag || top.tagName == tag.tagName) {
2293
+ return stack.pop();
2294
+ }
2295
+ else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {
2296
+ stack.pop();
2297
+ continue;
2298
+ } else {
2299
+ return null;
2300
+ }
2301
+ }
2302
+ };
2303
+
2304
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
2305
+ var firstTag = this._getFirstTagInLine(session, row);
2306
+
2307
+ if (!firstTag)
2308
+ return null;
2309
+
2310
+ var isBackward = firstTag.closing || firstTag.selfClosing;
2311
+ var stack = [];
2312
+ var tag;
2313
+
2314
+ if (!isBackward) {
2315
+ var iterator = new TokenIterator(session, row, firstTag.start.column);
2316
+ var start = {
2317
+ row: row,
2318
+ column: firstTag.start.column + firstTag.tagName.length + 2
2319
+ };
2320
+ if (firstTag.start.row == firstTag.end.row)
2321
+ start.column = firstTag.end.column;
2322
+ while (tag = this._readTagForward(iterator)) {
2323
+ if (tag.selfClosing) {
2324
+ if (!stack.length) {
2325
+ tag.start.column += tag.tagName.length + 2;
2326
+ tag.end.column -= 2;
2327
+ return Range.fromPoints(tag.start, tag.end);
2328
+ } else
2329
+ continue;
2330
+ }
2331
+
2332
+ if (tag.closing) {
2333
+ this._pop(stack, tag);
2334
+ if (stack.length == 0)
2335
+ return Range.fromPoints(start, tag.start);
2336
+ }
2337
+ else {
2338
+ stack.push(tag);
2339
+ }
2340
+ }
2341
+ }
2342
+ else {
2343
+ var iterator = new TokenIterator(session, row, firstTag.end.column);
2344
+ var end = {
2345
+ row: row,
2346
+ column: firstTag.start.column
2347
+ };
2348
+
2349
+ while (tag = this._readTagBackward(iterator)) {
2350
+ if (tag.selfClosing) {
2351
+ if (!stack.length) {
2352
+ tag.start.column += tag.tagName.length + 2;
2353
+ tag.end.column -= 2;
2354
+ return Range.fromPoints(tag.start, tag.end);
2355
+ } else
2356
+ continue;
2357
+ }
2358
+
2359
+ if (!tag.closing) {
2360
+ this._pop(stack, tag);
2361
+ if (stack.length == 0) {
2362
+ tag.start.column += tag.tagName.length + 2;
2363
+ if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)
2364
+ tag.start.column = tag.end.column;
2365
+ return Range.fromPoints(tag.start, end);
2366
+ }
2367
+ }
2368
+ else {
2369
+ stack.push(tag);
2370
+ }
2371
+ }
2372
+ }
2373
+
2374
+ };
2375
+
2376
+ }).call(FoldMode.prototype);
2377
+
2378
+ });
2379
+
2380
+ define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) {
2381
+ "use strict";
2382
+
2383
+ var oop = require("../../lib/oop");
2384
+ var MixedFoldMode = require("./mixed").FoldMode;
2385
+ var XmlFoldMode = require("./xml").FoldMode;
2386
+ var CStyleFoldMode = require("./cstyle").FoldMode;
2387
+
2388
+ var FoldMode = exports.FoldMode = function(voidElements, optionalTags) {
2389
+ MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {
2390
+ "js-": new CStyleFoldMode(),
2391
+ "css-": new CStyleFoldMode()
2392
+ });
2393
+ };
2394
+
2395
+ oop.inherits(FoldMode, MixedFoldMode);
2396
+
2397
+ });
2398
+
2399
+ define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) {
2400
+ "use strict";
2401
+
2402
+ var TokenIterator = require("../token_iterator").TokenIterator;
2403
+
2404
+ var commonAttributes = [
2405
+ "accesskey",
2406
+ "class",
2407
+ "contenteditable",
2408
+ "contextmenu",
2409
+ "dir",
2410
+ "draggable",
2411
+ "dropzone",
2412
+ "hidden",
2413
+ "id",
2414
+ "inert",
2415
+ "itemid",
2416
+ "itemprop",
2417
+ "itemref",
2418
+ "itemscope",
2419
+ "itemtype",
2420
+ "lang",
2421
+ "spellcheck",
2422
+ "style",
2423
+ "tabindex",
2424
+ "title",
2425
+ "translate"
2426
+ ];
2427
+
2428
+ var eventAttributes = [
2429
+ "onabort",
2430
+ "onblur",
2431
+ "oncancel",
2432
+ "oncanplay",
2433
+ "oncanplaythrough",
2434
+ "onchange",
2435
+ "onclick",
2436
+ "onclose",
2437
+ "oncontextmenu",
2438
+ "oncuechange",
2439
+ "ondblclick",
2440
+ "ondrag",
2441
+ "ondragend",
2442
+ "ondragenter",
2443
+ "ondragleave",
2444
+ "ondragover",
2445
+ "ondragstart",
2446
+ "ondrop",
2447
+ "ondurationchange",
2448
+ "onemptied",
2449
+ "onended",
2450
+ "onerror",
2451
+ "onfocus",
2452
+ "oninput",
2453
+ "oninvalid",
2454
+ "onkeydown",
2455
+ "onkeypress",
2456
+ "onkeyup",
2457
+ "onload",
2458
+ "onloadeddata",
2459
+ "onloadedmetadata",
2460
+ "onloadstart",
2461
+ "onmousedown",
2462
+ "onmousemove",
2463
+ "onmouseout",
2464
+ "onmouseover",
2465
+ "onmouseup",
2466
+ "onmousewheel",
2467
+ "onpause",
2468
+ "onplay",
2469
+ "onplaying",
2470
+ "onprogress",
2471
+ "onratechange",
2472
+ "onreset",
2473
+ "onscroll",
2474
+ "onseeked",
2475
+ "onseeking",
2476
+ "onselect",
2477
+ "onshow",
2478
+ "onstalled",
2479
+ "onsubmit",
2480
+ "onsuspend",
2481
+ "ontimeupdate",
2482
+ "onvolumechange",
2483
+ "onwaiting"
2484
+ ];
2485
+
2486
+ var globalAttributes = commonAttributes.concat(eventAttributes);
2487
+
2488
+ var attributeMap = {
2489
+ "html": {"manifest": 1},
2490
+ "head": {},
2491
+ "title": {},
2492
+ "base": {"href": 1, "target": 1},
2493
+ "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1},
2494
+ "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1},
2495
+ "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1},
2496
+ "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1},
2497
+ "noscript": {"href": 1},
2498
+ "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1},
2499
+ "section": {},
2500
+ "nav": {},
2501
+ "article": {"pubdate": 1},
2502
+ "aside": {},
2503
+ "h1": {},
2504
+ "h2": {},
2505
+ "h3": {},
2506
+ "h4": {},
2507
+ "h5": {},
2508
+ "h6": {},
2509
+ "header": {},
2510
+ "footer": {},
2511
+ "address": {},
2512
+ "main": {},
2513
+ "p": {},
2514
+ "hr": {},
2515
+ "pre": {},
2516
+ "blockquote": {"cite": 1},
2517
+ "ol": {"start": 1, "reversed": 1},
2518
+ "ul": {},
2519
+ "li": {"value": 1},
2520
+ "dl": {},
2521
+ "dt": {},
2522
+ "dd": {},
2523
+ "figure": {},
2524
+ "figcaption": {},
2525
+ "div": {},
2526
+ "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1},
2527
+ "em": {},
2528
+ "strong": {},
2529
+ "small": {},
2530
+ "s": {},
2531
+ "cite": {},
2532
+ "q": {"cite": 1},
2533
+ "dfn": {},
2534
+ "abbr": {},
2535
+ "data": {},
2536
+ "time": {"datetime": 1},
2537
+ "code": {},
2538
+ "var": {},
2539
+ "samp": {},
2540
+ "kbd": {},
2541
+ "sub": {},
2542
+ "sup": {},
2543
+ "i": {},
2544
+ "b": {},
2545
+ "u": {},
2546
+ "mark": {},
2547
+ "ruby": {},
2548
+ "rt": {},
2549
+ "rp": {},
2550
+ "bdi": {},
2551
+ "bdo": {},
2552
+ "span": {},
2553
+ "br": {},
2554
+ "wbr": {},
2555
+ "ins": {"cite": 1, "datetime": 1},
2556
+ "del": {"cite": 1, "datetime": 1},
2557
+ "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1},
2558
+ "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}},
2559
+ "embed": {"src": 1, "height": 1, "width": 1, "type": 1},
2560
+ "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1},
2561
+ "param": {"name": 1, "value": 1},
2562
+ "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}},
2563
+ "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }},
2564
+ "source": {"src": 1, "type": 1, "media": 1},
2565
+ "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1},
2566
+ "canvas": {"width": 1, "height": 1},
2567
+ "map": {"name": 1},
2568
+ "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1},
2569
+ "svg": {},
2570
+ "math": {},
2571
+ "table": {"summary": 1},
2572
+ "caption": {},
2573
+ "colgroup": {"span": 1},
2574
+ "col": {"span": 1},
2575
+ "tbody": {},
2576
+ "thead": {},
2577
+ "tfoot": {},
2578
+ "tr": {},
2579
+ "td": {"headers": 1, "rowspan": 1, "colspan": 1},
2580
+ "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1},
2581
+ "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}},
2582
+ "fieldset": {"disabled": 1, "form": 1, "name": 1},
2583
+ "legend": {},
2584
+ "label": {"form": 1, "for": 1},
2585
+ "input": {
2586
+ "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1},
2587
+ "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1},
2588
+ "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}},
2589
+ "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}},
2590
+ "datalist": {},
2591
+ "optgroup": {"disabled": 1, "label": 1},
2592
+ "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1},
2593
+ "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}},
2594
+ "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1},
2595
+ "output": {"for": 1, "form": 1, "name": 1},
2596
+ "progress": {"value": 1, "max": 1},
2597
+ "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1},
2598
+ "details": {"open": 1},
2599
+ "summary": {},
2600
+ "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1},
2601
+ "menu": {"type": 1, "label": 1},
2602
+ "dialog": {"open": 1}
2603
+ };
2604
+
2605
+ var elements = Object.keys(attributeMap);
2606
+
2607
+ function is(token, type) {
2608
+ return token.type.lastIndexOf(type + ".xml") > -1;
2609
+ }
2610
+
2611
+ function findTagName(session, pos) {
2612
+ var iterator = new TokenIterator(session, pos.row, pos.column);
2613
+ var token = iterator.getCurrentToken();
2614
+ while (token && !is(token, "tag-name")){
2615
+ token = iterator.stepBackward();
2616
+ }
2617
+ if (token)
2618
+ return token.value;
2619
+ }
2620
+
2621
+ function findAttributeName(session, pos) {
2622
+ var iterator = new TokenIterator(session, pos.row, pos.column);
2623
+ var token = iterator.getCurrentToken();
2624
+ while (token && !is(token, "attribute-name")){
2625
+ token = iterator.stepBackward();
2626
+ }
2627
+ if (token)
2628
+ return token.value;
2629
+ }
2630
+
2631
+ var HtmlCompletions = function() {
2632
+
2633
+ };
2634
+
2635
+ (function() {
2636
+
2637
+ this.getCompletions = function(state, session, pos, prefix) {
2638
+ var token = session.getTokenAt(pos.row, pos.column);
2639
+
2640
+ if (!token)
2641
+ return [];
2642
+ if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open"))
2643
+ return this.getTagCompletions(state, session, pos, prefix);
2644
+ if (is(token, "tag-whitespace") || is(token, "attribute-name"))
2645
+ return this.getAttributeCompletions(state, session, pos, prefix);
2646
+ if (is(token, "attribute-value"))
2647
+ return this.getAttributeValueCompletions(state, session, pos, prefix);
2648
+ var line = session.getLine(pos.row).substr(0, pos.column);
2649
+ if (/&[A-z]*$/i.test(line))
2650
+ return this.getHTMLEntityCompletions(state, session, pos, prefix);
2651
+
2652
+ return [];
2653
+ };
2654
+
2655
+ this.getTagCompletions = function(state, session, pos, prefix) {
2656
+ return elements.map(function(element){
2657
+ return {
2658
+ value: element,
2659
+ meta: "tag",
2660
+ score: Number.MAX_VALUE
2661
+ };
2662
+ });
2663
+ };
2664
+
2665
+ this.getAttributeCompletions = function(state, session, pos, prefix) {
2666
+ var tagName = findTagName(session, pos);
2667
+ if (!tagName)
2668
+ return [];
2669
+ var attributes = globalAttributes;
2670
+ if (tagName in attributeMap) {
2671
+ attributes = attributes.concat(Object.keys(attributeMap[tagName]));
2672
+ }
2673
+ return attributes.map(function(attribute){
2674
+ return {
2675
+ caption: attribute,
2676
+ snippet: attribute + '="$0"',
2677
+ meta: "attribute",
2678
+ score: Number.MAX_VALUE
2679
+ };
2680
+ });
2681
+ };
2682
+
2683
+ this.getAttributeValueCompletions = function(state, session, pos, prefix) {
2684
+ var tagName = findTagName(session, pos);
2685
+ var attributeName = findAttributeName(session, pos);
2686
+
2687
+ if (!tagName)
2688
+ return [];
2689
+ var values = [];
2690
+ if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") {
2691
+ values = Object.keys(attributeMap[tagName][attributeName]);
2692
+ }
2693
+ return values.map(function(value){
2694
+ return {
2695
+ caption: value,
2696
+ snippet: value,
2697
+ meta: "attribute value",
2698
+ score: Number.MAX_VALUE
2699
+ };
2700
+ });
2701
+ };
2702
+
2703
+ this.getHTMLEntityCompletions = function(state, session, pos, prefix) {
2704
+ var values = ['&Aacute;', '&aacute;', '&Acirc;', '&acirc;', '&acute;', '&AElig;', '&aelig;', '&Agrave;', '&agrave;', '&alefsym;', '&Alpha;', '&alpha;', '&amp;', '&and;', '&ang;', '&Aring;', '&aring;', '&asymp;', '&Atilde;', '&atilde;', '&Auml;', '&auml;', '&bdquo;', '&Beta;', '&beta;', '&brvbar;', '&bull;', '&cap;', '&Ccedil;', '&ccedil;', '&cedil;', '&cent;', '&Chi;', '&chi;', '&circ;', '&clubs;', '&cong;', '&copy;', '&crarr;', '&cup;', '&curren;', '&Dagger;', '&dagger;', '&dArr;', '&darr;', '&deg;', '&Delta;', '&delta;', '&diams;', '&divide;', '&Eacute;', '&eacute;', '&Ecirc;', '&ecirc;', '&Egrave;', '&egrave;', '&empty;', '&emsp;', '&ensp;', '&Epsilon;', '&epsilon;', '&equiv;', '&Eta;', '&eta;', '&ETH;', '&eth;', '&Euml;', '&euml;', '&euro;', '&exist;', '&fnof;', '&forall;', '&frac12;', '&frac14;', '&frac34;', '&frasl;', '&Gamma;', '&gamma;', '&ge;', '&gt;', '&hArr;', '&harr;', '&hearts;', '&hellip;', '&Iacute;', '&iacute;', '&Icirc;', '&icirc;', '&iexcl;', '&Igrave;', '&igrave;', '&image;', '&infin;', '&int;', '&Iota;', '&iota;', '&iquest;', '&isin;', '&Iuml;', '&iuml;', '&Kappa;', '&kappa;', '&Lambda;', '&lambda;', '&lang;', '&laquo;', '&lArr;', '&larr;', '&lceil;', '&ldquo;', '&le;', '&lfloor;', '&lowast;', '&loz;', '&lrm;', '&lsaquo;', '&lsquo;', '&lt;', '&macr;', '&mdash;', '&micro;', '&middot;', '&minus;', '&Mu;', '&mu;', '&nabla;', '&nbsp;', '&ndash;', '&ne;', '&ni;', '&not;', '&notin;', '&nsub;', '&Ntilde;', '&ntilde;', '&Nu;', '&nu;', '&Oacute;', '&oacute;', '&Ocirc;', '&ocirc;', '&OElig;', '&oelig;', '&Ograve;', '&ograve;', '&oline;', '&Omega;', '&omega;', '&Omicron;', '&omicron;', '&oplus;', '&or;', '&ordf;', '&ordm;', '&Oslash;', '&oslash;', '&Otilde;', '&otilde;', '&otimes;', '&Ouml;', '&ouml;', '&para;', '&part;', '&permil;', '&perp;', '&Phi;', '&phi;', '&Pi;', '&pi;', '&piv;', '&plusmn;', '&pound;', '&Prime;', '&prime;', '&prod;', '&prop;', '&Psi;', '&psi;', '&quot;', '&radic;', '&rang;', '&raquo;', '&rArr;', '&rarr;', '&rceil;', '&rdquo;', '&real;', '&reg;', '&rfloor;', '&Rho;', '&rho;', '&rlm;', '&rsaquo;', '&rsquo;', '&sbquo;', '&Scaron;', '&scaron;', '&sdot;', '&sect;', '&shy;', '&Sigma;', '&sigma;', '&sigmaf;', '&sim;', '&spades;', '&sub;', '&sube;', '&sum;', '&sup;', '&sup1;', '&sup2;', '&sup3;', '&supe;', '&szlig;', '&Tau;', '&tau;', '&there4;', '&Theta;', '&theta;', '&thetasym;', '&thinsp;', '&THORN;', '&thorn;', '&tilde;', '&times;', '&trade;', '&Uacute;', '&uacute;', '&uArr;', '&uarr;', '&Ucirc;', '&ucirc;', '&Ugrave;', '&ugrave;', '&uml;', '&upsih;', '&Upsilon;', '&upsilon;', '&Uuml;', '&uuml;', '&weierp;', '&Xi;', '&xi;', '&Yacute;', '&yacute;', '&yen;', '&Yuml;', '&yuml;', '&Zeta;', '&zeta;', '&zwj;', '&zwnj;'];
2705
+
2706
+ return values.map(function(value){
2707
+ return {
2708
+ caption: value,
2709
+ snippet: value.substr(1),
2710
+ meta: "html entity",
2711
+ score: Number.MAX_VALUE
2712
+ };
2713
+ });
2714
+ };
2715
+
2716
+ }).call(HtmlCompletions.prototype);
2717
+
2718
+ exports.HtmlCompletions = HtmlCompletions;
2719
+ });
2720
+
2721
+ define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) {
2722
+ "use strict";
2723
+
2724
+ var oop = require("../lib/oop");
2725
+ var lang = require("../lib/lang");
2726
+ var TextMode = require("./text").Mode;
2727
+ var JavaScriptMode = require("./javascript").Mode;
2728
+ var CssMode = require("./css").Mode;
2729
+ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
2730
+ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
2731
+ var HtmlFoldMode = require("./folding/html").FoldMode;
2732
+ var HtmlCompletions = require("./html_completions").HtmlCompletions;
2733
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
2734
+ var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"];
2735
+ var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"];
2736
+
2737
+ var Mode = function(options) {
2738
+ this.fragmentContext = options && options.fragmentContext;
2739
+ this.HighlightRules = HtmlHighlightRules;
2740
+ this.$behaviour = new XmlBehaviour();
2741
+ this.$completer = new HtmlCompletions();
2742
+
2743
+ this.createModeDelegates({
2744
+ "js-": JavaScriptMode,
2745
+ "css-": CssMode
2746
+ });
2747
+
2748
+ this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));
2749
+ };
2750
+ oop.inherits(Mode, TextMode);
2751
+
2752
+ (function() {
2753
+
2754
+ this.blockComment = {start: "<!--", end: "-->"};
2755
+
2756
+ this.voidElements = lang.arrayToMap(voidElements);
2757
+
2758
+ this.getNextLineIndent = function(state, line, tab) {
2759
+ return this.$getIndent(line);
2760
+ };
2761
+
2762
+ this.checkOutdent = function(state, line, input) {
2763
+ return false;
2764
+ };
2765
+
2766
+ this.getCompletions = function(state, session, pos, prefix) {
2767
+ return this.$completer.getCompletions(state, session, pos, prefix);
2768
+ };
2769
+
2770
+ this.createWorker = function(session) {
2771
+ if (this.constructor != Mode)
2772
+ return;
2773
+ var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker");
2774
+ worker.attachToDocument(session.getDocument());
2775
+
2776
+ if (this.fragmentContext)
2777
+ worker.call("setOptions", [{context: this.fragmentContext}]);
2778
+
2779
+ worker.on("error", function(e) {
2780
+ session.setAnnotations(e.data);
2781
+ });
2782
+
2783
+ worker.on("terminate", function() {
2784
+ session.clearAnnotations();
2785
+ });
2786
+
2787
+ return worker;
2788
+ };
2789
+
2790
+ this.$id = "ace/mode/html";
2791
+ }).call(Mode.prototype);
2792
+
2793
+ exports.Mode = Mode;
2794
+ });