utopia 2.13.4 → 2.14.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -39,7 +39,7 @@ module Utopia
39
39
  self.content_type = "text/html; charset=utf-8"
40
40
  end
41
41
 
42
- attr :status
42
+ attr_accessor :status
43
43
  attr :headers
44
44
  attr :body
45
45
 
@@ -68,7 +68,7 @@ module Utopia
68
68
  @headers[EXPIRES] = (Time.now + duration).httpdate
69
69
  end
70
70
  end
71
-
71
+
72
72
  # Specify the content type of the response data.
73
73
  def content_type= value
74
74
  @headers[CONTENT_TYPE] = value
@@ -35,6 +35,10 @@ module Utopia
35
35
  @env[LOCALIZATION_KEY]
36
36
  end
37
37
 
38
+ def localized?
39
+ localization != nil
40
+ end
41
+
38
42
  # Returns the current locale or nil if not localized.
39
43
  def current_locale
40
44
  @env[CURRENT_LOCALE_KEY]
@@ -49,6 +53,10 @@ module Utopia
49
53
  def all_locales
50
54
  localization && localization.all_locales || []
51
55
  end
56
+
57
+ def localized_path(path, locale)
58
+ "/#{locale}#{path}"
59
+ end
52
60
  end
53
61
 
54
62
  def self.[] request
@@ -66,15 +74,19 @@ module Utopia
66
74
  # @param default_locales [String] The locales to try in order if none is provided.
67
75
  # @param hosts [Hash<Pattern, String>] Specify a mapping of the HTTP_HOST header to a given locale.
68
76
  # @param ignore [Array<Pattern>] A list of patterns matched against PATH_INFO which will not be localized.
69
- def initialize(app, locales:, default_locale: nil, default_locales: nil, hosts: {}, ignore: [], **options)
77
+ def initialize(app, locales:, default_locale: nil, default_locales: nil, hosts: {}, ignore: [])
70
78
  @app = app
71
79
 
72
80
  @all_locales = HTTP::Accept::Languages::Locales.new(locales)
73
81
 
74
82
  # Locales here are represented as an array of strings, e.g. ['en', 'ja', 'cn', 'de'] and are used in order if no locale is specified by the user.
75
83
  unless @default_locales = default_locales
76
- # We append nil, i.e. no localization.
77
- @default_locales = @all_locales.names + [nil]
84
+ if default_locale
85
+ @default_locales = [default_locale, nil]
86
+ else
87
+ # We append nil, i.e. no localization.
88
+ @default_locales = @all_locales.names + [nil]
89
+ end
78
90
  end
79
91
 
80
92
  @default_locale = default_locale || @default_locales.first
@@ -87,6 +99,8 @@ module Utopia
87
99
  @hosts = hosts
88
100
 
89
101
  @ignore = ignore || options[:nonlocalized]
102
+
103
+ @methods = methods
90
104
  end
91
105
 
92
106
  def freeze
@@ -166,13 +180,7 @@ module Utopia
166
180
  return []
167
181
  end
168
182
 
169
- SAFE_METHODS = ['GET', 'HEAD']
170
-
171
183
  def localized?(env)
172
- # Only SAFE_METHODS can be localized:
173
- request_method = env[Rack::REQUEST_METHOD]
174
- return false unless SAFE_METHODS.include?(request_method)
175
-
176
184
  # Ignore requests which match the ignored paths:
177
185
  path_info = env[Rack::PATH_INFO]
178
186
  return false if @ignore.any? { |pattern| path_info[pattern] != nil }
@@ -206,7 +214,7 @@ module Utopia
206
214
 
207
215
  # We have a non-localized request, but there might be a localized resource. We return the best localization possible:
208
216
  preferred_locales(env) do |localized_env|
209
- # puts "Trying locale: #{env[CURRENT_LOCALE_KEY]}: #{env[Rack::PATH_INFO]}..."
217
+ # puts "Trying locale: #{localized_env[CURRENT_LOCALE_KEY]}: #{localized_env[Rack::PATH_INFO]}..."
210
218
 
211
219
  response = @app.call(localized_env)
212
220
 
@@ -30,9 +30,9 @@ module Utopia
30
30
  def initialize(components = [])
