utopia 2.13.4 → 2.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/development.yml +62 -0
- data/README.md +3 -5
- data/bake/utopia/yarn.rb +4 -2
- data/docs/_components/jquery-litebox/jquery.litebox.css +23 -0
- data/docs/_components/jquery-litebox/jquery.litebox.gallery.css +48 -0
- data/docs/_components/jquery-litebox/jquery.litebox.js +30 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +6 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +4 -10
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +5 -2
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +8 -8
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +1 -1
- data/docs/_components/jquery-syntax/base/jquery.syntax.core.css +43 -47
- data/docs/_components/jquery-syntax/jquery.syntax.brush.apache.js +3 -41
- data/docs/_components/jquery-syntax/jquery.syntax.brush.applescript.js +5 -57
- data/docs/_components/jquery-syntax/jquery.syntax.brush.assembly.js +3 -37
- data/docs/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +4 -67
- data/docs/_components/jquery-syntax/jquery.syntax.brush.bash.js +2 -33
- data/docs/_components/jquery-syntax/jquery.syntax.brush.basic.js +5 -51
- data/docs/_components/jquery-syntax/jquery.syntax.brush.clang.js +5 -89
- data/docs/_components/jquery-syntax/jquery.syntax.brush.csharp.js +4 -47
- data/docs/_components/jquery-syntax/jquery.syntax.brush.css.js +5 -80
- data/docs/_components/jquery-syntax/jquery.syntax.brush.diff.js +2 -24
- data/docs/_components/jquery-syntax/jquery.syntax.brush.go.js +3 -47
- data/docs/_components/jquery-syntax/jquery.syntax.brush.haskell.js +3 -45
- data/docs/_components/jquery-syntax/jquery.syntax.brush.html.js +4 -66
- data/docs/_components/jquery-syntax/jquery.syntax.brush.io.js +3 -45
- data/docs/_components/jquery-syntax/jquery.syntax.brush.java.js +4 -45
- data/docs/_components/jquery-syntax/jquery.syntax.brush.javascript.js +3 -40
- data/docs/_components/jquery-syntax/jquery.syntax.brush.kai.js +2 -29
- data/docs/_components/jquery-syntax/jquery.syntax.brush.lisp.js +2 -34
- data/docs/_components/jquery-syntax/jquery.syntax.brush.lua.js +3 -44
- data/docs/_components/jquery-syntax/jquery.syntax.brush.nginx.js +2 -31
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +4 -73
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ooc.js +4 -46
- data/docs/_components/jquery-syntax/jquery.syntax.brush.pascal.js +4 -51
- data/docs/_components/jquery-syntax/jquery.syntax.brush.perl5.js +3 -52
- data/docs/_components/jquery-syntax/jquery.syntax.brush.php-script.js +4 -48
- data/docs/_components/jquery-syntax/jquery.syntax.brush.php.js +2 -15
- data/docs/_components/jquery-syntax/jquery.syntax.brush.plain.js +2 -10
- data/docs/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +3 -43
- data/docs/_components/jquery-syntax/jquery.syntax.brush.python.js +5 -44
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ruby.js +5 -77
- data/docs/_components/jquery-syntax/jquery.syntax.brush.scala.js +4 -44
- data/docs/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +2 -29
- data/docs/_components/jquery-syntax/jquery.syntax.brush.sql.js +4 -31
- data/docs/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +3 -57
- data/docs/_components/jquery-syntax/jquery.syntax.brush.swift.js +3 -55
- data/docs/_components/jquery-syntax/jquery.syntax.brush.trenni.js +2 -35
- data/docs/_components/jquery-syntax/jquery.syntax.brush.xml.js +4 -50
- data/docs/_components/jquery-syntax/jquery.syntax.brush.yaml.js +2 -29
- data/docs/_components/jquery-syntax/jquery.syntax.cache.js +7 -65
- data/docs/_components/jquery-syntax/jquery.syntax.core.js +34 -1098
- data/docs/_components/jquery-syntax/jquery.syntax.editor.js +11 -291
- data/docs/_components/jquery-syntax/jquery.syntax.js +8 -258
- data/docs/_components/jquery/jquery.js +1678 -1026
- data/docs/_components/jquery/jquery.min.js +2 -4
- data/docs/_components/jquery/jquery.min.map +1 -1
- data/docs/_components/jquery/jquery.slim.js +1602 -932
- data/docs/_components/jquery/jquery.slim.min.js +2 -4
- data/docs/_components/jquery/jquery.slim.min.map +1 -1
- data/docs/_static/icon.png +0 -0
- data/docs/_static/site.css +100 -114
- data/docs/{wiki/development-environment-setup.html → development-environment-setup/index.html} +9 -15
- data/docs/{wiki/faq/what-is-xnode.html → faq/what-is-xnode/index.html} +9 -15
- data/docs/index.html +25 -31
- data/docs/javascript/index.html +108 -0
- data/docs/{wiki/middleware/content.html → middleware/content/index.html} +9 -15
- data/docs/{wiki/middleware/controller/actions.html → middleware/controller/actions/index.html} +11 -17
- data/docs/{wiki/middleware/controller.html → middleware/controller/index.html} +9 -15
- data/docs/{wiki/middleware/controller/rewrite.html → middleware/controller/rewrite/index.html} +9 -15
- data/docs/{wiki/middleware/localization.html → middleware/localization/index.html} +9 -15
- data/docs/{wiki/middleware/redirection.html → middleware/redirection/index.html} +9 -15
- data/docs/{wiki/middleware/session.html → middleware/session/index.html} +9 -15
- data/docs/{wiki/middleware/static.html → middleware/static/index.html} +9 -15
- data/docs/{wiki/server-setup.html → server-setup/index.html} +11 -42
- data/docs/{wiki/testing.html → testing/index.html} +10 -16
- data/docs/{wiki/updating-utopia.html → updating-utopia/index.html} +9 -15
- data/docs/{wiki/your-first-page.html → your-first-page/index.html} +11 -17
- data/lib/utopia/content.rb +23 -19
- data/lib/utopia/content/link.rb +29 -34
- data/lib/utopia/content/links.rb +185 -123
- data/lib/utopia/content/node.rb +13 -17
- data/lib/utopia/content/response.rb +2 -2
- data/lib/utopia/localization.rb +18 -10
- data/lib/utopia/path.rb +36 -32
- data/lib/utopia/version.rb +1 -1
- data/setup/site/Gemfile +7 -5
- data/spec/utopia/command_spec.rb +1 -1
- data/spec/utopia/content/links/bar/index.xnode +0 -0
- data/spec/utopia/content/links/bar/parent/child/index.en.xnode +0 -0
- data/spec/utopia/content/links/bar/parent/child/index.ja.xnode +0 -0
- data/spec/utopia/content/links/bar/parent/links.yaml +2 -0
- data/spec/utopia/content/links/index.xnode +0 -0
- data/spec/utopia/content/links/links.yaml +10 -1
- data/spec/utopia/content/links/redirect/links.yaml +2 -0
- data/spec/utopia/content/links_spec.rb +160 -43
- data/spec/utopia/content/localized/links.yaml +2 -5
- data/spec/utopia/content/node_spec.rb +1 -1
- data/spec/utopia/path_spec.rb +50 -5
- data/wiki/Gemfile +9 -0
- data/wiki/config.ru +7 -0
- data/{documentation/pages/wiki/development-environment-setup/content.md → wiki/pages/development-environment-setup/index.md} +0 -0
- data/wiki/pages/faq/links.yaml +2 -0
- data/{documentation/pages/wiki/faq/what-is-xnode/content.md → wiki/pages/faq/what-is-xnode/index.md} +1 -1
- data/wiki/pages/faq/what-is-xnode/links.yaml +2 -0
- data/{documentation/pages/wiki/content.md → wiki/pages/index.md} +2 -2
- data/{documentation/pages/wiki/javascript/content.md → wiki/pages/javascript/index.md} +15 -13
- data/wiki/pages/javascript/links.yaml +2 -0
- data/wiki/pages/links.yaml +2 -0
- data/{documentation/pages/wiki/middleware/content/content.md → wiki/pages/middleware/content/index.md} +0 -0
- data/{documentation/pages/wiki/middleware/controller/actions/content.md → wiki/pages/middleware/controller/actions/index.md} +2 -2
- data/{documentation/pages/wiki/middleware/controller/content.md → wiki/pages/middleware/controller/index.md} +0 -0
- data/{documentation/pages/wiki → wiki/pages}/middleware/controller/links.yaml +0 -0
- data/{documentation/pages/wiki/middleware/controller/rewrite/content.md → wiki/pages/middleware/controller/rewrite/index.md} +0 -0
- data/{documentation/pages/wiki/middleware/localization/content.md → wiki/pages/middleware/localization/index.md} +0 -0
- data/{documentation/pages/wiki/middleware/redirection/content.md → wiki/pages/middleware/redirection/index.md} +0 -0
- data/{documentation/pages/wiki/middleware/session/content.md → wiki/pages/middleware/session/index.md} +0 -0
- data/{documentation/pages/wiki/middleware/static/content.md → wiki/pages/middleware/static/index.md} +0 -0
- data/{documentation/pages/wiki/server-setup/content.md → wiki/pages/server-setup/index.md} +0 -0
- data/{documentation/pages/wiki/testing/content.md → wiki/pages/testing/index.md} +0 -0
- data/{documentation/pages/wiki/updating-utopia/content.md → wiki/pages/updating-utopia/index.md} +0 -0
- data/{documentation/pages/wiki/your-first-page/content.md → wiki/pages/your-first-page/index.md} +2 -2
- metadata +56 -263
- data/.travis.yml +0 -28
- data/Rakefile +0 -33
- data/docs/_components/jquery/core.js +0 -482
- data/docs/_static/utopia-background.svg +0 -1
- data/docs/_static/utopia.svg +0 -1
- data/docs/code/Utopia.html +0 -517
- data/docs/code/Utopia/Basename.html +0 -654
- data/docs/code/Utopia/Bootstrap.html +0 -538
- data/docs/code/Utopia/Command.html +0 -213
- data/docs/code/Utopia/Command/Environment.html +0 -321
- data/docs/code/Utopia/Command/Server.html +0 -214
- data/docs/code/Utopia/Command/Server/Create.html +0 -222
- data/docs/code/Utopia/Command/Server/Environment.html +0 -236
- data/docs/code/Utopia/Command/Server/Update.html +0 -317
- data/docs/code/Utopia/Command/Setup.html +0 -145
- data/docs/code/Utopia/Command/Setup/Server.html +0 -298
- data/docs/code/Utopia/Command/Setup/Site.html +0 -180
- data/docs/code/Utopia/Command/Site.html +0 -285
- data/docs/code/Utopia/Command/Site/Create.html +0 -324
- data/docs/code/Utopia/Command/Site/Update.html +0 -407
- data/docs/code/Utopia/Command/Top.html +0 -279
- data/docs/code/Utopia/Content.html +0 -832
- data/docs/code/Utopia/Content/Document.html +0 -1822
- data/docs/code/Utopia/Content/Document/State.html +0 -1220
- data/docs/code/Utopia/Content/Link.html +0 -1286
- data/docs/code/Utopia/Content/Links.html +0 -847
- data/docs/code/Utopia/Content/MarkupParser.html +0 -881
- data/docs/code/Utopia/Content/MarkupParser/ParsedTag.html +0 -422
- data/docs/code/Utopia/Content/MarkupParser/UnbalancedTagError.html +0 -615
- data/docs/code/Utopia/Content/Namespace.html +0 -485
- data/docs/code/Utopia/Content/Node.html +0 -1188
- data/docs/code/Utopia/Content/Node/Context.html +0 -938
- data/docs/code/Utopia/Content/Response.html +0 -813
- data/docs/code/Utopia/Content/SymbolicHash.html +0 -419
- data/docs/code/Utopia/Content/Tag.html +0 -399
- data/docs/code/Utopia/Content/Tags.html +0 -136
- data/docs/code/Utopia/Content/Tags/ContentTag.html +0 -187
- data/docs/code/Utopia/Content/Tags/DeferredTag.html +0 -193
- data/docs/code/Utopia/Content/Tags/Library.html +0 -333
- data/docs/code/Utopia/Content/Tags/NodeTag.html +0 -193
- data/docs/code/Utopia/Content/UnbalancedTagError.html +0 -298
- data/docs/code/Utopia/ContentLength.html +0 -343
- data/docs/code/Utopia/Controller.html +0 -907
- data/docs/code/Utopia/Controller/Actions.html +0 -289
- data/docs/code/Utopia/Controller/Actions/Action.html +0 -984
- data/docs/code/Utopia/Controller/Actions/ClassMethods.html +0 -442
- data/docs/code/Utopia/Controller/Base.html +0 -1216
- data/docs/code/Utopia/Controller/Respond.html +0 -293
- data/docs/code/Utopia/Controller/Respond/ClassMethods.html +0 -236
- data/docs/code/Utopia/Controller/Respond/Converter.html +0 -256
- data/docs/code/Utopia/Controller/Respond/Converter/Callback.html +0 -484
- data/docs/code/Utopia/Controller/Respond/Converter/ToJSON.html +0 -381
- data/docs/code/Utopia/Controller/Respond/Passthrough.html +0 -297
- data/docs/code/Utopia/Controller/Respond/Responder.html +0 -535
- data/docs/code/Utopia/Controller/Rewrite.html +0 -290
- data/docs/code/Utopia/Controller/Rewrite/ClassMethods.html +0 -242
- data/docs/code/Utopia/Controller/Rewrite/ExtractPrefixRule.html +0 -364
- data/docs/code/Utopia/Controller/Rewrite/Rewriter.html +0 -464
- data/docs/code/Utopia/Controller/Rewrite/Rule.html +0 -209
- data/docs/code/Utopia/Controller/Variables.html +0 -550
- data/docs/code/Utopia/Controllers.html +0 -244
- data/docs/code/Utopia/Exceptions.html +0 -127
- data/docs/code/Utopia/Exceptions/Handler.html +0 -526
- data/docs/code/Utopia/Exceptions/Mailer.html +0 -482
- data/docs/code/Utopia/Extensions.html +0 -117
- data/docs/code/Utopia/Extensions/ArraySplit.html +0 -183
- data/docs/code/Utopia/Extensions/DateTimeComparison.html +0 -193
- data/docs/code/Utopia/Extensions/TimeDateComparison.html +0 -193
- data/docs/code/Utopia/HTTP.html +0 -250
- data/docs/code/Utopia/HTTP/Status.html +0 -415
- data/docs/code/Utopia/Locale.html +0 -606
- data/docs/code/Utopia/Localization.html +0 -1241
- data/docs/code/Utopia/Localization/Wrapper.html +0 -459
- data/docs/code/Utopia/Logger.html +0 -205
- data/docs/code/Utopia/Logger/CompactFormatter.html +0 -335
- data/docs/code/Utopia/Path.html +0 -3310
- data/docs/code/Utopia/Path/Matcher.html +0 -518
- data/docs/code/Utopia/Path/Matcher/MatchData.html +0 -475
- data/docs/code/Utopia/Redirection.html +0 -151
- data/docs/code/Utopia/Redirection/ClientRedirect.html +0 -717
- data/docs/code/Utopia/Redirection/DirectoryIndex.html +0 -298
- data/docs/code/Utopia/Redirection/Errors.html +0 -476
- data/docs/code/Utopia/Redirection/Moved.html +0 -312
- data/docs/code/Utopia/Redirection/RequestFailure.html +0 -226
- data/docs/code/Utopia/Redirection/Rewrite.html +0 -296
- data/docs/code/Utopia/Session.html +0 -889
- data/docs/code/Utopia/Session/LazyHash.html +0 -859
- data/docs/code/Utopia/Setup.html +0 -970
- data/docs/code/Utopia/Static.html +0 -696
- data/docs/code/Utopia/Static/LocalFile.html +0 -1104
- data/docs/code/Utopia/Static/MimeTypeLoader.html +0 -541
- data/docs/code/Utopia/Static/MimeTypeLoader/ExpansionError.html +0 -124
- data/docs/code/Utopia/Tags.html +0 -115
- data/docs/code/Utopia/Tags/Environment.html +0 -314
- data/docs/code/Utopia/Tags/EnvironmentTag.html +0 -314
- data/docs/code/Utopia/Tags/Library.html +0 -340
- data/docs/code/_index.html +0 -758
- data/docs/code/class_list.html +0 -51
- data/docs/code/css/common.css +0 -1
- data/docs/code/css/full_list.css +0 -58
- data/docs/code/css/style.css +0 -496
- data/docs/code/file.README.html +0 -171
- data/docs/code/file_list.html +0 -56
- data/docs/code/frames.html +0 -17
- data/docs/code/index.html +0 -171
- data/docs/code/js/app.js +0 -292
- data/docs/code/js/full_list.js +0 -216
- data/docs/code/js/jquery.js +0 -4
- data/docs/code/materials/utopia.png +0 -0
- data/docs/code/materials/utopia.svg +0 -1
- data/docs/code/method_list.html +0 -3443
- data/docs/code/top-level-namespace.html +0 -110
- data/docs/wiki.html +0 -92
- data/docs/wiki/development-environment-setup/index.html +0 -60
- data/docs/wiki/edit.html +0 -103
- data/docs/wiki/faq/what-is-xnode/index.html +0 -79
- data/docs/wiki/javascript.html +0 -153
- data/docs/wiki/javascript/index.html +0 -153
- data/docs/wiki/middleware/content/index.html +0 -64
- data/docs/wiki/middleware/controller/actions/index.html +0 -117
- data/docs/wiki/middleware/controller/actions/rewrite/index.html +0 -48
- data/docs/wiki/middleware/controller/index.html +0 -104
- data/docs/wiki/middleware/controller/rewrite/index.html +0 -111
- data/docs/wiki/middleware/localization/index.html +0 -59
- data/docs/wiki/middleware/redirection/index.html +0 -61
- data/docs/wiki/middleware/session/index.html +0 -71
- data/docs/wiki/middleware/static/index.html +0 -57
- data/docs/wiki/server-setup/index.html +0 -118
- data/docs/wiki/testing/index.html +0 -59
- data/docs/wiki/updating-utopia/index.html +0 -108
- data/docs/wiki/your-first-page/index.html +0 -80
- data/documentation/.rspec +0 -4
- data/documentation/.yarnrc +0 -1
- data/documentation/Gemfile +0 -19
- data/documentation/Guardfile +0 -9
- data/documentation/Rakefile +0 -9
- data/documentation/config.ru +0 -41
- data/documentation/config/README.md +0 -7
- data/documentation/config/environment.rb +0 -12
- data/documentation/lib/readme.txt +0 -1
- data/documentation/pages/_editor.xnode +0 -64
- data/documentation/pages/_heading.xnode +0 -2
- data/documentation/pages/_page.xnode +0 -40
- data/documentation/pages/errors/exception.xnode +0 -5
- data/documentation/pages/errors/file-not-found.xnode +0 -5
- data/documentation/pages/links.yaml +0 -2
- data/documentation/pages/wiki/_listing.xnode +0 -32
- data/documentation/pages/wiki/_navigation.xnode +0 -15
- data/documentation/pages/wiki/controller.rb +0 -48
- data/documentation/pages/wiki/edit.xnode +0 -10
- data/documentation/pages/wiki/links.yaml +0 -6
- data/documentation/pages/wiki/show.xnode +0 -12
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +0 -5
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +0 -8
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +0 -10
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +0 -3
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.css.css +0 -14
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +0 -16
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.html.css +0 -5
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +0 -3
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +0 -2
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.python.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +0 -2
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +0 -18
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.core.css +0 -62
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.editor.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/theme.js +0 -1
- data/documentation/public/_components/jquery-syntax/bright/jquery.syntax.core.css +0 -27
- data/documentation/public/_components/jquery-syntax/bright/theme.js +0 -1
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.apache.js +0 -41
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.applescript.js +0 -57
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.assembly.js +0 -37
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +0 -67
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.bash.js +0 -33
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.basic.js +0 -51
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.clang.js +0 -89
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.csharp.js +0 -47
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.css.js +0 -80
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.diff.js +0 -24
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.go.js +0 -47
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.haskell.js +0 -45
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.html.js +0 -66
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.io.js +0 -45
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.java.js +0 -45
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.javascript.js +0 -40
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.kai.js +0 -29
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.lisp.js +0 -34
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.lua.js +0 -44
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.nginx.js +0 -31
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +0 -73
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ooc.js +0 -46
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.pascal.js +0 -51
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.perl5.js +0 -52
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.php-script.js +0 -48
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.php.js +0 -15
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.plain.js +0 -10
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +0 -43
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.python.js +0 -44
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ruby.js +0 -77
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.scala.js +0 -44
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +0 -29
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.sql.js +0 -31
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +0 -57
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.swift.js +0 -55
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.trenni.js +0 -35
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.xml.js +0 -50
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.yaml.js +0 -29
- data/documentation/public/_components/jquery-syntax/jquery.syntax.cache.js +0 -65
- data/documentation/public/_components/jquery-syntax/jquery.syntax.core.js +0 -1098
- data/documentation/public/_components/jquery-syntax/jquery.syntax.editor.js +0 -291
- data/documentation/public/_components/jquery-syntax/jquery.syntax.js +0 -258
- data/documentation/public/_components/jquery-syntax/jquery.syntax.min.js +0 -13
- data/documentation/public/_components/jquery-syntax/paper/jquery.syntax.core.css +0 -31
- data/documentation/public/_components/jquery-syntax/paper/theme.js +0 -1
- data/documentation/public/_components/jquery/core.js +0 -482
- data/documentation/public/_components/jquery/jquery.js +0 -10220
- data/documentation/public/_components/jquery/jquery.min.js +0 -4
- data/documentation/public/_components/jquery/jquery.min.map +0 -1
- data/documentation/public/_components/jquery/jquery.slim.js +0 -8107
- data/documentation/public/_components/jquery/jquery.slim.min.js +0 -4
- data/documentation/public/_components/jquery/jquery.slim.min.map +0 -1
- data/documentation/public/_static +0 -1
- data/documentation/public/materials +0 -1
- data/documentation/spec/website_context.rb +0 -12
- data/documentation/spec/website_spec.rb +0 -16
- data/documentation/tasks +0 -1
- data/spec/utopia/content/link_spec.rb +0 -47
data/lib/utopia/content/links.rb
CHANGED
@@ -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'
|
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
|
-
|
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
|
-
@
|
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
|
54
|
-
|
55
|
-
links.lookup(path.last, locale)
|
62
|
+
links(path.dirname).lookup(path.last, locale)
|
56
63
|
end
|
57
64
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
:
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
76
|
+
if ignore.any?
|
77
|
+
ordered.reject!{|link| ignore.include?(link.kind)}
|
78
|
+
end
|
71
79
|
|
72
|
-
#
|
73
|
-
if
|
74
|
-
ordered.reject!{|link| link.info[
|
80
|
+
# Filter links by display key:
|
81
|
+
if display
|
82
|
+
ordered.reject!{|link| link.info[display] == false}
|
75
83
|
end
|
76
84
|
|
77
|
-
#
|
78
|
-
if 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
|
-
|
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
|
-
#
|
98
|
-
if
|
106
|
+
# Order by sort key:
|
107
|
+
if sort
|
99
108
|
# Sort by sort_key, otherwise by title.
|
100
|
-
ordered.sort_by!{|link| [link[
|
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
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
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
|
-
|
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 =
|
165
|
+
@named = {}
|
130
166
|
|
131
|
-
if File.directory?
|
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
|
-
|
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
|
165
|
-
Dir.entries(path).
|
214
|
+
def entries(path)
|
215
|
+
Dir.entries(path).reject{|entry| entry.match(/^[\._]/)}
|
166
216
|
end
|
167
217
|
|
168
|
-
|
169
|
-
|
170
|
-
|
218
|
+
# @param name [String] the name of the directory.
|
219
|
+
def load_directory(name, metadata, &block)
|
220
|
+
defaults = metadata.delete(name) || {}
|
171
221
|
|
172
|
-
|
222
|
+
links = @links.links(@top + name).indices
|
173
223
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
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
|
190
|
-
|
191
|
-
|
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
|
-
|
195
|
-
|
196
|
-
|
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
|
201
|
-
|
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
|
205
|
-
|
206
|
-
metadata = @metadata.dup
|
273
|
+
def load_virtuals(metadata)
|
274
|
+
virtuals = {}
|
207
275
|
|
208
|
-
#
|
209
|
-
|
210
|
-
|
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
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
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
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
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
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
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
|
-
|
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
|
241
|
-
|
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
|
data/lib/utopia/content/node.rb
CHANGED
@@ -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, :
|
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
|