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
@@ -1,29 +1,34 @@
1
1
 
2
2
  format :html do
3
- view :raw do |_args|
4
- input_args = { class: "navbox form-control" }
5
- @@placeholder ||= begin
6
- (p = Card["#{Card[:navbox].name}+*placeholder"]) && p.raw_content
3
+ view :raw do
4
+ wrap_with :div, class: "form-group" do
5
+ text_field_tag :_keyword, "", class: "navbox form-control",
6
+ placeholder: navbar_placeholder
7
7
  end
8
- input_args[:placeholder] = @@placeholder if @@placeholder
8
+ end
9
9
 
10
- content_tag :div, class: "form-group" do
11
- text_field_tag :_keyword, "", input_args
10
+ def navbar_placeholder
11
+ @@placeholder ||= begin
12
+ holder_card = Card["#{Card[:navbox].name}+*placeholder"]
13
+ holder_card ? holder_card.raw_content : ""
12
14
  end
13
15
  end
14
16
 
15
- view :navbar_left do |args|
16
- _render_core args.merge(navbar_class: "navbar-form navbar-left")
17
+ view :navbar_left do
18
+ class_up "navbox-form", "navbar-form navbar-left"
19
+ _render_core
17
20
  end
18
21
 
19
- view :navbar_right do |args|
20
- _render_core args.merge(navbar_class: "navbar-form navbar-right")
22
+ view :navbar_right do
23
+ class_up "navbox-form", "navbar-form navbar-left"
24
+ _render_core
21
25
  end
22
26
 
23
- view :core do |args|
24
- tag_args = { method: "get", role: "search", class: "nodblclick navbox-form #{args[:navbar_class]}" }
25
- form_tag Card.path_setting("/:search"), tag_args do
26
- _render_raw args
27
+ view :core do
28
+ form_tag Card.path_setting("/:search"),
29
+ method: "get", role: "search",
30
+ class: classy("navbox-form", "nodblclick") do
31
+ _render_raw
27
32
  end
28
33
  end
29
34
  end
@@ -1,27 +1,35 @@
1
1
  ACTS_PER_PAGE = 50
2
2
 
3
- view :title do |args|
4
- super args.merge(title: "Recent Changes")
3
+ view :title do
4
+ voo.title = "Recent Changes"
5
+ super()
5
6
  end
6
7
 
7
8
  format :html do
8
- view :core do |args|
9
- content_tag(:div, class: "history-slot list-group") do
10
- [history_legend, render_recent_acts(args)].join
9
+ view :core do
10
+ voo.hide :history_legend unless voo.main
11
+ bs_layout container: true, fluid: true do
12
+ html _optional_render_history_legend with_drafts: false
13
+ row 12 do
14
+ html _render_recent_acts
15
+ end
16
+ row 12 do
17
+ col act_paging
18
+ end
11
19
  end
12
20
  end
13
21
 
14
- view :recent_acts do |args|
15
- page = params["page"] || 1
16
- acts = Act.all_viewable.order(id: :desc).page(page).per(ACTS_PER_PAGE)
17
- acts.map do |act|
18
- if (act_card = act.card)
19
- act_view_args = args.merge(act: act, act_context: :absolute)
20
- act_card.format(:html).render_act act_view_args
21
- else
22
- Rails.logger.info "bad data, act: #{act}"
23
- ""
24
- end
25
- end.join
22
+
23
+ view :recent_acts, cache: :never do
24
+ acts = Act.all_viewable.order(id: :desc)
25
+ .page(page_from_params).per(ACTS_PER_PAGE)
26
+ render_act_list acts: acts, act_context: :absolute
27
+ end
28
+
29
+ def act_paging
30
+ acts = Act.all_viewable.order(id: :desc).page(page_from_params).per(ACTS_PER_PAGE)
31
+ wrap_with :span, class: "slotter" do
32
+ paginate acts, remote: true, theme: 'twitter-bootstrap-3'
33
+ end
26
34
  end
27
35
  end
@@ -1,17 +1,38 @@
1
+ include_set Abstract::SearchParams
2
+
3
+ format do
4
+ def extra_paging_path_args
5
+ vars = query_with_params.vars
6
+ return {} unless vars.is_a? Hash
7
+ vars.each_with_object({}) do |(key, value), hash|
8
+ hash["_#{key}"] = value
9
+ end
10
+ end
11
+
12
+ def default_search_params
13
+ hash = super
14
+ hash[:vars] = params[:vars] || {}
15
+ params.each do |key, val|
16
+ next unless key.to_s =~ /^\_(\w+)$/
17
+ hash[:vars][Regexp.last_match(1).to_sym] = val
18
+ end
19
+ hash
20
+ end
21
+ end
1
22
 