31
31
  @components = components
32
32
  end
33
-
33
+
34
34
  attr_accessor :components
35
-
35
+
36
36
  def freeze
37
37
  @components.freeze
38
38
 
@@ -65,22 +65,22 @@ module Utopia
65
65
 
66
66
  return self.create([".."] * up + path.components[i..-1])
67
67
  end
68
-
68
+
69
69
  def shortest_path(root)
70
70
  self.class.shortest_path(self, root)
71
71
  end
72
-
72
+
73
73
  # Converts '+' into whitespace and hex encoded characters into their equivalent characters.
74
74
  def self.unescape(string)
75
75
  string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) {
76
76
  [$1.delete('%')].pack('H*')
77
77
  }
78
78
  end
79
-
79
+
80
80
  def self.[] path
81
81
  self.create(path)
82
82
  end
83
-
83
+
84
84
  def self.split(path)
85
85
  case path
86
86
  when Path
@@ -115,15 +115,17 @@ module Utopia
115
115
  return self.new(path)
116
116
  when String
117
117
  return self.new(unescape(path).split(SEPARATOR, -1))
118
+ when nil
119
+ return nil
118
120
  else
119
121
  return self.new([path])
120
122
  end
121
123
  end
122
-
124
+
123
125
  def replace(other_path)
124
126
  @components = other_path.components.dup
125
127
  end
126
-
128
+
127
129
  def include?(*args)
128
130
  @components.include?(*args)
129
131
  end
@@ -131,7 +133,7 @@ module Utopia
131
133
  def directory?
132
134
  return @components.last == ''
133
135
  end
134
-
136
+
135
137
  def to_directory
136
138
  if directory?
137
139
  return self
@@ -139,15 +141,15 @@ module Utopia
139
141
  return join([''])
140
142
  end
141
143
  end
142
-
144
+
143
145
  def relative?
144
146
  @components.first != ''
145
147
  end
146
-
148
+
147
149
  def absolute?
148
150
  @components.first == ''
149
151
  end
150
-
152
+
151
153
  def to_absolute
152
154
  if absolute?
153
155
  return self
@@ -155,11 +157,11 @@ module Utopia
155
157
  return self.class.new([''] + @components)
156
158
  end
157
159
  end
158
-
160
+
159
161
  def to_relative!
160
162
  @components.shift if relative?
161
163
  end
162
-
164
+
163
165
  def to_str
164
166
  if @components == ['']
165
167
  SEPARATOR
@@ -167,21 +169,21 @@ module Utopia
167
169
  @components.join(SEPARATOR)
168
170
  end
169
171
  end
170
-
172
+
171
173
  alias to_s to_str
172
174
 
173
175
  def to_a
174
176
  @components
175
177
  end
176
-
178
+
177
179
  def join(other)
178
180
  self.class.new(@components + other).simplify
179
181
  end
180
-
182
+
181
183
  def expand(root)
182
184
  root + self
183
185
  end
184
-
186
+
185
187
  def +(other)
186
188
  if other.kind_of? Path
187
189
  if other.absolute?
@@ -197,11 +199,11 @@ module Utopia
197
199
  return join([other.to_s])
198
200
  end
199
201
  end
200
-
202
+
201
203
  def with_prefix(*args)
202
204
  self.class.create(*args) + self
203
205
  end
204
-
206
+
205
207
  # Computes the difference of the path.
206
208
  # /a/b/c - /a/b -> c
207
209
  # a/b/c - a/b -> c
@@ -216,10 +218,10 @@ module Utopia
216
218
 
217
219
  return self.class.new(@components[i,@components.size])
218
220
  end
219
-
221
+
220
222
  def simplify
221
223
  result = absolute? ? [''] : []
222
-
224
+
223
225
  @components.each do |bit|
224
226
  if bit == ".."
225
227
  result.pop
@@ -227,18 +229,20 @@ module Utopia
227
229
  result << bit
228
230
  end
229
231
  end
230
-
232
+
231
233
  result << '' if directory?
232
234
 
233
235
  return self.class.new(result)
234
236
  end
235
-
237
+
238
+ # @return [String] the last path component without any file extension.
236
239
  def basename
237
240
  basename, _ = @components.last.split('.', 2)
