utopia-project 0.20.0 → 0.20.3

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: bb20d4e30052d026d73a9d81d0aa4834756c0f0ab6b8bd352ba51e3cabadabf3
4
- data.tar.gz: d1503c89cf8383adca84b0c47a91a7d224fbde80e2aa7363c9bb7cd5958b95f4
3
+ metadata.gz: 883f693f304d3d472fdcc8b978298eddcb6c509a79f32527d2af4513a3ae793a
4
+ data.tar.gz: f11205cf2b75b905c4e0e8993a63a5a07a73b77c9c0757b2de943ca3e01f8877
5
5
  SHA512:
6
- metadata.gz: 46c2fed2d33cbd886057eb31c86b540dd8d66abce8a09bf80dfde36dcc1cc6fe3cfc6d7c140d05c4b30aabfd523cdbc78b6998133e0fc7cc5f5ef92e88fae5d1
7
- data.tar.gz: 20eb201ef1cca0e746e25da9f2db3210881ebf2709131831f672f2e0daa66f53009a9b656c3eb638a2391a8cfb8eec095bf7bbdbefcd25a897b1cd187d3f7d71
6
+ metadata.gz: c5ca69c795b5977ef5e458fb3a1aef5b092fa66efcb7d5efd78ca9e6894737e3ea34ca45e76cd5ec8bbb1d2e387e3088c4474fcb70cb160ca0ecb8c426e963c2
7
+ data.tar.gz: 035e256b161d7fa6777498fa20fb0eaa4f1b5ef092209d0ed339f0585f3401fdc331d3359b0b6459bbc596a357f9b2100f61837fc8c2bccbaa6628e8b3049aeb
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2022, by Samuel Williams.
1
5
 
2
6
  # Create an empty project in the current directory.
3
7
  def create
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2022, by Samuel Williams.
22
5
 
23
6
  require 'utopia/path'
24
7
  require 'utopia/content/links'
@@ -71,7 +54,7 @@ module Utopia
71
54
  attr :index
72
55
 
73
56
  # Return the absolute path for the given file name, if it exists in the project.
74
- # @parameter file_name [String] The relative path to the project file, e.g. `README.md`.
57
+ # @parameter file_name [String] The relative path to the project file, e.g. `readme.md`.
75
58
  # @returns [String] The file-system path.
76
59
  def path_for(file_name)
77
60
  full_path = File.expand_path(file_name, @root)
@@ -195,6 +178,16 @@ module Utopia
195
178
  yield Guide.new(self, guide_path)
196
179
  end
197
180
  end
181
+
182
+ def readme_document
183
+ if path = self.path_for('readme.md')
184
+ Document.new(File.read(path), self)
185
+ end
186
+ end
187
+
188
+ def project_title
189
+ readme_document&.title || "Project"
190
+ end
198
191
  end
199
192
  end
200
193
  end
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2022, by Samuel Williams.
22
5
 
23
6
  require_relative 'renderer'
24
7
 
@@ -40,6 +23,14 @@ module Utopia
40
23
  @root ||= resolve(Markly.parse(@text, extensions: [:table]))
41
24
  end
42
25
 
26
+ def title
27
+ child = self.root.first_child
28
+
29
+ if child && child.type == :header
30
+ return child.first_child.to_plaintext
31
+ end
32
+ end
33
+
43
34
  def first_child
44
35
  self.root.first_child
45
36
  end
@@ -55,9 +46,11 @@ module Utopia
55
46
  if header.first_child.to_plaintext.include?(name)
56
47
  # Now subsequent children:
57
48
  current = header.next
58
- while current.type != :header and following = current.next
49
+
50
+ # Delete everything in the section until we encounter another header:
51
+ while current && current.type != :header
59
52
  current.delete
60
- current = following
53
+ current = current.next
61
54
  end
62
55
 
63
56
  return yield(header)
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2022, by Samuel Williams.
22
5
 
23
6
  require 'utopia/path'
24
7
  require 'trenni/reference'