2
23
  format :html do
3
- view :title do |args|
24
+ view :title do
4
25
  vars = root.search_params[:vars]
5
26
  if vars && vars[:keyword]
6
- args[:title] = %(Search results for: <span class="search-keyword">)\
27
+ voo.title = %(Search results for: <span class="search-keyword">)\
7
28
  "#{vars[:keyword]}</span>"
8
29
  end
9
- super args
30
+ super()
10
31
  end
11
32
  end
12
33
 
13
34
  format :json do
14
- view :complete do
35
+ view :complete, cache: :never do
15
36
  term = complete_term
16
37
  exact = Card.fetch term, new: {}
17
38
 
@@ -7,19 +7,17 @@ format :html do
7
7
 
8
8
  view :type_formgroup do |args|
9
9
  if card.cards_of_type_exist?
10
- %(
11
- <div>
12
- Sorry, this card must remain a Cardtype so long as there are
13
- <strong>#{card.name}</strong> cards.
14
- </div>
15
- )
10
+ wrap_with :div do
11
+ "Sorry, this card must remain a Cardtype so long as " \
12
+ "there are <strong>#{card.name}</strong> cards."
13
+ end
16
14
  else
17
15
  super args
18
16
  end
19
17
  end
20
18
 
21
19
  view :add_link do |args|
22
- args[:title] ||= "Add #{card.name}"
20
+ voo.title ||= "Add #{card.name}"
23
21
  title = _render_title args
24
22
  link_to title, path: _render_add_path(args), class: args[:css_class]
25
23
  end
@@ -35,9 +33,9 @@ format :html do
35
33
 
36
34
  view :add_path do |args|
37
35
  path_args = {}
38
- if args[:params]
36
+ if voo.params
39
37
  context = ((@parent && @parent.card) || card).name
40
- Rack::Utils.parse_nested_query(args[:params]).each do |key, value|
38
+ Rack::Utils.parse_nested_query(voo.params).each do |key, value|
41
39
  value = value.to_name.to_absolute(context) if value
42
40
  key = key.to_name.to_absolute(context)
43
41
  path_args[key] = value
@@ -68,6 +66,10 @@ def cards_of_type_exist?
68
66
  !new_card? && Auth.as_bot { Card.count_by_wql type_id: id } > 0
69
67
  end
70
68
 
69
+ def create_ok?
70
+ Card.new(type_id: id).ok? :create
71
+ end
72
+
71
73
  event :check_for_cards_of_type, after: :validate_delete do
72
74
  if cards_of_type_exist?
73
75
  errors.add :cardtype, "can't alter this type; #{name} cards still exist"
@@ -2,7 +2,7 @@
2
2
  format :html do
3
3
  # what is this for? Can't you just use TYPE-date and editor
4
4
  # to match this cas, no special view needed?
5
- view :editor do |_args|
5
+ view :editor do
6
6
  text_field :content, class: "date-editor"
7
7
  end
8
8
  end
@@ -1,5 +1,5 @@
1
1
 
2
- view :editor do |_args|
2
+ view :editor do
3
3
  text_field :content, class: "card-content"
4
4
  end
5
5
 
@@ -1,3 +1,3 @@
1
- view :editor do |_args|
1
+ view :editor do
2
2
  text_field :content, class: "card-content"
3
3
  end
@@ -1,167 +1,16 @@
1
1
  include_set Abstract::AceEditor
2
-
3
- def item_cards params={}
4
- s = query(params)
5
- raise("OH NO.. no limit") unless s[:limit]
6
- # forces explicit limiting
7
- # can be 0 or less to force no limit
8
- Query.run(s, name)
9
- end
10
-
11
- def item_names params={}
12
- statement = query params.merge(return: :name)
13
- Query.run(statement, name)
14
- end
15
-
16
- def item_type
17
- return if query[:type].is_a?(Array) || query[:type].is_a?(Hash)
18
- query[:type]
19
- end
20
-
21
- def count params={}
22
- Card.count_by_wql query(params)
23
- end
24
-
25
- def query params={}
26
- @query ||= {}
27
- @query[params.to_s] ||= get_query(params.clone)
28
- end
29
-
30
- def get_query params={}
31
- # why is this a wagn_bot thing? can't deny search content??
32
- query = Auth.as_bot do
33
- query_content = params.delete(:query) || raw_content
34
- if query_content.empty?
35
- raise JSON::ParserError,
36
- "Error in card '#{name}':can't run search with empty content"
37
- elsif query_content.is_a?(String)
38
- JSON.parse(query_content)
39
- else query_content
40
- end
41
- end
42
- query.symbolize_keys!.merge! params.symbolize_keys
43
- if (default_limit = query.delete(:default_limit))
44
- query[:limit] ||= default_limit
45
- end
46
- query[:context] ||= cardname
47
- query
48
- end
2
+ include_set Abstract::WqlSearch
49
3
 
