card 1.19.6 → 1.20.0

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 (298) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/card.gemspec +8 -7
  4. data/config/initializers/01_core_extensions/array.rb +4 -0
  5. data/config/initializers/01_core_extensions/persistent_identifiers.rb +12 -0
  6. data/config/initializers/02_patches/better_errors.rb +56 -0
  7. data/config/initializers/core_extensions.rb +13 -18
  8. data/config/initializers/patches.rb +8 -0
  9. data/config/locales/de.yml +0 -2
  10. data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +22 -12
  11. data/db/migrate_core_cards/20161102202156_tweak_recaptcha_setting_cards.rb +17 -0
  12. data/db/migrate_core_cards/20161103154836_update_keys.rb +46 -0
  13. data/lib/card.rb +1 -8
  14. data/lib/card/act_manager.rb +4 -0
  15. data/lib/card/auth/permissions.rb +5 -3
  16. data/lib/card/cache.rb +1 -20
  17. data/lib/card/cache/persistent.rb +6 -0
  18. data/lib/card/content/chunk.rb +4 -3
  19. data/lib/card/content/diff.rb +2 -2
  20. data/lib/card/content/diff/result.rb +11 -0
  21. data/lib/card/env/success.rb +4 -0
  22. data/lib/card/error.rb +2 -0
  23. data/lib/card/format.rb +14 -17
  24. data/lib/card/format/content.rb +16 -8
  25. data/lib/card/format/error.rb +3 -5
  26. data/lib/card/format/names.rb +22 -16
  27. data/lib/card/format/nest.rb +67 -61
  28. data/lib/card/format/nest/fetch.rb +40 -33
  29. data/lib/card/format/nest/main.rb +39 -19
  30. data/lib/card/format/nest/subformat.rb +3 -16
  31. data/lib/card/format/nest/view.rb +23 -32
  32. data/lib/card/format/permission.rb +49 -34
  33. data/lib/card/format/registration.rb +12 -6
  34. data/lib/card/format/render.rb +62 -73
  35. data/lib/card/migration.rb +14 -10
  36. data/lib/card/migration/import.rb +20 -19
  37. data/lib/card/migration/import/import_data.rb +50 -59
  38. data/lib/card/migration/import/import_data/card_attributes.rb +56 -0
  39. data/lib/card/migration/import/import_data/card_content.rb +33 -0
  40. data/lib/card/migration/import/merger.rb +47 -0
  41. data/lib/card/mod/loader.rb +4 -4
  42. data/lib/card/model/save_helper.rb +49 -10
  43. data/lib/card/name.rb +16 -52
  44. data/lib/card/name/fields_and_traits.rb +67 -0
  45. data/lib/card/name/variants.rb +17 -0
  46. data/lib/card/query.rb +6 -2
  47. data/lib/card/query/attributes.rb +1 -1
  48. data/lib/card/query/interpretation.rb +3 -3
  49. data/lib/card/set/event.rb +2 -1
  50. data/lib/card/set/format.rb +18 -7
  51. data/lib/card/set_pattern.rb +17 -13
  52. data/lib/card/tasks/card.rake +1 -1
  53. data/lib/card/view.rb +55 -0
  54. data/lib/card/view/cache.rb +90 -0
  55. data/lib/card/view/fetch.rb +109 -0
  56. data/lib/card/view/options.rb +164 -0
  57. data/lib/card/view/stub.rb +30 -0
  58. data/lib/card/view/visibility.rb +95 -0
  59. data/lib/cardio.rb +3 -2
  60. data/lib/cardio/schema.rb +21 -8
  61. data/lib/generators/card.rb +16 -2
  62. data/lib/generators/card/format/format_generator.rb +10 -9
  63. data/lib/generators/card/migration/migration_generator.rb +10 -5
  64. data/lib/generators/card/set/USAGE +1 -1
  65. data/lib/generators/card/set/set_generator.rb +11 -9
  66. data/mod/account/set/right/account.rb +38 -40
  67. data/mod/account/set/right/token.rb +2 -1
  68. data/mod/account/set/self/account_links.rb +34 -54
  69. data/mod/account/set/self/signin.rb +107 -93
  70. data/mod/account/set/type/signup.rb +33 -32
  71. data/mod/account/set/type/user.rb +28 -21
  72. data/mod/account/spec/set/all/account_spec.rb +9 -9
  73. data/mod/account/spec/set/right/account_spec.rb +23 -14
  74. data/mod/account/spec/set/right/email_spec.rb +6 -6
  75. data/mod/account/spec/set/right/password_spec.rb +4 -4
  76. data/mod/account/spec/set/right/token_spec.rb +3 -3
  77. data/mod/account/spec/set/self/account_links_spec.rb +3 -3
  78. data/mod/account/spec/set/self/signin_spec.rb +2 -2
  79. data/mod/account/spec/set/type/signup_spec.rb +7 -8
  80. data/mod/ace_editor/set/abstract/ace_editor.rb +1 -4
  81. data/mod/admin/set/self/admin.rb +2 -2
  82. data/mod/admin/set/self/admin_info.rb +1 -1
  83. data/mod/admin/set/self/recaptcha_private_key.rb +3 -0
  84. data/mod/admin/set/self/recaptcha_proxy.rb +3 -0
  85. data/mod/admin/set/self/recaptcha_public_key.rb +3 -0
  86. data/mod/admin/set/self/trash.rb +4 -4
  87. data/mod/admin/spec/set/self/admin_spec.rb +4 -4
  88. data/mod/admin/spec/set/self/version_spec.rb +1 -1
  89. data/mod/basic_formats/set/all/all_css.rb +3 -3
  90. data/mod/basic_formats/set/all/all_csv.rb +6 -6
  91. data/mod/basic_formats/set/all/all_js.rb +4 -0
  92. data/mod/basic_formats/set/all/base.rb +40 -62
  93. data/mod/basic_formats/set/all/json.rb +34 -39
  94. data/mod/basic_formats/set/all/rss.rb +6 -6
  95. data/mod/basic_formats/set/all/text.rb +3 -2
  96. data/mod/basic_formats/set/self/01_head/javascript.rb +2 -2
  97. data/mod/basic_formats/set/self/head.rb +6 -10
  98. data/mod/basic_formats/spec/set/all/all_css_spec.rb +1 -1
  99. data/mod/basic_formats/spec/set/all/all_csv_spec.rb +1 -1
  100. data/mod/basic_formats/spec/set/all/base_spec.rb +8 -5
  101. data/mod/basic_formats/spec/set/all/json_spec.rb +2 -2
  102. data/mod/basic_formats/spec/set/all/rss_spec.rb +4 -4
  103. data/mod/basic_types/set/type/plain_text.rb +3 -5
  104. data/mod/basic_types/spec/set/type/plain_text_spec.rb +2 -2
  105. data/mod/bootstrap/lib/bootstrap.rb +16 -0
  106. data/mod/bootstrap/lib/bootstrap/basic_tags.rb +26 -0
  107. data/mod/bootstrap/lib/bootstrap/component.rb +133 -0
  108. data/mod/bootstrap/lib/bootstrap/component/form.rb +31 -0
  109. data/mod/bootstrap/lib/bootstrap/component/horizontal_form.rb +38 -0
  110. data/mod/bootstrap/lib/bootstrap/component/layout.rb +83 -0
  111. data/mod/bootstrap/lib/bootstrap/component/panel.rb +9 -0
  112. data/mod/bootstrap/lib/bootstrap/component_loader.rb +30 -0
  113. data/mod/bootstrap/lib/bootstrap/delegate.rb +16 -0
  114. data/mod/bootstrap/lib/bootstrapper.rb +16 -0
  115. data/mod/bootstrap/lib/stylesheets/bootstrap/_tables.scss +55 -52
  116. data/mod/bootstrap/lib/stylesheets/bootstrap/mixins/_table-row.scss +12 -12
  117. data/mod/bootstrap/lib/stylesheets/bootstrap_cards.scss +12 -0
  118. data/mod/bootstrap/set/all/bootstrap/accordion.rb +63 -0
  119. data/mod/bootstrap/set/all/bootstrap/helper.rb +7 -140
  120. data/mod/bootstrap/set/all/bootstrap/navbar.rb +74 -0
  121. data/mod/bootstrap/set/all/bootstrap/table.rb +76 -46
  122. data/mod/bootstrap/set/all/bootstrap/tabs.rb +58 -23
  123. data/mod/bootstrap/set/all/bootstrap/wrapper.rb +14 -8
  124. data/mod/bootstrap/set/all/rich_bootstrap.rb +5 -3
  125. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_builder_spec.rb +31 -0
  126. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_spec.rb +20 -0
  127. data/mod/bootstrap/spec/set/all/bootstrap/form_spec.rb +59 -1
  128. data/mod/bootstrap/spec/set/all/bootstrap/layout_spec.rb +104 -15
  129. data/mod/carrierwave/set/abstract/attachment.rb +4 -3
  130. data/mod/carrierwave/set/abstract/attachment/paths.rb +1 -1
  131. data/mod/carrierwave/set/abstract/attachment/storage_type.rb +5 -11
  132. data/mod/carrierwave/set/type/file.rb +39 -32
  133. data/mod/carrierwave/set/type/image.rb +59 -34
  134. data/mod/carrierwave/spec/set/type/image_spec.rb +3 -3
  135. data/mod/core/chunk/link.rb +5 -0
  136. data/mod/core/chunk/{include.rb → nest.rb} +8 -29
  137. data/mod/core/chunk/reference.rb +5 -6
  138. data/mod/core/chunk/view_stub.rb +42 -0
  139. data/mod/core/format/html_format.rb +23 -26
  140. data/mod/core/set/abstract/code_file.rb +1 -1
  141. data/mod/core/set/all/actify.rb +1 -1
  142. data/mod/core/set/all/active_card.rb +0 -1
  143. data/mod/core/set/all/{tracked_attributes.rb → assign_attributes.rb} +55 -24
  144. data/mod/core/set/all/collection.rb +136 -122
  145. data/mod/core/set/all/content.rb +8 -0
  146. data/mod/core/set/all/event.rb +5 -2
  147. data/mod/core/set/all/export.rb +7 -7
  148. data/mod/core/set/all/fetch.rb +90 -26
  149. data/mod/core/set/all/initialize.rb +17 -6
  150. data/mod/core/set/all/name.rb +2 -3
  151. data/mod/core/set/all/permissions.rb +19 -11
  152. data/mod/core/set/all/states.rb +12 -2
  153. data/mod/core/set/all/trash.rb +1 -1
  154. data/mod/core/set/all/type.rb +2 -0
  155. data/mod/core/set/all/utils.rb +4 -3
  156. data/mod/core/spec/chunk/literal_spec.rb +2 -2
  157. data/mod/core/spec/chunk/uri_spec.rb +17 -17
  158. data/mod/core/spec/format/html_format_spec.rb +11 -13
  159. data/mod/core/spec/set/all/attribute_tracking_spec.rb +2 -2
  160. data/mod/core/spec/set/all/collection_spec.rb +21 -24
  161. data/mod/core/spec/set/all/content_spec.rb +1 -1
  162. data/mod/core/spec/set/all/export_spec.rb +3 -3
  163. data/mod/core/spec/set/all/fetch_spec.rb +5 -5
  164. data/mod/core/spec/set/all/initialize_spec.rb +4 -4
  165. data/mod/core/spec/set/all/name_spec.rb +6 -6
  166. data/mod/core/spec/set/all/permissions_spec.rb +10 -10
  167. data/mod/core/spec/set/all/references_spec.rb +1 -1
  168. data/mod/core/spec/set/all/rules2_spec.rb +24 -24
  169. data/mod/core/spec/set/all/rules_spec.rb +1 -1
  170. data/mod/core/spec/set/all/templating_spec.rb +8 -8
  171. data/mod/core/spec/set/all/tracked_attributes_spec.rb +6 -6
  172. data/mod/core/spec/set/all/type_spec.rb +5 -5
  173. data/mod/developer/spec/set/all/event_viz_spec.rb +1 -1
  174. data/mod/developer/spec/set/right/debug_spec.rb +1 -1
  175. data/mod/email/set/all/email_html.rb +2 -2
  176. data/mod/email/set/all/notify.rb +8 -3
  177. data/mod/email/set/right/bcc.rb +3 -3
  178. data/mod/email/set/right/follow.rb +5 -5
  179. data/mod/email/set/right/following.rb +1 -1
  180. data/mod/email/set/self/follow_defaults.rb +27 -16
  181. data/mod/email/set/type/email_template.rb +1 -1
  182. data/mod/email/set/type_plus_right/user/follow.rb +10 -9
  183. data/mod/history/lib/card/act.rb +4 -0
  184. data/mod/history/lib/card/act/act_renderer.rb +194 -0
  185. data/mod/history/lib/card/act/act_renderer/absolute_act_renderer.rb +25 -0
  186. data/mod/history/lib/card/act/act_renderer/relative_act_renderer.rb +41 -0
  187. data/mod/history/lib/card/action.rb +1 -0
  188. data/mod/history/lib/card/action/action_renderer.rb +92 -0
  189. data/mod/history/lib/card/action/differ.rb +6 -1
  190. data/mod/history/set/all/act_view.rb +64 -0
  191. data/mod/history/set/all/action_view.rb +65 -0
  192. data/mod/history/set/all/content_history.rb +44 -37
  193. data/mod/history/set/all/history.rb +49 -263
  194. data/mod/machines/lib/stylesheets/style_cards.scss +30 -115
  195. data/mod/machines/set/abstract/script.rb +42 -7
  196. data/mod/machines/set/right/machine_input.rb +4 -0
  197. data/mod/machines/set/type/coffee_script.rb +8 -22
  198. data/mod/machines/set/type/css.rb +2 -2
  199. data/mod/machines/set/type/java_script.rb +4 -24
  200. data/mod/machines/set/type/scss.rb +1 -1
  201. data/mod/machines/spec/set/type/css_spec.rb +1 -1
  202. data/mod/machines/spec/set/type/scss_spec.rb +3 -3
  203. data/mod/machines/spec/set/type/skin_spec.rb +7 -7
  204. data/mod/pointer/set/abstract/01_pointer.rb +44 -46
  205. data/mod/pointer/set/abstract/01_pointer/edit.rb +13 -13
  206. data/mod/pointer/set/right/options.rb +4 -0
  207. data/mod/pointer/spec/set/type/pointer_spec.rb +7 -7
  208. data/mod/prosemirror_editor/set/abstract/prosemirror_editor.rb +3 -3
  209. data/mod/settings/set/abstract/permission.rb +25 -18
  210. data/mod/settings/set/right/add_help.rb +3 -3
  211. data/mod/settings/set/right/structure.rb +10 -16
  212. data/mod/settings/spec/set/right/comment_spec.rb +3 -3
  213. data/mod/settings/spec/set/right/create_spec.rb +1 -1
  214. data/mod/settings/spec/set/right/style_spec.rb +1 -1
  215. data/mod/settings/spec/set/type/setting_spec.rb +1 -1
  216. data/mod/solid_cache/set/abstract/solid_cache.rb +4 -4
  217. data/mod/solid_cache/set/right/solid_cache.rb +9 -10
  218. data/mod/standard/set/abstract/01_search_params.rb +41 -0
  219. data/mod/standard/set/abstract/search.rb +132 -0
  220. data/mod/standard/set/abstract/search/paging.rb +81 -0
  221. data/mod/standard/set/abstract/search/paging/paging_links.rb +90 -0
  222. data/mod/standard/set/abstract/wql_search.rb +67 -0
  223. data/mod/standard/set/all/error.rb +89 -82
  224. data/mod/standard/set/all/links.rb +1 -1
  225. data/mod/standard/set/all/rich_html/content.rb +125 -141
  226. data/mod/standard/set/all/rich_html/editing.rb +115 -178
  227. data/mod/standard/set/all/rich_html/form.rb +111 -131
  228. data/mod/standard/set/all/rich_html/header.rb +57 -39
  229. data/mod/standard/set/all/rich_html/menu.rb +94 -94
  230. data/mod/standard/set/all/rich_html/modal.rb +5 -10
  231. data/mod/standard/set/all/rich_html/new.rb +103 -0
  232. data/mod/standard/set/all/rich_html/toolbar.rb +54 -74
  233. data/mod/standard/set/all/rich_html/wrapper.rb +111 -138
  234. data/mod/standard/set/rstar/rules.rb +27 -38
  235. data/mod/standard/set/rstar/rules_editor.rb +298 -277
  236. data/mod/standard/set/self/navbox.rb +20 -15
  237. data/mod/standard/set/self/recent.rb +25 -17
  238. data/mod/standard/set/self/search.rb +25 -4
  239. data/mod/standard/set/type/cardtype.rb +11 -9
  240. data/mod/standard/set/type/date.rb +1 -1
  241. data/mod/standard/set/type/number.rb +1 -1
  242. data/mod/standard/set/type/phrase.rb +1 -1
  243. data/mod/standard/set/type/search_type.rb +17 -282
  244. data/mod/standard/set/type/session.rb +1 -1
  245. data/mod/standard/set/type/set.rb +155 -131
  246. data/mod/standard/set/type/toggle.rb +1 -1
  247. data/mod/standard/set/type/uri.rb +4 -4
  248. data/mod/standard/spec/chunk/include_spec.rb +13 -31
  249. data/mod/standard/spec/chunk/link_spec.rb +1 -1
  250. data/mod/standard/spec/set/all/error_spec.rb +1 -1
  251. data/mod/standard/spec/set/all/history_spec.rb +2 -2
  252. data/mod/standard/spec/set/all/rich_html/form_spec.rb +4 -4
  253. data/mod/standard/spec/set/all/rich_html/toolbar_spec.rb +22 -0
  254. data/mod/standard/spec/set/all/rich_html/wrapper_spec.rb +3 -2
  255. data/mod/standard/spec/set/right/when_created_spec.rb +1 -1
  256. data/mod/standard/spec/set/right/when_last_edited_spec.rb +1 -1
  257. data/mod/standard/spec/set/rstar/rules_spec.rb +2 -3
  258. data/mod/standard/spec/set/self/head_spec.rb +2 -2
  259. data/mod/standard/spec/set/self/navbox_spec.rb +1 -1
  260. data/mod/standard/spec/set/self/now_spec.rb +1 -1
  261. data/mod/standard/spec/set/type/date_spec.rb +1 -1
  262. data/mod/standard/spec/set/type/email_template_spec.rb +1 -1
  263. data/mod/standard/spec/set/type/layout_type_spec.rb +1 -1
  264. data/mod/standard/spec/set/type/number_spec.rb +1 -1
  265. data/mod/standard/spec/set/type/phrase_spec.rb +1 -1
  266. data/mod/standard/spec/set/type/search_type_spec.rb +2 -2
  267. data/mod/standard/spec/set/type/set_spec.rb +2 -2
  268. data/mod/standard/spec/set/type/toggle_spec.rb +2 -2
  269. data/mod/standard/spec/set/type/uri_spec.rb +3 -1
  270. data/mod/tinymce_editor/set/abstract/tinymce_editor.rb +1 -1
  271. data/spec/config/initializers/core_extensions_spec.rb +40 -10
  272. data/spec/lib/card/auth_spec.rb +8 -8
  273. data/spec/lib/card/cache_spec.rb +3 -3
  274. data/spec/lib/card/chunk_spec.rb +4 -4
  275. data/spec/lib/card/codename_spec.rb +2 -2
  276. data/spec/lib/card/content_spec.rb +23 -23
  277. data/spec/lib/card/diff_spec.rb +1 -1
  278. data/spec/lib/card/format_spec.rb +19 -24
  279. data/spec/lib/card/loader_spec.rb +4 -4
  280. data/spec/lib/card/name_spec.rb +16 -16
  281. data/spec/lib/card/query_spec.rb +80 -80
  282. data/spec/lib/card/reference_spec.rb +5 -5
  283. data/spec/lib/card/set_spec.rb +6 -6
  284. data/spec/lib/card/subcards_spec.rb +14 -0
  285. data/spec/lib/card/view_cache_spec.rb +5 -5
  286. data/spec/models/card/cardtype_spec.rb +15 -15
  287. data/spec/models/card/create_spec.rb +2 -2
  288. data/spec/models/card/trash_spec.rb +24 -24
  289. data/spec/models/card/type_transition_spec.rb +8 -8
  290. data/spec/models/card/validation_spec.rb +5 -5
  291. data/spec/models/card_spec.rb +14 -14
  292. data/spec/spec_helper.rb +6 -2
  293. data/spec/support/card_spec_helper.rb +21 -11
  294. data/spec/support/helper/card_helper.rb +11 -4
  295. metadata +73 -15
  296. data/lib/card/cache/view_cache.rb +0 -103
  297. data/mod/bootstrap/set/all/bootstrap/layout.rb +0 -58
  298. data/mod/core/set/all/view_cache.rb +0 -9
