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
@@ -27,7 +27,8 @@ require 'concurrent/map'
27
27
  module Utopia
28
28
  class Content
29
29
  # The file extension for markup nodes on disk.
30
- XNODE_EXTENSION = '.xnode'.freeze
30
+ XNODE_EXTENSION = '.xnode'
31
+ INDEX = "index"
31
32
 
32
33
  class Links
33
34
  def self.for(root, path, locale = nil)
@@ -40,47 +41,55 @@ module Utopia
40
41
  self.new(root).index(path, **options)
41
42
  end
42
43
 
43
- XNODE_FILTER = /^(.+)#{Regexp.escape XNODE_EXTENSION}$/
44
- INDEX_XNODE_FILTER = /^(index(\..+)*)#{Regexp.escape XNODE_EXTENSION}$/
45
-
46
- def initialize(root)
44
+ def initialize(root, extension: XNODE_EXTENSION)
47
45
  @root = root
48
46
 
49
- @cache = Concurrent::Map.new
47
+ @extension = extension
48
+ @file_filter = /\A(?<key>(?<name>[^.]+)(\.(?<locale>.+))?)#{Regexp.escape extension}\Z/
49
+ @index_filter = /\A(?<key>(?<name>index)(\.(?<locale>.+))?)#{Regexp.escape extension}\Z/
50
+
51
+ @metadata_cache = Concurrent::Map.new
52
+ @links_cache = Concurrent::Map.new
50
53
  end
51
54
 
55
+ attr :extension
56
+ attr :file_filter
57
+ attr :index_filter
58
+
59
+ # Resolve a link for the specified path, which must be a path to a specific link.
60
+ # for(Path["/index"])
52
61
  def for(path, locale = nil)
53
- links = Resolved.new(self, path.dirname)
54
-
55
- links.lookup(path.last, locale)
62
+ links(path.dirname).lookup(path.last, locale)
56
63
  end
57
64
 
58
- DEFAULT_INDEX_OPTIONS = {
59
- :directories => true,
60
- :files => true,
61
- :virtuals => true,
62
- :indices => false,
63
- :sort => :order,
64
- :display => :display,
65
- }
66
-
67
- def index(path, **options)
68
- options = DEFAULT_INDEX_OPTIONS.merge(options)
65
+ # Give an index of all links that can be reached from the given path.
66
+ def index(path, name: nil, locale: nil, display: :display, sort: :order, sort_default: 0, directories: true, files: true, virtuals: true, indices: false)
67
+ ordered = links(path).ordered.dup
68
+
69
+ # Ignore specific kinds of links:
70
+ ignore = []
71
+ ignore << :directory unless directories
72
+ ignore << :file unless files
73
+ ignore << :virtual unless virtuals
74
+ ignore << :index unless indices
69
75
 
70
- ordered = Resolved.new(self, path, options).ordered
76
+ if ignore.any?
77
+ ordered.reject!{|link| ignore.include?(link.kind)}
78
+ end
71
79
 
72
- # This option filters a link based on the display parameter.
73
- if display_key = options[:display]
74
- ordered.reject!{|link| link.info[display_key] == false}
80
+ # Filter links by display key:
81
+ if display
82
+ ordered.reject!{|link| link.info[display] == false}
75
83
  end
76
84
 
77
- # Named:
78
- if name = options[:name]
85
+ # Filter links by name:
86
+ if name
79
87
  # We use pattern === name, which matches either the whole string, or matches a regexp.
80
88
  ordered.select!{|link| name === link.name}
81
89
  end
82
90
 
83
- if locale = options[:locale]
91
+ # Filter by locale:
92
+ if locale
84
93
  locales = {}
85
94
 
86
95
  ordered.each do |link|
@@ -94,10 +103,10 @@ module Utopia
94
103
  ordered = locales.values
95
104
  end
96
105
 
97
- # Sort:
98
- if sort_key = options[:sort]
106
+ # Order by sort key:
107
+ if sort
99
108
  # Sort by sort_key, otherwise by title.
100
- ordered.sort_by!{|link| [link[sort_key] || options[:sort_default] || 0, link.title]}
109
+ ordered.sort_by!{|link| [link[sort] || sort_default, link.title]}
101
110
  end
102
111
 
103
112
  return ordered
@@ -105,38 +114,65 @@ module Utopia
105
114
 
106
115
  attr :root
107
116
 
