card 1.101.4 → 1.101.5
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/config/i18n-tasks.yml +0 -5
- data/config/initializers/01_core_extensions/array.rb +2 -1
- data/config/initializers/01_core_extensions/hash.rb +1 -0
- data/config/initializers/01_core_extensions/object.rb +15 -11
- data/config/initializers/02_patches/active_job.rb +1 -1
- data/config/initializers/02_patches/active_record.rb +1 -3
- data/config/initializers/02_patches/better_errors.rb +1 -3
- data/config/initializers/02_patches/kaminari.rb +2 -2
- data/config/initializers/deck_config.rb +1 -1
- data/config/initializers/inflections.rb +1 -0
- data/config/initializers/internationalization.rb +23 -21
- data/config/initializers/mime_types.rb +1 -0
- data/config/initializers/notification.rb +1 -0
- data/config/initializers/patches.rb +6 -5
- data/config/locales/en.yml +10 -16
- data/db/migrate/20110511221913_require_earlier_migrations.rb +1 -0
- data/db/migrate/20121111025347_require_1_10_migrations.rb +1 -0
- data/db/migrate/20121118114000_split_link_type.rb +1 -0
- data/db/migrate/20121118115000_update_link_type.rb +1 -0
- data/db/migrate/20130106052640_table_cleanup.rb +2 -2
- data/db/migrate/20130109015336_trunk_left.rb +1 -0
- data/db/migrate/20130411210957_update_codenames.rb +1 -0
- data/db/migrate/20140822073704_create_new_revision_tables.rb +1 -0
- data/db/migrate/20141001105348_move_revisions_to_actions.rb +9 -3
- data/db/migrate/20141216053032_better_index_names.rb +9 -6
- data/db/migrate/20170908114442_create_delayed_jobs.rb +1 -1
- data/db/migrate/20170908114452_increase_text_size_for_delayed_jobs.rb +1 -1
- data/db/migrate/20180514152037_add_card_virtuals_table.rb +1 -1
- data/db/migrate_core_cards/20120611203506_rails_inflection_updates.rb +2 -1
- data/db/migrate_core_cards/20130411191151_renaming_for_menu.rb +9 -9
- data/db/migrate_core_cards/20130419215612_import_help_text.rb +3 -2
- data/db/migrate_core_cards/20130823192433_add_style_cards.rb +5 -5
- data/db/migrate_core_cards/20130910183318_move_styles_to_content.rb +3 -2
- data/db/migrate_core_cards/20130920291703_update_stylesheets.rb +2 -4
- data/db/migrate_core_cards/20131016172445_common_css_patch.rb +1 -3
- data/db/migrate_core_cards/20140110193325_reset_account_request_type.rb +1 -3
- data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +12 -8
- data/db/migrate_core_cards/20140317035504_account_requests_to_signups.rb +2 -4
- data/db/migrate_core_cards/20140512155840_add_script_cards.rb +16 -9
- data/db/migrate_core_cards/20140629222005_add_email_cards.rb +19 -11
- data/db/migrate_core_cards/20140725180118_config_card_updates.rb +1 -1
- data/db/migrate_core_cards/20141115034214_config_descriptions_etc.rb +1 -1
- data/db/migrate_core_cards/20141119001955_make_symlinks_relative.rb +1 -1
- data/db/migrate_core_cards/20141204061304_watchers_to_following.rb +2 -0
- data/db/migrate_core_cards/20141216155251_add_more_following_cards.rb +4 -2
- data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +1 -1
- data/db/migrate_core_cards/20150220134731_following_to_follow_rule.rb +3 -4
- data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +8 -4
- data/db/migrate_core_cards/20150326205655_bootswatch_themes.rb +14 -7
- data/db/migrate_core_cards/20150429090551_search_card_context.rb +6 -4
- data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +4 -2
- data/db/migrate_core_cards/20150510031118_fix_skin_codenames.rb +2 -1
- data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +3 -3
- data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +2 -1
- data/db/migrate_core_cards/20150610180019_add_recaptcha_key_and_admin_info_cards.rb +4 -3
- data/db/migrate_core_cards/20150724123438_update_file_and_image_cards.rb +6 -2
- data/db/migrate_core_cards/20150807205221_create_references_for_search_cards.rb +1 -1
- data/db/migrate_core_cards/20150824135418_update_file_history.rb +2 -0
- data/db/migrate_core_cards/20160804112510_reorganize_scripts.rb +1 -1
- data/db/migrate_core_cards/20160811115836_rename_stats_to_admin.rb +1 -0
- data/db/migrate_core_cards/20160914132636_fix_mod_files.rb +2 -0
- data/db/migrate_core_cards/20161102202156_tweak_recaptcha_setting_cards.rb +6 -6
- data/db/migrate_core_cards/20161103154836_update_keys.rb +2 -1
- data/db/migrate_core_cards/20170209132834_email_test_context.rb +2 -0
- data/db/migrate_core_cards/20170314175313_add_notification_event_card.rb +3 -3
- data/db/migrate_core_cards/20170515101262_add_advanced_edit_cards.rb +1 -1
- data/db/migrate_core_cards/20170608200649_add_input_options_codename.rb +1 -1
- data/db/migrate_core_cards/20180712042655_head_rule.rb +3 -4
- data/db/migrate_core_cards/20180905061537_migrate_layouts.rb +4 -4
- data/db/migrate_core_cards/20181120200937_update_layout.rb +1 -1
- data/db/migrate_core_cards/20190320091257_upgrade_recaptcha_to_v3.rb +7 -7
- data/db/migrate_core_cards/20190424100531_update_credit_image.rb +1 -0
- data/db/migrate_core_cards/20190502130029_add_shark_and_help_desk_role.rb +15 -14
- data/db/migrate_core_cards/20190503122739_update_pristine_data.rb +1 -1
- data/db/migrate_core_cards/20190625153616_pointer_overhaul.rb +9 -5
- data/db/migrate_core_cards/20190718140126_add_guides.rb +3 -3
- data/db/migrate_core_cards/20190822093633_move_help_text_to_code.rb +1 -2
- data/db/migrate_core_cards/20190823220018_cleanup_for_decko_1_0.rb +1 -1
- data/db/migrate_core_cards/20190829093961_cardtype_grouping.rb +7 -7
- data/db/migrate_core_cards/20190902193208_input_type.rb +1 -3
- data/db/migrate_core_cards/20190909104250_add_cardtype_input_types.rb +2 -2
- data/db/migrate_core_cards/20191028135243_add_link_editor_to_tiny_mce_config.rb +1 -0
- data/db/migrate_core_cards/20191115160748_history_cleanup.rb +0 -1
- data/db/migrate_core_cards/20191118145629_codename_fixes.rb +1 -2
- data/db/migrate_core_cards/20200821231558_add_nest_list_type.rb +1 -1
- data/db/seed/new/card_actions.yml +2153 -2145
- data/db/seed/new/card_acts.yml +3 -3
- data/db/seed/new/card_references.yml +900 -858
- data/db/seed/new/cards.yml +4869 -4848
- data/db/seed/new/schema_migrations_deck_cards.yml +2 -0
- data/db/seed/test/fixtures/card_actions.yml +3563 -3547
- data/db/seed/test/fixtures/card_acts.yml +675 -675
- data/db/seed/test/fixtures/card_changes.yml +103 -103
- data/db/seed/test/fixtures/card_references.yml +2165 -2123
- data/db/seed/test/fixtures/cards.yml +7862 -7751
- data/db/seed/test/fixtures/schema_migrations_deck_cards.yml +2 -0
- data/db/test_seed.rb +33 -34
- data/lib/card.rb +1 -0
- data/lib/card/auth/token.rb +2 -2
- data/lib/card/cache.rb +2 -1
- data/lib/card/cache/all.rb +5 -0
- data/lib/card/cache/card_class.rb +3 -0
- data/lib/card/codename.rb +1 -1
- data/lib/card/content.rb +4 -8
- data/lib/card/content/chunk.rb +1 -1
- data/lib/card/content/clean.rb +4 -3
- data/lib/card/content/diff.rb +3 -2
- data/lib/card/content/diff/l_c_s/processor.rb +1 -1
- data/lib/card/content/diff/result.rb +1 -0
- data/lib/card/content/parser.rb +2 -2
- data/lib/card/content/truncate.rb +6 -6
- data/lib/card/director.rb +1 -1
- data/lib/card/director/all.rb +2 -2
- data/lib/card/director/card_methods.rb +1 -0
- data/lib/card/director/event_delay.rb +4 -6
- data/lib/card/director/run.rb +2 -0
- data/lib/card/director/stages.rb +3 -2
- data/lib/card/env/location.rb +4 -3
- data/lib/card/fetch.rb +7 -4
- data/lib/card/fetch/all.rb +1 -0
- data/lib/card/fetch/card_class.rb +35 -27
- data/lib/card/fetch/results.rb +9 -0
- data/lib/card/fetch/retrieve.rb +2 -0
- data/lib/card/fetch/store.rb +1 -0
- data/lib/card/format/content.rb +1 -3
- data/lib/card/format/error.rb +6 -1
- data/lib/card/format/method_delegation.rb +10 -2
- data/lib/card/format/nest.rb +2 -1
- data/lib/card/format/nest/fetch.rb +2 -0
- data/lib/card/format/nesting/mode.rb +1 -1
- data/lib/card/format/nesting/subformat.rb +2 -1
- data/lib/card/format/render.rb +2 -2
- data/lib/card/format/wrapper.rb +1 -1
- data/lib/card/lexicon.rb +3 -2
- data/lib/card/mark.rb +17 -15
- data/lib/card/model/save_helper.rb +3 -3
- data/lib/card/name.rb +10 -9
- data/lib/card/name/all.rb +3 -0
- data/lib/card/name/all/descendants.rb +3 -4
- data/lib/card/name/card_class.rb +2 -0
- data/lib/card/name/fields_and_traits.rb +4 -2
- data/lib/card/name/name_variants.rb +0 -1
- data/lib/card/query.rb +17 -17
- data/lib/card/query/card_query/interpretation.rb +1 -0
- data/lib/card/query/card_query/match_attributes.rb +2 -1
- data/lib/card/query/card_query/normalization.rb +1 -0
- data/lib/card/query/card_query/reference_attributes.rb +1 -1
- data/lib/card/query/join.rb +1 -1
- data/lib/card/query/value/match_value.rb +1 -0
- data/lib/card/reference/all.rb +7 -2
- data/lib/card/rule/all.rb +1 -0
- data/lib/card/rule/cache.rb +2 -0
- data/lib/card/set/advanced_api.rb +3 -2
- data/lib/card/set/event.rb +2 -2
- data/lib/card/set/event/all.rb +6 -0
- data/lib/card/set/event/delayed_event.rb +6 -6
- data/lib/card/set/event/options.rb +1 -0
- data/lib/card/set/format/abstract_format/view_definition.rb +1 -0
- data/lib/card/set/format/abstract_format/view_opts.rb +1 -0
- data/lib/card/set/i18n_scope.rb +4 -2
- data/lib/card/set/inheritance.rb +0 -1
- data/lib/card/set/loader.rb +0 -2
- data/lib/card/set/pattern/base.rb +3 -2
- data/lib/card/set/pattern/class_methods.rb +2 -2
- data/lib/card/set/required_field.rb +4 -1
- data/lib/card/setting.rb +3 -0
- data/lib/card/subcards.rb +3 -4
- data/lib/card/tasks/card/file_card_creator/abstract_file_card/ruby_file.rb +1 -1
- data/lib/card/tasks/card/file_card_creator/output_helper.rb +2 -4
- data/lib/card/tasks/card/migrate.rake +2 -2
- data/lib/card/view/cache.rb +6 -8
- data/lib/card/view/cache/cache_action.rb +1 -2
- data/lib/card/view/cache/stub.rb +1 -1
- data/lib/card/view/options.rb +3 -3
- data/lib/card/view/permission.rb +1 -0
- data/lib/cardio.rb +1 -1
- data/lib/cardio/migration.rb +1 -1
- data/lib/cardio/migration/deck_structure.rb +2 -4
- data/lib/cardio/migration/import.rb +2 -2
- data/lib/cardio/migration/import/import_data.rb +1 -0
- data/lib/cardio/mod.rb +1 -0
- data/lib/cardio/mod/load_strategy.rb +2 -4
- data/lib/cardio/mod/loader/set_loader.rb +2 -1
- data/lib/cardio/mod/module_template.rb +1 -0
- data/lib/cardio/modfiles.rb +2 -4
- data/lib/cardio/schema.rb +2 -4
- data/lib/cardio/utils.rb +1 -0
- data/lib/generators/card/format/format_generator.rb +1 -1
- data/lib/generators/card/migration/migration_generator.rb +2 -1
- data/lib/generators/card/mod/mod_generator.rb +3 -2
- data/lib/generators/card/set/set_generator.rb +3 -3
- data/lib/generators/card/template/template_generator.rb +1 -1
- data/mod/admin/set/self/admin.rb +6 -3
- data/mod/admin/set/self/trash.rb +1 -0
- data/mod/admin/spec/set/self/admin_spec.rb +4 -4
- data/mod/core/set/all/abort.rb +5 -5
- data/mod/core/set/all/assign_attributes.rb +5 -8
- data/mod/core/set/all/codename.rb +1 -0
- data/mod/core/set/all/collection.rb +4 -6
- data/mod/core/set/all/content.rb +3 -2
- data/mod/core/set/all/contextual_content.rb +2 -4
- data/mod/core/set/all/name_events.rb +13 -6
- data/mod/core/set/all/reference_events.rb +2 -0
- data/mod/core/set/all/states.rb +3 -3
- data/mod/core/set/all/subcards.rb +1 -1
- data/mod/core/set/all/trash.rb +5 -1
- data/mod/core/set/all/type.rb +4 -2
- data/mod/core/set/all/utils.rb +1 -1
- data/mod/core/spec/set/all/assign_attributes_spec.rb +10 -9
- data/mod/core/spec/set/all/clean_me_spec.rb +19 -4
- data/mod/core/spec/set/all/collection_spec.rb +1 -1
- data/mod/core/spec/set/all/export_spec.rb +1 -0
- data/mod/core/spec/set/all/initialize_spec.rb +11 -11
- metadata +4 -4
@@ -10,7 +10,7 @@ class ImportBootstrapLayout < Cardio::Migration::Core
|
|
10
10
|
end
|
11
11
|
|
12
12
|
import_json "bootstrap_layout.json" # , pristine: true, output_file: nil
|
13
|
-
if layout
|
13
|
+
if layout&.pristine? && (all = Card[:all])
|
14
14
|
layout_rule_card = all.fetch :layout
|
15
15
|
style_rule_card = all.fetch :style
|
16
16
|
if layout_rule_card.pristine? && style_rule_card.pristine?
|
@@ -2,13 +2,12 @@
|
|
2
2
|
|
3
3
|
class FollowingToFollowRule < Cardio::Migration::Core
|
4
4
|
def up
|
5
|
-
Card.search(right: { codename: "following" },
|
5
|
+
Card.search(right: { codename: "following" },
|
6
|
+
left: { type: "user" }).each do |following_card|
|
6
7
|
user_name = following_card.name.left
|
7
8
|
following_card.item_names.each do |followed_set_name|
|
8
9
|
set_card = Card.fetch(followed_set_name, new: {})
|
9
|
-
if set_card.type_code != :set
|
10
|
-
set_card = set_card.follow_set_card
|
11
|
-
end
|
10
|
+
set_card = set_card.follow_set_card if set_card.type_code != :set
|
12
11
|
rule = Card.fetch set_card.follow_rule_name(user_name), new: { type: "pointer" }
|
13
12
|
rule.content = "[[*always]]"
|
14
13
|
rule.save!
|
@@ -2,10 +2,13 @@
|
|
2
2
|
|
3
3
|
class BootstrapThemes < Cardio::Migration::Core
|
4
4
|
def up
|
5
|
-
Card.create! name: "themeless bootstrap skin", type_code: :skin,
|
6
|
-
|
5
|
+
Card.create! name: "themeless bootstrap skin", type_code: :skin,
|
6
|
+
content: "[[style: bootstrap]]\n[[style: jquery-ui-smoothness]]\n[[style: cards]]\n[[style: right sidebar]]\n[[style: bootstrap cards]]"
|
7
|
+
%w[cerulean cosmo cyborg darkly flatly journal lumen paper readable sandstone simplex
|
8
|
+
slate spacelab superhero united yeti].each do |theme|
|
7
9
|
Card.create! name: "theme: #{theme}", type_code: :css, codename: "theme_#{theme}"
|
8
|
-
Card.create! name: "#{theme} skin", type_code: :skin, codename: "#{theme}_skin",
|
10
|
+
Card.create! name: "#{theme} skin", type_code: :skin, codename: "#{theme}_skin",
|
11
|
+
content: "[[themeless bootstrap skin]]\n[[theme: #{theme}]]"
|
9
12
|
end
|
10
13
|
|
11
14
|
if credit_card = Card["*credit"]
|
@@ -30,7 +33,8 @@ class BootstrapThemes < Cardio::Migration::Core
|
|
30
33
|
import_json "skin_images.json"
|
31
34
|
|
32
35
|
if sidebar_card = Card["*sidebar"]
|
33
|
-
new_content = sidebar_card.db_content.gsub(/(\*(logo|credit))\|content/,
|
36
|
+
new_content = sidebar_card.db_content.gsub(/(\*(logo|credit))\|content/,
|
37
|
+
'\1|content_panel')
|
34
38
|
sidebar_card.update! content: new_content
|
35
39
|
end
|
36
40
|
end
|
@@ -8,20 +8,27 @@ class BootswatchThemes < Cardio::Migration::Core
|
|
8
8
|
bs.update! codename: nil
|
9
9
|
bs.delete!
|
10
10
|
|
11
|
-
Card.create! name: "bootswatch shared", type_code: :scss,
|
12
|
-
|
13
|
-
|
11
|
+
Card.create! name: "bootswatch shared", type_code: :scss,
|
12
|
+
codename: "bootswatch_shared"
|
13
|
+
Card.create! name: "bootswatch theme+*right+*structure", type_id: Card::ScssID,
|
14
|
+
content: "{{_left+variables}}{{bootswatch shared}}{{_left+style}}"
|
15
|
+
%w[bootstrap_default cerulean cosmo cyborg darkly flatly journal lumen paper readable
|
16
|
+
sandstone simplex slate spacelab superhero united yeti].each do |theme_name|
|
14
17
|
path = data_path "themes/#{theme_name}"
|
15
18
|
theme = Card.fetch "#{theme_name} skin"
|
16
19
|
if theme
|
17
20
|
theme.update! type_id: Card::SkinID, content: "[[themeless bootstrap skin]]\n[[+bootswatch theme]]", subcards: {
|
18
|
-
"+variables" => { type_id: Card::ScssID,
|
19
|
-
|
21
|
+
"+variables" => { type_id: Card::ScssID,
|
22
|
+
content: File.read(File.join(path, "_variables.scss")) },
|
23
|
+
"+style" => { type_id: Card::ScssID,
|
24
|
+
content: File.read(File.join(path, "_bootswatch.scss")) }
|
20
25
|
}
|
21
26
|
else
|
22
27
|
Card.create! name: "#{theme_name.sub('_', ' ')} skin", type_id: Card::SkinID, content: "[[themeless bootstrap skin]]\n[[+bootswatch theme]]", subcards: {
|
23
|
-
"+variables" => { type_id: Card::ScssID,
|
24
|
-
|
28
|
+
"+variables" => { type_id: Card::ScssID,
|
29
|
+
content: File.read(File.join(path, "_variables.scss")) },
|
30
|
+
"+style" => { type_id: Card::ScssID,
|
31
|
+
content: File.read(File.join(path, "_bootswatch.scss")) }
|
25
32
|
}
|
26
33
|
end
|
27
34
|
end
|
@@ -7,13 +7,14 @@ class SearchCardContext < Cardio::Migration::Core
|
|
7
7
|
["[lr]+", 'l\\1'],
|
8
8
|
["[LR]+", 'L\\1'],
|
9
9
|
["(?=[LR]*[lr]+)(?=[lr]*[LR]+)[lrLR]+", 'l\\1'], # mix of lowercase and uppercase l's and r's
|
10
|
-
%w
|
11
|
-
%w
|
12
|
-
%w
|
10
|
+
%w[left LL],
|
11
|
+
%w[right LR],
|
12
|
+
%w[self left],
|
13
13
|
["", "left"]
|
14
14
|
]
|
15
15
|
Card.search(type_id: ["in", Card::SearchTypeID, Card::SetID]).each do |card|
|
16
|
-
next unless card.name.
|
16
|
+
next unless card.name.compound? && card.real?
|
17
|
+
|
17
18
|
content = card.db_content
|
18
19
|
replace.each do |key, val|
|
19
20
|
content.gsub!(/(#{sep})_(#{key})(?=#{sep})/, "\\1_#{val}")
|
@@ -22,6 +23,7 @@ class SearchCardContext < Cardio::Migration::Core
|
|
22
23
|
card.actions.each do |action|
|
23
24
|
next unless (content_change = action.change :db_content)
|
24
25
|
next if content_change.new_record?
|
26
|
+
|
25
27
|
content = content_change.value
|
26
28
|
replace.each do |key, val|
|
27
29
|
content.gsub!(/(#{sep})_(#{key})(?=#{sep})/, "\\1_#{val}")
|
@@ -5,14 +5,16 @@ class MenuCompatibility < Cardio::Migration::Core
|
|
5
5
|
# Add bootswatch shared to old skins so that menu works
|
6
6
|
bootswatch_shared = Card[:bootswatch_shared]
|
7
7
|
Card.search(type_id: Card::SkinID) do |skin|
|
8
|
-
if skin.item_cards.find
|
8
|
+
if skin.item_cards.find do |item_card|
|
9
|
+
item_card.codename == :style_bootstrap_compatible
|
10
|
+
end
|
9
11
|
skin.add_item! bootswatch_shared.name
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
15
|
# Delete output files so all the styling and js changes take effect.
|
14
16
|
# (this can be removed if/when later migrations update those things directly)
|
15
|
-
[
|
17
|
+
%i[style script].each do |setting|
|
16
18
|
Card.search(
|
17
19
|
right_id: Card::MachineOutputID,
|
18
20
|
left: { right: { codename: setting.to_s } }
|
@@ -4,7 +4,8 @@ class FixSkinCodenames < Cardio::Migration::Core
|
|
4
4
|
def up
|
5
5
|
# This is needed because the bootswatch_themes migration removed codenames.
|
6
6
|
# They were no longer needed for style handling but are still needed for images
|
7
|
-
%w
|
7
|
+
%w[bootstrap_default cerulean cosmo cyborg darkly flatly journal lumen paper readable
|
8
|
+
sandstone simplex slate spacelab superhero united yeti].each do |theme_name|
|
8
9
|
theme_name = "#{theme_name}_skin"
|
9
10
|
Card.fetch(theme_name).update! codename: theme_name
|
10
11
|
end
|
@@ -9,9 +9,9 @@ class AddRecentSettingSessionCard < Cardio::Migration::Core
|
|
9
9
|
subcards: {
|
10
10
|
"+*self+*options" => { type_code: :search_type,
|
11
11
|
content: '{"type":"setting"}' },
|
12
|
-
"+*self+*update"
|
13
|
-
"+*self**create"
|
14
|
-
"+*self**read"
|
12
|
+
"+*self+*update" => { content: "[[Anyone]]" },
|
13
|
+
"+*self**create" => { content: "[[Anyone]]" },
|
14
|
+
"+*self**read" => { content: "[[Anyone]]" }
|
15
15
|
}
|
16
16
|
)
|
17
17
|
end
|
@@ -14,7 +14,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
|
|
14
14
|
admin_only name: "*google_analytics_key",
|
15
15
|
codename: "google_analytics_key"
|
16
16
|
|
17
|
-
codenames = %w
|
17
|
+
codenames = %w[debugger recaptcha_settings]
|
18
18
|
content =
|
19
19
|
codenames.map do |cn|
|
20
20
|
"[[#{Card[cn.to_sym].name}]]"
|
@@ -28,6 +28,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
|
|
28
28
|
|
29
29
|
def add_admin_info_to_home_card
|
30
30
|
return unless (home = Card[Card[:home].db_content])
|
31
|
+
|
31
32
|
new_content = home.db_content.prepend "{{*admin info|content}}\n"
|
32
33
|
home.update! content: new_content
|
33
34
|
end
|
@@ -39,7 +40,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
|
|
39
40
|
"[[+private key]]\n" \
|
40
41
|
"[[+proxy]]"
|
41
42
|
Card::Cache.reset_all
|
42
|
-
%w
|
43
|
+
%w[public_key private_key proxy].each do |name|
|
43
44
|
Card.create!(
|
44
45
|
name: "#{Card[:recaptcha_settings].name}+#{name.tr('_', ' ')}",
|
45
46
|
codename: "recaptcha_#{name}"
|
@@ -49,7 +50,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
|
|
49
50
|
|
50
51
|
def admin_only args
|
51
52
|
create_or_update! args.reverse_merge(type_id: Card::PhraseID)
|
52
|
-
%w
|
53
|
+
%w[*read *update *delete].each do |perm|
|
53
54
|
create_or_update! name: "#{args[:name]}+*self+#{perm}",
|
54
55
|
content: "[[Administrator]]"
|
55
56
|
end
|
@@ -15,6 +15,7 @@ class UpdateFileAndImageCards < Cardio::Migration::Core
|
|
15
15
|
Card.search(type: [:in, "file", "image"]).each do |card|
|
16
16
|
update_history card
|
17
17
|
next unless card.db_content.present?
|
18
|
+
|
18
19
|
update_db_content card
|
19
20
|
update_filenames card
|
20
21
|
end
|
@@ -37,9 +38,11 @@ class UpdateFileAndImageCards < Cardio::Migration::Core
|
|
37
38
|
# swap variant and action_id/type_code in file name
|
38
39
|
def update_filenames card
|
39
40
|
return unless Dir.exist? card.store_dir
|
41
|
+
|
40
42
|
symlink_target_hash =
|
41
43
|
Dir.entries(card.store_dir).each_with_object({}) do |file, symlink_target|
|
42
44
|
next unless (new_filename = get_new_file_name(file))
|
45
|
+
|
43
46
|
file_path = File.join(card.store_dir, file)
|
44
47
|
if File.symlink?(file_path)
|
45
48
|
symlink_target[new_filename] = File.readlink(file_path)
|
@@ -69,11 +72,12 @@ class UpdateFileAndImageCards < Cardio::Migration::Core
|
|
69
72
|
end
|
70
73
|
|
71
74
|
def add_skin_thumbnails
|
72
|
-
%w
|
75
|
+
%w[cerulean_skin cosmo_skin cyborg_skin darkly_skin flatly_skin
|
73
76
|
journal_skin lumen_skin paper_skin readable_skin sandstone_skin
|
74
77
|
simplex_skin slate_skin spacelab_skin superhero_skin united_skin
|
75
|
-
yeti_skin
|
78
|
+
yeti_skin].each do |name|
|
76
79
|
next unless (card = Card[name.to_sym])
|
80
|
+
|
77
81
|
card.update! codename: nil
|
78
82
|
if (card = Card.fetch name, :image)
|
79
83
|
card.update_column :codename, "#{name}_image"
|
@@ -6,7 +6,7 @@ class CreateReferencesForSearchCards < Cardio::Migration::Core
|
|
6
6
|
type_id: Card::SearchTypeID
|
7
7
|
).find_each.with_index do |card, index|
|
8
8
|
card.update_references_out
|
9
|
-
puts "completed #{index} search cards" if index % 100
|
9
|
+
puts "completed #{index} search cards" if (index % 100).zero?
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -6,8 +6,10 @@ class UpdateFileHistory < Cardio::Migration::Core
|
|
6
6
|
card.actions.each do |action|
|
7
7
|
next unless (content_change = action.change :db_content)
|
8
8
|
next if content_change.new_record?
|
9
|
+
|
9
10
|
original_filename, file_type, action_id, mod = content_change.value.split("\n")
|
10
11
|
next unless file_type.present? && action_id.present?
|
12
|
+
|
11
13
|
value =
|
12
14
|
if mod.present?
|
13
15
|
":#{card.codename}/#{mod}#{::File.extname(original_filename)}"
|
@@ -15,7 +15,7 @@ class ReorganizeScripts < Cardio::Migration::Core
|
|
15
15
|
Card.search(type_id: Card::PointerID,
|
16
16
|
right: { codename: "script" },
|
17
17
|
link_to: "script: slot").each do |script_rule|
|
18
|
-
[
|
18
|
+
%i[script_tinymce script_ace bootstrap_js].each do |codename|
|
19
19
|
name = Card[codename].name
|
20
20
|
script_rule.drop_item name
|
21
21
|
end
|
@@ -6,6 +6,7 @@ class FixModFiles < Cardio::Migration::Core
|
|
6
6
|
next unless card.coded?
|
7
7
|
next unless card.db_content.include?("05_standard") ||
|
8
8
|
card.db_content.include?("06_bootstrap")
|
9
|
+
|
9
10
|
new_content = card.db_content.sub("05_standard", "standard")
|
10
11
|
.sub("06_bootstrap", "bootstrap")
|
11
12
|
card.update_column :db_content, new_content
|
@@ -17,6 +18,7 @@ class FixModFiles < Cardio::Migration::Core
|
|
17
18
|
def update_history card
|
18
19
|
card.actions.each do |action|
|
19
20
|
next unless (content_change = action.change(:db_content))
|
21
|
+
|
20
22
|
new_value = content_change.value.gsub("05_standard", "standard")
|
21
23
|
.gsub("06_bootstrap", "bootstrap")
|
22
24
|
content_change.update_column :value, new_value
|
@@ -4,12 +4,12 @@ class TweakRecaptchaSettingCards < Cardio::Migration::Core
|
|
4
4
|
def up
|
5
5
|
ensure_card name: "*recaptcha settings", type_id: Card::BasicID
|
6
6
|
ensure_card name: "*recaptcha settings+*self+*structure",
|
7
|
-
content:
|
8
|
-
{{+public key}}
|
9
|
-
{{+private key}}
|
10
|
-
{{+proxy}}
|
11
|
-
|
12
|
-
%w
|
7
|
+
content: <<~STRING
|
8
|
+
{{+public key}}
|
9
|
+
{{+private key}}
|
10
|
+
{{+proxy}}
|
11
|
+
STRING
|
12
|
+
%w[public_key private_key proxy].each do |name|
|
13
13
|
ensure_card name: "#{Card[:recaptcha_settings].name}+#{name.tr('_', ' ')}",
|
14
14
|
type_id: Card::PhraseID
|
15
15
|
end
|
@@ -5,6 +5,7 @@ class UpdateKeys < Cardio::Migration::Core
|
|
5
5
|
Card.pluck(:id, :name, :key).each do |id, name, key|
|
6
6
|
new_key = name.to_name.key
|
7
7
|
next if new_key == key
|
8
|
+
|
8
9
|
update_key id, key, new_key
|
9
10
|
end
|
10
11
|
end
|
@@ -34,7 +35,7 @@ class UpdateKeys < Cardio::Migration::Core
|
|
34
35
|
# the living "matthia_tax".
|
35
36
|
# The living card is the one that has been updated more recently.
|
36
37
|
longer_untouched = [Card.find(id), Card.find_by_key(new_key)]
|
37
|
-
|
38
|
+
.min { |a, b| a.updated_at <=> b.updated_at }
|
38
39
|
Card.where(id: longer_untouched).delete_all
|
39
40
|
update_key id, key, new_key if longer_untouched != id
|
40
41
|
end
|
@@ -35,11 +35,13 @@ class EmailTestContext < Cardio::Migration::Core
|
|
35
35
|
|
36
36
|
def update_if_unchanged name, content
|
37
37
|
return if (card = Card[name]) && card.updater.codename != :wagn_bot
|
38
|
+
|
38
39
|
ensure_card name, content: content
|
39
40
|
end
|
40
41
|
|
41
42
|
def add_test_context email_template, content
|
42
43
|
return unless Card[email_template]
|
44
|
+
|
43
45
|
ensure_card [email_template, :test_context],
|
44
46
|
content: content,
|
45
47
|
type_id: Card::PointerID
|
@@ -3,16 +3,16 @@
|
|
3
3
|
class AddNotificationEventCard < Cardio::Migration::Core
|
4
4
|
def up
|
5
5
|
ensure_card "Notification template", codename: "notification_template",
|
6
|
-
|
6
|
+
type_id: Card::CardtypeID
|
7
7
|
ensure_trait "*message", "message", default: { type_id: Card::PhraseID }
|
8
8
|
ensure_trait "*disappear", "disappear", default: { type_id: Card::ToggleID }
|
9
9
|
ensure_trait "*contextual class", "contextual_class",
|
10
10
|
default: { type_id: Card::PointerID },
|
11
11
|
input: "radio",
|
12
12
|
options: { type_id: Card::PointerID,
|
13
|
-
content: %w
|
13
|
+
content: %w[success info warning danger] }
|
14
14
|
|
15
|
-
[
|
15
|
+
%i[create update delete].each do |action|
|
16
16
|
update ["on_#{action}".to_sym, :right, :help],
|
17
17
|
content: "Configure events to be executed when card id #{action}d"
|
18
18
|
end
|
@@ -9,7 +9,7 @@ class AddAdvancedEditCards < Cardio::Migration::Core
|
|
9
9
|
type_id: Card::RoleID
|
10
10
|
|
11
11
|
Card::Cache.reset_all
|
12
|
-
ensure_card [
|
12
|
+
ensure_card %i[roles right options],
|
13
13
|
type_id: Card::SearchTypeID,
|
14
14
|
content: %({"type":"role", "not":{"codename":["in","anyone","anyone_signed_in, anyone_with_role"]}})
|
15
15
|
|
@@ -3,12 +3,11 @@
|
|
3
3
|
class HeadRule < Cardio::Migration::Core
|
4
4
|
def up
|
5
5
|
update_card! :head, type_id: Card::SettingID
|
6
|
-
ensure_card [
|
6
|
+
ensure_card %i[all head],
|
7
7
|
type_id: Card::HtmlID,
|
8
8
|
content: "{{*head|core}}"
|
9
|
-
ensure_card [
|
9
|
+
ensure_card %i[head right help],
|
10
10
|
content: "head tag content"
|
11
|
-
ensure_card [
|
12
|
-
|
11
|
+
ensure_card %i[head right default], type_id: Card::HtmlID
|
13
12
|
end
|
14
13
|
end
|
@@ -24,12 +24,12 @@ class MigrateLayouts < Cardio::Migration::Core
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def body_tag card
|
27
|
-
card.content[
|
27
|
+
card.content[%r{<body[^>]*>.*</body>}mi] || add_body_tag(card)
|
28
28
|
end
|
29
29
|
|
30
30
|
def add_body_tag card
|
31
|
-
content = card.content.gsub(
|
32
|
-
|
31
|
+
content = card.content.gsub("<!DOCTYPE HTML>", "")
|
32
|
+
.gsub(/\{\{\*head[^}]*\}\}/i, "").strip
|
33
33
|
"<body>\n #{content}\n</body>"
|
34
34
|
end
|
35
35
|
|
@@ -48,7 +48,7 @@ class MigrateLayouts < Cardio::Migration::Core
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def head_tag card
|
51
|
-
if (match = card.content.match(
|
51
|
+
if (match = card.content.match(%r{<head>(.*)</head>}mi))
|
52
52
|
match[1].strip
|
53
53
|
end
|
54
54
|
end
|