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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20ef16ab1cd68c60cef87aac784c6e59e693653c1dd83824c41836c779241dbc
4
- data.tar.gz: af181919b1be08412e2f1a58e114ee1bd5f58fd115d23fd1f4971b8bbe0b2e40
3
+ metadata.gz: 199643e67c9b580e4b7e1d07fa1c4e6540581a3543a1ce40099a27367c0ff659
4
+ data.tar.gz: b9646360212c31dd400f05982f27e8b6641ad72bd1bfe26bfb98109934346103
5
5
  SHA512:
6
- metadata.gz: e4a460218fb818da58cfc64fdd5bee8ad0a88901833d03fa2a2bb7291386986dbb9acc0130b8f8a1ad9091ef779cd8d22d9f3537003d1ddc3b07a09a1a0c2c50
7
- data.tar.gz: 6dfa5408e034673b954087356ee7f9c90f2e331c584e7b6761ae559b9571b487267091a4334346d80dc7edb0e13813200387d5108f271dc90b7b84901041f8e4
6
+ metadata.gz: 8b6a60b6d20ca5cbf559f11e2251601316172f17cb811b8249d6c599449d96cee22c105c90ff48fc764e4235964d816109e17cfdf61d98c120a76aa8b647a658
7
+ data.tar.gz: cfbb2405eb833e001ad71cb9f946a4ace15dad15897c3b34dc76c46adef10dbc3f42abcf7659aac6133444d7b659e4c195181afea19d7332d4f39d8ec79ed456
@@ -0,0 +1,7 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ class AddAssetFileCard < Cardio::Migration::Core
4
+ def up
5
+ ensure_code_card "Asset file", type_id: Card::CardtypeID
6
+ end
7
+ end
@@ -6,22 +6,75 @@ load File.expand_path("reference.rb", __dir__)
6
6
  class Card
7
7
  class Content
8
8
  module Chunk
9
- # extend ActiveSupport::Autoload
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
- # Groups: $1, [$2]: [[$1]] or [[$1|$2]] or $3, $4: [$3][$4]
17
- Card::Content::Chunk.register_class self,
18
- prefix_re: '\\[\\[',
19
- full_re: /\A\[\[([^\]]+)\]\]/,
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
- # view options
59
- def options
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
- Card::Content.new raw, format
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?(Card::Content)
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 unknown_file? filename, file_path
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
- find_file(filename)
58
- end.compact
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(source_files).map do |filename|
67
- if (source_path = find_file filename)
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
- process_nested_virtual_chunk chunk, &block unless virtual
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.11.5
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-05-10 00:00:00.000000000 Z
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.101.5
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.101.5
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/code_file.rb
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.4
84
+ rubygems_version: 3.1.6
81
85
  signing_key:
82
86
  specification_version: 4
83
87
  summary: card content handling