@@ -12,7 +12,7 @@ format :rss do
12
12
  end
13
13
 
14
14
  # FIXME: integrate this with common XML features when it is added
15
- view :feed do
15
+ view :feed, cache: :never do
16
16
  begin
17
17
  @xml.instruct! :xml, version: "1.0"
18
18
  @xml.rss version: "2.0" do
@@ -28,16 +28,16 @@ format :rss do
28
28
  end
29
29
  end
30
30
 
31
- def raw_feed_items _args
31
+ def raw_feed_items
32
32
  [card]
33
33
  end
34
34
 
35
- view :feed_body do |_args|
35
+ view :feed_body, cache: :never do
36
36
  render_feed_item_list
37
37
  end
38
38
 
39
- view :feed_item_list do |args|
40
- raw_feed_items(args).each do |item|
39
+ view :feed_item_list, cache: :never do
40
+ raw_feed_items.each do |item|
41
41
  @xml.item do
42
42
  # FIXME: yuck.
43
43
  subformat(item).render_feed_item view_changes: (card.id == RecentID)
@@ -49,7 +49,7 @@ format :rss do
49
49
  Card.global_setting(:title) + " : " + card.name.gsub(/^\*/, "")
50
50
  end
51
51
 
52
- view :feed_item do |args|
52
+ view :feed_item, cache: :never do |args|
53
53
  @xml.title card.name
