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,11 +1,17 @@
1
1
  format :html do
2
- def frame args={}, &_block
3
- args.reverse_merge!(
4
- panel_class: "panel panel-default",
5
- header_class: "panel-heading",
6
- title_class: "panel-title",
7
- body_class: "panel-body"
8
- )
9
- super args
2
+ def frame
3
+ class_up "card-header", "panel-heading"
4
+ class_up "card-header-title", "panel-title"
5
+ class_up "card-body", "panel-body"
6
+ super
7
+ end
8
+
9
+ def standard_frame
10
+ class_up "card-frame", "panel panel-#{panel_state}"
11
+ super
12
+ end
13
+
14
+ def panel_state
15
+ "default"
10
16
  end
11
17
  end
@@ -1,6 +1,8 @@
1
1
  format :html do
2
- view :closed do |args|
3
- args[:body_class] = "closed-content"
4
- super args
2
+ view :closed do
3
+ class_up "card-body", "closed-content"
4
+ super()
5
5
  end
6
+
7
+ include Bootstrapper
6
8
  end
@@ -0,0 +1,31 @@
1
+ describe 'bootstrap builder' do
2
+ class BuilderTest < Card::Format::HtmlFormat::Bootstrap::Component
3
+ add_tag_method :test_tag, "test-class" do |opts, extra_args|
4
+ prepend { tag :prepend, "prepend-class" }
5
+ append { tag :append, "append-class" }
6
+ insert { tag :insert, "insert-class" }
7
+ #wrap { |content| tag :wrap, "wrap-class" { content } }
8
+ opts
9
+ end
10
+ end
11
+
12
+ describe "tag create helper methods" do
13
+ subject do
14
+ fo = Card["A"].format(:html)
15
+ tag = BuilderTest.render(fo) { test_tag }
16
+ "<buildertest>#{tag}<buildertest>"
17
+ end
18
+ it 'appends work' do
19
+ #assert_select 'prepend[class="prepend-class"]'
20
+ assert_view_select subject, "buildertest" do
21
+ #assert_select 'prepend[class="prepend-class]"'
22
+ assert_select 'prepend[class="prepend-class]"'
23
+ assert_select 'test_tag[class="test-class"]' do
24
+ assert_select 'insert[class="insert-class]"'
25
+ end
26
+
27
+ assert_select 'append[class="append-class]"'
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ describe Card::Bootstrap do
2
+ subject { described_class.new(format) }
3
+ let(:format) { Card["A"].format(:html) }
4
+
5
+ def render
6
+ subject.render do
7
+ yield
8
+ end
9
+ end
10
+
11
+ it "loads components" do
12
+ expect(subject).to respond_to(:form)
13
+ expect(subject.form).to be_instance_of ActiveSupport::SafeBuffer
14
+ end
15
+ describe "html" do
16
+ it "renderes plain text" do
17
+ #expect(render { html "test" }).to eq "test"
18
+ end
19
+ end
20
+ end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
- describe Card::Set::All::Bootstrap::Form do
3
+ describe Bootstrap::Component::Form do
4
4
  describe "input" do
5
5
  it "has form-group css class" do
6
6
  assert_view_select render_editor("Phrase"),
@@ -14,4 +14,62 @@ describe Card::Set::All::Bootstrap::Form do
14
14
  'textarea[class~="form-control"]'
15
15
  end
16
16
  end
