card 1.19.6 → 1.20.0

Sign up to get free protection for your applications and to get access to all the features.
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