54
54
  add_name_context
55
55
  @xml.description render((args[:view_changes] ? :change : :open_content))
@@ -1,6 +1,7 @@
1
1
 
2
2
  format :text do
3
- view :core do |args|
4
- HTMLEntities.new.decode strip_tags(super args).to_s # need this string method to get out of html_safe mode
3
+ view :core do
4
+ HTMLEntities.new.decode strip_tags(super()).to_s
5
+ # need this string method to get out of html_safe mode
5
6
  end
6
7
  end
@@ -11,7 +11,7 @@ format :html do
11
11
 
12
12
  @js_tag =
13
13
  if params[:debug] == "script"
14
- script_card.format(:js).render_core item: :include_tag
14
+ script_card.format(:js).render_core items: { view: :include_tag }
15
15
  elsif script_card
16
16
  javascript_include_tag script_card.machine_output_url
17
17
  end
@@ -70,4 +70,4 @@ format :html do
70
70
  javascript_tag { "wagn.#{js_wagn_function}('#{config_json}')" }
71
71
  end
72
72
  end
73
- end
73
+ end
@@ -1,5 +1,5 @@
1
1
  format :html do
2
- view :raw do
2
+ view :raw, cache: :never do
3
3
  output [
4
4
  head_meta,
5
5
  head_title,
@@ -9,14 +9,8 @@ format :html do
9
9
  ]