17
+
18
+ describe "form" do
19
+ subject { Card["A"].format(:html) }
20
+ it "creates form" do
21
+ form =
22
+ subject.bs_form do
23
+ group do
24
+ input "email", "Email Address", id: "theemail"
25
+ input "password", "Password", id: "thepassword"
26
+ end
27
+ end
28
+ expect(form).to have_tag :form do
29
+ with_tag 'div.form-group' do
30
+ with_tag :label, with: { for: "theemail" },
31
+ text: "\nEmail Address"
32
+ with_tag 'input.form-control', with: { type: "email", id: "theemail" }
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "horizontal form" do
39
+ subject { Card["A"].format(:html) }
40
+ let(:form) do
41
+ subject.bs_horizontal_form 2, 10 do
42
+ group do
43
+ input "email", "Email Address", id: "theemail"
44
+ input "password", "Password", id: "thepassword"
45
+ end
46
+ group do
47
+ checkbox "test", "checkbox label", id: "thecheckbox"
48
+ end
49
+ end
50
+ end
51
+ let(:bsform) do
52
+ subject.bs do
53
+ horizontal_form 2, 10 do
54
+ group do
55
+ input "email", "Email Address", id: "theemail"
56
+ input "password", "Password", id: "thepassword"
57
+ end
58
+ group do
59
+ checkbox "test", "checkbox label", id: "thecheckbox"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ it "creates form" do
65
+ assert_view_select bsform, 'form[class="form-horizontal"]' do
66
+ assert_select 'div[class="form-group"]' do
67
+ assert_select 'label[for="theemail"', text: "Email Address"
68
+ assert_select 'div[class="col-sm-10"]' do
69
+ assert_select 'input[type="email",id="theemail",class="form-control"]'
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
17
75
  end
@@ -1,31 +1,120 @@
1
- describe Card::Set::All::Bootstrap::Layout do
1
+ describe Bootstrap::Component::Layout do
2
2
  describe "layout dsl" do
3
3
  subject { Card["A"].format(:html) }
4
4
  it "creates correct layout with column array" do
5
- layout = subject.layout container: true, fluid: true do
6
- subject.row 6, 4, 2, class: "six-times-six" do
7
- ["first column", "second column", "third column"]
5
+ layout = subject.bs_layout container: true, fluid: true do
6
+ row 6, 4, 2, class: "six-times-six" do
7
+ ["c1", "c2", "c3"]
8
8
  end
9
9
  end
10
10
  assert_view_select layout, 'div[class="container-fluid"]' do
11
- assert_select 'div[class="six-times-six row"]' do
12
- assert_select 'div[class="col-md-6"]', text: "first column"
13
- assert_select 'div[class="col-md-4"]', text: "second column"
14
- assert_select 'div[class="col-md-2"]', text: "third column"
11
+ assert_select 'div[class="row six-times-six"]' do
12
+ assert_select 'div[class="col-md-6"]', text: "c1"
13
+ assert_select 'div[class="col-md-4"]', text: "c2"
14
+ assert_select 'div[class="col-md-2"]', text: "c3"
15
15
  end
16
16
  end
17
17
  end
18
18
 
19
19
  it "creates correct layout with column calls" do
20
- layout = subject.layout do
21
- subject.row 8, 4, class: "six-times-six" do
22
- subject.column "first column"
23
- subject.column "second column", class: "extra-class"
20
+ layout = subject.bs_layout do
21
+ row 8, 4, class: "six-times-six" do
22
+ column "c1"
23
+ column "c2", class: "extra-class"
24
24
  end
25
25
  end