108
- # Represents a list of {Link} instances relating to the structure of the content. They are formed from the `links.yaml` file and the actual directory structure on disk.
109
- class Resolved
110
- DEFAULT_OPTIONS = {
111
- :directories => true,
112
- :files => true,
113
- :virtuals => true,
114
- :indices => true,
115
- }
117
+ def metadata(path)
118
+ @metadata_cache.fetch_or_store(path.to_s) do
119
+ load_metadata(path)
120
+ end
121
+ end
122
+
123
+ def links(path)
124
+ @links_cache.fetch_or_store(path.to_s) do
125
+ load_links(path)
126
+ end
127
+ end
128
+
129
+ private
130
+
131
+ def symbolize_keys(map)
132
+ # Second level attributes should be symbolic:
133
+ map.each do |key, info|
134
+ map[key] = info.each_with_object({}) { |(k,v),result| result[k.to_sym] = v }
135
+ end
116
136
 
117
- def initialize(links, top = Path.root, options = DEFAULT_OPTIONS)
137
+ return map
138
+ end
139
+
140
+ LINKS_YAML = "links.yaml"
141
+
142
+ def load_metadata(path)
143
+ yaml_path = File.join(path, LINKS_YAML)
144
+
145
+ if File.exist?(yaml_path) && data = YAML::load_file(yaml_path)
146
+ return symbolize_keys(data)
147
+ else
148
+ return {}
149
+ end
150
+ end
151
+
152
+ # Represents a list of {Link} instances relating to the structure of the content. They are formed from the `links.yaml` file and the actual directory structure on disk.
153
+ class Resolver
154
+ def initialize(links, top = Path.root)
118
155
  raise ArgumentError.new("top path must be absolute") unless top.absolute?
119
156
 
120
157
  @links = links
121
158
 
122
159
  @top = top
123
- @options = options
124
160
 
125
161
  # top.components.first == '', but this isn't a problem here.
126
162
  @path = File.join(links.root, top.components)
127
163
 
128
164
  @ordered = []
129
- @named = Hash.new{|h,k| h[k] = []}
165
+ @named = {}
130
166
 
131
- if File.directory? @path
167
+ if File.directory?(@path)
132
168
  @metadata = links.metadata(@path)
133
169
 
134
170
  load_links(@metadata.dup) do |link|
135
171
  @ordered << link
136
- @named[link.name] << link
172
+ (@named[link.name] ||= []) << link
137
173
  end
138
174
  else
139
- @metadata = {}
175
+ @metadata = nil
140
176
  end
141
177
  end
142
178
 
@@ -144,6 +180,10 @@ module Utopia
144
180
  attr :ordered
145
181
  attr :named
146
182
 
183
+ def indices
184
+ return @ordered.select{|link| link.index?}
185
+ end
186
+
147
187
  def each(locale)
148
188
  return to_enum(:each, locale) unless block_given?
149
189
 
@@ -155,115 +195,137 @@ module Utopia
155
195
  def lookup(name, locale = nil)
156
196
  # This allows generic links to serve any locale requested.
157
197
  if links = @named[name]
158
- links.find{|link| link.locale == locale} || links.find{|link| link.locale == nil}
198
+ generic_link = nil
199
+
200
+ links.each do |link|
201
+ if link.locale == locale
202
+ return link
203
+ elsif link.locale.nil?
204
+ generic_link = link
205
+ end
206
+ end
207
+
208
+ return generic_link
159
209
  end
160
210
  end
161
211
 
162
212
  private
163
213
 
164
- def indices(path, &block)
165
- Dir.entries(path).select{|filename| filename.match(INDEX_XNODE_FILTER)}
214
+ def entries(path)
215
+ Dir.entries(path).reject{|entry| entry.match(/^[\._]/)}
166
216
  end
167
217
 
168
- def load_indices(name, path, metadata)
169
- directory_metadata = metadata.delete(name) || {}
170
- indices_metadata = @links.metadata(path)
218
+ # @param name [String] the name of the directory.
219
+ def load_directory(name, metadata, &block)
220
+ defaults = metadata.delete(name) || {}
171
221
 
172
- indices_count = 0
222
+ links = @links.links(@top + name).indices
173
223
 