10
10
  end
11
11
 
12
- view :core do |args|
13
- if focal?
14
- CGI.escapeHTML _render_raw(args)
15
- elsif @mainline
16
- "(*head)"
17
- else
18
- _render_raw(args)
19
- end
12
+ view :core, cache: :never do
13
+ root.first_head? ? _render_raw : CGI.escapeHTML(_render_raw)
20
14
  end
21
15
 
22
16
  def head_meta
@@ -86,7 +80,9 @@ format :html do
86
80
 
87
81
  def rss_link
88
82
  opts = { format: :rss }
89
- root.search_params[:vars].each { |key, val| opts["_#{key}"] = val }
83
+ if root.search_params[:vars]
84
+ root.search_params[:vars].each { |key, val| opts["_#{key}"] = val }
85
+ end
90
86
  href = page_path root.card.cardname, opts
91
87
  tag "link", rel: "alternate", type: "application/rss+xml",
92
88
  title: "RSS", href: href
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::All::AllCss do
4
- it "should render content view" do
4
+ it "renders content view" do
5
5
  content = "#box { display: block }"
6
6
  rendered = render_card :content, { content: content }, format: :css
7
7
  # rendered.should =~ /Style Card\:/
@@ -2,7 +2,7 @@
2
2
 
3
3
  describe Card::Set::All::AllCsv, "CSV mod" do
