utopia-project 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +13 -0
  3. data/.github/workflows/development.yml +62 -0
  4. data/.gitignore +17 -0
  5. data/.rspec +2 -0
  6. data/.yarnrc +1 -0
  7. data/README.md +41 -0
  8. data/bake/utopia/project.rb +32 -0
  9. data/gems.rb +4 -0
  10. data/guides/documentation-formatting/README.md +55 -0
  11. data/guides/github-pages-integration/README.md +17 -0
  12. data/lib/utopia/project/base.rb +167 -0
  13. data/lib/utopia/project/guide.rb +131 -0
  14. data/lib/utopia/project/version.rb +27 -0
  15. data/lib/utopia/project.rb +98 -0
  16. data/package.json +6 -0
  17. data/pages/_heading.xnode +3 -0
  18. data/pages/_navigation.xnode +23 -0
  19. data/pages/_page.xnode +32 -0
  20. data/pages/_thumbnail.xnode +8 -0
  21. data/pages/_usage.xnode +21 -0
  22. data/pages/controller.rb +29 -0
  23. data/pages/errors/exception.xnode +5 -0
  24. data/pages/errors/file-not-found.xnode +5 -0
  25. data/pages/guides/controller.rb +18 -0
  26. data/pages/guides/index.xnode +17 -0
  27. data/pages/guides/show.xnode +24 -0
  28. data/pages/index.xnode +9 -0
  29. data/pages/links.yaml +4 -0
  30. data/pages/source/controller.rb +18 -0
  31. data/pages/source/index.xnode +34 -0
  32. data/pages/source/show.xnode +63 -0
  33. data/public/.nojekyll +0 -0
  34. data/public/_components/jquery/jquery.js +10872 -0
  35. data/public/_components/jquery/jquery.min.js +2 -0
  36. data/public/_components/jquery/jquery.min.map +1 -0
  37. data/public/_components/jquery/jquery.slim.js +8777 -0
  38. data/public/_components/jquery/jquery.slim.min.js +2 -0
  39. data/public/_components/jquery/jquery.slim.min.map +1 -0
  40. data/public/_components/jquery-litebox/jquery.litebox.css +23 -0
  41. data/public/_components/jquery-litebox/jquery.litebox.gallery.css +48 -0
  42. data/public/_components/jquery-litebox/jquery.litebox.js +30 -0
  43. data/public/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +12 -0
  44. data/public/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +5 -0
  45. data/public/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +8 -0
  46. data/public/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +6 -0
  47. data/public/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +4 -0
  48. data/public/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +6 -0
  49. data/public/_components/jquery-syntax/base/jquery.syntax.brush.css.css +14 -0
  50. data/public/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +16 -0
  51. data/public/_components/jquery-syntax/base/jquery.syntax.brush.html.css +5 -0
  52. data/public/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +3 -0
  53. data/public/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +2 -0
  54. data/public/_components/jquery-syntax/base/jquery.syntax.brush.python.css +6 -0
  55. data/public/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +2 -0
  56. data/public/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +18 -0
  57. data/public/_components/jquery-syntax/base/jquery.syntax.core.css +58 -0
  58. data/public/_components/jquery-syntax/base/jquery.syntax.editor.css +6 -0
  59. data/public/_components/jquery-syntax/base/theme.js +1 -0
  60. data/public/_components/jquery-syntax/bright/jquery.syntax.core.css +27 -0
  61. data/public/_components/jquery-syntax/bright/theme.js +1 -0
  62. data/public/_components/jquery-syntax/jquery.syntax.brush.apache.js +3 -0
  63. data/public/_components/jquery-syntax/jquery.syntax.brush.applescript.js +5 -0
  64. data/public/_components/jquery-syntax/jquery.syntax.brush.assembly.js +3 -0
  65. data/public/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +4 -0
  66. data/public/_components/jquery-syntax/jquery.syntax.brush.bash.js +2 -0
  67. data/public/_components/jquery-syntax/jquery.syntax.brush.basic.js +5 -0
  68. data/public/_components/jquery-syntax/jquery.syntax.brush.clang.js +5 -0
  69. data/public/_components/jquery-syntax/jquery.syntax.brush.csharp.js +4 -0
  70. data/public/_components/jquery-syntax/jquery.syntax.brush.css.js +5 -0
  71. data/public/_components/jquery-syntax/jquery.syntax.brush.diff.js +2 -0
  72. data/public/_components/jquery-syntax/jquery.syntax.brush.go.js +3 -0
  73. data/public/_components/jquery-syntax/jquery.syntax.brush.haskell.js +3 -0
  74. data/public/_components/jquery-syntax/jquery.syntax.brush.html.js +4 -0
  75. data/public/_components/jquery-syntax/jquery.syntax.brush.io.js +3 -0
  76. data/public/_components/jquery-syntax/jquery.syntax.brush.java.js +4 -0
  77. data/public/_components/jquery-syntax/jquery.syntax.brush.javascript.js +3 -0
  78. data/public/_components/jquery-syntax/jquery.syntax.brush.kai.js +2 -0
  79. data/public/_components/jquery-syntax/jquery.syntax.brush.lisp.js +2 -0
  80. data/public/_components/jquery-syntax/jquery.syntax.brush.lua.js +3 -0
  81. data/public/_components/jquery-syntax/jquery.syntax.brush.nginx.js +2 -0
  82. data/public/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +4 -0
  83. data/public/_components/jquery-syntax/jquery.syntax.brush.ooc.js +4 -0
  84. data/public/_components/jquery-syntax/jquery.syntax.brush.pascal.js +4 -0
  85. data/public/_components/jquery-syntax/jquery.syntax.brush.perl5.js +3 -0
  86. data/public/_components/jquery-syntax/jquery.syntax.brush.php-script.js +4 -0
  87. data/public/_components/jquery-syntax/jquery.syntax.brush.php.js +2 -0
  88. data/public/_components/jquery-syntax/jquery.syntax.brush.plain.js +2 -0
  89. data/public/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +3 -0
  90. data/public/_components/jquery-syntax/jquery.syntax.brush.python.js +5 -0
  91. data/public/_components/jquery-syntax/jquery.syntax.brush.ruby.js +5 -0
  92. data/public/_components/jquery-syntax/jquery.syntax.brush.scala.js +4 -0
  93. data/public/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +2 -0
  94. data/public/_components/jquery-syntax/jquery.syntax.brush.sql.js +4 -0
  95. data/public/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +3 -0
  96. data/public/_components/jquery-syntax/jquery.syntax.brush.swift.js +3 -0
  97. data/public/_components/jquery-syntax/jquery.syntax.brush.trenni.js +2 -0
  98. data/public/_components/jquery-syntax/jquery.syntax.brush.xml.js +4 -0
  99. data/public/_components/jquery-syntax/jquery.syntax.brush.yaml.js +2 -0
  100. data/public/_components/jquery-syntax/jquery.syntax.cache.js +7 -0
  101. data/public/_components/jquery-syntax/jquery.syntax.core.js +34 -0
  102. data/public/_components/jquery-syntax/jquery.syntax.editor.js +11 -0
  103. data/public/_components/jquery-syntax/jquery.syntax.js +8 -0
  104. data/public/_components/jquery-syntax/jquery.syntax.min.js +13 -0
  105. data/public/_components/jquery-syntax/paper/jquery.syntax.core.css +31 -0
  106. data/public/_components/jquery-syntax/paper/theme.js +1 -0
  107. data/public/_static/icon.png +0 -0
  108. data/public/_static/site.css +197 -0
  109. data/template/Gemfile +6 -0
  110. data/template/config.ru +6 -0
  111. data/template/preload.rb +2 -0
  112. data/utopia-project.gemspec +38 -0
  113. data/yarn.lock +22 -0
  114. metadata +351 -0
