card-mod-format 0.11.0 → 0.11.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef6d2c7a456c6e35591c10a980bc93de5b970d87d88bc6af9518acc0f314a6cc
4
- data.tar.gz: d1f9e4f0ce72e65f79d8bf35391e95954317647628cbb342eb7617304fe9966c
3
+ metadata.gz: 7282ec52f287bd080b84b1a539733d85c17f859f1eccd038ff4cd67a1c572d55
4
+ data.tar.gz: 1b36bb6b8d5b10512774e1dee08f3dd60a79bff24495a569ed91013fd3eacaa8
5
5
  SHA512:
6
- metadata.gz: 53c0aef92bdd7fded5ff0a237d6d95aa1460a3612a9ec56a43e232be697ce627fffc69542ccdd3f2554d1f16df01f58459a85f575dc791981a906267b5d72c96
7
- data.tar.gz: 74a7614d7a49a49e46fedc2f2064f523de67f98a88a9f06740dbe8f024edfa9a3dc3658a5e4cc4a7c0c137a8eebc783e3d9e4d6987aba658526d68d2d032992e
6
+ metadata.gz: 901b4a5f4458f02650af6ebabb0af3e04deadbc392f3d69a118d29d54d30f3bfd44a0d90e842d45ee72d584a20f015079e7e3d48630e39cbd0e26addd90b057b
7
+ data.tar.gz: 21c3fb950df2ed3004e9a21048b3a17ea3e66200dca345984e95b9e57672d497afd1ccc1a999af661bc4ca0a2b6200f4ab315a8243f5bfc27f11567298091032
data/lib/card/path.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  class Card
2
2
  # Generate standard card paths.
3
3
  class Path
4
- cattr_accessor :cast_params
5
- self.cast_params = { slot: { hide: :array, show: :array, wrap: :array } }.freeze
4
+ include CastParams
6
5
 
7
6
  def initialize card, opts
8
7
  @card = card
@@ -60,7 +59,7 @@ class Card
60
59
  name = handle_unknown do
61
60
  opts[:mark] ? Card::Name[opts.delete(:mark)] : @card.name
62
61
  end
63
- name.url_key
62
+ name&.url_key.to_s
64
63
  end
65
64
 
66
65
  def markless?
@@ -81,47 +80,26 @@ class Card
81
80
  query_opts.empty? ? "" : "?#{query_opts.to_param}"
82
81
  end
83
82
 
84
- # normalizes certain path opts to specified data types
85
- def cast_path_hash hash, cast_hash=nil
86
- return hash unless hash.is_a? Hash
87
- cast_each_path_hash hash, (cast_hash || self.class.cast_params)
88
- hash
89
- end
90
-
91
- def cast_each_path_hash hash, cast_hash
92
- hash.each do |key, value|
93
- next unless (cast_to = cast_hash[key])
94
- hash[key] = cast_path_value value, cast_to
95
- end
96
- end
97
-
98
- def cast_path_value value, cast_to
99
- if cast_to.is_a? Hash
100
- cast_path_hash value, cast_to
101
- else
102
- send "cast_path_value_as_#{cast_to}", value
103
- end
104
- end
105
-
106
- def cast_path_value_as_array value
107
- Array.wrap value
108
- end
109
-
110
83
  def handle_unknown
111
84
  yield.tap do |name|
112
- return name if name_specified? || name_standardish?(name) || Card.known?(name)
85
+ return name if name.nil? || known_name?(name)
86
+
113
87
  opts[:card] ||= {}
114
88
  opts[:card][:name] = name
115
89
  end
116
90
  end
117
91
 
92
+ def known_name? name
93
+ name_specified? || name_standardish?(name) || Card.known?(name)
94
+ end
95
+
118
96
  def name_specified?
119
97
  opts.dig :card, :name
120
98
  end
121
99
 
122
100
  # no name info will be lost by using url_key
123
101
  def name_standardish? name
