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
@@ -11,16 +11,27 @@ module ClassMethods
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize args={}
|
14
|
-
args["name"] = args["name"]
|
15
|
-
args["db_content"] = args.delete
|
16
|
-
@supercard = args.delete "supercard" # must come before name
|
14
|
+
args["name"] = initial_name args["name"]
|
15
|
+
args["db_content"] = args.delete "content" if args["content"]
|
16
|
+
@supercard = args.delete "supercard" # must come before name=
|
17
|
+
|
18
|
+
handle_skip_args args do
|
19
|
+
super args # ActiveRecord #initialize
|
20
|
+
end
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def handle_skip_args args
|
17
25
|
skip_modules = args.delete "skip_modules"
|
18
26
|
skip_type_lookup = args["skip_type_lookup"]
|
19
|
-
|
20
|
-
super args # ActiveRecord #initialize
|
27
|
+
yield
|
21
28
|
self.type_id = get_type_id_from_structure if !type_id && !skip_type_lookup
|
22
29
|
include_set_modules unless skip_modules
|
23
|
-
|
30
|
+
end
|
31
|
+
|
32
|
+
def initial_name name
|
33
|
+
name = Card.compose_mark name if name.is_a? Array
|
34
|
+
name.to_s
|
24
35
|
end
|
25
36
|
|
26
37
|
def include_set_modules
|
data/mod/core/set/all/name.rb
CHANGED
@@ -71,7 +71,7 @@ def cardname
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def autoname name
|
74
|
-
if Card.exists? name
|
74
|
+
if Card.exists?(name) || ActManager.include?(name)
|
75
75
|
autoname name.next
|
76
76
|
else
|
77
77
|
name
|
@@ -213,8 +213,7 @@ event :set_autoname, :prepare_to_validate, on: :create do
|
|
213
213
|
end
|
214
214
|
|
215
215
|
event :set_name, :store, changed: :name do
|
216
|
-
|
217
|
-
Card.expire name_was
|
216
|
+
expire
|
218
217
|
end
|
219
218
|
|
220
219
|
event :set_left_and_right, :store,
|
@@ -46,17 +46,21 @@ def ok! action, opts={}
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def who_can action
|
49
|
-
# warn "who_can[#{name}] #{(prc=permission_rule_card(action)).inspect},
|
50
|
-
# #{prc.first.item_cards.map(&:id)}" if action == :update
|
51
49
|
permission_rule_card(action).item_cards.map(&:id)
|
52
50
|
end
|
53
51
|
|
52
|
+
def anyone_can? action
|
53
|
+
who_can(action).include? Card::AnyoneID
|
54
|
+
end
|
55
|
+
|
54
56
|
def permission_rule_id_and_class action
|
55
57
|
direct_rule_id = rule_card_id action
|
56
58
|
require_permission_rule! direct_rule_id, action
|
57
59
|
direct_rule = Card.fetch direct_rule_id, skip_modules: true
|
58
|
-
[
|
59
|
-
|
60
|
+
[
|
61
|
+
applicable_permission_rule_id(direct_rule, action),
|
62
|
+
direct_rule.rule_class_name
|
63
|
+
]
|
60
64
|
end
|
61
65
|
|
62
66
|
def applicable_permission_rule_id direct_rule, action
|
@@ -210,8 +214,7 @@ event :update_read_rule do
|
|
210
214
|
self.read_rule_class = rclass
|
211
215
|
Card.where(id: id).update_all read_rule_id: rcard_id,
|
212
216
|
read_rule_class: rclass
|
213
|
-
|
214
|
-
|
217
|
+
expire :hard
|
215
218
|
update_field_read_rules
|
216
219
|
end
|
217
220
|
end
|
@@ -245,14 +248,19 @@ def track_permission_errors
|
|
245
248
|
end
|
246
249
|
|
247
250
|
def recaptcha_on?
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
!Auth.
|
252
|
-
!Auth.
|
251
|
+
consider_recaptcha? &&
|
252
|
+
have_recaptcha_keys? &&
|
253
|
+
Env[:controller] &&
|
254
|
+
!Auth.signed_in? &&
|
255
|
+
!Auth.needs_setup? &&
|
256
|
+
!Auth.always_ok? &&
|
253
257
|
Card.toggle(rule(:captcha))
|
254
258
|
end
|
255
259
|
|
260
|
+
def consider_recaptcha?
|
261
|
+
true
|
262
|
+
end
|
263
|
+
|
256
264
|
def have_recaptcha_keys?
|
257
265
|
@@have_recaptcha_keys =
|
258
266
|
if defined?(@@have_recaptcha_keys)
|
data/mod/core/set/all/states.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
|
+
def state
|
2
|
+
case
|
3
|
+
when !known? then :unknown
|
4
|
+
when !ok?(:read) then :unknown # anti-fishing
|
5
|
+
when real? then :real
|
6
|
+
when virtual? then :virtual
|
7
|
+
else :wtf
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
1
11
|
def new_card?
|
2
|
-
new_record? ||
|
3
|
-
|
12
|
+
new_record? || # not yet in db (from ActiveRecord)
|
13
|
+
!@from_trash.nil? # in process of restoration from trash
|
4
14
|
end
|
5
15
|
alias_method :new?, :new_card?
|
6
16
|
|
data/mod/core/set/all/trash.rb
CHANGED
data/mod/core/set/all/type.rb
CHANGED
data/mod/core/set/all/utils.rb
CHANGED
@@ -10,10 +10,11 @@ module ClassMethods
|
|
10
10
|
def merge_list attribs, opts={}
|
11
11
|
unmerged = []
|
12
12
|
attribs.each do |row|
|
13
|
-
|
14
|
-
|
13
|
+
if merge row["name"], row, opts
|
14
|
+
Rails.logger.info "merged #{row['name']}"
|
15
|
+
else
|
16
|
+
unmerged.push row
|
15
17
|
end
|
16
|
-
unmerged.push row unless result == true
|
17
18
|
end
|
18
19
|
|
19
20
|
if unmerged.empty?
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
describe Card::Content::Chunk::EscapedLiteral, "literal chunk tests" do
|
4
|
-
it "
|
4
|
+
it "handles escaped link" do
|
5
5
|
expect(render_content('write this: \[[text]]'))
|
6
6
|
.to eq("write this: <span>[</span>[text]]")
|
7
7
|
end
|
8
8
|
|
9
|
-
it "
|
9
|
+
it "handles escaped nest" do
|
10
10
|
expect(render_content('write this: \{{cardname}}'))
|
11
11
|
.to eq("write this: <span>{</span>{cardname}}")
|
12
12
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
describe Card::Content::Chunk::URI, "URI chunk tests" do
|
4
|
-
it "
|
4
|
+
it "test_non_matches" do
|
5
5
|
no_match_uri "There is no URI here"
|
6
6
|
no_match_uri "One gemstone is the garnet:reddish in colour, like ruby"
|
7
7
|
end
|
@@ -45,7 +45,7 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
45
45
|
text: "example.com",
|
46
46
|
link_text: "http://example.com"
|
47
47
|
end
|
48
|
-
it '
|
48
|
+
it 'matches "unusual" base domain (was a bug in an early version)' do
|
49
49
|
match_http_uri "http://example.com.au/",
|
50
50
|
host: "example.com.au"
|
51
51
|
end
|
@@ -104,24 +104,24 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
104
104
|
link_text: "irc://irc.freenode.net#recentchangescamp"
|
105
105
|
end
|
106
106
|
|
107
|
-
it "
|
107
|
+
it "sees HTTPS" do
|
108
108
|
match_uri "https://www.example.com",
|
109
109
|
scheme: "https", host: "www.example.com", port: 443,
|
110
110
|
path: "", query: nil
|
111
111
|
end
|
112
|
-
it "
|
112
|
+
it "sees FTP" do
|
113
113
|
match_uri "ftp://www.example.com",
|
114
114
|
scheme: "ftp", host: "www.example.com", port: 21,
|
115
115
|
path: "", query: nil
|
116
116
|
end
|
117
|
-
it "
|
117
|
+
it "handles mailto:" do
|
118
118
|
match_uri "mailto:jdoe123@example.com",
|
119
119
|
scheme: "mailto", host: nil, port: nil,
|
120
120
|
path: nil, query: nil,
|
121
121
|
to: "jdoe123@example.com"
|
122
122
|
end
|
123
123
|
|
124
|
-
it "
|
124
|
+
it "runs more basic cases" do
|
125
125
|
# from *css (with () around the URI)
|
126
126
|
# so, now this doesn't even match because I fixed the suspiciou* stuff
|
127
127
|
no_match_uri(
|
@@ -147,23 +147,23 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
147
147
|
path: "/default.aspx", query: "scid=kb;en-us;234562"
|
148
148
|
end
|
149
149
|
|
150
|
-
it "
|
150
|
+
it "test_email_uri" do
|
151
151
|
match_uri "mail@example.com",
|
152
152
|
to: "mail@example.com", host: nil,
|
153
153
|
text: "mail@example.com",
|
154
154
|
link_text: "mailto:mail@example.com"
|
155
155
|
end
|
156
156
|
|
157
|
-
it "
|
157
|
+
it "test_non_email" do
|
158
158
|
# The @ is part of the normal text, but 'example.com' is marked up.
|
159
159
|
match_uri "Not an email: @example.com", uri: "http://example.com"
|
160
160
|
end
|
161
161
|
|
162
|
-
it "
|
162
|
+
it "test_textile_image" do
|
163
163
|
no_match_uri "This !http://hobix.com/sample.jpg! is a Textile image link."
|
164
164
|
end
|
165
165
|
|
166
|
-
it "
|
166
|
+
it "test_textile_link" do
|
167
167
|
no_match_uri(
|
168
168
|
'This "hobix (hobix)":http://hobix.com/sample.jpg is a Textile link.'
|
169
169
|
)
|
@@ -172,12 +172,12 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
172
172
|
link_text: "http://hobix.com/sample.jpg"
|
173
173
|
end
|
174
174
|
|
175
|
-
it "
|
175
|
+
it "test_inline_html" do
|
176
176
|
no_match_uri "<img src='http://hobix.com/sample.jpg'/>"
|
177
177
|
no_match_uri '<IMG SRC="http://hobix.com/sample.jpg">'
|
178
178
|
end
|
179
179
|
|
180
|
-
it "
|
180
|
+
it "test_non_uri" do
|
181
181
|
# "so" is a valid country code; "libproxy.so" is a valid url
|
182
182
|
match_uri "libproxy.so", host: "libproxy.so",
|
183
183
|
text: "libproxy.so",
|
@@ -195,7 +195,7 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
195
195
|
no_match_uri "file.ps"
|
196
196
|
end
|
197
197
|
|
198
|
-
it "
|
198
|
+
it "test_uri_in_text" do
|
199
199
|
match_uri "Go to: http://www.example.com/",
|
200
200
|
host: "www.example.com", path: "/"
|
201
201
|
match_uri "http://www.example.com/ is a link.", host: "www.example.com"
|
@@ -208,7 +208,7 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
208
208
|
no_match_uri '"link":http://fake.link.com.'
|
209
209
|
end
|
210
210
|
|
211
|
-
it "
|
211
|
+
it "test_uri_in_parentheses" do
|
212
212
|
match_uri "URI (http://brackets.com.de) in brackets",
|
213
213
|
host: "brackets.com.de"
|
214
214
|
match_uri "because (as shown at research.net) the results",
|
@@ -218,7 +218,7 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
218
218
|
query: "WhatIsWiki"
|
219
219
|
end
|
220
220
|
|
221
|
-
it "
|
221
|
+
it "test_uri_list_item" do
|
222
222
|
match_chunk(
|
223
223
|
Card::Content::Chunk::URI,
|
224
224
|
"* http://www.btinternet.com/~mail2minh/SonyEricssonP80xPlatform.sis",
|
@@ -226,7 +226,7 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
226
226
|
)
|
227
227
|
end
|
228
228
|
|
229
|
-
it "
|
229
|
+
it "test_interesting_uri_with__comma" do
|
230
230
|
# Counter-intuitively, this URL matches, but the query part includes the
|
231
231
|
# trailing comma.
|
232
232
|
# It has no way to know that the query does not include the comma.
|
@@ -241,7 +241,7 @@ describe Card::Content::Chunk::URI, "URI chunk tests" do
|
|
241
241
|
end
|
242
242
|
|
243
243
|
describe Card::Content::Chunk::URI, "URI chunk tests" do
|
244
|
-
it "
|
244
|
+
it "test_local_urls" do
|
245
245
|
# normal
|
246
246
|
match_http_uri "http://perforce:8001/toto.html",
|
247
247
|
host: "perforce", port: 8001
|
@@ -3,18 +3,16 @@
|
|
3
3
|
describe Card::Format::HtmlFormat do
|
4
4
|
describe "views" do
|
5
5
|
it "content" do
|
6
|
-
result = render_card(:content, name: "A+B")
|
7
6
|
assert_view_select(
|
8
|
-
|
9
|
-
'div[class="card-slot content-view
|
10
|
-
'
|
7
|
+
render_card(:content, name: "A+B"),
|
8
|
+
'div[class="card-slot content-view ALL ALL_PLUS TYPE-basic '\
|
9
|
+
'RIGHT-b TYPE_PLUS_RIGHT-basic-b SELF-a-b card-content"]'
|
11
10
|
)
|
12
11
|
end
|
13
12
|
|
14
13
|
it "nests in multi edit" do
|
15
14
|
c = Card.new name: "ABook", type: "Book"
|
16
|
-
rendered = c.format.render
|
17
|
-
|
15
|
+
rendered = c.format.render :edit
|
18
16
|
assert_view_select rendered, "fieldset" do
|
19
17
|
assert_select 'div[class~="prosemirror-editor"]' do
|
20
18
|
assert_select "input[name=?]", "card[subcards][+illustrator][content]"
|
@@ -65,8 +63,8 @@ describe Card::Format::HtmlFormat do
|
|
65
63
|
it "renders card content" do
|
66
64
|
assert_view_select(
|
67
65
|
@simple_page,
|
68
|
-
'div[class="card-body
|
69
|
-
'TYPE-basic RIGHT-b TYPE_PLUS_RIGHT-basic-b SELF-a-b"]',
|
66
|
+
'div[class="card-body card-content ALL ALL_PLUS ' \
|
67
|
+
'TYPE-basic RIGHT-b TYPE_PLUS_RIGHT-basic-b SELF-a-b panel-body"]',
|
70
68
|
"AlphaBeta"
|
71
69
|
)
|
72
70
|
end
|
@@ -93,14 +91,14 @@ describe Card::Format::HtmlFormat do
|
|
93
91
|
# warn "lay #{@layout_card.inspect}, #{@main_card.inspect}"
|
94
92
|
end
|
95
93
|
|
96
|
-
# it "
|
94
|
+
# it "defaults to core view when in layout mode" do
|
97
95
|
# @layout_card.content = "Hi {{A}}"
|
98
96
|
# Card::Auth.as_bot { @layout_card.save }
|
99
97
|
#
|
100
98
|
# expect(@main_card.format.render(:layout)).to match('Hi Alpha')
|
101
99
|
# end
|
102
100
|
|
103
|
-
# it "
|
101
|
+
# it "defaults to open view for main card" do
|
104
102
|
# @layout_card.content='Open up {{_main}}'
|
105
103
|
# Card::Auth.as_bot { @layout_card.save }
|
106
104
|
#
|
@@ -119,7 +117,7 @@ describe Card::Format::HtmlFormat do
|
|
119
117
|
expect(result).not_to match(/card-header/)
|
120
118
|
end
|
121
119
|
|
122
|
-
it "
|
120
|
+
it "does not recurse" do
|
123
121
|
@layout_card.content = "Mainly {{_main|core}}"
|
124
122
|
Card::Auth.as_bot { @layout_card.save }
|
125
123
|
|
@@ -141,8 +139,8 @@ describe Card::Format::HtmlFormat do
|
|
141
139
|
Card.create name: "outer space", content: "{{_main|name}}"
|
142
140
|
end
|
143
141
|
|
144
|
-
expect(@
|
145
|
-
"Joe User\n" \
|
142
|
+
expect(@main_card.format.render(:layout)).to eq(
|
143
|
+
'<div id="main">Joe User</div>' + "\n" \
|
146
144
|
'<div class="modal fade" role="dialog" id="modal-main-slot">' \
|
147
145
|
'<div class="modal-dialog"><div class="modal-content">' \
|
148
146
|
"</div></div></div>"
|
@@ -8,11 +8,11 @@
|
|
8
8
|
# end
|
9
9
|
# end
|
10
10
|
#
|
11
|
-
# it "
|
11
|
+
# it "has updates" do
|
12
12
|
# described_class::Updates.should === @c.updates
|
13
13
|
# end
|
14
14
|
#
|
15
|
-
# it "
|
15
|
+
# it "tracks changes" do
|
16
16
|
# @c.name.should == 'New Card'
|
17
17
|
# @c.name = 'Old Card'
|
18
18
|
# @c.name.should == 'Old Card'
|
@@ -72,29 +72,6 @@ describe Card::Set::All::Collection do
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
describe "#map_nests" do
|
76
|
-
before do
|
77
|
-
Card::Auth.as_bot do
|
78
|
-
@list = Card.create!(
|
79
|
-
name: "mixed list",
|
80
|
-
content: "[[A]]\n{{B}}\n[[C|link C]]\n{{D|name;title:nest D}}"
|
81
|
-
)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
it "handles links and nest arguments" do
|
85
|
-
result = @list.format.map_references_with_args do |name, args|
|
86
|
-
[name, args]
|
87
|
-
end
|
88
|
-
expect(result).to eq [
|
89
|
-
["A", { view: :closed }],
|
90
|
-
["B", { view: :closed, inc_name: "B", inc_syntax: "B" }],
|
91
|
-
["C", { view: :closed, title: "link C" }],
|
92
|
-
["D", { view: "name", title: "nest D", inc_name: "D",
|
93
|
-
inc_syntax: "D|name;title:nest D" }]
|
94
|
-
]
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
75
|
describe "tabs view" do
|
99
76
|
it "renders tab panel" do
|
100
77
|
tabs = render_card :tabs, content: "[[A]]\n[[B]]\n[[C]]", type: "pointer"
|
@@ -138,6 +115,26 @@ describe Card::Set::All::Collection do
|
|
138
115
|
assert_select %(li > a[data-toggle="tab"][data-url="#{path}"])
|
139
116
|
end
|
140
117
|
end
|
118
|
+
|
119
|
+
it "handles contextual titles" do
|
120
|
+
create name: "tabs card", type: "pointer",
|
121
|
+
content: "[[A+B]]\n[[One+Two+Three]]\n[[Four+One+Five]]"
|
122
|
+
tabs = render_content "{{tabs card|tabs|closed;title:_left}}"
|
123
|
+
assert_view_select tabs, "div[role=tabpanel]" do
|
124
|
+
assert_select 'li > a[data-toggle="tab"]', "A"
|
125
|
+
assert_select 'li > a[data-toggle="tab"]', "One+Two"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
it "handles contextual titles" do
|
130
|
+
create name: "tabs card", content: "[[A+B]]\n[[One+Two+Three]]\n[[Four+One+Five]]", type: "pointer"
|
131
|
+
tabs = render_content "{{tabs card|tabs|closed;title:_left;show:title_link}}"
|
132
|
+
assert_view_select tabs, "div[role=tabpanel]" do
|
133
|
+
assert_select 'li > a[data-toggle="tab"]', "A"
|
134
|
+
assert_select 'li > a[data-toggle="tab"]', "One+Two"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
141
138
|
it "handles nests as items" do
|
142
139
|
tabs = render_card :tabs, name: "tab_test", type_id: Card::PlainTextID,
|
143
140
|
content: "{{A|type;title:my tab title}}"
|
@@ -150,7 +147,7 @@ describe Card::Set::All::Collection do
|
|
150
147
|
|
151
148
|
it "works with search cards" do
|
152
149
|
Card.create type: "Search", name: "Asearch", content: '{"type":"User"}'
|
153
|
-
tabs = render_content("{{Asearch|tabs
|
150
|
+
tabs = render_content("{{Asearch|tabs|name}}")
|
154
151
|
assert_view_select tabs, "div[role=tabpanel]" do
|
155
152
|
assert_select(
|
156
153
|
'li > a[data-toggle=tab][href="#asearch-joe_admin"] span.card-title',
|