card-mod-content 0.11.5 → 0.13.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/db/migrate_core_cards/20201115133753_add_asset_file_card.rb +7 -0
- data/lib/card/content/chunk/link.rb +68 -59
- data/set/abstract/00_sources.rb +24 -0
- data/set/abstract/{code_file.rb → 01_code_file.rb} +8 -23
- data/set/abstract/read_only.rb +14 -0
- data/set/all/chunk.rb +4 -2
- data/set/all/contextual_content.rb +20 -0
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 199643e67c9b580e4b7e1d07fa1c4e6540581a3543a1ce40099a27367c0ff659
|
4
|
+
data.tar.gz: b9646360212c31dd400f05982f27e8b6641ad72bd1bfe26bfb98109934346103
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b6a60b6d20ca5cbf559f11e2251601316172f17cb811b8249d6c599449d96cee22c105c90ff48fc764e4235964d816109e17cfdf61d98c120a76aa8b647a658
|
7
|
+
data.tar.gz: cfbb2405eb833e001ad71cb9f946a4ace15dad15897c3b34dc76c46adef10dbc3f42abcf7659aac6133444d7b659e4c195181afea19d7332d4f39d8ec79ed456
|
@@ -6,22 +6,75 @@ load File.expand_path("reference.rb", __dir__)
|
|
6
6
|
class Card
|
7
7
|
class Content
|
8
8
|
module Chunk
|
9
|
-
|
10
|
-
# autoload :Reference , "reference"
|
11
|
-
|
12
|
-
class Link < Card::Content::Chunk::Reference
|
9
|
+
class Link < Reference
|
13
10
|
CODE = "L".freeze # L for "Link"
|
14
11
|
attr_reader :link_text
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
idx_char: "["
|
13
|
+
Chunk.register_class self, prefix_re: '\\[\\[',
|
14
|
+
full_re: /\A\[\[([^\]]+)\]\]/,
|
15
|
+
idx_char: "["
|
16
|
+
|
21
17
|
def reference_code
|
22
18
|
CODE
|
23
19
|
end
|
24
20
|
|
21
|
+
def process_chunk
|
22
|
+
@process_chunk ||= render_link
|
23
|
+
end
|
24
|
+
|
25
|
+
def inspect
|
26
|
+
"<##{self.class}:e[#{@explicit_link}]n[#{@name}]l[#{@link_text}]" \
|
27
|
+
"p[#{@process_chunk}] txt:#{@text}>"
|
28
|
+
end
|
29
|
+
|
30
|
+
# view options
|
31
|
+
def options
|
32
|
+
link_text ? { title: link_text } : {}
|
33
|
+
end
|
34
|
+
|
35
|
+
def replace_reference old_name, new_name
|
36
|
+
replace_name_reference old_name, new_name
|
37
|
+
replace_link_text old_name, new_name
|
38
|
+
link_text_syntax = "|#{@link_text}" if @link_text.present?
|
39
|
+
@text = "[[#{referee_name}#{link_text_syntax}]]"
|
40
|
+
end
|
41
|
+
|
42
|
+
def explicit_link?
|
43
|
+
@explicit_link
|
44
|
+
end
|
45
|
+
|
46
|
+
def render_link view: :link, explicit_link_opts: {}
|
47
|
+
@link_text = render_obj @link_text
|
48
|
+
|
49
|
+
if @explicit_link
|
50
|
+
render_explicit_link explicit_link_opts
|
51
|
+
elsif @name
|
52
|
+
render_name_link view
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def link_target
|
57
|
+
if @explicit_link
|
58
|
+
render_obj @explicit_link
|
59
|
+
elsif @name
|
60
|
+
referee_name
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def render_explicit_link explicit_link_opts
|
67
|
+
@explicit_link = render_obj @explicit_link
|
68
|
+
format.link_to_resource @explicit_link, @link_text, explicit_link_opts
|
69
|
+
end
|
70
|
+
|
71
|
+
def render_name_link view
|
72
|
+
format.with_nest_mode :normal do
|
73
|
+
format.nest referee_name, options.merge(view: view)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# interpret a chunk matching
|
25
78
|
def interpret match, _content
|
26
79
|
target, @link_text = target_and_link_text match[1]
|
27
80
|
|
@@ -36,9 +89,9 @@ class Card
|
|
36
89
|
def target_and_link_text raw_syntax
|
37
90
|
return unless raw_syntax
|
38
91
|
|
39
|
-
if (i = divider_index raw_syntax) # [[A | B]]
|
92
|
+
if (i = divider_index raw_syntax) # if [[A | B]]
|
40
93
|
[raw_syntax[0..(i - 1)], raw_syntax[(i + 1)..-1]] # [A, B]
|
41
|
-
else # [[ A ]]
|
94
|
+
else # else must be [[ A ]]
|
42
95
|
[raw_syntax, nil] # [A, nil]
|
43
96
|
end
|
44
97
|
end
|
@@ -55,61 +108,21 @@ class Card
|
|
55
108
|
string_copy.index "|"
|
56
109
|
end
|
57
110
|
|
58
|
-
#
|
59
|
-
|
60
|
-
link_text ? { title: link_text } : {}
|
61
|
-
end
|
62
|
-
|
111
|
+
# turn a string into a Content object if it looks like it might have more
|
112
|
+
# chunks in it
|
63
113
|
def objectify raw
|
64
114
|
return unless raw
|
65
115
|
|
66
116
|
raw.strip!
|
67
117
|
if raw.match?(/(^|[^\\])\{\{/)
|
68
|
-
|
118
|
+
Content.new raw, format
|
69
119
|
else
|
70
120
|
raw
|
71
121
|
end
|
72
122
|
end
|
73
123
|
|
74
|
-
def render_link view: :link, explicit_link_opts: {}
|
75
|
-
@link_text = render_obj @link_text
|
76
|
-
|
77
|
-
if @explicit_link
|
78
|
-
@explicit_link = render_obj @explicit_link
|
79
|
-
format.link_to_resource @explicit_link, @link_text, explicit_link_opts
|
80
|
-
elsif @name
|
81
|
-
format.with_nest_mode :normal do
|
82
|
-
format.nest referee_name, options.merge(view: view)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def link_target
|
88
|
-
if @explicit_link
|
89
|
-
render_obj @explicit_link
|
90
|
-
elsif @name
|
91
|
-
referee_name
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def process_chunk
|
96
|
-
@process_chunk ||= render_link
|
97
|
-
end
|
98
|
-
|
99
|
-
def inspect
|
100
|
-
"<##{self.class}:e[#{@explicit_link}]n[#{@name}]l[#{@link_text}]" \
|
101
|
-
"p[#{@process_chunk}] txt:#{@text}>"
|
102
|
-
end
|
103
|
-
|
104
|
-
def replace_reference old_name, new_name
|
105
|
-
replace_name_reference old_name, new_name
|
106
|
-
replace_link_text old_name, new_name
|
107
|
-
@text =
|
108
|
-
@link_text.nil? ? "[[#{referee_name}]]" : "[[#{referee_name}|#{@link_text}]]"
|
109
|
-
end
|
110
|
-
|
111
124
|
def replace_link_text old_name, new_name
|
112
|
-
if @link_text.is_a?(
|
125
|
+
if @link_text.is_a?(Content)
|
113
126
|
@link_text.find_chunks(:Reference).each do |chunk|
|
114
127
|
chunk.replace_reference old_name, new_name
|
115
128
|
end
|
@@ -117,10 +130,6 @@ class Card
|
|
117
130
|
@link_text = old_name.to_name.sub_in(@link_text, with: new_name)
|
118
131
|
end
|
119
132
|
end
|
120
|
-
|
121
|
-
def explicit_link?
|
122
|
-
@explicit_link
|
123
|
-
end
|
124
133
|
end
|
125
134
|
end
|
126
135
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
def source_paths
|
2
|
+
[]
|
3
|
+
end
|
4
|
+
|
5
|
+
def find_file file_path
|
6
|
+
unknown_file?(file_path) ? nil : file_path
|
7
|
+
end
|
8
|
+
|
9
|
+
def unknown_file? file_path
|
10
|
+
return false if File.exist? file_path
|
11
|
+
|
12
|
+
Rails.logger.info "couldn't locate file #{file_path}"
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def existing_source_paths
|
17
|
+
Array.wrap(source_paths).reject do |file_path|
|
18
|
+
unknown_file?(file_path)
|
19
|
+
end.compact
|
20
|
+
end
|
21
|
+
|
22
|
+
def source_changed? since:
|
23
|
+
existing_source_paths.any? { |path| ::File.mtime(path) > since }
|
24
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
include_set Abstract::Sources
|
2
|
+
|
1
3
|
class << self
|
2
4
|
def included host_class
|
3
5
|
track_mod_name host_class, caller
|
@@ -31,12 +33,6 @@ def source_dir
|
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
34
|
-
def find_file filename
|
35
|
-
File.join(mod_path, source_dir, filename).tap do |file_path|
|
36
|
-
return nil if unknown_file? filename, file_path
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
36
|
def mod_path
|
41
37
|
modname = file_content_mod_name
|
42
38
|
if (match = modname.match(/^card-mod-(\w*)/))
|
@@ -45,28 +41,17 @@ def mod_path
|
|
45
41
|
Cardio::Mod.dirs.path modname
|
46
42
|
end
|
47
43
|
|
48
|
-
def
|
49
|
-
return false if File.exist? file_path
|
50
|
-
|
51
|
-
Rails.logger.info "couldn't locate file #{filename} at #{file_path}"
|
52
|
-
true
|
53
|
-
end
|
54
|
-
|
55
|
-
def existing_source_paths
|
44
|
+
def source_paths
|
56
45
|
Array.wrap(source_files).map do |filename|
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def source_changed? since:
|
62
|
-
existing_source_paths.any? { |path| ::File.mtime(path) > since }
|
46
|
+
::File.join mod_path, source_dir, filename
|
47
|
+
end
|
63
48
|
end
|
64
49
|
|
65
50
|
def content
|
66
|
-
Array.wrap(
|
67
|
-
if (source_path = find_file
|
51
|
+
Array.wrap(source_paths).map do |path|
|
52
|
+
if (source_path = find_file path)
|
68
53
|
Rails.logger.debug "reading file: #{source_path}"
|
69
|
-
File.read source_path
|
54
|
+
::File.read source_path
|
70
55
|
end
|
71
56
|
end.compact.join "\n"
|
72
57
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
format :html do
|
2
|
+
view :input do
|
3
|
+
"Content can't be edited."
|
4
|
+
end
|
5
|
+
|
6
|
+
def short_content
|
7
|
+
fa_icon("exclamation-circle", class: "text-muted pr-2") +
|
8
|
+
wrap_with(:span, "read-only", class: "text-muted")
|
9
|
+
end
|
10
|
+
|
11
|
+
def standard_submit_button
|
12
|
+
multi_card_editor? ? super : ""
|
13
|
+
end
|
14
|
+
end
|
data/set/all/chunk.rb
CHANGED
@@ -110,13 +110,15 @@ format do
|
|
110
110
|
|
111
111
|
def process_nested_chunk chunk, virtual, &block
|
112
112
|
if chunk.referee_card&.virtual?
|
113
|
-
|
113
|
+
process_virtual_chunk chunk, virtual, &block
|
114
114
|
else
|
115
115
|
yield chunk
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
-
def process_virtual_chunk chunk, &block
|
119
|
+
def process_virtual_chunk chunk, virtual, &block
|
120
|
+
return if virtual
|
121
|
+
|
120
122
|
subformat(chunk.referee_card).each_nested_field_chunk(&block)
|
121
123
|
end
|
122
124
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
def context_card
|
2
|
+
@context_card || self
|
3
|
+
end
|
4
|
+
|
5
|
+
def with_context context_card
|
6
|
+
old_context = @context_card
|
7
|
+
@context_card = context_card if context_card
|
8
|
+
yield
|
9
|
+
ensure
|
10
|
+
@context_card = old_context
|
11
|
+
end
|
12
|
+
|
13
|
+
format do
|
14
|
+
delegate :context_card, :with_context, to: :card
|
15
|
+
|
16
|
+
def contextual_content context_card, options={}
|
17
|
+
view = options.delete(:view) || :core
|
18
|
+
with_context(context_card) { render! view, options }
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: card-mod-content
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
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: 2021-
|
13
|
+
date: 2021-08-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: card
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.
|
21
|
+
version: 1.103.0
|
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.
|
28
|
+
version: 1.103.0
|
29
29
|
description: ''
|
30
30
|
email:
|
31
31
|
- info@decko.org
|
@@ -33,6 +33,7 @@ executables: []
|
|
33
33
|
extensions: []
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
|
+
- db/migrate_core_cards/20201115133753_add_asset_file_card.rb
|
36
37
|
- lib/card/content/chunk/escaped_literal.rb
|
37
38
|
- lib/card/content/chunk/keep_escaped_literal.rb
|
38
39
|
- lib/card/content/chunk/link.rb
|
@@ -41,12 +42,15 @@ files:
|
|
41
42
|
- lib/card/content/chunk/reference.rb
|
42
43
|
- lib/card/content/chunk/uri.rb
|
43
44
|
- lib/card/content/chunk/view_stub.rb
|
44
|
-
- set/abstract/
|
45
|
+
- set/abstract/00_sources.rb
|
46
|
+
- set/abstract/01_code_file.rb
|
45
47
|
- set/abstract/haml_file.rb
|
46
48
|
- set/abstract/lock.rb
|
49
|
+
- set/abstract/read_only.rb
|
47
50
|
- set/abstract/templated_nests.rb
|
48
51
|
- set/abstract/vendor_code_file.rb
|
49
52
|
- set/all/chunk.rb
|
53
|
+
- set/all/contextual_content.rb
|
50
54
|
- set/all/templating.rb
|
51
55
|
- set/right/default.rb
|
52
56
|
- set/right/structure.rb
|
@@ -77,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
81
|
- !ruby/object:Gem::Version
|
78
82
|
version: '0'
|
79
83
|
requirements: []
|
80
|
-
rubygems_version: 3.1.
|
84
|
+
rubygems_version: 3.1.6
|
81
85
|
signing_key:
|
82
86
|
specification_version: 4
|
83
87
|
summary: card content handling
|