124
- name.s == Card::Name.url_key_to_standard(name.url_key)
102
+ name.url_key == name.tr(" ", "_")
125
103
  end
126
104
  end
127
105
  end
@@ -0,0 +1,38 @@
1
+ class Card
2
+ class Path
3
+ cattr_accessor :cast_params
4
+ self.cast_params = { slot: { hide: :array, show: :array, wrap: :array } }.freeze
5
+
6
+ # normalizes certain path opts to specified data types
7
+ module CastParams
8
+ private
9
+
10
+ def cast_path_hash hash, cast_hash=nil
11
+ return hash unless hash.is_a? Hash
12
+
13
+ cast_each_path_hash hash, (cast_hash || self.class.cast_params)
14
+ hash
15
+ end
16
+
17
+ def cast_each_path_hash hash, cast_hash
18
+ hash.each do |key, value|
19
+ next unless (cast_to = cast_hash[key])
20
+
21
+ hash[key] = cast_path_value value, cast_to
22
+ end
23
+ end
24
+
25
+ def cast_path_value value, cast_to
26
+ if cast_to.is_a? Hash
27
+ cast_path_hash value, cast_to
28
+ else
29
+ send "cast_path_value_as_#{cast_to}", value
30
+ end
31
+ end
32
+
33
+ def cast_path_value_as_array value
34
+ Array.wrap value
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,4 +1,3 @@
1
-
2
1
  # FIXME: -this needs a better home!
3
2
  def format opts={}
4
3
  opts = { format: opts.to_sym } if [Symbol, String].member? opts.class
data/set/all/base.rb CHANGED
@@ -42,6 +42,7 @@ format do
42
42
 
43
43
  def specify_type_in_link! opts
44
44
  return if opts[:known] || !voo.type
45
+
45
46
  opts[:path] = { card: { type: voo.type } }
46
47
  end
47
48
 
@@ -71,6 +72,7 @@ format do
71
72
 
72
73
  def structure_card
73
74
  return nil if voo.structure == true
75
+
74
76
  voo.structure ? Card[voo.structure] : card
75
77
  end
76
78
 
@@ -104,7 +106,7 @@ format do
104
106
  ""
105
107
  end
106
108
 
107
- # note: content and open_content may look like they should be aliased to
109
+ # NOTE: content and open_content may look like they should be aliased to
108
110
  # core, but it's important that they render core explicitly so that core view
109
111
  # overrides work. the titled and labeled views below, however, are not
110
112
  # intended for frequent override, so this shortcut is fine.
data/set/all/css.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  format :css do
3
2
  def default_nest_view
4
3
  :raw
data/set/all/csv.rb CHANGED
@@ -18,7 +18,7 @@ format :csv do
18
18
  end
19
19
 
20
20
  view :csv_row do
21
- array = _render_raw.scan(/\{\{[^\}]*\}\}/).map do |inc|
21
+ array = _render_raw.scan(/\{\{[^}]*\}\}/).map do |inc|
22
22
  process_content(inc).strip
23
23
  end
24
24
 
@@ -69,6 +69,7 @@ format :csv do
69
69
  def title_row extra_titles=nil
70
70
  titles = column_titles extra_titles
71
71
  return "" unless titles.present?
72
+
72
73
  CSV.generate_line titles.map(&:upcase)
73
74
  end
74
75
 