238
241
 
239
242
  return basename || ''
240
243
  end
241
244
 
245
+ # @return [String] the last path component's file extension.
242
246
  def extension
243
247
  _, extension = @components.last.split('.', 2)
244
248
 
@@ -247,14 +251,14 @@ module Utopia
247
251
 
248
252
  def dirname(count = 1)
249
253
  path = self.class.new(@components[0...-count])
250
-
254
+
251
255
  return absolute? ? path.to_absolute : path
252
256
  end
253
-
254
- def to_local_path(separator = File::SEPARATOR)
257
+
258
+ def local_path(separator = File::SEPARATOR)
255
259
  @components.join(separator)
256
260
  end
257
-
261
+
258
262
  def descend(&block)
259
263
  return to_enum(:descend) unless block_given?
260
264
 
@@ -278,7 +282,7 @@ module Utopia
278
282
  components.pop
279
283
  end
280
284
  end
281
-
285
+
282
286
  def split(at)
283
287
  if at.kind_of? String
284
288
  at = @components.index(at)
@@ -290,15 +294,15 @@ module Utopia
290
294
  return nil
291
295
  end
292
296
  end
293
-
297
+
294
298
  def dup
295
299
  return Path.new(components.dup)
296
300
  end
297
-
301
+
298
302
  def <=> other
299
303
  @components <=> other.components
300
304
  end
301
-
305
+
302
306
  def eql? other
303
307
  self.class.eql?(other.class) and @components.eql?(other.components)
304
308
  end
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module Utopia
24
- VERSION = "2.13.4"
24
+ VERSION = "2.14.0"
25
25
  end
@@ -2,15 +2,17 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- gem 'utopia', '~> $UTOPIA_VERSION'
6
- # gem 'utopia-gallery'
7
- # gem 'utopia-analytics'
5
+ group :preload do
6
+ gem 'utopia', '~> $UTOPIA_VERSION'
7
+ # gem 'utopia-gallery'
8
+ # gem 'utopia-analytics'
9
+
10
+ gem 'variant'
11
+ end
8
12
 
9
13
  gem 'rake'
10
14
  gem 'bake'
11
- gem 'variant'
12
15
  gem 'bundler'
13
-
14
16
  gem 'rack-test'
15
17
 
16
18
  group :development do
@@ -34,7 +34,7 @@ RSpec.describe "utopia command" do
34
34
 
35
35
  before(:all) do
36
36
  # We need to build a package to test deployment:
37
- system("rake", "build") or abort("Could not build package for setup spec!")
37
+ system("bundle", "exec", "bake", "bundler:build") or abort("Could not build package for setup spec!")
38
38
  end
39
39
 
40
40
  around(:each) do |example|
@@ -0,0 +1,2 @@
1
+ index:
2
+ title: "Parent?"
File without changes
@@ -2,8 +2,17 @@ welcome:
2
2
  order: 1
3
3
  title: "Welcome"
4
4
  uri: "/welcome"
5
+
5
6
  index:
6
7
  order: 0
8
+ title: "Home"
9
+
7
10
  # This metadata also gets merged with foo/links.yml#index
8
11
  foo:
9
- order: 2
12
+ order: 2
13
+
14
+ bar:
15
+ order: 3
16
+
17
+ redirect:
18
+ order: 4
@@ -0,0 +1,2 @@
1
+ index:
2
+ uri: https://www.codeotaku.com
@@ -27,75 +27,192 @@ RSpec.describe Utopia::Content::Links do
27
27
  let(:root) {File.expand_path("links", __dir__)}
28
28
  subject {described_class.new(root)}
29
29
 
30
- describe 'INDEX_XNODE_FILTER' do
31
- subject{Utopia::Content::Links::INDEX_XNODE_FILTER}
32
-
30
+ describe '#index_filter' do
33
31
  it "should match index" do
34
- expect("index.xnode").to match(subject)
32
+ expect("index.xnode").to match(subject.index_filter)
35
33
  end
36
34
 
37
35
  it "should not match invalid index" do
38
- expect("old-index.xnode").to_not match(subject)
36
+ expect("old-index.xnode").to_not match(subject.index_filter)
39
37
  end
40
38
  end
41
39
 
