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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/card.gemspec +8 -7
- data/config/initializers/01_core_extensions/array.rb +4 -0
- data/config/initializers/01_core_extensions/persistent_identifiers.rb +12 -0
- data/config/initializers/02_patches/better_errors.rb +56 -0
- data/config/initializers/core_extensions.rb +13 -18
- data/config/initializers/patches.rb +8 -0
- data/config/locales/de.yml +0 -2
- data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +22 -12
- data/db/migrate_core_cards/20161102202156_tweak_recaptcha_setting_cards.rb +17 -0
- data/db/migrate_core_cards/20161103154836_update_keys.rb +46 -0
- data/lib/card.rb +1 -8
- data/lib/card/act_manager.rb +4 -0
- data/lib/card/auth/permissions.rb +5 -3
- data/lib/card/cache.rb +1 -20
- data/lib/card/cache/persistent.rb +6 -0
- data/lib/card/content/chunk.rb +4 -3
- data/lib/card/content/diff.rb +2 -2
- data/lib/card/content/diff/result.rb +11 -0
- data/lib/card/env/success.rb +4 -0
- data/lib/card/error.rb +2 -0
- data/lib/card/format.rb +14 -17
- data/lib/card/format/content.rb +16 -8
- data/lib/card/format/error.rb +3 -5
- data/lib/card/format/names.rb +22 -16
- data/lib/card/format/nest.rb +67 -61
- data/lib/card/format/nest/fetch.rb +40 -33
- data/lib/card/format/nest/main.rb +39 -19
- data/lib/card/format/nest/subformat.rb +3 -16
- data/lib/card/format/nest/view.rb +23 -32
- data/lib/card/format/permission.rb +49 -34
- data/lib/card/format/registration.rb +12 -6
- data/lib/card/format/render.rb +62 -73
- data/lib/card/migration.rb +14 -10
- data/lib/card/migration/import.rb +20 -19
- data/lib/card/migration/import/import_data.rb +50 -59
- data/lib/card/migration/import/import_data/card_attributes.rb +56 -0
- data/lib/card/migration/import/import_data/card_content.rb +33 -0
- data/lib/card/migration/import/merger.rb +47 -0
- data/lib/card/mod/loader.rb +4 -4
- data/lib/card/model/save_helper.rb +49 -10
- data/lib/card/name.rb +16 -52
- data/lib/card/name/fields_and_traits.rb +67 -0
- data/lib/card/name/variants.rb +17 -0
- data/lib/card/query.rb +6 -2
- data/lib/card/query/attributes.rb +1 -1
- data/lib/card/query/interpretation.rb +3 -3
- data/lib/card/set/event.rb +2 -1
- data/lib/card/set/format.rb +18 -7
- data/lib/card/set_pattern.rb +17 -13
- data/lib/card/tasks/card.rake +1 -1
- data/lib/card/view.rb +55 -0
- data/lib/card/view/cache.rb +90 -0
- data/lib/card/view/fetch.rb +109 -0
- data/lib/card/view/options.rb +164 -0
- data/lib/card/view/stub.rb +30 -0
- data/lib/card/view/visibility.rb +95 -0
- data/lib/cardio.rb +3 -2
- data/lib/cardio/schema.rb +21 -8
- data/lib/generators/card.rb +16 -2
- data/lib/generators/card/format/format_generator.rb +10 -9
- data/lib/generators/card/migration/migration_generator.rb +10 -5
- data/lib/generators/card/set/USAGE +1 -1
- data/lib/generators/card/set/set_generator.rb +11 -9
- data/mod/account/set/right/account.rb +38 -40
- data/mod/account/set/right/token.rb +2 -1
- data/mod/account/set/self/account_links.rb +34 -54
- data/mod/account/set/self/signin.rb +107 -93
- data/mod/account/set/type/signup.rb +33 -32
- data/mod/account/set/type/user.rb +28 -21
- data/mod/account/spec/set/all/account_spec.rb +9 -9
- data/mod/account/spec/set/right/account_spec.rb +23 -14
- data/mod/account/spec/set/right/email_spec.rb +6 -6
- data/mod/account/spec/set/right/password_spec.rb +4 -4
- data/mod/account/spec/set/right/token_spec.rb +3 -3
- data/mod/account/spec/set/self/account_links_spec.rb +3 -3
- data/mod/account/spec/set/self/signin_spec.rb +2 -2
- data/mod/account/spec/set/type/signup_spec.rb +7 -8
- data/mod/ace_editor/set/abstract/ace_editor.rb +1 -4
- data/mod/admin/set/self/admin.rb +2 -2
- data/mod/admin/set/self/admin_info.rb +1 -1
- data/mod/admin/set/self/recaptcha_private_key.rb +3 -0
- data/mod/admin/set/self/recaptcha_proxy.rb +3 -0
- data/mod/admin/set/self/recaptcha_public_key.rb +3 -0
- data/mod/admin/set/self/trash.rb +4 -4
- data/mod/admin/spec/set/self/admin_spec.rb +4 -4
- data/mod/admin/spec/set/self/version_spec.rb +1 -1
- data/mod/basic_formats/set/all/all_css.rb +3 -3
- data/mod/basic_formats/set/all/all_csv.rb +6 -6
- data/mod/basic_formats/set/all/all_js.rb +4 -0
- data/mod/basic_formats/set/all/base.rb +40 -62
- data/mod/basic_formats/set/all/json.rb +34 -39
- data/mod/basic_formats/set/all/rss.rb +6 -6
- data/mod/basic_formats/set/all/text.rb +3 -2
- data/mod/basic_formats/set/self/01_head/javascript.rb +2 -2
- data/mod/basic_formats/set/self/head.rb +6 -10
- data/mod/basic_formats/spec/set/all/all_css_spec.rb +1 -1
- data/mod/basic_formats/spec/set/all/all_csv_spec.rb +1 -1
- data/mod/basic_formats/spec/set/all/base_spec.rb +8 -5
- data/mod/basic_formats/spec/set/all/json_spec.rb +2 -2
- data/mod/basic_formats/spec/set/all/rss_spec.rb +4 -4
- data/mod/basic_types/set/type/plain_text.rb +3 -5
- data/mod/basic_types/spec/set/type/plain_text_spec.rb +2 -2
- data/mod/bootstrap/lib/bootstrap.rb +16 -0
- data/mod/bootstrap/lib/bootstrap/basic_tags.rb +26 -0
- data/mod/bootstrap/lib/bootstrap/component.rb +133 -0
- data/mod/bootstrap/lib/bootstrap/component/form.rb +31 -0
- data/mod/bootstrap/lib/bootstrap/component/horizontal_form.rb +38 -0
- data/mod/bootstrap/lib/bootstrap/component/layout.rb +83 -0
- data/mod/bootstrap/lib/bootstrap/component/panel.rb +9 -0
- data/mod/bootstrap/lib/bootstrap/component_loader.rb +30 -0
- data/mod/bootstrap/lib/bootstrap/delegate.rb +16 -0
- data/mod/bootstrap/lib/bootstrapper.rb +16 -0
- data/mod/bootstrap/lib/stylesheets/bootstrap/_tables.scss +55 -52
- data/mod/bootstrap/lib/stylesheets/bootstrap/mixins/_table-row.scss +12 -12
- data/mod/bootstrap/lib/stylesheets/bootstrap_cards.scss +12 -0
- data/mod/bootstrap/set/all/bootstrap/accordion.rb +63 -0
- data/mod/bootstrap/set/all/bootstrap/helper.rb +7 -140
- data/mod/bootstrap/set/all/bootstrap/navbar.rb +74 -0
- data/mod/bootstrap/set/all/bootstrap/table.rb +76 -46
- data/mod/bootstrap/set/all/bootstrap/tabs.rb +58 -23
- data/mod/bootstrap/set/all/bootstrap/wrapper.rb +14 -8
- data/mod/bootstrap/set/all/rich_bootstrap.rb +5 -3
- data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_builder_spec.rb +31 -0
- data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_spec.rb +20 -0
- data/mod/bootstrap/spec/set/all/bootstrap/form_spec.rb +59 -1
- data/mod/bootstrap/spec/set/all/bootstrap/layout_spec.rb +104 -15
- data/mod/carrierwave/set/abstract/attachment.rb +4 -3
- data/mod/carrierwave/set/abstract/attachment/paths.rb +1 -1
- data/mod/carrierwave/set/abstract/attachment/storage_type.rb +5 -11
- data/mod/carrierwave/set/type/file.rb +39 -32
- data/mod/carrierwave/set/type/image.rb +59 -34
- data/mod/carrierwave/spec/set/type/image_spec.rb +3 -3
- data/mod/core/chunk/link.rb +5 -0
- data/mod/core/chunk/{include.rb → nest.rb} +8 -29
- data/mod/core/chunk/reference.rb +5 -6
- data/mod/core/chunk/view_stub.rb +42 -0
- data/mod/core/format/html_format.rb +23 -26
- data/mod/core/set/abstract/code_file.rb +1 -1
- data/mod/core/set/all/actify.rb +1 -1
- data/mod/core/set/all/active_card.rb +0 -1
- data/mod/core/set/all/{tracked_attributes.rb → assign_attributes.rb} +55 -24
- data/mod/core/set/all/collection.rb +136 -122
- data/mod/core/set/all/content.rb +8 -0
- data/mod/core/set/all/event.rb +5 -2
- data/mod/core/set/all/export.rb +7 -7
- data/mod/core/set/all/fetch.rb +90 -26
- data/mod/core/set/all/initialize.rb +17 -6
- data/mod/core/set/all/name.rb +2 -3
- data/mod/core/set/all/permissions.rb +19 -11
- data/mod/core/set/all/states.rb +12 -2
- data/mod/core/set/all/trash.rb +1 -1
- data/mod/core/set/all/type.rb +2 -0
- data/mod/core/set/all/utils.rb +4 -3
- data/mod/core/spec/chunk/literal_spec.rb +2 -2
- data/mod/core/spec/chunk/uri_spec.rb +17 -17
- data/mod/core/spec/format/html_format_spec.rb +11 -13
- data/mod/core/spec/set/all/attribute_tracking_spec.rb +2 -2
- data/mod/core/spec/set/all/collection_spec.rb +21 -24
- data/mod/core/spec/set/all/content_spec.rb +1 -1
- data/mod/core/spec/set/all/export_spec.rb +3 -3
- data/mod/core/spec/set/all/fetch_spec.rb +5 -5
- data/mod/core/spec/set/all/initialize_spec.rb +4 -4
- data/mod/core/spec/set/all/name_spec.rb +6 -6
- data/mod/core/spec/set/all/permissions_spec.rb +10 -10
- data/mod/core/spec/set/all/references_spec.rb +1 -1
- data/mod/core/spec/set/all/rules2_spec.rb +24 -24
- data/mod/core/spec/set/all/rules_spec.rb +1 -1
- data/mod/core/spec/set/all/templating_spec.rb +8 -8
- data/mod/core/spec/set/all/tracked_attributes_spec.rb +6 -6
- data/mod/core/spec/set/all/type_spec.rb +5 -5
- data/mod/developer/spec/set/all/event_viz_spec.rb +1 -1
- data/mod/developer/spec/set/right/debug_spec.rb +1 -1
- data/mod/email/set/all/email_html.rb +2 -2
- data/mod/email/set/all/notify.rb +8 -3
- data/mod/email/set/right/bcc.rb +3 -3
- data/mod/email/set/right/follow.rb +5 -5
- data/mod/email/set/right/following.rb +1 -1
- data/mod/email/set/self/follow_defaults.rb +27 -16
- data/mod/email/set/type/email_template.rb +1 -1
- data/mod/email/set/type_plus_right/user/follow.rb +10 -9
- data/mod/history/lib/card/act.rb +4 -0
- data/mod/history/lib/card/act/act_renderer.rb +194 -0
- data/mod/history/lib/card/act/act_renderer/absolute_act_renderer.rb +25 -0
- data/mod/history/lib/card/act/act_renderer/relative_act_renderer.rb +41 -0
- data/mod/history/lib/card/action.rb +1 -0
- data/mod/history/lib/card/action/action_renderer.rb +92 -0
- data/mod/history/lib/card/action/differ.rb +6 -1
- data/mod/history/set/all/act_view.rb +64 -0
- data/mod/history/set/all/action_view.rb +65 -0
- data/mod/history/set/all/content_history.rb +44 -37
- data/mod/history/set/all/history.rb +49 -263
- data/mod/machines/lib/stylesheets/style_cards.scss +30 -115
- data/mod/machines/set/abstract/script.rb +42 -7
- data/mod/machines/set/right/machine_input.rb +4 -0
- data/mod/machines/set/type/coffee_script.rb +8 -22
- data/mod/machines/set/type/css.rb +2 -2
- data/mod/machines/set/type/java_script.rb +4 -24
- data/mod/machines/set/type/scss.rb +1 -1
- data/mod/machines/spec/set/type/css_spec.rb +1 -1
- data/mod/machines/spec/set/type/scss_spec.rb +3 -3
- data/mod/machines/spec/set/type/skin_spec.rb +7 -7
- data/mod/pointer/set/abstract/01_pointer.rb +44 -46
- data/mod/pointer/set/abstract/01_pointer/edit.rb +13 -13
- data/mod/pointer/set/right/options.rb +4 -0
- data/mod/pointer/spec/set/type/pointer_spec.rb +7 -7
- data/mod/prosemirror_editor/set/abstract/prosemirror_editor.rb +3 -3
- data/mod/settings/set/abstract/permission.rb +25 -18
- data/mod/settings/set/right/add_help.rb +3 -3
- data/mod/settings/set/right/structure.rb +10 -16
- data/mod/settings/spec/set/right/comment_spec.rb +3 -3
- data/mod/settings/spec/set/right/create_spec.rb +1 -1
- data/mod/settings/spec/set/right/style_spec.rb +1 -1
- data/mod/settings/spec/set/type/setting_spec.rb +1 -1
- data/mod/solid_cache/set/abstract/solid_cache.rb +4 -4
- data/mod/solid_cache/set/right/solid_cache.rb +9 -10
- data/mod/standard/set/abstract/01_search_params.rb +41 -0
- data/mod/standard/set/abstract/search.rb +132 -0
- data/mod/standard/set/abstract/search/paging.rb +81 -0
- data/mod/standard/set/abstract/search/paging/paging_links.rb +90 -0
- data/mod/standard/set/abstract/wql_search.rb +67 -0
- data/mod/standard/set/all/error.rb +89 -82
- data/mod/standard/set/all/links.rb +1 -1
- data/mod/standard/set/all/rich_html/content.rb +125 -141
- data/mod/standard/set/all/rich_html/editing.rb +115 -178
- data/mod/standard/set/all/rich_html/form.rb +111 -131
- data/mod/standard/set/all/rich_html/header.rb +57 -39
- data/mod/standard/set/all/rich_html/menu.rb +94 -94
- data/mod/standard/set/all/rich_html/modal.rb +5 -10
- data/mod/standard/set/all/rich_html/new.rb +103 -0
- data/mod/standard/set/all/rich_html/toolbar.rb +54 -74
- data/mod/standard/set/all/rich_html/wrapper.rb +111 -138
- data/mod/standard/set/rstar/rules.rb +27 -38
- data/mod/standard/set/rstar/rules_editor.rb +298 -277
- data/mod/standard/set/self/navbox.rb +20 -15
- data/mod/standard/set/self/recent.rb +25 -17
- data/mod/standard/set/self/search.rb +25 -4
- data/mod/standard/set/type/cardtype.rb +11 -9
- data/mod/standard/set/type/date.rb +1 -1
- data/mod/standard/set/type/number.rb +1 -1
- data/mod/standard/set/type/phrase.rb +1 -1
- data/mod/standard/set/type/search_type.rb +17 -282
- data/mod/standard/set/type/session.rb +1 -1
- data/mod/standard/set/type/set.rb +155 -131
- data/mod/standard/set/type/toggle.rb +1 -1
- data/mod/standard/set/type/uri.rb +4 -4
- data/mod/standard/spec/chunk/include_spec.rb +13 -31
- data/mod/standard/spec/chunk/link_spec.rb +1 -1
- data/mod/standard/spec/set/all/error_spec.rb +1 -1
- data/mod/standard/spec/set/all/history_spec.rb +2 -2
- data/mod/standard/spec/set/all/rich_html/form_spec.rb +4 -4
- data/mod/standard/spec/set/all/rich_html/toolbar_spec.rb +22 -0
- data/mod/standard/spec/set/all/rich_html/wrapper_spec.rb +3 -2
- data/mod/standard/spec/set/right/when_created_spec.rb +1 -1
- data/mod/standard/spec/set/right/when_last_edited_spec.rb +1 -1
- data/mod/standard/spec/set/rstar/rules_spec.rb +2 -3
- data/mod/standard/spec/set/self/head_spec.rb +2 -2
- data/mod/standard/spec/set/self/navbox_spec.rb +1 -1
- data/mod/standard/spec/set/self/now_spec.rb +1 -1
- data/mod/standard/spec/set/type/date_spec.rb +1 -1
- data/mod/standard/spec/set/type/email_template_spec.rb +1 -1
- data/mod/standard/spec/set/type/layout_type_spec.rb +1 -1
- data/mod/standard/spec/set/type/number_spec.rb +1 -1
- data/mod/standard/spec/set/type/phrase_spec.rb +1 -1
- data/mod/standard/spec/set/type/search_type_spec.rb +2 -2
- data/mod/standard/spec/set/type/set_spec.rb +2 -2
- data/mod/standard/spec/set/type/toggle_spec.rb +2 -2
- data/mod/standard/spec/set/type/uri_spec.rb +3 -1
- data/mod/tinymce_editor/set/abstract/tinymce_editor.rb +1 -1
- data/spec/config/initializers/core_extensions_spec.rb +40 -10
- data/spec/lib/card/auth_spec.rb +8 -8
- data/spec/lib/card/cache_spec.rb +3 -3
- data/spec/lib/card/chunk_spec.rb +4 -4
- data/spec/lib/card/codename_spec.rb +2 -2
- data/spec/lib/card/content_spec.rb +23 -23
- data/spec/lib/card/diff_spec.rb +1 -1
- data/spec/lib/card/format_spec.rb +19 -24
- data/spec/lib/card/loader_spec.rb +4 -4
- data/spec/lib/card/name_spec.rb +16 -16
- data/spec/lib/card/query_spec.rb +80 -80
- data/spec/lib/card/reference_spec.rb +5 -5
- data/spec/lib/card/set_spec.rb +6 -6
- data/spec/lib/card/subcards_spec.rb +14 -0
- data/spec/lib/card/view_cache_spec.rb +5 -5
- data/spec/models/card/cardtype_spec.rb +15 -15
- data/spec/models/card/create_spec.rb +2 -2
- data/spec/models/card/trash_spec.rb +24 -24
- data/spec/models/card/type_transition_spec.rb +8 -8
- data/spec/models/card/validation_spec.rb +5 -5
- data/spec/models/card_spec.rb +14 -14
- data/spec/spec_helper.rb +6 -2
- data/spec/support/card_spec_helper.rb +21 -11
- data/spec/support/helper/card_helper.rb +11 -4
- metadata +73 -15
- data/lib/card/cache/view_cache.rb +0 -103
- data/mod/bootstrap/set/all/bootstrap/layout.rb +0 -58
- data/mod/core/set/all/view_cache.rb +0 -9
@@ -3,32 +3,52 @@ class Card
|
|
3
3
|
module Nest
|
4
4
|
# Handle the main nest
|
5
5
|
module Main
|
6
|
-
def wrap_main
|
7
|
-
|
6
|
+
def wrap_main
|
7
|
+
yield # no wrapping in base format
|
8
8
|
end
|
9
9
|
|
10
|
-
protected
|
11
|
-
|
12
10
|
def main_nest opts
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
@mainline = true
|
18
|
-
result = wrap_main nest_card(root.card, opts)
|
19
|
-
@mainline = false
|
20
|
-
result
|
11
|
+
wrap_main do
|
12
|
+
with_nest_mode :normal do
|
13
|
+
nest root.card, opts.merge(main_view: true, main: true)
|
14
|
+
end
|
21
15
|
end
|
22
16
|
end
|
23
17
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
end
|
18
|
+
def main_nest? nest_name
|
19
|
+
nest_name == "_main" && !root.already_mained?
|
20
|
+
end
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
|
22
|
+
def already_mained?
|
23
|
+
return true if @main || @already_main
|
24
|
+
@already_main = true
|
25
|
+
false
|
26
|
+
end
|
27
|
+
|
28
|
+
def main!
|
29
|
+
@main = true
|
30
|
+
end
|
31
|
+
|
32
|
+
def main_nest_options
|
33
|
+
opts = root.main_opts || {}
|
34
|
+
main_nest_size_opt opts
|
35
|
+
main_nest_items_opt opts
|
36
|
+
opts
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
def main_nest_size_opt opts
|
42
|
+
val = params[:size]
|
43
|
+
return unless val.present?
|
44
|
+
opts[:size] = val.to_sym
|
45
|
+
end
|
46
|
+
|
47
|
+
def main_nest_items_opt opts
|
48
|
+
val = params[:item]
|
49
|
+
return unless val.present?
|
50
|
+
opts[:items] ||= {}
|
51
|
+
opts[:items][:view] = val.to_sym
|
32
52
|
end
|
33
53
|
end
|
34
54
|
end
|
@@ -4,28 +4,15 @@ class Card
|
|
4
4
|
module Subformat
|
5
5
|
def subformat subcard
|
6
6
|
subcard = Card.fetch(subcard, new: {}) if subcard.is_a?(String)
|
7
|
-
self.class.new subcard,
|
8
|
-
|
9
|
-
|
10
|
-
# here. need a generalized mechanism
|
11
|
-
# for attribute inheritance
|
12
|
-
context_names: @context_names, mode: @mode,
|
13
|
-
mainline: @mainline, form: @form
|
7
|
+
self.class.new subcard, root: @root, parent: self, depth: @depth + 1,
|
8
|
+
form: @form, mode: @mode,
|
9
|
+
context_names: @context_names
|
14
10
|
end
|
15
11
|
|
16
12
|
def field_subformat field
|
17
13
|
field = card.cardname.field(field) unless field.is_a?(Card)
|
18
14
|
subformat field
|
19
15
|
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def nest_subformat nested_card, opts
|
24
|
-
return self if opts[:inc_name] =~ /^_(self)?$/
|
25
|
-
sub = subformat nested_card
|
26
|
-
sub.nest_opts = opts[:items] ? opts[:items].clone : {}
|
27
|
-
sub
|
28
|
-
end
|
29
16
|
end
|
30
17
|
end
|
31
18
|
end
|
@@ -1,38 +1,28 @@
|
|
1
1
|
class Card
|
2
2
|
class Format
|
3
3
|
module Nest
|
4
|
+
NEST_MODES = { new: :edit,
|
5
|
+
closed_content: :closed,
|
6
|
+
setup: :edit,
|
7
|
+
edit: :edit, closed: :closed, layout: :layout,
|
8
|
+
normal: :normal, template: :template }.freeze
|
9
|
+
|
4
10
|
# Renders views for a nests
|
5
11
|
module View
|
6
|
-
NEST_MODES = { new: :edit,
|
7
|
-
closed_content: :closed,
|
8
|
-
setup: :edit,
|
9
|
-
edit: :edit, closed: :closed, layout: :layout,
|
10
|
-
normal: :normal, template: :template }.freeze
|
11
|
-
|
12
|
-
def nest_render view, opts
|
13
|
-
optional_render nest_view(view), opts
|
14
|
-
end
|
15
|
-
|
16
12
|
def with_nest_mode mode
|
17
|
-
|
18
|
-
|
13
|
+
old_mode = @mode
|
14
|
+
if (switch_mode = NEST_MODES[mode])
|
19
15
|
@mode = switch_mode
|
20
|
-
@nest_defaults = nil
|
21
16
|
end
|
22
17
|
result = yield
|
23
|
-
|
24
|
-
@nest_defaults = nil
|
25
|
-
@mode = old_mode
|
26
|
-
end
|
18
|
+
@mode = old_mode
|
27
19
|
result
|
28
20
|
end
|
29
21
|
|
30
|
-
private
|
22
|
+
# private
|
31
23
|
|
32
|
-
def
|
33
|
-
#
|
34
|
-
# has always the same @mode as its parent format
|
35
|
-
# The nest view used to be based on the mode of the parent format
|
24
|
+
def modal_nest_view view
|
25
|
+
# Note: the subformat always has the same @mode as its parent format
|
36
26
|
case @mode
|
37
27
|
when :edit then view_in_edit_mode(view)
|
38
28
|
when :template then :template_rule
|
@@ -44,22 +34,23 @@ class Card
|
|
44
34
|
# Returns the view that the card should use
|
45
35
|
# if nested in edit mode
|
46
36
|
def view_in_edit_mode homeview
|
47
|
-
|
48
|
-
|
49
|
-
card.structure || # not yet nesting structures
|
50
|
-
card.key.blank? # eg {{_self|type}} on new cards
|
37
|
+
hide_view_in_edit_mode?(homeview) ? :blank : :edit_in_form
|
38
|
+
end
|
51
39
|
|
52
|
-
|
40
|
+
def hide_view_in_edit_mode? view
|
41
|
+
Card::Format.perms[view] == :none || # view never edited
|
42
|
+
card.structure || # not yet nesting structures
|
43
|
+
card.key.blank? # eg {{_self|type}} on new cards
|
53
44
|
end
|
54
45
|
|
55
46
|
# Return the view that the card should use
|
56
47
|
# if nested in closed mode
|
57
|
-
def view_in_closed_mode
|
58
|
-
approved_view = Card::Format.closed[
|
48
|
+
def view_in_closed_mode view
|
49
|
+
approved_view = Card::Format.closed[view]
|
59
50
|
if approved_view == true
|
60
|
-
|
61
|
-
elsif Card::Format.error_code[
|
62
|
-
|
51
|
+
view
|
52
|
+
elsif Card::Format.error_code[view]
|
53
|
+
view
|
63
54
|
elsif approved_view
|
64
55
|
approved_view
|
65
56
|
elsif !card.known?
|
@@ -1,53 +1,68 @@
|
|
1
1
|
class Card
|
2
2
|
class Format
|
3
3
|
module Permission
|
4
|
-
def ok_view view,
|
5
|
-
return
|
6
|
-
approved_view =
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
4
|
+
def ok_view view, skip_perms=false
|
5
|
+
return :too_deep if subformats_nested_too_deeply?
|
6
|
+
approved_view = check_view view, skip_perms
|
7
|
+
handle_view_denial view, approved_view
|
8
|
+
assign_view_error_status approved_view
|
9
|
+
|
11
10
|
approved_view
|
12
11
|
end
|
13
12
|
|
14
|
-
def
|
13
|
+
def handle_view_denial view, approved_view
|
14
|
+
return if approved_view == view
|
15
|
+
@denied_view = view
|
16
|
+
end
|
17
|
+
|
18
|
+
def assign_view_error_status view
|
19
|
+
return unless focal?
|
20
|
+
return unless (error_code = Card::Format.error_code[view])
|
21
|
+
root.error_status = error_code
|
22
|
+
end
|
23
|
+
|
24
|
+
def check_view view, skip_perms
|
15
25
|
case
|
16
|
-
when
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# permission skipping specified in view definition
|
21
|
-
view
|
22
|
-
when args.delete(:skip_permissions)
|
23
|
-
# permission skipping specified in args
|
24
|
-
view
|
25
|
-
when !card.known? && !tagged(view, :unknown_ok)
|
26
|
-
# handle unknown cards (where view not exempt)
|
27
|
-
view_for_unknown view, args
|
28
|
-
else
|
29
|
-
# run explicit permission checks
|
30
|
-
permitted_view view, args
|
26
|
+
when skip_perms then view
|
27
|
+
when view_always_permitted?(view) then view
|
28
|
+
when unknown_disqualifies_view?(view) then view_for_unknown view
|
29
|
+
else permitted_view view # run explicit permission checks
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
33
|
+
def unknown_disqualifies_view? view
|
34
|
+
# view can't handle unknown cards (and card is unknown)
|
35
|
+
return if tagged view, :unknown_ok
|
36
|
+
card.unknown?
|
37
|
+
end
|
38
|
+
|
39
|
+
def subformats_nested_too_deeply?
|
40
|
+
# prevent recursion
|
41
|
+
@depth >= Card.config.max_depth
|
42
|
+
end
|
43
|
+
|
44
|
+
def view_always_permitted? view
|
45
|
+
Card::Format.perms[view] == :none
|
46
|
+
end
|
47
|
+
|
48
|
+
def permitted_view view
|
49
|
+
if (@denied_task = task_denied_for_view view)
|
44
50
|
Card::Format.denial[view] || :denial
|
45
51
|
else
|
46
52
|
view
|
47
53
|
end
|
48
54
|
end
|
49
55
|
|
50
|
-
def
|
56
|
+
def task_denied_for_view view
|
57
|
+
perms_required = Card::Format.perms[view] || :read
|
58
|
+
if perms_required.is_a? Proc
|
59
|
+
:read unless perms_required.call(self) # read isn't quite right
|
60
|
+
else
|
61
|
+
[perms_required].flatten.find { |task| !ok? task }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def view_for_unknown _view
|
51
66
|
# note: overridden in HTML
|
52
67
|
focal? ? :not_found : :missing
|
53
68
|
end
|
@@ -18,17 +18,19 @@ class Card
|
|
18
18
|
match ? match[:format] : :base
|
19
19
|
end
|
20
20
|
|
21
|
+
def interpret_view_opts view, opts
|
22
|
+
extract_class_vars view, opts
|
23
|
+
extract_view_tags view, opts.delete(:tags)
|
24
|
+
end
|
25
|
+
|
21
26
|
def extract_class_vars view, opts
|
22
|
-
return unless opts.present?
|
23
27
|
[:perms, :error_code, :denial, :closed].each do |varname|
|
24
|
-
|
25
|
-
|
28
|
+
next unless (value = opts.delete varname)
|
29
|
+
send(varname)[view] = value
|
26
30
|
end
|
27
|
-
extract_view_tags view, opts
|
28
31
|
end
|
29
32
|
|
30
|
-
def extract_view_tags view,
|
31
|
-
tags = opts.delete :tags
|
33
|
+
def extract_view_tags view, tags
|
32
34
|
return unless tags
|
33
35
|
Array.wrap(tags).each do |tag|
|
34
36
|
view_tags[view] ||= {}
|
@@ -36,6 +38,10 @@ class Card
|
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
41
|
+
def view_cache_setting_method view
|
42
|
+
"view_#{view}_cache_setting"
|
43
|
+
end
|
44
|
+
|
39
45
|
def new card, opts={}
|
40
46
|
if self != Format
|
41
47
|
super
|
data/lib/card/format/render.rb
CHANGED
@@ -3,110 +3,99 @@ class Card
|
|
3
3
|
# View rendering methods.
|
4
4
|
#
|
5
5
|
module Render
|
6
|
-
DEPRECATED_VIEWS = {
|
7
|
-
view: :open, card: :open, line: :closed, bare: :core, naked: :core
|
8
|
-
}.freeze
|
9
|
-
|
10
6
|
def render view, args={}
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
args = default_render_args view, args
|
16
|
-
with_nest_mode view do
|
17
|
-
Card::Cache::ViewCache.fetch(self, view, args) do
|
18
|
-
method = view_method view, args
|
19
|
-
method.arity.zero? ? method.call : method.call(args)
|
20
|
-
end
|
7
|
+
voo = View.new self, view, args, @voo
|
8
|
+
with_voo voo do
|
9
|
+
voo.process do |final_view, options|
|
10
|
+
final_render final_view, options
|
21
11
|
end
|
22
12
|
end
|
23
13
|
rescue => e
|
24
14
|
rescue_view e, view
|
25
15
|
end
|
26
16
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
17
|
+
def with_voo voo
|
18
|
+
old_voo = @voo
|
19
|
+
@voo = voo
|
20
|
+
result = yield
|
21
|
+
@voo = old_voo
|
22
|
+
result
|
33
23
|
end
|
34
24
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
25
|
+
def view_options_with_defaults view, options
|
26
|
+
default_method = "default_#{view}_args"
|
27
|
+
send default_method, options if respond_to? default_method
|
28
|
+
options
|
38
29
|
end
|
39
30
|
|
40
|
-
def
|
41
|
-
|
42
|
-
rescue
|
43
|
-
args[:unsupported_view] = view
|
44
|
-
method "_view_unsupported_view"
|
31
|
+
def voo
|
32
|
+
@voo
|
45
33
|
end
|
46
34
|
|
47
|
-
def
|
48
|
-
|
49
|
-
|
50
|
-
|
35
|
+
def show_view? view, default_viz=:show
|
36
|
+
voo.process_visibility_options # trigger viz processing
|
37
|
+
visibility = voo.viz_hash[view] || default_viz
|
38
|
+
visibility == :show
|
51
39
|
end
|
52
40
|
|
53
|
-
def
|
54
|
-
|
41
|
+
def final_render view, args
|
42
|
+
current_view(view) do
|
43
|
+
with_nest_mode view do
|
44
|
+
method = view_method view
|
45
|
+
method.arity.zero? ? method.call : method.call(args)
|
46
|
+
end
|
47
|
+
end
|
55
48
|
end
|
56
49
|
|
57
|
-
|
58
|
-
|
50
|
+
# setting (:alway, :never, :nested) designated in view definition
|
51
|
+
def view_cache_setting view
|
52
|
+
setting_method = self.class.view_cache_setting_method view
|
53
|
+
respond_to?(setting_method) ? send(setting_method) : :standard
|
59
54
|
end
|
60
55
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
else configured_visibility view, args, code_config
|
56
|
+
def stub_render cached_content
|
57
|
+
return cached_content unless cached_content.is_a? String
|
58
|
+
expand_stubs cached_content do |stub_hash|
|
59
|
+
prepare_stub_nest(stub_hash) do |stub_card, mode, options|
|
60
|
+
with_nest_mode(mode) { nest stub_card, options }
|
61
|
+
end
|
68
62
|
end
|
69
63
|
end
|
70
64
|
|
71
|
-
def
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
else
|
77
|
-
default_viz = args.delete :default_visibility
|
78
|
-
default_viz ? default_viz == :show : true
|
65
|
+
def prepare_stub_nest stub_hash
|
66
|
+
stub_card = Card.fetch_from_cast stub_hash[:cast]
|
67
|
+
stub_options = stub_hash[:options]
|
68
|
+
if stub_card.key.present? && stub_card.key == card.key
|
69
|
+
stub_options[:nest_name] ||= "_self"
|
79
70
|
end
|
71
|
+
yield stub_card, stub_hash[:mode], stub_options
|
80
72
|
end
|
81
73
|
|
82
|
-
def
|
83
|
-
|
84
|
-
|
74
|
+
def expand_stubs cached_content
|
75
|
+
conto = Card::Content.new cached_content, self, chunk_list: :stub
|
76
|
+
conto.process_each_chunk do |stub_hash|
|
77
|
+
yield(stub_hash).to_s
|
85
78
|
end
|
86
|
-
|
79
|
+
conto.to_s
|
87
80
|
end
|
88
81
|
|
89
|
-
def
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end.map { |view| canonicalize_view view }
|
82
|
+
def api_render match, opts
|
83
|
+
view = match[3] ? match[4] : opts.shift
|
84
|
+
args = opts[0] ? opts.shift.clone : {}
|
85
|
+
optional_render_args(args, opts) if match[2]
|
86
|
+
args[:skip_perms] = true if match[1]
|
87
|
+
render view, args
|
96
88
|
end
|
97
89
|
|
98
|
-
def
|
99
|
-
args =
|
100
|
-
|
101
|
-
when nil then {}
|
102
|
-
when Hash then a.clone
|
103
|
-
when Array then a[0].merge a[1]
|
104
|
-
else raise Card::Error, "bad render args: #{a}"
|
105
|
-
end
|
90
|
+
def optional_render_args args, opts
|
91
|
+
args[:optional] = opts.shift || :show
|
92
|
+
end
|
106
93
|
|
107
|
-
|
108
|
-
|
109
|
-
|
94
|
+
def view_method view
|
95
|
+
method "_view_#{view}"
|
96
|
+
rescue
|
97
|
+
voo.unsupported_view = view
|
98
|
+
method "_view_unsupported_view"
|
110
99
|
end
|
111
100
|
|
112
101
|
def current_view view
|