data/set/all/demo.rb ADDED
@@ -0,0 +1,36 @@
1
+ format :html do
2
+ view :demo do
3
+ frame do
4
+ [view_select, wrap_with(:div, view_demo, class: "demo-slot")]
5
+ end
6
+ end
7
+
8
+ view :view_list do
9
+ %i[bar box info_bar open closed titled labeled content content_panel].map do |v|
10
+ wrap_with :p, [content_tag(:h3, v), render(v, show: :menu)]
11
+ end.flatten.join ""
12
+ end
13
+
14
+ def demo_view
15
+ Env.params[:demo_view] || :core
16
+ end
17
+
18
+ def view_demo
19
+ wrap(true) do
20
+ render demo_view
21
+ end
22
+ end
23
+
24
+ def view_select
25
+ card_form :get, success: { view: :demo } do
26
+ select_tag :demo_view,
27
+ options_for_select(all_views, demo_view),
28
+ class: "_submit-on-select"
29
+ end
30
+ end
31
+
32
+ def all_views
33
+ Card::Set::Format::AbstractFormat::ViewDefinition
34
+ .views.slice(*self.class.ancestors).values.map(&:keys).flatten.uniq
35
+ end
36
+ end
data/set/all/error.rb CHANGED
@@ -8,21 +8,21 @@ format do
8
8
  end
9
9
 
10
10
  view :server_error, perms: :none do
11
- tr(:server_error)
11
+ t(:format_server_error)
12
12
  end
13
13
 
14
14
  view :denial, perms: :none do
15
- focal? ? tr(:denial) : ""
15
+ focal? ? t(:format_denial) : ""
16
16
  end
17
17
 
18
18
  view :not_found, perms: :none do
19
- error_name = card.name.present? ? safe_name : tr(:not_found_no_name)
20
- tr(:not_found_named, cardname: error_name)
19
+ error_name = card.name.present? ? safe_name : t(:format_not_found_no_name)
20
+ t(:format_not_found_named, cardname: error_name)
21
21
  end
22
22
 
23
23
  view :bad_address, perms: :none do
24
24
  root.error_status = 404
25
- tr(:bad_address)
25
+ t(:format_bad_address)
26
26
  end
27
27
 
28
28
  view :errors do
@@ -50,30 +50,23 @@ format do
50
50
  end
51
51
 
52
52
  def unsupported_view_error_message view
53
- tr(:unsupported_view, view: view, cardname: card.name)
53
+ t(:format_unsupported_view, view: view, cardname: card.name)
54
54
  end
55
55
  end
56
56
 
57
57
  format :json do
58
58
  view :errors do
59
- format_error error_list
59
+ {
60
+ error_status: error_status,
61
+ errors: card.errors.each_with_object({}) { |e, h| h[e.attribute] = e.message }
62
+ }
60
63
  end
61
64
 
62
65
  view :server_error, :errors
63
66
  view :denial, :errors
64
67
  view :not_found, :errors
65
-
66
68
  view :bad_address do
67
- format_error super()
68
- end
69
-
70
- def format_error error
71
- { error_status: error_status, errors: error }
72
- end
73
-
74
- def error_list
75
- card.errors.each_with_object([]) do |(field, message), list|
76
- list << { field: field, message: message }
77
- end
69
+ card.errors.add :address, super()
70
+ render_error
78
71
  end
79
72
  end
data/set/all/export.rb CHANGED
@@ -35,6 +35,7 @@ format :json do
35
35
 
36
36
  def track_exporting card
37
37
  return unless @exported_keys
38
+
38
39
  @exported_keys << card.key
39
40
  end
40
41
 
@@ -52,6 +53,7 @@ format :json do
52
53
  def items_for_export
53
54
  nest_chunks.map do |chunk|
54
55
  next if chunk.try :main?
56
+
55
57
  chunk.referee_card
56
58
  end.compact
57
59
  end
data/set/all/frame.rb CHANGED
@@ -10,9 +10,9 @@ format :html do
10
10
  standard_frame(&block)
11
11
  end
12
12
 
13
- def standard_frame slot=true
13
+ def standard_frame slot=true, &block
14
14
  with_frame slot do
15
- wrap_body { yield } if block_given?
15
+ wrap_body(&block) if block_given?
16
16
  end
17
17
  end
18
18
 
@@ -36,18 +36,14 @@ format :html do
36
36
  end
37
37
  end
38
38
 
39
- def frame_and_form action, form_opts={}
39
+ def frame_and_form action, form_opts={}, &block
40
40
  form_opts ||= {}