42
- it "should not match partial strings" do
43
- links = subject.index(Utopia::Path.create("/"), name: "come")
40
+ context 'matching name' do
41
+ it "can match named link" do
42
+ links = subject.index("/", name: "welcome")
43
+
44
+ expect(links.size).to be == 1
45
+ expect(links[0].name).to be == "welcome"
46
+ end
44
47
 
45
- expect(links).to be_empty
48
+ it "doesn't match partial names" do
49
+ links = subject.index("/", name: "come")
50
+
51
+ expect(links).to be_empty
52
+ end
46
53
  end
47
54
 
48
- it "should give a list of links" do
49
- links = subject.index(Utopia::Path.create("/"))
50
-
51
- expect(links.size).to be == 3
52
-
53
- expect(links[0].kind).to be == :virtual
54
- expect(links[0].href).to be == nil
55
-
56
- expect(links[1].title).to be == "Welcome"
57
- expect(links[1].to_href).to be == '<a class="link" href="/welcome">Welcome</a>'
58
- expect(links[1].kind).to be == :file
59
- expect(links[1].href).to be == "/welcome"
60
- expect(links[1].name).to be == 'welcome'
61
-
62
- expect(links[2].title).to be == 'Foo Bar'
63
- expect(links[2].kind).to be == :directory
64
- expect(links[2].href).to be == "/foo/index"
65
- expect(links[2].name).to be == 'foo'
66
-
67
- expect(links[1]).to be_eql links[1]
68
- expect(links[0]).to_not be_eql links[1]
55
+ context 'with name filter' do
56
+ it "should filter links by name" do
57
+ links = subject.index("/", name: /foo/)
58
+
59
+ expect(links.size).to be == 1
60
+ end
69
61
  end
70
62
 
71
- it "should filter links by name" do
72
- links = subject.index(Utopia::Path.create("/"), name: /foo/)
73
-
74
- expect(links.size).to be == 1
63
+ context 'without locale' do
64
+ it "should index all links" do
65
+ links = subject.index("/foo")
66
+ expect(links.size).to be == 2
67
+
68
+ expect(links[0].name).to be == "test"
69
+ expect(links[0].locale).to be == "de"
70
+
71
+ expect(links[1].name).to be == "test"
72
+ expect(links[1].locale).to be == "en"
73
+ end
75
74
  end
76
75
 
77
- it "should select localized links" do
78
- # Select both test links
79
- links = subject.index(Utopia::Path.create("/foo"))
80
- expect(links.size).to be == 2
81
-
82
- links = subject.index(Utopia::Path.create("/foo"), locale: 'en')
83
- expect(links.size).to be == 1
76
+ context 'with locale' do
77
+ it "should select localized links" do
78
+ links = subject.index("/foo", locale: 'en')
79
+ expect(links.size).to be == 1
80
+
81
+ expect(links[0].name).to be == "test"
82
+ expect(links[0].locale).to be == "en"
83
+ end
84
84
  end
85
85
 
86
- context 'localized links' do
86
+ context 'with localized links' do
87
87
  let(:root) {File.expand_path("localized", __dir__)}
88
88
 
89
89
  it "should read correct link order for en" do
90
- links = subject.index(Utopia::Path.create("/"), locale: 'en')
90
+ links = subject.index("/", locale: 'en')
91
91
 
92
92
  expect(links.collect(&:title)).to be == ['One', 'Two', 'Three', 'Four', 'Five']
93
93
  end
94
94
 
95
95
  it "should read correct link order for zh" do
96
- links = subject.index(Utopia::Path.create("/"), locale: 'zh')
96
+ links = subject.index("/", locale: 'zh')
97
97
 
98
98
  expect(links.collect(&:title)).to be == ['One', 'Two', 'Three', '四']
99
99
  end
100
100
  end