@@ -0,0 +1,3 @@
1
+ <content:navigation />
2
+ <?r document.attributes[:title] ||= content ?>
3
+ <h1><utopia:content/></h1>
@@ -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
+ ?> &rsaquo; #{link.to_href}<?r
11
+ else
12
+ ?> &rsaquo; <span>#{path.last}</span><?r
13
+ end
14
+ end
15
+
16
+ if localization.localized?
17
+ ?> &bull; (<?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>
@@ -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
+ ?>
@@ -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,5 @@
1
+ <content:page>
2
+ <content:heading>Exception</content:heading>
3
+
4
+ <p>It seems like something didn't quite work out as expected!</p>
5
+ </content:page>
@@ -0,0 +1,5 @@
1
+ <content:page>
2
+ <content:heading>File Not Found</content:heading>
3
+
4
+ <p>The file you requested is unfortunately not available at this time!</p>
5
+ </content:page>
@@ -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
@@ -0,0 +1,9 @@
1
+ <content:page>
2
+ <content:heading>#{self[:title] || "Project"}</content:heading>
3
+
4
+ <?r if document = self[:document] ?>
5
+ #{MarkupString.raw document.to_html}
6
+ <?r else ?>
7
+ <p>This project does not have a README.md file.</p>
8
+ <?r end ?>
9
+ </content:page>
data/pages/links.yaml ADDED
@@ -0,0 +1,4 @@
1
+ index:
2
+ title: Project
3
+ errors:
4
+ display: false
@@ -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> &mdash; #{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