card 1.15.7 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/card.gemspec +3 -2
- data/config/initializers/inflections.rb +1 -1
- data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +0 -1
- data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +12 -0
- data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +11 -0
- data/db/migrate_core_cards/20150611203506_rails_inflection_updates.rb +82 -0
- data/db/migrate_core_cards/20150627205133_fix_script_bootstrap_card_type.rb +7 -0
- data/db/migrate_core_cards/20150702130543_remove_edit_toolbar_pinned.rb +9 -0
- data/db/schema.rb +81 -81
- data/db/seed/new/card_actions.yml +12581 -1647
- data/db/seed/new/card_acts.yml +1 -1
- data/db/seed/new/card_changes.yml +39326 -7569
- data/db/seed/new/card_references.yml +518 -455
- data/db/seed/new/cards.yml +1547 -1291
- data/db/seed/test/fixtures/card_actions.yml +13700 -2717
- data/db/seed/test/fixtures/card_acts.yml +314 -272
- data/db/seed/test/fixtures/card_changes.yml +45409 -13573
- data/db/seed/test/fixtures/card_references.yml +1223 -1125
- data/db/seed/test/fixtures/cards.yml +2694 -2433
- data/db/seed/test/fixtures/file1.txt +1 -0
- data/db/seed/test/fixtures/file2.txt +1 -0
- data/db/version_core_cards.txt +1 -1
- data/lib/card.rb +23 -13
- data/lib/card/auth.rb +6 -6
- data/lib/card/cache.rb +24 -5
- data/lib/card/env.rb +10 -10
- data/lib/card/format.rb +29 -12
- data/lib/card/log.rb +5 -3
- data/lib/card/migration.rb +17 -41
- data/lib/card/name.rb +12 -0
- data/lib/card/reference.rb +11 -12
- data/lib/card/set.rb +59 -6
- data/lib/card/simplecov_helper.rb +6 -1
- data/lib/card/spec_helper.rb +3 -2
- data/lib/card/view_cache.rb +77 -0
- data/lib/cardio.rb +30 -22
- data/mod/01_core/format/html_format.rb +17 -9
- data/mod/01_core/layout/blank.html +1 -1
- data/mod/01_core/layout/default.html +6 -16
- data/mod/01_core/layout/modal.html +9 -0
- data/mod/01_core/layout/noside.html +5 -12
- data/mod/01_core/layout/simple.html +1 -1
- data/mod/01_core/set/all/collection.rb +57 -5
- data/mod/01_core/set/all/content.rb +5 -7
- data/mod/01_core/set/all/name.rb +8 -10
- data/mod/01_core/set/all/permissions.rb +1 -2
- data/mod/01_core/set/all/phases.rb +5 -13
- data/mod/01_core/set/all/references.rb +10 -10
- data/mod/01_core/set/all/rules.rb +2 -2
- data/mod/01_core/set/all/tracked_attributes.rb +5 -3
- data/mod/01_core/set/all/utils.rb +79 -9
- data/mod/01_core/set/all/view_cache.rb +9 -0
- data/mod/01_core/spec/format/html_format_spec.rb +2 -2
- data/mod/01_core/spec/set/all/collection_spec.rb +1 -1
- data/mod/01_history/lib/card/act.rb +3 -1
- data/mod/01_history/lib/card/action.rb +20 -12
- data/mod/01_history/lib/card/change.rb +12 -8
- data/mod/01_history/set/all/actions.rb +2 -2
- data/mod/01_history/set/all/content_history.rb +3 -2
- data/mod/01_history/set/all/history.rb +57 -19
- data/mod/02_basic_types/set/all/rss.rb +5 -6
- data/mod/{05_standard → 02_basic_types}/set/type/html.rb +4 -3
- data/mod/02_basic_types/set/type/plain_text.rb +1 -1
- data/mod/02_basic_types/set/type/pointer.rb +7 -4
- data/mod/02_basic_types/spec/set/type/pointer_spec.rb +21 -17
- data/mod/03_machines/lib/card/machine.rb +33 -31
- data/mod/03_machines/lib/javascript/script_card_menu.js.coffee +2 -10
- data/mod/03_machines/lib/javascript/wagn.js.coffee +10 -10
- data/mod/03_machines/lib/javascript/wagn_mod.js.coffee +87 -40
- data/mod/03_machines/lib/stylesheets/style_cards.scss +26 -28
- data/mod/03_machines/set/right/machine_output.rb +3 -3
- data/mod/03_machines/set/type/coffee_script.rb +6 -6
- data/mod/03_machines/set/type/css.rb +1 -1
- data/mod/03_machines/set/type/java_script.rb +5 -6
- data/mod/03_machines/spec/lib/shared_machine_examples.rb +3 -1
- data/mod/03_machines/spec/set/type/scss_spec.rb +9 -10
- data/mod/04_settings/lib/card/setting.rb +16 -14
- data/mod/04_settings/set/right/structure.rb +6 -0
- data/mod/04_settings/set/self/add_help.rb +1 -1
- data/mod/04_settings/set/self/autoname.rb +1 -1
- data/mod/04_settings/set/self/captcha.rb +1 -1
- data/mod/04_settings/set/self/default.rb +1 -1
- data/mod/04_settings/set/self/help.rb +1 -1
- data/mod/04_settings/set/self/input.rb +1 -1
- data/mod/04_settings/set/self/layout.rb +1 -1
- data/mod/04_settings/set/self/on_create.rb +1 -1
- data/mod/04_settings/set/self/on_delete.rb +1 -1
- data/mod/04_settings/set/self/on_update.rb +1 -1
- data/mod/04_settings/set/self/options.rb +1 -1
- data/mod/04_settings/set/self/options_label.rb +1 -1
- data/mod/04_settings/set/self/script.rb +1 -1
- data/mod/04_settings/set/self/structure.rb +1 -1
- data/mod/04_settings/set/self/style.rb +1 -1
- data/mod/04_settings/set/self/table_of_contents.rb +1 -1
- data/mod/04_settings/set/self/thanks.rb +1 -1
- data/mod/05_email/set/all/follow.rb +3 -21
- data/mod/05_email/set/all/notify.rb +20 -4
- data/mod/05_email/set/right/follow.rb +16 -18
- data/mod/05_email/set/self/follow.rb +1 -1
- data/mod/05_email/spec/set/all/follow_spec.rb +6 -13
- data/mod/05_standard/set/all/attach.rb +23 -9
- data/mod/05_standard/set/all/error.rb +5 -7
- data/mod/05_standard/set/all/event_viz.rb +10 -6
- data/mod/05_standard/set/all/links.rb +37 -13
- data/mod/05_standard/set/all/rich_html/content.rb +46 -18
- data/mod/05_standard/set/all/rich_html/editing.rb +29 -25
- data/mod/05_standard/set/all/rich_html/form.rb +17 -10
- data/mod/05_standard/set/all/rich_html/header.rb +26 -4
- data/mod/05_standard/set/all/rich_html/menu.rb +17 -34
- data/mod/05_standard/set/all/rich_html/modal.rb +50 -12
- data/mod/05_standard/set/all/rich_html/toolbar.rb +178 -186
- data/mod/05_standard/set/all/rich_html/wrapper.rb +44 -21
- data/mod/05_standard/set/rstar/rules.rb +43 -53
- data/mod/05_standard/set/self/all.rb +2 -1
- data/mod/05_standard/set/self/head.rb +2 -2
- data/mod/05_standard/set/self/signin.rb +18 -18
- data/mod/05_standard/set/self/stats.rb +14 -2
- data/mod/05_standard/set/type/search_type.rb +9 -4
- data/mod/05_standard/set/type/session.rb +12 -7
- data/mod/05_standard/set/type/set.rb +135 -18
- data/mod/05_standard/spec/chunk/include_spec.rb +15 -16
- data/mod/05_standard/spec/set/all/account_spec.rb +21 -21
- data/mod/05_standard/spec/set/all/event_viz_spec.rb +7 -7
- data/mod/05_standard/spec/set/all/history_spec.rb +54 -24
- data/mod/05_standard/spec/set/all/rich_html/editing_spec.rb +42 -40
- data/mod/05_standard/spec/set/rstar/rules_spec.rb +1 -1
- data/mod/05_standard/spec/set/type/search_type_spec.rb +9 -1
- data/mod/05_standard/spec/set/type/signup_spec.rb +42 -42
- data/mod/06_bootstrap/lib/stylesheets/bootstrap_cards.scss +6 -0
- data/mod/06_bootstrap/set/all/bootstrap/form.rb +4 -5
- data/mod/06_bootstrap/set/all/bootstrap/helper.rb +145 -0
- data/mod/06_bootstrap/set/all/rich_bootstrap.rb +0 -59
- data/spec/lib/card/action_spec.rb +1 -1
- data/spec/lib/card/log_spec.rb +7 -7
- data/spec/models/card/cardtype_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +31 -6
- data/mod/04_settings/set/self/comment.rb +0 -2
@@ -4,10 +4,10 @@ format :html do
|
|
4
4
|
if args[:structure] || card.structure
|
5
5
|
# multi-card editing
|
6
6
|
|
7
|
-
if args[:core_edit] #need better name
|
7
|
+
if args[:core_edit] #need better name
|
8
8
|
_render_core args
|
9
9
|
else
|
10
|
-
process_relative_tags args
|
10
|
+
process_relative_tags :optional_toolbar=>:hide, :structure=>args[:structure]
|
11
11
|
end
|
12
12
|
|
13
13
|
else
|
@@ -25,11 +25,14 @@ format :html do
|
|
25
25
|
|
26
26
|
|
27
27
|
def form_for_multi
|
28
|
-
block = Proc.new {}
|
29
|
-
builder = ActionView::Base.default_form_builder
|
30
28
|
card.name = card.name.gsub(/^#{Regexp.escape(root.card.name)}\+/, '+') if root.card.new_card? ##FIXME -- need to match other relative inclusions.
|
31
29
|
|
32
|
-
|
30
|
+
# doesn't work anymore in Rails 4
|
31
|
+
# TODO -- check whether forms work with the new instantiate_builder call
|
32
|
+
# block = Proc.new {}
|
33
|
+
# builder = ActionView::Base.default_form_builder
|
34
|
+
# builder.new("card[subcards][#{card.relative_name}]", card, template, {}, block)
|
35
|
+
builder = instantiate_builder("card[subcards][#{card.relative_name}]", card, {})
|
33
36
|
end
|
34
37
|
|
35
38
|
def form
|
@@ -188,16 +191,20 @@ format :html do
|
|
188
191
|
content = content_field eform, args.merge( :nested=>true )
|
189
192
|
opts = { :editor=>'content', :help=>true, :class=>'card-editor' }
|
190
193
|
|
191
|
-
content += raw( "\n #{ eform.hidden_field :type_id }" )
|
192
|
-
opts[:class] += " RIGHT-#{ card.cardname.tag_name.safe_key }"
|
194
|
+
content += raw( "\n #{ eform.hidden_field :type_id }" ) if card.new_card?
|
195
|
+
opts[:class] += " RIGHT-#{ card.cardname.tag_name.safe_key }" if card.cardname.junction?
|
193
196
|
|
194
197
|
formgroup fancy_title( args[:title] ), content, opts
|
195
198
|
end
|
196
199
|
|
197
200
|
def process_relative_tags args
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
+
nested_fields(args).map do |chunk|
|
202
|
+
nested_card = fetch_nested_card chunk.options
|
203
|
+
nest nested_card, chunk.options.reverse_merge(args)
|
204
|
+
end.join "\n"
|
205
|
+
# _render_raw(args).scan( /\{\{\s*\+[^\}]*\}\}/ ).map do |inc| #fixme - wrong place for regexp!
|
206
|
+
# process_content( inc ).strip
|
207
|
+
# end.join
|
201
208
|
end
|
202
209
|
|
203
210
|
# form helpers
|
@@ -1,19 +1,41 @@
|
|
1
1
|
format :html do
|
2
2
|
|
3
3
|
view :header do |args|
|
4
|
+
|
4
5
|
%{
|
5
6
|
<div class="card-header #{ args[:header_class] }">
|
6
7
|
<div class="card-header-title #{ args[:title_class] }">
|
7
8
|
#{ _optional_render :toggle, args, :hide }
|
8
9
|
#{ _optional_render :title, args }
|
9
10
|
</div>
|
11
|
+
#{ _optional_render :type_info, args, :hide }
|
12
|
+
</div>
|
13
|
+
#{ _optional_render :toolbar, args, :hide }
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def default_header_args args
|
18
|
+
if @slot_view == :open
|
19
|
+
if (show_view?(:toolbar,args.merge(:default_visibility=>:hide)) || toolbar_pinned?) && card.type_code != :basic
|
20
|
+
args[:optional_type_info] ||= :show
|
21
|
+
end
|
22
|
+
if toolbar_pinned?
|
23
|
+
args[:optional_toolbar] ||= :show
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
view :subheader do |args|
|
29
|
+
args[:subheader] ||= toolbar_view_title(@slot_view) || _render_title(args)
|
30
|
+
%{
|
31
|
+
<div class="card-subheader navbar-inverse btn-primary active">
|
32
|
+
#{ args[:subheader] }
|
33
|
+
#{ autosaved_draft_link if card.drafts.present? && @slot_view == :edit }
|
10
34
|
</div>
|
11
|
-
#{ _optional_render :toolbar, args, (toolbar_pinned? ? :show : :hide) }
|
12
|
-
#{ _optional_render :edit_toolbar, args, (edit_toolbar_pinned? ? :show : :hide)}
|
13
|
-
#{ _optional_render :account_toolbar, args, :hide}
|
14
35
|
}
|
15
36
|
end
|
16
37
|
|
38
|
+
|
17
39
|
view :toggle do |args|
|
18
40
|
verb, adjective, direction = ( args[:toggle_mode] == :close ? %w{ open open expand } : %w{ close closed collapse-down } )
|
19
41
|
|
@@ -41,7 +63,7 @@ format :html do
|
|
41
63
|
end
|
42
64
|
|
43
65
|
def show_follow?
|
44
|
-
Auth.signed_in? && !card.new_card?
|
66
|
+
Auth.signed_in? && !card.new_card? && card.followable?
|
45
67
|
end
|
46
68
|
|
47
69
|
def structure_editable?
|
@@ -6,7 +6,7 @@ format :html do
|
|
6
6
|
[
|
7
7
|
_optional_render(:horizontal_menu, args, :hide),
|
8
8
|
_render_menu_link(args),
|
9
|
-
_render_modal_slot(args)
|
9
|
+
_render_modal_slot(args.merge(:modal_id=>card.cardname.safe_key))
|
10
10
|
]
|
11
11
|
end
|
12
12
|
end
|
@@ -32,7 +32,7 @@ format :html do
|
|
32
32
|
[
|
33
33
|
content_tag( :span, "<a href='#'>#{ glyphicon args[:menu_icon] }</a>".html_safe,
|
34
34
|
:class=>'open-menu dropdown-toggle', 'data-toggle'=>'dropdown', 'aria-expanded'=>'false'),
|
35
|
-
content_tag( :ul, items.html_safe, :class=>'dropdown-menu', :role=>'menu')
|
35
|
+
content_tag( :ul, items.html_safe, :class=>'dropdown-menu', :role=>'menu'),
|
36
36
|
]
|
37
37
|
end
|
38
38
|
end
|
@@ -47,7 +47,7 @@ format :html do
|
|
47
47
|
menu_items = []
|
48
48
|
menu_items << menu_edit_link(args) if args[:show_menu_item][:edit]
|
49
49
|
menu_items << menu_discuss_link(args) if args[:show_menu_item][:discuss]
|
50
|
-
menu_items <<
|
50
|
+
menu_items << _render_follow_link(args.merge(:icon=>true)) if args[:show_menu_item][:follow]
|
51
51
|
menu_items << menu_page_link(args) if args[:show_menu_item][:page]
|
52
52
|
menu_items << menu_rules_link(args) if args[:show_menu_item][:rules]
|
53
53
|
menu_items << menu_account_link(args) if args[:show_menu_item][:account]
|
@@ -56,11 +56,8 @@ format :html do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def menu_edit_link args
|
59
|
-
|
60
|
-
|
61
|
-
:path_opts=>{ :slot=>{:show=>'edit_toolbar', :hide=>'type_link'}}
|
62
|
-
}
|
63
|
-
menu_item('edit', 'edit', opts, args[:html_args] )
|
59
|
+
path_opts = { :view=>:edit }
|
60
|
+
menu_item('edit', 'edit', path_opts, args[:html_args] )
|
64
61
|
end
|
65
62
|
|
66
63
|
def menu_discuss_link args
|
@@ -68,7 +65,7 @@ format :html do
|
|
68
65
|
end
|
69
66
|
|
70
67
|
def menu_page_link args
|
71
|
-
menu_item('page', 'new-window', {:
|
68
|
+
menu_item('page', 'new-window', {:card=>card}, args[:html_args])
|
72
69
|
end
|
73
70
|
|
74
71
|
def menu_rules_link args
|
@@ -76,39 +73,25 @@ format :html do
|
|
76
73
|
end
|
77
74
|
|
78
75
|
def menu_account_link args
|
79
|
-
|
80
|
-
|
81
|
-
menu_item('account', 'user',opts, args[:html_args])
|
76
|
+
path_opts = { :related=>{:name=>'+*account',:view=>:edit} }
|
77
|
+
menu_item('account', 'user', path_opts, args[:html_args])
|
82
78
|
end
|
83
79
|
|
84
80
|
def menu_more_link args
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
path_opts = {
|
82
|
+
:view=>args[:home_view] || :open,
|
83
|
+
:slot=>{:show=>:toolbar}
|
84
|
+
}
|
85
|
+
menu_item('', 'option-horizontal', path_opts, args[:html_args])
|
88
86
|
end
|
89
87
|
|
90
|
-
|
88
|
+
|
89
|
+
def menu_item text, icon, target, html_args={}
|
91
90
|
link_text = "#{glyphicon(icon)}<span class='menu-item-label'>#{text}</span>".html_safe
|
92
|
-
target
|
93
|
-
if target[:view]
|
94
|
-
view_link(link_text, target.delete(:view), target)
|
95
|
-
elsif target[:page]
|
96
|
-
card_link target.delete(:page), target.merge(:text=>link_text)
|
97
|
-
elsif target[:related]
|
98
|
-
target[:path_opts] ||= {}
|
99
|
-
|
100
|
-
target[:path_opts][:related] =
|
101
|
-
if target[:related].kind_of? String
|
102
|
-
{:name=>"+#{target.delete(:related)}"}
|
103
|
-
else
|
104
|
-
target[:related]
|
105
|
-
end
|
106
|
-
view_link link_text, :related, target
|
107
|
-
else
|
108
|
-
link_to link_text, {:action=>target.delete(:action)}, target
|
109
|
-
end
|
91
|
+
smart_link link_text, target, html_args || {}
|
110
92
|
end
|
111
93
|
|
94
|
+
|
112
95
|
def default_menu_link_args args
|
113
96
|
args[:menu_icon] ||= 'cog'
|
114
97
|
end
|
@@ -1,28 +1,64 @@
|
|
1
1
|
format :html do
|
2
|
-
def default_modal_content_args args
|
3
|
-
args[:buttons] ||= button_tag 'Close', 'data-dismiss'=>'modal'
|
4
|
-
end
|
5
2
|
|
6
|
-
view :modal_link do |args|
|
7
|
-
args[:html_args] ||= {}
|
8
|
-
args[:html_args].merge!('data-target'=>"#modal-#{card.cardname.safe_key}", 'data-toggle'=>'modal')
|
9
|
-
link_to(args[:text] || _render_title(args), path(:view=>:modal_content), args[:html_args])
|
10
|
-
end
|
11
3
|
|
12
|
-
|
13
|
-
|
4
|
+
|
5
|
+
|
6
|
+
view :modal_link do |args|
|
7
|
+
path_opts = args[:path_opts] || {}
|
8
|
+
path_opts.merge!(:layout=>:modal)
|
9
|
+
html_args = args[:html_args] || {}
|
10
|
+
#html_args.merge!('data-target'=>"#modal-#{card.cardname.safe_key}#{args[:modal_slot_id_postfix]}",
|
11
|
+
html_args.merge!('data-target'=>"#modal-main-slot",
|
12
|
+
'data-toggle'=>'modal')
|
13
|
+
link_to(args[:text] || _render_title(args), path(path_opts), html_args)
|
14
14
|
end
|
15
15
|
|
16
16
|
view :modal_slot do |args|
|
17
|
-
wrap_with(:div, :class=>'modal fade', :role=>'dialog', :id=>"modal-#{card.cardname.safe_key}") do
|
17
|
+
#wrap_with(:div, :class=>'modal fade', :role=>'dialog', :id=>"modal-#{card.cardname.safe_key}#{args[:modal_slot_id_postfix]}") do
|
18
|
+
id = "modal-"
|
19
|
+
id += (args[:modal_id] || 'main-slot')
|
20
|
+
wrap_with(:div, :class=>'modal fade', :role=>'dialog', :id=>id) do
|
18
21
|
wrap_with(:div, :class=>'modal-dialog') do
|
19
22
|
content_tag :div, :class=>'modal-content' do
|
20
|
-
|
23
|
+
''
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
29
|
+
|
30
|
+
view :modal_menu, :tags=>:unknown_ok do |args|
|
31
|
+
popout_params = {}
|
32
|
+
popout_params[:view] = params[:view] if params[:view]
|
33
|
+
# we probably want to pass on a lot more params than just view, but not all of them
|
34
|
+
# (eg we don't want layout, id, controller...)
|
35
|
+
wrap_with :div, :class=>'modal-menu' do
|
36
|
+
[
|
37
|
+
link_to( glyphicon('remove'), '', :class=>'close-modal pull-right close', 'data-dismiss'=>'modal'),
|
38
|
+
link_to( glyphicon('new-window'), popout_params, :class=>'pop-out-modal pull-right close ' )
|
39
|
+
]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
view :modal_footer, :tags=>:unknown_ok do |args|
|
44
|
+
args[:buttons] || ''
|
45
|
+
end
|
46
|
+
|
47
|
+
def default_modal_footer_args args
|
48
|
+
args[:buttons] ||= button_tag 'Close', :class=>'btn-xs close-modal pull-right', 'data-dismiss'=>'modal'
|
49
|
+
end
|
50
|
+
|
51
|
+
=begin
|
52
|
+
def default_modal_content_args args
|
53
|
+
args[:buttons] ||= button_tag 'Close', 'data-dismiss'=>'modal'
|
54
|
+
end
|
55
|
+
|
56
|
+
view :modal_link_and_dialog do |args|
|
57
|
+
_render_modal_link(args) + _render_modal(args)
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
|
26
62
|
# use modal_content for ajax calls to fill a modal_slot with content
|
27
63
|
view :modal_content do |args|
|
28
64
|
output [
|
@@ -51,4 +87,6 @@ format :html do
|
|
51
87
|
view :modal do |args|
|
52
88
|
_render_modal_slot args.merge(:optional_modal_content=>:show)
|
53
89
|
end
|
90
|
+
=end
|
91
|
+
|
54
92
|
end
|
@@ -1,130 +1,181 @@
|
|
1
1
|
|
2
2
|
format :html do
|
3
|
-
def edit_toolbar_pinned?
|
4
|
-
Card[:edit_toolbar_pinned].content == 'true'
|
5
|
-
end
|
6
|
-
|
7
3
|
def toolbar_pinned?
|
8
4
|
Card[:toolbar_pinned].content == 'true'
|
9
5
|
end
|
10
6
|
|
11
7
|
view :toolbar do |args|
|
12
8
|
navbar "toolbar-#{card.cardname.safe_key}-#{args[:home_view]}", :toggle_align=>:left, :class=>"slotter toolbar", :navbar_type=>'inverse',
|
13
|
-
:collapsed_content=>close_link('pull-right visible-xs') do
|
9
|
+
:collapsed_content=>close_link(args.merge(:class=>'pull-right visible-xs')) do
|
14
10
|
[
|
15
|
-
(
|
16
|
-
|
11
|
+
close_link(args.merge(:class=>'hidden-xs navbar-right')),
|
12
|
+
(wrap_with(:form, :class=>'navbar-form navbar-left') do
|
13
|
+
[
|
14
|
+
(account_split_button(args) if card.accountable?),
|
15
|
+
engage_split_button(args),
|
16
|
+
rules_split_button(args),
|
17
|
+
edit_split_button(args),
|
18
|
+
]
|
17
19
|
end),
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
#{_optional_render :toolbar_buttons, args, :show}
|
24
|
-
</div>
|
25
|
-
</form>
|
26
|
-
}.html_safe,
|
20
|
+
(wrap_with(:form, :class=>'navbar-form navbar-right') do
|
21
|
+
content_tag :div, :class=>'form-group' do
|
22
|
+
_optional_render(:toolbar_buttons, args, :show)
|
23
|
+
end
|
24
|
+
end)
|
27
25
|
]
|
28
26
|
end
|
29
27
|
end
|
28
|
+
def default_toolbar_args args
|
29
|
+
args[:nested_fields] = nested_fields(args)
|
30
|
+
args[:active_toolbar_button] ||= active_toolbar_button @slot_view, args
|
31
|
+
end
|
30
32
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
def active_toolbar_button active_view, args
|
34
|
+
case active_view
|
35
|
+
when :follow, :editors
|
36
|
+
'engage'
|
37
|
+
when :edit_rules, :edit_nest_rules
|
38
|
+
'rules'
|
39
|
+
when :edit, :edit_name, :edit_type, :edit_structure, :edit_nests, :history
|
40
|
+
'edit'
|
41
|
+
when :related
|
42
|
+
if args[:related_card] && (tag=args[:related_card].tag)
|
43
|
+
case tag.codename
|
44
|
+
when 'discussion', 'editors'
|
45
|
+
'engage'
|
46
|
+
when 'account', 'roles', 'edited', 'created', 'follow'
|
47
|
+
'account'
|
48
|
+
else
|
49
|
+
'rules'
|
50
|
+
end
|
51
|
+
end
|
37
52
|
end
|
38
53
|
end
|
39
54
|
|
40
|
-
view :edit_toolbar do |args|
|
41
|
-
id = "edit-toolbar-#{card.cardname.safe_key}-#{args[:home_view]}"
|
42
|
-
navbar_right = ''
|
43
|
-
navbar_right += edit_toolbar_autosave_link if card.drafts.present?
|
44
|
-
navbar_right += edit_toolbar_pin_link
|
45
|
-
navbar_right += edit_toolbar_close_link
|
46
55
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
[
|
53
|
-
_optional_render(:edit_content_button, args, :show),
|
54
|
-
_optional_render(:edit_name_button, args, :show),
|
55
|
-
_optional_render(:edit_type_button, args, :show),
|
56
|
-
_optional_render(:edit_rules_button, args, :show),
|
57
|
-
_optional_render(:edit_nests_button, args, :show),
|
58
|
-
]
|
59
|
-
end),
|
60
|
-
content_tag( :ul, navbar_right.html_safe, :class=>'nav navbar-nav navbar-right' )
|
61
|
-
]
|
56
|
+
def toolbar_view_title view
|
57
|
+
if view == :edit_rules
|
58
|
+
current_set_card.name
|
59
|
+
else
|
60
|
+
{:edit=>'content', :edit_name=>'name', :edit_type=>'type', :edit_structure=>'structure', :edit_nests=>'nests', :history=>'history', :common_rules=>'common', :recent_rules=>'recent', :grouped_rules=>'all', :edit_nest_rules=>'nests'}[view]
|
62
61
|
end
|
63
62
|
end
|
64
63
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
64
|
+
def engage_split_button args
|
65
|
+
discuss = smart_link 'discuss', { :related=>Card[:discussion].key }
|
66
|
+
editors = smart_link 'editors', { :related=>Card[:editors].key }
|
67
|
+
toolbar_split_button 'engage', { :related=>Card[:discussion].key }, args do
|
68
|
+
{
|
69
|
+
:discuss => discuss,
|
70
|
+
:follow =>_render_follow_link(args),
|
71
|
+
:editors => editors
|
72
|
+
}
|
73
|
+
end
|
74
|
+
end
|
75
|
+
def rules_split_button args
|
76
|
+
recent = smart_link 'recent', {:view => :edit_rules, :slot=>{:rule_view=>:recent_rules}}
|
77
|
+
common = smart_link 'common', {:view => :edit_rules, :slot=>{:rule_view=>:common_rules}}
|
78
|
+
group = smart_link 'by group', {:view => :edit_rules, :slot=>{:rule_view=>:grouped_rules}}
|
79
|
+
all = smart_link 'by name', {:view => :edit_rules, :slot=>{:rule_view=>:all_rules}}
|
80
|
+
nests = smart_link 'nests', {:view => :edit_nest_rules, :slot=>{:rule_view=>:field_related_rules}}
|
81
|
+
toolbar_split_button 'rules', {:view => :edit_rules }, args do
|
82
|
+
{
|
83
|
+
:common_rules => common,
|
84
|
+
:grouped_rules => group,
|
85
|
+
:all_rules => all,
|
86
|
+
:separator => (separator if args[:nested_fields].present?),
|
87
|
+
:recent_rules => (recent if recently_edited_settings?),
|
88
|
+
:edit_nest_rules => (nests if args[:nested_fields].present?)
|
89
|
+
}
|
90
|
+
end
|
91
|
+
end
|
92
|
+
def edit_split_button args
|
93
|
+
toolbar_split_button 'edit', {:view=>:edit}, args do
|
94
|
+
{
|
95
|
+
:edit => _render_edit_content_link(args),
|
96
|
+
:edit_nests => (_render_edit_nests_link if !card.structure && args[:nested_fields].present?),
|
97
|
+
:edit_structure => (smart_link 'structure', {:view => :edit_structure} if structure_editable?),
|
98
|
+
:edit_name => _render_edit_name_link,
|
99
|
+
:edit_type => _render_edit_type_link,
|
100
|
+
:separator => separator,
|
101
|
+
:history => (_render_history_link if card.history?)
|
102
|
+
}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
def account_split_button args
|
106
|
+
toolbar_split_button 'account', {:related=>Card[:account].key}, args do
|
107
|
+
{
|
108
|
+
:account => smart_link('details',{:related=>{:name=>"#{card.name}+#{Card[:account].key}", :view=>:edit}}),
|
109
|
+
:roles => smart_link('roles', {:related=>Card[:roles].key}),
|
110
|
+
:created => smart_link('created',{:related=>Card[:created].key}),
|
111
|
+
:edited => smart_link('edited', {:related=>Card[:edited].key}),
|
112
|
+
:follow => smart_link('follow', {:related=>Card[:follow].key})
|
113
|
+
}
|
80
114
|
end
|
81
115
|
end
|
82
116
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
117
|
+
|
118
|
+
def toolbar_split_button name, button_args, args
|
119
|
+
button = button_link name, button_args, :class=>('active' if args[:active_toolbar_button] == name)
|
120
|
+
active_item =
|
121
|
+
if @slot_view == :related
|
122
|
+
if args[:rule_view]
|
123
|
+
args[:rule_view].to_sym
|
124
|
+
elsif args[:related_card] && (r = args[:related_card].right) && (cn = r.codename)
|
125
|
+
cn.to_sym
|
126
|
+
end
|
127
|
+
else
|
128
|
+
@slot_view
|
129
|
+
end
|
130
|
+
split_button button, args.merge(:active_item=>active_item) do
|
131
|
+
yield
|
90
132
|
end
|
91
133
|
end
|
92
134
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
]
|
135
|
+
|
136
|
+
def close_link args
|
137
|
+
link_opts = {:title=>'cancel'}
|
138
|
+
if args[:subslot]
|
139
|
+
link_opts[:path_opts] = {:slot=>{:subframe=>true}}
|
99
140
|
end
|
141
|
+
|
142
|
+
link = view_link glyphicon('remove'), :home, link_opts
|
143
|
+
css_class = ['nav navbar-nav', args[:class]].compact.join "\n"
|
144
|
+
list_tag link, :class=>css_class
|
100
145
|
end
|
101
146
|
|
102
|
-
view :
|
147
|
+
view :toolbar_buttons do |args|
|
103
148
|
wrap_with(:div, :class=>'btn-group') do
|
104
149
|
[
|
105
|
-
_optional_render(:
|
106
|
-
|
107
|
-
_optional_render(:
|
108
|
-
_optional_render(:
|
150
|
+
_optional_render(:related_button, args, :show),
|
151
|
+
toolbar_pin_button,
|
152
|
+
_optional_render(:delete_button, args, (card.ok?(:delete) ? :show : :hide)),
|
153
|
+
_optional_render(:refresh_button, args, :hide),
|
154
|
+
_optional_render(:history_button, args, :hide),
|
109
155
|
]
|
110
156
|
end
|
111
157
|
end
|
112
158
|
|
113
|
-
|
114
|
-
toolbar_button('rules', 'wrench', 'hidden-xs hidden-sm', :view=>'options')
|
115
|
-
end
|
159
|
+
|
116
160
|
view :related_button do |args|
|
117
161
|
path_opts = {:slot=>{:show=>:toolbar}}
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
162
|
+
page_link =
|
163
|
+
if main?
|
164
|
+
menu_item ' refresh', 'refresh', path_opts.merge(:card=>card), args[:html_args]
|
165
|
+
else
|
166
|
+
menu_item ' page', 'new-window', path_opts.merge(:card=>card), args[:html_args]
|
167
|
+
end
|
123
168
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
169
|
+
dropdown_button '', :class=>'related', :icon=>'eye-open' do
|
170
|
+
[
|
171
|
+
page_link,
|
172
|
+
separator,
|
173
|
+
menu_item(' children', 'baby-formula', path_opts.merge(:related=>'*children')),
|
174
|
+
menu_item(' mates', 'bed', path_opts.merge(:related=>'*mates')),
|
175
|
+
menu_item(' references out', 'log-out', path_opts.merge(:related=>'*refers_to')),
|
176
|
+
menu_item(' references in', 'log-in', path_opts.merge(:related=>'*referred_to_by'))
|
177
|
+
]
|
178
|
+
end
|
128
179
|
end
|
129
180
|
view :delete_button do |args|
|
130
181
|
toolbar_button('delete', 'trash', 'hidden-xs hidden-sm hidden-md hidden-lg',
|
@@ -135,42 +186,14 @@ format :html do
|
|
135
186
|
:'data-confirm' => "Are you sure you want to delete #{card.name}?"
|
136
187
|
)
|
137
188
|
end
|
138
|
-
view :refresh_button do |args|
|
139
|
-
toolbar_button('refresh', 'refresh', 'hidden-xs hidden-sm hidden-md hidden-lg', :view=>args[:home_view] || :open)
|
140
|
-
end
|
141
|
-
|
142
|
-
view :edit_content_button do |args|
|
143
|
-
pill_view_link 'content', :edit, args
|
144
|
-
end
|
145
|
-
view :edit_name_button do |args|
|
146
|
-
pill_view_link 'name',:edit_name, args
|
147
|
-
end
|
148
|
-
view :edit_type_button do |args|
|
149
|
-
pill_view_link 'type', :edit_type, args
|
150
|
-
end
|
151
|
-
view :edit_rules_button do |args|
|
152
|
-
if structure_editable?
|
153
|
-
active = [:edit_rules, :edit_structure].include? args.delete(:active_toolbar_view)
|
154
|
-
rule_items = pill_view_link 'structure', :edit_structure, args
|
155
|
-
rule_items += pill_view_link '...', :edit_rules, args
|
156
|
-
pill_dropdown 'rules', rule_items, active
|
157
|
-
else
|
158
|
-
pill_view_link 'rules', :edit_rules, args
|
159
|
-
end
|
160
|
-
end
|
161
|
-
view :edit_nests_button do |args|
|
162
|
-
if (nests = card.fetch(:trait=>:includes)) && nests.item_names.present?
|
163
|
-
pill_view_link 'nests', :edit_nests, args
|
164
|
-
end
|
165
|
-
end
|
166
189
|
|
167
|
-
|
168
|
-
|
169
|
-
view_link(glyphicon('edit'),'edit_type', :class=>'navbar-link slotter', 'data-toggle'=>'tooltip', :title=>'edit type')
|
190
|
+
def toolbar_pin_button
|
191
|
+
button_tag glyphicon('pushpin'), :situation=>:primary, :remote=>true, :title=>"#{'un' if toolbar_pinned?}pin", :class=>"toolbar-pin #{'in' unless toolbar_pinned?}active"
|
170
192
|
end
|
171
193
|
|
172
|
-
def toolbar_button text, symbol, hide, tag_args
|
173
|
-
|
194
|
+
def toolbar_button text, symbol, hide=nil, tag_args={}
|
195
|
+
hide ||= 'hidden-xs hidden-sm hidden-md hidden-lg'
|
196
|
+
tag_args[:class] = [ tag_args[:class], 'btn btn-primary' ].compact * ' '
|
174
197
|
tag_args[:title] ||= text
|
175
198
|
link_text = "#{glyphicon symbol}<span class='menu-item-label #{hide}'>#{text}</span>"
|
176
199
|
|
@@ -181,86 +204,55 @@ format :html do
|
|
181
204
|
view_link link_text, viewname, tag_args
|
182
205
|
else
|
183
206
|
path_opts = tag_args.delete(:path_opts) || {}
|
184
|
-
path_opts.merge! :action=>tag_args.delete(:action)
|
207
|
+
path_opts.merge! :action=>tag_args.delete(:action) if tag_args[:action]
|
185
208
|
link_to link_text, path_opts, tag_args
|
186
209
|
end
|
187
210
|
end
|
188
211
|
|
189
|
-
def
|
190
|
-
|
191
|
-
opts = {:class=>'slotter', :role=>'pill'}
|
192
|
-
li_pill view_link(name, view, opts), active_view == view
|
212
|
+
def autosaved_draft_link
|
213
|
+
view_link('autosaved draft', :edit, :path_opts=>{:edit_draft=>true, :slot=>{:show=>:edit_toolbar}}, :class=>'navbar-link slotter pull-right')
|
193
214
|
end
|
194
215
|
|
195
|
-
def account_pill name, active=false, path_opts={}
|
196
|
-
opts = {:text=>name, :role=>'pill', :remote=>true, :path_opts=>path_opts}
|
197
|
-
opts[:path_opts][:slot] ||= {}
|
198
|
-
opts[:path_opts][:slot][:hide] = "toggle #{opts[:path_opts][:slot][:hide]}"
|
199
|
-
li_pill card_link("#{card.name}+*#{name}", opts), active
|
200
|
-
end
|
201
216
|
|
202
|
-
def li_pill content, active
|
203
|
-
"<li role='presentation' #{"class='active'" if active}>#{content}</li>"
|
204
|
-
end
|
205
217
|
|
206
|
-
def
|
207
|
-
|
208
|
-
<li role="presentation" class="dropdown #{'active' if active}">
|
209
|
-
<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-expanded="false">
|
210
|
-
#{name} <span class="caret"></span>
|
211
|
-
</a>
|
212
|
-
#{ dropdown_list items }
|
213
|
-
</li>
|
214
|
-
}
|
218
|
+
def default_edit_content_link_args args
|
219
|
+
args[:title] ||= 'content'
|
215
220
|
end
|
216
|
-
|
217
|
-
|
218
|
-
%{
|
219
|
-
<div class="btn-group" role="group">
|
220
|
-
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" title="#{name}" aria-expanded="false">
|
221
|
-
#{glyphicon icon} #{name}
|
222
|
-
<span class="caret"></span>
|
223
|
-
</button>
|
224
|
-
#{ dropdown_list items, opts[:class] }
|
225
|
-
</div>
|
226
|
-
}
|
221
|
+
view :edit_content_link do |args|
|
222
|
+
toolbar_view_link :edit, args
|
227
223
|
end
|
228
|
-
|
229
|
-
|
230
|
-
if items.kind_of? Array
|
231
|
-
items = items.map {|item| "<li>#{item}</li>"}.join "\n"
|
232
|
-
end
|
233
|
-
%{
|
234
|
-
<ul class="dropdown-menu #{extra_css_class}" role="menu">
|
235
|
-
#{items}
|
236
|
-
</ul>
|
237
|
-
}
|
224
|
+
def default_edit_name_link_args args
|
225
|
+
args[:title] ||= 'name'
|
238
226
|
end
|
239
|
-
|
240
|
-
|
241
|
-
%{
|
242
|
-
<li class='toolbar-pin #{'in' unless toolbar_pinned?}active'>
|
243
|
-
<a href='#' title='#{'un' if toolbar_pinned?}pin'>#{glyphicon 'pushpin'}</a>
|
244
|
-
</li>
|
245
|
-
}
|
227
|
+
view :edit_name_link do |args|
|
228
|
+
toolbar_view_link :edit_name, args
|
246
229
|
end
|
247
|
-
|
248
|
-
|
249
|
-
%{
|
250
|
-
<li class='edit-toolbar-pin #{'in' unless edit_toolbar_pinned?}active'>
|
251
|
-
<a href='#' title='#{'un' if edit_toolbar_pinned?}pin'>#{glyphicon 'pushpin'}</a>
|
252
|
-
</li>
|
253
|
-
}
|
230
|
+
def default_edit_type_link_args args
|
231
|
+
args[:title] ||= 'type'
|
254
232
|
end
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
233
|
+
view :edit_type_link do |args|
|
234
|
+
toolbar_view_link :edit_type, args
|
235
|
+
end
|
236
|
+
def default_history_link_args args
|
237
|
+
args[:title] ||= 'history'
|
238
|
+
end
|
239
|
+
view :history_link do |args|
|
240
|
+
toolbar_view_link :history, args
|
241
|
+
end
|
242
|
+
def default_edit_nests_link_args args
|
243
|
+
args[:title] ||= 'nests'
|
244
|
+
end
|
245
|
+
view :edit_nests_link do |args|
|
246
|
+
toolbar_view_link :edit_nests, args
|
259
247
|
end
|
260
248
|
|
261
|
-
def
|
262
|
-
|
263
|
-
|
249
|
+
def toolbar_view_link view, args
|
250
|
+
text = args.delete(:title)
|
251
|
+
view_link text, view, args
|
264
252
|
end
|
265
253
|
|
254
|
+
|
255
|
+
def recently_edited_settings?
|
256
|
+
(rs = Card[:recent_settings]) && rs.item_names.present?
|
257
|
+
end
|
266
258
|
end
|