26
- assert_view_select layout, 'div[class="six-times-six row"]' do
27
- assert_select 'div[class="col-md-8"]', text: "first column"
28
- assert_select 'div[class="extra-class col-md-4"]', text: "second column"
26
+ assert_view_select layout, 'div[class="row six-times-six"]' do
27
+ assert_select 'div[class="col-md-8"]', text: "c1"
28
+ assert_select 'div[class="col-md-4 extra-class"]',
29
+ text: "c2"
30
+ end
31
+ end
32
+
33
+ it "handles different medium sizes" do
34
+ layout = subject.bs_layout do
35
+ row md: [8, 4], xs: [6, 6], class: "six-times-six" do
36
+ column "c1"
37
+ column "c2", class: "extra-class"
38
+ end
39
+ end
40
+ assert_view_select layout, 'div[class="row six-times-six"]' do
41
+ assert_select 'div[class="col-md-8 col-xs-6"]', text: "c1"
42
+ assert_select 'div[class="col-md-4 col-xs-6 extra-class"]',
43
+ text: "c2"
44
+ end
45
+ end
46
+
47
+ it "works without column" do
48
+ layout = subject.bs_layout do
49
+ row do
50
+ "test"
51
+ end
52
+ end
53
+ assert_view_select layout, 'div[class="row"]', text: "test"
54
+ end
55
+
56
+ it "handles layout sequence" do
57
+ # format = Card["A"].form
58
+ lay = subject.bs do
59
+ layout do
60
+ row 8, 4 do
61
+ column "c1"
62
+ column "c2"
63
+ end
64
+ end
65
+
66
+ layout do
67
+ row 12, class: "six-times-six" do
68
+ column "new column"
69
+ end
70
+ end
71
+ end
72
+ # assert_view_select lay, 'div[class="row"]' do
73
+ # assert_select 'div[class="col-md-8"]', text: "c1"
74
+ # assert_select 'div[class="col-md-4"]', text: "c2"
75
+ # end
76
+ assert_view_select lay, 'div[class="row six-times-six"]' do
77
+ assert_select 'div[class="col-md-12"]', text: "new column"
78
+ end
79
+ end
80
+
81
+ it "handles nested layouts" do
82
+ # format = Card["A"].format :html
83
+ lay = subject.bs do
84
+ layout do
85
+ row 8, 4 do
86
+ column do
87
+ layout { row 12, ["c1"] }
88
+ end
89
+ column do
90
+ row 12, ["c2"]
91
+ row 6 do
92
+ html "<span>s1</span>"
93
+ column "c3"
94
+ end
95
+ row 8 do
96
+ "some content"
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ assert_view_select lay, 'div[class="row"]' do
103
+ assert_select 'div[class="col-md-8"]' do
104
+ assert_select 'div[class="row"]' do
105
+ assert_select 'div[class="col-md-12"]', text: "c1"
106
+ end
107
+ end
108
+ assert_select 'div[class="col-md-4"]' do
109
+ assert_select 'div[class="row"]' do
110
+ assert_select 'div[class="col-md-12"]', text: "c2"
111
+ end
112
+ assert_select 'div[class="row"]' do
113
+ assert_select 'div[class="col-md-6"]', text: "c3"
114
+ assert_select 'span', text: "s1"
115
+ end
116
+ assert_select 'div[class="row"]', text: "some content"
117
+ end
29
118
  end
30
119
  end
31
120
  end
@@ -88,9 +88,10 @@ def delete_files_for_action action
88
88
  end
89
89
  end
90
90
 
91
- # create filesystem links to files from prior action
92
- def rollback_to action
93
- update_attributes! revision(action).merge(empty_ok: true)
91
+ def revision action
92
+ result = super action
93
+ result[:empty_ok] = true
94
+ result
94
95
  end
95
96
 
96
97
  def attachment_format ext
@@ -42,7 +42,7 @@ def file_dir
42
42
  end
43
43
 
44
44
  def public?
45
- who_can(:read).include? Card[:anyone].id
45
+ who_can(:read).include? Card::AnyoneID
46
46
  end
47
47
 
48
48
  def file_id
@@ -37,28 +37,22 @@ event :validate_storage_type_update, :validate,
37
37
  end
38
38
  end
39
39
 
40
- event :loose_coded_status_on_update, :initialize,
41
- on: :update, when: proc { |c| c.coded? } do
40
+ event :loose_coded_status_on_update, :initialize, on: :update, when: :coded? do
42
41
  return if @new_mod
43
42
  @new_storage_type ||= storage_type_from_config
44
43
  end
45
44
 
46
- event :update_public_link_on_create, :integrate,
47
- on: :create,
48
- when: proc { |c| c.local? } do
45
+ event :update_public_link_on_create, :integrate, on: :create, when: :local? do
49
46
  update_public_link
50
47
  end
51
48
 
52
- event :remove_public_link_on_delete, :integrate,
53
- on: :delete,
54
- when: proc { |c| c.local? } do
49
+ event :remove_public_link_on_delete, :integrate, on: :delete, when: :local? do
55
50
  remove_public_links
56
51
  end
57
52
 
58
- event :update_public_link, after: :update_read_rule,
59
- when: proc { |c| c.local? } do
53
+ event :update_public_link, after: :update_read_rule, when: :local? do
60
54
  return if content.blank?
61
- if who_can(:read).include? Card[:anyone].id
55
+ if who_can(:read).include? Card::AnyoneID
62
56
  create_public_links
63
57
  else
64
58
  remove_public_links
@@ -16,18 +16,22 @@ end
16
16
  include SelectedAction
17
17
 
18
18
  format do