41
41
  frame do
42
- card_form action, form_opts do
43
- yield
44
- end
42
+ card_form action, form_opts, &block
45
43
  end
46
44
  end
47
45
 
48
- def panel
49
- wrap_with :div, class: classy("d0-card-frame") do
50
- yield
51
- end
46
+ def panel &block
47
+ wrap_with :div, class: classy("d0-card-frame"), &block
52
48
  end
53
49
  end
data/set/all/head.rb CHANGED
@@ -42,6 +42,7 @@ format :html do
42
42
 
43
43
  view :universal_edit_button, unknown: true, denial: :blank, perms: :update do
44
44
  return if card.new?
45
+
45
46
  tag "link", rel: "alternate", type: "application/x-wiki",
46
47
  title: "Edit this page!", href: path(view: :edit)
47
48
  end
@@ -51,6 +52,7 @@ format :html do
51
52
  # (but note that machine clearing would need to reset card cache...)
52
53
  view :head_stylesheet, unknown: true, cache: :never, perms: :none do
53
54
  return unless (href = head_stylesheet_path)
55
+
54
56
  tag "link", href: href, media: "all", rel: "stylesheet", type: "text/css"
55
57
  end
56
58
 
@@ -82,7 +84,7 @@ format :html do
82
84
  if value.is_a? Hash
83
85
  string = "{"
84
86
  value.each { |k, v| string += "#{k}:#{script_variable_to_js v}" }
85
- string + "}"
87
+ "#{string}}"
86
88
  else
87
89
  "'#{value}'"
88
90
  end
@@ -98,11 +100,13 @@ format :html do
98
100
 
99
101
  def debug_or_machine_path setting, &block
100
102
  return unless (asset_card = param_or_rule_card setting)
103
+
101
104
  debug_path(setting, asset_card, &block) || asset_card.machine_output_url
102
105
  end
103
106
 
104
107
  def debug_path setting, asset_card
105
108
  return unless params[:debug] == setting.to_s
109
+
106
110
  yield asset_card
107
111
  end
108
112
 
@@ -17,7 +17,7 @@ format :html do
17
17
  prepare_content_slot
18
18
  end
19
19
 
20
- view :content_with_edit_button do
20
+ view :content_with_edit_button, unknown: true do
21
21
  wrap do
22
22
  [_render_menu, _render_core, _render_edit_button(edit: :inline)]
23
23
  end
@@ -136,6 +136,7 @@ format :html do
136
136
 
137
137
  def short_content_items
138
138
  return unless card.respond_to? :count
139
+
139
140
  "#{count} #{'item'.pluralize count}"
140
141
  end
141
142
 
@@ -52,7 +52,12 @@ format :html do
52
52
  view :errors, perms: :none do
53
53
  return if card.errors.empty?
54
54
 
55
- voo.title = card.name.blank? ? "Problems" : tr(:problems_name, cardname: card.name)
55
+ voo.title = if card.name.blank?
56
+ "Problems"
57
+ else
58
+ t(:format_problems_name,
59
+ cardname: card.name)
60
+ end
56
61
  voo.hide! :menu
57
62
  class_up "alert", "card-error-msg"
58
63
  standard_errors voo.title
@@ -133,21 +138,21 @@ format :html do
133
138
  def sign_in_or_up_links to_task
134
139
  return if Auth.signed_in?
135
140
 
136
- links = [signin_link, signup_link].compact.join " #{tr :or} "
141
+ links = [signin_link, signup_link].compact.join " #{t(:format_or)} "
137
142
  wrap_with(:div) do
138
- [tr(:please), links, to_task].join(" ") + "."
143
+ "#{[t(:format_please), links, to_task].join(' ')}."
139
144
  end
140
145
  end
141
146
 
142
147
  def signin_link
