utopia-project 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +13 -0
- data/.github/workflows/development.yml +62 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.yarnrc +1 -0
- data/README.md +41 -0
- data/bake/utopia/project.rb +32 -0
- data/gems.rb +4 -0
- data/guides/documentation-formatting/README.md +55 -0
- data/guides/github-pages-integration/README.md +17 -0
- data/lib/utopia/project/base.rb +167 -0
- data/lib/utopia/project/guide.rb +131 -0
- data/lib/utopia/project/version.rb +27 -0
- data/lib/utopia/project.rb +98 -0
- data/package.json +6 -0
- data/pages/_heading.xnode +3 -0
- data/pages/_navigation.xnode +23 -0
- data/pages/_page.xnode +32 -0
- data/pages/_thumbnail.xnode +8 -0
- data/pages/_usage.xnode +21 -0
- data/pages/controller.rb +29 -0
- data/pages/errors/exception.xnode +5 -0
- data/pages/errors/file-not-found.xnode +5 -0
- data/pages/guides/controller.rb +18 -0
- data/pages/guides/index.xnode +17 -0
- data/pages/guides/show.xnode +24 -0
- data/pages/index.xnode +9 -0
- data/pages/links.yaml +4 -0
- data/pages/source/controller.rb +18 -0
- data/pages/source/index.xnode +34 -0
- data/pages/source/show.xnode +63 -0
- data/public/.nojekyll +0 -0
- data/public/_components/jquery/jquery.js +10872 -0
- data/public/_components/jquery/jquery.min.js +2 -0
- data/public/_components/jquery/jquery.min.map +1 -0
- data/public/_components/jquery/jquery.slim.js +8777 -0
- data/public/_components/jquery/jquery.slim.min.js +2 -0
- data/public/_components/jquery/jquery.slim.min.map +1 -0
- data/public/_components/jquery-litebox/jquery.litebox.css +23 -0
- data/public/_components/jquery-litebox/jquery.litebox.gallery.css +48 -0
- data/public/_components/jquery-litebox/jquery.litebox.js +30 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +12 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +5 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +8 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +6 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +4 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +6 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.css.css +14 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +16 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.html.css +5 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +3 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +2 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.python.css +6 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +2 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +18 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.core.css +58 -0
- data/public/_components/jquery-syntax/base/jquery.syntax.editor.css +6 -0
- data/public/_components/jquery-syntax/base/theme.js +1 -0
- data/public/_components/jquery-syntax/bright/jquery.syntax.core.css +27 -0
- data/public/_components/jquery-syntax/bright/theme.js +1 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.apache.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.applescript.js +5 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.assembly.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.bash.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.basic.js +5 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.clang.js +5 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.csharp.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.css.js +5 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.diff.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.go.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.haskell.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.html.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.io.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.java.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.javascript.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.kai.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.lisp.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.lua.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.nginx.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.ooc.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.pascal.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.perl5.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.php-script.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.php.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.plain.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.python.js +5 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.ruby.js +5 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.scala.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.sql.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.swift.js +3 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.trenni.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.xml.js +4 -0
- data/public/_components/jquery-syntax/jquery.syntax.brush.yaml.js +2 -0
- data/public/_components/jquery-syntax/jquery.syntax.cache.js +7 -0
- data/public/_components/jquery-syntax/jquery.syntax.core.js +34 -0
- data/public/_components/jquery-syntax/jquery.syntax.editor.js +11 -0
- data/public/_components/jquery-syntax/jquery.syntax.js +8 -0
- data/public/_components/jquery-syntax/jquery.syntax.min.js +13 -0
- data/public/_components/jquery-syntax/paper/jquery.syntax.core.css +31 -0
- data/public/_components/jquery-syntax/paper/theme.js +1 -0
- data/public/_static/icon.png +0 -0
- data/public/_static/site.css +197 -0
- data/template/Gemfile +6 -0
- data/template/config.ru +6 -0
- data/template/preload.rb +2 -0
- data/utopia-project.gemspec +38 -0
- data/yarn.lock +22 -0
- metadata +351 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
<nav><?r
|
2
|
+
page_path = first.node.uri_path
|
3
|
+
|
4
|
+
Utopia::Path[page_path.dirname].descend do |path|
|
5
|
+
unless path.last
|
6
|
+
path = path + "index"
|
7
|
+
end
|
8
|
+
|
9
|
+
if link = links(path.dirname, name: path.last, locale: localization.current_locale, indices: true).first
|
10
|
+
?> › #{link.to_href}<?r
|
11
|
+
else
|
12
|
+
?> › <span>#{path.last}</span><?r
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
if localization.localized?
|
17
|
+
?> • (<?r
|
18
|
+
localization.all_locales.each.with_index do |locale, index|
|
19
|
+
?>#{index.zero? ? '' : ' '}<a href="#{localization.localized_path(page_path, locale)}">#{locale}</a><?r
|
20
|
+
end
|
21
|
+
?>)<?r
|
22
|
+
end
|
23
|
+
?></nav>
|
data/pages/_page.xnode
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<?r response.cache! ?>
|
5
|
+
|
6
|
+
<?r if title = self[:title] ?>
|
7
|
+
<title>#{title.gsub(/<.*?>/, "")}</title>
|
8
|
+
<?r else ?>
|
9
|
+
<title>Utopia Project</title>
|
10
|
+
<?r end ?>
|
11
|
+
|
12
|
+
<meta charset="UTF-8" />
|
13
|
+
|
14
|
+
<link rel="icon" type="image/png" href="/_static/icon.png" />
|
15
|
+
<link rel="stylesheet" href="/_static/site.css" type="text/css" media="screen" />
|
16
|
+
|
17
|
+
<script src="/_components/jquery/jquery.min.js"></script>
|
18
|
+
<script src="/_components/jquery-syntax/jquery.syntax.min.js"></script>
|
19
|
+
|
20
|
+
<script type="text/javascript">
|
21
|
+
//<![CDATA[
|
22
|
+
jQuery(function($) {
|
23
|
+
$.syntax();
|
24
|
+
});
|
25
|
+
//]]>
|
26
|
+
</script>
|
27
|
+
</head>
|
28
|
+
|
29
|
+
<body class="#{attributes[:class]}">
|
30
|
+
<utopia:content/>
|
31
|
+
</body>
|
32
|
+
</html>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<figure class="photo">
|
2
|
+
<a href="#{attributes[:src].large}" title="#{attributes[:alt]}">
|
3
|
+
<img src="#{attributes[:src].small}" alt="#{attributes[:alt]}"/>
|
4
|
+
</a>
|
5
|
+
<?r if caption = attributes[:alt].caption ?>
|
6
|
+
<figcaption>#{caption}</figcaption>
|
7
|
+
<?r end ?>
|
8
|
+
</figure>
|
data/pages/_usage.xnode
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
<h2>Usage</h2>
|
2
|
+
|
3
|
+
<p>Please browse the <a href="source/">source code index</a> or refer to the guides below.</p>
|
4
|
+
|
5
|
+
<?r
|
6
|
+
base = self[:base]
|
7
|
+
|
8
|
+
base.guides do |guide|
|
9
|
+
?>
|
10
|
+
<h3><a href="#{guide.href}">#{guide.title}</a></h3>
|
11
|
+
|
12
|
+
<?r if description = guide.documentation&.description ?>
|
13
|
+
#{base.format(description.first, language: guide.documentation.language)}
|
14
|
+
<?r elsif description = guide.description ?>
|
15
|
+
#{MarkupString.raw Kramdown::Document.new(description, syntax_highlighter: nil).to_html}
|
16
|
+
<?r else ?>
|
17
|
+
<p>No description.</p>
|
18
|
+
<?r end ?>
|
19
|
+
<?r
|
20
|
+
end
|
21
|
+
?>
|
data/pages/controller.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
prepend Actions
|
3
|
+
|
4
|
+
on 'index' do
|
5
|
+
@base = Utopia::Project::Base.instance
|
6
|
+
|
7
|
+
if readme_path = @base.path_for('README.md')
|
8
|
+
@document = Kramdown::Document.new(File.read(readme_path), syntax_highlighter: nil)
|
9
|
+
|
10
|
+
if title = @document.root.children.shift
|
11
|
+
@title = title.children.first.value
|
12
|
+
end
|
13
|
+
|
14
|
+
start = @document.root.children.index{|node| node.children.first&.value == "Usage"}
|
15
|
+
finish = start + 1
|
16
|
+
|
17
|
+
while node = @document.root.children[finish]
|
18
|
+
if node.type == :header
|
19
|
+
break
|
20
|
+
else
|
21
|
+
finish += 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
@document.root.children[start...finish] = [
|
26
|
+
Kramdown::Element.new(:raw, "<content:usage/>")
|
27
|
+
]
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
prepend Actions
|
3
|
+
|
4
|
+
on 'index' do
|
5
|
+
@base = Utopia::Project::Base.instance
|
6
|
+
end
|
7
|
+
|
8
|
+
on '**/*/index' do |request, path|
|
9
|
+
@base = Utopia::Project::Base.instance
|
10
|
+
|
11
|
+
name = path.components[-2]
|
12
|
+
|
13
|
+
@guide = @base.guides.find do |guide|
|
14
|
+
guide.name == name
|
15
|
+
end
|
16
|
+
|
17
|
+
path.components = ["show"]
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<content:page>
|
2
|
+
<?r
|
3
|
+
base = self[:base]
|
4
|
+
?>
|
5
|
+
<content:heading>Guides</content:heading>
|
6
|
+
|
7
|
+
<main>
|
8
|
+
<ul>
|
9
|
+
<?r
|
10
|
+
base = controller[:base]
|
11
|
+
|
12
|
+
base.guides do |guides|
|
13
|
+
?><li><a href="#{guide.name}/">#{guide.title}</a></li><?r
|
14
|
+
end
|
15
|
+
?></ul>
|
16
|
+
</main>
|
17
|
+
</content:page>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<content:page>
|
2
|
+
<?r
|
3
|
+
base = self[:base]
|
4
|
+
guide = self[:guide]
|
5
|
+
?>
|
6
|
+
<content:heading>#{guide.title}</content:heading>
|
7
|
+
|
8
|
+
<main><?r
|
9
|
+
if document = guide.document
|
10
|
+
?>#{MarkupString.raw document.to_html}<?r
|
11
|
+
end
|
12
|
+
|
13
|
+
guide.sources.each do |source|
|
14
|
+
?><h2><code>#{File.basename source.path}</code></h2><?r
|
15
|
+
source.segments.each do |segment|
|
16
|
+
if documentation = segment.documentation
|
17
|
+
?>#{base.format(documentation.description, language: source.language)}<?r
|
18
|
+
end
|
19
|
+
|
20
|
+
?><pre><code class="language-#{source.language.name}">#{segment.code}</code></pre><?r
|
21
|
+
end
|
22
|
+
end
|
23
|
+
?></main>
|
24
|
+
</content:page>
|
data/pages/index.xnode
ADDED
data/pages/links.yaml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
prepend Actions
|
3
|
+
|
4
|
+
on 'index' do
|
5
|
+
@base = Utopia::Project::Base.instance
|
6
|
+
end
|
7
|
+
|
8
|
+
on '**/*/index' do |request, path|
|
9
|
+
@base = Utopia::Project::Base.instance
|
10
|
+
|
11
|
+
lexical_path = path.components.dup
|
12
|
+
# Remove the last "index" part:
|
13
|
+
lexical_path.pop
|
14
|
+
|
15
|
+
@node, @symbol = @base.lookup(lexical_path)
|
16
|
+
|
17
|
+
path.components = ["show"]
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<content:page>
|
2
|
+
<content:heading>Source</content:heading>
|
3
|
+
|
4
|
+
<main>
|
5
|
+
<?r
|
6
|
+
base = controller[:base]
|
7
|
+
index = base.index
|
8
|
+
|
9
|
+
index.trie.traverse do |path, node, descend|
|
10
|
+
?><ul><?r
|
11
|
+
if symbols = node.values
|
12
|
+
symbol = base.best(symbols)
|
13
|
+
|
14
|
+
if documentation = symbol.documentation or symbol.container?
|
15
|
+
?><li>
|
16
|
+
<a href="#{base.link_for(symbol)}"><code class="language-#{symbol.language.name}">#{symbol.long_form}</code></a>
|
17
|
+
|
18
|
+
<?r if documentation ?>
|
19
|
+
#{base.format(documentation.description.first, symbol)}
|
20
|
+
<?r end ?>
|
21
|
+
|
22
|
+
<?r if symbol.container?
|
23
|
+
descend.call
|
24
|
+
end ?>
|
25
|
+
</li><?r
|
26
|
+
end
|
27
|
+
else
|
28
|
+
descend.call
|
29
|
+
end
|
30
|
+
?></ul><?r
|
31
|
+
end
|
32
|
+
?>
|
33
|
+
</main>
|
34
|
+
</content:page>
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<content:page>
|
2
|
+
<?r
|
3
|
+
base = controller[:base]
|
4
|
+
node = controller[:node]
|
5
|
+
symbol = controller[:symbol]
|
6
|
+
?>
|
7
|
+
<content:heading><code class="language-#{symbol.language.name}">#{symbol.qualified_name}</code></content:heading>
|
8
|
+
|
9
|
+
<main>
|
10
|
+
<?r
|
11
|
+
if documentation = symbol.documentation
|
12
|
+
?>#{base.format(documentation.description.to_a.join("\n"), symbol)}<?r
|
13
|
+
end
|
14
|
+
?>
|
15
|
+
|
16
|
+
<?r
|
17
|
+
nested = node.children.map{|name, child| base.best(child.values)}.select{|symbol| symbol.container?}
|
18
|
+
|
19
|
+
if nested.any?
|
20
|
+
?>
|
21
|
+
<h2>Nested</h2>
|
22
|
+
|
23
|
+
<ul>
|
24
|
+
<?r nested.each do |symbol| ?>
|
25
|
+
<li><a href="#{base.link_for(symbol)}"><code class="language-#{symbol.language.name}">#{symbol.qualified_name}</code></a></li>
|
26
|
+
<?r end ?>
|
27
|
+
</ul>
|
28
|
+
<?r
|
29
|
+
end
|
30
|
+
?>
|
31
|
+
|
32
|
+
<h2>Definitions</h2>
|
33
|
+
|
34
|
+
<?r
|
35
|
+
node.children.each do |name, child|
|
36
|
+
child.values.each do |symbol|
|
37
|
+
if symbol.documentation and !symbol.container?
|
38
|
+
?><h3 id="#{base.id_for(symbol)}"><code class="language-#{symbol.language.name}">#{symbol.long_form}</code></h3><?r
|
39
|
+
|
40
|
+
if documentation = symbol.documentation
|
41
|
+
?>#{base.format(documentation.description, symbol)}<?r
|
42
|
+
end
|
43
|
+
|
44
|
+
parameters = documentation.parameters.to_a
|
45
|
+
|
46
|
+
if parameters.any?
|
47
|
+
?><dl><?r
|
48
|
+
parameters.each do |parameter|
|
49
|
+
?>
|
50
|
+
<dt><code class="syntax">#{parameter[:name]}</code> — #{base.linkify(parameter[:type], symbol)}</dt>
|
51
|
+
<?r if details = parameter[:details] ?>
|
52
|
+
<dd>#{base.format(parameter[:details], symbol)}</dd>
|
53
|
+
<?r end ?>
|
54
|
+
<?r
|
55
|
+
end
|
56
|
+
?></dl><?r
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
?>
|
62
|
+
</main>
|
63
|
+
</content:page>
|
data/public/.nojekyll
ADDED
File without changes
|