card 1.91 → 1.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (779) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +80 -0
  3. data/VERSION +1 -1
  4. data/card.gemspec +29 -22
  5. data/config/i18n-tasks.yml +8 -1
  6. data/config/initializers/01_core_extensions/module.rb +46 -4
  7. data/config/initializers/02_patches/action_dispatch.rb +16 -0
  8. data/config/initializers/02_patches/active_job.rb +35 -0
  9. data/config/initializers/patches.rb +12 -0
  10. data/config/initializers/recaptcha.rb +8 -2
  11. data/config/locales/de.yml +36 -23
  12. data/config/locales/en.yml +508 -15
  13. data/db/migrate/20110511221913_require_earlier_migrations.rb +1 -1
  14. data/db/migrate/20120105203350_require_1_8_migrations.rb +1 -1
  15. data/db/migrate/20121111025347_require_1_10_migrations.rb +1 -1
  16. data/db/migrate/20121118114000_split_link_type.rb +1 -1
  17. data/db/migrate/20121118115000_update_link_type.rb +2 -2
  18. data/db/migrate/20130106052640_table_cleanup.rb +1 -1
  19. data/db/migrate/20130109015336_trunk_left.rb +1 -1
  20. data/db/migrate/20130411210957_update_codenames.rb +1 -1
  21. data/db/migrate/20140822073704_create_new_revision_tables.rb +1 -1
  22. data/db/migrate/20141001105348_move_revisions_to_actions.rb +6 -6
  23. data/db/migrate/20141121172918_rename_card_migration_table.rb +1 -1
  24. data/db/migrate/20141208132159_remove_present_from_reference_table.rb +1 -1
  25. data/db/migrate/20141216053032_better_index_names.rb +1 -1
  26. data/db/migrate/20150724210803_add_comment_to_actions.rb +1 -1
  27. data/db/migrate/20151105225559_more_space_for_db_content.rb +1 -1
  28. data/db/migrate/20160122153608_new_indeces.rb +1 -1
  29. data/db/migrate/20170908114442_create_delayed_jobs.rb +22 -0
  30. data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +1 -1
  31. data/db/migrate_core_cards/20140512155840_add_script_cards.rb +2 -2
  32. data/db/migrate_core_cards/20140629222005_add_email_cards.rb +1 -1
  33. data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +1 -1
  34. data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +1 -1
  35. data/db/migrate_core_cards/20150429090551_search_card_context.rb +1 -0
  36. data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +1 -1
  37. data/db/migrate_core_cards/20150824135418_update_file_history.rb +1 -0
  38. data/db/migrate_core_cards/20161103154836_update_keys.rb +1 -1
  39. data/db/migrate_core_cards/20170209132834_email_test_context.rb +1 -1
  40. data/db/migrate_core_cards/20170830210517_correct_signup_success_message.rb +10 -0
  41. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/bootstrap_default/_bootswatch.scss +0 -0
  42. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/bootstrap_default/_variables.scss +0 -0
  43. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cerulean/_bootswatch.scss +0 -0
  44. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cerulean/_variables.scss +0 -0
  45. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cerulean/thumbnail.png +0 -0
  46. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cosmo/_bootswatch.scss +0 -0
  47. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cosmo/_variables.scss +0 -0
  48. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cosmo/thumbnail.png +0 -0
  49. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cyborg/_bootswatch.scss +0 -0
  50. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cyborg/_variables.scss +0 -0
  51. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cyborg/thumbnail.png +0 -0
  52. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/darkly/_bootswatch.scss +0 -0
  53. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/darkly/_variables.scss +0 -0
  54. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/darkly/thumbnail.png +0 -0
  55. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/flatly/_bootswatch.scss +0 -0
  56. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/flatly/_variables.scss +0 -0
  57. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/flatly/thumbnail.png +0 -0
  58. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/journal/_bootswatch.scss +0 -0
  59. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/journal/_variables.scss +0 -0
  60. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/journal/thumbnail.png +0 -0
  61. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/litera/_bootswatch.scss +0 -0
  62. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/litera/_variables.scss +0 -0
  63. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/litera/thumbnail.png +0 -0
  64. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lumen/_bootswatch.scss +0 -0
  65. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lumen/_variables.scss +0 -0
  66. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lumen/thumbnail.png +0 -0
  67. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lux/_bootswatch.scss +0 -0
  68. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lux/_variables.scss +0 -0
  69. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lux/thumbnail.png +0 -0
  70. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/materia/_bootswatch.scss +0 -0
  71. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/materia/_variables.scss +0 -0
  72. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/materia/thumbnail.png +0 -0
  73. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/minty/_bootswatch.scss +0 -0
  74. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/minty/_variables.scss +0 -0
  75. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/minty/thumbnail.png +0 -0
  76. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/paper/_bootswatch.scss +0 -0
  77. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/paper/_variables.scss +0 -0
  78. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/pulse/_bootswatch.scss +0 -0
  79. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/pulse/_variables.scss +0 -0
  80. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/pulse/thumbnail.png +0 -0
  81. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/readable/_bootswatch.scss +0 -0
  82. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/readable/_variables.scss +0 -0
  83. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/sandstone/_bootswatch.scss +0 -0
  84. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/sandstone/_variables.scss +0 -0
  85. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/sandstone/thumbnail.png +0 -0
  86. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/simplex/_bootswatch.scss +0 -0
  87. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/simplex/_variables.scss +0 -0
  88. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/simplex/thumbnail.png +0 -0
  89. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/slate/_bootswatch.scss +0 -0
  90. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/slate/_variables.scss +0 -0
  91. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/slate/thumbnail.png +0 -0
  92. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/solar/_bootswatch.scss +0 -0
  93. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/solar/_variables.scss +0 -0
  94. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/solar/thumbnail.png +0 -0
  95. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/spacelab/_bootswatch.scss +0 -0
  96. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/spacelab/_variables.scss +0 -0
  97. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/spacelab/thumbnail.png +0 -0
  98. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/superhero/_bootswatch.scss +0 -0
  99. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/superhero/_variables.scss +0 -0
  100. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/superhero/thumbnail.png +0 -0
  101. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/united/_bootswatch.scss +0 -0
  102. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/united/_variables.scss +0 -0
  103. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/united/thumbnail.png +0 -0
  104. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/_bootswatch.scss +0 -0
  105. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/_full.scss +0 -0
  106. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/_variables.scss +0 -0
  107. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/thumbnail.png +0 -0
  108. data/db/migrate_core_cards/data/b4_beta_themes/bootstrap_default/_bootswatch.scss +0 -0
  109. data/db/migrate_core_cards/data/b4_beta_themes/bootstrap_default/_variables.scss +961 -0
  110. data/db/migrate_core_cards/data/b4_beta_themes/cerulean/_bootswatch.scss +67 -0
  111. data/db/migrate_core_cards/data/b4_beta_themes/cerulean/_variables.scss +961 -0
  112. data/db/migrate_core_cards/data/b4_beta_themes/cerulean/thumbnail.png +0 -0
  113. data/db/migrate_core_cards/data/b4_beta_themes/cosmo/_bootswatch.scss +45 -0
  114. data/db/migrate_core_cards/data/b4_beta_themes/cosmo/_variables.scss +961 -0
  115. data/db/migrate_core_cards/data/b4_beta_themes/cosmo/thumbnail.png +0 -0
  116. data/db/migrate_core_cards/data/b4_beta_themes/cyborg/_bootswatch.scss +141 -0
  117. data/db/migrate_core_cards/data/b4_beta_themes/cyborg/_variables.scss +961 -0
  118. data/db/migrate_core_cards/data/b4_beta_themes/cyborg/thumbnail.png +0 -0
  119. data/db/migrate_core_cards/data/b4_beta_themes/darkly/_bootswatch.scss +142 -0
  120. data/db/migrate_core_cards/data/b4_beta_themes/darkly/_variables.scss +961 -0
  121. data/db/migrate_core_cards/data/b4_beta_themes/darkly/thumbnail.png +0 -0
  122. data/db/migrate_core_cards/data/b4_beta_themes/flatly/_bootswatch.scss +107 -0
  123. data/db/migrate_core_cards/data/b4_beta_themes/flatly/_variables.scss +961 -0
  124. data/db/migrate_core_cards/data/b4_beta_themes/flatly/thumbnail.png +0 -0
  125. data/db/migrate_core_cards/data/b4_beta_themes/journal/_bootswatch.scss +69 -0
  126. data/db/migrate_core_cards/data/b4_beta_themes/journal/_variables.scss +961 -0
  127. data/db/migrate_core_cards/data/b4_beta_themes/journal/thumbnail.png +0 -0
  128. data/db/migrate_core_cards/data/b4_beta_themes/litera/_bootswatch.scss +130 -0
  129. data/db/migrate_core_cards/data/b4_beta_themes/litera/_variables.scss +961 -0
  130. data/db/migrate_core_cards/data/b4_beta_themes/litera/thumbnail.png +0 -0
  131. data/db/migrate_core_cards/data/b4_beta_themes/lumen/_bootswatch.scss +294 -0
  132. data/db/migrate_core_cards/data/b4_beta_themes/lumen/_variables.scss +961 -0
  133. data/db/migrate_core_cards/data/b4_beta_themes/lumen/thumbnail.png +0 -0
  134. data/db/migrate_core_cards/data/b4_beta_themes/lux/_bootswatch.scss +111 -0
  135. data/db/migrate_core_cards/data/b4_beta_themes/lux/_variables.scss +961 -0
  136. data/db/migrate_core_cards/data/b4_beta_themes/lux/thumbnail.png +0 -0
  137. data/db/migrate_core_cards/data/b4_beta_themes/materia/_bootswatch.scss +610 -0
  138. data/db/migrate_core_cards/data/b4_beta_themes/materia/_variables.scss +961 -0
  139. data/db/migrate_core_cards/data/b4_beta_themes/materia/thumbnail.png +0 -0
  140. data/db/migrate_core_cards/data/b4_beta_themes/minty/_bootswatch.scss +85 -0
  141. data/db/migrate_core_cards/data/b4_beta_themes/minty/_variables.scss +961 -0
  142. data/db/migrate_core_cards/data/b4_beta_themes/minty/thumbnail.png +0 -0
  143. data/db/migrate_core_cards/data/b4_beta_themes/paper/_bootswatch.scss +607 -0
  144. data/db/migrate_core_cards/data/b4_beta_themes/paper/_variables.scss +861 -0
  145. data/db/migrate_core_cards/data/b4_beta_themes/pulse/_bootswatch.scss +122 -0
  146. data/db/migrate_core_cards/data/b4_beta_themes/pulse/_variables.scss +961 -0
  147. data/db/migrate_core_cards/data/b4_beta_themes/pulse/thumbnail.png +0 -0
  148. data/db/migrate_core_cards/data/b4_beta_themes/readable/_bootswatch.scss +174 -0
  149. data/db/migrate_core_cards/data/b4_beta_themes/readable/_variables.scss +861 -0
  150. data/db/migrate_core_cards/data/b4_beta_themes/sandstone/_bootswatch.scss +152 -0
  151. data/db/migrate_core_cards/data/b4_beta_themes/sandstone/_variables.scss +961 -0
  152. data/db/migrate_core_cards/data/b4_beta_themes/sandstone/thumbnail.png +0 -0
  153. data/db/migrate_core_cards/data/b4_beta_themes/simplex/_bootswatch.scss +103 -0
  154. data/db/migrate_core_cards/data/b4_beta_themes/simplex/_variables.scss +961 -0
  155. data/db/migrate_core_cards/data/b4_beta_themes/simplex/thumbnail.png +0 -0
  156. data/db/migrate_core_cards/data/b4_beta_themes/slate/_bootswatch.scss +274 -0
  157. data/db/migrate_core_cards/data/b4_beta_themes/slate/_variables.scss +961 -0
  158. data/db/migrate_core_cards/data/b4_beta_themes/slate/thumbnail.png +0 -0
  159. data/db/migrate_core_cards/data/b4_beta_themes/solar/_bootswatch.scss +45 -0
  160. data/db/migrate_core_cards/data/b4_beta_themes/solar/_variables.scss +961 -0
  161. data/db/migrate_core_cards/data/b4_beta_themes/solar/thumbnail.png +0 -0
  162. data/db/migrate_core_cards/data/b4_beta_themes/spacelab/_bootswatch.scss +125 -0
  163. data/db/migrate_core_cards/data/b4_beta_themes/spacelab/_variables.scss +961 -0
  164. data/db/migrate_core_cards/data/b4_beta_themes/spacelab/thumbnail.png +0 -0
  165. data/db/migrate_core_cards/data/b4_beta_themes/superhero/_bootswatch.scss +136 -0
  166. data/db/migrate_core_cards/data/b4_beta_themes/superhero/_variables.scss +961 -0
  167. data/db/migrate_core_cards/data/b4_beta_themes/superhero/thumbnail.png +0 -0
  168. data/db/migrate_core_cards/data/b4_beta_themes/united/_bootswatch.scss +32 -0
  169. data/db/migrate_core_cards/data/b4_beta_themes/united/_variables.scss +961 -0
  170. data/db/migrate_core_cards/data/b4_beta_themes/united/thumbnail.png +0 -0
  171. data/db/migrate_core_cards/data/b4_beta_themes/variables/_variables.scss +0 -0
  172. data/db/migrate_core_cards/data/b4_beta_themes/yeti/_bootswatch.scss +304 -0
  173. data/db/migrate_core_cards/data/b4_beta_themes/yeti/_full.scss +9921 -0
  174. data/db/migrate_core_cards/data/b4_beta_themes/yeti/_variables.scss +961 -0
  175. data/db/migrate_core_cards/data/b4_beta_themes/yeti/thumbnail.png +0 -0
  176. data/db/migrate_core_cards/data/cards.yml +2 -2
  177. data/db/migrate_core_cards/data/cards/*header +2 -2
  178. data/db/schema.rb +89 -106
  179. data/db/seed/new/card_actions.yml +2146 -1922
  180. data/db/seed/new/card_acts.yml +2 -248
  181. data/db/seed/new/card_changes.yml +1 -32341
  182. data/db/seed/new/card_references.yml +1162 -980
  183. data/db/seed/new/cards.yml +23244 -14385
  184. data/db/seed/test/fixtures/card_actions.yml +3459 -3011
  185. data/db/seed/test/fixtures/card_acts.yml +470 -608
  186. data/db/seed/test/fixtures/card_changes.yml +109 -37619
  187. data/db/seed/test/fixtures/card_references.yml +2264 -1865
  188. data/db/seed/test/fixtures/cards.yml +26422 -16915
  189. data/db/seed/test/seed.rb +247 -179
  190. data/db/seed_consts.rb +10 -0
  191. data/db/seeds.rb +1 -6
  192. data/db/version.txt +1 -1
  193. data/db/version_core_cards.txt +1 -1
  194. data/lib/active_record/connection_adapters_ext.rb +1 -1
  195. data/lib/application_job.rb +2 -0
  196. data/lib/application_record.rb +3 -0
  197. data/lib/card.rb +77 -13
  198. data/lib/card/act_manager.rb +3 -0
  199. data/lib/card/act_manager/stage_director.rb +3 -38
  200. data/lib/card/act_manager/stage_director/phases.rb +39 -0
  201. data/lib/card/codename.rb +15 -9
  202. data/lib/card/content.rb +4 -0
  203. data/lib/card/content/chunk.rb +4 -0
  204. data/lib/card/env.rb +6 -2
  205. data/lib/card/env/location_history.rb +1 -1
  206. data/lib/card/env/success.rb +5 -2
  207. data/lib/card/error.rb +3 -2
  208. data/lib/card/format.rb +13 -21
  209. data/lib/card/format/context_names.rb +40 -0
  210. data/lib/card/format/error.rb +8 -4
  211. data/lib/card/format/nest.rb +7 -7
  212. data/lib/card/format/nest/fetch.rb +1 -1
  213. data/lib/card/format/nest/mode.rb +75 -0
  214. data/lib/card/format/nest/subformat.rb +18 -5
  215. data/lib/card/format/permission.rb +1 -1
  216. data/lib/card/format/registration.rb +18 -12
  217. data/lib/card/format/render.rb +22 -11
  218. data/lib/card/migration.rb +1 -1
  219. data/lib/card/mod.rb +63 -0
  220. data/lib/card/mod/dirs.rb +73 -4
  221. data/lib/card/mod/load_strategy.rb +64 -0
  222. data/lib/card/mod/load_strategy/eval.rb +16 -0
  223. data/lib/card/mod/load_strategy/pattern_tmp_files.rb +29 -0
  224. data/lib/card/mod/load_strategy/set_binding_magic.rb +48 -0
  225. data/lib/card/mod/load_strategy/set_tmp_files.rb +33 -0
  226. data/lib/card/mod/load_strategy/tmp_files.rb +38 -0
  227. data/lib/card/mod/loader.rb +44 -129
  228. data/lib/card/mod/loader/set_loader.rb +85 -0
  229. data/lib/card/mod/loader/set_pattern_loader.rb +58 -0
  230. data/lib/card/mod/module_template.rb +67 -0
  231. data/lib/card/model/save_helper.rb +27 -4
  232. data/lib/card/name.rb +8 -10
  233. data/lib/card/name/fields_and_traits.rb +7 -5
  234. data/lib/card/name/view_name.rb +4 -4
  235. data/lib/card/query.rb +11 -5
  236. data/lib/card/query/attributes.rb +1 -1
  237. data/lib/card/query/interpretation.rb +3 -3
  238. data/lib/card/reference.rb +2 -2
  239. data/lib/card/set.rb +6 -28
  240. data/lib/card/set/advanced_api.rb +2 -2
  241. data/lib/card/set/event.rb +39 -14
  242. data/lib/card/set/helpers.rb +8 -7
  243. data/lib/card/set/i18n_scanner.rb +22 -0
  244. data/lib/card/set/i18n_scope.rb +41 -7
  245. data/lib/card/set/loader.rb +3 -52
  246. data/lib/card/set_pattern.rb +22 -38
  247. data/lib/card/subcards.rb +1 -1
  248. data/lib/card/tasks/card.rake +43 -3
  249. data/lib/card/tasks/card/migrate.rake +77 -0
  250. data/lib/card/view.rb +34 -5
  251. data/lib/card/view/cache.rb +69 -32
  252. data/lib/card/view/cache_action.rb +158 -0
  253. data/lib/card/view/options.rb +107 -57
  254. data/lib/card/view/stub.rb +46 -12
  255. data/lib/card/view/visibility.rb +3 -3
  256. data/lib/cardio.rb +9 -5
  257. data/mod/account/set/right/account.rb +2 -3
  258. data/mod/account/set/right/email.rb +4 -5
  259. data/mod/account/set/right/password.rb +2 -2
  260. data/mod/account/set/right/salt.rb +1 -1
  261. data/mod/account/set/right/status.rb +1 -1
  262. data/mod/account/set/right/token.rb +5 -5
  263. data/mod/account/set/self/account_links.rb +1 -1
  264. data/mod/account/set/self/signin.rb +7 -7
  265. data/mod/account/set/type/signup.rb +6 -4
  266. data/mod/account/set/type/user.rb +16 -15
  267. data/mod/account/spec/set/all/account_spec.rb +96 -103
  268. data/mod/account/spec/set/right/account_spec.rb +1 -1
  269. data/mod/account/spec/set/self/account_links_spec.rb +2 -2
  270. data/mod/account/spec/set/self/signin_spec.rb +1 -1
  271. data/mod/account/template/type/signup/core.haml +22 -0
  272. data/mod/admin/set/self/admin.rb +26 -4
  273. data/mod/admin/set/self/admin_info.rb +7 -2
  274. data/mod/admin/spec/set/self/admin_spec.rb +47 -30
  275. data/mod/admin/spec/set/self/version_spec.rb +2 -2
  276. data/mod/basic_formats/format/css_format.rb +9 -0
  277. data/mod/basic_formats/format/csv_format.rb +10 -0
  278. data/mod/basic_formats/format/js_format.rb +4 -0
  279. data/mod/basic_formats/format/json_format.rb +15 -0
  280. data/mod/basic_formats/format/xml_format.rb +4 -0
  281. data/mod/basic_formats/set/all/all_csv.rb +1 -1
  282. data/mod/basic_formats/set/all/base.rb +17 -9
  283. data/mod/basic_formats/set/all/json.rb +1 -1
  284. data/mod/basic_formats/set/self/01_head/javascript.rb +11 -7
  285. data/mod/basic_formats/set/self/head.rb +3 -2
  286. data/{db/migrate_core_cards/20170719163708_update_bootswatch_themes.rb → mod/bootstrap/db/migrate_cards/20170719163701_update_bootswatch_themes.rb} +1 -1
  287. data/{db/migrate_core_cards → mod/bootstrap/db/migrate_cards}/20170726111053_add_bootstrap_mixins.rb +0 -0
  288. data/{db/migrate_core_cards → mod/bootstrap/db/migrate_cards}/20170726145012_select2.rb +0 -0
  289. data/mod/bootstrap/file/cerulean_skin_image/image-icon.png +0 -0
  290. data/mod/bootstrap/file/cerulean_skin_image/image-large.png +0 -0
  291. data/mod/bootstrap/file/cerulean_skin_image/image-medium.png +0 -0
  292. data/mod/bootstrap/file/cerulean_skin_image/image-small.png +0 -0
  293. data/mod/bootstrap/file/cosmo_skin_image/image-icon.png +0 -0
  294. data/mod/bootstrap/file/cosmo_skin_image/image-large.png +0 -0
  295. data/mod/bootstrap/file/cosmo_skin_image/image-medium.png +0 -0
  296. data/mod/bootstrap/file/cosmo_skin_image/image-small.png +0 -0
  297. data/mod/bootstrap/file/cyborg_skin_image/image-icon.png +0 -0
  298. data/mod/bootstrap/file/cyborg_skin_image/image-large.png +0 -0
  299. data/mod/bootstrap/file/cyborg_skin_image/image-medium.png +0 -0
  300. data/mod/bootstrap/file/cyborg_skin_image/image-small.png +0 -0
  301. data/mod/bootstrap/file/darkly_skin_image/image-icon.png +0 -0
  302. data/mod/bootstrap/file/darkly_skin_image/image-large.png +0 -0
  303. data/mod/bootstrap/file/darkly_skin_image/image-medium.png +0 -0
  304. data/mod/bootstrap/file/darkly_skin_image/image-small.png +0 -0
  305. data/mod/bootstrap/file/flatly_skin_image/image-icon.png +0 -0
  306. data/mod/bootstrap/file/flatly_skin_image/image-large.png +0 -0
  307. data/mod/bootstrap/file/flatly_skin_image/image-medium.png +0 -0
  308. data/mod/bootstrap/file/flatly_skin_image/image-small.png +0 -0
  309. data/mod/bootstrap/file/journal_skin_image/image-icon.png +0 -0
  310. data/mod/bootstrap/file/journal_skin_image/image-large.png +0 -0
  311. data/mod/bootstrap/file/journal_skin_image/image-medium.png +0 -0
  312. data/mod/bootstrap/file/journal_skin_image/image-small.png +0 -0
  313. data/mod/bootstrap/file/litera_skin_image/image-icon.png +0 -0
  314. data/mod/bootstrap/file/litera_skin_image/image-large.png +0 -0
  315. data/mod/bootstrap/file/litera_skin_image/image-medium.png +0 -0
  316. data/mod/bootstrap/file/litera_skin_image/image-original.png +0 -0
  317. data/mod/bootstrap/file/litera_skin_image/image-small.png +0 -0
  318. data/mod/bootstrap/file/lumen_skin_image/image-icon.png +0 -0
  319. data/mod/bootstrap/file/lumen_skin_image/image-large.png +0 -0
  320. data/mod/bootstrap/file/lumen_skin_image/image-medium.png +0 -0
  321. data/mod/bootstrap/file/lumen_skin_image/image-small.png +0 -0
  322. data/mod/bootstrap/file/lux_skin_image/image-icon.png +0 -0
  323. data/mod/bootstrap/file/lux_skin_image/image-large.png +0 -0
  324. data/mod/bootstrap/file/lux_skin_image/image-medium.png +0 -0
  325. data/mod/bootstrap/file/lux_skin_image/image-original.png +0 -0
  326. data/mod/bootstrap/file/lux_skin_image/image-small.png +0 -0
  327. data/mod/bootstrap/file/materia_skin_image/image-icon.png +0 -0
  328. data/mod/bootstrap/file/materia_skin_image/image-large.png +0 -0
  329. data/mod/bootstrap/file/materia_skin_image/image-medium.png +0 -0
  330. data/mod/bootstrap/file/materia_skin_image/image-original.png +0 -0
  331. data/mod/bootstrap/file/materia_skin_image/image-small.png +0 -0
  332. data/mod/bootstrap/file/minty_skin_image/image-icon.png +0 -0
  333. data/mod/bootstrap/file/minty_skin_image/image-large.png +0 -0
  334. data/mod/bootstrap/file/minty_skin_image/image-medium.png +0 -0
  335. data/mod/bootstrap/file/minty_skin_image/image-original.png +0 -0
  336. data/mod/bootstrap/file/minty_skin_image/image-small.png +0 -0
  337. data/mod/bootstrap/file/pulse_skin_image/image-icon.png +0 -0
  338. data/mod/bootstrap/file/pulse_skin_image/image-large.png +0 -0
  339. data/mod/bootstrap/file/pulse_skin_image/image-medium.png +0 -0
  340. data/mod/bootstrap/file/pulse_skin_image/image-original.png +0 -0
  341. data/mod/bootstrap/file/pulse_skin_image/image-small.png +0 -0
  342. data/mod/bootstrap/file/sandstone_skin_image/image-icon.png +0 -0
  343. data/mod/bootstrap/file/sandstone_skin_image/image-large.png +0 -0
  344. data/mod/bootstrap/file/sandstone_skin_image/image-medium.png +0 -0
  345. data/mod/bootstrap/file/sandstone_skin_image/image-small.png +0 -0
  346. data/mod/bootstrap/file/simplex_skin_image/image-icon.png +0 -0
  347. data/mod/bootstrap/file/simplex_skin_image/image-large.png +0 -0
  348. data/mod/bootstrap/file/simplex_skin_image/image-medium.png +0 -0
  349. data/mod/bootstrap/file/simplex_skin_image/image-small.png +0 -0
  350. data/mod/bootstrap/file/slate_skin_image/image-icon.png +0 -0
  351. data/mod/bootstrap/file/slate_skin_image/image-large.png +0 -0
  352. data/mod/bootstrap/file/slate_skin_image/image-medium.png +0 -0
  353. data/mod/bootstrap/file/slate_skin_image/image-small.png +0 -0
  354. data/mod/bootstrap/file/solar_skin_image/image-icon.png +0 -0
  355. data/mod/bootstrap/file/solar_skin_image/image-large.png +0 -0
  356. data/mod/bootstrap/file/solar_skin_image/image-medium.png +0 -0
  357. data/mod/bootstrap/file/solar_skin_image/image-original.png +0 -0
  358. data/mod/bootstrap/file/solar_skin_image/image-small.png +0 -0
  359. data/mod/bootstrap/file/spacelab_skin_image/image-icon.png +0 -0
  360. data/mod/bootstrap/file/spacelab_skin_image/image-large.png +0 -0
  361. data/mod/bootstrap/file/spacelab_skin_image/image-medium.png +0 -0
  362. data/mod/bootstrap/file/spacelab_skin_image/image-small.png +0 -0
  363. data/mod/bootstrap/file/superhero_skin_image/image-icon.png +0 -0
  364. data/mod/bootstrap/file/superhero_skin_image/image-large.png +0 -0
  365. data/mod/bootstrap/file/superhero_skin_image/image-medium.png +0 -0
  366. data/mod/bootstrap/file/superhero_skin_image/image-small.png +0 -0
  367. data/mod/bootstrap/file/united_skin_image/image-icon.png +0 -0
  368. data/mod/bootstrap/file/united_skin_image/image-large.png +0 -0
  369. data/mod/bootstrap/file/united_skin_image/image-medium.png +0 -0
  370. data/mod/bootstrap/file/united_skin_image/image-small.png +0 -0
  371. data/mod/bootstrap/file/yeti_skin_image/image-icon.png +0 -0
  372. data/mod/bootstrap/file/yeti_skin_image/image-large.png +0 -0
  373. data/mod/bootstrap/file/yeti_skin_image/image-medium.png +0 -0
  374. data/mod/bootstrap/file/yeti_skin_image/image-small.png +0 -0
  375. data/mod/bootstrap/lib/bootstrap/basic_tags.rb +3 -3
  376. data/mod/bootstrap/lib/bootstrap/component.rb +124 -37
  377. data/mod/bootstrap/lib/bootstrap/component/carousel.rb +68 -0
  378. data/mod/bootstrap/lib/bootstrap/component/form.rb +49 -16
  379. data/mod/bootstrap/lib/bootstrap/component/horizontal_form.rb +35 -10
  380. data/mod/bootstrap/lib/bootstrap/component/layout.rb +10 -2
  381. data/mod/bootstrap/lib/bootstrap/component/panel.rb +4 -4
  382. data/mod/bootstrap/lib/bootstrap/old_component.rb +182 -0
  383. data/mod/bootstrap/lib/javascript/bootstrap_modal_wagn.js +1 -1
  384. data/mod/bootstrap/set/all/bootstrap/accordion.rb +10 -10
  385. data/mod/bootstrap/set/all/bootstrap/helper.rb +2 -0
  386. data/mod/bootstrap/set/all/bootstrap/tabs.rb +1 -1
  387. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_builder_spec.rb +24 -14
  388. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_spec.rb +2 -2
  389. data/mod/bootstrap/spec/set/all/bootstrap/carousel_spec.rb +65 -0
  390. data/mod/bootstrap/spec/set/all/bootstrap/form_spec.rb +4 -44
  391. data/mod/bootstrap/spec/set/all/bootstrap/horizontal_form_spec.rb +46 -0
  392. data/mod/bootstrap/spec/set/all/bootstrap/layout_spec.rb +85 -91
  393. data/mod/carrierwave/lib/carrier_wave/file_card_uploader.rb +7 -1
  394. data/mod/carrierwave/set/abstract/attachment/paths.rb +2 -2
  395. data/mod/carrierwave/set/abstract/attachment/upload_cache.rb +10 -3
  396. data/mod/carrierwave/set/type/file.rb +5 -5
  397. data/mod/carrierwave/set/type/image.rb +4 -4
  398. data/mod/carrierwave/spec/lib/carrier_wave/file_card_uploader_spec.rb +1 -0
  399. data/mod/carrierwave/spec/set/type/file/bucket_config_spec.rb +90 -0
  400. data/mod/carrierwave/spec/set/type/file_spec.rb +41 -99
  401. data/mod/core/chunk/link.rb +1 -2
  402. data/mod/core/chunk/nest.rb +1 -1
  403. data/mod/core/chunk/reference.rb +1 -1
  404. data/mod/core/chunk/view_stub.rb +8 -0
  405. data/mod/core/format/html_format.rb +9 -3
  406. data/mod/core/set/abstract/code_file.rb +1 -1
  407. data/mod/core/set/all/actify.rb +34 -0
  408. data/mod/core/set/all/assign_attributes.rb +13 -0
  409. data/mod/core/set/all/cache.rb +96 -0
  410. data/mod/core/set/all/collection.rb +16 -8
  411. data/mod/core/set/all/{event.rb → event_conditions.rb} +1 -1
  412. data/mod/core/set/all/fetch.rb +43 -315
  413. data/mod/core/set/all/fetch_helper.rb +130 -0
  414. data/mod/core/set/all/haml.rb +13 -0
  415. data/mod/core/set/all/i18n.rb +5 -4
  416. data/mod/core/set/all/mark.rb +66 -0
  417. data/mod/core/set/all/name.rb +35 -57
  418. data/mod/core/set/all/permissions.rb +6 -3
  419. data/mod/core/set/all/references.rb +5 -5
  420. data/mod/core/set/all/rename.rb +34 -0
  421. data/mod/core/set/all/rules.rb +1 -1
  422. data/mod/core/set/all/states.rb +12 -0
  423. data/mod/core/set/all/trash.rb +4 -3
  424. data/mod/core/set/all/type.rb +4 -0
  425. data/mod/core/set/all/update_read_rules.rb +1 -1
  426. data/mod/core/spec/set/all/actify_spec.rb +9 -8
  427. data/mod/core/spec/set/all/assign_attributes_spec.rb +33 -299
  428. data/mod/core/spec/set/all/collection_spec.rb +2 -2
  429. data/mod/core/spec/set/all/event_conditions_spec.rb +54 -0
  430. data/mod/core/spec/set/all/fetch_spec.rb +21 -29
  431. data/mod/core/spec/set/all/i18n_spec.rb +17 -0
  432. data/mod/core/spec/set/all/name_spec.rb +39 -3
  433. data/mod/core/spec/set/all/name_validations_spec.rb +21 -0
  434. data/mod/core/spec/set/all/permissions/reader_rules_spec.rb +166 -0
  435. data/mod/core/spec/set/all/permissions_spec.rb +25 -171
  436. data/mod/core/spec/set/all/rename_spec.rb +171 -0
  437. data/mod/core/spec/set/all/rules2_spec.rb +45 -49
  438. data/mod/core/spec/set/all/trash_spec.rb +84 -61
  439. data/mod/history/lib/card/act.rb +5 -4
  440. data/mod/history/lib/card/act/act_renderer.rb +55 -28
  441. data/mod/history/lib/card/act/act_renderer/absolute_act_renderer.rb +10 -2
  442. data/mod/history/lib/card/act/act_renderer/relative_act_renderer.rb +8 -1
  443. data/mod/history/lib/card/action.rb +35 -3
  444. data/mod/history/lib/card/action/action_renderer.rb +3 -3
  445. data/mod/history/lib/card/action/admin.rb +17 -0
  446. data/mod/history/lib/card/change.rb +1 -1
  447. data/mod/history/set/all/act_view.rb +16 -9
  448. data/mod/history/set/all/actions.rb +35 -9
  449. data/mod/history/set/all/content_history.rb +22 -14
  450. data/mod/history/set/all/history.rb +52 -19
  451. data/mod/machines/file/all_script_machine_output/file.js +34 -16
  452. data/mod/machines/file/script_html5shiv_printshiv_machine_output/file.js +2 -0
  453. data/mod/machines/lib/card/machine.rb +49 -0
  454. data/mod/machines/lib/javascript/decko.js.coffee +9 -0
  455. data/mod/machines/lib/javascript/decko_mod.js.coffee +3 -0
  456. data/mod/machines/lib/stylesheets/style_cards.scss +10 -14
  457. data/mod/machines/set/abstract/machine.rb +1 -1
  458. data/mod/machines/spec/set/abstract/machine_spec.rb +1 -1
  459. data/mod/machines/spec/set/type/scss_spec.rb +5 -7
  460. data/mod/machines/spec/shared_examples/machine.rb +3 -3
  461. data/mod/notifications/set/all/follow.rb +2 -2
  462. data/mod/notifications/set/all/send_notifications.rb +21 -15
  463. data/mod/notifications/set/right/bcc.rb +1 -1
  464. data/mod/notifications/set/right/follow.rb +1 -1
  465. data/mod/notifications/set/right/html_message.rb +6 -0
  466. data/mod/notifications/set/right/text_message.rb +6 -0
  467. data/mod/notifications/spec/set/all/notify_spec.rb +87 -166
  468. data/mod/notifications/spec/set/type/notification_template_spec.rb +3 -2
  469. data/mod/pointer/set/abstract/02_pointer.rb +4 -4
  470. data/mod/pointer/set/abstract/02_pointer/edit.rb +41 -14
  471. data/mod/pointer/spec/set/type/pointer_spec.rb +10 -9
  472. data/mod/prosemirror_editor/lib/javascript/script_prosemirror.js +305 -143
  473. data/mod/settings/set/abstract/permission.rb +1 -1
  474. data/mod/settings/set/right/structure.rb +0 -1
  475. data/mod/settings/set/self/recent_settings.rb +4 -0
  476. data/mod/standard/file/credit_image/image-icon.png +0 -0
  477. data/mod/standard/file/credit_image/image-large.png +0 -0
  478. data/mod/standard/file/credit_image/image-medium.png +0 -0
  479. data/mod/standard/file/credit_image/image-small.png +0 -0
  480. data/mod/standard/file/favicon/image-icon.png +0 -0
  481. data/mod/standard/file/favicon/image-large.png +0 -0
  482. data/mod/standard/file/favicon/image-medium.png +0 -0
  483. data/mod/standard/file/favicon/image-small.png +0 -0
  484. data/mod/standard/file/logo/image-icon.png +0 -0
  485. data/mod/standard/file/logo/image-large.png +0 -0
  486. data/mod/standard/file/logo/image-medium.png +0 -0
  487. data/mod/standard/file/logo/image-small.png +0 -0
  488. data/mod/standard/set/abstract/search.rb +1 -1
  489. data/mod/standard/set/all/error.rb +5 -5
  490. data/mod/standard/set/all/links.rb +1 -2
  491. data/mod/standard/set/all/list_changes.rb +1 -1
  492. data/mod/standard/set/all/rich_html/content.rb +20 -14
  493. data/mod/standard/set/all/rich_html/editing.rb +9 -7
  494. data/mod/standard/set/all/rich_html/form.rb +24 -27
  495. data/mod/standard/set/all/rich_html/header.rb +1 -1
  496. data/mod/standard/set/all/rich_html/new.rb +12 -10
  497. data/mod/standard/set/all/rich_html/toolbar.rb +2 -2
  498. data/mod/standard/set/all/rich_html/wrapper.rb +4 -4
  499. data/mod/standard/set/self/activity_toolbar_button.rb +1 -1
  500. data/mod/standard/set/self/recent.rb +4 -2
  501. data/mod/standard/set/type/basic.rb +2 -2
  502. data/mod/standard/set/type/cardtype.rb +11 -8
  503. data/mod/standard/set/type/list.rb +4 -4
  504. data/mod/standard/set/type/search_type.rb +4 -4
  505. data/mod/standard/set/type/session.rb +4 -0
  506. data/mod/standard/set/type/set.rb +1 -1
  507. data/mod/standard/set/type/toggle.rb +2 -2
  508. data/mod/standard/spec/chunk/link_spec.rb +1 -1
  509. data/mod/standard/spec/set/all/history_spec.rb +31 -12
  510. data/mod/standard/spec/set/all/rich_html/form_spec.rb +2 -2
  511. data/mod/standard/spec/set/all/rich_html/toolbar_spec.rb +1 -0
  512. data/mod/standard/spec/set/type/cardtype_spec.rb +44 -1
  513. data/mod/standard/spec/set/type/email_template/email_config_spec.rb +2 -1
  514. data/mod/standard/spec/set/type/list_spec.rb +8 -3
  515. data/mod/standard/spec/set/type/listed_by_spec.rb +0 -6
  516. data/spec/config/initializers/patches/active_job_spec.rb +7 -0
  517. data/spec/lib/card/action_spec.rb +3 -2
  518. data/spec/lib/card/codename_spec.rb +7 -2
  519. data/spec/lib/card/content_spec.rb +19 -1
  520. data/spec/lib/card/format/render_spec.rb +5 -5
  521. data/spec/lib/card/i18n_spec.rb +5 -20
  522. data/spec/lib/card/{loader → mod/loader}/mod_dirs.rb +0 -0
  523. data/spec/lib/card/mod/loader/set_loader_spec.rb +19 -0
  524. data/spec/lib/card/mod/loader/set_pattern_loader_spec.rb +19 -0
  525. data/spec/lib/card/name/fields_and_traits_spec.rb +18 -0
  526. data/spec/lib/card/name_spec.rb +3 -3
  527. data/spec/lib/card/query/sorting_spec.rb +1 -1
  528. data/spec/lib/card/query_spec.rb +16 -9
  529. data/spec/lib/card/reference_spec.rb +5 -6
  530. data/spec/lib/card/set_pattern_spec.rb +4 -0
  531. data/spec/lib/card/view_cache_spec.rb +17 -0
  532. data/spec/models/card/create_spec.rb +40 -22
  533. data/spec/models/card/trash_spec.rb +8 -70
  534. data/spec/models/card_spec.rb +16 -46
  535. data/spec/spec_helper.rb +1 -3
  536. data/spec/support/card_spec_helper.rb +5 -2
  537. data/spec/support/card_spec_loader.rb +34 -6
  538. data/spec/support/helper/event_helper.rb +1 -1
  539. data/spec/support/helper/save_helper.rb +4 -0
  540. data/spec/support/helper/set_helper.rb +1 -1
  541. data/spec/support/matchers/card_matchers.rb +136 -0
  542. data/spec/support/matchers/expectations.rb +5 -0
  543. data/spec/support/matchers/file_matchers.rb +71 -0
  544. data/spec/support/matchers/negated_matchers.rb +2 -0
  545. data/spec/support/test_mods/mod1/set/all/test_set.rb +3 -0
  546. data/spec/support/test_mods/mod2/set_pattern/test_pattern.rb +0 -0
  547. data/tmpsets/set/mod001-admin/self/admin.rb +130 -0
  548. data/tmpsets/set/mod001-admin/self/admin_info.rb +110 -0
  549. data/tmpsets/set/mod001-admin/self/version.rb +15 -0
  550. data/tmpsets/set/mod002-core/abstract/code_file.rb +79 -0
  551. data/tmpsets/set/mod002-core/all/actify.rb +101 -0
  552. data/tmpsets/set/mod002-core/all/active_card.rb +42 -0
  553. data/tmpsets/set/mod002-core/all/collection.rb +313 -0
  554. data/tmpsets/set/mod002-core/all/content.rb +69 -0
  555. data/tmpsets/set/mod002-core/all/debug.rb +30 -0
  556. data/tmpsets/set/mod002-core/all/erb.rb +18 -0
  557. data/tmpsets/set/mod002-core/all/event.rb +62 -0
  558. data/tmpsets/set/mod002-core/all/export.rb +49 -0
  559. data/tmpsets/set/mod002-core/all/fetch.rb +335 -0
  560. data/tmpsets/set/mod002-core/all/haml.rb +14 -0
  561. data/tmpsets/set/mod002-core/all/initialize.rb +42 -0
  562. data/tmpsets/set/mod002-core/all/location_history.rb +15 -0
  563. data/tmpsets/set/mod002-core/all/name.rb +282 -0
  564. data/tmpsets/set/mod002-core/all/name_validations.rb +65 -0
  565. data/tmpsets/set/mod002-core/all/pattern.rb +67 -0
  566. data/tmpsets/set/mod002-core/all/permissions.rb +319 -0
  567. data/tmpsets/set/mod002-core/all/phases.rb +23 -0
  568. data/tmpsets/set/mod002-core/all/references.rb +187 -0
  569. data/tmpsets/set/mod002-core/all/rules.rb +311 -0
  570. data/tmpsets/set/mod002-core/all/stages.rb +31 -0
  571. data/tmpsets/set/mod002-core/all/states.rb +31 -0
  572. data/tmpsets/set/mod002-core/all/subcards.rb +85 -0
  573. data/tmpsets/set/mod002-core/all/templating.rb +78 -0
  574. data/tmpsets/set/mod002-core/all/tracked_attributes.rb +78 -0
  575. data/tmpsets/set/mod002-core/all/trash.rb +113 -0
  576. data/tmpsets/set/mod002-core/all/type.rb +60 -0
  577. data/tmpsets/set/mod002-core/all/update_read_rules.rb +91 -0
  578. data/tmpsets/set/mod002-core/all/utils.rb +62 -0
  579. data/tmpsets/set/mod002-core/all/view_cache.rb +16 -0
  580. data/tmpsets/set/mod003-history/all/actions.rb +60 -0
  581. data/tmpsets/set/mod003-history/all/content_history.rb +168 -0
  582. data/tmpsets/set/mod003-history/all/history.rb +408 -0
  583. data/tmpsets/set/mod004-basic_formats/all/all_css.rb +45 -0
  584. data/tmpsets/set/mod004-basic_formats/all/all_csv.rb +56 -0
  585. data/tmpsets/set/mod004-basic_formats/all/all_js.rb +13 -0
  586. data/tmpsets/set/mod004-basic_formats/all/base.rb +155 -0
  587. data/tmpsets/set/mod004-basic_formats/all/file.rb +16 -0
  588. data/tmpsets/set/mod004-basic_formats/all/json.rb +76 -0
  589. data/tmpsets/set/mod004-basic_formats/all/rss.rb +77 -0
  590. data/tmpsets/set/mod004-basic_formats/all/text.rb +13 -0
  591. data/tmpsets/set/mod004-basic_formats/self/01_head/javascript.rb +79 -0
  592. data/tmpsets/set/mod004-basic_formats/self/head.rb +101 -0
  593. data/tmpsets/set/mod005-pointer/abstract/01_pointer.rb +193 -0
  594. data/tmpsets/set/mod005-pointer/abstract/01_pointer/edit.rb +224 -0
  595. data/tmpsets/set/mod005-pointer/abstract/code_pointer.rb +16 -0
  596. data/tmpsets/set/mod005-pointer/self/script_editors.rb +8 -0
  597. data/tmpsets/set/mod005-pointer/self/script_mods.rb +8 -0
  598. data/tmpsets/set/mod005-pointer/self/script_pointer_config.rb +10 -0
  599. data/tmpsets/set/mod005-pointer/type/pointer.rb +8 -0
  600. data/tmpsets/set/mod006-ace_editor/abstract/ace_editor.rb +18 -0
  601. data/tmpsets/set/mod006-ace_editor/self/script_ace.rb +10 -0
  602. data/tmpsets/set/mod006-ace_editor/self/script_ace_config.rb +12 -0
  603. data/tmpsets/set/mod007-prosemirror_editor/abstract/prosemirror_editor.rb +14 -0
  604. data/tmpsets/set/mod007-prosemirror_editor/self/script_prosemirror.rb +10 -0
  605. data/tmpsets/set/mod007-prosemirror_editor/self/script_prosemirror_config.rb +13 -0
  606. data/tmpsets/set/mod009-solid_cache/abstract/solid_cache.rb +106 -0
  607. data/tmpsets/set/mod009-solid_cache/all/solid_cache.rb +21 -0
  608. data/tmpsets/set/mod009-solid_cache/right/solid_cache.rb +39 -0
  609. data/tmpsets/set/mod010-basic_types/type/html.rb +26 -0
  610. data/tmpsets/set/mod010-basic_types/type/plain_text.rb +19 -0
  611. data/tmpsets/set/mod011-machines/abstract/machine.rb +277 -0
  612. data/tmpsets/set/mod011-machines/abstract/machine_input.rb +83 -0
  613. data/tmpsets/set/mod011-machines/abstract/script.rb +49 -0
  614. data/tmpsets/set/mod011-machines/all/reset_machines.rb +19 -0
  615. data/tmpsets/set/mod011-machines/right/machine_cache.rb +18 -0
  616. data/tmpsets/set/mod011-machines/right/machine_input.rb +10 -0
  617. data/tmpsets/set/mod011-machines/right/machine_output.rb +47 -0
  618. data/tmpsets/set/mod011-machines/self/script_card_menu.rb +8 -0
  619. data/tmpsets/set/mod011-machines/self/script_html5shiv_printshiv.rb +8 -0
  620. data/tmpsets/set/mod011-machines/self/script_jquery.rb +8 -0
  621. data/tmpsets/set/mod011-machines/self/script_jquery_helper.rb +16 -0
  622. data/tmpsets/set/mod011-machines/self/script_slot.rb +14 -0
  623. data/tmpsets/set/mod011-machines/self/style_bootstrap_compatible.rb +8 -0
  624. data/tmpsets/set/mod011-machines/self/style_cards.rb +8 -0
  625. data/tmpsets/set/mod011-machines/self/style_jquery_ui_smoothness.rb +8 -0
  626. data/tmpsets/set/mod011-machines/type/coffee_script.rb +43 -0
  627. data/tmpsets/set/mod011-machines/type/css.rb +67 -0
  628. data/tmpsets/set/mod011-machines/type/java_script.rb +36 -0
  629. data/tmpsets/set/mod011-machines/type/scss.rb +21 -0
  630. data/tmpsets/set/mod011-machines/type/skin.rb +13 -0
  631. data/tmpsets/set/mod012-settings/abstract/permission.rb +119 -0
  632. data/tmpsets/set/mod012-settings/right/add_help.rb +18 -0
  633. data/tmpsets/set/mod012-settings/right/comment.rb +8 -0
  634. data/tmpsets/set/mod012-settings/right/create.rb +8 -0
  635. data/tmpsets/set/mod012-settings/right/default.rb +14 -0
  636. data/tmpsets/set/mod012-settings/right/delete.rb +8 -0
  637. data/tmpsets/set/mod012-settings/right/help.rb +10 -0
  638. data/tmpsets/set/mod012-settings/right/read.rb +10 -0
  639. data/tmpsets/set/mod012-settings/right/script.rb +16 -0
  640. data/tmpsets/set/mod012-settings/right/structure.rb +68 -0
  641. data/tmpsets/set/mod012-settings/right/style.rb +17 -0
  642. data/tmpsets/set/mod012-settings/right/update.rb +8 -0
  643. data/tmpsets/set/mod012-settings/self/accountable.rb +10 -0
  644. data/tmpsets/set/mod012-settings/self/add_help.rb +9 -0
  645. data/tmpsets/set/mod012-settings/self/autoname.rb +9 -0
  646. data/tmpsets/set/mod012-settings/self/captcha.rb +9 -0
  647. data/tmpsets/set/mod012-settings/self/create.rb +9 -0
  648. data/tmpsets/set/mod012-settings/self/default.rb +9 -0
  649. data/tmpsets/set/mod012-settings/self/default_html_view.rb +9 -0
  650. data/tmpsets/set/mod012-settings/self/delete.rb +9 -0
  651. data/tmpsets/set/mod012-settings/self/follow_fields.rb +9 -0
  652. data/tmpsets/set/mod012-settings/self/help.rb +9 -0
  653. data/tmpsets/set/mod012-settings/self/input.rb +11 -0
  654. data/tmpsets/set/mod012-settings/self/layout.rb +9 -0
  655. data/tmpsets/set/mod012-settings/self/on_create.rb +9 -0
  656. data/tmpsets/set/mod012-settings/self/on_delete.rb +9 -0
  657. data/tmpsets/set/mod012-settings/self/on_update.rb +9 -0
  658. data/tmpsets/set/mod012-settings/self/options.rb +11 -0
  659. data/tmpsets/set/mod012-settings/self/options_label.rb +11 -0
  660. data/tmpsets/set/mod012-settings/self/read.rb +9 -0
  661. data/tmpsets/set/mod012-settings/self/recent_settings.rb +10 -0
  662. data/tmpsets/set/mod012-settings/self/script.rb +9 -0
  663. data/tmpsets/set/mod012-settings/self/structure.rb +9 -0
  664. data/tmpsets/set/mod012-settings/self/style.rb +9 -0
  665. data/tmpsets/set/mod012-settings/self/table_of_contents.rb +9 -0
  666. data/tmpsets/set/mod012-settings/self/thanks.rb +9 -0
  667. data/tmpsets/set/mod012-settings/self/update.rb +9 -0
  668. data/tmpsets/set/mod012-settings/type/setting.rb +111 -0
  669. data/tmpsets/set/mod013-email/all/email_html.rb +11 -0
  670. data/tmpsets/set/mod013-email/all/email_text.rb +12 -0
  671. data/tmpsets/set/mod013-email/all/follow.rb +253 -0
  672. data/tmpsets/set/mod013-email/all/notify.rb +271 -0
  673. data/tmpsets/set/mod013-email/all/observer.rb +33 -0
  674. data/tmpsets/set/mod013-email/right/bcc.rb +47 -0
  675. data/tmpsets/set/mod013-email/right/cc.rb +10 -0
  676. data/tmpsets/set/mod013-email/right/follow.rb +106 -0
  677. data/tmpsets/set/mod013-email/right/follow_fields.rb +10 -0
  678. data/tmpsets/set/mod013-email/right/followers.rb +41 -0
  679. data/tmpsets/set/mod013-email/right/following.rb +65 -0
  680. data/tmpsets/set/mod013-email/right/from.rb +10 -0
  681. data/tmpsets/set/mod013-email/right/html_message.rb +10 -0
  682. data/tmpsets/set/mod013-email/right/to.rb +10 -0
  683. data/tmpsets/set/mod013-email/self/always.rb +20 -0
  684. data/tmpsets/set/mod013-email/self/created.rb +26 -0
  685. data/tmpsets/set/mod013-email/self/edited.rb +27 -0
  686. data/tmpsets/set/mod013-email/self/follow.rb +9 -0
  687. data/tmpsets/set/mod013-email/self/follow_defaults.rb +75 -0
  688. data/tmpsets/set/mod013-email/self/never.rb +20 -0
  689. data/tmpsets/set/mod013-email/type/email_template.rb +133 -0
  690. data/tmpsets/set/mod013-email/type_plus_right/user/follow.rb +180 -0
  691. data/tmpsets/set/mod014-developer/all/event_viz.rb +59 -0
  692. data/tmpsets/set/mod014-developer/all/view_viz.rb +30 -0
  693. data/tmpsets/set/mod014-developer/right/debug.rb +96 -0
  694. data/tmpsets/set/mod015-carrierwave/abstract/attachment.rb +118 -0
  695. data/tmpsets/set/mod015-carrierwave/abstract/attachment/paths.rb +57 -0
  696. data/tmpsets/set/mod015-carrierwave/abstract/attachment/storage_type.rb +326 -0
  697. data/tmpsets/set/mod015-carrierwave/abstract/attachment/upload_cache.rb +84 -0
  698. data/tmpsets/set/mod015-carrierwave/all/file_utils.rb +35 -0
  699. data/tmpsets/set/mod015-carrierwave/self/admin.rb +30 -0
  700. data/tmpsets/set/mod015-carrierwave/type/file.rb +158 -0
  701. data/tmpsets/set/mod015-carrierwave/type/image.rb +97 -0
  702. data/tmpsets/set/mod016-standard/all/comment.rb +67 -0
  703. data/tmpsets/set/mod016-standard/all/error.rb +229 -0
  704. data/tmpsets/set/mod016-standard/all/links.rb +165 -0
  705. data/tmpsets/set/mod016-standard/all/list_changes.rb +53 -0
  706. data/tmpsets/set/mod016-standard/all/rich_html/content.rb +261 -0
  707. data/tmpsets/set/mod016-standard/all/rich_html/editing.rb +247 -0
  708. data/tmpsets/set/mod016-standard/all/rich_html/form.rb +298 -0
  709. data/tmpsets/set/mod016-standard/all/rich_html/header.rb +78 -0
  710. data/tmpsets/set/mod016-standard/all/rich_html/menu.rb +154 -0
  711. data/tmpsets/set/mod016-standard/all/rich_html/modal.rb +58 -0
  712. data/tmpsets/set/mod016-standard/all/rich_html/toolbar.rb +312 -0
  713. data/tmpsets/set/mod016-standard/all/rich_html/wrapper.rb +191 -0
  714. data/tmpsets/set/mod016-standard/right/discussion.rb +10 -0
  715. data/tmpsets/set/mod016-standard/right/when_created.rb +14 -0
  716. data/tmpsets/set/mod016-standard/right/when_last_edited.rb +14 -0
  717. data/tmpsets/set/mod016-standard/rstar/rules.rb +107 -0
  718. data/tmpsets/set/mod016-standard/rstar/rules_editor.rb +371 -0
  719. data/tmpsets/set/mod016-standard/self/alerts.rb +12 -0
  720. data/tmpsets/set/mod016-standard/self/codenames.rb +7 -0
  721. data/tmpsets/set/mod016-standard/self/foot.rb +15 -0
  722. data/tmpsets/set/mod016-standard/self/navbox.rb +36 -0
  723. data/tmpsets/set/mod016-standard/self/now.rb +14 -0
  724. data/tmpsets/set/mod016-standard/self/recent.rb +34 -0
  725. data/tmpsets/set/mod016-standard/self/search.rb +71 -0
  726. data/tmpsets/set/mod016-standard/type/basic.rb +59 -0
  727. data/tmpsets/set/mod016-standard/type/cardtype.rb +81 -0
  728. data/tmpsets/set/mod016-standard/type/date.rb +15 -0
  729. data/tmpsets/set/mod016-standard/type/layout_type.rb +17 -0
  730. data/tmpsets/set/mod016-standard/type/list.rb +120 -0
  731. data/tmpsets/set/mod016-standard/type/listed_by.rb +85 -0
  732. data/tmpsets/set/mod016-standard/type/number.rb +25 -0
  733. data/tmpsets/set/mod016-standard/type/phrase.rb +10 -0
  734. data/tmpsets/set/mod016-standard/type/search_type.rb +339 -0
  735. data/tmpsets/set/mod016-standard/type/session.rb +42 -0
  736. data/tmpsets/set/mod016-standard/type/set.rb +371 -0
  737. data/tmpsets/set/mod016-standard/type/toggle.rb +19 -0
  738. data/tmpsets/set/mod016-standard/type/uri.rb +18 -0
  739. data/tmpsets/set/mod017-account/all/account.rb +72 -0
  740. data/tmpsets/set/mod017-account/right/account.rb +196 -0
  741. data/tmpsets/set/mod017-account/right/email.rb +61 -0
  742. data/tmpsets/set/mod017-account/right/password.rb +54 -0
  743. data/tmpsets/set/mod017-account/right/salt.rb +12 -0
  744. data/tmpsets/set/mod017-account/right/status.rb +16 -0
  745. data/tmpsets/set/mod017-account/right/token.rb +57 -0
  746. data/tmpsets/set/mod017-account/self/account_links.rb +72 -0
  747. data/tmpsets/set/mod017-account/self/signin.rb +165 -0
  748. data/tmpsets/set/mod017-account/type/signup.rb +175 -0
  749. data/tmpsets/set/mod017-account/type/user.rb +88 -0
  750. data/tmpsets/set/mod018-bootstrap/all/bootstrap/form.rb +42 -0
  751. data/tmpsets/set/mod018-bootstrap/all/bootstrap/helper.rb +236 -0
  752. data/tmpsets/set/mod018-bootstrap/all/bootstrap/table.rb +68 -0
  753. data/tmpsets/set/mod018-bootstrap/all/bootstrap/tabs.rb +88 -0
  754. data/tmpsets/set/mod018-bootstrap/all/bootstrap/wrapper.rb +18 -0
  755. data/tmpsets/set/mod018-bootstrap/all/rich_bootstrap.rb +13 -0
  756. data/tmpsets/set/mod018-bootstrap/self/bootstrap_cards.rb +8 -0
  757. data/tmpsets/set/mod018-bootstrap/self/bootstrap_js.rb +12 -0
  758. data/tmpsets/set/mod018-bootstrap/self/bootswatch_shared.rb +47 -0
  759. data/tmpsets/set/mod018-bootstrap/self/script_mods.rb +7 -0
  760. data/tmpsets/set/mod018-bootstrap/self/smartmenu_css.rb +12 -0
  761. data/tmpsets/set/mod018-bootstrap/self/smartmenu_js.rb +12 -0
  762. data/tmpsets/set_pattern/100-all.rb +24 -0
  763. data/tmpsets/set_pattern/101-all_plus.rb +26 -0
  764. data/tmpsets/set_pattern/102-type.rb +36 -0
  765. data/tmpsets/set_pattern/103-star.rb +28 -0
  766. data/tmpsets/set_pattern/104-rstar.rb +30 -0
  767. data/tmpsets/set_pattern/105-right.rb +33 -0
  768. data/tmpsets/set_pattern/106-type_plus_right.rb +39 -0
  769. data/tmpsets/set_pattern/107-self.rb +32 -0
  770. metadata +494 -167
  771. data/README_Developers.rdoc +0 -100
  772. data/lib/card/format/names.rb +0 -43
  773. data/lib/card/format/nest/view.rb +0 -65
  774. data/lib/card/view/fetch.rb +0 -121
  775. data/mod/core/spec/set/all/attribute_tracking_spec.rb +0 -21
  776. data/spec/models/card/cardtype_spec.rb +0 -189
  777. data/spec/models/card/type_transition_spec.rb +0 -132
  778. data/spec/models/card/validation_spec.rb +0 -34
  779. data/spec/support/matchers.rb +0 -74
@@ -11,8 +11,9 @@ describe Card::Set::Type::NotificationTemplate do
11
11
 
12
12
  def notify
13
13
  Card::Auth.as_bot do
14
- xhr :post, :update, id: "~#{Card['A'].id}",
15
- card: { "content" => "change" }
14
+ post :update, params: { id: "~#{Card['A'].id}",
15
+ card: { "content" => "change" } },
16
+ xhr: true
16
17
  end
17
18
  end
18
19
 
@@ -5,12 +5,12 @@ stage_method :changed_item_names do
5
5
  end
6
6
 
7
7
  stage_method :dropped_item_names do
8
- old_items = item_names content: db_content_was
8
+ old_items = item_names content: db_content_before_act
9
9
  old_items - item_names
10
10
  end
11
11
 
12
12
  stage_method :added_item_names do
13
- old_items = item_names content: db_content_was
13
+ old_items = item_names content: db_content_before_act
14
14
  item_names - old_items
15
15
  end
16
16
 
@@ -125,7 +125,7 @@ format :json do
125
125
  end
126
126
 
127
127
  def essentials
128
- return if @depth > max_depth
128
+ return {} if depth > max_depth
129
129
  card.item_cards.map do |item|
130
130
  nest item, view: :essentials
131
131
  end
@@ -192,7 +192,7 @@ def item_names args={}
192
192
  if context == :raw
193
193
  item_name
194
194
  else
195
- item_name.to_name.to_absolute context
195
+ item_name.to_name.absolute context
196
196
  end
197
197
  end
198
198
  end
@@ -13,22 +13,30 @@ end
13
13
 
14
14
  format :html do
15
15
  view :editor do |args|
16
- _render_hidden_content_field + raw(_render(part_view, args))
16
+ # FIXME: use voo
17
+ @item_list = args[:item_list]
18
+ @extra_css_class = args[:extra_css_class]
19
+ _render_hidden_content_field + super()
17
20
  # .merge(pointer_item_class: 'form-control')))
18
21
  end
19
22
 
20
- def part_view
21
- (c = card.rule(:input)) ? c.gsub(/[\[\]]/, "") : :list
23
+ def default_editor
24
+ :list
22
25
  end
23
26
 
24
- view :list do |args|
25
- args ||= {}
26
- items = args[:item_list] || card.item_names(context: :raw)
27
+ view :list, cache: :never do |args|
28
+ @item_list = args[:item_list]
29
+ @extra_css_class = args[:extra_css_class]
30
+ list_input
31
+ end
32
+
33
+ def list_input
34
+ items = @item_list || card.item_names(context: :raw)
27
35
  items = [""] if items.empty?
28
36
  rendered_items = items.map do |item|
29
- _render_list_item args.merge(pointer_item: item)
37
+ _render_list_item pointer_item: item
30
38
  end.join "\n"
31
- extra_css_class = args[:extra_css_class] || "pointer-list-ul"
39
+ extra_css_class = @extra_css_class || "pointer-list-ul"
32
40
 
33
41
  <<-HTML
34
42
  <ul class="pointer-list-editor #{extra_css_class}"
@@ -53,17 +61,16 @@ format :html do
53
61
 
54
62
  view :list_item do |args|
55
63
  <<-HTML
56
- <li class="pointer-li">
64
+ <li class="pointer-li mb-1">
57
65
  <span class="input-group">
58
66
  <span class="input-group-addon handle">
59
- #{glyphicon 'option-vertical left'}
60
- #{glyphicon 'option-vertical right'}
67
+ #{icon_tag :reorder}
61
68
  </span>
62
69
  #{text_field_tag 'pointer_item', args[:pointer_item],
63
70
  class: 'pointer-item-text form-control'}
64
71
  <span class="input-group-btn">
65
- <button class="pointer-item-delete btn btn-default" type="button">
66
- #{glyphicon 'remove'}
72
+ <button class="pointer-item-delete btn btn-secondary" type="button">
73
+ #{icon_tag :remove}
67
74
  </button>
68
75
  </span>
69
76
  </span>
@@ -72,7 +79,11 @@ format :html do
72
79
  end
73
80
 
74
81
  view :autocomplete do |args|
75
- items = args[:item_list] || card.item_names(context: :raw)
82
+ autocomplete_input
83
+ end
84
+
85
+ def autocomplete_input
86
+ items = @item_list || card.item_names(context: :raw)
76
87
  items = [""] if items.empty?
77
88
  <<-HTML
78
89
  <div class="pointer-list-editor pointer-list-ul"
@@ -84,6 +95,10 @@ format :html do
84
95
  end
85
96
 
86
97
  view :checkbox do |_args|
98
+ checkbox_input
99
+ end
100
+
101
+ def checkbox_input
87
102
  options = card.option_names.map do |option_name|
88
103
  checked = card.item_names.include?(option_name)
89
104
  id = "pointer-checkbox-#{option_name.to_name.key}"
@@ -101,6 +116,10 @@ format :html do
101
116
  end
102
117
 
103
118
  view :multiselect do |_args|
119
+ multiselect_input
120
+ end
121
+
122
+ def multiselect_input
104
123
  select_tag(
105
124
  "pointer_multiselect-#{unique_id}",
106
125
  options_for_select(card.option_names, card.item_names),
@@ -109,6 +128,10 @@ format :html do
109
128
  end
110
129
 
111
130
  view :radio do |_args|
131
+ radio_input
132
+ end
133
+
134
+ def radio_input
112
135
  input_name = "pointer_radio_button-#{card.key}"
113
136
  options = card.option_names.map do |option_name|
114
137
  checked = (option_name == card.item_names.first)
@@ -143,6 +166,10 @@ format :html do
143
166
  end
144
167
 
145
168
  view :select do |_args|
169
+ select_input
170
+ end
171
+
172
+ def select_input
146
173
  options = [["-- Select --", ""]] + card.option_names.map { |x| [x, x] }
147
174
  select_tag("pointer_select-#{unique_id}",
148
175
  options_for_select(options, card.item_names.first),
@@ -51,22 +51,23 @@ describe Card::Set::Type::Pointer do
51
51
  end
52
52
 
53
53
  let(:pointer) do
54
- Card.create name: "tp", type: "pointer",
55
- content: "[[item1]]\n[[item2]]"
54
+ Card.create! name: "tp", type_id: Card::PointerID,
55
+ content: "[[item1]]\n[[item2]]"
56
56
  end
57
57
 
58
58
  def pointer_update content
59
- -> { pointer.update_attributes! content: content }
59
+ -> { Card["tp"].update_attributes! content: content }
60
60
  end
61
61
 
62
62
  describe "#added_item_names" do
63
63
  it "recognizes added items" do
64
64
  Card::Auth.as_bot do
65
65
  pointer
66
- in_stage(:validate,
66
+ in_stage(:finalize,
67
67
  on: :save,
68
+ for: "tp",
68
69
  trigger: pointer_update("[[item1]]\n[[item2]]\n[[item3]]")) do
69
- expect(added_item_names).to eq ["item3"]
70
+ expect(added_item_names).to contain_exactly "item3"
70
71
  end
71
72
  end
72
73
  end
@@ -74,7 +75,7 @@ describe Card::Set::Type::Pointer do
74
75
  it "ignores order" do
75
76
  Card::Auth.as_bot do
76
77
  pointer
77
- in_stage :validate,
78
+ in_stage :finalize,
78
79
  on: :save,
79
80
  trigger: pointer_update("[[item2]]\n[[item1]]") do
80
81
  expect(added_item_names).to eq []
@@ -87,7 +88,7 @@ describe Card::Set::Type::Pointer do
87
88
  it "recognizes dropped items" do
88
89
  Card::Auth.as_bot do
89
90
  pointer
90
- in_stage :validate,
91
+ in_stage :finalize,
91
92
  on: :save,
92
93
  trigger: pointer_update("[[item1]]") do
93
94
  expect(dropped_item_names).to eq ["item2"]
@@ -98,7 +99,7 @@ describe Card::Set::Type::Pointer do
98
99
  it "ignores order" do
99
100
  Card::Auth.as_bot do
100
101
  pointer
101
- in_stage :validate,
102
+ in_stage :finalize,
102
103
  on: :save,
103
104
  trigger: pointer_update("[[item2]]\n[[item1]]") do
104
105
  expect(dropped_item_names).to eq []
@@ -111,7 +112,7 @@ describe Card::Set::Type::Pointer do
111
112
  it "recognizes changed items" do
112
113
  Card::Auth.as_bot do
113
114
  pointer
114
- in_stage :validate,
115
+ in_stage :finalize,
115
116
  on: :save,
116
117
  trigger: pointer_update("[[item1]]\n[[item3]]") do
117
118
  expect(changed_item_names.sort).to eq %w[item2 item3]
@@ -243,7 +243,7 @@
243
243
  return state.tr.replaceWith(start, end, state.schema.text(insert, marks));
244
244
  };
245
245
  }
246
- var MAX_MATCH = 100;
246
+ var MAX_MATCH = 500;
247
247
  var stateKey = new PluginKey("fromInputRule");
248
248
  function inputRules(ref) {
249
249
  var rules = ref.rules;
@@ -508,6 +508,14 @@
508
508
  name = "Escape";
509
509
  if (name == "Del")
510
510
  name = "Delete";
511
+ if (name == "Left")
512
+ name = "ArrowLeft";
513
+ if (name == "Up")
514
+ name = "ArrowUp";
515
+ if (name == "Right")
516
+ name = "ArrowRight";
517
+ if (name == "Down")
518
+ name = "ArrowDown";
511
519
  return name;
512
520
  }
513
521
  module.exports = keyName;
@@ -684,9 +692,9 @@
684
692
  left: event.clientX,
685
693
  top: event.clientY
686
694
  });
687
- if (pos && !active || active.pos != pos.pos) {
695
+ if (pos && (!active || active.pos != pos.pos)) {
688
696
  dispatch(view, {
689
- type: "setDropCursor",
697
+ type: "set",
690
698
  pos: pos.pos
691
699
  });
692
700
  }
@@ -823,6 +831,62 @@
823
831
  }
824
832
  }
825
833
  exports.scrollRectIntoView = scrollRectIntoView;
834
+ function storeScrollPos(view) {
835
+ var rect = view.content.getBoundingClientRect(),
836
+ startY = Math.max(0, rect.top);
837
+ var refDOM,
838
+ refTop;
839
+ for (var x = (rect.left + rect.right) / 2,
840
+ y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {
841
+ var dom = view.root.elementFromPoint(x, y);
842
+ if (dom == view.content || !view.content.contains(dom)) {
843
+ continue;
844
+ }
845
+ var localRect = dom.getBoundingClientRect();
846
+ if (localRect.top >= startY - 20) {
847
+ refDOM = dom;
848
+ refTop = localRect.top;
849
+ break;
850
+ }
851
+ }
852
+ var stack = [];
853
+ for (var dom$1 = view.content; dom$1; dom$1 = parentNode(dom$1)) {
854
+ stack.push({
855
+ dom: dom$1,
856
+ top: dom$1.scrollTop,
857
+ left: dom$1.scrollLeft
858
+ });
859
+ if (dom$1 == document.body) {
860
+ break;
861
+ }
862
+ }
863
+ return {
864
+ refDOM: refDOM,
865
+ refTop: refTop,
866
+ stack: stack
867
+ };
868
+ }
869
+ exports.storeScrollPos = storeScrollPos;
870
+ function resetScrollPos(ref) {
871
+ var refDOM = ref.refDOM;
872
+ var refTop = ref.refTop;
873
+ var stack = ref.stack;
874
+ var newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;
875
+ var dTop = newRefTop == 0 ? 0 : newRefTop - refTop;
876
+ for (var i = 0; i < stack.length; i++) {
877
+ var ref$1 = stack[i];
878
+ var dom = ref$1.dom;
879
+ var top = ref$1.top;
880
+ var left = ref$1.left;
881
+ if (dom.scrollTop != top + dTop) {
882
+ dom.scrollTop = top + dTop;
883
+ }
884
+ if (dom.scrollLeft != left) {
885
+ dom.scrollLeft = left;
886
+ }
887
+ }
888
+ }
889
+ exports.resetScrollPos = resetScrollPos;
826
890
  function findOffsetInNode(node, coords) {
827
891
  var closest,
828
892
  dxClosest = 2e8,
@@ -1097,7 +1161,8 @@
1097
1161
  size: {},
1098
1162
  border: {},
1099
1163
  posAtStart: {},
1100
- posAtEnd: {}
1164
+ posAtEnd: {},
1165
+ contentLost: {}
1101
1166
  };
1102
1167
  ViewDesc.prototype.matchesWidget = function() {
1103
1168
  return false;
@@ -1130,7 +1195,10 @@
1130
1195
  };
1131
1196
  ViewDesc.prototype.destroy = function() {
1132
1197
  var this$1 = this;
1133
- this.parent = this.dom.pmViewDesc = null;
1198
+ this.parent = null;
1199
+ if (this.dom.pmViewDesc == this) {
1200
+ this.dom.pmViewDesc = null;
1201
+ }
1134
1202
  for (var i = 0; i < this.children.length; i++) {
1135
1203
  this$1.children[i].destroy();
1136
1204
  }
@@ -1188,7 +1256,7 @@
1188
1256
  }
1189
1257
  }
1190
1258
  var atEnd;
1191
- if (this.contentDOM) {
1259
+ if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {
1192
1260
  atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;
1193
1261
  } else if (this.dom.firstChild) {
1194
1262
  if (offset == 0) {
@@ -1222,7 +1290,7 @@
1222
1290
  cur = dom; cur; cur = cur.parentNode) {
1223
1291
  var desc = this$1.getDesc(cur);
1224
1292
  if (desc && (!onlyNodes || desc.node)) {
1225
- if (first && desc.nodeDOM && !desc.nodeDOM.contains(dom)) {
1293
+ if (first && desc.nodeDOM && !(desc.nodeDOM.nodeType == 1 && desc.nodeDOM.contains(dom))) {
1226
1294
  first = false;
1227
1295
  } else {
1228
1296
  return desc;
@@ -1369,6 +1437,9 @@
1369
1437
  ViewDesc.prototype.ignoreMutation = function(_mutation) {
1370
1438
  return !this.contentDOM;
1371
1439
  };
1440
+ prototypeAccessors.contentLost.get = function() {
1441
+ return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);
1442
+ };
1372
1443
  ViewDesc.prototype.markDirty = function(from, to) {
1373
1444
  var this$1 = this;
1374
1445
  for (var offset = 0,
@@ -1380,7 +1451,11 @@
1380
1451
  endInside = end - child.border;
1381
1452
  if (from >= startInside && to <= endInside) {
1382
1453
  this$1.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;
1383
- child.markDirty(from - startInside, to - startInside);
1454
+ if (from == startInside && to == endInside && child.contentLost) {
1455
+ child.dirty = NODE_DIRTY;
1456
+ } else {
1457
+ child.markDirty(from - startInside, to - startInside);
1458
+ }
1384
1459
  return;
1385
1460
  } else {
1386
1461
  child.dirty = NODE_DIRTY;
@@ -1402,7 +1477,7 @@
1402
1477
  WidgetViewDesc.prototype = Object.create(ViewDesc && ViewDesc.prototype);
1403
1478
  WidgetViewDesc.prototype.constructor = WidgetViewDesc;
1404
1479
  WidgetViewDesc.prototype.matchesWidget = function(widget) {
1405
- return this.dirty == NOT_DIRTY && widget.type == this.widget.type;
1480
+ return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);
1406
1481
  };
1407
1482
  WidgetViewDesc.prototype.parseRule = function() {
1408
1483
  return {ignore: true};
@@ -1463,10 +1538,10 @@
1463
1538
  var custom = customNodeViews(view)[node.type.name],
1464
1539
  descObj;
1465
1540
  var spec = custom && custom(node, view, function() {
1466
- if (descObj && descObj.parent) {
1467
- return descObj.parent.posBeforeChild(descObj);
1468
- }
1469
- }, outerDeco);
1541
+ if (descObj && descObj.parent) {
1542
+ return descObj.parent.posBeforeChild(descObj);
1543
+ }
1544
+ }, outerDeco);
1470
1545
  var dom = spec && spec.dom,
1471
1546
  contentDOM = spec && spec.contentDOM;
1472
1547
  if (!dom) {
@@ -1490,7 +1565,7 @@
1490
1565
  return {
1491
1566
  node: this.node.type.name,
1492
1567
  attrs: this.node.attrs,
1493
- contentElement: this.contentDOM
1568
+ contentElement: this.contentLost ? null : this.contentDOM
1494
1569
  };
1495
1570
  };
1496
1571
  NodeViewDesc.prototype.matchesNode = function(node, outerDeco, innerDeco) {
@@ -1564,21 +1639,29 @@
1564
1639
  var TextViewDesc = (function(NodeViewDesc) {
1565
1640
  function TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {
1566
1641
  NodeViewDesc.call(this, parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view);
1642
+ var textDOM = nodeDOM;
1643
+ while (textDOM.nodeType != 3) {
1644
+ textDOM = textDOM.firstChild;
1645
+ if (!textDOM) {
1646
+ throw new RangeError("Text node rendered without text DOM");
1647
+ }
1648
+ }
1649
+ this.textDOM = textDOM;
1567
1650
  }
1568
1651
  if (NodeViewDesc)
1569
1652
  TextViewDesc.__proto__ = NodeViewDesc;
1570
1653
  TextViewDesc.prototype = Object.create(NodeViewDesc && NodeViewDesc.prototype);
1571
1654
  TextViewDesc.prototype.constructor = TextViewDesc;
1572
1655
  TextViewDesc.prototype.parseRule = function() {
1573
- return {skip: this.nodeDOM.parentNode};
1656
+ return {skip: this.textDOM.parentNode};
1574
1657
  };
1575
1658
  TextViewDesc.prototype.update = function(node, outerDeco) {
1576
- if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent) || !node.sameMarkup(this.node)) {
1659
+ if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) || !node.sameMarkup(this.node)) {
1577
1660
  return false;
1578
1661
  }
1579
1662
  this.updateOuterDeco(outerDeco);
1580
- if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {
1581
- this.nodeDOM.nodeValue = node.text;
1663
+ if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.textDOM.nodeValue) {
1664
+ this.textDOM.nodeValue = node.text;
1582
1665
  }
1583
1666
  this.node = node;
1584
1667
  this.dirty = NOT_DIRTY;
@@ -1586,7 +1669,7 @@
1586
1669
  };
1587
1670
  TextViewDesc.prototype.inParent = function() {
1588
1671
  var parentDOM = this.parent.contentDOM;
1589
- for (var n = this.nodeDOM; n; n = n.parentNode) {
1672
+ for (var n = this.textDOM; n; n = n.parentNode) {
1590
1673
  if (n == parentDOM) {
1591
1674
  return true;
1592
1675
  }
@@ -1595,12 +1678,12 @@
1595
1678
  };
1596
1679
  TextViewDesc.prototype.domFromPos = function(pos, searchDOM) {
1597
1680
  return {
1598
- node: this.nodeDOM,
1599
- offset: searchDOM ? Math.max(pos, this.nodeDOM.nodeValue.length) : pos
1681
+ node: this.textDOM,
1682
+ offset: searchDOM ? Math.max(pos, this.textDOM.nodeValue.length) : pos
1600
1683
  };
1601
1684
  };
1602
1685
  TextViewDesc.prototype.localPosFromDOM = function(dom, offset, bias) {
1603
- if (dom == this.nodeDOM) {
1686
+ if (dom == this.textDOM) {
1604
1687
  return this.posAtStart + Math.min(offset, this.node.text.length);
1605
1688
  }
1606
1689
  return NodeViewDesc.prototype.localPosFromDOM.call(this, dom, offset, bias);
@@ -1636,6 +1719,9 @@
1636
1719
  CustomNodeViewDesc.prototype = Object.create(NodeViewDesc && NodeViewDesc.prototype);
1637
1720
  CustomNodeViewDesc.prototype.constructor = CustomNodeViewDesc;
1638
1721
  CustomNodeViewDesc.prototype.update = function(node, outerDeco, innerDeco, view) {
1722
+ if (this.dirty == NODE_DIRTY) {
1723
+ return false;
1724
+ }
1639
1725
  if (this.spec.update) {
1640
1726
  var result = this.spec.update(node, outerDeco);
1641
1727
  if (result) {
@@ -2011,6 +2097,25 @@
2011
2097
  return module.exports;
2012
2098
  });
2013
2099
 
2100
+ $__System.registerDynamic("15", [], true, function($__require, exports, module) {
2101
+ ;
2102
+ var define,
2103
+ global = this,
2104
+ GLOBAL = this;
2105
+ var result = module.exports = {};
2106
+ if (typeof navigator != "undefined") {
2107
+ var ie_upto10 = /MSIE \d/.test(navigator.userAgent);
2108
+ var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);
2109
+ result.mac = /Mac/.test(navigator.platform);
2110
+ result.ie = ie_upto10 || !!ie_11up;
2111
+ result.ie_version = ie_upto10 ? document.documentMode || 6 : ie_11up && +ie_11up[1];
2112
+ result.gecko = /gecko\/\d/i.test(navigator.userAgent);
2113
+ result.ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
2114
+ result.webkit = 'WebkitAppearance' in document.documentElement.style;
2115
+ }
2116
+ return module.exports;
2117
+ });
2118
+
2014
2119
  $__System.registerDynamic("16", ["7", "15"], true, function($__require, exports, module) {
2015
2120
  ;
2016
2121
  var define,
@@ -2220,9 +2325,25 @@
2220
2325
  }
2221
2326
  return false;
2222
2327
  }
2328
+ function getMods(event) {
2329
+ var result = "";
2330
+ if (event.ctrlKey) {
2331
+ result += "c";
2332
+ }
2333
+ if (event.metaKey) {
2334
+ result += "m";
2335
+ }
2336
+ if (event.altKey) {
2337
+ result += "a";
2338
+ }
2339
+ if (event.shiftKey) {
2340
+ result += "s";
2341
+ }
2342
+ return result;
2343
+ }
2223
2344
  function captureKeyDown(view, event) {
2224
2345
  var code = event.keyCode,
2225
- mod = browser.mac ? event.metaKey : event.ctrlKey;
2346
+ mods = getMods(event);
2226
2347
  if (code == 8) {
2227
2348
  return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view);
2228
2349
  } else if (code == 46) {
@@ -2237,18 +2358,10 @@
2237
2358
  return selectVertically(view, -1);
2238
2359
  } else if (code == 40) {
2239
2360
  return selectVertically(view, 1);
2240
- } else if (mod && !event.altKey && !event.shiftKey) {
2241
- if (code == 66 || code == 73 || code == 89 || code == 90) {
2242
- return true;
2243
- }
2244
- if (browser.mac && code == 68) {
2245
- return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view);
2246
- }
2247
- if (browser.mac && code == 72) {
2248
- return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view);
2249
- }
2250
- } else if (browser.mac && code == 68 && event.altKey && !mod && !event.shiftKey) {
2251
- return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view);
2361
+ } else if (mods == (browser.mac ? "m" : "c") && (code == 66 || code == 73 || code == 89 || code == 90)) {
2362
+ return true;
2363
+ } else if (browser.mac && ((code == 68 || code == 72) && mods == "c") || (code == 68 && mods == "a")) {
2364
+ return stopNativeHorizontalDelete(view, code == 68 ? 1 : -1) || skipIgnoredNodesRight(view);
2252
2365
  }
2253
2366
  return false;
2254
2367
  }
@@ -2293,7 +2406,7 @@
2293
2406
  if (this.from == null) {
2294
2407
  return rangeAroundSelection(this.state.selection);
2295
2408
  }
2296
- var $from = this.state.doc.resolve(this.from),
2409
+ var $from = this.state.doc.resolve(Math.min(this.from, this.state.selection.from)),
2297
2410
  $to = this.state.doc.resolve(this.to);
2298
2411
  var shared = $from.sharedDepth(this.to);
2299
2412
  return {
@@ -2344,6 +2457,7 @@
2344
2457
  var id = Math.floor(Math.random() * 0xffffffff);
2345
2458
  view.inDOMChange = new DOMChange(view, id, composing);
2346
2459
  }
2460
+ return view.inDOMChange;
2347
2461
  };
2348
2462
  exports.DOMChange = DOMChange;
2349
2463
  function parseBetween(view, oldState, from, to) {
@@ -2358,6 +2472,9 @@
2358
2472
  }
2359
2473
  if (endOff == parent.childNodes.length) {
2360
2474
  for (var scan = parent; scan != view.content; ) {
2475
+ if (!scan) {
2476
+ return null;
2477
+ }
2361
2478
  if (scan.nextSibling) {
2362
2479
  if (!scan.nextSibling.pmViewDesc) {
2363
2480
  return null;
@@ -2368,10 +2485,11 @@
2368
2485
  }
2369
2486
  }
2370
2487
  var domSel = view.root.getSelection(),
2371
- find = null;
2372
- if (domSel.anchorNode && view.content.contains(domSel.anchorNode)) {
2488
+ find = null,
2489
+ anchor = domSel.anchorNode;
2490
+ if (anchor && view.content.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {
2373
2491
  find = [{
2374
- node: domSel.anchorNode,
2492
+ node: anchor,
2375
2493
  offset: domSel.anchorOffset
2376
2494
  }];
2377
2495
  if (!domSel.isCollapsed) {
@@ -2397,13 +2515,13 @@
2397
2515
  ruleFromNode: ruleFromNode
2398
2516
  });
2399
2517
  if (find && find[0].pos != null) {
2400
- var anchor = find[0].pos,
2518
+ var anchor$1 = find[0].pos,
2401
2519
  head = find[1] && find[1].pos;
2402
2520
  if (head == null) {
2403
- head = anchor;
2521
+ head = anchor$1;
2404
2522
  }
2405
2523
  sel = {
2406
- anchor: anchor + from,
2524
+ anchor: anchor$1 + from,
2407
2525
  head: head + from
2408
2526
  };
2409
2527
  }
@@ -2505,7 +2623,7 @@
2505
2623
  if (!change) {
2506
2624
  if (parsedSel) {
2507
2625
  var sel = resolveSelection(view.state.doc, mapping, parsedSel);
2508
- if (!sel.eq(view.state.selection)) {
2626
+ if (sel && !sel.eq(view.state.selection)) {
2509
2627
  view.dispatch(view.state.tr.setSelection(sel));
2510
2628
  }
2511
2629
  }
@@ -2558,7 +2676,10 @@
2558
2676
  tr = view.state.tr.replace(from, to, parsed.slice(change.start - range.from, change.endB - range.from));
2559
2677
  }
2560
2678
  if (parsedSel) {
2561
- tr.setSelection(resolveSelection(tr.doc, mapping, parsedSel));
2679
+ var sel$1 = resolveSelection(tr.doc, mapping, parsedSel);
2680
+ if (sel$1) {
2681
+ tr.setSelection(sel$1);
2682
+ }
2562
2683
  }
2563
2684
  if (storedMarks) {
2564
2685
  tr.setStoredMarks(storedMarks);
@@ -2566,6 +2687,9 @@
2566
2687
  view.dispatch(tr.scrollIntoView());
2567
2688
  }
2568
2689
  function resolveSelection(doc, mapping, parsedSel) {
2690
+ if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size) {
2691
+ return null;
2692
+ }
2569
2693
  return Selection.between(doc.resolve(mapping.map(parsedSel.anchor)), doc.resolve(mapping.map(parsedSel.head)));
2570
2694
  }
2571
2695
  function isMarkChange(cur, prev) {
@@ -2641,7 +2765,7 @@
2641
2765
  }
2642
2766
  function findDiff(a, b, pos, preferedStart) {
2643
2767
  var start = a.findDiffStart(b, pos);
2644
- if (!start) {
2768
+ if (start == null) {
2645
2769
  return null;
2646
2770
  }
2647
2771
  var ref = a.findDiffEnd(b, pos + a.size, pos + b.size);
@@ -2847,10 +2971,10 @@
2847
2971
  if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()]) {
2848
2972
  var nodes = wrap.split(" ");
2849
2973
  html = nodes.map(function(n) {
2850
- return "<" + n + ">";
2851
- }).join("") + html + nodes.map(function(n) {
2852
- return "</" + n + ">";
2853
- }).reverse().join("");
2974
+ return "<" + n + ">";
2975
+ }).join("") + html + nodes.map(function(n) {
2976
+ return "</" + n + ">";
2977
+ }).reverse().join("");
2854
2978
  depth = nodes.length;
2855
2979
  }
2856
2980
  elt.innerHTML = html;
@@ -2982,8 +3106,8 @@
2982
3106
  view.dragging = null;
2983
3107
  view.inDOMChange = null;
2984
3108
  view.mutationObserver = window.MutationObserver && new window.MutationObserver(function(mutations) {
2985
- return registerMutations(view, mutations);
2986
- });
3109
+ return registerMutations(view, mutations);
3110
+ });
2987
3111
  startObserving(view);
2988
3112
  var loop = function(event) {
2989
3113
  var handler = handlers[event];
@@ -3175,20 +3299,20 @@
3175
3299
  return false;
3176
3300
  }
3177
3301
  }
3178
- function handleSingleClick(view, pos, inside, event) {
3302
+ function handleSingleClick(view, pos, inside, event, selectNode) {
3179
3303
  return runHandlerOnContext(view, "handleClickOn", pos, inside, event) || view.someProp("handleClick", function(f) {
3180
- return f(view, pos, event);
3181
- }) || selectClickedLeaf(view, inside);
3304
+ return f(view, pos, event);
3305
+ }) || (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));
3182
3306
  }
3183
3307
  function handleDoubleClick(view, pos, inside, event) {
3184
3308
  return runHandlerOnContext(view, "handleDoubleClickOn", pos, inside, event) || view.someProp("handleDoubleClick", function(f) {
3185
- return f(view, pos, event);
3186
- });
3309
+ return f(view, pos, event);
3310
+ });
3187
3311
  }
3188
3312
  function handleTripleClick(view, pos, inside, event) {
3189
3313
  return runHandlerOnContext(view, "handleTripleClickOn", pos, inside, event) || view.someProp("handleTripleClick", function(f) {
3190
- return f(view, pos, event);
3191
- }) || defaultTripleClick(view, inside);
3314
+ return f(view, pos, event);
3315
+ }) || defaultTripleClick(view, inside);
3192
3316
  }
3193
3317
  function defaultTripleClick(view, inside) {
3194
3318
  var doc = view.state.doc;
@@ -3305,7 +3429,7 @@
3305
3429
  }
3306
3430
  if (this.allowDefault) {
3307
3431
  this.view.selectionReader.poll("pointer");
3308
- } else if (this.selectNode ? selectClickedNode(this.view, this.pos.inside) : handleSingleClick(this.view, this.pos.pos, this.pos.inside, event)) {
3432
+ } else if (handleSingleClick(this.view, this.pos.pos, this.pos.inside, event, this.selectNode)) {
3309
3433
  event.preventDefault();
3310
3434
  } else if (this.flushed) {
3311
3435
  updateSelection(this.view, Selection.near(this.view.state.doc.resolve(this.pos.pos)), "pointer");
@@ -3359,43 +3483,68 @@
3359
3483
  if (view.mutationObserver) {
3360
3484
  view.mutationObserver.observe(view.content, observeOptions);
3361
3485
  }
3486
+ if (browser.ie && browser.ie_version <= 11) {
3487
+ view.content.addEventListener("DOMCharacterDataModified", view.onCharData || (view.onCharData = function(e) {
3488
+ registerMutation(view, {
3489
+ target: e.target,
3490
+ type: "characterData"
3491
+ });
3492
+ }));
3493
+ }
3362
3494
  }
3363
3495
  exports.startObserving = startObserving;
3496
+ function flushObserver(view) {
3497
+ if (view.mutationObserver) {
3498
+ registerMutations(view, view.mutationObserver.takeRecords());
3499
+ }
3500
+ }
3501
+ exports.flushObserver = flushObserver;
3364
3502
  function stopObserving(view) {
3365
3503
  if (view.mutationObserver) {
3504
+ flushObserver(view);
3366
3505
  view.mutationObserver.disconnect();
3367
3506
  }
3507
+ if (browser.ie && browser.ie_version <= 11) {
3508
+ view.content.removeEventListener("DOMCharacterDataModified", view.onCharData);
3509
+ }
3368
3510
  }
3369
3511
  exports.stopObserving = stopObserving;
3370
3512
  function registerMutations(view, mutations) {
3371
3513
  if (view.editable) {
3372
3514
  for (var i = 0; i < mutations.length; i++) {
3373
- var mut = mutations[i],
3374
- desc = view.docView.nearestDesc(mut.target);
3375
- if (mut.type == "attributes" && (desc == view.docView || mut.attributeName == "contenteditable")) {
3376
- continue;
3377
- }
3378
- if (!desc || desc.ignoreMutation(mut)) {
3379
- continue;
3380
- }
3381
- var from = (void 0),
3382
- to = (void 0);
3383
- if (mut.type == "childList") {
3384
- var fromOffset = mut.previousSibling && mut.previousSibling.parentNode == mut.target ? Array.prototype.indexOf.call(mut.target.childNodes, desc.previousSibling) + 1 : 0;
3385
- from = desc.localPosFromDOM(mut.target, fromOffset, -1);
3386
- var toOffset = mut.nextSibling && mut.nextSibling.parentNode == mut.target ? Array.prototype.indexOf.call(mut.target.childNodes, desc.nextSibling) : mut.target.childNodes.length;
3387
- to = desc.localPosFromDOM(mut.target, toOffset, 1);
3388
- } else if (mut.type == "attributes") {
3389
- from = desc.posAtStart - desc.border;
3390
- to = desc.posAtEnd + desc.border;
3391
- } else {
3392
- from = desc.posAtStart;
3393
- to = desc.posAtEnd;
3394
- }
3395
- DOMChange.start(view);
3396
- view.inDOMChange.addRange(from, to);
3515
+ registerMutation(view, mutations[i]);
3516
+ }
3517
+ }
3518
+ }
3519
+ function registerMutation(view, mut) {
3520
+ var desc = view.docView.nearestDesc(mut.target);
3521
+ if (mut.type == "attributes" && (desc == view.docView || mut.attributeName == "contenteditable")) {
3522
+ return;
3523
+ }
3524
+ if (!desc || desc.ignoreMutation(mut)) {
3525
+ return;
3526
+ }
3527
+ var from,
3528
+ to;
3529
+ if (mut.type == "childList") {
3530
+ var fromOffset = mut.previousSibling && mut.previousSibling.parentNode == mut.target ? Array.prototype.indexOf.call(mut.target.childNodes, mut.previousSibling) + 1 : 0;
3531
+ if (fromOffset == -1) {
3532
+ return;
3533
+ }
3534
+ from = desc.localPosFromDOM(mut.target, fromOffset, -1);
3535
+ var toOffset = mut.nextSibling && mut.nextSibling.parentNode == mut.target ? Array.prototype.indexOf.call(mut.target.childNodes, mut.nextSibling) : mut.target.childNodes.length;
3536
+ if (toOffset == -1) {
3537
+ return;
3397
3538
  }
3539
+ to = desc.localPosFromDOM(mut.target, toOffset, 1);
3540
+ } else if (mut.type == "attributes") {
3541
+ from = desc.posAtStart - desc.border;
3542
+ to = desc.posAtEnd + desc.border;
3543
+ } else {
3544
+ from = desc.posAtStart;
3545
+ to = desc.posAtEnd;
3398
3546
  }
3547
+ DOMChange.start(view).addRange(from, to);
3399
3548
  }
3400
3549
  editHandlers.input = function(view) {
3401
3550
  return DOMChange.start(view);
@@ -3570,26 +3719,7 @@
3570
3719
  return module.exports;
3571
3720
  });
3572
3721
 
3573
- $__System.registerDynamic("15", [], true, function($__require, exports, module) {
3574
- ;
3575
- var define,
3576
- global = this,
3577
- GLOBAL = this;
3578
- var result = module.exports = {};
3579
- if (typeof navigator != "undefined") {
3580
- var ie_upto10 = /MSIE \d/.test(navigator.userAgent);
3581
- var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);
3582
- result.mac = /Mac/.test(navigator.platform);
3583
- result.ie = ie_upto10 || !!ie_11up;
3584
- result.ie_version = ie_upto10 ? document.documentMode || 6 : ie_11up && +ie_11up[1];
3585
- result.gecko = /gecko\/\d/i.test(navigator.userAgent);
3586
- result.ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
3587
- result.webkit = 'WebkitAppearance' in document.documentElement.style;
3588
- }
3589
- return module.exports;
3590
- });
3591
-
3592
- $__System.registerDynamic("1b", ["7", "15"], true, function($__require, exports, module) {
3722
+ $__System.registerDynamic("1b", ["7", "15", "1a"], true, function($__require, exports, module) {
3593
3723
  ;
3594
3724
  var define,
3595
3725
  global = this,
@@ -3598,6 +3728,8 @@
3598
3728
  var Selection = ref.Selection;
3599
3729
  var NodeSelection = ref.NodeSelection;
3600
3730
  var browser = $__require('15');
3731
+ var ref$1 = $__require('1a');
3732
+ var flushObserver = ref$1.flushObserver;
3601
3733
  var SelectionReader = function(view) {
3602
3734
  var this$1 = this;
3603
3735
  this.view = view;
@@ -3640,6 +3772,9 @@
3640
3772
  this.lastSelection = selection;
3641
3773
  };
3642
3774
  SelectionReader.prototype.readFromDOM = function(origin) {
3775
+ if (!this.view.inDOMChange) {
3776
+ flushObserver(this.view);
3777
+ }
3643
3778
  if (!this.view.hasFocus() || this.view.inDOMChange || !this.domChanged()) {
3644
3779
  return;
3645
3780
  }
@@ -3676,11 +3811,13 @@
3676
3811
  if ($head.pos == selection.head && $anchor.pos == selection.anchor) {
3677
3812
  this.storeDOMState(selection);
3678
3813
  }
3679
- var tr = this.view.state.tr.setSelection(selection);
3680
- if (origin == "pointer") {
3681
- tr.setMeta("pointer", true);
3814
+ if (!this.view.state.selection.eq(selection)) {
3815
+ var tr = this.view.state.tr.setSelection(selection);
3816
+ if (origin == "pointer") {
3817
+ tr.setMeta("pointer", true);
3818
+ }
3819
+ this.view.dispatch(tr);
3682
3820
  }
3683
- this.view.dispatch(tr);
3684
3821
  };
3685
3822
  exports.SelectionReader = SelectionReader;
3686
3823
  var SelectionChangePoller = function(reader) {
@@ -3688,6 +3825,7 @@
3688
3825
  this.listening = false;
3689
3826
  this.curOrigin = null;
3690
3827
  this.originTime = 0;
3828
+ this.reader = reader;
3691
3829
  this.readFunc = function() {
3692
3830
  return reader.readFromDOM(this$1.originTime > Date.now() - 50 ? this$1.curOrigin : null);
3693
3831
  };
@@ -3700,6 +3838,9 @@
3700
3838
  if (!this.listening) {
3701
3839
  document.addEventListener("selectionchange", this.readFunc);
3702
3840
  this.listening = true;
3841
+ if (this.reader.view.hasFocus()) {
3842
+ this.readFunc();
3843
+ }
3703
3844
  }
3704
3845
  };
3705
3846
  SelectionChangePoller.prototype.stop = function() {
@@ -3748,7 +3889,7 @@
3748
3889
  }
3749
3890
  }
3750
3891
  var reader = view.selectionReader;
3751
- if (sel.eq(reader.lastSelection) && !reader.domChanged()) {
3892
+ if (sel == reader.lastSelection && !reader.domChanged()) {
3752
3893
  return;
3753
3894
  }
3754
3895
  var anchor = sel.anchor;
@@ -4200,7 +4341,6 @@
4200
4341
  return new DecorationGroup(members);
4201
4342
  }
4202
4343
  };
4203
- exports.DecorationGroup = DecorationGroup;
4204
4344
  function mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {
4205
4345
  var children = oldChildren.slice();
4206
4346
  var shift = function(oldStart, oldEnd, newStart, newEnd) {
@@ -4418,6 +4558,8 @@
4418
4558
  var posAtCoords = ref.posAtCoords;
4419
4559
  var coordsAtPos = ref.coordsAtPos;
4420
4560
  var endOfTextblock = ref.endOfTextblock;
4561
+ var storeScrollPos = ref.storeScrollPos;
4562
+ var resetScrollPos = ref.resetScrollPos;
4421
4563
  var ref$1 = $__require('14');
4422
4564
  var docViewDesc = ref$1.docViewDesc;
4423
4565
  var ref$2 = $__require('1a');
@@ -4476,13 +4618,15 @@
4476
4618
  this.editable = getEditable(this);
4477
4619
  var innerDeco = viewDecorations(this),
4478
4620
  outerDeco = computeDocDeco(this);
4479
- if (!this.docView.matchesNode(state.doc, outerDeco, innerDeco)) {
4480
- stopObserving(this);
4481
- this.docView.update(state.doc, outerDeco, innerDeco, this);
4482
- selectionToDOM(this, state.selection);
4483
- startObserving(this);
4484
- } else if (!state.selection.eq(prev.selection) || this.selectionReader.domChanged()) {
4621
+ var scrollToSelection = state.scrollToSelection > prev.scrollToSelection || prev.config != state.config;
4622
+ var updateDoc = !this.docView.matchesNode(state.doc, outerDeco, innerDeco);
4623
+ var updateSel = updateDoc || !state.selection.eq(prev.selection) || this.selectionReader.domChanged();
4624
+ var oldScrollPos = !scrollToSelection && updateSel && storeScrollPos(this);
4625
+ if (updateSel) {
4485
4626
  stopObserving(this);
4627
+ if (updateDoc) {
4628
+ this.docView.update(state.doc, outerDeco, innerDeco, this);
4629
+ }
4486
4630
  selectionToDOM(this, state.selection);
4487
4631
  startObserving(this);
4488
4632
  }
@@ -4490,12 +4634,14 @@
4490
4634
  this.selectionReader.editableChanged();
4491
4635
  }
4492
4636
  this.updatePluginViews(prev);
4493
- if (state.scrollToSelection > prev.scrollToSelection || prev.config != state.config) {
4637
+ if (scrollToSelection) {
4494
4638
  if (state.selection.node) {
4495
4639
  scrollRectIntoView(this, this.docView.domAfterPos(state.selection.from).getBoundingClientRect());
4496
4640
  } else {
4497
4641
  scrollRectIntoView(this, this.coordsAtPos(state.selection.head));
4498
4642
  }
4643
+ } else if (oldScrollPos) {
4644
+ resetScrollPos(oldScrollPos);
4499
4645
  }
4500
4646
  };
4501
4647
  EditorView.prototype.destroyPluginViews = function() {
@@ -4550,12 +4696,12 @@
4550
4696
  }
4551
4697
  };
4552
4698
  EditorView.prototype.focus = function() {
4553
- if (this.editable) {
4554
- this.content.focus();
4555
- }
4556
4699
  stopObserving(this);
4557
4700
  selectionToDOM(this, this.state.selection, true);
4558
4701
  startObserving(this);
4702
+ if (this.editable) {
4703
+ this.content.focus();
4704
+ }
4559
4705
  };
4560
4706
  prototypeAccessors.root.get = function() {
4561
4707
  var this$1 = this;
@@ -4716,7 +4862,11 @@
4716
4862
  }
4717
4863
  for (var key in settings) {
4718
4864
  if (!attributeMap[key]) {
4719
- element[setAttribute](key, settings[key]);
4865
+ if (isType(settings[key], fn)) {
4866
+ element[key] = settings[key];
4867
+ } else {
4868
+ element[setAttribute](key, settings[key]);
4869
+ }
4720
4870
  } else {
4721
4871
  var attr = attributeMap[key];
4722
4872
  if (typeof attr === fn) {
@@ -5196,7 +5346,8 @@
5196
5346
  if (this.editor.someProp("floatingMenu")) {
5197
5347
  this.updateFloat();
5198
5348
  this.scrollFunc = function() {
5199
- if (!this$1.editor.root.contains(this$1.wrapper)) {
5349
+ var root = this$1.editor.root;
5350
+ if (!(root.body || root).contains(this$1.wrapper)) {
5200
5351
  window.removeEventListener("scroll", this$1.scrollFunc);
5201
5352
  } else {
5202
5353
  this$1.updateFloat();
@@ -6227,7 +6378,7 @@
6227
6378
  }
6228
6379
  exports.setBlockType = setBlockType;
6229
6380
  function markApplies(doc, from, to, type) {
6230
- var can = false;
6381
+ var can = doc.contentMatchAt(0).allowsMark(type);
6231
6382
  doc.nodesBetween(from, to, function(node) {
6232
6383
  if (can) {
6233
6384
  return false;
@@ -7089,10 +7240,12 @@
7089
7240
  }
7090
7241
  }
7091
7242
  };
7092
- Selection.near = function near($pos, bias) {
7243
+ Selection.near = function near($pos, bias, textOnly) {
7093
7244
  if (bias === void 0)
7094
7245
  bias = 1;
7095
- var result = this.findFrom($pos, bias) || this.findFrom($pos, -bias);
7246
+ if (textOnly === void 0)
7247
+ textOnly = false;
7248
+ var result = this.findFrom($pos, bias, textOnly) || this.findFrom($pos, -bias, textOnly);
7096
7249
  if (!result) {
7097
7250
  throw new RangeError("Searching for selection in invalid document " + $pos.node(0));
7098
7251
  }
@@ -7319,7 +7472,7 @@
7319
7472
  return this;
7320
7473
  };
7321
7474
  prototypeAccessors.selectionSet.get = function() {
7322
- return this.updated & UPDATED_SEL > 0;
7475
+ return (this.updated & UPDATED_SEL) > 0;
7323
7476
  };
7324
7477
  Transaction.prototype.setStoredMarks = function setStoredMarks(marks) {
7325
7478
  this.storedMarks = marks;
@@ -7327,7 +7480,7 @@
7327
7480
  return this;
7328
7481
  };
7329
7482
  prototypeAccessors.storedMarksSet.get = function() {
7330
- return this.updated & UPDATED_MARKS > 0;
7483
+ return (this.updated & UPDATED_MARKS) > 0;
7331
7484
  };
7332
7485
  Transaction.prototype.addStep = function addStep(step, doc) {
7333
7486
  Transform.prototype.addStep.call(this, step, doc);
@@ -7408,7 +7561,7 @@
7408
7561
  return this;
7409
7562
  };
7410
7563
  prototypeAccessors.scrolledIntoView.get = function() {
7411
- return this.updated | UPDATED_SCROLL > 0;
7564
+ return (this.updated & UPDATED_SCROLL) > 0;
7412
7565
  };
7413
7566
  Transaction.prototype.addStoredMark = function addStoredMark(mark) {
7414
7567
  this.storedMarks = mark.addToSet(this.storedMarks || currentMarks(this.selection));
@@ -7864,9 +8017,10 @@
7864
8017
  lastItem = item;
7865
8018
  }
7866
8019
  }
7867
- var overflow = this.eventCount - histOptions.depth;
8020
+ var overflow = eventCount - histOptions.depth;
7868
8021
  if (overflow > DEPTH_OVERFLOW) {
7869
8022
  oldItems = cutOffEvents(oldItems, overflow);
8023
+ eventCount -= overflow;
7870
8024
  }
7871
8025
  return new Branch(oldItems.append(newItems), eventCount);
7872
8026
  };
@@ -7905,6 +8059,7 @@
7905
8059
  }
7906
8060
  var mapping = rebasedTransform.mapping;
7907
8061
  var newUntil = rebasedTransform.steps.length;
8062
+ var eventCount = this.eventCount;
7908
8063
  var iRebased = startPos;
7909
8064
  this.items.forEach(function(item) {
7910
8065
  var pos = mapping.getMirror(iRebased++);
@@ -7918,6 +8073,9 @@
7918
8073
  var selection = item.selection && Selection.mapJSON(item.selection, mapping.slice(iRebased - 1, pos));
7919
8074
  rebasedItems.push(new Item(map, step, selection));
7920
8075
  } else {
8076
+ if (item.selection) {
8077
+ eventCount--;
8078
+ }
7921
8079
  rebasedItems.push(new Item(map));
7922
8080
  }
7923
8081
  }, start);
@@ -7926,7 +8084,7 @@
7926
8084
  newMaps.push(new Item(mapping.maps[i]));
7927
8085
  }
7928
8086
  var items = this.items.slice(0, start).append(newMaps).append(rebasedItems);
7929
- var branch = new Branch(items, this.eventCount);
8087
+ var branch = new Branch(items, eventCount);
7930
8088
  if (branch.emptyItemCount() > max_empty_items) {
7931
8089
  branch = branch.compress(this.items.length - rebasedItems.length);
7932
8090
  }
@@ -7951,6 +8109,9 @@
7951
8109
  this.items.forEach(function(item, i) {
7952
8110
  if (i >= upto) {
7953
8111
  items.push(item);
8112
+ if (item.selection) {
8113
+ events++;
8114
+ }
7954
8115
  } else if (item.step) {
7955
8116
  var step = item.step.map(remap.slice(mapFrom)),
7956
8117
  map = step && step.getMap();
@@ -7982,7 +8143,7 @@
7982
8143
  function cutOffEvents(items, n) {
7983
8144
  var cutPoint;
7984
8145
  items.forEach(function(item, i) {
7985
- if (item.selection && (--n == 0)) {
8146
+ if (item.selection && (n-- == 0)) {
7986
8147
  cutPoint = i;
7987
8148
  return false;
7988
8149
  }
@@ -12983,10 +13144,10 @@
12983
13144
  return module.exports;
12984
13145
  });
12985
13146
 
12986
- $__System.register("50", ["3", "4", "7", "26", "37", "2a"], function (_export) {
13147
+ $__System.register("50", ["3", "4", "7", "11", "26", "37", "2a"], function (_export) {
12987
13148
  "use strict";
12988
13149
 
12989
- var Schema, DOMParser, DOMSerializer, baseSchema, EditorState, MenuBarEditorView, exampleSetup, buildMenuItems, EditorView, addListNodes, schema, proseMirrorMap, parser;
13150
+ var Schema, DOMParser, DOMSerializer, baseSchema, EditorState, EditorView, MenuBarEditorView, exampleSetup, buildMenuItems, addListNodes, schema, proseMirrorMap, parser;
12990
13151
 
12991
13152
  _export("getProseMirror", getProseMirror);
12992
13153
 
@@ -13024,21 +13185,22 @@
13024
13185
  }
13025
13186
 
13026
13187
  return {
13027
- setters: [function (_3) {
13028
- Schema = _3.Schema;
13029
- DOMParser = _3.DOMParser;
13030
- DOMSerializer = _3.DOMSerializer;
13031
- }, function (_4) {
13032
- baseSchema = _4.schema;
13188
+ setters: [function (_4) {
13189
+ Schema = _4.Schema;
13190
+ DOMParser = _4.DOMParser;
13191
+ DOMSerializer = _4.DOMSerializer;
13192
+ }, function (_5) {
13193
+ baseSchema = _5.schema;
13033
13194
  }, function (_) {
13034
13195
  EditorState = _.EditorState;
13196
+ }, function (_3) {
13197
+ EditorView = _3.EditorView;
13035
13198
  }, function (_2) {
13036
13199
  MenuBarEditorView = _2.MenuBarEditorView;
13037
- }, function (_5) {
13038
- exampleSetup = _5.exampleSetup;
13039
- buildMenuItems = _5.buildMenuItems;
13200
+ }, function (_6) {
13201
+ exampleSetup = _6.exampleSetup;
13202
+ buildMenuItems = _6.buildMenuItems;
13040
13203
  }, function (_a) {
13041
- EditorView = _a.EditorView;
13042
13204
  addListNodes = _a.addListNodes;
13043
13205
  }],
13044
13206
  execute: function () {
@@ -13052,7 +13214,7 @@
13052
13214
  ;
13053
13215
 
13054
13216
  parser = function parser(slot) {
13055
- var content = $(slot).find('.card-content').val();
13217
+ var content = $(slot).find('.d0-card-content').val();
13056
13218
  var domNode = document.createElement("div");
13057
13219
  domNode.innerHTML = content;
13058
13220
  return DOMParser.fromSchema(schema).parse(domNode);