101
+
102
+ describe '#index' do
103
+ it "should give a list of links" do
104
+ links = subject.index("/")
105
+
106
+ expect(links.size).to be == 4
107
+
108
+ expect(links[0].title).to be == "Welcome"
109
+ expect(links[0].kind).to be == :file
110
+ expect(links[0].name).to be == 'welcome'
111
+ expect(links[0].locale).to be_nil
112
+ expect(links[0].path).to be == ['', 'welcome']
113
+ expect(links[0].href).to be == "/welcome"
114
+ expect(links[0].to_href).to be == '<a class="link" href="/welcome">Welcome</a>'
115
+
116
+ expect(links[1].title).to be == 'Foo Bar'
117
+ expect(links[1].kind).to be == :directory
118
+ expect(links[1].name).to be == 'foo'
119
+ expect(links[1].locale).to be_nil
120
+ expect(links[1].path).to be == ['', 'foo', 'index']
121
+ expect(links[1].href).to be == "/foo/index"
122
+
123
+ expect(links[2].title).to be == 'Bar'
124
+ expect(links[2].kind).to be == :directory
125
+ expect(links[2].name).to be == 'bar'
126
+ expect(links[2].locale).to be_nil
127
+ expect(links[2].path).to be == ['', 'bar', 'index']
128
+ expect(links[2].href).to be == "/bar/index"
129
+
130
+ expect(links[3].title).to be == 'Redirect'
131
+ expect(links[3].kind).to be == :directory
132
+ expect(links[3].name).to be == 'redirect'
133
+ expect(links[3].locale).to be_nil
134
+ expect(links[3].path).to be == ['', 'redirect']
135
+ expect(links[3].href).to be == "https://www.codeotaku.com"
136
+
137
+ expect(links[1]).to be_eql links[1]
138
+ expect(links[0]).to_not be_eql links[1]
139
+ end
140
+
141
+ it "can list directories" do
142
+ links = subject.index("/bar")
143
+
144
+ expect(links.size).to be == 1
145
+
146
+ expect(links[0].title).to be == "Parent?"
147
+ expect(links[0].kind).to be == :directory
148
+ expect(links[0].name).to be == "parent"
149
+ expect(links[0].locale).to be_nil
150
+ expect(links[0].path).to be == ['', 'bar', 'parent']
151
+ end
152
+
153
+ it "can list directories with multiple localized indexes" do
154
+ links = subject.index("/bar/parent").sort_by(&:locale)
155
+
156
+ expect(links.size).to be == 2
157
+
158
+ expect(links[0].title).to be == "Child"
159
+ expect(links[0].kind).to be == :directory
160
+ expect(links[0].name).to be == "child"
161
+ expect(links[0].locale).to be == 'en'
162
+ expect(links[0].path).to be == ['', 'bar', 'parent', 'child', 'index']
163
+
164
+ expect(links[1].title).to be == "Child"
165
+ expect(links[1].kind).to be == :directory
166
+ expect(links[1].name).to be == "child"
167
+ expect(links[1].locale).to be == 'ja'
168
+ expect(links[1].path).to be == ['', 'bar', 'parent', 'child', 'index']
169
+ end
170
+
171
+ it "can get title of /index" do
172
+ links = subject.index("/", indices: true, name: "index")
173
+
174
+ expect(links.size).to be 1
175
+
176
+ link = links.first
177
+
178
+ expect(link.title).to be == "Home"
179
+ end
180
+
181
+ it "can get title of /foo/index" do
182
+ links = subject.index("/foo", indices: true, name: "index")
183
+
184
+ expect(links.size).to be 1
185
+
186
+ link = links.first
187
+
188
+ expect(link.title).to be == "Foo Bar"
189
+ end
190
+
191
+ it "can get title of /bar/index" do
192
+ links = subject.index("/bar", indices: true, name: "index")
193
+
194
+ expect(links.size).to be 1
195
+
196
+ link = links.first
197
+
198
+ expect(link.title).to be == "Bar"
199
+ end
200
+ end
201
+
202
+ describe '#for' do
203
+ it "can get title of /index" do
204
+ link = subject.for(Utopia::Path["/index"])
205
+ expect(link.title).to be == "Home"
206
+ end
207
+
208
+ it "can get title of /foo/index" do
209
+ link = subject.for(Utopia::Path["/foo/index"])
210
+ expect(link.title).to be == "Foo Bar"
211
+ end
212
+
213
+ it "can get title of /bar/index" do
214
+ link = subject.for(Utopia::Path["/bar/index"])
215
+ expect(link.title).to be == "Bar"
216
+ end
217
+ end
101
218
  end