4
4
  context "csv_row view" do
5
- it "should handle nests" do
5
+ it "handles nests" do
6
6
  rendered = render_card :csv_row, { content: "{{A+B}} {{T}}" },
7
7
  format: :csv
8
8
  expect(rendered).to eq("AlphaBeta,Theta")
@@ -72,17 +72,20 @@ describe Card::Set::All::Base do
72
72
 
73
73
  it "renders template rule of embed cards based on set" do
74
74
  Card::Auth.as_bot
75
- content = "{{_left+test_another_card|content|content;"\
76
- "structure:test_another_card_structure}}"
77
- card = Card.create! name: "test_card+*right+*structure",
78
- type_id: Card::HTMLID, content: content
75
+ structure_card = Card.create!(
76
+ name: "test_card+*right+*structure",
77
+ type_id: Card::HTMLID,
78
+ content: "{{_left+test_another_card|content|content;"\
79
+ "structure:test_another_card_structure}}"
80
+ )
79
81
  Card.create! name: "test_another_card+*right+*structure",
80
82
  type_id: Card::SearchTypeID,
81
83
  content: ' {"type":"basic","left":"_1"}'
82
- html = card.format.render_open
83
84
  href = "/test_another_card+*right?view=template_editor"
84
85
  text = "_left+test_another_card|content|content;"\
