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