174
- indices(path).each do |filename|
175
- index_name = File.basename(filename, XNODE_EXTENSION)
176
- # Values in indices_metadata will override values in directory_metadata:
177
- index_metadata = directory_metadata.merge(indices_metadata[index_name] || {})
178
-
179
- directory_link = Link.new(:directory, @top + [name, index_name], index_metadata)
180
-
181
- # Merge metadata from foo.en into foo/index.en
182
- if directory_link.locale
183
- localized_key = "#{directory_link.name}.#{directory_link.locale}"
184
- if localized_metadata = metadata.delete(localized_key)
185
- directory_link.info.update(localized_metadata)
186
- end
224
+ links.each do |link|
225
+ # We extract the metadata according to the localized link:
226
+ if info = metadata.delete("#{name}.#{link.locale}")
227
+ info = info.merge(link.info)
228
+ else
229
+ info = link.info
187
230
  end
188
231
 
189
- yield directory_link
190
-
191
- indices_count += 1
232
+ yield Link.new(:directory, name, link.locale, link.path, defaults.merge(info))
233
+ end
234
+ end
235
+
236
+ def load_index(name, locale, info)
237
+ info ||= {}
238
+
239
+ if locale and defaults = @metadata[name]
240
+ info = defaults.merge(info)
192
241
  end
193
242
 
194
- if indices_count == 0
195
- # Specify a nil uri if no index could be found for the directory:
196
- yield Link.new(:directory, top + [name], {:uri => nil}.merge(directory_metadata))
243
+ path = @top + name
244
+
245
+ yield Link.new(:index, name, locale, path, info, path[-2])
246
+ end
247
+
248
+ def load_default_index(name = INDEX, info = {})
249
+ path = @top + name
250
+
251
+ if info
252
+ info = {uri: nil}.merge(info)
253
+ else
254
+ info = {uri: nil}
197
255
  end
256
+
257
+ # Specify a nil uri if no index could be found for the directory:
258
+ yield Link.new(:index, name, nil, @top, info, path[-2])
198
259
  end
199
260
 
200
- def entries(path)
201
- Dir.entries(path).reject{|filename| filename.match(/^[\._]/)}
261
+ def load_file(name, locale, info)
262
+ info ||= {}
263
+
264
+ if locale and defaults = @metadata[name]
265
+ info = defaults.merge(info)
266
+ end
267
+
268
+ path = @top + name
269
+
270
+ yield Link.new(:file, name, locale, path, info)
202
271
  end
203
272
 
204
- def load_links(metadata, &block)
205
- # Load all metadata for a given path:
206
- metadata = @metadata.dup
273
+ def load_virtuals(metadata)
274
+ virtuals = {}
207
275
 
208
- # Check all entries in the given directory:
209
- entries(@path).each do |filename|
210
- path = File.join(@path, filename)
276
+ # After processing all directory entries, we are left with virtual links:
277
+ metadata.each do |key, info|
278
+ name, locale = key.split('.', 2)
279
+ localized = (virtuals[name] ||= {})
280
+ localized[locale] = info
281
+ end
282
+
283
+ virtuals.each do |name, localized|
284
+ defaults = localized[nil]
211
285
 
212
- # There are two types of filelinks based links:
213
- # 1/ Named files, e.g. foo.xnode, name=foo
214
- # 2/ Directories, e.g. bar/index.xnode, name=bar
215
- if File.directory?(path) and @options[:directories]
216
- load_indices(filename, path, metadata, &block)
217
- elsif filename.match(INDEX_XNODE_FILTER) and @options[:indices] == false
218
- metadata.delete($1) # We don't include indices in the list of pages.
219
- elsif filename.match(XNODE_FILTER) and @options[:files]
220
- yield Link.new(:file, @top + $1, metadata.delete($1))
286
+ localized.each do |locale, info|
287
+ info = defaults&.merge(info) || info
288
+ path = info[:path]
289
+
290
+ yield Link.new(:virtual, name, locale, path, info)
221
291
  end
222
292
  end
293
+ end
294
+
295
+ def load_links(metadata, &block)
296
+ index_loaded = false
223
297
 
224
- if @options[:virtuals]
225
- # After processing all directory entries, we are left with virtual entries in the metadata:
226
- metadata.each do |name, info|
227
- virtual_link = Link.new(:virtual, name, info)
298
+ # Check all entries in the given directory:
299
+ entries(@path).each do |entry|
300
+ path = File.join(@path, entry)
301
+
302
+ # There are serveral types of file based links:
303
+
304
+ # 1. Directories, e.g. bar/ (name=bar)
305
+ if File.directory?(path)
306
+ load_directory(entry, metadata, &block)
228
307
 
