card-mod-rules 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|