utopia 2.13.4 → 2.14.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.
Files changed (353) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/development.yml +62 -0
  3. data/README.md +3 -5
  4. data/bake/utopia/yarn.rb +4 -2
  5. data/docs/_components/jquery-litebox/jquery.litebox.css +23 -0
  6. data/docs/_components/jquery-litebox/jquery.litebox.gallery.css +48 -0
  7. data/docs/_components/jquery-litebox/jquery.litebox.js +30 -0
  8. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +6 -0
  9. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +4 -10
  10. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +5 -2
  11. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +8 -8
  12. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +1 -1
  13. data/docs/_components/jquery-syntax/base/jquery.syntax.core.css +43 -47
  14. data/docs/_components/jquery-syntax/jquery.syntax.brush.apache.js +3 -41
  15. data/docs/_components/jquery-syntax/jquery.syntax.brush.applescript.js +5 -57
  16. data/docs/_components/jquery-syntax/jquery.syntax.brush.assembly.js +3 -37
  17. data/docs/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +4 -67
  18. data/docs/_components/jquery-syntax/jquery.syntax.brush.bash.js +2 -33
  19. data/docs/_components/jquery-syntax/jquery.syntax.brush.basic.js +5 -51
  20. data/docs/_components/jquery-syntax/jquery.syntax.brush.clang.js +5 -89
  21. data/docs/_components/jquery-syntax/jquery.syntax.brush.csharp.js +4 -47
  22. data/docs/_components/jquery-syntax/jquery.syntax.brush.css.js +5 -80
  23. data/docs/_components/jquery-syntax/jquery.syntax.brush.diff.js +2 -24
  24. data/docs/_components/jquery-syntax/jquery.syntax.brush.go.js +3 -47
  25. data/docs/_components/jquery-syntax/jquery.syntax.brush.haskell.js +3 -45
  26. data/docs/_components/jquery-syntax/jquery.syntax.brush.html.js +4 -66
  27. data/docs/_components/jquery-syntax/jquery.syntax.brush.io.js +3 -45
  28. data/docs/_components/jquery-syntax/jquery.syntax.brush.java.js +4 -45
  29. data/docs/_components/jquery-syntax/jquery.syntax.brush.javascript.js +3 -40
  30. data/docs/_components/jquery-syntax/jquery.syntax.brush.kai.js +2 -29
  31. data/docs/_components/jquery-syntax/jquery.syntax.brush.lisp.js +2 -34
  32. data/docs/_components/jquery-syntax/jquery.syntax.brush.lua.js +3 -44
  33. data/docs/_components/jquery-syntax/jquery.syntax.brush.nginx.js +2 -31
  34. data/docs/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +4 -73
  35. data/docs/_components/jquery-syntax/jquery.syntax.brush.ooc.js +4 -46
  36. data/docs/_components/jquery-syntax/jquery.syntax.brush.pascal.js +4 -51
  37. data/docs/_components/jquery-syntax/jquery.syntax.brush.perl5.js +3 -52
  38. data/docs/_components/jquery-syntax/jquery.syntax.brush.php-script.js +4 -48
  39. data/docs/_components/jquery-syntax/jquery.syntax.brush.php.js +2 -15
  40. data/docs/_components/jquery-syntax/jquery.syntax.brush.plain.js +2 -10
  41. data/docs/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +3 -43
  42. data/docs/_components/jquery-syntax/jquery.syntax.brush.python.js +5 -44
  43. data/docs/_components/jquery-syntax/jquery.syntax.brush.ruby.js +5 -77
  44. data/docs/_components/jquery-syntax/jquery.syntax.brush.scala.js +4 -44
  45. data/docs/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +2 -29
  46. data/docs/_components/jquery-syntax/jquery.syntax.brush.sql.js +4 -31
  47. data/docs/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +3 -57
  48. data/docs/_components/jquery-syntax/jquery.syntax.brush.swift.js +3 -55
  49. data/docs/_components/jquery-syntax/jquery.syntax.brush.trenni.js +2 -35
  50. data/docs/_components/jquery-syntax/jquery.syntax.brush.xml.js +4 -50
  51. data/docs/_components/jquery-syntax/jquery.syntax.brush.yaml.js +2 -29
  52. data/docs/_components/jquery-syntax/jquery.syntax.cache.js +7 -65
  53. data/docs/_components/jquery-syntax/jquery.syntax.core.js +34 -1098
  54. data/docs/_components/jquery-syntax/jquery.syntax.editor.js +11 -291
  55. data/docs/_components/jquery-syntax/jquery.syntax.js +8 -258
  56. data/docs/_components/jquery/jquery.js +1678 -1026
  57. data/docs/_components/jquery/jquery.min.js +2 -4
  58. data/docs/_components/jquery/jquery.min.map +1 -1
  59. data/docs/_components/jquery/jquery.slim.js +1602 -932
  60. data/docs/_components/jquery/jquery.slim.min.js +2 -4
  61. data/docs/_components/jquery/jquery.slim.min.map +1 -1
  62. data/docs/_static/icon.png +0 -0
  63. data/docs/_static/site.css +100 -114
  64. data/docs/{wiki/development-environment-setup.html → development-environment-setup/index.html} +9 -15
  65. data/docs/{wiki/faq/what-is-xnode.html → faq/what-is-xnode/index.html} +9 -15
  66. data/docs/index.html +25 -31
  67. data/docs/javascript/index.html +108 -0
  68. data/docs/{wiki/middleware/content.html → middleware/content/index.html} +9 -15
  69. data/docs/{wiki/middleware/controller/actions.html → middleware/controller/actions/index.html} +11 -17
  70. data/docs/{wiki/middleware/controller.html → middleware/controller/index.html} +9 -15
  71. data/docs/{wiki/middleware/controller/rewrite.html → middleware/controller/rewrite/index.html} +9 -15
  72. data/docs/{wiki/middleware/localization.html → middleware/localization/index.html} +9 -15
  73. data/docs/{wiki/middleware/redirection.html → middleware/redirection/index.html} +9 -15
  74. data/docs/{wiki/middleware/session.html → middleware/session/index.html} +9 -15
  75. data/docs/{wiki/middleware/static.html → middleware/static/index.html} +9 -15
  76. data/docs/{wiki/server-setup.html → server-setup/index.html} +11 -42
  77. data/docs/{wiki/testing.html → testing/index.html} +10 -16
  78. data/docs/{wiki/updating-utopia.html → updating-utopia/index.html} +9 -15
  79. data/docs/{wiki/your-first-page.html → your-first-page/index.html} +11 -17
  80. data/lib/utopia/content.rb +23 -19
  81. data/lib/utopia/content/link.rb +29 -34
  82. data/lib/utopia/content/links.rb +185 -123
  83. data/lib/utopia/content/node.rb +13 -17
  84. data/lib/utopia/content/response.rb +2 -2
  85. data/lib/utopia/localization.rb +18 -10
  86. data/lib/utopia/path.rb +36 -32
  87. data/lib/utopia/version.rb +1 -1
  88. data/setup/site/Gemfile +7 -5
  89. data/spec/utopia/command_spec.rb +1 -1
  90. data/spec/utopia/content/links/bar/index.xnode +0 -0
  91. data/spec/utopia/content/links/bar/parent/child/index.en.xnode +0 -0
  92. data/spec/utopia/content/links/bar/parent/child/index.ja.xnode +0 -0
  93. data/spec/utopia/content/links/bar/parent/links.yaml +2 -0
  94. data/spec/utopia/content/links/index.xnode +0 -0
  95. data/spec/utopia/content/links/links.yaml +10 -1
  96. data/spec/utopia/content/links/redirect/links.yaml +2 -0
  97. data/spec/utopia/content/links_spec.rb +160 -43
  98. data/spec/utopia/content/localized/links.yaml +2 -5
  99. data/spec/utopia/content/node_spec.rb +1 -1
  100. data/spec/utopia/path_spec.rb +50 -5
  101. data/wiki/Gemfile +9 -0
  102. data/wiki/config.ru +7 -0
  103. data/{documentation/pages/wiki/development-environment-setup/content.md → wiki/pages/development-environment-setup/index.md} +0 -0
  104. data/wiki/pages/faq/links.yaml +2 -0
  105. data/{documentation/pages/wiki/faq/what-is-xnode/content.md → wiki/pages/faq/what-is-xnode/index.md} +1 -1
  106. data/wiki/pages/faq/what-is-xnode/links.yaml +2 -0
  107. data/{documentation/pages/wiki/content.md → wiki/pages/index.md} +2 -2
  108. data/{documentation/pages/wiki/javascript/content.md → wiki/pages/javascript/index.md} +15 -13
  109. data/wiki/pages/javascript/links.yaml +2 -0
  110. data/wiki/pages/links.yaml +2 -0
  111. data/{documentation/pages/wiki/middleware/content/content.md → wiki/pages/middleware/content/index.md} +0 -0
  112. data/{documentation/pages/wiki/middleware/controller/actions/content.md → wiki/pages/middleware/controller/actions/index.md} +2 -2
  113. data/{documentation/pages/wiki/middleware/controller/content.md → wiki/pages/middleware/controller/index.md} +0 -0
  114. data/{documentation/pages/wiki → wiki/pages}/middleware/controller/links.yaml +0 -0
  115. data/{documentation/pages/wiki/middleware/controller/rewrite/content.md → wiki/pages/middleware/controller/rewrite/index.md} +0 -0
  116. data/{documentation/pages/wiki/middleware/localization/content.md → wiki/pages/middleware/localization/index.md} +0 -0
  117. data/{documentation/pages/wiki/middleware/redirection/content.md → wiki/pages/middleware/redirection/index.md} +0 -0
  118. data/{documentation/pages/wiki/middleware/session/content.md → wiki/pages/middleware/session/index.md} +0 -0
  119. data/{documentation/pages/wiki/middleware/static/content.md → wiki/pages/middleware/static/index.md} +0 -0
  120. data/{documentation/pages/wiki/server-setup/content.md → wiki/pages/server-setup/index.md} +0 -0
  121. data/{documentation/pages/wiki/testing/content.md → wiki/pages/testing/index.md} +0 -0
  122. data/{documentation/pages/wiki/updating-utopia/content.md → wiki/pages/updating-utopia/index.md} +0 -0
  123. data/{documentation/pages/wiki/your-first-page/content.md → wiki/pages/your-first-page/index.md} +2 -2
  124. metadata +56 -263
  125. data/.travis.yml +0 -28
  126. data/Rakefile +0 -33
  127. data/docs/_components/jquery/core.js +0 -482
  128. data/docs/_static/utopia-background.svg +0 -1
  129. data/docs/_static/utopia.svg +0 -1
  130. data/docs/code/Utopia.html +0 -517
  131. data/docs/code/Utopia/Basename.html +0 -654
  132. data/docs/code/Utopia/Bootstrap.html +0 -538
  133. data/docs/code/Utopia/Command.html +0 -213
  134. data/docs/code/Utopia/Command/Environment.html +0 -321
  135. data/docs/code/Utopia/Command/Server.html +0 -214
  136. data/docs/code/Utopia/Command/Server/Create.html +0 -222
  137. data/docs/code/Utopia/Command/Server/Environment.html +0 -236
  138. data/docs/code/Utopia/Command/Server/Update.html +0 -317
  139. data/docs/code/Utopia/Command/Setup.html +0 -145
  140. data/docs/code/Utopia/Command/Setup/Server.html +0 -298
  141. data/docs/code/Utopia/Command/Setup/Site.html +0 -180
  142. data/docs/code/Utopia/Command/Site.html +0 -285
  143. data/docs/code/Utopia/Command/Site/Create.html +0 -324
  144. data/docs/code/Utopia/Command/Site/Update.html +0 -407
  145. data/docs/code/Utopia/Command/Top.html +0 -279
  146. data/docs/code/Utopia/Content.html +0 -832
  147. data/docs/code/Utopia/Content/Document.html +0 -1822
  148. data/docs/code/Utopia/Content/Document/State.html +0 -1220
  149. data/docs/code/Utopia/Content/Link.html +0 -1286
  150. data/docs/code/Utopia/Content/Links.html +0 -847
  151. data/docs/code/Utopia/Content/MarkupParser.html +0 -881
  152. data/docs/code/Utopia/Content/MarkupParser/ParsedTag.html +0 -422
  153. data/docs/code/Utopia/Content/MarkupParser/UnbalancedTagError.html +0 -615
  154. data/docs/code/Utopia/Content/Namespace.html +0 -485
  155. data/docs/code/Utopia/Content/Node.html +0 -1188
  156. data/docs/code/Utopia/Content/Node/Context.html +0 -938
  157. data/docs/code/Utopia/Content/Response.html +0 -813
  158. data/docs/code/Utopia/Content/SymbolicHash.html +0 -419
  159. data/docs/code/Utopia/Content/Tag.html +0 -399
  160. data/docs/code/Utopia/Content/Tags.html +0 -136
  161. data/docs/code/Utopia/Content/Tags/ContentTag.html +0 -187
  162. data/docs/code/Utopia/Content/Tags/DeferredTag.html +0 -193
  163. data/docs/code/Utopia/Content/Tags/Library.html +0 -333
  164. data/docs/code/Utopia/Content/Tags/NodeTag.html +0 -193
  165. data/docs/code/Utopia/Content/UnbalancedTagError.html +0 -298
  166. data/docs/code/Utopia/ContentLength.html +0 -343
  167. data/docs/code/Utopia/Controller.html +0 -907
  168. data/docs/code/Utopia/Controller/Actions.html +0 -289
  169. data/docs/code/Utopia/Controller/Actions/Action.html +0 -984
  170. data/docs/code/Utopia/Controller/Actions/ClassMethods.html +0 -442
  171. data/docs/code/Utopia/Controller/Base.html +0 -1216
  172. data/docs/code/Utopia/Controller/Respond.html +0 -293
  173. data/docs/code/Utopia/Controller/Respond/ClassMethods.html +0 -236
  174. data/docs/code/Utopia/Controller/Respond/Converter.html +0 -256
  175. data/docs/code/Utopia/Controller/Respond/Converter/Callback.html +0 -484
  176. data/docs/code/Utopia/Controller/Respond/Converter/ToJSON.html +0 -381
  177. data/docs/code/Utopia/Controller/Respond/Passthrough.html +0 -297
  178. data/docs/code/Utopia/Controller/Respond/Responder.html +0 -535
  179. data/docs/code/Utopia/Controller/Rewrite.html +0 -290
  180. data/docs/code/Utopia/Controller/Rewrite/ClassMethods.html +0 -242
  181. data/docs/code/Utopia/Controller/Rewrite/ExtractPrefixRule.html +0 -364
  182. data/docs/code/Utopia/Controller/Rewrite/Rewriter.html +0 -464
  183. data/docs/code/Utopia/Controller/Rewrite/Rule.html +0 -209
  184. data/docs/code/Utopia/Controller/Variables.html +0 -550
  185. data/docs/code/Utopia/Controllers.html +0 -244
  186. data/docs/code/Utopia/Exceptions.html +0 -127
  187. data/docs/code/Utopia/Exceptions/Handler.html +0 -526
  188. data/docs/code/Utopia/Exceptions/Mailer.html +0 -482
  189. data/docs/code/Utopia/Extensions.html +0 -117
  190. data/docs/code/Utopia/Extensions/ArraySplit.html +0 -183
  191. data/docs/code/Utopia/Extensions/DateTimeComparison.html +0 -193
  192. data/docs/code/Utopia/Extensions/TimeDateComparison.html +0 -193
  193. data/docs/code/Utopia/HTTP.html +0 -250
  194. data/docs/code/Utopia/HTTP/Status.html +0 -415
  195. data/docs/code/Utopia/Locale.html +0 -606
  196. data/docs/code/Utopia/Localization.html +0 -1241
  197. data/docs/code/Utopia/Localization/Wrapper.html +0 -459
  198. data/docs/code/Utopia/Logger.html +0 -205
  199. data/docs/code/Utopia/Logger/CompactFormatter.html +0 -335
  200. data/docs/code/Utopia/Path.html +0 -3310
  201. data/docs/code/Utopia/Path/Matcher.html +0 -518
  202. data/docs/code/Utopia/Path/Matcher/MatchData.html +0 -475
  203. data/docs/code/Utopia/Redirection.html +0 -151
  204. data/docs/code/Utopia/Redirection/ClientRedirect.html +0 -717
  205. data/docs/code/Utopia/Redirection/DirectoryIndex.html +0 -298
  206. data/docs/code/Utopia/Redirection/Errors.html +0 -476
  207. data/docs/code/Utopia/Redirection/Moved.html +0 -312
  208. data/docs/code/Utopia/Redirection/RequestFailure.html +0 -226
  209. data/docs/code/Utopia/Redirection/Rewrite.html +0 -296
  210. data/docs/code/Utopia/Session.html +0 -889
  211. data/docs/code/Utopia/Session/LazyHash.html +0 -859
  212. data/docs/code/Utopia/Setup.html +0 -970
  213. data/docs/code/Utopia/Static.html +0 -696
  214. data/docs/code/Utopia/Static/LocalFile.html +0 -1104
  215. data/docs/code/Utopia/Static/MimeTypeLoader.html +0 -541
  216. data/docs/code/Utopia/Static/MimeTypeLoader/ExpansionError.html +0 -124
  217. data/docs/code/Utopia/Tags.html +0 -115
  218. data/docs/code/Utopia/Tags/Environment.html +0 -314
  219. data/docs/code/Utopia/Tags/EnvironmentTag.html +0 -314
  220. data/docs/code/Utopia/Tags/Library.html +0 -340
  221. data/docs/code/_index.html +0 -758
  222. data/docs/code/class_list.html +0 -51
  223. data/docs/code/css/common.css +0 -1
  224. data/docs/code/css/full_list.css +0 -58
  225. data/docs/code/css/style.css +0 -496
  226. data/docs/code/file.README.html +0 -171
  227. data/docs/code/file_list.html +0 -56
  228. data/docs/code/frames.html +0 -17
  229. data/docs/code/index.html +0 -171
  230. data/docs/code/js/app.js +0 -292
  231. data/docs/code/js/full_list.js +0 -216
  232. data/docs/code/js/jquery.js +0 -4
  233. data/docs/code/materials/utopia.png +0 -0
  234. data/docs/code/materials/utopia.svg +0 -1
  235. data/docs/code/method_list.html +0 -3443
  236. data/docs/code/top-level-namespace.html +0 -110
  237. data/docs/wiki.html +0 -92
  238. data/docs/wiki/development-environment-setup/index.html +0 -60
  239. data/docs/wiki/edit.html +0 -103
  240. data/docs/wiki/faq/what-is-xnode/index.html +0 -79
  241. data/docs/wiki/javascript.html +0 -153
  242. data/docs/wiki/javascript/index.html +0 -153
  243. data/docs/wiki/middleware/content/index.html +0 -64
  244. data/docs/wiki/middleware/controller/actions/index.html +0 -117
  245. data/docs/wiki/middleware/controller/actions/rewrite/index.html +0 -48
  246. data/docs/wiki/middleware/controller/index.html +0 -104
  247. data/docs/wiki/middleware/controller/rewrite/index.html +0 -111
  248. data/docs/wiki/middleware/localization/index.html +0 -59
  249. data/docs/wiki/middleware/redirection/index.html +0 -61
  250. data/docs/wiki/middleware/session/index.html +0 -71
  251. data/docs/wiki/middleware/static/index.html +0 -57
  252. data/docs/wiki/server-setup/index.html +0 -118
  253. data/docs/wiki/testing/index.html +0 -59
  254. data/docs/wiki/updating-utopia/index.html +0 -108
  255. data/docs/wiki/your-first-page/index.html +0 -80
  256. data/documentation/.rspec +0 -4
  257. data/documentation/.yarnrc +0 -1
  258. data/documentation/Gemfile +0 -19
  259. data/documentation/Guardfile +0 -9
  260. data/documentation/Rakefile +0 -9
  261. data/documentation/config.ru +0 -41
  262. data/documentation/config/README.md +0 -7
  263. data/documentation/config/environment.rb +0 -12
  264. data/documentation/lib/readme.txt +0 -1
  265. data/documentation/pages/_editor.xnode +0 -64
  266. data/documentation/pages/_heading.xnode +0 -2
  267. data/documentation/pages/_page.xnode +0 -40
  268. data/documentation/pages/errors/exception.xnode +0 -5
  269. data/documentation/pages/errors/file-not-found.xnode +0 -5
  270. data/documentation/pages/links.yaml +0 -2
  271. data/documentation/pages/wiki/_listing.xnode +0 -32
  272. data/documentation/pages/wiki/_navigation.xnode +0 -15
  273. data/documentation/pages/wiki/controller.rb +0 -48
  274. data/documentation/pages/wiki/edit.xnode +0 -10
  275. data/documentation/pages/wiki/links.yaml +0 -6
  276. data/documentation/pages/wiki/show.xnode +0 -12
  277. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +0 -6
  278. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +0 -5
  279. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +0 -8
  280. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +0 -6
  281. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +0 -10
  282. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +0 -3
  283. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.css.css +0 -14
  284. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +0 -16
  285. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.html.css +0 -5
  286. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +0 -3
  287. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +0 -2
  288. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.python.css +0 -6
  289. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +0 -2
  290. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +0 -18
  291. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.core.css +0 -62
  292. data/documentation/public/_components/jquery-syntax/base/jquery.syntax.editor.css +0 -6
  293. data/documentation/public/_components/jquery-syntax/base/theme.js +0 -1
  294. data/documentation/public/_components/jquery-syntax/bright/jquery.syntax.core.css +0 -27
  295. data/documentation/public/_components/jquery-syntax/bright/theme.js +0 -1
  296. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.apache.js +0 -41
  297. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.applescript.js +0 -57
  298. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.assembly.js +0 -37
  299. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +0 -67
  300. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.bash.js +0 -33
  301. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.basic.js +0 -51
  302. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.clang.js +0 -89
  303. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.csharp.js +0 -47
  304. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.css.js +0 -80
  305. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.diff.js +0 -24
  306. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.go.js +0 -47
  307. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.haskell.js +0 -45
  308. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.html.js +0 -66
  309. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.io.js +0 -45
  310. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.java.js +0 -45
  311. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.javascript.js +0 -40
  312. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.kai.js +0 -29
  313. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.lisp.js +0 -34
  314. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.lua.js +0 -44
  315. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.nginx.js +0 -31
  316. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +0 -73
  317. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ooc.js +0 -46
  318. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.pascal.js +0 -51
  319. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.perl5.js +0 -52
  320. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.php-script.js +0 -48
  321. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.php.js +0 -15
  322. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.plain.js +0 -10
  323. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +0 -43
  324. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.python.js +0 -44
  325. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ruby.js +0 -77
  326. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.scala.js +0 -44
  327. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +0 -29
  328. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.sql.js +0 -31
  329. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +0 -57
  330. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.swift.js +0 -55
  331. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.trenni.js +0 -35
  332. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.xml.js +0 -50
  333. data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.yaml.js +0 -29
  334. data/documentation/public/_components/jquery-syntax/jquery.syntax.cache.js +0 -65
  335. data/documentation/public/_components/jquery-syntax/jquery.syntax.core.js +0 -1098
  336. data/documentation/public/_components/jquery-syntax/jquery.syntax.editor.js +0 -291
  337. data/documentation/public/_components/jquery-syntax/jquery.syntax.js +0 -258
  338. data/documentation/public/_components/jquery-syntax/jquery.syntax.min.js +0 -13
  339. data/documentation/public/_components/jquery-syntax/paper/jquery.syntax.core.css +0 -31
  340. data/documentation/public/_components/jquery-syntax/paper/theme.js +0 -1
  341. data/documentation/public/_components/jquery/core.js +0 -482
  342. data/documentation/public/_components/jquery/jquery.js +0 -10220
  343. data/documentation/public/_components/jquery/jquery.min.js +0 -4
  344. data/documentation/public/_components/jquery/jquery.min.map +0 -1
  345. data/documentation/public/_components/jquery/jquery.slim.js +0 -8107
  346. data/documentation/public/_components/jquery/jquery.slim.min.js +0 -4
  347. data/documentation/public/_components/jquery/jquery.slim.min.map +0 -1
  348. data/documentation/public/_static +0 -1
  349. data/documentation/public/materials +0 -1
  350. data/documentation/spec/website_context.rb +0 -12
  351. data/documentation/spec/website_spec.rb +0 -16
  352. data/documentation/tasks +0 -1
  353. data/spec/utopia/content/link_spec.rb +0 -47
