card-mod-rules 0.11.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 +7 -0
- data/lib/javascript/script_rules.js.coffee +23 -0
- data/set/right/self.rb +3 -0
- data/set/right/type_plus_right.rb +4 -0
- data/set/rstar/rule_user.rb +8 -0
- data/set/rule/bar_view.rb +92 -0
- data/set/rule/bridge_rules_editor.rb +28 -0
- data/set/rule/editor.rb +110 -0
- data/set/rule/html_views.rb +13 -0
- data/set/rule/quick_editor.rb +39 -0
- data/set/rule/quick_editor/quick_edit.haml +8 -0
- data/set/rule/quick_editor/set_info.haml +10 -0
- data/set/rule/rule_form.rb +57 -0
- data/set/rule/rule_form/buttons.rb +46 -0
- data/set/rule/rule_form/form_elements.rb +52 -0
- data/set/rule/rule_form/rule_form.haml +20 -0
- data/set/rule/rule_form/rule_set_radio.rb +83 -0
- data/set/rule/rule_form/set_selection.rb +39 -0
- data/set/rule/rules.rb +109 -0
- data/set/self/cardtype.rb +42 -0
- data/set/self/recent_settings.rb +7 -0
- data/set/self/script_rules.rb +3 -0
- data/set/type/set.rb +107 -0
- data/set/type/set/html_views.rb +51 -0
- data/set/type/set/html_views/group_panel.haml +14 -0
- data/set/type/set/html_views/rule_lists.rb +42 -0
- data/set/type/set/html_views/template.rb +12 -0
- data/set/type/set/rules_filter.rb +60 -0
- data/set/type/set/setting_lists.rb +76 -0
- data/set/type/setting.rb +79 -0
- metadata +117 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bbf86a0899439d11bb1da369c65a0d146d2c4b9fdc9613caf3f1fe2f9ce3c33e
|
4
|
+
data.tar.gz: bda881d106accf098eb980e20300c2b3d6e13fee05538444730f5b3e41ad8342
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 06f3b0771593a044d23e0be61a5772a1bdca68805ea1f238dcb22e037c27cde0bb08c7f5269e471c82b1d8bed4f3641dd3cb4f08d2e655c038abcce4f04f0268
|
7
|
+
data.tar.gz: 64fa89e1d49600d372133867a98710db3072e131be17d1b88fbe8e12cdb694729571f831d46007dc11bc541e8cb33c54cbaacc74004067a1c995248fc40ac8d1
|
@@ -0,0 +1,23 @@
|
|
1
|
+
$(window).ready ->
|
2
|
+
# permissions mod
|
3
|
+
$('body').on 'click', '.perm-vals input', ->
|
4
|
+
$(this).slot().find('#inherit').attr('checked',false)
|
5
|
+
|
6
|
+
$('body').on 'click', '.perm-editor #inherit', ->
|
7
|
+
slot = $(this).slot()
|
8
|
+
slot.find('.perm-group input:checked').attr('checked', false)
|
9
|
+
slot.find('.perm-indiv input').val('')
|
10
|
+
|
11
|
+
# rstar mod
|
12
|
+
$('body').on 'click', '._rule-submit-button', ->
|
13
|
+
f = $(this).closest('form')
|
14
|
+
checked = f.find('.set-editor input:checked')
|
15
|
+
if checked.val()
|
16
|
+
if checked.attr('warning')
|
17
|
+
confirm checked.attr('warning')
|
18
|
+
else
|
19
|
+
true
|
20
|
+
else
|
21
|
+
f.find('.set-editor').addClass('attention')
|
22
|
+
$(this).notify 'To what Set does this Rule apply?'
|
23
|
+
false
|
data/set/right/self.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
format :html do
|
2
|
+
bar_cols 6, 6
|
3
|
+
info_bar_cols 5, 4, 3
|
4
|
+
|
5
|
+
def existing_rule_card
|
6
|
+
@existing_rule_card ||= find_existing_rule_card
|
7
|
+
end
|
8
|
+
|
9
|
+
view :bar, unknown: true do
|
10
|
+
voo.hide :bar_nav unless existing_rule_card
|
11
|
+
super()
|
12
|
+
end
|
13
|
+
|
14
|
+
view :expanded_bar, unknown: true do
|
15
|
+
super()
|
16
|
+
end
|
17
|
+
|
18
|
+
view :one_line_content,
|
19
|
+
wrap: { div: { class: "text-muted one-line" } }, unknown: true do
|
20
|
+
return render_mini_unknown unless existing_rule_card
|
21
|
+
|
22
|
+
with_nest_mode :compact do
|
23
|
+
one_line_content
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
view :raw_one_line_content,
|
28
|
+
wrap: { div: { class: "text-muted one-line" } }, unknown: true do
|
29
|
+
return render_mini_unknown unless existing_rule_card
|
30
|
+
|
31
|
+
raw_one_line_content
|
32
|
+
end
|
33
|
+
|
34
|
+
view :bar_bottom, unknown: true do
|
35
|
+
if nest_mode == :edit
|
36
|
+
current_rule_form
|
37
|
+
else
|
38
|
+
nest existing_rule_card, view: :core
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
view :bar_middle, unknown: true do
|
43
|
+
rule_info
|
44
|
+
end
|
45
|
+
|
46
|
+
view :bar_left, unknown: true do
|
47
|
+
super()
|
48
|
+
end
|
49
|
+
|
50
|
+
view :bar_right, unknown: true do
|
51
|
+
voo.show?(:bar_bottom) ? rule_info : rule_short_content
|
52
|
+
end
|
53
|
+
|
54
|
+
def rule_short_content
|
55
|
+
return "" unless existing_rule_card
|
56
|
+
|
57
|
+
nest existing_rule_card, { view: :one_line_content },
|
58
|
+
set_context: card.name.trunk_name
|
59
|
+
end
|
60
|
+
|
61
|
+
def bar_title
|
62
|
+
return super() if voo.show? :full_name
|
63
|
+
|
64
|
+
linking_to_existing_rule { card.rule_setting_title }
|
65
|
+
end
|
66
|
+
|
67
|
+
# LOCALIZE
|
68
|
+
def rule_info
|
69
|
+
return wrap_with(:em, "no existing #{setting_link} rule") unless existing_rule_card
|
70
|
+
|
71
|
+
wrap_with :span,
|
72
|
+
"#{rule_setting_link} rule that applies to "\
|
73
|
+
"#{rule_set_link existing_rule_card}"
|
74
|
+
end
|
75
|
+
|
76
|
+
def rule_setting_link
|
77
|
+
link_to_card card.rule_setting, card.rule_setting_name
|
78
|
+
end
|
79
|
+
|
80
|
+
def rule_set_link existing_rule
|
81
|
+
count = link_to_card [card.rule_set, :by_name], card.rule_set.count
|
82
|
+
"#{link_to_card card.rule_set, existing_rule.trunk&.label&.downcase} (#{count})"
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def linking_to_existing_rule
|
88
|
+
return yield unless existing_rule_card && voo.show?(:toggle)
|
89
|
+
|
90
|
+
link_to_view bar_title_toggle_view, yield
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
format :html do
|
2
|
+
view :overlay_rule, cache: :never, unknown: true do
|
3
|
+
wrap_with_overlay slot: breadcrumb_data("Rule editing", "rules") do
|
4
|
+
current_rule_form
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
view :modal_rule, cache: :never, unknown: true,
|
9
|
+
wrap: { modal: { title: ->(format) { format.render_title } } } do
|
10
|
+
current_rule_form
|
11
|
+
end
|
12
|
+
|
13
|
+
view :overlay_title do
|
14
|
+
edit_rule_title
|
15
|
+
end
|
16
|
+
|
17
|
+
view :help_text, unknown: true, cache: :never do
|
18
|
+
wrap_help_text [rule_based_help, setting_link].join(" ")
|
19
|
+
end
|
20
|
+
|
21
|
+
def setting_link
|
22
|
+
wrap_with :div, class: "ml-auto" do
|
23
|
+
link_to_card card.rule_setting_name,
|
24
|
+
" (#{card.rule_setting.count} #{card.rule_setting_title} rules)",
|
25
|
+
class: "text-muted"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/set/rule/editor.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
def left_type_for_nest_editor_set_selection
|
2
|
+
return super unless is_template?
|
3
|
+
|
4
|
+
case Card.fetch_id rule_set_pattern_name
|
5
|
+
when TypeID
|
6
|
+
rule_set.anchor_name
|
7
|
+
when SelfID
|
8
|
+
rule_set.anchor.type_name
|
9
|
+
else
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
format :html do
|
15
|
+
attr_accessor :rule_context
|
16
|
+
|
17
|
+
view :rule_edit, cache: :never, unknown: true,
|
18
|
+
wrap: { modal: { size: :large,
|
19
|
+
title: :edit_rule_title,
|
20
|
+
footer: "" } } do
|
21
|
+
current_rule_form form_type: :modal
|
22
|
+
end
|
23
|
+
|
24
|
+
view :rule_help, unknown: true, perms: :none, cache: :never do
|
25
|
+
wrap_with :div, class: "alert alert-info rule-instruction" do
|
26
|
+
rule_based_help
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
view :rule_bridge_link, unknown: true do
|
31
|
+
opts = bridge_link_opts(class: "edit-rule-link nav-link",
|
32
|
+
"data-toggle": "pill",
|
33
|
+
"data-cy": "#{setting_title.to_name.key}-pill")
|
34
|
+
opts[:path].delete(:layout)
|
35
|
+
link_to_view(:overlay_rule, (setting_title + short_help_text), opts)
|
36
|
+
end
|
37
|
+
|
38
|
+
def edit_link_view
|
39
|
+
:rule_edit
|
40
|
+
end
|
41
|
+
|
42
|
+
def edit_rule_title
|
43
|
+
output [
|
44
|
+
wrap_with(:h5, setting_title, class: "title font-weight-bold")
|
45
|
+
# render_overlay_rule_help
|
46
|
+
]
|
47
|
+
end
|
48
|
+
|
49
|
+
def current_rule
|
50
|
+
if params[:assign]
|
51
|
+
card
|
52
|
+
elsif (existing = find_existing_rule_card)
|
53
|
+
existing
|
54
|
+
else
|
55
|
+
card
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def quick_editor
|
60
|
+
rule_content_formgroup
|
61
|
+
end
|
62
|
+
|
63
|
+
def setting_title
|
64
|
+
card.name.tag.tr "*", ""
|
65
|
+
end
|
66
|
+
|
67
|
+
def short_help_text
|
68
|
+
"<div class=\"help-text\">#{card.short_help_text}</div>"
|
69
|
+
end
|
70
|
+
|
71
|
+
def rule_set_description
|
72
|
+
card.rule_set.follow_label
|
73
|
+
end
|
74
|
+
|
75
|
+
def rules_type_formgroup
|
76
|
+
return unless card.right.rule_type_editable
|
77
|
+
|
78
|
+
success = @edit_rule_success
|
79
|
+
wrap_type_formgroup do
|
80
|
+
type_field(
|
81
|
+
href: path(mark: success[:id], view: :rule_form, assign: true),
|
82
|
+
class: "type-field rule-type-field live-type-field",
|
83
|
+
"data-remote" => true
|
84
|
+
)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def rule_content_formgroup
|
89
|
+
_render_content_formgroup hide: :conflict_tracker
|
90
|
+
end
|
91
|
+
|
92
|
+
def current_set_key
|
93
|
+
card.new_card? ? Card.quick_fetch(:all).name.key : card.rule_set_key
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def find_existing_rule_card
|
99
|
+
card.new_card? ? existing_rule_from_prototype : card
|
100
|
+
end
|
101
|
+
|
102
|
+
# self.card is a POTENTIAL rule; it quacks like a rule but may or may not exist.
|
103
|
+
# This generates a prototypical member of the POTENTIAL rule's set
|
104
|
+
# and returns that member's ACTUAL rule for the POTENTIAL rule's setting
|
105
|
+
def existing_rule_from_prototype
|
106
|
+
return unless (setting = card.right)
|
107
|
+
|
108
|
+
card.set_prototype.rule_card setting.codename, user: card.rule_user
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
format :html do
|
2
|
+
view :core do
|
3
|
+
# Rule cards that are searches are usual right structures and refer to the left
|
4
|
+
# in the search query. In that case the search doesn't work
|
5
|
+
# properly in the context of the rule card itself. Hence we show the query syntax
|
6
|
+
# and not the search result.
|
7
|
+
if card.type_id == SearchTypeID
|
8
|
+
render_raw
|
9
|
+
else
|
10
|
+
super()
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
format :html do
|
2
|
+
view :quick_edit, unknown: true, wrap: :slot do
|
3
|
+
quick_edit
|
4
|
+
end
|
5
|
+
|
6
|
+
view :quick_edit_success do
|
7
|
+
set_info true
|
8
|
+
end
|
9
|
+
|
10
|
+
def quick_edit
|
11
|
+
haml :quick_edit
|
12
|
+
end
|
13
|
+
|
14
|
+
def quick_form
|
15
|
+
card_form :update, quick_form_opts do
|
16
|
+
quick_editor
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def quick_form_opts
|
21
|
+
{ "data-slot-selector": ".set-info.card-slot",
|
22
|
+
success: { view: :quick_edit_success } }
|
23
|
+
end
|
24
|
+
|
25
|
+
def set_info notify_change=nil
|
26
|
+
wrap true, class: "set-info" do
|
27
|
+
haml :set_info, notify_change: notify_change
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def undo_button
|
32
|
+
link_to "undo", method: :post, rel: "nofollow", remote: true,
|
33
|
+
class: "btn btn-secondary ml-2 btn-sm btn-reduced-padding slotter",
|
34
|
+
"data-slot-selector": ".card-slot.quick_edit-view",
|
35
|
+
path: { action: :update,
|
36
|
+
revert_actions: [card.last_action_id],
|
37
|
+
revert_to: :previous }
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
format :html do
|
2
|
+
view :rule_form, cache: :never, unknown: true do
|
3
|
+
@success_view ||= :open
|
4
|
+
@rule_context ||= card
|
5
|
+
@form_type ||= :overlay
|
6
|
+
|
7
|
+
wrap do
|
8
|
+
edit_rule_form @success_view do
|
9
|
+
[
|
10
|
+
hidden_tags(success: @edit_rule_success),
|
11
|
+
haml(:rule_form)
|
12
|
+
].join
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def form_type
|
18
|
+
@form_type || :overlay
|
19
|
+
end
|
20
|
+
|
21
|
+
def current_rule_form success_view: :overlay_rule, form_type: :overlay
|
22
|
+
current_rule_format = subformat current_rule
|
23
|
+
current_rule_format.rule_form success_view, card, form_type
|
24
|
+
end
|
25
|
+
|
26
|
+
def rule_form success_view, rule_context, form_type=:overlay
|
27
|
+
validate_form_type form_type
|
28
|
+
|
29
|
+
@rule_context = rule_context
|
30
|
+
@form_type = form_type
|
31
|
+
@success_view = success_view
|
32
|
+
|
33
|
+
render_rule_form
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_form_type form_type
|
37
|
+
return if form_type.in? %i[overlay modal]
|
38
|
+
|
39
|
+
raise "invalid rule_form type: #{form_type}; has to be overlay or modal"
|
40
|
+
end
|
41
|
+
|
42
|
+
def edit_rule_form success_view, &block
|
43
|
+
@rule_context ||= card
|
44
|
+
@edit_rule_success = edit_rule_success(success_view)
|
45
|
+
action_args = { action: :update, no_mark: true }
|
46
|
+
card_form action_args, rule_form_args, &block
|
47
|
+
end
|
48
|
+
|
49
|
+
def rule_form_args
|
50
|
+
{ class: "card-rule-form", "data-slotter-mode": "update-origin" }
|
51
|
+
end
|
52
|
+
|
53
|
+
def edit_rule_success view="overlay_rule"
|
54
|
+
{ id: @rule_context.name.url_key,
|
55
|
+
view: view }
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
format :html do
|
2
|
+
def edit_rule_buttons
|
3
|
+
wrap_with(:div, class: "button-area") do
|
4
|
+
[
|
5
|
+
standard_save_button(class: "_rule-submit-button"),
|
6
|
+
standard_save_and_close_button(class: "_rule-submit-button", close: form_type),
|
7
|
+
edit_rule_cancel_button,
|
8
|
+
edit_rule_delete_button
|
9
|
+
]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def edit_rule_cancel_button
|
14
|
+
send "#{form_type}_close_button", "Cancel", situation: "secondary", class: "btn-sm"
|
15
|
+
end
|
16
|
+
|
17
|
+
def edit_rule_delete_button args={}
|
18
|
+
return if card.new_card?
|
19
|
+
|
20
|
+
delete_opts = {
|
21
|
+
confirm: delete_confirm(args[:fallback_set]),
|
22
|
+
# success: @edit_rule_success,
|
23
|
+
no_success: true,
|
24
|
+
"data-slotter-mode": "silent-success",
|
25
|
+
class: "_close-#{form_type}-on-success"
|
26
|
+
}
|
27
|
+
delete_opts["data-slot-selector"] = slot_selector if args[:slot_selector]
|
28
|
+
wrap_with :span, class: "rule-delete-section" do
|
29
|
+
delete_button delete_opts
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete_confirm fallback_set
|
34
|
+
setting = card.rule_setting_name
|
35
|
+
|
36
|
+
if fallback_set && (fallback_set_card = Card.fetch(fallback_set))
|
37
|
+
"Deleting will revert to #{setting} rule for #{fallback_set_card.label}"
|
38
|
+
else
|
39
|
+
"Are you sure you want to delete the #{setting} rule for #{rule_set_description}?"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def edit_rule_submit_button
|
44
|
+
submit_button class: "_rule-submit-button"
|
45
|
+
end
|
46
|
+
end
|