card 1.15.1 → 1.15.2
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 +19 -16
- data/config/initializers/recaptcha.rb +1 -0
- data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +13 -14
- data/db/migrate_core_cards/20150326205655_bootswatch_themes.rb +30 -0
- data/db/migrate_core_cards/20150331135745_new_card_menu.rb +8 -0
- data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +27 -0
- data/db/migrate_core_cards/20150510031118_fix_skin_images.rb +13 -0
- data/db/migrate_core_cards/data/1.12_stylesheets/classic_cards.scss +9 -5
- data/db/migrate_core_cards/data/1.12_stylesheets/common.scss +5 -5
- data/{test/fixtures/.gitkeep → db/migrate_core_cards/data/themes/bootstrap_default/_bootswatch.scss} +0 -0
- data/db/migrate_core_cards/data/themes/bootstrap_default/_variables.scss +866 -0
- data/db/migrate_core_cards/data/themes/cerulean/_bootswatch.scss +125 -0
- data/db/migrate_core_cards/data/themes/cerulean/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/cosmo/_bootswatch.scss +237 -0
- data/db/migrate_core_cards/data/themes/cosmo/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/cyborg/_bootswatch.scss +210 -0
- data/db/migrate_core_cards/data/themes/cyborg/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/darkly/_bootswatch.scss +330 -0
- data/db/migrate_core_cards/data/themes/darkly/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/flatly/_bootswatch.scss +313 -0
- data/db/migrate_core_cards/data/themes/flatly/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/journal/_bootswatch.scss +120 -0
- data/db/migrate_core_cards/data/themes/journal/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/lumen/_bootswatch.scss +496 -0
- data/db/migrate_core_cards/data/themes/lumen/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/paper/_bootswatch.scss +607 -0
- data/db/migrate_core_cards/data/themes/paper/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/readable/_bootswatch.scss +174 -0
- data/db/migrate_core_cards/data/themes/readable/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/sandstone/_bootswatch.scss +194 -0
- data/db/migrate_core_cards/data/themes/sandstone/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/simplex/_bootswatch.scss +142 -0
- data/db/migrate_core_cards/data/themes/simplex/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/slate/_bootswatch.scss +417 -0
- data/db/migrate_core_cards/data/themes/slate/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/spacelab/_bootswatch.scss +137 -0
- data/db/migrate_core_cards/data/themes/spacelab/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/superhero/_bootswatch.scss +332 -0
- data/db/migrate_core_cards/data/themes/superhero/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/united/_bootswatch.scss +42 -0
- data/db/migrate_core_cards/data/themes/united/_variables.scss +861 -0
- data/db/migrate_core_cards/data/themes/yeti/_bootswatch.scss +437 -0
- data/db/migrate_core_cards/data/themes/yeti/_variables.scss +861 -0
- data/db/seed/README.md +2 -0
- data/db/{bootstrap → seed/new}/card_actions.yml +561 -295
- data/db/{bootstrap → seed/new}/card_acts.yml +1 -1
- data/db/seed/new/card_changes.yml +29331 -0
- data/db/{bootstrap → seed/new}/card_references.yml +1544 -1355
- data/db/seed/new/cards.yml +28057 -0
- data/db/seed/test/fixtures/.gitkeep +0 -0
- data/{test → db/seed/test}/fixtures/card_actions.yml +1501 -1235
- data/{test → db/seed/test}/fixtures/card_acts.yml +244 -244
- data/db/seed/test/fixtures/card_changes.yml +34527 -0
- data/{test → db/seed/test}/fixtures/card_references.yml +2215 -2026
- data/db/seed/test/fixtures/cards.yml +32708 -0
- data/{test → db/seed/test}/fixtures/mao2.jpg +0 -0
- data/{test → db/seed/test}/fixtures/rails.gif +0 -0
- data/{test → db/seed/test}/seed.rb +0 -0
- data/db/version_core_cards.txt +1 -1
- data/lib/card/format.rb +56 -56
- data/lib/cardio.rb +7 -5
- data/mod/01_core/chunk/include.rb +1 -1
- data/mod/01_core/set/all/fetch.rb +27 -27
- data/mod/01_core/set/all/rules.rb +53 -53
- data/mod/01_core/set/all/states.rb +5 -0
- data/mod/01_core/spec/format/html_format_spec.rb +6 -6
- data/mod/01_core/spec/set/all/rules2_spec.rb +6 -6
- data/mod/01_history/set/all/history.rb +4 -4
- data/mod/02_basic_types/set/all/rss.rb +10 -9
- data/mod/03_machines/lib/javascript/script_card_menu.js.coffee +20 -0
- data/mod/03_machines/lib/javascript/wagn.js.coffee +46 -34
- data/mod/03_machines/lib/javascript/wagn_mod.js.coffee +36 -148
- data/mod/03_machines/lib/stylesheets/style_bootstrap_compatible.css +10 -96
- data/mod/03_machines/lib/stylesheets/style_cards.scss +127 -87
- data/mod/03_machines/set/self/script_card_menu.rb +10 -2
- data/mod/05_email/set/all/follow.rb +38 -22
- data/mod/05_email/set/right/follow.rb +79 -1
- data/mod/05_email/set/type_plus_right/user/follow.rb +31 -31
- data/mod/05_email/spec/set/all/follow_spec.rb +37 -28
- data/mod/05_email/spec/set/right/followers_spec.rb +29 -29
- data/mod/05_standard/set/all/error.rb +17 -20
- data/mod/05_standard/set/all/links.rb +31 -18
- data/mod/05_standard/set/all/rich_html/content.rb +41 -18
- data/mod/05_standard/set/all/rich_html/editing.rb +21 -17
- data/mod/05_standard/set/all/rich_html/header.rb +13 -48
- data/mod/05_standard/set/all/rich_html/menu.rb +147 -0
- data/mod/05_standard/set/all/rich_html/modal.rb +54 -0
- data/mod/05_standard/set/all/rich_html/toolbar.rb +237 -0
- data/mod/05_standard/set/all/rich_html/wrapper.rb +43 -25
- data/mod/05_standard/set/right/account.rb +8 -7
- data/mod/05_standard/set/rstar/rules.rb +111 -84
- data/mod/05_standard/set/self/head.rb +15 -15
- data/mod/05_standard/set/type/set.rb +65 -34
- data/mod/05_standard/spec/set/all/attach_spec.rb +1 -1
- data/mod/05_standard/spec/set/all/rich_html/wrapper_spec.rb +13 -9
- data/mod/05_standard/spec/set/rstar/rules_spec.rb +1 -1
- data/mod/06_bootstrap/lib/javascript/bootstrap.js +108 -97
- data/mod/06_bootstrap/lib/javascript/smartmenu.js +94 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_alerts.scss +73 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_badges.scss +68 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_breadcrumbs.scss +26 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_button-groups.scss +243 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_buttons.scss +160 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_carousel.scss +269 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_close.scss +36 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_code.scss +69 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_component-animations.scss +37 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_dropdowns.scss +214 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_forms.scss +578 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_glyphicons.scss +305 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_grid.scss +84 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_input-groups.scss +166 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_jumbotron.scss +50 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_labels.scss +66 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_list-group.scss +124 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_media.scss +61 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_mixins.scss +39 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_modals.scss +150 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_navbar.scss +662 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_navs.scss +242 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_normalize.scss +427 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_pager.scss +54 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_pagination.scss +88 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_panels.scss +265 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_popovers.scss +135 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_print.scss +107 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_progress-bars.scss +87 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_responsive-embed.scss +35 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_responsive-utilities.scss +177 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_scaffolding.scss +162 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_tables.scss +234 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_theme.scss +273 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_thumbnails.scss +38 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_tooltip.scss +102 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_type.scss +298 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_utilities.scss +55 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_variables.scss +866 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/_wells.scss +29 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_background-variant.scss +11 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_buttons.scss +52 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_forms.scss +88 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_grid.scss +122 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_image.scss +33 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_labels.scss +12 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_list-group.scss +31 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_pagination.scss +23 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_panels.scss +24 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_progress-bar.scss +10 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_resize.scss +6 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_size.scss +10 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_text-emphasis.scss +11 -0
- data/mod/06_bootstrap/lib/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
- data/mod/06_bootstrap/lib/stylesheets/{bootswatch_mixins.scss → bootstrap/mixins/_vendor-prefixes.scss} +1 -61
- data/mod/06_bootstrap/lib/stylesheets/bootstrap_cards.scss +20 -13
- data/mod/06_bootstrap/lib/stylesheets/smartmenu.css +433 -0
- data/mod/06_bootstrap/set/all/bootstrap/wrapper.rb +2 -2
- data/mod/06_bootstrap/set/all/rich_bootstrap.rb +58 -4
- data/mod/06_bootstrap/set/self/bootstrap_js.rb +1 -1
- data/mod/06_bootstrap/set/self/bootswatch_shared.rb +32 -0
- data/mod/06_bootstrap/set/self/smartmenu_css.rb +7 -0
- data/mod/06_bootstrap/set/self/smartmenu_js.rb +7 -0
- data/spec/spec_helper.rb +16 -16
- metadata +133 -93
- data/db/bootstrap/card_changes.yml +0 -12765
- data/db/bootstrap/cards.yml +0 -11567
- data/db/seeds.rb +0 -8
- data/mod/03_machines/lib/javascript/script_card_menu.js +0 -72
- data/mod/06_bootstrap/lib/stylesheets/bootstrap_css.css +0 -6565
- data/mod/06_bootstrap/lib/stylesheets/theme_bootstrap_default.css +0 -476
- data/mod/06_bootstrap/lib/stylesheets/theme_cerulean.css +0 -6721
- data/mod/06_bootstrap/lib/stylesheets/theme_cosmo.css +0 -5898
- data/mod/06_bootstrap/lib/stylesheets/theme_cyborg.css +0 -5876
- data/mod/06_bootstrap/lib/stylesheets/theme_darkly.css +0 -5986
- data/mod/06_bootstrap/lib/stylesheets/theme_flatly.css +0 -6830
- data/mod/06_bootstrap/lib/stylesheets/theme_journal.css +0 -6647
- data/mod/06_bootstrap/lib/stylesheets/theme_lumen.css +0 -6097
- data/mod/06_bootstrap/lib/stylesheets/theme_paper.css +0 -6647
- data/mod/06_bootstrap/lib/stylesheets/theme_readable.css +0 -5896
- data/mod/06_bootstrap/lib/stylesheets/theme_sandstone.css +0 -6733
- data/mod/06_bootstrap/lib/stylesheets/theme_simplex.css +0 -5886
- data/mod/06_bootstrap/lib/stylesheets/theme_slate.css +0 -7057
- data/mod/06_bootstrap/lib/stylesheets/theme_spacelab.css +0 -5935
- data/mod/06_bootstrap/lib/stylesheets/theme_superhero.css +0 -5964
- data/mod/06_bootstrap/lib/stylesheets/theme_united.css +0 -6588
- data/mod/06_bootstrap/lib/stylesheets/theme_yeti.css +0 -6088
- data/mod/06_bootstrap/set/self/bootstrap_css.rb +0 -9
- data/mod/06_bootstrap/set/self/bootswatch_mixins.rb +0 -9
- data/mod/06_bootstrap/set/self/theme_bootstrap_default.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_cerulean.rb +0 -9
- data/mod/06_bootstrap/set/self/theme_cosmo.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_cyborg.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_darkly.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_flatly.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_journal.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_lumen.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_paper.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_readable.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_sandstone.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_simplex.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_slate.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_spacelab.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_superhero.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_united.rb +0 -2
- data/mod/06_bootstrap/set/self/theme_yeti.rb +0 -2
- data/test/fixtures/card_changes.yml +0 -17961
- data/test/fixtures/cards.yml +0 -16218
@@ -2,20 +2,19 @@ format :html do
|
|
2
2
|
def slot_options args
|
3
3
|
@@slot_option_keys ||= Card::Chunk::Include.options.reject { |k| k == :view }.unshift :home_view
|
4
4
|
options_hash = {}
|
5
|
-
|
5
|
+
|
6
6
|
if @context_names.present?
|
7
7
|
options_hash['name_context'] = @context_names.map( &:key ) * ','
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
@@slot_option_keys.inject(options_hash) do |hash, opt|
|
11
11
|
hash[opt] = args[opt] if args[opt].present?
|
12
12
|
hash
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
JSON( options_hash )
|
16
16
|
end
|
17
|
-
|
18
|
-
|
17
|
+
|
19
18
|
def wrap args = {}
|
20
19
|
classes = [
|
21
20
|
( 'card-slot' unless args[:no_slot] ),
|
@@ -24,7 +23,7 @@ format :html do
|
|
24
23
|
( "STRUCTURE-#{args[:structure].to_name.key}" if args[:structure]),
|
25
24
|
card.safe_set_keys
|
26
25
|
].compact
|
27
|
-
|
26
|
+
|
28
27
|
div = %{<div id="#{card.cardname.url_key}" data-card-id="#{card.id}" data-card-name="#{h card.name}" style="#{h args[:style]}" class="#{classes*' '}" } +
|
29
28
|
%{data-slot='#{html_escape_except_quotes slot_options( args )}'>#{ output yield }</div>}
|
30
29
|
|
@@ -45,16 +44,26 @@ format :html do
|
|
45
44
|
yield args
|
46
45
|
end
|
47
46
|
end
|
48
|
-
|
47
|
+
|
48
|
+
def panel args={}
|
49
|
+
wrap_with :div, :class=>"card-frame #{args[:panel_class]}" do
|
50
|
+
output(yield)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
49
54
|
def frame args={}
|
50
|
-
args[:slot_class] = "card-frame #{args[:slot_class]}"
|
51
55
|
wrap args do
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
[
|
57
|
+
_optional_render( :menu, args ),
|
58
|
+
panel(args) do
|
59
|
+
[
|
60
|
+
_optional_render( :header, args, :show),
|
61
|
+
(%{ <div class="card-subheader">#{ args[:subheader] }</div> } if args[:subheader]),
|
62
|
+
_optional_render( :help, args.merge(:help_class=>'alert alert-info'), :hide),
|
63
|
+
wrap_body(args) { output( yield args ) } ,
|
64
|
+
]
|
65
|
+
end
|
66
|
+
]
|
58
67
|
end
|
59
68
|
end
|
60
69
|
|
@@ -67,7 +76,8 @@ format :html do
|
|
67
76
|
end
|
68
77
|
end
|
69
78
|
end
|
70
|
-
|
79
|
+
|
80
|
+
|
71
81
|
# alert_types: 'success', 'info', 'warning', 'danger'
|
72
82
|
def alert alert_type, args={}
|
73
83
|
css_class = "alert alert-#{alert_type} "
|
@@ -82,24 +92,32 @@ format :html do
|
|
82
92
|
close_button + output( yield args)
|
83
93
|
end
|
84
94
|
end
|
85
|
-
|
95
|
+
|
86
96
|
def wrap_main(content)
|
87
97
|
return content if params[:layout]=='none'
|
88
98
|
%{<div id="main">#{content}</div>}
|
89
99
|
end
|
90
|
-
|
91
|
-
def wrap_with tag, html_args={}
|
92
|
-
|
93
|
-
|
100
|
+
|
101
|
+
def wrap_with tag, content_or_args={}, html_args={}
|
102
|
+
if block_given?
|
103
|
+
content_tag( tag, content_or_args ) do
|
104
|
+
output( yield ).html_safe
|
105
|
+
end
|
106
|
+
else
|
107
|
+
content_tag( tag, html_args ) do
|
108
|
+
output( content_or_args ).html_safe
|
109
|
+
end
|
94
110
|
end
|
95
111
|
end
|
96
|
-
|
97
|
-
def wrap_each_with tag, args={}
|
98
|
-
yield(args)
|
112
|
+
|
113
|
+
def wrap_each_with tag, content_or_args={}, args={}
|
114
|
+
content = block_given? ? yield(args) : content_or_args
|
115
|
+
args = block_given? ? content_or_args : args
|
116
|
+
content.compact.map do |item|
|
99
117
|
wrap_with tag, args do
|
100
118
|
item
|
101
119
|
end
|
102
120
|
end.join "\n"
|
103
121
|
end
|
104
|
-
|
105
|
-
end
|
122
|
+
|
123
|
+
end
|
@@ -65,7 +65,7 @@ event :validate_accountability, :on=>:create, :before=>:approve do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
event :require_email, :on=>:create, :after=>:approve do
|
68
|
-
unless subcards["+#{Card[:email].name}"]
|
68
|
+
unless subcards["+#{Card[:email].name}"]
|
69
69
|
errors.add :email, 'required'
|
70
70
|
end
|
71
71
|
end
|
@@ -90,7 +90,7 @@ event :generate_confirmation_token, :on=>:create, :before=>:process_subcards, :w
|
|
90
90
|
subcards["+#{Card[:token].name}"] = {:content => generate_token }
|
91
91
|
end
|
92
92
|
|
93
|
-
event :reset_password, :on=>:update, :before=>:approve, :when=>proc{ |c| c.has_reset_token? } do
|
93
|
+
event :reset_password, :on=>:update, :before=>:approve, :when=>proc{ |c| c.has_reset_token? } do
|
94
94
|
case ( result = authenticate_by_token @env_token )
|
95
95
|
when Integer
|
96
96
|
Auth.signin result
|
@@ -110,7 +110,7 @@ event :reset_password, :on=>:update, :before=>:approve, :when=>proc{ |c| c.has_r
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def edit_password_success_args
|
113
|
-
{
|
113
|
+
{
|
114
114
|
:id=>left.name,
|
115
115
|
:view=>:related,
|
116
116
|
:related=>{ :name=>"+#{Card[:account].name}", :view=>'edit' }
|
@@ -126,7 +126,7 @@ event :reset_token do
|
|
126
126
|
token_card.update_attributes! :content => generate_token
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
|
131
131
|
event :send_welcome_email do
|
132
132
|
if ((welcome = Card['welcome email']) && welcome.type_code == :email_template)
|
@@ -158,12 +158,12 @@ def changes_visible? act
|
|
158
158
|
end
|
159
159
|
|
160
160
|
def send_change_notice act, followed_set, follow_option
|
161
|
-
if changes_visible?(act)
|
161
|
+
if changes_visible?(act)
|
162
162
|
Auth.as(left.id) do
|
163
163
|
Card[:follower_notification_email].deliver(
|
164
164
|
:context => act.card,
|
165
165
|
:to => email,
|
166
|
-
:follower => left.name,
|
166
|
+
:follower => left.name,
|
167
167
|
:followed_set => followed_set,
|
168
168
|
:follow_option => follow_option
|
169
169
|
)
|
@@ -172,9 +172,10 @@ def send_change_notice act, followed_set, follow_option
|
|
172
172
|
end
|
173
173
|
|
174
174
|
|
175
|
-
format :email do
|
175
|
+
format :email do
|
176
176
|
view :mail do |args|
|
177
177
|
args[:to] ||= card.email
|
178
178
|
super args
|
179
179
|
end
|
180
180
|
end
|
181
|
+
|
@@ -3,7 +3,7 @@ format :html do
|
|
3
3
|
|
4
4
|
view :closed_rule, :tags=>:unknown_ok do |args|
|
5
5
|
return 'not a rule' if !card.is_rule? #these are helpful for handling non-rule rstar cards until we have real rule sets
|
6
|
-
|
6
|
+
|
7
7
|
rule_card = find_current_rule_card
|
8
8
|
|
9
9
|
rule_content = !rule_card ? '' : begin
|
@@ -31,12 +31,14 @@ format :html do
|
|
31
31
|
'</tr>'
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
|
35
|
+
|
36
|
+
|
35
37
|
view :open_rule, :tags=>:unknown_ok do |args|
|
36
38
|
return 'not a rule' if !card.is_rule?
|
37
|
-
current_rule = args[:current_rule]
|
39
|
+
current_rule = args[:current_rule]
|
38
40
|
setting_name = args[:setting_name]
|
39
|
-
|
41
|
+
|
40
42
|
edit_mode = !params[:success] && card.ok?( ( card.new_card? ? :create : :update ) )
|
41
43
|
#~~~~~~ handle reloading due to type change
|
42
44
|
if params[:type_reload] && card_args=params[:card]
|
@@ -49,25 +51,25 @@ format :html do
|
|
49
51
|
end
|
50
52
|
edit_mode = true
|
51
53
|
end
|
52
|
-
|
54
|
+
|
53
55
|
opts = {
|
54
56
|
:rule_context => card, # determines the set options and the success view
|
55
57
|
:set_context => card.rule_set_name,
|
56
58
|
}
|
57
59
|
rule_view = edit_mode ? :edit_rule : :show_rule
|
58
60
|
|
59
|
-
%{
|
61
|
+
%{
|
60
62
|
<tr class="card-slot open-rule #{rule_view.to_s.sub '_', '-'}">
|
61
63
|
<td class="rule-cell" colspan="3">
|
62
64
|
<div class="rule-setting">
|
63
65
|
#{ view_link setting_name.sub(/^\*/,''), :closed_rule, :class=>'close-rule-link slotter' }
|
64
66
|
#{ card_link setting_name, :text=>"all #{setting_name} rules", :class=>'setting-link', :target=>'wagn_setting' }
|
65
67
|
</div>
|
66
|
-
|
68
|
+
|
67
69
|
<div class="alert alert-info rule-instruction">
|
68
70
|
#{ process_content "{{#{setting_name}+*right+*help|content}}" }
|
69
71
|
</div>
|
70
|
-
|
72
|
+
|
71
73
|
<div class="card-body">
|
72
74
|
#{ subformat( current_rule )._render rule_view, opts }
|
73
75
|
</div>
|
@@ -76,19 +78,19 @@ format :html do
|
|
76
78
|
}
|
77
79
|
|
78
80
|
end
|
79
|
-
|
81
|
+
|
80
82
|
def default_open_rule_args args
|
81
83
|
current_rule_card = find_current_rule_card || begin
|
82
84
|
Card.new :name=> "#{Card[:all].name}+#{card.rule_user_setting_name}"
|
83
85
|
end
|
84
|
-
|
86
|
+
|
85
87
|
args.reverse_merge! :current_rule => current_rule_card, :setting_name => card.rule_setting_name
|
86
88
|
end
|
87
|
-
|
89
|
+
|
88
90
|
|
89
91
|
view :show_rule, :tags=>:unknown_ok do |args|
|
90
92
|
return 'not a rule' if !card.is_rule?
|
91
|
-
|
93
|
+
|
92
94
|
if !card.new_card?
|
93
95
|
set = card.rule_set
|
94
96
|
args[:item] ||= :link
|
@@ -112,16 +114,17 @@ format :html do
|
|
112
114
|
%{
|
113
115
|
#{ hidden_success_formgroup args[:success]}
|
114
116
|
#{ editor args }
|
117
|
+
#{ edit_buttons args }
|
115
118
|
}
|
116
119
|
end
|
117
120
|
end
|
118
|
-
|
121
|
+
|
119
122
|
def default_edit_rule_args args
|
120
123
|
args[:rule_context] ||= card
|
121
|
-
args[:set_context] ||= card.rule_set_name
|
124
|
+
args[:set_context] ||= card.rule_set_name
|
122
125
|
args[:set_selected] = params[:type_reload] ? card.rule_set_name : false
|
123
126
|
args[:set_options], args[:fallback_set] = args[:rule_context].set_options
|
124
|
-
|
127
|
+
|
125
128
|
args[:success] ||= {}
|
126
129
|
args[:success].reverse_merge!( {
|
127
130
|
:card => args[:rule_context],
|
@@ -130,18 +133,59 @@ format :html do
|
|
130
133
|
:item => 'view_rule'
|
131
134
|
})
|
132
135
|
end
|
133
|
-
|
134
|
-
|
136
|
+
|
137
|
+
view :related_edit_rule, :tags=>:unknown_ok do |args|
|
138
|
+
delete_button = if !card.new_card?
|
139
|
+
b_args = { :remote=>true, :class=>'rule-delete-button slotter', 'data-slot-selector'=>'.card-slot.related-view', :type=>'button' }
|
140
|
+
b_args[:href] = path :action=>:delete, :success=>args[:success]
|
141
|
+
if (fset = args[:fallback_set]) && (fcard = Card.fetch(fset))
|
142
|
+
b_args['data-confirm']="Deleting will revert to #{card.rule_setting_name} rule for #{fcard.label }"
|
143
|
+
end
|
144
|
+
%{<span class="rule-delete-section">#{ button_tag 'Delete', b_args }</span>}
|
145
|
+
end
|
146
|
+
|
147
|
+
frame do
|
148
|
+
form_for card, :url=>path(:action=>:update, :no_id=>true), :html=>
|
149
|
+
{:class=>"card-form card-rule-form" } do |form|
|
150
|
+
@form = form
|
151
|
+
%{
|
152
|
+
#{ hidden_success_formgroup args[:success]}
|
153
|
+
#{ editor args }
|
154
|
+
#{
|
155
|
+
wrap_with( :div, :class=>'button-area' ) do
|
156
|
+
[
|
157
|
+
delete_button,
|
158
|
+
button_tag( 'Submit', :class=>'rule-submit-button', :situation=>'primary' ),
|
159
|
+
card_link( args[:success][:id], :text=>'Cancel', :class=>'rule-cancel-button btn btn-default', :path_opts=>{:view=>args[:success][:view]} )
|
160
|
+
]
|
161
|
+
end
|
162
|
+
}
|
163
|
+
}
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def default_related_edit_rule_args args
|
169
|
+
args[:success] = {
|
170
|
+
:view => :open,
|
171
|
+
:item => nil,
|
172
|
+
:card => args[:parent] || card,
|
173
|
+
:id => (args[:parent] && args[:parent].cardname.url_key) || card.cardname.url_key
|
174
|
+
}
|
175
|
+
default_edit_rule_args args
|
176
|
+
end
|
177
|
+
|
178
|
+
|
135
179
|
# used keys for args:
|
136
180
|
# :success, :set_selected, :set_options, :rule_context
|
137
|
-
def editor args
|
181
|
+
def editor args
|
138
182
|
wrap_with( :div, :class=>'card-editor' ) do
|
139
183
|
[
|
140
184
|
(type_formgroup( args ) if card.right.rule_type_editable),
|
141
185
|
formgroup( 'rule', content_field( form, args.merge(:skip_rev_id=>true) ), :editor=>'content' ),
|
142
|
-
|
186
|
+
set_selection( args )
|
143
187
|
]
|
144
|
-
end
|
188
|
+
end
|
145
189
|
end
|
146
190
|
|
147
191
|
|
@@ -152,8 +196,8 @@ format :html do
|
|
152
196
|
'data-remote' => true
|
153
197
|
), :editor=>'type'
|
154
198
|
end
|
155
|
-
|
156
|
-
|
199
|
+
|
200
|
+
|
157
201
|
def hidden_success_formgroup args
|
158
202
|
%{
|
159
203
|
#{ hidden_field_tag 'success[id]', args[:id] || args[:card].name }
|
@@ -161,15 +205,24 @@ format :html do
|
|
161
205
|
#{ hidden_field_tag 'success[item]', args[:item] }
|
162
206
|
}
|
163
207
|
end
|
164
|
-
|
208
|
+
|
209
|
+
def set_selection args
|
210
|
+
wrap_with( :div, :class=>'row') do
|
211
|
+
[
|
212
|
+
set_formgroup( args ),
|
213
|
+
related_set_formgroup( args)
|
214
|
+
]
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
165
218
|
def set_formgroup args
|
166
219
|
current_set_key = card.new_card? ? Card[:all].cardname.key : card.rule_set_key # (should have a constant for this?)
|
167
220
|
tag = args[:rule_context].rule_user_setting_name
|
168
221
|
narrower_rules = []
|
169
|
-
option_list =
|
222
|
+
option_list =
|
170
223
|
wrap_each_with :li, :class=>'radio' do
|
171
224
|
args[:set_options].map do |set_name, state|
|
172
|
-
|
225
|
+
|
173
226
|
checked = ( args[:set_selected] == set_name or current_set_key && args[:set_options].length==1 )
|
174
227
|
is_current = (state == :current)
|
175
228
|
warning = if narrower_rules.present?
|
@@ -192,9 +245,29 @@ format :html do
|
|
192
245
|
end
|
193
246
|
|
194
247
|
end
|
195
|
-
formgroup 'set', "<ul>#{ option_list }</ul>", :editor => 'set'
|
248
|
+
formgroup 'set', "<ul>#{ option_list }</ul>", :editor => 'set', :class=>'col-xs-6'
|
249
|
+
end
|
250
|
+
|
251
|
+
def related_set_formgroup args
|
252
|
+
related_sets = args[:set_context] && Card.fetch(args[:set_context]).prototype.related_sets
|
253
|
+
return '' unless related_sets && related_sets.size > 0
|
254
|
+
tag = args[:rule_context].rule_user_setting_name
|
255
|
+
option_list =
|
256
|
+
wrap_each_with :li, :class=>'radio' do
|
257
|
+
related_sets.map do |set_name, label|
|
258
|
+
rule_name = "#{set_name}+#{tag}"
|
259
|
+
rule_card = Card.fetch rule_name, :skip_modules=>true
|
260
|
+
radio_button( :name, rule_name) + %{
|
261
|
+
<label class="set-label">
|
262
|
+
#{ card_link set_name, :text=>label, :target=>'wagn_set' }
|
263
|
+
#{"<em> #{card_link "#{set_name}+#{card.rule_user_setting_name}", :text=>"(exists)"}</em>" if rule_card}
|
264
|
+
</label>
|
265
|
+
}.html_safe
|
266
|
+
end
|
267
|
+
end
|
268
|
+
formgroup 'related set', "<ul>#{ option_list }</ul>", :editor => 'set', :class=>'col-xs-6'
|
196
269
|
end
|
197
|
-
|
270
|
+
|
198
271
|
def edit_buttons args
|
199
272
|
delete_button = if !card.new_card?
|
200
273
|
b_args = { :remote=>true, :class=>'rule-delete-button slotter', :type=>'button' }
|
@@ -210,14 +283,14 @@ format :html do
|
|
210
283
|
delete_button,
|
211
284
|
button_tag( 'Submit', :class=>'rule-submit-button', :situation=>'primary' ),
|
212
285
|
button_tag( 'Cancel', :class=>'rule-cancel-button slotter', :type=>'button',
|
213
|
-
:href=>cancel_path, :success=>true )
|
286
|
+
:href=>cancel_path, :success=>true )
|
214
287
|
]
|
215
288
|
end
|
216
289
|
end
|
217
|
-
|
290
|
+
|
218
291
|
=begin
|
219
292
|
view :edit_rule2 do |args|
|
220
|
-
|
293
|
+
|
221
294
|
card_form :update do
|
222
295
|
[
|
223
296
|
_optional_render( :type_formgroup, args ),
|
@@ -228,54 +301,8 @@ format :html do
|
|
228
301
|
end
|
229
302
|
end
|
230
303
|
=end
|
231
|
-
|
232
|
-
def default_follow_item_args args
|
233
|
-
args[:condition] ||= Env.params[:condition] || '*always'
|
234
|
-
end
|
235
|
-
|
236
|
-
view :follow_item, :tags=>:unknown_ok do |args|
|
237
|
-
if card.new_card? || !card.include_item?(args[:condition])
|
238
|
-
button_view = :add_button
|
239
|
-
form_opts = {:add_item=>args[:condition]}
|
240
|
-
else
|
241
|
-
button_view = :delete_button
|
242
|
-
form_opts = {:drop_item=>args[:condition]}
|
243
|
-
end
|
244
304
|
|
245
|
-
text = if (option_card = Card.fetch args[:condition])
|
246
|
-
option_card.description(card.rule_set)
|
247
|
-
else
|
248
|
-
card.rule_set.follow_label
|
249
|
-
end
|
250
|
-
link_target = if card.rule_set.tag.codename == 'self'
|
251
|
-
card.rule_set_name.left
|
252
|
-
else
|
253
|
-
"#{card.rule_set_name}+by name"
|
254
|
-
end
|
255
|
-
wrap do
|
256
|
-
card_form({:action=>:update, :name=>card.name, :success=>{:view=>:follow_item}},
|
257
|
-
:hidden=>{:condition=>args[:condition]}.merge(form_opts)) do
|
258
|
-
output [
|
259
|
-
_optional_render(button_view, args),
|
260
|
-
card_link( link_target, :text=>text)
|
261
|
-
]
|
262
|
-
end
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
view :delete_button do |args|
|
267
|
-
button_tag :type=>:submit, :class=>'btn-xs btn-item-delete btn-primary', 'aria-label'=>'Left Align' do
|
268
|
-
tag :span, :class=>"glyphicon glyphicon-ok", 'aria-hidden'=>"true"
|
269
|
-
end
|
270
305
|
|
271
|
-
end
|
272
|
-
|
273
|
-
view :add_button do |args|
|
274
|
-
button_tag :type=>:submit, :class=>'btn-xs btn-item-add', 'aria-label'=>'Left Align' do
|
275
|
-
tag :span, :class=>"glyphicon glyphicon-plus", 'aria-hidden'=>"true"
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
306
|
|
280
307
|
private
|
281
308
|
|
@@ -289,7 +316,7 @@ format :html do
|
|
289
316
|
end
|
290
317
|
else
|
291
318
|
card
|
292
|
-
end
|
319
|
+
end
|
293
320
|
end
|
294
321
|
|
295
322
|
end
|
@@ -339,15 +366,15 @@ end
|
|
339
366
|
#~~~~~~~~~~ determine the set options to which the user can apply the rule.
|
340
367
|
def set_options
|
341
368
|
|
342
|
-
first = new_card? ? 0 : set_prototype.set_names.index{|s| s.to_name.key == rule_set_key}
|
369
|
+
first = new_card? ? 0 : set_prototype.set_names.index{|s| s.to_name.key == rule_set_key}
|
343
370
|
rule_cnt = 0
|
344
371
|
res = []
|
345
372
|
fallback_set = nil
|
346
373
|
set_prototype.set_names[first..-1].each do |set_name|
|
347
374
|
if Card.exists?("#{set_name}+#{rule_user_setting_name}")
|
348
375
|
rule_cnt += 1
|
349
|
-
res << if rule_cnt == 1
|
350
|
-
[set_name,:current]
|
376
|
+
res << if rule_cnt == 1
|
377
|
+
[set_name,:current]
|
351
378
|
else
|
352
379
|
fallback_set ||= set_name
|
353
380
|
[set_name,:overwritten]
|
@@ -356,7 +383,7 @@ def set_options
|
|
356
383
|
res << (rule_cnt < 1 ? [set_name,:enabled] : [set_name,:disabled])
|
357
384
|
end
|
358
385
|
end
|
359
|
-
|
386
|
+
|
360
387
|
# fallback_set = if first > 0
|
361
388
|
# res[0..(first-1)].find do |set_name|
|
362
389
|
# Card.exists?("#{set_name}+#{rule_user_setting_name}")
|
@@ -370,7 +397,7 @@ def set_options
|
|
370
397
|
# (for anything more general, they must explicitly choose to "DELETE" the current one)
|
371
398
|
# the narrowest rule should be the one attached to the set being viewed. So, eg, if you're looking at the "*all plus" set, you shouldn't
|
372
399
|
# have the option to create rules based on arbitrary narrower sets, though narrower sets will always apply to whatever prototype we create
|
373
|
-
|
400
|
+
|
374
401
|
return res, fallback_set
|
375
402
|
end
|
376
403
|
|
@@ -384,7 +411,7 @@ end
|
|
384
411
|
|
385
412
|
|
386
413
|
|
387
|
-
#
|
414
|
+
#
|
388
415
|
|
389
416
|
=begin
|
390
417
|
|
@@ -396,7 +423,7 @@ def repair_set
|
|
396
423
|
include_set_modules
|
397
424
|
end
|
398
425
|
end
|
399
|
-
|
426
|
+
|
400
427
|
def method_missing method_id, *args
|
401
428
|
if !@set_repair_attempted and repair_set
|
402
429
|
send method_id, *args
|