143
- link_to_card :signin, tr(:sign_in),
148
+ link_to_card :signin, t(:account_sign_in)&.downcase,
144
149
  class: "signin-link", slotter: true, path: { view: :open }
145
150
  end
146
151
 
147
152
  def signup_link
148
153
  return unless signup_ok?
149
154
 
150
- link_to_card :signup, tr(:sign_up),
155
+ link_to_card :signup, t(:account_sign_up)&.downcase,
151
156
  class: "signup-link", slotter: true, path: { action: :new }
152
157
  end
153
158
 
@@ -164,19 +169,24 @@ format :html do
164
169
  def loud_denial
165
170
  voo.hide :menu
166
171
  frame do
167
- [wrap_with(:h1, tr(:sorry)),
172
+ [wrap_with(:h1, t(:format_sorry)),
168
173
  wrap_with(:div, loud_denial_message)]
169
174
  end
170
175
  end
171
176
 
172
177
  def loud_denial_message
173
- to_task = @denied_task ? tr(:denied_task, denied_task: @denied_task) : tr(:to_do_that)
178
+ to_task = if @denied_task
179
+ t(:format_denied_task,
180
+ denied_task: @denied_task)
181
+ else
182
+ t(:format_to_do_that)
183
+ end
174
184
 
175
185
  case
176
186
  when not_denied_task_read?
177
- tr(:read_only)
187
+ t(:format_read_only)
178
188
  when Auth.signed_in?
179
- tr(:need_permission_task, task: to_task)
189
+ t(:format_need_permission_task, task: to_task)
180
190
  else
181
191
  Env.save_interrupted_action request.env["REQUEST_URI"]
182
192
  sign_in_or_up_links to_do_unauthorized_task
@@ -188,6 +198,11 @@ format :html do
188
198
  end
189
199
 
190
200
  def to_do_unauthorized_task
191
- @denied_task ? tr(:denied_task, denied_task: @denied_task) : tr(:to_do_that)
201
+ if @denied_task
202
+ t(:format_denied_task,
203
+ denied_task: @denied_task)
204
+ else
205
+ t(:format_to_do_that)
206
+ end
192
207
  end
193
208
  end
@@ -37,7 +37,12 @@ format :html do
37
37
 
38
38
  def wrap_data slot=true
39
39
  with_slot_data slot do
40
- { "card-id": card.id, "card-name": slot_cardname, "slot-id": SecureRandom.hex(10) }
40
+ {
41
+ "card-id": card.id,
42
+ "card-name": slot_cardname,
43
+ "card-link-name": card.name.url_key,
44
+ "slot-id": SecureRandom.hex(10)
45
+ }
41
46
  end
42
47
  end
43
48
 
@@ -71,8 +76,8 @@ format :html do
71
76
  opts[:name_context] = initial_context_names.map(&:key) * ","
72
77
  end
73
78
 
74
- def debug_slot
75
- debug_slot? ? debug_slot_wrap { yield } : yield
79
+ def debug_slot &block
80
+ debug_slot? ? debug_slot_wrap(&block) : yield
76
81
  end
77
82
 
78
83
  def debug_slot?
@@ -92,13 +97,13 @@ format :html do
92
97
  classy list
93
98
  end
94
99
 
95
- def wrap_body
96
- wrap_with(:div, class: body_css_classes) { yield }
100
+ def wrap_body &block
101
+ wrap_with(:div, class: body_css_classes, &block)
97
102
  end
98
103
 
99
- def haml_wrap_body
104
+ def haml_wrap_body &block
100
105
  wrap_body do
101
- capture_haml { yield }
106
+ capture_haml(&block)
102
107
  end
103
108
  end
104
109
 
@@ -145,7 +150,7 @@ format :html do
145
150
  def html_escape_except_quotes string
146
151
  # to be used inside single quotes (makes for readable json attributes)
147
152
  string.to_s.gsub(/&/, "&amp;")
148
- .gsub(/\'/, "&apos;")
153
+ .gsub(/'/, "&apos;")
149
154
  .gsub(/>/, "&gt;")
150
155
  .gsub(/</, "&lt;")
151
156
  end
data/set/all/js.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  format :js do
3
2
  def default_item_view
4
3
  :core
data/set/all/json.rb CHANGED
@@ -48,7 +48,6 @@ format :json do
48
48
  { key: card.key,
49
49
  url_key: card.name.url_key,
50
50
  status: card.state }.tap do |h|
51
-
52
51
  h[:id] = card.id if h[:status] == :real
53
52
  end
54
53
  end
@@ -129,6 +128,7 @@ format :json do
129
128
 
130
129
  def essentials
131
130
  return {} if card.structure
131
+
132
132
  { content: card.db_content }
133
133
  end
134
134
 
@@ -140,7 +140,6 @@ format :json do
140
140
  name: card.name,
141
141
  type: card.type_name,
142
142
  url: path(format: :json) }.tap do |h|
143
-
144
143
  h[:codename] = card.codename if card.codename
145
144
  end
146
145
  end
data/set/all/links.rb CHANGED
@@ -1,4 +1,4 @@
1
- RESOURCE_TYPE_REGEXP = /^([a-zA-Z][\-+\.a-zA-Z\d]*):/
1
+ RESOURCE_TYPE_REGEXP = /^([a-zA-Z][\-+.a-zA-Z\d]*):/
2
2
 
3
3
  # The #link_to methods support smart formatting of links in multiple formats.
4
4
  format do
@@ -63,10 +63,10 @@ format do
63
63
 
64
64
  def resource_type resource
65
65
  case resource
66
- when /^https?\:/ then "external-link"
66
+ when /^https?:/ then "external-link"
67
67
  when %r{^/} then "internal-link"
68
- when /^mailto\:/ then "email-link"
69
- when RESOURCE_TYPE_REGEXP then Regexp.last_match(1) + "-link"
68
+ when /^mailto:/ then "email-link"
69
+ when RESOURCE_TYPE_REGEXP then "#{Regexp.last_match(1)}-link"
70
70
  end
71
71
  end
72
72
 
@@ -138,6 +138,7 @@ format :html do
138
138
  def interpret_data_opts_to_link_to opts
139
139
  %i[remote method].each do |key|
140
140
  next unless (val = opts.delete key)
141
+
141
142
  opts["data-#{key}"] = val
142
143
  end
143
144
  end
data/set/all/menu.rb CHANGED
@@ -116,7 +116,7 @@ format :html do
116
116
  end
117
117
 
118
118
  def menu_link_classes
119
- "nodblclick" + (show_view?(:hover_link) ? " _show-on-hover" : "")
119
+ "nodblclick#{show_view?(:hover_link) ? ' _show-on-hover' : ''}"
120
120
  end
121
121
 
122
122
  def menu_icon
data/set/all/path.rb CHANGED
@@ -34,6 +34,7 @@ format do
34
34
 
35
35
  def path opts={}
36
36
  return opts unless opts.is_a? Hash
37
+
37
38
  path = Card::Path.new(card, opts)&.render
38
39
  contextualize_path path
39
40
  end
data/set/all/rich_html.rb CHANGED
@@ -1,4 +1,16 @@
1
1
  format :html do
2
2
  delegate :class_up, :class_down, :with_class_up, :without_upped_class, :classy,
3
3
  to: :voo
4
+
5
+ view :type, unknown: true do
6
+ link_to_card card.type_card, nil, class: "cardtype"
7
+ end
8
+
9
+ view :type_info do
10
+ return unless card.type_code != :basic
11
+
12
+ wrap_with :span, class: "type-info float-right" do
13
+ link_to_card card.type_name, nil, class: "navbar-link"
14
+ end
15
+ end
4
16
  end
data/set/all/rss.rb CHANGED
@@ -14,6 +14,7 @@ format :rss do
14
14
  # FIXME: integrate this with common XML features when it is added
15
15
  view :feed, cache: :never do
16
16
  return "RSS feeds disabled" unless Cardio.config.rss_enabled
17
+
17
18
  begin
18
19
  @xml.instruct! :xml, version: "1.0", standalone: "yes"
19
20
  @xml.rss version: "2.0",
@@ -25,7 +26,7 @@ format :rss do
25
26
  render_feed_body
26
27
  end
27
28
  end
28
- rescue => e
29
+ rescue StandardError => e
29
30
  @xml.error "\n\nERROR rendering RSS: #{e.inspect}\n\n #{e.backtrace}"
30
31
  end
31
32
  end
@@ -43,7 +44,7 @@ format :rss do
43
44
  end
44
45
 
45
46
  view :feed_title do
46
- Card::Rule.global_setting(:title) + " : " + card.name.gsub(/^\*/, "")
47
+ "#{Card::Rule.global_setting(:title)} : #{card.name.gsub(/^\*/, '')}"
47
48
  end
48
49
 
49
50
  view :feed_item do
data/set/all/text.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  format :text do
3
2
  view :core do
4
3
  HTMLEntities.new.decode strip_tags(super()).to_s
@@ -0,0 +1,89 @@
1
+ format :html do
2
+ view :type, unknown: true do
3
+ link_to_card card.type_card, nil, class: "cardtype"
4
+ end
5
+
6
+ def type_formgroup args={}
7
+ if card.cards_of_type_exist?
8
+ wrap_with :div, t(:format_cards_exist, scope: "core", cardname: safe_name)
9
+ else
10
+ super
11
+ end
12
+ end
13
+
14
+ view :add_link do
15
+ add_link
16
+ end
17
+
18
+ view :add_button do
19
+ add_link class: "btn btn-secondary"
20
+ end
21
+
22
+ def add_link opts={}
23
+ voo.title ||= t(:format_add_card, cardname: safe_name)
24
+ link_to render_title, add_link_opts(opts)
25
+ end
26
+
27
+ def add_link_opts opts
28
+ modal = opts.delete :modal
29
+ if modal.nil? || modal
30
+ modal_link_opts opts.merge(path: add_path(:new_in_modal))
31
+ else
32
+ opts.merge path: add_path(:new)
33
+ end
34
+ end
35
+
36
+ view :add_url do
37
+ card_url _render_add_path
38
+ end
39
+
40
+ def add_path view
41
+ path_args = { mark: card.name }
42
+ process_voo_params(path_args) if voo.params
43
+ if view == :new
44
+ path_args[:action] = :new
45
+ else
46
+ path_args[:action] = :type
47
+ path_args[:view] = view
48
+ end
49
+ path path_args
50
+ end
51
+
52
+ # don't cache because it depends on update permission for another card
53
+ view :configure_link, cache: :never, perms: ->(fmt) { fmt.can_configure? } do
54
+ configure_link
55
+ end
56
+
57
+ def can_configure?
58
+ Card.fetch(card, :type, :structure, new: {}).ok? :update
59
+ end
60
+
61
+ view :configure_button, cache: :never,
62
+ denial: :blank,
63
+ perms: ->(fmt) { fmt.can_configure? } do
64
+ configure_link "btn btn-secondary"
65
+ end
66
+
67
+ def configure_link css_class=nil
68
+ return "" unless Card.fetch(card, :type, :structure, new: {}).ok? :update
69
+
70
+ voo.title ||= t(:format_configure_card, cardname: safe_name.pluralize)
71
+ title = _render_title
72
+ link_to_card card, title,
73
+ path: { view: :bridge,
74
+ bridge: { tab: :rules_tab },
75
+ set: Card::Name[safe_name, :type] },
76
+ class: css_classes("configure-type-link ml-3", css_class)
77
+ end
78
+
79
+ private
80
+
81
+ def process_voo_params path_args
82
+ context = (@parent&.card || card).name
83
+ Rack::Utils.parse_nested_query(voo.params).each do |key, value|
84
+ value = value.to_name.absolute(context) if value
85
+ key = key.to_name.absolute(context)
86
+ path_args[key] = value
87
+ end
88
+ end
89
+ end
data/set/type/json.rb CHANGED
@@ -7,7 +7,7 @@ end
7
7
  def check_json_syntax
8
8
  parse_content
9
9
  rescue JSON::ParserError => e
10
- errors.add tr(:invalid_json), e.message.sub(/^\d+: /, "").to_s
10
+ errors.add t(:format_invalid_json), e.message.sub(/^\d+: /, "").to_s
11
11
  end
12
12
 
13
13
  def parse_content
data/set/type/number.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  format :html do
3
2
  def input_type
4
3
  :text_field
@@ -6,7 +5,10 @@ format :html do
6
5
  end
7
6
 
8
7
  event :validate_number, :validate, on: :save do
9
- errors.add :content, tr(:not_numeric, content: content) unless valid_number?(content)
8
+ unless valid_number?(content)
9
+ errors.add :content,
10
+ t(:format_not_numeric, content: content)
11
+ end
10
12
  end
11
13
 
12
14
  def valid_number? string
data/set/type/toggle.rb CHANGED
@@ -4,8 +4,8 @@ end
4
4
 
5
5
  view :core do
6
6
  case card.content.to_i
7
- when 1 then tr(:yes)
8
- when 0 then tr(:no)
7
+ when 1 then t(:format_toggle_yes)
8
+ when 0 then t(:format_toggle_no)
9
9
  else
10
10
  "?"
11
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card-mod-format
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.11.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-12-24 00:00:00.000000000 Z
13
+ date: 2021-05-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: card
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.101.0
21
+ version: 1.101.5
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 1.101.0
28
+ version: 1.101.5
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: card-mod-content
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.11.0
35
+ version: 0.11.5
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.11.0
42
+ version: 0.11.5
43
43
  description: ''
44
44
  email:
45
45
  - info@decko.org
@@ -58,10 +58,12 @@ files:
58
58
  - lib/card/format/text_format.rb
59
59
  - lib/card/format/xml_format.rb
60
60
  - lib/card/path.rb
61
+ - lib/card/path/cast_params.rb
61
62
  - set/all/active_card.rb
62
63
  - set/all/base.rb
63
64
  - set/all/css.rb
64
65
  - set/all/csv.rb
66
+ - set/all/demo.rb
65
67
  - set/all/error.rb
66
68
  - set/all/export.rb
67
69
  - set/all/file.rb
@@ -89,6 +91,7 @@ files:
89
91
  - set/all/rss.rb
90
92
  - set/all/text.rb
91
93
  - set/self/home.rb
94
+ - set/type/cardtype.rb
92
95
  - set/type/html.rb
93
96
  - set/type/json.rb
94
97
  - set/type/number.rb
@@ -96,10 +99,15 @@ files:
96
99
  - set/type/plain_text.rb
97
100
  - set/type/toggle.rb
98
101
  - set/type/uri.rb
99
- homepage: http://decko.org
102
+ homepage: https://decko.org
100
103
  licenses:
101
104
  - GPL-3.0
102
105
  metadata:
106
+ source_code_uri: https://github.com/decko-commons/decko
107
+ homepage_uri: https://decko.org
108
+ bug_tracker_uri: https://github.com/decko-commons/decko/issues
109
+ wiki_uri: https://decko.org
110
+ documentation_url: http://docs.decko.org/
103
111
  card-mod: format
104
112
  post_install_message:
105
113
  rdoc_options: []
@@ -116,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
124
  - !ruby/object:Gem::Version
117
125
  version: '0'
118
126
  requirements: []
119
- rubygems_version: 3.0.3
127
+ rubygems_version: 3.1.4
120
128
  signing_key:
121
129
  specification_version: 4
122
130
  summary: format