@@ -48,18 +31,18 @@ module Utopia
48
31
  # @attribute [String | Nil]
49
32
  attr :description
50
33
 
51
- README = "README.md"
34
+ README = "readme.md"
52
35
 
53
36
  # The path to the README file for the guide.
54
37
  # @returns [String] The file-system path.
55
38
  def readme_path
56
- File.expand_path(README, @root)
39
+ Dir[File.expand_path(README, @root)].first
57
40
  end
58
41
 
59
42
  # Does a README file exist for this guide?
60
43
  # @returns [Boolean]
61
44
  def readme?
62
- File.exist?(readme_path)
45
+ !readme_path.nil?
63
46
  end
64
47
 
65
48
  # The document for the README, if one exists.
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020, by Samuel Williams.
22
5
 
23
6
  require 'decode/syntax/rewriter'
24
7
 
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2022, by Samuel Williams.
22
5
 
23
6
  require 'markly'
24
7
  require 'markly/renderer/html'
@@ -1,27 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2022, by Samuel Williams.
22
5
 
23
6
  module Utopia
24
7
  module Project
25
- VERSION = "0.20.0"
8
+ VERSION = "0.20.3"
26
9
  end
27
10
  end
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020, by Samuel Williams.
22
5
 
23
6
  require "utopia/project/version"
24
7
 
data/license.md ADDED
@@ -0,0 +1,23 @@
1
+ # MIT License
2
+
3
+ Copyright, 2020-2022, by Samuel Williams.
4
+ Copyright, 2020, by Olle Jonsson.
5
+ Copyright, 2022, by dependabot[bot].
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ SOFTWARE.
data/pages/_header.xnode CHANGED
@@ -7,12 +7,29 @@
7
7
  end
8
8
 
9
9
  if link = links(path.dirname, name: path.last, locale: localization.current_locale, indices: true).first
10
- ?> &rsaquo; #{link.to_href}<?r
10
+ if replace = link[:replace]&.to_sym
11
+ ?> &rsaquo; #{link.to_href(content: controller[:base].public_send(replace))}<?r
12
+ else
13
+ ?> &rsaquo; #{link.to_href}<?r
14
+ end
11
15
  else
12
16
  ?> &rsaquo; <span>#{path.last}</span><?r
13
17
  end
14
18
  end
15
-
19
+
20
+ if lexical_path = controller[:lexical_path]
21
+ current = []
22
+ lexical_path.each do |part|
23
+ current << part
24
+
25
+ ?> &rsaquo; <a href="/source/#{current.join('/')}/index">#{part}</a> <?r
26
+ end
27
+ end
28
+
29
+ if guide = controller[:guide]
30
+ ?> &rsaquo; <a href="/guides/#{guide.name}/index">#{guide.title}</a> <?r
31
+ end
32
+
16
33
  if localization.localized?