85
86
  "structure:test_another_card_structure"
87
+
88
+ html = structure_card.format.render_open
86
89
  expect(html).to have_tag("a", with: { class: "slotter", href: href },
87
90
  text: text)
88
91
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  describe Card::Set::All::Json, "JSON mod" do
4
4
  context "status view" do
5
- it "should handle real and virtual cards" do
5
+ it "handles real and virtual cards" do
6
6
  jf = Card::Format::JsonFormat
7
7
  real_json = jf.new(Card["T"]).show :status, {}
8
8
  expect(JSON[real_json]).to eq(
@@ -14,7 +14,7 @@ describe Card::Set::All::Json, "JSON mod" do
14
14
  )
15
15
  end
16
16
 
17
- it "should treat both unknown and unreadable cards as unknown" do
17
+ it "treats both unknown and unreadable cards as unknown" do
18
18
  Card::Auth.as Card::AnonymousID do
19
19
  jf = Card::Format::JsonFormat
20
20
 
@@ -1,19 +1,19 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::All::Rss do
4
- it "should render recent.rss" do
4
+ it "renders recent.rss" do
5
5
  rendered = Card[:recent].format(:rss).show(nil, {})
6
6
  expect(rendered).to match(/xml/)
7
7
  end
8
8
 
9
- it "should handle faulty search queries" do
9
+ it "handles faulty search queries" do
10
10
  bad_search = Card.create! name: "Bad Search",