@@ -1,111 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
-
5
- <title>Rewrite - Utopia</title>
6
-
7
- <meta charset="UTF-8"/>
8
-
9
- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"/>
10
-
11
- <link rel="icon" type="image/png" href="../../../../_static/icon.png"/>
12
- <link rel="stylesheet" href="../../../../_static/site.css" type="text/css" media="screen"/>
13
-
14
- <script src="../../../../_components/jquery/jquery.min.js"></script>
15
- <script src="../../../../_components/jquery-syntax/jquery.syntax.min.js"></script>
16
-
17
- <script type="text/javascript">
18
- //<![CDATA[
19
- jQuery(function($) {
20
- $.syntax();
21
- });
22
- //]]>
23
- </script>
24
- </head>
25
-
26
- <body class="">
27
- <header>
28
- <img src="../../../../_static/utopia.svg"/>
29
- </header>
30
-
31
- <div id="page">
32
-
33
- <nav>
34
- › <a href="../../../../wiki.html">Wiki</a> › <span>Middleware</span> › <a href="../../controller.html">Controller</a> › <a href="../rewrite.html">Rewrite</a></nav>
35
-
36
-
37
- <h1 id="controllerrewrite">Controller::Rewrite</h1>
38
-
39
- <p>The <code class="language-ruby">Controller::Rewrite</code> layer can match and rewrite requests before they processed. This allows you to handle URLs like <code>/post/15/view</code> or <code>/blog/123-pictures-of-my-cat</code> easily. The basic rewrite operation is to extract some part of the path and optionally executes a block. That means that the path is modified before being passed on to the next layer in the controller, and controller instance variables may be set.</p>
40
-
41
- <h2 id="regular-expressions">Regular Expressions</h2>
42
-
43
- <p>In your <code>controller.rb</code>:</p>
44
-
45
- <pre><code class="language-ruby">prepend Rewrite, Actions
46
-
47
- rewrite.extract_prefix permalink: /(?&lt;id&gt;\d+)-(?&lt;title&gt;.*)/ do |request, path, match|
48
- # The rewrite matched, but there was no valid post, so we fail:
49
- fail! unless @post = Post.find(@permalink[:id])
50
-
51
- # If the path matched, but there was no suffix, we make it default to the post action:
52
- if match.post_match.empty?
53
- match.post_match.components &lt;&lt; &quot;post&quot;
54
- end
55
- end
56
-
57
- on 'post' do
58
- # You can do further processing here.
59
- fail! unless @post.published?
60
-
61
- @comments = @post.comments.first(5)
62
- end
63
-
64
- on 'edit' do
65
- # You can do further processing here.
66
- fail! unless @current_user&amp;.editor?
67
- end
68
- </code></pre>
69
-
70
- <p>In your <code>post.xnode</code>, as an example:</p>
71
-
72
- <pre><code class="language-trenni">&lt;content:page&gt;
73
- &lt;content:heading&gt;Post #{attributes[:permalink][:id]} about #{attributes[:permalink][:title]}&lt;/content:heading&gt;
74
-
75
- &lt;p&gt;#{attributes[:post].content}&lt;/p&gt;
76
- &lt;/content:page&gt;
77
- </code></pre>
78
-
79
- <p>Keep in mind, that URLs like <code>/123-pictures-of-my-cat/edit</code> will work as expected, and hit the <code>edit</code> action of the controller.</p>
80
-
81
- <h2 id="restful-resources">Restful Resources</h2>
82
-
83
- <p>Similar to the above, if we were solely interested in IDs, we could do the following:</p>
84
-
85
- <pre><code class="language-ruby">prepend Rewrite, Actions
86
-
87
- rewrite.extract_prefix post_id: Integer do |request, path, match|
88
- # The rewrite matched, but there was no valid post, so we fail:
89
- fail! unless @post = Post.find(@post_id)
90
-
91
- # If the path matched, but there was no suffix, we make it default to the post action:
92
- if match.post_match.empty?
93
- match.post_match.components &lt;&lt; &quot;post&quot;
94
- end
95
- end
96
- </code></pre>
97
-
98
- <p>This will only match complete integers. Assuming this code is in <code>/blog/controller.rb</code>, it would match something like <code>/blog/123/view</code> and assign <code class="language-ruby">Integer("123")</code> to <code class="language-ruby">@post_id</code>.</p>
99
-
100
- <h3 id="matching-other-things">Matching.. other things</h3>
101
-
102
- <p>It’s possible to match using <code class="language-ruby">Integer</code>, <code class="language-ruby">Float</code>, <code class="language-ruby">String</code>, and you can provide your own class which will be instantiated. If it doesn’t match, raise an exception and the rewrite rule will fail.</p>
103
-
104
-
105
- <footer>
106
- Last Modified: 2017-05-03 14:21:19 +1200 —
107
- </footer>
108
-
109
- </div>
110
- </body>
111
- </html>
@@ -1,59 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
-
5
- <title>Localization - Utopia</title>
6
-
7
- <meta charset="UTF-8"/>
8
-
9
- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"/>
10
-
11
- <link rel="icon" type="image/png" href="../../../_static/icon.png"/>
12
- <link rel="stylesheet" href="../../../_static/site.css" type="text/css" media="screen"/>
13
-
14
- <script src="../../../_components/jquery/jquery.min.js"></script>
15
- <script src="../../../_components/jquery-syntax/jquery.syntax.min.js"></script>
16
-
17
- <script type="text/javascript">
18
- //<![CDATA[
19
- jQuery(function($) {
20
- $.syntax();
21
- });
22
- //]]>
23
- </script>
24
- </head>
25
-
26
- <body class="">
27
- <header>
28
- <img src="../../../_static/utopia.svg"/>
29
- </header>
30
-
31
- <div id="page">
32
-
33
- <nav>
34
- › <a href="../../../wiki.html">Wiki</a> › <span>Middleware</span> › <a href="../localization.html">Localization</a></nav>
35
-
36
-
37
- <h1 id="localization">Localization</h1>
38
-
39
- <p>The localization middleware uses the <code>Accept-Language</code> header to guess the preferred locale out of the given options. If a request path maps to a resource, that resource is returned. Otherwise, a localized request is made.</p>
40
-
41
- <pre><code class="language-ruby">use Utopia::Localization,
42
- :default_locale =&gt; 'en',
43
- :locales =&gt; ['en', 'de', 'ja', 'zh']
44
- </code></pre>
45
-
46
- <p>Somewhere further down the chain, you can localize a resource:</p>
47
-
48
- <pre><code class="language-ruby">localization = Utopia::Localization[request]
49
- show_welcome(localization.current_locale)
50
- </code></pre>
51
-
52
-
53
- <footer>
54
- Last Modified: 2017-05-03 14:21:19 +1200 —
55
- </footer>
56
-
57
- </div>
58
- </body>
59
- </html>
@@ -1,61 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
-
5
- <title>Redirection - Utopia</title>
6
-
7
- <meta charset="UTF-8"/>
8
-
9
- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"/>
10
-
11
- <link rel="icon" type="image/png" href="../../../_static/icon.png"/>
12
- <link rel="stylesheet" href="../../../_static/site.css" type="text/css" media="screen"/>
13
-
14
- <script src="../../../_components/jquery/jquery.min.js"></script>
15
- <script src="../../../_components/jquery-syntax/jquery.syntax.min.js"></script>
16
-
17
- <script type="text/javascript">
18
- //<![CDATA[
19
- jQuery(function($) {
20
- $.syntax();
21
- });
22
- //]]>
23
- </script>
24
- </head>
25
-
26
- <body class="">
27
- <header>
28
- <img src="../../../_static/utopia.svg"/>
29
- </header>
30
-
31
- <div id="page">
32
-
33
- <nav>
34
- › <a href="../../../wiki.html">Wiki</a> › <span>Middleware</span> › <a href="../redirection.html">Redirection</a></nav>
35
-
36
-
37
- <h1 id="redirection">Redirection</h1>
38
-
39
- <p>A set of flexible URI rewriting middleware which includes support for string mappings, regular expressions and status codes (e.g. 404 errors).</p>
40
-
41
- <pre><code class="language-ruby"># String (fast hash lookup) rewriting:
42
- use Utopia::Redirection::Rewrite,
43
- '/' =&gt; '/welcome/index'
44
-
45
- # Redirect directories (e.g. /) to an index file (e.g. /index):
46
- use Utopia::Redirection::DirectoryIndex,
47
- index: 'index.html'
48
-
49
- # Redirect (error) status codes to actual pages:
50
- use Utopia::Redirection::Errors,
51
- 404 =&gt; '/errors/file-not-found'
52
- </code></pre>
53
-
54
-
55
- <footer>
56
- Last Modified: 2016-12-13 12:37:11 +1300 —
57
- </footer>
58
-
59
- </div>
60
- </body>
61
- </html>
@@ -1,71 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
-
5
- <title>Session - Utopia</title>
6
-
7
- <meta charset="UTF-8"/>
8
-
9
- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"/>
10
-
11
- <link rel="icon" type="image/png" href="../../../_static/icon.png"/>
12
- <link rel="stylesheet" href="../../../_static/site.css" type="text/css" media="screen"/>
13
-
14
- <script src="../../../_components/jquery/jquery.min.js"></script>
15
- <script src="../../../_components/jquery-syntax/jquery.syntax.min.js"></script>
16
-
17
- <script type="text/javascript">
18
- //<![CDATA[
19
- jQuery(function($) {
20
- $.syntax();
21
- });
22
- //]]>
23
- </script>
24
- </head>
25
-
26
- <body class="">
27
- <header>
28
- <img src="../../../_static/utopia.svg"/>
29
- </header>
30
-
31
- <div id="page">
32
-
33
- <nav>
34
- › <a href="../../../wiki.html">Wiki</a> › <span>Middleware</span> › <a href="../session.html">Session</a></nav>
35
-
36
-
37
- <h1 id="session">Session</h1>
38
-
39
- <p>The session management uses symmetric private key encryption to store data on the client and avoid tampering.</p>
40
-
41
- <pre><code class="language-ruby">use Utopia::Session,
42
- :expires_after =&gt; 3600,
43
- :secret =&gt; '40 or more random characters for your secret key'
44
- </code></pre>
45
-
46
- <p>All session data is stored on the client, but it’s encrypted with a salt and the secret key. It would be hard for the client to decrypt the data without the secret.</p>
47
-
48
- <h2 id="using-environmentyaml">Using <code>environment.yaml</code></h2>
49
-
50
- <p>The session secret should not be shared or ideally, not stored in source code. This can be easily achieved using an environment variable, stored in <code>environment.yaml</code> on the production server:</p>
51
-
52
- <pre><code class="language-ruby">use Utopia::Session,
53
- :expires_after =&gt; 3600,
54
- :secret =&gt; ENV['UTOPIA_SESSION_SECRET']
55
- </code></pre>
56
-
57
- <p>In development, the secret would be reset every time the server is restarted. To set a fixed secret on production, run the following:</p>
58
-
59
- <pre><code class="language-bash">$ utopia server environment UTOPIA_SESSION_SECRET=$(head /dev/urandom | shasum | base64 | head -c 40)
60
- </code></pre>
61
-
62
- <p>This is done by default when using <code>utopia server create</code> and <code>utopia server update</code>.</p>
63
-
64
-
65
- <footer>
66
- Last Modified: 2017-02-13 16:30:17 +1300 —
67
- </footer>
68
-
69
- </div>
70
- </body>
71
- </html>
@@ -1,57 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
-
5
- <title>Static - Utopia</title>
6
-
7
- <meta charset="UTF-8"/>
8
-
9
- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"/>
10
-
11
- <link rel="icon" type="image/png" href="../../../_static/icon.png"/>
12
- <link rel="stylesheet" href="../../../_static/site.css" type="text/css" media="screen"/>
13
-
14
- <script src="../../../_components/jquery/jquery.min.js"></script>
15
- <script src="../../../_components/jquery-syntax/jquery.syntax.min.js"></script>
16
-
17
- <script type="text/javascript">
18
- //<![CDATA[
19
- jQuery(function($) {
20
- $.syntax();
21
- });
22
- //]]>
23
- </script>
24
- </head>
25
-
26
- <body class="">
27
- <header>
28
- <img src="../../../_static/utopia.svg"/>
29
- </header>
30
-
31
- <div id="page">
32
-
33
- <nav>
34
- › <a href="../../../wiki.html">Wiki</a> › <span>Middleware</span> › <a href="../static.html">Static</a></nav>
35
-
36
-
37
- <h1 id="static">Static</h1>
38
-
39
- <p>This middleware serves static files using the <code>mime-types</code> library. By default, it works with <code>Rack::Sendfile</code> and supports <code>ETag</code> based caching. Normally, you’d prefer to put static files into <code>public/_static</code> but it’s also acceptable to put static content into <code>pages/</code> if it makes sense.</p>
40
-
41
- <pre><code class="language-ruby">use Utopia::Static,
42
- # The root path to serve files from:
43
- root: "path/to/root",
44
- # The mime-types to recognize/serve:
45
- types: [:default, :xiph],
46
- # Cache-Control header for files:
47
- cache_control: 'public, max-age=7200'
48
- </code></pre>
49
-
50
-
51
- <footer>
52
- Last Modified: 2016-12-13 12:36:48 +1300 —
53
- </footer>
54
-
55
- </div>
56
- </body>
57
- </html>
@@ -1,118 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
-
5
- <title>Server Setup - Utopia</title>
6
-
7
- <meta charset="UTF-8"/>
8
-
9
- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"/>
10
-
11
- <link rel="icon" type="image/png" href="../../_static/icon.png"/>
12
- <link rel="stylesheet" href="../../_static/site.css" type="text/css" media="screen"/>
13
-
14
- <script src="../../_components/jquery/jquery.min.js"></script>
15
- <script src="../../_components/jquery-syntax/jquery.syntax.min.js"></script>
16
-
17
- <script type="text/javascript">
18
- //<![CDATA[
19
- jQuery(function($) {
20
- $.syntax();
21
- });
22
- //]]>
23
- </script>
24
- </head>
25
-
26
- <body class="">
27
- <header>
28
- <img src="../../_static/utopia.svg"/>
29
- </header>
30
-
31
- <div id="page">
32
-
33
- <nav>
34
- › <a href="../../wiki.html">Wiki</a> › <a href="../server-setup.html">Server Setup</a></nav>
35
-
36
-
37
- <h1 id="server-setup">Server Setup</h1>
38
-
39
- <p>Utopia is designed to make deployment to remote servers easy.</p>
40
-
41
- <h2 id="deployment">Deployment</h2>
42
-
43
- <p>The preferred method of deployment to a production server is via git. The <code>utopia</code> command assists with setup of a remote git repository on the server. It will setup a <code>git</code> <code>post-update</code> hook which will deploy the site correctly and restart passenger for that site.</p>
44
-
45
- <p>To setup a server for deployment:</p>
46
-
47
- <pre><code class="language-bash">$ mkdir /srv/http/www.example.com
48
- $ cd /srv/http/www.example.com
49
- $ sudo -u http utopia server create
50
- </code></pre>
51
-
52
- <p>On your development machine, you should setup the git remote:</p>
53
-
54
- <pre><code class="language-bash">$ git remote add production ssh://remote/srv/http/www.example.com
55
- $ git push --set-upstream production master
56
- </code></pre>
57
-
58
- <h3 id="default-environment">Default Environment</h3>
59
-
60
- <p>Utopia will load <code>config/environment.yaml</code> and update <code>ENV</code> before executing any code. You can set default environment values using the <code>utopia</code> command:</p>
61
-
62
- <pre><code class="language-bash">$ sudo -u http utopia environment RACK_ENV=production DATABASE_ENV=production_cluster_primary
63
- ENV["RACK_ENV"] will default to "production" unless otherwise specified.
64
- ENV["DATABASE_ENV"] will default to "production_cluster_primary" unless otherwise specified.
65
- </code></pre>
66
-
67
- <p>To set a value, write <code>KEY=VALUE</code>. To unset a key, write <code>KEY</code>.</p>
68
-
69
- <p>When you run <code>rake</code> tasks or spawn a server, the values in <code>config/environment.yaml</code> will be the defaults. You can override them by manually specifying them, e.g. <code>DATABASE_ENV=development rake db:info</code>.</p>
70
-
71
- <h2 id="platform">Platform</h2>
72
-
73
- <p>The best deployment platform for Utopia is Linux. Specifically, <a href="https://www.archlinux.org/">Arch Linux</a> with the following packages:</p>
74
-
75
- <ul>
76
- <li><a href="https://aur.archlinux.org/packages/nginx-mainline-passenger/">nginx-mainline-passenger</a></li>
77
- <li><a href="https://aur.archlinux.org/packages/passenger-nginx-module/">passenger-nginx-module</a></li>
78
- </ul>
79
-
80
- <p>There have been issues with the official packages and thus these packages were developed and tested with Utopia deployment in mind.</p>
81
-
82
- <h3 id="sample-nginx-configuration">Sample Nginx Configuration</h3>
83
-
84
- <p>Create a configuration file for your site, e.g. <code>/etc/nginx/sites/www.example.com</code>:</p>
85
-
86
- <pre><code class="language-nginx">server {
87
- listen 80;
88
- server_name www.example.com;
89
- root /srv/http/www.example.com/public;
90
- passenger_enabled on;
91
- }
92
-
93
- server {
94
- listen 80;
95
- server_name example.com;
96
- rewrite ^ http://www.example.com$uri permanent;
97
- }
98
- </code></pre>
99
-
100
- <h3 id="sudo-setup">Sudo Setup</h3>
101
-
102
- <p>Create a file <code>/etc/sudoers.d/http</code> with the following contents:</p>
103
-
104
- <pre><code class="language-sudoers"># Allow user samuel to check out code as user http using git:
105
- %wheel ALL=(http) NOPASSWD: ALL
106
- </code></pre>
107
-
108
- <p>This allows the deploy task to correctly checkout code as user <code>http</code>.</p>
109
-
110
-
111
-
112
- <footer>
113
- Last Modified: 2018-03-24 20:49:16 +1300 —
114
- </footer>
115
-
116
- </div>
117
- </body>
118
- </html>