50
4
  format do
51
- view :core do |args|
52
- view =
53
- case search_results args
5
+ view :core, cache: :never do
6
+ _render(
7
+ case search_with_params
54
8
  when Exception then :search_error
55
9
  when Integer then :search_count
56
10
  when @mode == :template then :raw
57
11
  else :card_list
58
12
  end
59
- _render view, args
60
- end
61
-
62
- view :search_count do |_args|
63
- search_results.to_s
64
- end
65
-
66
- view :search_error do |_args|
67
- sr_class = search_results.class.to_s
68
- %(#{sr_class} :: #{search_results.message} :: #{card.raw_content})
69
- end
70
-
71
- view :card_list do |_args|
72
- if search_results.empty?
73
- "no results"
74
- else
75
- search_results.map do |c|
76
- nest c
77
- end.join "\n"
78
- end
79
- end
80
-
81
- def search_vars args={}
82
- @search_vars ||=
83
- begin
84
- v = {}
85
- v[:query] = card.query(search_params)
86
- v[:item] = set_nest_opts args.merge(query_view: v[:query][:view])
87
- v
88
- rescue JSON::ParserError => e
89
- { error: e }
90
- end
91
- end
92
-
93
- def search_results args={}
94
- @search_results ||= begin
95
- search_vars args
96
- if search_vars[:error]
97
- search_vars[:error]
98
- else
99
- begin
100
- raw_results = card.item_cards search_params
101
- is_count = search_vars[:query][:return] == "count"
102
- is_count ? raw_results.to_i : raw_results
103
- rescue Card::Error::BadQuery => e
104
- e
105
- end
106
- end
107
- end
108
- end
109
-
110
- def search_result_names
111
- @search_result_names ||=
112
- begin
113
- card.item_names search_params
114
- rescue => e
115
- { error: e }
116
- end
117
- end
118
-
119
- def each_reference_with_args args={}
120
- search_result_names.each do |name|
121
- yield(name, nest_args(args.reverse_merge!(item: :content)))
122
- end
123
- end
124
-
125
- def set_nest_opts args
126
- @nest_defaults = nil
127
- @nest_opts ||= {}
128
- @nest_opts[:view] = args[:item] || nest_opts[:view] ||
129
- args[:query_view] || default_item_view
130
- # explicit > nest syntax > WQL > nest defaults
131
- end
132
-
133
- def page_link text, page, _current=false, options={}
134
- @paging_path_args[:offset] = page * @paging_limit
135
- options[:class] = "card-paging-link slotter"
136
- options[:remote] = true
137
- options[:path] = @paging_path_args
138
- link_to raw(text), options
139
- end
140
-
141
- def page_li text, page, current=false, options={}
142
- css_class = if current
143
- "active"
144
- elsif !page
145
- "disabled"
146
- end
147
- page ||= 0
148
- content_tag :li, class: css_class do
149
- page_link text, page, current, options
150
- end
151
- end
152
-
153
- def previous_page_link page
154
- page_li '<span aria-hidden="true">&laquo;</span>', page, false,
155
- "aria-label" => "Previous"
156
- end
157
-
158
- def next_page_link page
159
- page_li '<span aria-hidden="true">&raquo;</span>', page, false,
160
- "aria-label" => "Next"
161
- end
162
-
163
- def ellipse_page
164
- content_tag :li, content_tag(:span, "...")
13
+ )
165
14
  end
166
15
 
167
16
  def chunk_list
@@ -169,30 +18,7 @@ format do
169
18
  end
170
19
  end
171
20
 
172
- format :data do
173
- view :card_list do |_args|
174
- search_results.map do |c|
175
- nest c
176
- end
177
- end
178
- end
179
-
180
- format :csv do
181
- view :card_list do |args|
182
- items = super args
183
- if @depth == 0
184
- render_csv_title_row + items
185
- else
186
- items
187
- end
188
- end
189
- end
190
-
191
21
  format :json do
192
- def default_search_params
193
- set_default_search_params default_limit: 0
194
- end
195
-
196
22
  view :export do |args|
197
23
  # avoid running the search from options and structure that
198
24
  # case a huge result or error
@@ -202,7 +28,7 @@ format :json do
202
28
  super(args)
203
29
  end
204
30
 
205
- view :export_items do |args|
31
+ view :export_items, cache: :never do |args|
206
32
  card.item_names(limit: 0).map do |i_name|
207
33
  next unless (i_card = Card[i_name])
208
34
  subformat(i_card).render_atom(args)
@@ -211,123 +37,32 @@ format :json do
211
37
  end
212
38
 
213
39
  format :rss do
214
- view :feed_body do |args|
215
- case raw_feed_items args
40
+ view :feed_body do
41
+ case raw_feed_items
216
42
  when Exception then @xml.item(render(:search_error))
217
43
  when Integer then @xml.item(render(:search_count))
218
- else super args
44
+ else super()
219
45
  end
220
46
  end
221
47
 
222
- def raw_feed_items _args
223
- @raw_feed_items ||= begin
224
- search_params[:default_limit] = 25
225
- search_results
226
- end
48
+ def raw_feed_items
49
+ @raw_feed_items ||= search_with_params
227
50
  end
228
51
  end
229
52
 
230
53
  format :html do
231
- def default_editor_args args
232
- args[:ace_mode] = "json"
233
- end
234
-
235
- view :card_list do |args|
236
- paging = _optional_render :paging, args
237
-
238
- if search_results.empty?
239
- render_no_search_results(args)
240
- else
241
- results =
242
- search_results.map do |c|
243
- item_view = nest_defaults(c)[:view]
244
- %(
245
- <div class="search-result-item item-#{item_view}">
246
- #{nest(c, size: args[:size], view: item_view)}
247
- </div>
248
- )
249
- end.join "\n"
250
-
251
- %(
252
- #{paging}
253
- <div class="search-result-list">
254
- #{results}
255
- </div>
256
- #{paging if search_results.length > 10}
257
- )
258
- end
259
- end
260
-
261
- view :closed_content do |args|
262
- if @depth > self.class.max_depth
54
+ view :closed_content, cache: :never do
55
+ if @depth > max_depth
263
56
  "..."
264
57
  else
265
- search_limit = args[:closed_search_limit]
266
- search_params[:limit] =
267
- search_limit && [search_limit, Card.config.closed_search_limit].min
268
- _render_core args.merge(hide: "paging", item: :link)
58
+ search_params[:limit] = closed_limit
59
+ _render_core hide: "paging", items: { view: :link }
269
60
  # TODO: if item is queryified to be "name", then that should work.
270
61
  # otherwise use link
271
62
  end
272
63
  end
273
64
 
274
- view :no_search_results do |_args|
275
- %(<div class="search-no-results"></div>)
276
- end
277
-
278
- view :paging do |args|
279
- s = card.query search_params
280
- offset = s[:offset].to_i
281
- limit = s[:limit].to_i
282
- return "" if limit < 1
283
- # avoid query if we know there aren't enough results to warrant paging
284
- return "" if offset == 0 && limit > offset + search_results.length
285
- total = card.count search_params
286
- # should only happen if limit exactly equals the total
287
- return "" if limit >= total
288
- @paging_path_args = { limit: limit,
289
- slot: {
290
- item: args[:item] || nest_defaults(card)[:view]
291
- } }
292
- @paging_path_args[:view] = args[:home_view] if args[:home_view]
293
- @paging_limit = limit
294
-
295
- s[:vars].each { |key, value| @paging_path_args["_#{key}"] = value }
296
-
297
- out = ['<nav><ul class="pagination paging">']
298
-
299
- total_pages = ((total - 1) / limit).to_i
300
- current_page = (offset / limit).to_i # should already be integer
301
- window = 2 # should be configurable
302
- window_min = current_page - window
303
- window_max = current_page + window
304
-
305
- previous_page = current_page > 0 ? current_page - 1 : false
306
- out << previous_page_link(previous_page)
307
- if window_min > 0
308
- out << page_li(1, 0)
309
- out << ellipse_page if window_min > 1
310
- end
311
-
312
- (window_min..window_max).each do |page|
313
- next if page < 0 || page > total_pages
314
- text = page + 1
315
- out << page_li(text, page, page == current_page)
316
- end
317
-
318
- if total_pages > window_max
319
- out << ellipse_page if total_pages > window_max + 1
320
- out << page_li(total_pages + 1, total_pages)
321
- end
322
-
323
- next_page = current_page < total_pages ? current_page + 1 : false
324
- out << next_page_link(next_page)
325
-
326
- out << %(</ul></nav>)
327
- out.join
328
- end
329
-
330
- def default_search_params
331
- set_default_search_params default_limit: 20
65
+ def default_editor_args args
66
+ args[:ace_mode] = "json"
332
67
  end
333
68
  end