11
11
  type: "Search", content: "not no search"
12
12
  rendered = bad_search.format(:rss).render_feed_body
13
- expect(rendered).to have_tag("item", text: /JSON::ParserError/)
13
+ expect(rendered).to have_tag("item", text: /Card::Error::BadQuery/)
14
14
  end
15
15
 
16
- it "should handle bad queries" do
16
+ it "handles bad queries" do
17
17
  bad_search = Card.create! name: "Bad Search",
18
18
  type: "Search", content: '{"found_by":"home"}'
19
19
  rendered = bad_search.format(:rss).render_feed_body
@@ -1,12 +1,10 @@
1
1
  format :html do
2
- view :editor do |_args|
3
- text_area :content,
4
- rows: 5,
5
- class: "card-content",
2
+ view :editor do
3
+ text_area :content, rows: 5, class: "card-content",
6
4
  "data-card-type-code" => card.type_code
7
5
  end
8
6
 
9
- view :core do |_args|
7
+ view :core do
10
8
  process_content CGI.escapeHTML(_render_raw)
11
9
  end
12
10
  end
@@ -1,11 +1,11 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Type::PlainText do
4
- it "should have special editor" do
4
+ it "has special editor" do
5
5
  assert_view_select render_editor("Plain Text"), 'textarea[rows="5"]'
6
6
  end
7
7
 
8
- it "should have special content that escapes HTML" do
8
+ it "has special content that escapes HTML" do
9
9
  expect(render_card(:core, type: "Plain Text", content: "<b></b>"))
10
10
  .to eq "&lt;b&gt;&lt;/b&gt;"
11
11
  end