19
- view :source do |_args|
19
+ view :source do
20
+ source_url
21
+ end
22
+
23
+ def source_url
20
24
  card.attachment.url
21
25
  end
22
26
 
23
- view :core do |args|
24
- handle_source args do |source|
27
+ view :core do
28
+ handle_source do |source|
25
29
  card_url source
26
30
  end
27
31
  end
28
32
 
29
- def handle_source args
30
- source = _render_source args
33
+ def handle_source
34
+ source = source_url
31
35
  source ? yield(source) : ""
32
36
  rescue
33
37
  "File Error"
@@ -36,31 +40,34 @@ end
36
40
 
37
41
  format :file do
38
42
  # returns send_file args. not in love with this...
39
- view :core do |_args|
43
+ view :core, cache: :never do |_args|
40
44
  # this means we only support known formats. dislike.
41
45
  attachment_format = card.attachment_format(params[:format])
42
46
  return _render_not_found unless attachment_format
43
47
  return card.format(:html).render_core(args) if card.remote_storage?
48
+ set_response_headers
49
+ args_for_send_file
50
+ end
44
51
 
45
- if params[:explicit_file] && (r = controller.response)
46
- r.headers["Expires"] = 1.year.from_now.httpdate
47
- # currently using default "private", because proxy servers could block
48
- # needed permission checks
49
- # r.headers["Cache-Control"] = "public"
50
- end
51
-
52
- # formerly supported redirecting to correct file format
53
- # elsif ![format, 'file'].member? params[:format]
54
- # path = request.fullpath.sub( /\.#{params[:format]}\b/, '.' + format )
55
- # return redirect_to(path) #card.attachment.url(style) )
52
+ def args_for_send_file
56
53
  file = selected_file_version
57
- [file.path,
58
- {
59
- type: file.content_type,
60
- filename: "#{card.cardname.safe_key}#{file.extension}",
61
- x_sendfile: true,
62
- disposition: (params[:format] == "file" ? "attachment" : "inline")
63
- }]
54
+ [
55
+ file.path,
56
+ {
57
+ type: file.content_type,
58
+ filename: "#{card.cardname.safe_key}#{file.extension}",
59
+ x_sendfile: true,
60
+ disposition: (params[:format] == "file" ? "attachment" : "inline")
61
+ }
62
+ ]
63
+ end
64
+
65
+ def set_response_headers
66
+ return unless params[:explicit_file] && (r = controller.response)
67
+ r.headers["Expires"] = 1.year.from_now.httpdate
68
+ # currently using default "private", because proxy servers could block
69
+ # needed permission checks
70
+ # r.headers["Cache-Control"] = "public"
64
71
  end
65
72
 
66
73
  def selected_file_version
@@ -70,19 +77,19 @@ end
70
77
 
71
78
  format :html do
72
79
  view :core do |args|
73
- handle_source args do |source|
74
- "<a href=\"#{source}\">Download #{showname args[:title]}</a>"
80
+ handle_source do |source|
81
+ "<a href=\"#{source}\">Download #{showname voo.title}</a>"
75
82
  end
76
83
  end
77
84
 
78
- view :editor do |args|
85
+ view :editor do
79
86
  if card.web? || card.no_upload?
80
87
  return text_field(:content, class: "card-content")
81
88
  end
82
- file_chooser args
89
+ file_chooser
83
90
  end
84
91
 
85
- def preview _args
92
+ def preview
86
93
  ""
87
94
  end
88
95
 
@@ -98,7 +105,7 @@ format :html do
98
105
  <tr class="template-download fade in">
99
106
  <td>
100
107
  <span class="preview">
101
- #{preview(args)}
108
+ #{preview}
102
109
  </span>
103
110
  </td>
104
111
  <td>
@@ -125,10 +132,10 @@ format :html do
125
132
  HTML
126
133
  end
127
134
 
128
- def file_chooser args
135
+ def file_chooser
129
136
  <<-HTML
130
137
  <div class="choose-file">
131
- #{preview(args)}
138
+ #{preview}
132
139
  <span class="btn btn-success fileinput-button">
133
140
  <i class="glyphicon glyphicon-cloud-upload"></i>
134
141
  <span>