17
34
  ?> &bull; (<?r
18
35
  localization.all_locales.each.with_index do |locale, index|
data/pages/controller.rb CHANGED
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2022, by Samuel Williams.
1
5
 
2
6
  prepend Actions
3
7
 
4
8
  on 'index' do
5
9
  @base = Utopia::Project::Base.instance
6
10
 
7
- if readme_path = @base.path_for('README.md')
8
- @document = Utopia::Project::Document.new(File.read(readme_path), @base)
11
+ if @document = @base.readme_document
9
12
 
10
13
  @document.replace_section("Usage") do |header|
11
14
  header.insert_after(@document.html_node("<content:usage/>"))
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2020, by Samuel Williams.
1
5
 
2
6
  prepend Actions
3
7
 
data/pages/index.xnode CHANGED
@@ -31,7 +31,7 @@
31
31
  ?>
32
32
  <content:heading>Project</content:heading>
33
33
 
34
- <p>This project does not have a README.md file.</p>
34
+ <p>This project does not have a <code>readme.md</code> file.</p>
35
35
  <?r
36
36
  end
37
37
  ?>
data/pages/links.yaml CHANGED
@@ -1,4 +1,5 @@
1
1
  index:
2
2
  title: Project
3
+ replace: project_title
3
4
  errors:
4
5
  display: false
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2022, by Samuel Williams.
1
5
 
2
6
  prepend Actions
3
7
 
@@ -8,11 +12,11 @@ end
8
12
  on '**/*/index' do |request, path|
9
13
  @base = Utopia::Project::Base.instance
10
14
 
11
- lexical_path = path.components.dup
15
+ @lexical_path = path.components.dup
12
16
  # Remove the last "index" part:
13
- lexical_path.pop
17
+ @lexical_path.pop
14
18
 
15
- @node, @symbol = @base.lookup(lexical_path)
19
+ @node, @symbol = @base.lookup(@lexical_path)
16
20
 
17
21
  unless @symbol
18
22
  fail! :not_found
@@ -3,12 +3,12 @@
3
3
  base = self[:base]
4
4
  node = self[:node]
5
5
  symbol = self[:symbol]
6
+ document.attributes[:title] ||= symbol.qualified_name
6
7
  ?>
7
- <content:heading>#{symbol.qualified_name}</content:heading>
8
-
9
- <p>
10
- <code class="language-#{symbol.language.name}">#{symbol.long_form}</code>
11
- </p>
8
+
9
+ <h1>
10
+ <code class="language-#{symbol.language.name}">#{symbol.short_form}</code>
11
+ </h1>
12
12
 
13
13
  <?r
14
14
  if document = base.document_for(symbol)
@@ -17,33 +17,39 @@
17
17
  ?>#{base.format(text.join("\n"), symbol)}<?r
18
18
  end
19
19
  ?>
20
-
21
20
  #{partial 'content:signature', symbol: symbol}
22
-
23
21
  <?r
24
- nested = node.children.map{|name, child| base.best(child.values)}.select{|symbol| symbol.container?}
22
+ nested = node.children.map do |name, child|
23
+ base.best(child.values)
24
+ end.select do |symbol|
25
+ symbol.container?
26
+ end
25
27
 
26
28
  if nested.any?
27
29
  ?>
28
30
  <section>
29
- <h2>Nested</h2>
30
-
31
- <ul>
32
- <?r nested.each do |symbol| ?>
33
- <li><a href="#{base.link_for(symbol)}"><code class="language-#{symbol.language.name}">#{symbol.qualified_name}</code></a></li>
34
- <?r end ?>
35
- </ul>
31
+ <h2>Nested</h2>
32
+
33
+ <ul>
34
+ <?r nested.each do |symbol| ?>
35
+ <li><a href="#{base.link_for(symbol)}"><code class="language-#{symbol.language.name}">#{symbol.nested_name}</code></a></li>
36
+ <?r end ?>
37
+ </ul>
36
38
  </section>
37
39
  <?r
38
40
  end
39
- ?>
40
41
 
42
+ definitions = node.children.map do |name, child|
43
+ child.values.select{|symbol| symbol.documentation and !symbol.container?}
44
+ end.flatten
45
+
46
+ if definitions.any?
47
+ ?>
41
48
  <section>
42
- <h2>Definitions</h2>
43
-
44
- <?r
45
- node.children.each do |name, child|
46
- child.values.each do |symbol|
49
+ <h2>Definitions</h2>
50
+
51
+ <?r
52
+ definitions.each do |symbol|
47
53
  if symbol.documentation and !symbol.container?
48
54
  ?><section id="#{base.id_for(symbol)}"><h3><code class="language-#{symbol.language.name}">#{symbol.long_form}</code></h3><?r
49
55
 
@@ -62,9 +68,10 @@
62
68
  ?></section><?r
63
69
  end
64
70
  end
71
+ ?>
72
+ </section>
73
+ <?r
65
74
  end
66
75
  ?>
67
- </section>
68
-
69
76
  <content:discuss/>
70
77
  </content:page>
data/public/.DS_Store ADDED
Binary file
Binary file