@@ -0,0 +1,16 @@
1
+ require 'bootstrap/component_loader'
2
+ require 'bootstrap/component'
3
+
4
+ class Bootstrap
5
+ include Delegate
6
+ extend ComponentLoader
7
+ load_components
8
+
9
+ def initialize context=nil
10
+ @context = context
11
+ end
12
+
13
+ def render *args, &block
14
+ instance_exec *args, &block
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ #require 'component'
2
+
3
+ class Bootstrap
4
+ module BasicTags
5
+ def html content
6
+ add_content String(content).html_safe
7
+ ""
8
+ end
9
+
10
+ Component.add_div_method :div, nil do |opts, extra_args|
11
+ prepend_class opts, extra_args.first if extra_args.present?
12
+ opts
13
+ end
14
+
15
+ Component.add_div_method :span, nil do |opts, extra_args|
16
+ prepend_class opts, extra_args.first if extra_args.present?
17
+ opts
18
+ end
19
+
20
+ Component.add_tag_method :tag, nil, tag: :yield do |opts, extra_args|
21
+ prepend_class opts, extra_args[1] if extra_args[1].present?
22
+ opts[:tag] = extra_args[0]
23
+ opts
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,133 @@
1
+ #! no set module
2
+ class Bootstrap
3
+ class Component
4
+ def initialize context, *args, &block
5
+ @context = context
6
+ @content = ["".html_safe]
7
+ @args = args
8
+ @child_args = []
9
+ @append = []
10
+ @build_block = block
11
+ end
12
+
13
+ class << self
14
+ def render format, *args, &block
15
+ new(format, *args, &block).render
16
+ end
17
+
18
+ def add_div_method name, html_class, opts={}, &tag_block
19
+ add_tag_method name, html_class, opts.merge(tag: :div), &tag_block
20
+ end
21
+
22
+ def add_tag_method name, html_class, tag_opts={}, &tag_block
23
+ define_method name do |*args, &block|
24
+ process_tag tag_opts[:tag] || name do
25
+ content, opts, new_child_args = standardize_args args, &tag_block
26
+ add_classes opts, html_class, tag_opts.delete(:optional_classes)
27
+ if (attributes = tag_opts.delete(:attributes))
28
+ opts.merge! attributes
29
+ end
30
+
31
+ content = with_child_args new_child_args do
32
+ generate_content content,
33
+ tag_opts[:content_processor],
34
+ &block
35
+ end
36
+
37
+ [content, opts]
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def render
44
+ @rendered = begin
45
+ render_content
46
+ @content[-1]
47
+ end
48
+ end
49
+
50
+ def prepend &block
51
+ tmp = @content.pop
52
+ instance_exec &block
53
+ @content << tmp
54
+ end
55
+
56
+ def insert &block
57
+ instance_exec &block
58
+ end
59
+
60
+ def append &block
61
+ @append[-1] << block
62
+ end
63
+
64
+ # def wrap
65
+ # tmp = @content.pop
66
+ # @content << yield(tmp)
67
+ # end
68
+
69
+ private
70
+
71
+ def render_content
72
+ #if @build_block.arity > 0
73
+ instance_exec *@args, &@build_block
74
+ end
75
+
76
+ def generate_content content, processor, &block
77
+ content = instance_exec &block if block.present?
78
+ return content if !processor || !content.is_a?(Array)
79
+ content.each { |item| send processor, item }
80
+ ""
81
+ end
82
+
83
+ def with_child_args args
84
+ @child_args << args if args.present?
85
+ res = yield
86
+ @child_args.pop if args.present?
87
+ res
88
+ end
89
+
90
+
91
+ def add_content content
92
+ @content[-1] << "\n#{content}".html_safe if content.present?
93
+ end
94
+
95
+ def process_tag tag_name
96
+ @content.push "".html_safe
97
+ @append << []
98
+ content, opts = yield
99
+ add_content content
100
+ collected_content = @content.pop
101
+ tag_name = opts.delete(:tag) if tag_name == :yield
102
+ add_content content_tag(tag_name, collected_content, opts, false)
103
+ @append.pop.each do |block|
104
+ add_content instance_exec(&block)
105
+ end
106
+ ""
107
+ end
108
+
109
+ def standardize_args args, &block
110
+ opts = args.last.is_a?(Hash) ? args.pop : {}
111
+ items = ((args.one? && args.last.is_a?(String)) || args.last.is_a?(Array)) &&
112
+ args.pop
113
+ if block.present?
114
+ opts, args = instance_exec opts, args, &block
115
+ unless opts.is_a?(Hash)
116
+ raise Card::Error, "first return value of a tag block has to be a hash"
117
+ end
118
+ end
119
+
120
+ [items, opts, args]
121
+ end
122
+
123
+ def add_classes opts, html_class, optional_classes
124
+ prepend_class opts, html_class if html_class
125
+ Array.wrap(optional_classes).each do |k, v|
126
+ prepend_class opts, v if opts.delete k
127
+ end
128
+ end
129
+
130
+ include BasicTags
131
+ include Delegate
132
+ end
133
+ end
@@ -0,0 +1,31 @@
1
+ class Bootstrap
2
+ class Component
3
+ class Form < Component
4
+ def render_content *args
5
+ form *args, &@build_block
6
+ end
7
+
8
+ add_tag_method :form, nil, optional_classes: {
9
+ horizontal: "form-horizontal",
10
+ inline: "form-inline" }
11
+ add_div_method :group, "form-group"
12
+ add_tag_method :label, nil
13
+ add_tag_method :input, "form-control" do |opts, extra_args|
14
+ type, label = extra_args
15
+ prepend { label label, for: opts[:id] } if label
16
+ opts[:type] = type
17
+ opts
18
+ end
19
+
20
+ [:text, :password, :datetime, :"datetime-local", :date, :month, :time,
21
+ :week, :number, :email, :url, :search, :tel, :color].each do |tag|
22
+ add_tag_method tag, "form-control", attributes: { type: tag },
23
+ tag: :input do |opts, extra_args|
24
+ label, = extra_args
25
+ prepend { label label, for: opts[:id] } if label
26
+ opts
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,38 @@
1
+ class Bootstrap
2
+ class Component
3
+ class HorizontalForm < Form
4
+ def left_col_width
5
+ @child_args.last && @child_args.last[0] || 2
6
+ end
7
+
8
+ def right_col_width
9
+ @child_args.last && @child_args.last[1] || 10
10
+ end
11
+
12
+ add_tag_method :form, "form-horizontal"
13
+
14
+ add_tag_method :label, "control-label" do |opts, extra_args|
15
+ prepend_class opts, "col-sm-#{left_col_width}"
16
+ opts
17
+ end
18
+
19
+ add_div_method :input, nil do |opts, extra_args|
20
+ type, label = extra_args
21
+ prepend { tag :label, nil, for: opts[:id] } if label
22
+ insert { inner_input opts.merge(type: type) }
23
+ { class: "col-sm-#{right_col_width}" }
24
+ end
25
+ add_tag_method :inner_input, "form-control", tag: :input
26
+ add_div_method :inner_checkbox, "checkbox"
27
+
28
+ add_div_method :checkbox, nil do |opts, extra_args|
29
+ inner_checkbox do
30
+ label do
31
+ inner_input "checkbox", extra_args.first, opts
32
+ end
33
+ end
34
+ { class: "col-sm-offset-#{left_col_width} col-sm-#{right_col_width}" }
35
+ end
36
+ end
37
+ end
38
+ end