229
- # Given a virtual named such as "welcome.cn", merge it with metadata from "welcome" if it exists:
230
- if virtual_metadata = @metadata[virtual_link.name]
231
- virtual_link.info.update(virtual_metadata)
232
- end
308
+ # 2. Index files, e.g. index.xnode, name=parent
309
+ elsif match = entry.match(@links.index_filter)
310
+ load_index(match[:name], match[:locale], metadata.delete(match[:key]), &block)
311
+ index_loaded = true
233
312
 
234
- yield virtual_link
313
+ # 3. Named files, e.g. foo.xnode, name=foo
314
+ elsif match = entry.match(@links.file_filter)
315
+ load_file(match[:name], match[:locale], metadata.delete(match[:key]), &block)
235
316
  end
236
317
  end
318
+
319
+ unless index_loaded
320
+ load_default_index(INDEX, metadata.delete(INDEX), &block)
321
+ end
322
+
323
+ load_virtuals(metadata, &block)
237
324
  end
238
325
  end
239
326
 
240
- def metadata(path)
241
- @cache.fetch_or_store(path.to_s) do
242
- load(path).freeze
243
- end
244
- end
245
-
246
- private
247
-
248
- def symbolize_keys(hash)
249
- # Second level attributes should be symbolic:
250
- hash.each do |key, info|
251
- hash[key] = info.each_with_object({}) { |(k,v),result| result[k.to_sym] = v }
252
- end
253
-
254
- return hash
255
- end
256
-
257
- LINKS_YAML = "links.yaml"
258
-
259
- def load(path)
260
- yaml_path = File.join(path, LINKS_YAML)
261
-
262
- if File.exist?(yaml_path) && data = YAML::load_file(yaml_path)
263
- return symbolize_keys(data)
264
- else
265
- return {}
266
- end
327
+ def load_links(path)
328
+ Resolver.new(self, Path.create(path))
267
329
  end
268
330
  end
269
331
  end
@@ -33,28 +33,24 @@ module Utopia
33
33
  class Node
34
34
  def initialize(controller, uri_path, request_path, file_path)
35
35
  @controller = controller
36
-
36
+
37
37
  @uri_path = uri_path
38
38
  @request_path = request_path
39
39
  @file_path = file_path
40
40
  end
41
-
41
+
42
42
  attr :request_path
43
43
  attr :uri_path
44
44
  attr :file_path
45
-
45
+
46
46
  def name
47
47
  @uri_path.basename
48
48
  end
49
-
50
- def link
51
- return Link.new(:file, uri_path)
52
- end
53
-
49
+
54
50
  def lookup_node(path)
55
51
  @controller.lookup_node(parent_path + Path[path])
56
52
  end
57
-
53
+
58
54
  def local_path(path = '.', base = nil)
59
55
  path = Path[path]
60
56
 
@@ -78,7 +74,7 @@ module Utopia
78
74
  def parent_path
79
75
  @uri_path.dirname
80
76
  end
81
-
77
+
82
78
  def links(path = '.', **options, &block)
83
79
  path = uri_path.dirname + Path[path]
84
80
 
@@ -90,11 +86,11 @@ module Utopia
90
86
  links
91
87
  end
92
88
  end
93
-
89
+
94
90
  def related_links
95
- @controller.links(@uri_path.dirname, :name => @uri_path.basename, :indices => true)
91
+ @controller.links(@uri_path.dirname, name: @uri_path.basename, indices: true)
96
92
  end
97
-
93
+
98
94
  def siblings_path
99
95
  if @uri_path.basename == INDEX
100
96
  @uri_path.dirname(2)
@@ -102,7 +98,7 @@ module Utopia
102
98
  @uri_path.dirname
103
99
  end
104
100
  end
105
-
101
+
106
102
  def sibling_links(**options)
107
103
  return @controller.links(siblings_path, **options)
108
104
  end
@@ -129,7 +125,7 @@ module Utopia
129
125
  def process!(request, attributes = {})
130
126
  Document.render(self, request, attributes).to_a
131
127
  end
132
-
128
+
133
129
  # This is a special context in which a limited set of well defined methods are exposed in the content view.
134
130
  Context = Struct.new(:document, :state) do
135
131
  def partial(*args, &block)
@@ -173,11 +169,11 @@ module Utopia
173
169
  def content
174
170
  document.content
175
171
  end
176
-
172
+
177
173
  def parent
178
174
  document.parent
179
175
  end
180
-
176
+
181
177
  def first
182
178
  document.first
183
179
  end