card-mod-content 0.11.5 → 0.13.0

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