├── .editorconfig ├── .gitignore ├── .htaccess ├── README.md ├── assets ├── css │ ├── index.css │ ├── lightbox.css │ ├── prism.css │ └── templates │ │ ├── about.css │ │ ├── album.css │ │ ├── home.css │ │ └── note.css ├── icons │ ├── discord.svg │ ├── instagram.svg │ ├── mastodon.svg │ └── youtube.svg └── js │ ├── index.js │ ├── lightbox.js │ └── prism.js ├── composer.json ├── content ├── 1_photography │ ├── 1_trees │ │ ├── album.txt │ │ ├── cheesy-autumn.jpg │ │ ├── cheesy-autumn.jpg.txt │ │ ├── last-tree-standing.jpg │ │ ├── last-tree-standing.jpg.txt │ │ ├── monster-trees-in-the-fog.jpg │ │ ├── monster-trees-in-the-fog.jpg.txt │ │ ├── sharewood-forest.jpg │ │ ├── sharewood-forest.jpg.txt │ │ ├── stay-in-the-car.jpg │ │ └── stay-in-the-car.jpg.txt │ ├── 2_sky │ │ ├── album.txt │ │ ├── blood-moon.jpg │ │ ├── blood-moon.jpg.txt │ │ ├── coconut-milkyway.jpg │ │ ├── coconut-milkyway.jpg.txt │ │ ├── dark-forest.jpg │ │ ├── dark-forest.jpg.txt │ │ ├── desert-tree.jpg │ │ ├── desert-tree.jpg.txt │ │ ├── tent-in-the-woods.jpg │ │ └── tent-in-the-woods.jpg.txt │ ├── 3_ocean │ │ ├── album.txt │ │ ├── attention-sharks.jpg │ │ ├── attention-sharks.jpg.txt │ │ ├── island-from-above.jpg │ │ ├── island-from-above.jpg.txt │ │ ├── jellyfish.jpg │ │ ├── jellyfish.jpg.txt │ │ ├── nasty-rocks.jpg │ │ ├── nasty-rocks.jpg.txt │ │ ├── smashed-by-waves.jpg │ │ ├── smashed-by-waves.jpg.txt │ │ ├── the-beach.jpg │ │ └── the-beach.jpg.txt │ ├── 4_desert │ │ ├── album.txt │ │ ├── area-51.jpg │ │ ├── area-51.jpg.txt │ │ ├── death-trap.jpg │ │ ├── death-trap.jpg.txt │ │ ├── dune.jpg │ │ ├── dune.jpg.txt │ │ ├── indiana-jones.jpg │ │ ├── indiana-jones.jpg.txt │ │ ├── water-please.jpg │ │ └── water-please.jpg.txt │ ├── 5_mountains │ │ ├── album.txt │ │ ├── climbers-are-crazy.jpg │ │ ├── climbers-are-crazy.jpg.txt │ │ ├── non-potable.jpg │ │ ├── non-potable.jpg.txt │ │ ├── probably-photoshopped.jpg │ │ ├── probably-photoshopped.jpg.txt │ │ ├── that-apple-mountain.jpg │ │ ├── that-apple-mountain.jpg.txt │ │ ├── trees-and-another-mountain.jpg │ │ └── trees-and-another-mountain.jpg.txt │ ├── 6_waterfall │ │ ├── album.txt │ │ ├── could-be-hawaii.jpg │ │ ├── could-be-hawaii.jpg.txt │ │ ├── lots-of-water.jpg │ │ ├── lots-of-water.jpg.txt │ │ ├── maybe-iceland.jpg │ │ ├── maybe-iceland.jpg.txt │ │ ├── not-niagra.jpg │ │ ├── not-niagra.jpg.txt │ │ ├── the-fall-is-lava.jpg │ │ ├── the-fall-is-lava.jpg.txt │ │ ├── twin-peaks.jpg │ │ └── twin-peaks.jpg.txt │ ├── 7_plants │ │ ├── album.txt │ │ ├── between-the-ferns.jpg │ │ ├── between-the-ferns.jpg.txt │ │ ├── could-be-poisonous.jpg │ │ ├── could-be-poisonous.jpg.txt │ │ ├── deadly-snake-hideout.jpg │ │ ├── deadly-snake-hideout.jpg.txt │ │ ├── nice-colors-ugly-plant.jpg │ │ ├── nice-colors-ugly-plant.jpg.txt │ │ ├── no-idea-what-that-is.jpg │ │ └── no-idea-what-that-is.jpg.txt │ ├── 8_landscape │ │ ├── album.txt │ │ ├── clouds-eat-mountain.jpg │ │ ├── clouds-eat-mountain.jpg.txt │ │ ├── dino-poop-mountain.jpg │ │ ├── dino-poop-mountain.jpg.txt │ │ ├── hobbits-and-stuff.jpg │ │ ├── hobbits-and-stuff.jpg.txt │ │ ├── less-water-than-last-year.jpg │ │ ├── less-water-than-last-year.jpg.txt │ │ ├── mordor.jpg │ │ ├── mordor.jpg.txt │ │ ├── scary-ridge.jpg │ │ ├── scary-ridge.jpg.txt │ │ ├── that-green-looks-fake.jpg │ │ └── that-green-looks-fake.jpg.txt │ ├── _drafts │ │ └── animals │ │ │ ├── abba.jpg │ │ │ ├── abba.jpg.txt │ │ │ ├── album.txt │ │ │ ├── bird-reynolds.jpg │ │ │ ├── bird-reynolds.jpg.txt │ │ │ ├── dumbo.jpg │ │ │ ├── dumbo.jpg.txt │ │ │ ├── free-wheely.jpg │ │ │ ├── free-wheely.jpg.txt │ │ │ ├── peter-fox.jpg │ │ │ ├── peter-fox.jpg.txt │ │ │ ├── steve-turtle.jpg │ │ │ └── steve-turtle.jpg.txt │ └── photography.txt ├── 2_notes │ ├── 20200905_through-the-desert │ │ ├── desert.jpg │ │ ├── desert.jpg.txt │ │ └── note.txt │ ├── 20211005_chasing-waterfalls │ │ ├── note.txt │ │ ├── waterfall.jpg │ │ └── waterfall.jpg.txt │ ├── 20220625_a-night-in-the-forest │ │ ├── forest.jpg │ │ ├── forest.jpg.txt │ │ └── note.txt │ ├── 20230421_across-the-ocean │ │ ├── note.txt │ │ ├── ocean.jpg │ │ └── ocean.jpg.txt │ ├── 20230913_himalaya-and-back │ │ ├── himalaya.jpg │ │ ├── himalaya.jpg.txt │ │ └── note.txt │ ├── 20231124_exploring-the-universe │ │ ├── dark-forest.jpg │ │ ├── dark-forest.jpg.txt │ │ ├── note.txt │ │ ├── tent-in-the-woods.jpg │ │ ├── tent-in-the-woods.jpg.txt │ │ ├── universe.jpg │ │ └── universe.jpg.txt │ ├── _drafts │ │ └── in-the-jungle-of-sumatra │ │ │ ├── note.txt │ │ │ ├── sumatra.jpg │ │ │ └── sumatra.jpg.txt │ └── notes.txt ├── 3_about │ ├── about.txt │ ├── table.jpg │ ├── table.jpg.txt │ ├── team.jpg │ ├── team.jpg.txt │ ├── writing.jpg │ └── writing.jpg.txt ├── error │ └── error.txt ├── home │ └── home.txt ├── sandbox │ └── sandbox.txt └── site.txt ├── favicon.ico ├── index.php ├── kirby ├── .editorconfig ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── assets │ └── whoops.css ├── bootstrap.php ├── cacert.pem ├── composer.json ├── composer.lock ├── config │ ├── aliases.php │ ├── api │ │ ├── authentication.php │ │ ├── collections.php │ │ ├── models.php │ │ ├── models │ │ │ ├── File.php │ │ │ ├── FileBlueprint.php │ │ │ ├── FileVersion.php │ │ │ ├── Language.php │ │ │ ├── License.php │ │ │ ├── Page.php │ │ │ ├── PageBlueprint.php │ │ │ ├── Role.php │ │ │ ├── Site.php │ │ │ ├── SiteBlueprint.php │ │ │ ├── System.php │ │ │ ├── Translation.php │ │ │ ├── User.php │ │ │ └── UserBlueprint.php │ │ ├── routes.php │ │ └── routes │ │ │ ├── auth.php │ │ │ ├── files.php │ │ │ ├── kql.php │ │ │ ├── languages.php │ │ │ ├── lock.php │ │ │ ├── pages.php │ │ │ ├── roles.php │ │ │ ├── site.php │ │ │ ├── system.php │ │ │ ├── translations.php │ │ │ └── users.php │ ├── areas │ │ ├── account.php │ │ ├── account │ │ │ ├── dialogs.php │ │ │ ├── drawers.php │ │ │ ├── dropdowns.php │ │ │ └── views.php │ │ ├── fields │ │ │ ├── dialogs.php │ │ │ └── drawers.php │ │ ├── files │ │ │ ├── dialogs.php │ │ │ └── dropdowns.php │ │ ├── installation.php │ │ ├── lab.php │ │ ├── lab │ │ │ ├── drawers.php │ │ │ └── views.php │ │ ├── languages.php │ │ ├── languages │ │ │ ├── dialogs.php │ │ │ └── views.php │ │ ├── login.php │ │ ├── logout.php │ │ ├── search.php │ │ ├── search │ │ │ └── views.php │ │ ├── site.php │ │ ├── site │ │ │ ├── dialogs.php │ │ │ ├── drawers.php │ │ │ ├── dropdowns.php │ │ │ ├── requests.php │ │ │ ├── searches.php │ │ │ └── views.php │ │ ├── system.php │ │ ├── system │ │ │ ├── dialogs.php │ │ │ └── views.php │ │ ├── users.php │ │ └── users │ │ │ ├── dialogs.php │ │ │ ├── drawers.php │ │ │ ├── dropdowns.php │ │ │ ├── searches.php │ │ │ └── views.php │ ├── blocks │ │ ├── code │ │ │ ├── code.php │ │ │ └── code.yml │ │ ├── gallery │ │ │ ├── gallery.php │ │ │ └── gallery.yml │ │ ├── heading │ │ │ ├── heading.php │ │ │ └── heading.yml │ │ ├── image │ │ │ ├── image.php │ │ │ └── image.yml │ │ ├── line │ │ │ ├── line.php │ │ │ └── line.yml │ │ ├── list │ │ │ ├── list.php │ │ │ └── list.yml │ │ ├── markdown │ │ │ ├── markdown.php │ │ │ └── markdown.yml │ │ ├── quote │ │ │ ├── quote.php │ │ │ └── quote.yml │ │ ├── table │ │ │ └── table.yml │ │ ├── text │ │ │ ├── text.php │ │ │ └── text.yml │ │ └── video │ │ │ ├── video.php │ │ │ └── video.yml │ ├── components.php │ ├── fields │ │ ├── checkboxes.php │ │ ├── color.php │ │ ├── date.php │ │ ├── email.php │ │ ├── files.php │ │ ├── gap.php │ │ ├── headline.php │ │ ├── hidden.php │ │ ├── info.php │ │ ├── line.php │ │ ├── link.php │ │ ├── list.php │ │ ├── mixins │ │ │ ├── datetime.php │ │ │ ├── filepicker.php │ │ │ ├── layout.php │ │ │ ├── min.php │ │ │ ├── options.php │ │ │ ├── pagepicker.php │ │ │ ├── picker.php │ │ │ ├── upload.php │ │ │ └── userpicker.php │ │ ├── multiselect.php │ │ ├── number.php │ │ ├── object.php │ │ ├── pages.php │ │ ├── radio.php │ │ ├── range.php │ │ ├── select.php │ │ ├── slug.php │ │ ├── structure.php │ │ ├── tags.php │ │ ├── tel.php │ │ ├── text.php │ │ ├── textarea.php │ │ ├── time.php │ │ ├── toggle.php │ │ ├── toggles.php │ │ ├── url.php │ │ ├── users.php │ │ └── writer.php │ ├── helpers.php │ ├── methods.php │ ├── presets │ │ ├── files.php │ │ ├── page.php │ │ └── pages.php │ ├── routes.php │ ├── sections │ │ ├── fields.php │ │ ├── files.php │ │ ├── info.php │ │ ├── mixins │ │ │ ├── details.php │ │ │ ├── empty.php │ │ │ ├── headline.php │ │ │ ├── help.php │ │ │ ├── layout.php │ │ │ ├── max.php │ │ │ ├── min.php │ │ │ ├── pagination.php │ │ │ ├── parent.php │ │ │ ├── search.php │ │ │ └── sort.php │ │ ├── pages.php │ │ └── stats.php │ ├── setup.php │ ├── tags.php │ └── templates │ │ └── emails │ │ └── auth │ │ ├── login.php │ │ └── password-reset.php ├── dependencies │ ├── parsedown-extra │ │ └── ParsedownExtra.php │ ├── parsedown │ │ └── Parsedown.php │ └── spyc │ │ ├── COPYING │ │ └── Spyc.php ├── i18n │ ├── rules │ │ ├── LICENSE │ │ ├── ar.json │ │ ├── az.json │ │ ├── bg.json │ │ ├── cs.json │ │ ├── da.json │ │ ├── de.json │ │ ├── el.json │ │ ├── eo.json │ │ ├── et.json │ │ ├── fa.json │ │ ├── fi.json │ │ ├── fr.json │ │ ├── hi.json │ │ ├── hr.json │ │ ├── hu.json │ │ ├── hy.json │ │ ├── is_IS.json │ │ ├── it.json │ │ ├── iu.json │ │ ├── ja.json │ │ ├── ka.json │ │ ├── ko.json │ │ ├── lt.json │ │ ├── lv.json │ │ ├── mk.json │ │ ├── my.json │ │ ├── nb.json │ │ ├── pl.json │ │ ├── pt_BR.json │ │ ├── ro.json │ │ ├── ru.json │ │ ├── sr.json │ │ ├── sv_SE.json │ │ ├── tr.json │ │ ├── uk.json │ │ ├── vi.json │ │ └── zh.json │ └── translations │ │ ├── bg.json │ │ ├── ca.json │ │ ├── cs.json │ │ ├── da.json │ │ ├── de.json │ │ ├── el.json │ │ ├── en.json │ │ ├── eo.json │ │ ├── es_419.json │ │ ├── es_ES.json │ │ ├── fa.json │ │ ├── fi.json │ │ ├── fr.json │ │ ├── hu.json │ │ ├── id.json │ │ ├── is_IS.json │ │ ├── it.json │ │ ├── ko.json │ │ ├── lt.json │ │ ├── nb.json │ │ ├── nl.json │ │ ├── pl.json │ │ ├── pt_BR.json │ │ ├── pt_PT.json │ │ ├── ro.json │ │ ├── ru.json │ │ ├── sk.json │ │ ├── sv_SE.json │ │ └── tr.json ├── kirby.pub ├── panel │ └── dist │ │ ├── apple-touch-icon-dark.png │ │ ├── apple-touch-icon.png │ │ ├── css │ │ └── style.min.css │ │ ├── favicon-dark.png │ │ ├── favicon.png │ │ ├── favicon.svg │ │ ├── img │ │ └── icons.svg │ │ └── js │ │ ├── Docs.min.js │ │ ├── DocsView.min.js │ │ ├── Highlight.min.js │ │ ├── IndexView.min.js │ │ ├── PlaygroundView.min.js │ │ ├── container-query-polyfill.modern.min.js │ │ ├── index.min.js │ │ ├── plugins.js │ │ ├── vendor.min.js │ │ ├── vue.min.js │ │ ├── vue.runtime.min.js │ │ └── vuedraggable.min.js ├── router.php ├── src │ ├── Api │ │ ├── Api.php │ │ ├── Collection.php │ │ └── Model.php │ ├── Blueprint │ │ ├── Collection.php │ │ ├── Config.php │ │ ├── Extension.php │ │ ├── Factory.php │ │ ├── Node.php │ │ ├── NodeI18n.php │ │ ├── NodeIcon.php │ │ ├── NodeProperty.php │ │ ├── NodeString.php │ │ └── NodeText.php │ ├── Cache │ │ ├── ApcuCache.php │ │ ├── Cache.php │ │ ├── FileCache.php │ │ ├── MemCached.php │ │ ├── MemoryCache.php │ │ ├── NullCache.php │ │ └── Value.php │ ├── Cms │ │ ├── Api.php │ │ ├── App.php │ │ ├── AppCaches.php │ │ ├── AppErrors.php │ │ ├── AppPlugins.php │ │ ├── AppTranslations.php │ │ ├── AppUsers.php │ │ ├── Auth.php │ │ ├── Auth │ │ │ ├── Challenge.php │ │ │ ├── EmailChallenge.php │ │ │ ├── Status.php │ │ │ └── TotpChallenge.php │ │ ├── Block.php │ │ ├── BlockConverter.php │ │ ├── Blocks.php │ │ ├── Blueprint.php │ │ ├── Collection.php │ │ ├── Collections.php │ │ ├── ContentLock.php │ │ ├── ContentLocks.php │ │ ├── Core.php │ │ ├── Email.php │ │ ├── Event.php │ │ ├── Fieldset.php │ │ ├── Fieldsets.php │ │ ├── File.php │ │ ├── FileActions.php │ │ ├── FileBlueprint.php │ │ ├── FileModifications.php │ │ ├── FilePermissions.php │ │ ├── FilePicker.php │ │ ├── FileRules.php │ │ ├── FileVersion.php │ │ ├── Files.php │ │ ├── Find.php │ │ ├── HasChildren.php │ │ ├── HasFiles.php │ │ ├── HasMethods.php │ │ ├── HasSiblings.php │ │ ├── Helpers.php │ │ ├── Html.php │ │ ├── Ingredients.php │ │ ├── Item.php │ │ ├── Items.php │ │ ├── Language.php │ │ ├── LanguageRouter.php │ │ ├── LanguageRoutes.php │ │ ├── LanguageRules.php │ │ ├── LanguageVariable.php │ │ ├── Languages.php │ │ ├── Layout.php │ │ ├── LayoutColumn.php │ │ ├── LayoutColumns.php │ │ ├── Layouts.php │ │ ├── License.php │ │ ├── LicenseStatus.php │ │ ├── LicenseType.php │ │ ├── Loader.php │ │ ├── Media.php │ │ ├── Model.php │ │ ├── ModelPermissions.php │ │ ├── ModelWithContent.php │ │ ├── Nest.php │ │ ├── NestCollection.php │ │ ├── NestObject.php │ │ ├── Page.php │ │ ├── PageActions.php │ │ ├── PageBlueprint.php │ │ ├── PagePermissions.php │ │ ├── PagePicker.php │ │ ├── PageRules.php │ │ ├── PageSiblings.php │ │ ├── Pages.php │ │ ├── Pagination.php │ │ ├── Permissions.php │ │ ├── Picker.php │ │ ├── Plugin.php │ │ ├── PluginAsset.php │ │ ├── PluginAssets.php │ │ ├── R.php │ │ ├── Responder.php │ │ ├── Response.php │ │ ├── Role.php │ │ ├── Roles.php │ │ ├── S.php │ │ ├── Search.php │ │ ├── Section.php │ │ ├── Site.php │ │ ├── SiteActions.php │ │ ├── SiteBlueprint.php │ │ ├── SitePermissions.php │ │ ├── SiteRules.php │ │ ├── Structure.php │ │ ├── StructureObject.php │ │ ├── System.php │ │ ├── System │ │ │ └── UpdateStatus.php │ │ ├── Translation.php │ │ ├── Translations.php │ │ ├── Url.php │ │ ├── User.php │ │ ├── UserActions.php │ │ ├── UserBlueprint.php │ │ ├── UserPermissions.php │ │ ├── UserPicker.php │ │ ├── UserRules.php │ │ ├── Users.php │ │ └── Visitor.php │ ├── Content │ │ ├── Content.php │ │ ├── ContentStorage.php │ │ ├── ContentStorageHandler.php │ │ ├── ContentTranslation.php │ │ ├── Field.php │ │ └── PlainTextContentStorageHandler.php │ ├── Data │ │ ├── Data.php │ │ ├── Handler.php │ │ ├── Json.php │ │ ├── PHP.php │ │ ├── Txt.php │ │ ├── Xml.php │ │ ├── Yaml.php │ │ ├── YamlSpyc.php │ │ └── YamlSymfony.php │ ├── Database │ │ ├── Database.php │ │ ├── Db.php │ │ ├── Query.php │ │ ├── Sql.php │ │ └── Sql │ │ │ ├── Mysql.php │ │ │ └── Sqlite.php │ ├── Email │ │ ├── Body.php │ │ ├── Email.php │ │ └── PHPMailer.php │ ├── Exception │ │ ├── AuthException.php │ │ ├── BadMethodCallException.php │ │ ├── DuplicateException.php │ │ ├── ErrorPageException.php │ │ ├── Exception.php │ │ ├── InvalidArgumentException.php │ │ ├── LogicException.php │ │ ├── NotFoundException.php │ │ └── PermissionException.php │ ├── Field │ │ └── FieldOptions.php │ ├── Filesystem │ │ ├── Asset.php │ │ ├── Dir.php │ │ ├── F.php │ │ ├── File.php │ │ ├── Filename.php │ │ ├── IsFile.php │ │ └── Mime.php │ ├── Form │ │ ├── Field.php │ │ ├── Field │ │ │ ├── BlocksField.php │ │ │ └── LayoutField.php │ │ ├── FieldClass.php │ │ ├── Fields.php │ │ ├── Form.php │ │ ├── Mixin │ │ │ ├── EmptyState.php │ │ │ ├── Max.php │ │ │ └── Min.php │ │ └── Validations.php │ ├── Http │ │ ├── Cookie.php │ │ ├── Environment.php │ │ ├── Exceptions │ │ │ └── NextRouteException.php │ │ ├── Header.php │ │ ├── Idn.php │ │ ├── Params.php │ │ ├── Path.php │ │ ├── Query.php │ │ ├── Remote.php │ │ ├── Request.php │ │ ├── Request │ │ │ ├── Auth.php │ │ │ ├── Auth │ │ │ │ ├── BasicAuth.php │ │ │ │ ├── BearerAuth.php │ │ │ │ └── SessionAuth.php │ │ │ ├── Body.php │ │ │ ├── Data.php │ │ │ ├── Files.php │ │ │ └── Query.php │ │ ├── Response.php │ │ ├── Route.php │ │ ├── Router.php │ │ ├── Uri.php │ │ ├── Url.php │ │ └── Visitor.php │ ├── Image │ │ ├── Camera.php │ │ ├── Darkroom.php │ │ ├── Darkroom │ │ │ ├── GdLib.php │ │ │ └── ImageMagick.php │ │ ├── Dimensions.php │ │ ├── Exif.php │ │ ├── Focus.php │ │ ├── Image.php │ │ ├── Location.php │ │ └── QrCode.php │ ├── Option │ │ ├── Option.php │ │ ├── Options.php │ │ ├── OptionsApi.php │ │ ├── OptionsProvider.php │ │ └── OptionsQuery.php │ ├── Panel │ │ ├── Assets.php │ │ ├── ChangesDialog.php │ │ ├── Dialog.php │ │ ├── Document.php │ │ ├── Drawer.php │ │ ├── Dropdown.php │ │ ├── Field.php │ │ ├── File.php │ │ ├── Home.php │ │ ├── Json.php │ │ ├── Lab │ │ │ ├── Category.php │ │ │ ├── Docs.php │ │ │ ├── Example.php │ │ │ ├── Snippet.php │ │ │ └── Template.php │ │ ├── Menu.php │ │ ├── Model.php │ │ ├── Page.php │ │ ├── PageCreateDialog.php │ │ ├── Panel.php │ │ ├── Plugins.php │ │ ├── Redirect.php │ │ ├── Request.php │ │ ├── Search.php │ │ ├── Site.php │ │ ├── User.php │ │ ├── UserTotpDisableDialog.php │ │ ├── UserTotpEnableDialog.php │ │ └── View.php │ ├── Parsley │ │ ├── Element.php │ │ ├── Inline.php │ │ ├── Parsley.php │ │ ├── Schema.php │ │ └── Schema │ │ │ ├── Blocks.php │ │ │ └── Plain.php │ ├── Query │ │ ├── Argument.php │ │ ├── Arguments.php │ │ ├── Expression.php │ │ ├── Query.php │ │ ├── Segment.php │ │ └── Segments.php │ ├── Sane │ │ ├── DomHandler.php │ │ ├── Handler.php │ │ ├── Html.php │ │ ├── Sane.php │ │ ├── Svg.php │ │ ├── Svgz.php │ │ └── Xml.php │ ├── Session │ │ ├── AutoSession.php │ │ ├── FileSessionStore.php │ │ ├── Session.php │ │ ├── SessionData.php │ │ ├── SessionStore.php │ │ └── Sessions.php │ ├── Template │ │ ├── Slot.php │ │ ├── Slots.php │ │ ├── Snippet.php │ │ └── Template.php │ ├── Text │ │ ├── KirbyTag.php │ │ ├── KirbyTags.php │ │ ├── Markdown.php │ │ └── SmartyPants.php │ ├── Toolkit │ │ ├── A.php │ │ ├── Collection.php │ │ ├── Component.php │ │ ├── Config.php │ │ ├── Controller.php │ │ ├── Date.php │ │ ├── Dom.php │ │ ├── Escape.php │ │ ├── Facade.php │ │ ├── Html.php │ │ ├── I18n.php │ │ ├── Iterator.php │ │ ├── LazyValue.php │ │ ├── Locale.php │ │ ├── Obj.php │ │ ├── Pagination.php │ │ ├── Properties.php │ │ ├── Silo.php │ │ ├── Str.php │ │ ├── SymmetricCrypto.php │ │ ├── Totp.php │ │ ├── Tpl.php │ │ ├── V.php │ │ ├── View.php │ │ └── Xml.php │ └── Uuid │ │ ├── BlockUuid.php │ │ ├── FieldUuid.php │ │ ├── FileUuid.php │ │ ├── HasUuids.php │ │ ├── Identifiable.php │ │ ├── ModelUuid.php │ │ ├── PageUuid.php │ │ ├── SiteUuid.php │ │ ├── StructureUuid.php │ │ ├── Uri.php │ │ ├── UserUuid.php │ │ ├── Uuid.php │ │ └── Uuids.php ├── vendor │ ├── autoload.php │ ├── bin │ │ └── yaml-lint │ ├── christian-riesen │ │ └── base32 │ │ │ ├── LICENSE │ │ │ └── src │ │ │ ├── Base32.php │ │ │ └── Base32Hex.php │ ├── claviska │ │ └── simpleimage │ │ │ ├── LICENSE.md │ │ │ ├── composer.json │ │ │ ├── composer.lock │ │ │ └── src │ │ │ └── claviska │ │ │ └── SimpleImage.php │ ├── composer │ │ ├── ClassLoader.php │ │ ├── InstalledVersions.php │ │ ├── LICENSE │ │ ├── autoload_classmap.php │ │ ├── autoload_files.php │ │ ├── autoload_namespaces.php │ │ ├── autoload_psr4.php │ │ ├── autoload_real.php │ │ ├── autoload_static.php │ │ ├── installed.json │ │ ├── installed.php │ │ └── semver │ │ │ ├── LICENSE │ │ │ ├── composer.json │ │ │ └── src │ │ │ ├── Comparator.php │ │ │ ├── CompilingMatcher.php │ │ │ ├── Constraint │ │ │ ├── Bound.php │ │ │ ├── Constraint.php │ │ │ ├── ConstraintInterface.php │ │ │ ├── MatchAllConstraint.php │ │ │ ├── MatchNoneConstraint.php │ │ │ └── MultiConstraint.php │ │ │ ├── Interval.php │ │ │ ├── Intervals.php │ │ │ ├── Semver.php │ │ │ └── VersionParser.php │ ├── filp │ │ └── whoops │ │ │ ├── LICENSE.md │ │ │ ├── composer.json │ │ │ └── src │ │ │ └── Whoops │ │ │ ├── Exception │ │ │ ├── ErrorException.php │ │ │ ├── Formatter.php │ │ │ ├── Frame.php │ │ │ ├── FrameCollection.php │ │ │ └── Inspector.php │ │ │ ├── Handler │ │ │ ├── CallbackHandler.php │ │ │ ├── Handler.php │ │ │ ├── HandlerInterface.php │ │ │ ├── JsonResponseHandler.php │ │ │ ├── PlainTextHandler.php │ │ │ ├── PrettyPageHandler.php │ │ │ └── XmlResponseHandler.php │ │ │ ├── Inspector │ │ │ ├── InspectorFactory.php │ │ │ ├── InspectorFactoryInterface.php │ │ │ └── InspectorInterface.php │ │ │ ├── Resources │ │ │ ├── css │ │ │ │ ├── prism.css │ │ │ │ └── whoops.base.css │ │ │ ├── js │ │ │ │ ├── clipboard.min.js │ │ │ │ ├── prism.js │ │ │ │ ├── whoops.base.js │ │ │ │ └── zepto.min.js │ │ │ └── views │ │ │ │ ├── env_details.html.php │ │ │ │ ├── frame_code.html.php │ │ │ │ ├── frame_list.html.php │ │ │ │ ├── frames_container.html.php │ │ │ │ ├── frames_description.html.php │ │ │ │ ├── header.html.php │ │ │ │ ├── header_outer.html.php │ │ │ │ ├── layout.html.php │ │ │ │ ├── panel_details.html.php │ │ │ │ ├── panel_details_outer.html.php │ │ │ │ ├── panel_left.html.php │ │ │ │ └── panel_left_outer.html.php │ │ │ ├── Run.php │ │ │ ├── RunInterface.php │ │ │ └── Util │ │ │ ├── HtmlDumperOutput.php │ │ │ ├── Misc.php │ │ │ ├── SystemFacade.php │ │ │ └── TemplateHelper.php │ ├── laminas │ │ └── laminas-escaper │ │ │ ├── COPYRIGHT.md │ │ │ ├── LICENSE.md │ │ │ ├── composer.json │ │ │ └── src │ │ │ ├── Escaper.php │ │ │ ├── EscaperInterface.php │ │ │ └── Exception │ │ │ ├── ExceptionInterface.php │ │ │ ├── InvalidArgumentException.php │ │ │ └── RuntimeException.php │ ├── league │ │ └── color-extractor │ │ │ ├── LICENSE │ │ │ ├── composer.json │ │ │ └── src │ │ │ ├── Color.php │ │ │ ├── ColorExtractor.php │ │ │ └── Palette.php │ ├── michelf │ │ └── php-smartypants │ │ │ ├── License.md │ │ │ ├── Michelf │ │ │ ├── SmartyPants.inc.php │ │ │ ├── SmartyPants.php │ │ │ ├── SmartyPantsTypographer.inc.php │ │ │ └── SmartyPantsTypographer.php │ │ │ └── composer.json │ ├── phpmailer │ │ └── phpmailer │ │ │ ├── LICENSE │ │ │ ├── composer.json │ │ │ ├── get_oauth_token.php │ │ │ ├── language │ │ │ ├── phpmailer.lang-af.php │ │ │ ├── phpmailer.lang-ar.php │ │ │ ├── phpmailer.lang-as.php │ │ │ ├── phpmailer.lang-az.php │ │ │ ├── phpmailer.lang-ba.php │ │ │ ├── phpmailer.lang-be.php │ │ │ ├── phpmailer.lang-bg.php │ │ │ ├── phpmailer.lang-bn.php │ │ │ ├── phpmailer.lang-ca.php │ │ │ ├── phpmailer.lang-cs.php │ │ │ ├── phpmailer.lang-da.php │ │ │ ├── phpmailer.lang-de.php │ │ │ ├── phpmailer.lang-el.php │ │ │ ├── phpmailer.lang-eo.php │ │ │ ├── phpmailer.lang-es.php │ │ │ ├── phpmailer.lang-et.php │ │ │ ├── phpmailer.lang-fa.php │ │ │ ├── phpmailer.lang-fi.php │ │ │ ├── phpmailer.lang-fo.php │ │ │ ├── phpmailer.lang-fr.php │ │ │ ├── phpmailer.lang-gl.php │ │ │ ├── phpmailer.lang-he.php │ │ │ ├── phpmailer.lang-hi.php │ │ │ ├── phpmailer.lang-hr.php │ │ │ ├── phpmailer.lang-hu.php │ │ │ ├── phpmailer.lang-hy.php │ │ │ ├── phpmailer.lang-id.php │ │ │ ├── phpmailer.lang-it.php │ │ │ ├── phpmailer.lang-ja.php │ │ │ ├── phpmailer.lang-ka.php │ │ │ ├── phpmailer.lang-ko.php │ │ │ ├── phpmailer.lang-ku.php │ │ │ ├── phpmailer.lang-lt.php │ │ │ ├── phpmailer.lang-lv.php │ │ │ ├── phpmailer.lang-mg.php │ │ │ ├── phpmailer.lang-mn.php │ │ │ ├── phpmailer.lang-ms.php │ │ │ ├── phpmailer.lang-nb.php │ │ │ ├── phpmailer.lang-nl.php │ │ │ ├── phpmailer.lang-pl.php │ │ │ ├── phpmailer.lang-pt.php │ │ │ ├── phpmailer.lang-pt_br.php │ │ │ ├── phpmailer.lang-ro.php │ │ │ ├── phpmailer.lang-ru.php │ │ │ ├── phpmailer.lang-si.php │ │ │ ├── phpmailer.lang-sk.php │ │ │ ├── phpmailer.lang-sl.php │ │ │ ├── phpmailer.lang-sr.php │ │ │ ├── phpmailer.lang-sr_latn.php │ │ │ ├── phpmailer.lang-sv.php │ │ │ ├── phpmailer.lang-tl.php │ │ │ ├── phpmailer.lang-tr.php │ │ │ ├── phpmailer.lang-uk.php │ │ │ ├── phpmailer.lang-ur.php │ │ │ ├── phpmailer.lang-vi.php │ │ │ ├── phpmailer.lang-zh.php │ │ │ └── phpmailer.lang-zh_cn.php │ │ │ └── src │ │ │ ├── DSNConfigurator.php │ │ │ ├── Exception.php │ │ │ ├── OAuth.php │ │ │ ├── OAuthTokenProvider.php │ │ │ ├── PHPMailer.php │ │ │ ├── POP3.php │ │ │ └── SMTP.php │ ├── psr │ │ └── log │ │ │ ├── LICENSE │ │ │ ├── composer.json │ │ │ └── src │ │ │ ├── AbstractLogger.php │ │ │ ├── InvalidArgumentException.php │ │ │ ├── LogLevel.php │ │ │ ├── LoggerAwareInterface.php │ │ │ ├── LoggerAwareTrait.php │ │ │ ├── LoggerInterface.php │ │ │ ├── LoggerTrait.php │ │ │ └── NullLogger.php │ └── symfony │ │ ├── deprecation-contracts │ │ ├── LICENSE │ │ ├── composer.json │ │ └── function.php │ │ ├── polyfill-ctype │ │ ├── Ctype.php │ │ ├── LICENSE │ │ ├── bootstrap.php │ │ ├── bootstrap80.php │ │ └── composer.json │ │ ├── polyfill-intl-idn │ │ ├── Idn.php │ │ ├── Info.php │ │ ├── LICENSE │ │ ├── Resources │ │ │ └── unidata │ │ │ │ ├── DisallowedRanges.php │ │ │ │ ├── Regex.php │ │ │ │ ├── deviation.php │ │ │ │ ├── disallowed.php │ │ │ │ ├── disallowed_STD3_mapped.php │ │ │ │ ├── disallowed_STD3_valid.php │ │ │ │ ├── ignored.php │ │ │ │ ├── mapped.php │ │ │ │ └── virama.php │ │ ├── bootstrap.php │ │ ├── bootstrap80.php │ │ └── composer.json │ │ ├── polyfill-intl-normalizer │ │ ├── LICENSE │ │ ├── Normalizer.php │ │ ├── Resources │ │ │ ├── stubs │ │ │ │ └── Normalizer.php │ │ │ └── unidata │ │ │ │ ├── canonicalComposition.php │ │ │ │ ├── canonicalDecomposition.php │ │ │ │ ├── combiningClass.php │ │ │ │ └── compatibilityDecomposition.php │ │ ├── bootstrap.php │ │ ├── bootstrap80.php │ │ └── composer.json │ │ ├── polyfill-mbstring │ │ ├── LICENSE │ │ ├── Mbstring.php │ │ ├── Resources │ │ │ └── unidata │ │ │ │ ├── caseFolding.php │ │ │ │ ├── lowerCase.php │ │ │ │ ├── titleCaseRegexp.php │ │ │ │ └── upperCase.php │ │ ├── bootstrap.php │ │ ├── bootstrap80.php │ │ └── composer.json │ │ └── yaml │ │ ├── Command │ │ └── LintCommand.php │ │ ├── Dumper.php │ │ ├── Escaper.php │ │ ├── Exception │ │ ├── DumpException.php │ │ ├── ExceptionInterface.php │ │ ├── ParseException.php │ │ └── RuntimeException.php │ │ ├── Inline.php │ │ ├── LICENSE │ │ ├── Parser.php │ │ ├── Resources │ │ └── bin │ │ │ └── yaml-lint │ │ ├── Tag │ │ └── TaggedValue.php │ │ ├── Unescaper.php │ │ ├── Yaml.php │ │ └── composer.json └── views │ ├── browser.php │ ├── fatal.php │ ├── panel.php │ ├── php.php │ └── snippets │ ├── footer.php │ └── header.php └── site ├── blueprints ├── fields │ └── cover.yml ├── files │ ├── blocks │ │ └── image.yml │ └── image.yml ├── pages │ ├── about.yml │ ├── album.yml │ ├── default.yml │ ├── error.yml │ ├── home.yml │ ├── note.yml │ ├── notes.yml │ └── photography.yml ├── sections │ ├── albums.yml │ └── notes.yml ├── site.yml └── users │ └── default.yml ├── cache └── index.html ├── collections └── notes.php ├── config └── config.php ├── controllers ├── album.php ├── note.php └── notes.php ├── models ├── album.php └── note.php ├── snippets ├── blocks │ ├── gallery.php │ ├── image.php │ └── video.php ├── footer.php ├── header.php ├── image.php ├── intro.php ├── layouts.php ├── note.php ├── pagination.php ├── prevnext.php └── social.php └── templates ├── about.php ├── album.php ├── default.php ├── home.php ├── note.php ├── notes.php └── photography.php /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{css,scss,less,js,json,ts,sass,html,hbs,mustache,phtml,html.twig,md,yml}] 2 | charset = utf-8 3 | indent_style = space 4 | indent_size = 2 5 | end_of_line = lf 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | 9 | [*.md] 10 | indent_size = 4 11 | trim_trailing_whitespace = false 12 | 13 | [site/templates/**.php] 14 | indent_size = 2 15 | 16 | [site/snippets/**.php] 17 | indent_size = 2 18 | 19 | [package.json,.{babelrc,editorconfig,eslintrc,lintstagedrc,stylelintrc}] 20 | indent_style = space 21 | indent_size = 2 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # System files 2 | # ------------ 3 | 4 | Icon 5 | .DS_Store 6 | 7 | # Temporary files 8 | # --------------- 9 | 10 | /media/* 11 | !/media/index.html 12 | 13 | # Lock files 14 | # --------------- 15 | 16 | .lock 17 | 18 | # Editors 19 | # (sensitive workspace files) 20 | # --------------------------- 21 | *.sublime-workspace 22 | /.vscode 23 | /.idea 24 | 25 | # -------------SECURITY------------- 26 | # NEVER publish these files via Git! 27 | # -------------SECURITY------------- 28 | 29 | # Cache Files 30 | # --------------- 31 | 32 | /site/cache/* 33 | !/site/cache/index.html 34 | 35 | # Accounts 36 | # --------------- 37 | 38 | /site/accounts/* 39 | !/site/accounts/index.html 40 | 41 | # Sessions 42 | # --------------- 43 | 44 | /site/sessions/* 45 | !/site/sessions/index.html 46 | 47 | # License 48 | # --------------- 49 | 50 | /site/config/.license 51 | /site/config/config.starterkit.test.php 52 | -------------------------------------------------------------------------------- /assets/css/templates/about.css: -------------------------------------------------------------------------------- 1 | .contact { 2 | padding: 3rem; 3 | border: 2px solid #000; 4 | } 5 | .contact .h1 { 6 | margin-bottom: 1.5rem; 7 | } 8 | -------------------------------------------------------------------------------- /assets/css/templates/album.css: -------------------------------------------------------------------------------- 1 | .album-gallery { 2 | line-height: 0; 3 | columns: 1; 4 | column-gap: 1.5rem; 5 | } 6 | .album-gallery li { 7 | display: block; 8 | margin-bottom: 1.5rem; 9 | break-inside: avoid; 10 | } 11 | @media screen and (min-width: 60rem) { 12 | .album-gallery { 13 | columns: 2; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /assets/css/templates/note.css: -------------------------------------------------------------------------------- 1 | .note { 2 | max-width: 35rem; 3 | margin: 0 auto; 4 | } 5 | .note-header { 6 | padding-top: 3rem; 7 | margin-bottom: 3rem; 8 | } 9 | .note-footer { 10 | padding: 6rem 0; 11 | } 12 | .note-date { 13 | color: var(--color-text-grey); 14 | } 15 | .note-tags { 16 | display: flex; 17 | margin-bottom: 1.5rem; 18 | } 19 | .note-tags li { 20 | margin-right: .5rem; 21 | } 22 | .note-tags a { 23 | padding: .5rem 1rem; 24 | display: block; 25 | background: var(--color-light); 26 | } 27 | .note-tags a:hover { 28 | background: var(--color-black); 29 | color: var(--color-white); 30 | } 31 | -------------------------------------------------------------------------------- /assets/icons/discord.svg: -------------------------------------------------------------------------------- 1 | Discord 2 | -------------------------------------------------------------------------------- /assets/icons/instagram.svg: -------------------------------------------------------------------------------- 1 | Instagram 2 | -------------------------------------------------------------------------------- /assets/icons/youtube.svg: -------------------------------------------------------------------------------- 1 | YouTube 2 | -------------------------------------------------------------------------------- /assets/js/index.js: -------------------------------------------------------------------------------- 1 | // Lightbox 2 | Array.from(document.querySelectorAll("[data-lightbox]")).forEach(element => { 3 | element.onclick = (e) => { 4 | e.preventDefault(); 5 | basicLightbox.create(``).show(); 6 | }; 7 | }); 8 | -------------------------------------------------------------------------------- /content/1_photography/1_trees/album.txt: -------------------------------------------------------------------------------- 1 | Title: Trees 2 | 3 | ---- 4 | 5 | Cover: - file://Jc0l1BA0i5z0QjRf 6 | 7 | ---- 8 | 9 | Headline: 10 | 11 | ---- 12 | 13 | Subheadline: Our friends with leaves 14 | 15 | ---- 16 | 17 | Text:

Hug them if you like. They might not appreciate it though.

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum id ligula porta felis euismod semper. Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod.

18 | 19 | ---- 20 | 21 | Tags: tree, forest 22 | 23 | ---- 24 | 25 | Uuid: v59sIVPYM141Uotu -------------------------------------------------------------------------------- /content/1_photography/1_trees/cheesy-autumn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/1_trees/cheesy-autumn.jpg -------------------------------------------------------------------------------- /content/1_photography/1_trees/cheesy-autumn.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Colorful autumn forest 6 | 7 | ---- 8 | 9 | Photographer: Federico Bottos 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/Z3NceSeZqgI 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 2 26 | 27 | ---- 28 | 29 | Uuid: p6ClztZrkCB1KfLF -------------------------------------------------------------------------------- /content/1_photography/1_trees/last-tree-standing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/1_trees/last-tree-standing.jpg -------------------------------------------------------------------------------- /content/1_photography/1_trees/last-tree-standing.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Pregasina, Italy 2 | 3 | ---- 4 | 5 | Alt: A lonely tree above the fog 6 | 7 | ---- 8 | 9 | Photographer: Cristina Gottardi 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/wVTGdIGdojc 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 1 26 | 27 | ---- 28 | 29 | Uuid: mX73tq8jwu6bLxBt -------------------------------------------------------------------------------- /content/1_photography/1_trees/monster-trees-in-the-fog.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/1_trees/monster-trees-in-the-fog.jpg -------------------------------------------------------------------------------- /content/1_photography/1_trees/monster-trees-in-the-fog.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Sequoia National Forest, United States 2 | 3 | ---- 4 | 5 | Alt: Huge trees reaching into the fog 6 | 7 | ---- 8 | 9 | Photographer: Victoria Palacios 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/dfo06_DqxpA 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 3 26 | 27 | ---- 28 | 29 | Uuid: Jc0l1BA0i5z0QjRf -------------------------------------------------------------------------------- /content/1_photography/1_trees/sharewood-forest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/1_trees/sharewood-forest.jpg -------------------------------------------------------------------------------- /content/1_photography/1_trees/sharewood-forest.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Bogd Khan Mountain, Mongolia 2 | 3 | ---- 4 | 5 | Alt: Picturesque path into the forest 6 | 7 | ---- 8 | 9 | Photographer: Deglee Degi 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/wQImoykAwGs 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 4 26 | 27 | ---- 28 | 29 | Uuid: 4J6JHoVhngADKZ93 -------------------------------------------------------------------------------- /content/1_photography/1_trees/stay-in-the-car.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/1_trees/stay-in-the-car.jpg -------------------------------------------------------------------------------- /content/1_photography/1_trees/stay-in-the-car.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Acadia National Park Pond, Bar Harbor, United States 2 | 3 | ---- 4 | 5 | Alt: Scary forest road at night illuminated by break lights 6 | 7 | ---- 8 | 9 | Photographer: Adrian Pelletier 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/OJev0ModVw8 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 5 26 | 27 | ---- 28 | 29 | Uuid: Qb0tGC63X1pU3qH1 -------------------------------------------------------------------------------- /content/1_photography/2_sky/album.txt: -------------------------------------------------------------------------------- 1 | Title: Sky 2 | 3 | ---- 4 | 5 | Cover: - file://9APZDUNsDTbHMMTZ 6 | 7 | ---- 8 | 9 | Headline: 10 | 11 | ---- 12 | 13 | Subheadline: Stars and the universe and so on 14 | 15 | ---- 16 | 17 | Text:

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras mattis consectetur purus sit amet fermentum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Nullam quis risus eget urna mollis ornare vel eu leo. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Nullam quis risus eget urna mollis ornare vel eu leo. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Aenean lacinia bibendum nulla sed consectetur.

18 | 19 | ---- 20 | 21 | Tags: stars, universe, up there 22 | 23 | ---- 24 | 25 | Uuid: EWQEPJBB2Xyrrrj6 -------------------------------------------------------------------------------- /content/1_photography/2_sky/blood-moon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/2_sky/blood-moon.jpg -------------------------------------------------------------------------------- /content/1_photography/2_sky/blood-moon.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Laguna Beach, United States 2 | 3 | ---- 4 | 5 | Alt: Super blood moon 6 | 7 | ---- 8 | 9 | Photographer: Derek Liang 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/XZyjr93zaZg 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 1 26 | 27 | ---- 28 | 29 | Uuid: kUpBxXRb6As5AI4Q -------------------------------------------------------------------------------- /content/1_photography/2_sky/coconut-milkyway.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/2_sky/coconut-milkyway.jpg -------------------------------------------------------------------------------- /content/1_photography/2_sky/coconut-milkyway.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Maldives 2 | 3 | ---- 4 | 5 | Alt: Palm trees and the night sky with stars and the milky way 6 | 7 | ---- 8 | 9 | Photographer: Mohamed Ajufaan 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/Y5GuEA4ThdY 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: qQdp74eJyZtSsN04 -------------------------------------------------------------------------------- /content/1_photography/2_sky/dark-forest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/2_sky/dark-forest.jpg -------------------------------------------------------------------------------- /content/1_photography/2_sky/dark-forest.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Mammoth Lakes, United States 2 | 3 | ---- 4 | 5 | Alt: The mikly way above mountains 6 | 7 | ---- 8 | 9 | Photographer: Robson Hatsukami Morgan 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/-wEFdRCG4IU 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 4 26 | 27 | ---- 28 | 29 | Uuid: 9APZDUNsDTbHMMTZ -------------------------------------------------------------------------------- /content/1_photography/2_sky/desert-tree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/2_sky/desert-tree.jpg -------------------------------------------------------------------------------- /content/1_photography/2_sky/desert-tree.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Roubideau Canyon Road, Delta, United States 2 | 3 | ---- 4 | 5 | Alt: A tree with the night sky in the background 6 | 7 | ---- 8 | 9 | Photographer: Andrew Gloor 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/q-D_FFvnob8 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 3 26 | 27 | ---- 28 | 29 | Uuid: QpaDWZ8W1hy2JAsd -------------------------------------------------------------------------------- /content/1_photography/2_sky/tent-in-the-woods.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/2_sky/tent-in-the-woods.jpg -------------------------------------------------------------------------------- /content/1_photography/2_sky/tent-in-the-woods.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Zion National Park 2 | 3 | ---- 4 | 5 | Alt: A bright lit tent in the forest with the night sky and stars above 6 | 7 | ---- 8 | 9 | Photographer: Bobby Burch 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/MEBqI9fzqao 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: ofXkD4gdgBOkHBAb -------------------------------------------------------------------------------- /content/1_photography/3_ocean/album.txt: -------------------------------------------------------------------------------- 1 | Title: Ocean 2 | 3 | ---- 4 | 5 | Cover: - file://Kxk9ITpo07vV6u3e 6 | 7 | ---- 8 | 9 | Headline: Oceans are quite nice 10 | 11 | ---- 12 | 13 | Subheadline: Blue with lots of fish 14 | 15 | ---- 16 | 17 | Text:

Cras mattis consectetur purus sit amet fermentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere consectetur est at lobortis. Donec id elit non mi porta gravida at eget metus. Curabitur blandit tempus porttitor. Aenean lacinia bibendum nulla sed consectetur.

Donec sed odio dui. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nulla vitae elit libero, a pharetra augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

18 | 19 | ---- 20 | 21 | Tags: ocean, water, blue 22 | 23 | ---- 24 | 25 | Uuid: D4DuOwcJk0fL0twA -------------------------------------------------------------------------------- /content/1_photography/3_ocean/attention-sharks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/3_ocean/attention-sharks.jpg -------------------------------------------------------------------------------- /content/1_photography/3_ocean/attention-sharks.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 Ocean Rd, Palm Beach, Australia 2 | 3 | ---- 4 | 5 | Alt: A lone surfer in the waves near the beach 6 | 7 | ---- 8 | 9 | Photographer: Ben Krygsman 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/g8hHM7rc-kw 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: 0pQGdoX7b4QuEqhl -------------------------------------------------------------------------------- /content/1_photography/3_ocean/island-from-above.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/3_ocean/island-from-above.jpg -------------------------------------------------------------------------------- /content/1_photography/3_ocean/island-from-above.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Breckenridge, United States 2 | 3 | ---- 4 | 5 | Alt: Drone picture of a small, green island 6 | 7 | ---- 8 | 9 | Photographer: Nathan Anderson 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/prIk6PdCrgg 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 1 26 | 27 | ---- 28 | 29 | Uuid: Kxk9ITpo07vV6u3e -------------------------------------------------------------------------------- /content/1_photography/3_ocean/jellyfish.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/3_ocean/jellyfish.jpg -------------------------------------------------------------------------------- /content/1_photography/3_ocean/jellyfish.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Valencia, Spain 2 | 3 | ---- 4 | 5 | Alt: A swarm of jellyfish 6 | 7 | ---- 8 | 9 | Photographer: Joel Filipe 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/_AjqGGafofE 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 3 26 | 27 | ---- 28 | 29 | Uuid: bUbLFbPgBpL51DSp -------------------------------------------------------------------------------- /content/1_photography/3_ocean/nasty-rocks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/3_ocean/nasty-rocks.jpg -------------------------------------------------------------------------------- /content/1_photography/3_ocean/nasty-rocks.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Hastings Point, Australia 2 | 3 | ---- 4 | 5 | Alt: Waves crashing on rocks 6 | 7 | ---- 8 | 9 | Photographer: Bailey Mahon 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/DiqUQYLov74 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 2 26 | 27 | ---- 28 | 29 | Uuid: GPuhd1glEC35U9k1 -------------------------------------------------------------------------------- /content/1_photography/3_ocean/smashed-by-waves.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/3_ocean/smashed-by-waves.jpg -------------------------------------------------------------------------------- /content/1_photography/3_ocean/smashed-by-waves.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Sri Lanka, boosa 2 | 3 | ---- 4 | 5 | Alt: A wave from inside 6 | 7 | ---- 8 | 9 | Photographer: Maxwell Gifted 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/RbNxSL2D-xM 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 4 26 | 27 | ---- 28 | 29 | Uuid: 9n3HLGrBUs8MZUnB -------------------------------------------------------------------------------- /content/1_photography/3_ocean/the-beach.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/3_ocean/the-beach.jpg -------------------------------------------------------------------------------- /content/1_photography/3_ocean/the-beach.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Avalon Beach, Australia 2 | 3 | ---- 4 | 5 | Alt: Two surfers walking on the beach 6 | 7 | ---- 8 | 9 | Photographer: Lachlan Dempsey 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/O14abKtZ5iY 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: o3d9HlDINEzeJvp8 -------------------------------------------------------------------------------- /content/1_photography/4_desert/album.txt: -------------------------------------------------------------------------------- 1 | Title: Desert 2 | 3 | ---- 4 | 5 | Cover: - file://TcCivi92OPvsiwka 6 | 7 | ---- 8 | 9 | Headline: 10 | 11 | ---- 12 | 13 | Subheadline: It's pretty hot 14 | 15 | ---- 16 | 17 | Text:

Curabitur blandit tempus porttitor. Sed posuere consectetur est at lobortis. Maecenas faucibus mollis interdum. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

Nullam quis risus eget urna mollis ornare vel eu leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Curabitur blandit tempus porttitor.

18 | 19 | ---- 20 | 21 | Tags: desert, sand, landscape 22 | 23 | ---- 24 | 25 | Uuid: w8ymxqAzqTvYkHJ4 -------------------------------------------------------------------------------- /content/1_photography/4_desert/area-51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/4_desert/area-51.jpg -------------------------------------------------------------------------------- /content/1_photography/4_desert/area-51.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Night sky over the desert 6 | 7 | ---- 8 | 9 | Photographer: Idan Arad 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/Z0IOLvbY-qM 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 1 26 | 27 | ---- 28 | 29 | Uuid: oe7VNInWgLwgKYOZ -------------------------------------------------------------------------------- /content/1_photography/4_desert/death-trap.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/4_desert/death-trap.jpg -------------------------------------------------------------------------------- /content/1_photography/4_desert/death-trap.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Sandwich Harbour Historic, Namibia 2 | 3 | ---- 4 | 5 | Alt: A dead tree in the desert 6 | 7 | ---- 8 | 9 | Photographer: Ryan Cheng 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/uqYy29Sfb8Q 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 5 26 | 27 | ---- 28 | 29 | Uuid: 1R9Haswet76cNlUB -------------------------------------------------------------------------------- /content/1_photography/4_desert/dune.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/4_desert/dune.jpg -------------------------------------------------------------------------------- /content/1_photography/4_desert/dune.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Death Valley National Park, United States 2 | 3 | ---- 4 | 5 | Alt: A dune in the desert 6 | 7 | ---- 8 | 9 | Photographer: Jehyun Sung 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/-Lc6azmFSk4 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 2 26 | 27 | ---- 28 | 29 | Uuid: i8yimrGbe132VGr5 -------------------------------------------------------------------------------- /content/1_photography/4_desert/indiana-jones.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/4_desert/indiana-jones.jpg -------------------------------------------------------------------------------- /content/1_photography/4_desert/indiana-jones.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Antelope Canyon, United States 2 | 3 | ---- 4 | 5 | Alt: Antelope canyon lit by sunbeams 6 | 7 | ---- 8 | 9 | Photographer: Madhu Shesharam 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/EVZxXuOEk3w 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 3 26 | 27 | ---- 28 | 29 | Uuid: TcCivi92OPvsiwka -------------------------------------------------------------------------------- /content/1_photography/4_desert/water-please.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/4_desert/water-please.jpg -------------------------------------------------------------------------------- /content/1_photography/4_desert/water-please.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: The moon above the desert 6 | 7 | ---- 8 | 9 | Photographer: Jordan Steranka 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/HAAq_zesf-Y 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 4 26 | 27 | ---- 28 | 29 | Uuid: 6rSAbkLtovvdhS2E -------------------------------------------------------------------------------- /content/1_photography/5_mountains/album.txt: -------------------------------------------------------------------------------- 1 | Title: Mountains 2 | 3 | ---- 4 | 5 | Cover: - file://PHRV0Y0YkDOf7Cdc 6 | 7 | ---- 8 | 9 | Headline: Mountains 10 | 11 | ---- 12 | 13 | Subheadline: Where do they come from? 14 | 15 | ---- 16 | 17 | Text:

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Nullam id dolor id nibh ultricies vehicula ut id elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Aenean lacinia bibendum nulla sed consectetur. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

18 | 19 | ---- 20 | 21 | Tags: mountains, peak nature 22 | 23 | ---- 24 | 25 | Uuid: XqbutgSsL5ibgjxP -------------------------------------------------------------------------------- /content/1_photography/5_mountains/climbers-are-crazy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/5_mountains/climbers-are-crazy.jpg -------------------------------------------------------------------------------- /content/1_photography/5_mountains/climbers-are-crazy.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Alabama Hills, United States 2 | 3 | ---- 4 | 5 | Alt: Mountain with an interesting rock formation 6 | 7 | ---- 8 | 9 | Photographer: Parker Amstutz 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/4oBOCIpb3YQ 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 1 26 | 27 | ---- 28 | 29 | Uuid: G8fDPmaJBTPAYPX6 -------------------------------------------------------------------------------- /content/1_photography/5_mountains/non-potable.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/5_mountains/non-potable.jpg -------------------------------------------------------------------------------- /content/1_photography/5_mountains/non-potable.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Téryho chata, Vysoké Tatry, Slovakia 2 | 3 | ---- 4 | 5 | Alt: A creek and mountain in the dusk 6 | 7 | ---- 8 | 9 | Photographer: Štefan Štefančík 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/pmH_Y4Qetrk 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 2 26 | 27 | ---- 28 | 29 | Uuid: VI8RHCHCnTx1ygYK -------------------------------------------------------------------------------- /content/1_photography/5_mountains/probably-photoshopped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/5_mountains/probably-photoshopped.jpg -------------------------------------------------------------------------------- /content/1_photography/5_mountains/probably-photoshopped.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Ancient Bristlecone Pine Forest, United States 2 | 3 | ---- 4 | 5 | Alt: Mountains in the dusk 6 | 7 | ---- 8 | 9 | Photographer: John Towner 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/JgOeRuGD_Y4 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 3 26 | 27 | ---- 28 | 29 | Uuid: PHRV0Y0YkDOf7Cdc -------------------------------------------------------------------------------- /content/1_photography/5_mountains/that-apple-mountain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/5_mountains/that-apple-mountain.jpg -------------------------------------------------------------------------------- /content/1_photography/5_mountains/that-apple-mountain.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Yosemite National Park, USA 2 | 3 | ---- 4 | 5 | Alt: The magic unfolds in Yosemite Valley 6 | 7 | ---- 8 | 9 | Photographer: Madhu Shesharam 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/HRA_VAi9_Nc 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 4 26 | 27 | ---- 28 | 29 | Uuid: fWxKEZqZZp27Zmsb -------------------------------------------------------------------------------- /content/1_photography/5_mountains/trees-and-another-mountain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/5_mountains/trees-and-another-mountain.jpg -------------------------------------------------------------------------------- /content/1_photography/5_mountains/trees-and-another-mountain.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Rein in Taufers, South Tyrol, Italy 2 | 3 | ---- 4 | 5 | Alt: Foggy mountain with a color forest in the foreground 6 | 7 | ---- 8 | 9 | Photographer: Eberhard Grossgasteiger 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/BXasVMRGsuo 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 5 26 | 27 | ---- 28 | 29 | Uuid: p8iAVxYBqkjR8eAA -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/album.txt: -------------------------------------------------------------------------------- 1 | Title: Waterfalls 2 | 3 | ---- 4 | 5 | Cover: - file://KwkXlLQwSJP3JhYI 6 | 7 | ---- 8 | 9 | Headline: 10 | 11 | ---- 12 | 13 | Subheadline: Water that falls 14 | 15 | ---- 16 | 17 | Text:

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Nulla vitae elit libero, a pharetra augue. Curabitur blandit tempus porttitor. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

Cras mattis consectetur purus sit amet fermentum. Donec ullamcorper nulla non metus auctor fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Curabitur blandit tempus porttitor.

18 | 19 | ---- 20 | 21 | Tags: water, falls, down 22 | 23 | ---- 24 | 25 | Uuid: Ne4eXh9gk3SPWsxu -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/could-be-hawaii.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/6_waterfall/could-be-hawaii.jpg -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/could-be-hawaii.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Mulafossur Waterfall, Faroe Islands 2 | 3 | ---- 4 | 5 | Alt: Spectacular cliffs and a waterfall 6 | 7 | ---- 8 | 9 | Photographer: Ben Tatlow 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/0-9FgC-MVfM 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: zCSNdxdxQLv7v90m -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/lots-of-water.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/6_waterfall/lots-of-water.jpg -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/lots-of-water.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Aba, China 2 | 3 | ---- 4 | 5 | Alt: A huge waterfall in the forest 6 | 7 | ---- 8 | 9 | Photographer: Swander 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/tHWCvzEeKPw 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: ypnar0L4JLSOhyzI -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/maybe-iceland.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/6_waterfall/maybe-iceland.jpg -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/maybe-iceland.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Skógafoss, Iceland 2 | 3 | ---- 4 | 5 | Alt: Mighty waterfall with lots of mist 6 | 7 | ---- 8 | 9 | Photographer: Ruslan Valeev 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/dMB2Lh13K5w 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: EL2AU2LNatipeWPl -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/not-niagra.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/6_waterfall/not-niagra.jpg -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/not-niagra.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Waterfall and rocks 6 | 7 | ---- 8 | 9 | Photographer: Ivana Cajina 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/9LwCEYH1oW4 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: ywQvOO1zShxtHb0k -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/the-fall-is-lava.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/6_waterfall/the-fall-is-lava.jpg -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/the-fall-is-lava.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Yosemite Valley, United States 2 | 3 | ---- 4 | 5 | Alt: Nicely lit waterfall in the sunset that seems like lava 6 | 7 | ---- 8 | 9 | Photographer: Stephen Leonardi 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/MDmwQVgDHHM 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: KwkXlLQwSJP3JhYI -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/twin-peaks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/6_waterfall/twin-peaks.jpg -------------------------------------------------------------------------------- /content/1_photography/6_waterfall/twin-peaks.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A waterfall in the forest 6 | 7 | ---- 8 | 9 | Photographer: Claude Piché 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/Tqs2btwP7tQ 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: SbAezZovkgdEbopo -------------------------------------------------------------------------------- /content/1_photography/7_plants/album.txt: -------------------------------------------------------------------------------- 1 | Title: Plants 2 | 3 | ---- 4 | 5 | Cover: - file://ta7NGtnZzvMSzTEF 6 | 7 | ---- 8 | 9 | Headline: 10 | 11 | ---- 12 | 13 | Subheadline: Mostly green 14 | 15 | ---- 16 | 17 | Text:

This was a very special project. Plants are nice and quite beautiful Nulla vitae elit libero, a pharetra augue. Donec ullamcorper nulla non metus auctor fringilla.

Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Curabitur blandit tempus porttitor. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nulla vitae elit libero, a pharetra augue.

18 | 19 | ---- 20 | 21 | Tags: plants 22 | 23 | ---- 24 | 25 | Uuid: wAgKEa9FhpZ5mTMG -------------------------------------------------------------------------------- /content/1_photography/7_plants/between-the-ferns.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/7_plants/between-the-ferns.jpg -------------------------------------------------------------------------------- /content/1_photography/7_plants/between-the-ferns.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Ferns in the dark 6 | 7 | ---- 8 | 9 | Photographer: Annie Spratt 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/rjIacQc-uYs 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: JfJDhAS8XTPgtAaf -------------------------------------------------------------------------------- /content/1_photography/7_plants/could-be-poisonous.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/7_plants/could-be-poisonous.jpg -------------------------------------------------------------------------------- /content/1_photography/7_plants/could-be-poisonous.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: RHS Garden Wisley, Wisley, United Kingdom 2 | 3 | ---- 4 | 5 | Alt: Colorful leafs 6 | 7 | ---- 8 | 9 | Photographer: Annie Spratt 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/ByxgvpNYIKQ 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: rireqNIOuBwm0JP9 -------------------------------------------------------------------------------- /content/1_photography/7_plants/deadly-snake-hideout.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/7_plants/deadly-snake-hideout.jpg -------------------------------------------------------------------------------- /content/1_photography/7_plants/deadly-snake-hideout.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Leafs with water drops 6 | 7 | ---- 8 | 9 | Photographer: Axel Holen 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/zKfumY9mQFI 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: J9nD5vVe6kNTjN6G -------------------------------------------------------------------------------- /content/1_photography/7_plants/nice-colors-ugly-plant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/7_plants/nice-colors-ugly-plant.jpg -------------------------------------------------------------------------------- /content/1_photography/7_plants/nice-colors-ugly-plant.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Nazareth, Israel 2 | 3 | ---- 4 | 5 | Alt: Colorful succulent 6 | 7 | ---- 8 | 9 | Photographer: Yousef Espanioly 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/AWYI4-h3VnM 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: ta7NGtnZzvMSzTEF -------------------------------------------------------------------------------- /content/1_photography/7_plants/no-idea-what-that-is.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/7_plants/no-idea-what-that-is.jpg -------------------------------------------------------------------------------- /content/1_photography/7_plants/no-idea-what-that-is.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: RHS Garden Wisley, Wisley, United Kingdom 2 | 3 | ---- 4 | 5 | Alt: Succulent 6 | 7 | ---- 8 | 9 | Photographer: Annie Spratt 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/8mqOw4DBBSg 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: 0QpycMSjftE9nh4q -------------------------------------------------------------------------------- /content/1_photography/8_landscape/album.txt: -------------------------------------------------------------------------------- 1 | Title: Landscape 2 | 3 | ---- 4 | 5 | Cover: - file://oQRCHqkIUNESUPJp 6 | 7 | ---- 8 | 9 | Headline: 10 | 11 | ---- 12 | 13 | Subheadline: Not a lot of portraits here 14 | 15 | ---- 16 | 17 | Text:

Nulla vitae elit libero, a pharetra augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Nullam id dolor id nibh ultricies vehicula ut id elit. Nulla vitae elit libero, a pharetra augue.

Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

18 | 19 | ---- 20 | 21 | Tags: landscape, nature 22 | 23 | ---- 24 | 25 | Uuid: PjvoKxwSNH1m9vjC -------------------------------------------------------------------------------- /content/1_photography/8_landscape/clouds-eat-mountain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/8_landscape/clouds-eat-mountain.jpg -------------------------------------------------------------------------------- /content/1_photography/8_landscape/clouds-eat-mountain.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Licancabur 2 | 3 | ---- 4 | 5 | Alt: Dry landscape with a snowy mountain in the background 6 | 7 | ---- 8 | 9 | Photographer: Marcelo Quinan 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/u0ZgqJD55pE 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: QHkCr8pRTluhzX70 -------------------------------------------------------------------------------- /content/1_photography/8_landscape/dino-poop-mountain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/8_landscape/dino-poop-mountain.jpg -------------------------------------------------------------------------------- /content/1_photography/8_landscape/dino-poop-mountain.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Iceland 2 | 3 | ---- 4 | 5 | Alt: Green rocky hill 6 | 7 | ---- 8 | 9 | Photographer: Cosmic Timetraveler 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/PsQzySEvx1Q 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: IAl9t0J8Xy3XnXxw -------------------------------------------------------------------------------- /content/1_photography/8_landscape/hobbits-and-stuff.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/8_landscape/hobbits-and-stuff.jpg -------------------------------------------------------------------------------- /content/1_photography/8_landscape/hobbits-and-stuff.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Saksun, Faroe Islands 2 | 3 | ---- 4 | 5 | Alt: Lake with a waterfall, surrounded by mountains 6 | 7 | ---- 8 | 9 | Photographer: Ben Tatlow 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/5I8Jf7bAKuo 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: EC7pNvYO0LFdSuHW -------------------------------------------------------------------------------- /content/1_photography/8_landscape/less-water-than-last-year.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/8_landscape/less-water-than-last-year.jpg -------------------------------------------------------------------------------- /content/1_photography/8_landscape/less-water-than-last-year.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Template: image 6 | 7 | ---- 8 | 9 | Uuid: uuylPxWZl8MyybAG -------------------------------------------------------------------------------- /content/1_photography/8_landscape/mordor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/8_landscape/mordor.jpg -------------------------------------------------------------------------------- /content/1_photography/8_landscape/mordor.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: The Lost Valley, Ballachulish, United Kingdom 2 | 3 | ---- 4 | 5 | Alt: Eerie mountain landscape 6 | 7 | ---- 8 | 9 | Photographer: Rucksack Magazine 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/358UX3A06UU 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: B1la4J7v249AHeXu -------------------------------------------------------------------------------- /content/1_photography/8_landscape/scary-ridge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/8_landscape/scary-ridge.jpg -------------------------------------------------------------------------------- /content/1_photography/8_landscape/scary-ridge.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Brienzer Rothorn, Flühli, Switzerland 2 | 3 | ---- 4 | 5 | Alt: A ridge in the fog 6 | 7 | ---- 8 | 9 | Photographer: Dave Ruck 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/AkYmPq7A4XE 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: 9UWtZINIn5FrO9If -------------------------------------------------------------------------------- /content/1_photography/8_landscape/that-green-looks-fake.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/8_landscape/that-green-looks-fake.jpg -------------------------------------------------------------------------------- /content/1_photography/8_landscape/that-green-looks-fake.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Green landscape with a few sheep 6 | 7 | ---- 8 | 9 | Photographer: Jamie MacPherson 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/uSJ8Xjj3ew4 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: oQRCHqkIUNESUPJp -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/abba.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/_drafts/animals/abba.jpg -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/abba.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A colorful fish 6 | 7 | ---- 8 | 9 | Photographer: Pietro Jeng 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/0Sd2qqU5soQ 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 4 26 | 27 | ---- 28 | 29 | Uuid: L6CV4fI3RlqmXZbf -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/album.txt: -------------------------------------------------------------------------------- 1 | Title: Animals 2 | 3 | ---- 4 | 5 | Cover: - peter-fox.jpg 6 | 7 | ---- 8 | 9 | Headline: Animals as leaders 10 | 11 | ---- 12 | 13 | Description: What does the fox say? 14 | 15 | ---- 16 | 17 | Tags: animals 18 | 19 | ---- 20 | 21 | Uuid: WHgrILxhRV80ZFb2 -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/bird-reynolds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/_drafts/animals/bird-reynolds.jpg -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/bird-reynolds.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Lewa Wildlife Conservancy, Isiolo, Kenya 2 | 3 | ---- 4 | 5 | Alt: A lilac-breasted roller sitting on a branch 6 | 7 | ---- 8 | 9 | Photographer: David Clode 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/7_TTPznVIQI 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 2 26 | 27 | ---- 28 | 29 | Uuid: jtXqhttBRUaMZJcc -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/dumbo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/_drafts/animals/dumbo.jpg -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/dumbo.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: An african elephant walking towards the camera 6 | 7 | ---- 8 | 9 | Photographer: AJ Robbie 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/BuQ1RZckYW4 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 3 26 | 27 | ---- 28 | 29 | Uuid: gWwNSYJCQS8iKrE0 -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/free-wheely.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/_drafts/animals/free-wheely.jpg -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/free-wheely.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Peacock Plumage 6 | 7 | ---- 8 | 9 | Photographer: Dean Nahum 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/ecQDQb8lWDU 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 1 26 | 27 | ---- 28 | 29 | Uuid: FsWpo2mCsVwLnAVn -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/peter-fox.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/_drafts/animals/peter-fox.jpg -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/peter-fox.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: Alaska, United States 2 | 3 | ---- 4 | 5 | Alt: A fox staring at the camera 6 | 7 | ---- 8 | 9 | Photographer: Sunyu 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/tIfrzHxhPYQ 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 5 26 | 27 | ---- 28 | 29 | Uuid: XN55HBnxPhVT6EQV -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/steve-turtle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/1_photography/_drafts/animals/steve-turtle.jpg -------------------------------------------------------------------------------- /content/1_photography/_drafts/animals/steve-turtle.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A turtle swimming under water 6 | 7 | ---- 8 | 9 | Photographer: Wexor Tmg 10 | 11 | ---- 12 | 13 | License: Unsplash 14 | 15 | ---- 16 | 17 | Link: https://unsplash.com/photos/L-2p8fapOA8 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Sort: 6 26 | 27 | ---- 28 | 29 | Uuid: 6wZo5IiNkAEtuYLS -------------------------------------------------------------------------------- /content/1_photography/photography.txt: -------------------------------------------------------------------------------- 1 | Title: Photography 2 | 3 | ---- 4 | 5 | Uuid: EgfXk155nyUvqqA1 -------------------------------------------------------------------------------- /content/2_notes/20200905_through-the-desert/desert.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20200905_through-the-desert/desert.jpg -------------------------------------------------------------------------------- /content/2_notes/20200905_through-the-desert/desert.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A caravan of camels in the desert. The sun sets and paints the sky orange. Mountains are visible in the background. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: 6vkMk8AIZhOAHfUF -------------------------------------------------------------------------------- /content/2_notes/20211005_chasing-waterfalls/waterfall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20211005_chasing-waterfalls/waterfall.jpg -------------------------------------------------------------------------------- /content/2_notes/20211005_chasing-waterfalls/waterfall.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A huge waterfall in the background and a small figure standing at the bottom, raising their arms. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: 5fQIlNlY1DtjUVN0 -------------------------------------------------------------------------------- /content/2_notes/20220625_a-night-in-the-forest/forest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20220625_a-night-in-the-forest/forest.jpg -------------------------------------------------------------------------------- /content/2_notes/20220625_a-night-in-the-forest/forest.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Two tents in the forest and the sun is shining through the leaves. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: W0sVe0jrG3gYr0t6 -------------------------------------------------------------------------------- /content/2_notes/20230421_across-the-ocean/ocean.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20230421_across-the-ocean/ocean.jpg -------------------------------------------------------------------------------- /content/2_notes/20230421_across-the-ocean/ocean.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: An array of small tropical islands with high cliffs and jungle on top. Boats sail between them. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: PfRcUCpnZ5oYuUew -------------------------------------------------------------------------------- /content/2_notes/20230913_himalaya-and-back/himalaya.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20230913_himalaya-and-back/himalaya.jpg -------------------------------------------------------------------------------- /content/2_notes/20230913_himalaya-and-back/himalaya.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Two donkeys carry climbing gear through rough terrain with high snowy mountain peaks in the background. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: 0EV19sdwxl9RMoyQ -------------------------------------------------------------------------------- /content/2_notes/20231124_exploring-the-universe/dark-forest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20231124_exploring-the-universe/dark-forest.jpg -------------------------------------------------------------------------------- /content/2_notes/20231124_exploring-the-universe/dark-forest.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: The milky way above a foggy landscape with mountains in the background and a forest in the foreground. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: image 22 | 23 | ---- 24 | 25 | Uuid: tWNX7ZrzJUvS9Vad 26 | -------------------------------------------------------------------------------- /content/2_notes/20231124_exploring-the-universe/tent-in-the-woods.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20231124_exploring-the-universe/tent-in-the-woods.jpg -------------------------------------------------------------------------------- /content/2_notes/20231124_exploring-the-universe/tent-in-the-woods.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A tent at night, glowing from a light inside. It is surrounded by tall trees and the milky way is in the background. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: xkPVM7MdXoEn4do6 -------------------------------------------------------------------------------- /content/2_notes/20231124_exploring-the-universe/universe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/20231124_exploring-the-universe/universe.jpg -------------------------------------------------------------------------------- /content/2_notes/20231124_exploring-the-universe/universe.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A silhouette of a man looking up at the milky way at night. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: GRXKArnK2t8V1tV5 -------------------------------------------------------------------------------- /content/2_notes/_drafts/in-the-jungle-of-sumatra/sumatra.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/2_notes/_drafts/in-the-jungle-of-sumatra/sumatra.jpg -------------------------------------------------------------------------------- /content/2_notes/_drafts/in-the-jungle-of-sumatra/sumatra.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A hiker stands in front of an old asian building. Misty mountains in the background. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: az5it4WXblfSnK9r -------------------------------------------------------------------------------- /content/2_notes/notes.txt: -------------------------------------------------------------------------------- 1 | Title: Notes 2 | 3 | ---- 4 | 5 | Uuid: ZWZVZSlNpA6VJzXZ -------------------------------------------------------------------------------- /content/3_about/table.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/3_about/table.jpg -------------------------------------------------------------------------------- /content/3_about/table.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A very clean white room with a small table and a chair in front of it. It's very minimalistic. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: iLoBxXECUjInnSGg -------------------------------------------------------------------------------- /content/3_about/team.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/3_about/team.jpg -------------------------------------------------------------------------------- /content/3_about/team.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: Three women sit at a desk with their laptops. They are chatting and laughing. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: 8RxIAFzJekgWfpFn -------------------------------------------------------------------------------- /content/3_about/writing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/content/3_about/writing.jpg -------------------------------------------------------------------------------- /content/3_about/writing.jpg.txt: -------------------------------------------------------------------------------- 1 | Caption: 2 | 3 | ---- 4 | 5 | Alt: A table with a notebook, a coffee mug and a croissant from above. A women is taking notes. 6 | 7 | ---- 8 | 9 | Photographer: 10 | 11 | ---- 12 | 13 | License: 14 | 15 | ---- 16 | 17 | Link: 18 | 19 | ---- 20 | 21 | Template: blocks/image 22 | 23 | ---- 24 | 25 | Uuid: mHEVVr6xtDc3gIip -------------------------------------------------------------------------------- /content/error/error.txt: -------------------------------------------------------------------------------- 1 | Title: Error 2 | 3 | ---- 4 | 5 | Text: This page cannot be found 😱 6 | 7 | ---- 8 | 9 | Uuid: dRz7d31JoFrPuWkG -------------------------------------------------------------------------------- /content/home/home.txt: -------------------------------------------------------------------------------- 1 | Title: Home 2 | 3 | ---- 4 | 5 | Headline: Welcome to Kirby's Starterkit 6 | 7 | ---- 8 | 9 | Subheadline: A fully documented example project 10 | 11 | ---- 12 | 13 | Uuid: wljMYhm0m3e9QOwC -------------------------------------------------------------------------------- /content/sandbox/sandbox.txt: -------------------------------------------------------------------------------- 1 | Title: Sandbox 2 | 3 | ---- 4 | 5 | Test: 6 | 7 | ---- 8 | 9 | Uuid: 7hq2RUkhwEOtnUSh -------------------------------------------------------------------------------- /content/site.txt: -------------------------------------------------------------------------------- 1 | Title: Mægazine 2 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/favicon.ico -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | render(); 6 | -------------------------------------------------------------------------------- /kirby/.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | # PHP PSR-12 Coding Standards 5 | # https://www.php-fig.org/psr/psr-12/ 6 | 7 | root = true 8 | 9 | [*] 10 | charset = utf-8 11 | end_of_line = lf 12 | indent_style = tab 13 | indent_size = 2 14 | trim_trailing_whitespace = true 15 | 16 | [*.php] 17 | indent_size = 4 18 | insert_final_newline = true 19 | 20 | [*.vue.php] 21 | indent_size = 2 22 | insert_final_newline = false 23 | 24 | [*.yml] 25 | indent_style = space 26 | 27 | [*.md] 28 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /kirby/bootstrap.php: -------------------------------------------------------------------------------- 1 | =') === false || 9 | version_compare(PHP_VERSION, '8.5.0', '<') === false 10 | ) { 11 | die(include __DIR__ . '/views/php.php'); 12 | } 13 | 14 | if (is_file($autoloader = dirname(__DIR__) . '/vendor/autoload.php')) { 15 | /** 16 | * Always prefer a site-wide Composer autoloader 17 | * if it exists, it means that the user has probably 18 | * installed additional packages 19 | * 20 | * @psalm-suppress MissingFile 21 | */ 22 | include $autoloader; 23 | } elseif (is_file($autoloader = __DIR__ . '/vendor/autoload.php')) { 24 | /** 25 | * Fall back to the local autoloader if that exists 26 | * 27 | * @psalm-suppress MissingFile 28 | */ 29 | include $autoloader; 30 | } else { 31 | /** 32 | * If neither one exists, don't bother searching; 33 | * it's a custom directory setup and the users need to 34 | * load the autoloader themselves 35 | */ 36 | } 37 | -------------------------------------------------------------------------------- /kirby/config/api/authentication.php: -------------------------------------------------------------------------------- 1 | kirby()->auth(); 7 | $allowImpersonation = $this->kirby()->option('api.allowImpersonation') ?? false; 8 | 9 | // csrf token check 10 | if ( 11 | $auth->type($allowImpersonation) === 'session' && 12 | $auth->csrf() === false 13 | ) { 14 | throw new AuthException('Unauthenticated'); 15 | } 16 | 17 | // get user from session or basic auth 18 | if ($user = $auth->user(null, $allowImpersonation)) { 19 | if ($user->role()->permissions()->for('access', 'panel') === false) { 20 | throw new AuthException(['key' => 'access.panel']); 21 | } 22 | 23 | return $user; 24 | } 25 | 26 | throw new AuthException('Unauthenticated'); 27 | }; 28 | -------------------------------------------------------------------------------- /kirby/config/api/models.php: -------------------------------------------------------------------------------- 1 | include __DIR__ . '/models/File.php', 8 | 'FileBlueprint' => include __DIR__ . '/models/FileBlueprint.php', 9 | 'FileVersion' => include __DIR__ . '/models/FileVersion.php', 10 | 'Language' => include __DIR__ . '/models/Language.php', 11 | 'License' => include __DIR__ . '/models/License.php', 12 | 'Page' => include __DIR__ . '/models/Page.php', 13 | 'PageBlueprint' => include __DIR__ . '/models/PageBlueprint.php', 14 | 'Role' => include __DIR__ . '/models/Role.php', 15 | 'Site' => include __DIR__ . '/models/Site.php', 16 | 'SiteBlueprint' => include __DIR__ . '/models/SiteBlueprint.php', 17 | 'System' => include __DIR__ . '/models/System.php', 18 | 'Translation' => include __DIR__ . '/models/Translation.php', 19 | 'User' => include __DIR__ . '/models/User.php', 20 | 'UserBlueprint' => include __DIR__ . '/models/UserBlueprint.php', 21 | ]; 22 | -------------------------------------------------------------------------------- /kirby/config/api/models/FileBlueprint.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'name' => fn (FileBlueprint $blueprint) => $blueprint->name(), 11 | 'options' => fn (FileBlueprint $blueprint) => $blueprint->options(), 12 | 'tabs' => fn (FileBlueprint $blueprint) => $blueprint->tabs(), 13 | 'title' => fn (FileBlueprint $blueprint) => $blueprint->title(), 14 | ], 15 | 'type' => FileBlueprint::class, 16 | 'views' => [], 17 | ]; 18 | -------------------------------------------------------------------------------- /kirby/config/api/models/Language.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'code' => fn (Language $language) => $language->code(), 11 | 'default' => fn (Language $language) => $language->isDefault(), 12 | 'direction' => fn (Language $language) => $language->direction(), 13 | 'locale' => fn (Language $language) => $language->locale(), 14 | 'name' => fn (Language $language) => $language->name(), 15 | 'rules' => fn (Language $language) => $language->rules(), 16 | 'url' => fn (Language $language) => $language->url(), 17 | ], 18 | 'type' => Language::class, 19 | 'views' => [ 20 | 'default' => [ 21 | 'code', 22 | 'default', 23 | 'direction', 24 | 'locale', 25 | 'name', 26 | 'rules', 27 | 'url' 28 | ] 29 | ] 30 | ]; 31 | -------------------------------------------------------------------------------- /kirby/config/api/models/License.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'status' => fn (License $license) => $license->status()->value(), 11 | 'code' => function (License $license) { 12 | return $this->kirby()->user()->isAdmin() ? $license->code() : $license->code(true); 13 | }, 14 | 'type' => fn (License $license) => $license->type()->label(), 15 | ], 16 | 'type' => License::class, 17 | ]; 18 | -------------------------------------------------------------------------------- /kirby/config/api/models/PageBlueprint.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'name' => fn (PageBlueprint $blueprint) => $blueprint->name(), 11 | 'num' => fn (PageBlueprint $blueprint) => $blueprint->num(), 12 | 'options' => fn (PageBlueprint $blueprint) => $blueprint->options(), 13 | 'preview' => fn (PageBlueprint $blueprint) => $blueprint->preview(), 14 | 'status' => fn (PageBlueprint $blueprint) => $blueprint->status(), 15 | 'tabs' => fn (PageBlueprint $blueprint) => $blueprint->tabs(), 16 | 'title' => fn (PageBlueprint $blueprint) => $blueprint->title(), 17 | ], 18 | 'type' => PageBlueprint::class, 19 | 'views' => [], 20 | ]; 21 | -------------------------------------------------------------------------------- /kirby/config/api/models/Role.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'description' => fn (Role $role) => $role->description(), 11 | 'name' => fn (Role $role) => $role->name(), 12 | 'permissions' => fn (Role $role) => $role->permissions()->toArray(), 13 | 'title' => fn (Role $role) => $role->title(), 14 | ], 15 | 'type' => Role::class, 16 | 'views' => [ 17 | 'compact' => [ 18 | 'description', 19 | 'name', 20 | 'title' 21 | ] 22 | ] 23 | ]; 24 | -------------------------------------------------------------------------------- /kirby/config/api/models/SiteBlueprint.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'name' => fn (SiteBlueprint $blueprint) => $blueprint->name(), 11 | 'options' => fn (SiteBlueprint $blueprint) => $blueprint->options(), 12 | 'tabs' => fn (SiteBlueprint $blueprint) => $blueprint->tabs(), 13 | 'title' => fn (SiteBlueprint $blueprint) => $blueprint->title(), 14 | ], 15 | 'type' => SiteBlueprint::class, 16 | 'views' => [], 17 | ]; 18 | -------------------------------------------------------------------------------- /kirby/config/api/models/Translation.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'author' => fn (Translation $translation) => $translation->author(), 11 | 'data' => fn (Translation $translation) => $translation->dataWithFallback(), 12 | 'direction' => fn (Translation $translation) => $translation->direction(), 13 | 'id' => fn (Translation $translation) => $translation->id(), 14 | 'name' => fn (Translation $translation) => $translation->name(), 15 | ], 16 | 'type' => Translation::class, 17 | 'views' => [ 18 | 'compact' => [ 19 | 'direction', 20 | 'id', 21 | 'name' 22 | ] 23 | ] 24 | ]; 25 | -------------------------------------------------------------------------------- /kirby/config/api/models/UserBlueprint.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'name' => fn (UserBlueprint $blueprint) => $blueprint->name(), 11 | 'options' => fn (UserBlueprint $blueprint) => $blueprint->options(), 12 | 'tabs' => fn (UserBlueprint $blueprint) => $blueprint->tabs(), 13 | 'title' => fn (UserBlueprint $blueprint) => $blueprint->title(), 14 | ], 15 | 'type' => UserBlueprint::class, 16 | 'views' => [], 17 | ]; 18 | -------------------------------------------------------------------------------- /kirby/config/api/routes.php: -------------------------------------------------------------------------------- 1 | option('languages', false) !== false) { 22 | $routes = array_merge( 23 | $routes, 24 | include __DIR__ . '/routes/languages.php' 25 | ); 26 | } 27 | 28 | return $routes; 29 | }; 30 | -------------------------------------------------------------------------------- /kirby/config/api/routes/kql.php: -------------------------------------------------------------------------------- 1 | function ($kirby) { 6 | return [ 7 | [ 8 | 'pattern' => 'query', 9 | 'method' => 'POST|GET', 10 | 'auth' => $kirby->option('kql.auth') !== false, 11 | 'action' => function () use ($kirby) { 12 | $kql = '\Kirby\Kql\Kql'; 13 | 14 | if (class_exists($kql) === false) { 15 | return [ 16 | 'code' => 500, 17 | 'status' => 'error', 18 | 'message' => 'KQL plugin is not installed', 19 | ]; 20 | } 21 | 22 | $input = $kirby->request()->get(); 23 | $result = $kql::run($input); 24 | 25 | return [ 26 | 'code' => 200, 27 | 'result' => $result, 28 | 'status' => 'ok', 29 | ]; 30 | } 31 | ] 32 | ]; 33 | } 34 | ]; 35 | // @codeCoverageIgnoreEnd 36 | -------------------------------------------------------------------------------- /kirby/config/api/routes/languages.php: -------------------------------------------------------------------------------- 1 | 'languages', 9 | 'method' => 'GET', 10 | 'action' => function () { 11 | return $this->kirby()->languages(); 12 | } 13 | ], 14 | [ 15 | 'pattern' => 'languages', 16 | 'method' => 'POST', 17 | 'action' => function () { 18 | return $this->kirby()->languages()->create($this->requestBody()); 19 | } 20 | ], 21 | [ 22 | 'pattern' => 'languages/(:any)', 23 | 'method' => 'GET', 24 | 'action' => function (string $code) { 25 | return $this->kirby()->languages()->find($code); 26 | } 27 | ], 28 | [ 29 | 'pattern' => 'languages/(:any)', 30 | 'method' => 'PATCH', 31 | 'action' => function (string $code) { 32 | return $this->kirby()->languages()->find($code)?->update($this->requestBody()); 33 | } 34 | ], 35 | [ 36 | 'pattern' => 'languages/(:any)', 37 | 'method' => 'DELETE', 38 | 'action' => function (string $code) { 39 | return $this->kirby()->languages()->find($code)?->delete(); 40 | } 41 | ] 42 | ]; 43 | -------------------------------------------------------------------------------- /kirby/config/api/routes/roles.php: -------------------------------------------------------------------------------- 1 | 'roles', 9 | 'method' => 'GET', 10 | 'action' => function () { 11 | $kirby = $this->kirby(); 12 | 13 | return match ($kirby->request()->get('canBe')) { 14 | 'changed' => $kirby->roles()->canBeChanged(), 15 | 'created' => $kirby->roles()->canBeCreated(), 16 | default => $kirby->roles() 17 | }; 18 | } 19 | ], 20 | [ 21 | 'pattern' => 'roles/(:any)', 22 | 'method' => 'GET', 23 | 'action' => function (string $name) { 24 | return $this->kirby()->roles()->find($name); 25 | } 26 | ] 27 | ]; 28 | -------------------------------------------------------------------------------- /kirby/config/api/routes/translations.php: -------------------------------------------------------------------------------- 1 | 'translations', 9 | 'method' => 'GET', 10 | 'auth' => false, 11 | 'action' => function () { 12 | return $this->kirby()->translations(); 13 | } 14 | ], 15 | [ 16 | 'pattern' => 'translations/(:any)', 17 | 'method' => 'GET', 18 | 'auth' => false, 19 | 'action' => function (string $code) { 20 | return $this->kirby()->translations()->find($code); 21 | } 22 | ] 23 | 24 | ]; 25 | -------------------------------------------------------------------------------- /kirby/config/areas/account.php: -------------------------------------------------------------------------------- 1 | 'account', 8 | 'label' => I18n::translate('view.account'), 9 | 'search' => 'users', 10 | 'dialogs' => require __DIR__ . '/account/dialogs.php', 11 | 'drawers' => require __DIR__ . '/account/drawers.php', 12 | 'dropdowns' => require __DIR__ . '/account/dropdowns.php', 13 | 'views' => require __DIR__ . '/account/views.php' 14 | ]; 15 | }; 16 | -------------------------------------------------------------------------------- /kirby/config/areas/account/drawers.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'pattern' => '(account)/files/(:any)/fields/(:any)/(:all?)', 9 | 'load' => $drawers['user.fields']['load'], 10 | 'submit' => $drawers['user.fields']['submit'] 11 | ], 12 | 13 | // account file fields drawers 14 | 'account.file.fields' => [ 15 | 'pattern' => '(account)/files/(:any)/fields/(:any)/(:all?)', 16 | 'load' => $drawers['user.file.fields']['load'], 17 | 'submit' => $drawers['user.file.fields']['submit'] 18 | ], 19 | ]; 20 | -------------------------------------------------------------------------------- /kirby/config/areas/account/dropdowns.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'pattern' => '(account)', 8 | 'options' => $dropdowns['user']['options'] 9 | ], 10 | 'account.file' => [ 11 | 'pattern' => '(account)/files/(:any)', 12 | 'options' => $dropdowns['user.file']['options'] 13 | ], 14 | ]; 15 | -------------------------------------------------------------------------------- /kirby/config/areas/account/views.php: -------------------------------------------------------------------------------- 1 | [ 9 | 'pattern' => 'account', 10 | 'action' => fn () => [ 11 | 'component' => 'k-account-view', 12 | 'props' => App::instance()->user()->panel()->props(), 13 | ], 14 | ], 15 | 'account.file' => [ 16 | 'pattern' => 'account/files/(:any)', 17 | 'action' => function (string $filename) { 18 | return Find::file('account', $filename)->panel()->view(); 19 | } 20 | ], 21 | 'account.password' => [ 22 | 'pattern' => 'reset-password', 23 | 'action' => fn () => [ 24 | 'component' => 'k-reset-password-view', 25 | 'breadcrumb' => [ 26 | [ 27 | 'label' => I18n::translate('view.resetPassword') 28 | ] 29 | ] 30 | ] 31 | ] 32 | ]; 33 | -------------------------------------------------------------------------------- /kirby/config/areas/files/dropdowns.php: -------------------------------------------------------------------------------- 1 | function (string $parent, string $filename) { 7 | return Find::file($parent, $filename)->panel()->dropdown(); 8 | } 9 | ]; 10 | -------------------------------------------------------------------------------- /kirby/config/areas/lab.php: -------------------------------------------------------------------------------- 1 | 'lab', 6 | 'label' => 'Lab', 7 | 'menu' => false, 8 | 'drawers' => require __DIR__ . '/lab/drawers.php', 9 | 'views' => require __DIR__ . '/lab/views.php' 10 | ]; 11 | }; 12 | -------------------------------------------------------------------------------- /kirby/config/areas/lab/drawers.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'pattern' => 'lab/docs/(:any)', 8 | 'load' => function (string $component) { 9 | if (Docs::installed() === false) { 10 | return [ 11 | 'component' => 'k-text-drawer', 12 | 'props' => [ 13 | 'text' => 'The UI docs are not installed.' 14 | ] 15 | ]; 16 | } 17 | 18 | $docs = new Docs($component); 19 | 20 | return [ 21 | 'component' => 'k-lab-docs-drawer', 22 | 'props' => [ 23 | 'icon' => 'book', 24 | 'title' => $component, 25 | 'docs' => $docs->toArray() 26 | ] 27 | ]; 28 | }, 29 | ], 30 | ]; 31 | -------------------------------------------------------------------------------- /kirby/config/areas/languages.php: -------------------------------------------------------------------------------- 1 | 'translate', 8 | 'label' => I18n::translate('view.languages'), 9 | 'menu' => true, 10 | 'dialogs' => require __DIR__ . '/languages/dialogs.php', 11 | 'views' => require __DIR__ . '/languages/views.php' 12 | ]; 13 | }; 14 | -------------------------------------------------------------------------------- /kirby/config/areas/logout.php: -------------------------------------------------------------------------------- 1 | 'user', 9 | 'label' => I18n::translate('logout'), 10 | 'views' => [ 11 | 'logout' => [ 12 | 'pattern' => 'logout', 13 | 'auth' => false, 14 | 'action' => function () use ($kirby) { 15 | $kirby->auth()->logout(); 16 | Panel::go('login'); 17 | }, 18 | ] 19 | ] 20 | ]; 21 | }; 22 | -------------------------------------------------------------------------------- /kirby/config/areas/search.php: -------------------------------------------------------------------------------- 1 | 'search', 8 | 'label' => I18n::translate('search'), 9 | 'views' => require __DIR__ . '/search/views.php' 10 | ]; 11 | }; 12 | -------------------------------------------------------------------------------- /kirby/config/areas/search/views.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'pattern' => 'search', 8 | 'action' => function () { 9 | return [ 10 | 'component' => 'k-search-view', 11 | 'props' => [ 12 | 'type' => App::instance()->request()->get('type'), 13 | ] 14 | ]; 15 | } 16 | ], 17 | ]; 18 | -------------------------------------------------------------------------------- /kirby/config/areas/site.php: -------------------------------------------------------------------------------- 1 | site()->blueprint(); 7 | 8 | return [ 9 | 'breadcrumbLabel' => function () use ($kirby) { 10 | return $kirby->site()->title()->or(I18n::translate('view.site'))->toString(); 11 | }, 12 | 'icon' => $blueprint->icon() ?? 'home', 13 | 'label' => $blueprint->title() ?? I18n::translate('view.site'), 14 | 'menu' => true, 15 | 'dialogs' => require __DIR__ . '/site/dialogs.php', 16 | 'drawers' => require __DIR__ . '/site/drawers.php', 17 | 'dropdowns' => require __DIR__ . '/site/dropdowns.php', 18 | 'requests' => require __DIR__ . '/site/requests.php', 19 | 'searches' => require __DIR__ . '/site/searches.php', 20 | 'views' => require __DIR__ . '/site/views.php', 21 | ]; 22 | }; 23 | -------------------------------------------------------------------------------- /kirby/config/areas/site/drawers.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'pattern' => '(pages/.*?)/fields/(:any)/(:all?)', 9 | 'load' => $fields['model']['load'], 10 | 'submit' => $fields['model']['submit'] 11 | ], 12 | 13 | // page file field drawers 14 | 'page.file.fields' => [ 15 | 'pattern' => '(pages/.*?)/files/(:any)/fields/(:any)/(:all?)', 16 | 'load' => $fields['file']['load'], 17 | 'submit' => $fields['file']['submit'], 18 | ], 19 | 20 | // site field drawers 21 | 'site.fields' => [ 22 | 'pattern' => '(site)/fields/(:any)/(:all?)', 23 | 'load' => $fields['model']['load'], 24 | 'submit' => $fields['model']['submit'], 25 | ], 26 | 27 | // site file field drawers 28 | 'site.file.fields' => [ 29 | 'pattern' => '(site)/files/(:any)/fields/(:any)/(:all?)', 30 | 'load' => $fields['file']['load'], 31 | 'submit' => $fields['file']['submit'], 32 | ], 33 | ]; 34 | -------------------------------------------------------------------------------- /kirby/config/areas/site/dropdowns.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'pattern' => 'pages/(:any)', 9 | 'options' => function (string $path) { 10 | return Find::page($path)->panel()->dropdown(); 11 | } 12 | ], 13 | 'page.file' => [ 14 | 'pattern' => '(pages/.*?)/files/(:any)', 15 | 'options' => $files['file'] 16 | ], 17 | 'site.file' => [ 18 | 'pattern' => '(site)/files/(:any)', 19 | 'options' => $files['file'] 20 | ] 21 | ]; 22 | -------------------------------------------------------------------------------- /kirby/config/areas/site/views.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'pattern' => 'pages/(:any)', 9 | 'action' => fn (string $path) => Find::page($path)->panel()->view() 10 | ], 11 | 'page.file' => [ 12 | 'pattern' => 'pages/(:any)/files/(:any)', 13 | 'action' => function (string $id, string $filename) { 14 | return Find::file('pages/' . $id, $filename)->panel()->view(); 15 | } 16 | ], 17 | 'site' => [ 18 | 'pattern' => 'site', 19 | 'action' => fn () => App::instance()->site()->panel()->view() 20 | ], 21 | 'site.file' => [ 22 | 'pattern' => 'site/files/(:any)', 23 | 'action' => function (string $filename) { 24 | return Find::file('site', $filename)->panel()->view(); 25 | } 26 | ], 27 | ]; 28 | -------------------------------------------------------------------------------- /kirby/config/areas/system.php: -------------------------------------------------------------------------------- 1 | 'settings', 8 | 'label' => I18n::translate('view.system'), 9 | 'menu' => true, 10 | 'dialogs' => require __DIR__ . '/system/dialogs.php', 11 | 'views' => require __DIR__ . '/system/views.php' 12 | ]; 13 | }; 14 | -------------------------------------------------------------------------------- /kirby/config/areas/users.php: -------------------------------------------------------------------------------- 1 | 'users', 8 | 'label' => I18n::translate('view.users'), 9 | 'search' => 'users', 10 | 'menu' => true, 11 | 'dialogs' => require __DIR__ . '/users/dialogs.php', 12 | 'drawers' => require __DIR__ . '/users/drawers.php', 13 | 'dropdowns' => require __DIR__ . '/users/dropdowns.php', 14 | 'searches' => require __DIR__ . '/users/searches.php', 15 | 'views' => require __DIR__ . '/users/views.php' 16 | ]; 17 | }; 18 | -------------------------------------------------------------------------------- /kirby/config/areas/users/drawers.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'pattern' => '(users/.*?)/fields/(:any)/(:all?)', 9 | 'load' => $fields['model']['load'], 10 | 'submit' => $fields['model']['submit'] 11 | ], 12 | // user file fields drawers 13 | 'user.file.fields' => [ 14 | 'pattern' => '(users/.*?)/files/(:any)/fields/(:any)/(:all?)', 15 | 'load' => $fields['file']['load'], 16 | 'submit' => $fields['file']['submit'] 17 | ], 18 | ]; 19 | -------------------------------------------------------------------------------- /kirby/config/areas/users/dropdowns.php: -------------------------------------------------------------------------------- 1 | [ 9 | 'pattern' => 'users/(:any)', 10 | 'options' => function (string $id) { 11 | return Find::user($id)->panel()->dropdown(); 12 | } 13 | ], 14 | 'user.file' => [ 15 | 'pattern' => '(users/.*?)/files/(:any)', 16 | 'options' => $files['file'] 17 | ] 18 | ]; 19 | -------------------------------------------------------------------------------- /kirby/config/areas/users/searches.php: -------------------------------------------------------------------------------- 1 | [ 9 | 'label' => I18n::translate('users'), 10 | 'icon' => 'users', 11 | 'query' => function (string|null $query, int $limit, int $page) { 12 | $kirby = App::instance(); 13 | $users = $kirby->users() 14 | ->search($query) 15 | ->paginate($limit, $page); 16 | 17 | return [ 18 | 'results' => $users->values(fn ($user) => [ 19 | 'image' => $user->panel()->image(), 20 | 'text' => Escape::html($user->username()), 21 | 'link' => $user->panel()->url(true), 22 | 'info' => Escape::html($user->role()->title()), 23 | 'uuid' => $user->uuid()->toString(), 24 | ]), 25 | 'pagination' => $users->pagination()->toArray() 26 | ]; 27 | } 28 | ] 29 | ]; 30 | -------------------------------------------------------------------------------- /kirby/config/blocks/code/code.php: -------------------------------------------------------------------------------- 1 | 2 |
code()->html(false) ?>
3 | -------------------------------------------------------------------------------- /kirby/config/blocks/gallery/gallery.php: -------------------------------------------------------------------------------- 1 | caption(); 4 | $crop = $block->crop()->isTrue(); 5 | $ratio = $block->ratio()->or('auto'); 6 | ?> 7 | $ratio, 'data-crop' => $crop], null, ' ') ?>> 8 | 15 | isNotEmpty()): ?> 16 |
17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /kirby/config/blocks/gallery/gallery.yml: -------------------------------------------------------------------------------- 1 | name: field.blocks.gallery.name 2 | icon: dashboard 3 | preview: gallery 4 | fields: 5 | images: 6 | label: field.blocks.gallery.images.label 7 | type: files 8 | query: model.images 9 | multiple: true 10 | layout: cards 11 | size: small 12 | empty: field.blocks.gallery.images.empty 13 | uploads: 14 | template: blocks/image 15 | image: 16 | ratio: 1/1 17 | caption: 18 | label: field.blocks.image.caption 19 | type: writer 20 | icon: text 21 | inline: true 22 | ratio: 23 | label: field.blocks.image.ratio 24 | type: select 25 | placeholder: Auto 26 | width: 1/2 27 | options: 28 | 1/1: "1:1" 29 | 16/9: "16:9" 30 | 10/8: "10:8" 31 | 21/9: "21:9" 32 | 7/5: "7:5" 33 | 4/3: "4:3" 34 | 5/3: "5:3" 35 | 3/2: "3:2" 36 | 3/1: "3:1" 37 | crop: 38 | label: field.blocks.image.crop 39 | type: toggle 40 | width: 1/2 41 | -------------------------------------------------------------------------------- /kirby/config/blocks/heading/heading.php: -------------------------------------------------------------------------------- 1 | 2 | <level()->or('h2') ?>>text() ?>> 3 | -------------------------------------------------------------------------------- /kirby/config/blocks/heading/heading.yml: -------------------------------------------------------------------------------- 1 | name: field.blocks.heading.name 2 | icon: title 3 | wysiwyg: true 4 | preview: heading 5 | fields: 6 | level: 7 | label: field.blocks.heading.level 8 | type: toggles 9 | empty: false 10 | default: "h2" 11 | labels: false 12 | options: 13 | - value: h1 14 | icon: h1 15 | text: H1 16 | - value: h2 17 | icon: h2 18 | text: H2 19 | - value: h3 20 | icon: h3 21 | text: H3 22 | - value: h4 23 | icon: h4 24 | text: H4 25 | - value: h5 26 | icon: h5 27 | text: H5 28 | - value: h6 29 | icon: h6 30 | text: H6 31 | text: 32 | label: field.blocks.heading.text 33 | type: writer 34 | inline: true 35 | placeholder: field.blocks.heading.placeholder 36 | -------------------------------------------------------------------------------- /kirby/config/blocks/image/image.php: -------------------------------------------------------------------------------- 1 | alt(); 5 | $caption = $block->caption(); 6 | $crop = $block->crop()->isTrue(); 7 | $link = $block->link(); 8 | $ratio = $block->ratio()->or('auto'); 9 | $src = null; 10 | 11 | if ($block->location() == 'web') { 12 | $src = $block->src()->esc(); 13 | } elseif ($image = $block->image()->toFile()) { 14 | $alt = $alt->or($image->alt()); 15 | $src = $image->url(); 16 | } 17 | 18 | ?> 19 | 20 | $ratio, 'data-crop' => $crop], null, ' ') ?>> 21 | isNotEmpty()): ?> 22 | 23 | <?= $alt->esc() ?> 24 | 25 | 26 | <?= $alt->esc() ?> 27 | 28 | 29 | isNotEmpty()): ?> 30 |
31 | 32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /kirby/config/blocks/line/line.php: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /kirby/config/blocks/line/line.yml: -------------------------------------------------------------------------------- 1 | name: field.blocks.line.name 2 | icon: divider 3 | preview: line 4 | wysiwyg: true 5 | -------------------------------------------------------------------------------- /kirby/config/blocks/list/list.php: -------------------------------------------------------------------------------- 1 | 2 | text(); 3 | -------------------------------------------------------------------------------- /kirby/config/blocks/list/list.yml: -------------------------------------------------------------------------------- 1 | name: field.blocks.list.name 2 | icon: list-bullet 3 | wysiwyg: true 4 | preview: list 5 | fields: 6 | text: 7 | label: field.blocks.list.name 8 | type: list 9 | -------------------------------------------------------------------------------- /kirby/config/blocks/markdown/markdown.php: -------------------------------------------------------------------------------- 1 | 2 | text()->kt(); 3 | -------------------------------------------------------------------------------- /kirby/config/blocks/markdown/markdown.yml: -------------------------------------------------------------------------------- 1 | name: field.blocks.markdown.name 2 | icon: markdown 3 | preview: markdown 4 | wysiwyg: true 5 | fields: 6 | text: 7 | label: field.blocks.markdown.label 8 | placeholder: field.blocks.markdown.placeholder 9 | type: textarea 10 | buttons: false 11 | font: monospace 12 | -------------------------------------------------------------------------------- /kirby/config/blocks/quote/quote.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | text() ?> 4 | citation()->isNotEmpty()): ?> 5 |
6 | citation() ?> 7 |
8 | 9 |
10 | -------------------------------------------------------------------------------- /kirby/config/blocks/quote/quote.yml: -------------------------------------------------------------------------------- 1 | name: field.blocks.quote.name 2 | icon: quote 3 | wysiwyg: true 4 | preview: quote 5 | fields: 6 | text: 7 | label: field.blocks.quote.text.label 8 | placeholder: field.blocks.quote.text.placeholder 9 | type: writer 10 | inline: true 11 | icon: quote 12 | citation: 13 | label: field.blocks.quote.citation.label 14 | placeholder: field.blocks.quote.citation.placeholder 15 | type: writer 16 | inline: true 17 | icon: user 18 | -------------------------------------------------------------------------------- /kirby/config/blocks/table/table.yml: -------------------------------------------------------------------------------- 1 | name: Table 2 | icon: menu 3 | preview: table 4 | -------------------------------------------------------------------------------- /kirby/config/blocks/text/text.php: -------------------------------------------------------------------------------- 1 | 2 | text(); 3 | -------------------------------------------------------------------------------- /kirby/config/blocks/text/text.yml: -------------------------------------------------------------------------------- 1 | name: field.blocks.text.name 2 | icon: text 3 | wysiwyg: true 4 | preview: text 5 | fields: 6 | text: 7 | type: writer 8 | nodes: false 9 | placeholder: field.blocks.text.placeholder 10 | -------------------------------------------------------------------------------- /kirby/config/blocks/video/video.php: -------------------------------------------------------------------------------- 1 | caption(); 6 | 7 | if ( 8 | $block->location() == 'kirby' && 9 | $video = $block->video()->toFile() 10 | ) { 11 | $url = $video->url(); 12 | $attrs = array_filter([ 13 | 'autoplay' => $block->autoplay()->toBool(), 14 | 'controls' => $block->controls()->toBool(), 15 | 'loop' => $block->loop()->toBool(), 16 | 'muted' => $block->muted()->toBool() || $block->autoplay()->toBool(), 17 | 'playsinline' => $block->autoplay()->toBool(), 18 | 'poster' => $block->poster()->toFile()?->url(), 19 | 'preload' => $block->preload()->value(), 20 | ]); 21 | } else { 22 | $url = $block->url(); 23 | } 24 | ?> 25 | 26 |
27 | 28 | isNotEmpty()): ?> 29 |
30 | 31 |
32 | 33 | -------------------------------------------------------------------------------- /kirby/config/fields/email.php: -------------------------------------------------------------------------------- 1 | 'text', 7 | 'props' => [ 8 | /** 9 | * Unset inherited props 10 | */ 11 | 'converter' => null, 12 | 'counter' => null, 13 | 14 | /** 15 | * Sets the HTML5 autocomplete mode for the input 16 | */ 17 | 'autocomplete' => function (string $autocomplete = 'email') { 18 | return $autocomplete; 19 | }, 20 | 21 | /** 22 | * Changes the email icon to something custom 23 | */ 24 | 'icon' => function (string $icon = 'email') { 25 | return $icon; 26 | }, 27 | 28 | /** 29 | * Custom placeholder text, when the field is empty. 30 | */ 31 | 'placeholder' => function ($value = null) { 32 | return I18n::translate($value, $value) ?? I18n::translate('email.placeholder'); 33 | } 34 | ], 35 | 'validations' => [ 36 | 'minlength', 37 | 'maxlength', 38 | 'email' 39 | ] 40 | ]; 41 | -------------------------------------------------------------------------------- /kirby/config/fields/gap.php: -------------------------------------------------------------------------------- 1 | false 5 | ]; 6 | -------------------------------------------------------------------------------- /kirby/config/fields/headline.php: -------------------------------------------------------------------------------- 1 | false, 5 | 'props' => [ 6 | /** 7 | * Unset inherited props 8 | */ 9 | 'after' => null, 10 | 'autofocus' => null, 11 | 'before' => null, 12 | 'default' => null, 13 | 'disabled' => null, 14 | 'icon' => null, 15 | 'placeholder' => null, 16 | 'required' => null, 17 | 'translate' => null 18 | ] 19 | ]; 20 | -------------------------------------------------------------------------------- /kirby/config/fields/hidden.php: -------------------------------------------------------------------------------- 1 | true 5 | ]; 6 | -------------------------------------------------------------------------------- /kirby/config/fields/info.php: -------------------------------------------------------------------------------- 1 | [ 7 | /** 8 | * Unset inherited props 9 | */ 10 | 'after' => null, 11 | 'autofocus' => null, 12 | 'before' => null, 13 | 'default' => null, 14 | 'disabled' => null, 15 | 'placeholder' => null, 16 | 'required' => null, 17 | 'translate' => null, 18 | 19 | /** 20 | * Text to be displayed 21 | */ 22 | 'text' => function ($value = null) { 23 | return I18n::translate($value, $value); 24 | }, 25 | 26 | /** 27 | * Change the design of the info box 28 | */ 29 | 'theme' => function (string|null $theme = null) { 30 | return $theme; 31 | } 32 | ], 33 | 'computed' => [ 34 | 'text' => function () { 35 | if ($text = $this->text) { 36 | $text = $this->model()->toSafeString($text); 37 | $text = $this->kirby()->kirbytext($text); 38 | return $text; 39 | } 40 | } 41 | ], 42 | 'save' => false, 43 | ]; 44 | -------------------------------------------------------------------------------- /kirby/config/fields/line.php: -------------------------------------------------------------------------------- 1 | false 5 | ]; 6 | -------------------------------------------------------------------------------- /kirby/config/fields/list.php: -------------------------------------------------------------------------------- 1 | [ 5 | /** 6 | * Sets the allowed HTML formats. Available formats: `bold`, `italic`, `underline`, `strike`, `code`, `link`. Activate them all by passing `true`. Deactivate them all by passing `false` 7 | */ 8 | 'marks' => function ($marks = true) { 9 | return $marks; 10 | }, 11 | /** 12 | * Sets the allowed nodes. Available nodes: `bulletList`, `orderedList` 13 | */ 14 | 'nodes' => function ($nodes = null) { 15 | return $nodes; 16 | } 17 | ], 18 | 'computed' => [ 19 | 'value' => function () { 20 | return trim($this->value ?? ''); 21 | } 22 | ] 23 | ]; 24 | -------------------------------------------------------------------------------- /kirby/config/fields/mixins/datetime.php: -------------------------------------------------------------------------------- 1 | [ 7 | /** 8 | * Defines a custom format that is used when the field is saved 9 | */ 10 | 'format' => function (string|null $format = null) { 11 | return $format; 12 | } 13 | ], 14 | 'methods' => [ 15 | 'toDatetime' => function ($value, string $format = 'Y-m-d H:i:s') { 16 | if ($date = Date::optional($value)) { 17 | if ($this->step) { 18 | $step = Date::stepConfig($this->step); 19 | $date->round($step['unit'], $step['size']); 20 | } 21 | 22 | return $date->format($format); 23 | } 24 | 25 | return null; 26 | } 27 | ], 28 | 'save' => function ($value) { 29 | if ($date = Date::optional($value)) { 30 | return $date->format($this->format); 31 | } 32 | 33 | return ''; 34 | }, 35 | ]; 36 | -------------------------------------------------------------------------------- /kirby/config/fields/mixins/filepicker.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'filepicker' => function (array $params = []) { 8 | // fetch the parent model 9 | $params['model'] = $this->model(); 10 | 11 | return (new FilePicker($params))->toArray(); 12 | } 13 | ] 14 | ]; 15 | -------------------------------------------------------------------------------- /kirby/config/fields/mixins/layout.php: -------------------------------------------------------------------------------- 1 | [ 5 | /** 6 | * Changes the layout of the selected entries. 7 | * Available layouts: `list`, `cardlets`, `cards` 8 | */ 9 | 'layout' => function (string $layout = 'list') { 10 | $layouts = ['list', 'cardlets', 'cards']; 11 | return in_array($layout, $layouts) ? $layout : 'list'; 12 | }, 13 | 14 | /** 15 | * Layout size for cards: `tiny`, `small`, `medium`, `large`, `huge`, `full` 16 | */ 17 | 'size' => function (string $size = 'auto') { 18 | return $size; 19 | }, 20 | ] 21 | ]; 22 | -------------------------------------------------------------------------------- /kirby/config/fields/mixins/min.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'min' => function () { 6 | // set min to at least 1, if required 7 | if ($this->required === true) { 8 | return $this->min ?? 1; 9 | } 10 | 11 | return $this->min; 12 | }, 13 | 'required' => function () { 14 | // set required to true if min is set 15 | if ($this->min) { 16 | return true; 17 | } 18 | 19 | return $this->required; 20 | } 21 | ] 22 | ]; 23 | -------------------------------------------------------------------------------- /kirby/config/fields/mixins/pagepicker.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'pagepicker' => function (array $params = []) { 8 | // inject the current model 9 | $params['model'] = $this->model(); 10 | 11 | return (new PagePicker($params))->toArray(); 12 | } 13 | ] 14 | ]; 15 | -------------------------------------------------------------------------------- /kirby/config/fields/mixins/userpicker.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'userpicker' => function (array $params = []) { 8 | $params['model'] = $this->model(); 9 | 10 | return (new UserPicker($params))->toArray(); 11 | } 12 | ] 13 | ]; 14 | -------------------------------------------------------------------------------- /kirby/config/fields/multiselect.php: -------------------------------------------------------------------------------- 1 | 'tags', 8 | 'props' => [ 9 | /** 10 | * If set to `all`, any type of input is accepted. If set to `options` only the predefined options are accepted as input. 11 | */ 12 | 'accept' => function ($value = 'options') { 13 | return V::in($value, ['all', 'options']) ? $value : 'all'; 14 | }, 15 | /** 16 | * Custom icon to replace the arrow down. 17 | */ 18 | 'icon' => function (string $icon = 'checklist') { 19 | return $icon; 20 | }, 21 | ], 22 | 'methods' => [ 23 | 'toValues' => function ($value) { 24 | if (is_null($value) === true) { 25 | return []; 26 | } 27 | 28 | if (is_array($value) === false) { 29 | $value = Str::split($value, $this->separator()); 30 | } 31 | 32 | return $this->sanitizeOptions($value); 33 | } 34 | ], 35 | ]; 36 | -------------------------------------------------------------------------------- /kirby/config/fields/radio.php: -------------------------------------------------------------------------------- 1 | ['options'], 5 | 'props' => [ 6 | /** 7 | * Unset inherited props 8 | */ 9 | 'after' => null, 10 | 'before' => null, 11 | 'icon' => null, 12 | 'placeholder' => null, 13 | 14 | /** 15 | * Arranges the radio buttons in the given number of columns 16 | */ 17 | 'columns' => function (int $columns = 1) { 18 | return $columns; 19 | }, 20 | ], 21 | 'computed' => [ 22 | 'default' => function () { 23 | return $this->sanitizeOption($this->default); 24 | }, 25 | 'value' => function () { 26 | return $this->sanitizeOption($this->value) ?? ''; 27 | } 28 | ] 29 | ]; 30 | -------------------------------------------------------------------------------- /kirby/config/fields/range.php: -------------------------------------------------------------------------------- 1 | 'number', 7 | 'props' => [ 8 | /** 9 | * Unset inherited props 10 | */ 11 | 'placeholder' => null, 12 | 13 | /** 14 | * The maximum value on the slider 15 | */ 16 | 'max' => function (float $max = 100) { 17 | return $max; 18 | }, 19 | /** 20 | * Enables/disables the tooltip and set the before and after values 21 | */ 22 | 'tooltip' => function ($tooltip = true) { 23 | if (is_array($tooltip) === true) { 24 | $after = $tooltip['after'] ?? null; 25 | $before = $tooltip['before'] ?? null; 26 | $tooltip['after'] = I18n::translate($after, $after); 27 | $tooltip['before'] = I18n::translate($before, $before); 28 | } 29 | 30 | return $tooltip; 31 | }, 32 | ] 33 | ]; 34 | -------------------------------------------------------------------------------- /kirby/config/fields/select.php: -------------------------------------------------------------------------------- 1 | 'radio', 8 | 'props' => [ 9 | /** 10 | * Unset inherited props 11 | */ 12 | 'columns' => null, 13 | 14 | /** 15 | * Custom icon to replace the arrow down. 16 | */ 17 | 'icon' => function (string|null $icon = null) { 18 | return $icon; 19 | }, 20 | /** 21 | * Custom placeholder string for empty option. 22 | */ 23 | 'placeholder' => function (string|array $placeholder = '—') { 24 | return I18n::translate($placeholder, $placeholder); 25 | }, 26 | ], 27 | 'methods' => [ 28 | 'getOptions' => function () { 29 | $props = FieldOptions::polyfill($this->props); 30 | 31 | // disable safe mode as the select field does not 32 | // render HTML for the option text 33 | $options = FieldOptions::factory($props['options'], false); 34 | 35 | return $options->render($this->model()); 36 | } 37 | ] 38 | ]; 39 | -------------------------------------------------------------------------------- /kirby/config/fields/tel.php: -------------------------------------------------------------------------------- 1 | 'text', 5 | 'props' => [ 6 | /** 7 | * Unset inherited props 8 | */ 9 | 'converter' => null, 10 | 'counter' => null, 11 | 'spellcheck' => null, 12 | 13 | /** 14 | * Sets the HTML5 autocomplete attribute 15 | */ 16 | 'autocomplete' => function (string $autocomplete = 'tel') { 17 | return $autocomplete; 18 | }, 19 | 20 | /** 21 | * Changes the phone icon 22 | */ 23 | 'icon' => function (string $icon = 'phone') { 24 | return $icon; 25 | } 26 | ] 27 | ]; 28 | -------------------------------------------------------------------------------- /kirby/config/fields/url.php: -------------------------------------------------------------------------------- 1 | 'text', 7 | 'props' => [ 8 | /** 9 | * Unset inherited props 10 | */ 11 | 'converter' => null, 12 | 'counter' => null, 13 | 'pattern' => null, 14 | 'spellcheck' => null, 15 | 16 | /** 17 | * Sets the HTML5 autocomplete attribute 18 | */ 19 | 'autocomplete' => function (string $autocomplete = 'url') { 20 | return $autocomplete; 21 | }, 22 | 23 | /** 24 | * Changes the link icon 25 | */ 26 | 'icon' => function (string $icon = 'url') { 27 | return $icon; 28 | }, 29 | 30 | /** 31 | * Sets custom placeholder text, when the field is empty 32 | */ 33 | 'placeholder' => function ($value = null) { 34 | return I18n::translate($value, $value) ?? 'https://example.com'; 35 | } 36 | ], 37 | 'validations' => [ 38 | 'minlength', 39 | 'maxlength', 40 | 'url' 41 | ], 42 | ]; 43 | -------------------------------------------------------------------------------- /kirby/config/presets/files.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'label' => $props['label'] ?? $props['headline'] ?? I18n::translate('files'), 9 | 'type' => 'files', 10 | 'layout' => $props['layout'] ?? 'cards', 11 | 'template' => $props['template'] ?? null, 12 | 'image' => $props['image'] ?? null, 13 | 'info' => '{{ file.dimensions }}' 14 | ] 15 | ]; 16 | 17 | // remove global options 18 | unset( 19 | $props['headline'], 20 | $props['label'], 21 | $props['layout'], 22 | $props['template'], 23 | $props['image'] 24 | ); 25 | 26 | return $props; 27 | }; 28 | -------------------------------------------------------------------------------- /kirby/config/sections/info.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'headline', 8 | ], 9 | 'props' => [ 10 | 'icon' => function (string|null $icon = null) { 11 | return $icon; 12 | }, 13 | 'text' => function ($text = null) { 14 | return I18n::translate($text, $text); 15 | }, 16 | 'theme' => function (string|null $theme = null) { 17 | return $theme; 18 | } 19 | ], 20 | 'computed' => [ 21 | 'text' => function () { 22 | if ($this->text) { 23 | $text = $this->model()->toSafeString($this->text); 24 | $text = $this->kirby()->kirbytext($text); 25 | return $text; 26 | } 27 | }, 28 | ], 29 | 'toArray' => function () { 30 | return [ 31 | 'icon' => $this->icon, 32 | 'label' => $this->headline, 33 | 'text' => $this->text, 34 | 'theme' => $this->theme 35 | ]; 36 | } 37 | ]; 38 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/details.php: -------------------------------------------------------------------------------- 1 | [ 7 | /** 8 | * Image options to control the source and look of preview 9 | */ 10 | 'image' => function ($image = null) { 11 | return $image ?? []; 12 | }, 13 | /** 14 | * Optional info text setup. Info text is shown on the right (lists, cardlets) or below (cards) the title. 15 | */ 16 | 'info' => function ($info = null) { 17 | return I18n::translate($info, $info); 18 | }, 19 | /** 20 | * Setup for the main text in the list or cards. By default this will display the title. 21 | */ 22 | 'text' => function ($text = '{{ model.title }}') { 23 | return I18n::translate($text, $text); 24 | } 25 | ], 26 | 'methods' => [ 27 | 'link' => function () { 28 | $modelLink = $this->model->panel()->url(true); 29 | $parentLink = $this->parent->panel()->url(true); 30 | 31 | if ($modelLink !== $parentLink) { 32 | return $parentLink; 33 | } 34 | } 35 | ] 36 | ]; 37 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/empty.php: -------------------------------------------------------------------------------- 1 | [ 7 | /** 8 | * Sets the text for the empty state box 9 | */ 10 | 'empty' => function ($empty = null) { 11 | return I18n::translate($empty, $empty); 12 | } 13 | ], 14 | 'computed' => [ 15 | 'empty' => function () { 16 | if ($this->empty) { 17 | return $this->model()->toSafeString($this->empty); 18 | } 19 | } 20 | ] 21 | ]; 22 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/headline.php: -------------------------------------------------------------------------------- 1 | [ 7 | /** 8 | * The headline for the section. This can be a simple string or a template with additional info from the parent page. 9 | * @deprecated 3.8.0 Use `label` instead 10 | */ 11 | 'headline' => function ($headline = null) { 12 | return I18n::translate($headline, $headline); 13 | }, 14 | /** 15 | * The label for the section. This can be a simple string or 16 | * a template with additional info from the parent page. 17 | * Replaces the `headline` prop. 18 | */ 19 | 'label' => function ($label = null) { 20 | return I18n::translate($label, $label); 21 | } 22 | ], 23 | 'computed' => [ 24 | 'headline' => function () { 25 | if ($this->label) { 26 | return $this->model()->toString($this->label); 27 | } 28 | 29 | if ($this->headline) { 30 | return $this->model()->toString($this->headline); 31 | } 32 | 33 | return ucfirst($this->name); 34 | } 35 | ] 36 | ]; 37 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/help.php: -------------------------------------------------------------------------------- 1 | [ 7 | /** 8 | * Sets the help text 9 | */ 10 | 'help' => function ($help = null) { 11 | return I18n::translate($help, $help); 12 | } 13 | ], 14 | 'computed' => [ 15 | 'help' => function () { 16 | if ($this->help) { 17 | $help = $this->model()->toSafeString($this->help); 18 | $help = $this->kirby()->kirbytext($help); 19 | return $help; 20 | } 21 | } 22 | ] 23 | ]; 24 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/max.php: -------------------------------------------------------------------------------- 1 | [ 5 | /** 6 | * Sets the maximum number of allowed entries in the section 7 | */ 8 | 'max' => function (int|null $max = null) { 9 | return $max; 10 | } 11 | ], 12 | 'methods' => [ 13 | 'isFull' => function () { 14 | if ($this->max) { 15 | return $this->total >= $this->max; 16 | } 17 | 18 | return false; 19 | }, 20 | 'validateMax' => function () { 21 | if ($this->max && $this->total > $this->max) { 22 | return false; 23 | } 24 | 25 | return true; 26 | } 27 | ] 28 | ]; 29 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/min.php: -------------------------------------------------------------------------------- 1 | [ 5 | /** 6 | * Sets the minimum number of required entries in the section 7 | */ 8 | 'min' => function (int|null $min = null) { 9 | return $min; 10 | } 11 | ], 12 | 'methods' => [ 13 | 'validateMin' => function () { 14 | if ($this->min && $this->min > $this->total) { 15 | return false; 16 | } 17 | 18 | return true; 19 | } 20 | ] 21 | ]; 22 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/pagination.php: -------------------------------------------------------------------------------- 1 | [ 8 | /** 9 | * Sets the number of items per page. If there are more items the pagination navigation will be shown at the bottom of the section. 10 | */ 11 | 'limit' => function (int $limit = 20) { 12 | return $limit; 13 | }, 14 | /** 15 | * Sets the default page for the pagination. 16 | */ 17 | 'page' => function (int|null $page = null) { 18 | return App::instance()->request()->get('page', $page); 19 | }, 20 | ], 21 | 'methods' => [ 22 | 'pagination' => function () { 23 | $pagination = new Pagination([ 24 | 'limit' => $this->limit, 25 | 'page' => $this->page, 26 | 'total' => $this->total 27 | ]); 28 | 29 | return [ 30 | 'limit' => $pagination->limit(), 31 | 'offset' => $pagination->offset(), 32 | 'page' => $pagination->page(), 33 | 'total' => $pagination->total(), 34 | ]; 35 | } 36 | ] 37 | ]; 38 | -------------------------------------------------------------------------------- /kirby/config/sections/mixins/search.php: -------------------------------------------------------------------------------- 1 | [ 7 | /** 8 | * Enable/disable the search in the sections 9 | */ 10 | 'search' => function (bool $search = false): bool { 11 | return $search; 12 | } 13 | ], 14 | 'methods' => [ 15 | 'searchterm' => function (): string|null { 16 | return App::instance()->request()->get('searchterm'); 17 | } 18 | ] 19 | ]; 20 | -------------------------------------------------------------------------------- /kirby/config/setup.php: -------------------------------------------------------------------------------- 1 | language() 16 | ); 17 | -------------------------------------------------------------------------------- /kirby/config/templates/emails/auth/password-reset.php: -------------------------------------------------------------------------------- 1 | language() 16 | ); 17 | -------------------------------------------------------------------------------- /kirby/i18n/rules/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "أ" : "a", 3 | "ب" : "b", 4 | "ت" : "t", 5 | "ث" : "th", 6 | "ج" : "g", 7 | "ح" : "h", 8 | "خ" : "kh", 9 | "د" : "d", 10 | "ذ" : "th", 11 | "ر" : "r", 12 | "ز" : "z", 13 | "س" : "s", 14 | "ش" : "sh", 15 | "ص" : "s", 16 | "ض" : "d", 17 | "ط" : "t", 18 | "ظ" : "th", 19 | "ع" : "aa", 20 | "غ" : "gh", 21 | "ف" : "f", 22 | "ق" : "k", 23 | "ك" : "k", 24 | "ل" : "l", 25 | "م" : "m", 26 | "ن" : "n", 27 | "ه" : "h", 28 | "و" : "o", 29 | "ي" : "y" 30 | } 31 | -------------------------------------------------------------------------------- /kirby/i18n/rules/az.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ə": "E", 3 | "Ç": "C", 4 | "Ğ": "G", 5 | "İ": "I", 6 | "Ş": "S", 7 | "Ö": "O", 8 | "Ü": "U", 9 | "ə": "e", 10 | "ç": "c", 11 | "ğ": "g", 12 | "ı": "i", 13 | "ş": "s", 14 | "ö": "o", 15 | "ü": "u" 16 | } 17 | -------------------------------------------------------------------------------- /kirby/i18n/rules/cs.json: -------------------------------------------------------------------------------- 1 | { 2 | "Č": "C", 3 | "Ď": "D", 4 | "Ě": "E", 5 | "Ň": "N", 6 | "Ř": "R", 7 | "Š": "S", 8 | "Ť": "T", 9 | "Ů": "U", 10 | "Ž": "Z", 11 | "č": "c", 12 | "ď": "d", 13 | "ě": "e", 14 | "ň": "n", 15 | "ř": "r", 16 | "š": "s", 17 | "ť": "t", 18 | "ů": "u", 19 | "ž": "z" 20 | } 21 | -------------------------------------------------------------------------------- /kirby/i18n/rules/da.json: -------------------------------------------------------------------------------- 1 | { 2 | "Æ": "Ae", 3 | "æ": "ae", 4 | "Ø": "Oe", 5 | "ø": "oe", 6 | "Å": "Aa", 7 | "å": "aa", 8 | "É": "E", 9 | "é": "e" 10 | } 11 | -------------------------------------------------------------------------------- /kirby/i18n/rules/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ä": "AE", 3 | "Ö": "OE", 4 | "Ü": "UE", 5 | "ß": "ss", 6 | "ä": "ae", 7 | "ö": "oe", 8 | "ü": "ue" 9 | } 10 | -------------------------------------------------------------------------------- /kirby/i18n/rules/eo.json: -------------------------------------------------------------------------------- 1 | { 2 | "ĉ": "cx", 3 | "ĝ": "gx", 4 | "ĥ": "hx", 5 | "ĵ": "jx", 6 | "ŝ": "sx", 7 | "ŭ": "ux", 8 | "Ĉ": "CX", 9 | "Ĝ": "GX", 10 | "Ĥ": "HX", 11 | "Ĵ": "JX", 12 | "Ŝ": "SX", 13 | "Ŭ": "UX" 14 | } 15 | -------------------------------------------------------------------------------- /kirby/i18n/rules/et.json: -------------------------------------------------------------------------------- 1 | { 2 | "Š": "S", 3 | "Ž": "Z", 4 | "Õ": "O", 5 | "Ä": "A", 6 | "Ö": "O", 7 | "Ü": "U", 8 | "š": "s", 9 | "ž": "z", 10 | "õ": "o", 11 | "ä": "a", 12 | "ö": "o", 13 | "ü": "u" 14 | } -------------------------------------------------------------------------------- /kirby/i18n/rules/fa.json: -------------------------------------------------------------------------------- 1 | { 2 | "آ" : "A", 3 | "ا" : "a", 4 | "ب" : "b", 5 | "پ" : "p", 6 | "ت" : "t", 7 | "ث" : "th", 8 | "ج" : "j", 9 | "چ" : "ch", 10 | "ح" : "h", 11 | "خ" : "kh", 12 | "د" : "d", 13 | "ذ" : "th", 14 | "ر" : "r", 15 | "ز" : "z", 16 | "ژ" : "zh", 17 | "س" : "s", 18 | "ش" : "sh", 19 | "ص" : "s", 20 | "ض" : "z", 21 | "ط" : "t", 22 | "ظ" : "z", 23 | "ع" : "a", 24 | "غ" : "gh", 25 | "ف" : "f", 26 | "ق" : "g", 27 | "ك" : "k", 28 | "ک" : "k", 29 | "گ" : "g", 30 | "ل" : "l", 31 | "م" : "m", 32 | "ن" : "n", 33 | "و" : "o", 34 | "ه" : "h", 35 | "ی" : "y" 36 | } 37 | -------------------------------------------------------------------------------- /kirby/i18n/rules/fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ä": "A", 3 | "Ö": "O", 4 | "ä": "a", 5 | "ö": "o" 6 | } 7 | -------------------------------------------------------------------------------- /kirby/i18n/rules/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "À": "A", 3 | "Â": "A", 4 | "Æ": "AE", 5 | "Ç": "C", 6 | "É": "E", 7 | "È": "E", 8 | "Ê": "E", 9 | "Ë": "E", 10 | "Ï": "I", 11 | "Î": "I", 12 | "Ô": "O", 13 | "Œ": "OE", 14 | "Ù": "U", 15 | "Û": "U", 16 | "Ü": "U", 17 | "à": "a", 18 | "â": "a", 19 | "æ": "ae", 20 | "ç": "c", 21 | "é": "e", 22 | "è": "e", 23 | "ê": "e", 24 | "ë": "e", 25 | "ï": "i", 26 | "î": "i", 27 | "ô": "o", 28 | "œ": "oe", 29 | "ù": "u", 30 | "û": "u", 31 | "ü": "u", 32 | "ÿ": "y", 33 | "Ÿ": "Y" 34 | } 35 | -------------------------------------------------------------------------------- /kirby/i18n/rules/hr.json: -------------------------------------------------------------------------------- 1 | { 2 | "Č": "C", 3 | "Ć": "C", 4 | "Ž": "Z", 5 | "Š": "S", 6 | "Đ": "Dj", 7 | "č": "c", 8 | "ć": "c", 9 | "ž": "z", 10 | "š": "s", 11 | "đ": "dj" 12 | } -------------------------------------------------------------------------------- /kirby/i18n/rules/hu.json: -------------------------------------------------------------------------------- 1 | { 2 | "Á": "a", 3 | "É": "e", 4 | "Í": "i", 5 | "Ó": "o", 6 | "Ö": "o", 7 | "Ő": "o", 8 | "Ú": "u", 9 | "Ü": "u", 10 | "Ű": "u", 11 | "á": "a", 12 | "é": "e", 13 | "í": "i", 14 | "ó": "o", 15 | "ö": "o", 16 | "ő": "o", 17 | "ú": "u", 18 | "ü": "u", 19 | "ű": "u" 20 | } 21 | -------------------------------------------------------------------------------- /kirby/i18n/rules/is_IS.json: -------------------------------------------------------------------------------- 1 | { 2 | "Æ": "Ae", 3 | "æ": "ae", 4 | "Ö": "O", 5 | "ö": "o", 6 | "Þ": "Th", 7 | "þ": "th", 8 | "Ð": "D", 9 | "ð": "d", 10 | "Á": "A", 11 | "á": "a", 12 | "É": "E", 13 | "é": "e", 14 | "Í": "I", 15 | "í": "i", 16 | "Ó": "O", 17 | "ó": "o", 18 | "Ú": "U", 19 | "ú": "u", 20 | "Ý": "Y", 21 | "ý": "y" 22 | } 23 | -------------------------------------------------------------------------------- /kirby/i18n/rules/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "À": "a", 3 | "È": "e", 4 | "Ì": "i", 5 | "Ò": "o", 6 | "Ù": "u", 7 | "à": "a", 8 | "é": "e", 9 | "è": "e", 10 | "ì": "i", 11 | "ò": "o", 12 | "ù": "u" 13 | } 14 | -------------------------------------------------------------------------------- /kirby/i18n/rules/ka.json: -------------------------------------------------------------------------------- 1 | { 2 | "ა": "a", 3 | "ბ": "b", 4 | "გ": "g", 5 | "დ": "d", 6 | "ე": "e", 7 | "ვ": "v", 8 | "ზ": "z", 9 | "თ": "t", 10 | "ი": "i", 11 | "კ": "k", 12 | "ლ": "l", 13 | "მ": "m", 14 | "ნ": "n", 15 | "ო": "o", 16 | "პ": "p", 17 | "ჟ": "zh", 18 | "რ": "r", 19 | "ს": "s", 20 | "ტ": "t", 21 | "უ": "u", 22 | "ფ": "f", 23 | "ქ": "k", 24 | "ღ": "gh", 25 | "ყ": "q", 26 | "შ": "sh", 27 | "ჩ": "ch", 28 | "ც": "ts", 29 | "ძ": "dz", 30 | "წ": "ts", 31 | "ჭ": "ch", 32 | "ხ": "kh", 33 | "ჯ": "j", 34 | "ჰ": "h" 35 | } 36 | -------------------------------------------------------------------------------- /kirby/i18n/rules/lt.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ą": "A", 3 | "Č": "C", 4 | "Ę": "E", 5 | "Ė": "E", 6 | "Į": "I", 7 | "Š": "S", 8 | "Ų": "U", 9 | "Ū": "U", 10 | "Ž": "Z", 11 | "ą": "a", 12 | "č": "c", 13 | "ę": "e", 14 | "ė": "e", 15 | "į": "i", 16 | "š": "s", 17 | "ų": "u", 18 | "ū": "u", 19 | "ž": "z" 20 | } 21 | -------------------------------------------------------------------------------- /kirby/i18n/rules/lv.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ā": "A", 3 | "Ē": "E", 4 | "Ģ": "G", 5 | "Ī": "I", 6 | "Ķ": "K", 7 | "Ļ": "L", 8 | "Ņ": "N", 9 | "Ū": "U", 10 | "ā": "a", 11 | "ē": "e", 12 | "ģ": "g", 13 | "ī": "i", 14 | "ķ": "k", 15 | "ļ": "l", 16 | "ņ": "n", 17 | "ū": "u" 18 | } 19 | -------------------------------------------------------------------------------- /kirby/i18n/rules/nb.json: -------------------------------------------------------------------------------- 1 | { 2 | "Æ": "AE", 3 | "Ø": "OE", 4 | "Å": "AA", 5 | "æ": "ae", 6 | "ø": "oe", 7 | "å": "aa" 8 | } 9 | -------------------------------------------------------------------------------- /kirby/i18n/rules/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ą": "A", 3 | "Ć": "C", 4 | "Ę": "E", 5 | "Ł": "L", 6 | "Ń": "N", 7 | "Ó": "O", 8 | "Ś": "S", 9 | "Ź": "Z", 10 | "Ż": "Z", 11 | "ą": "a", 12 | "ć": "c", 13 | "ę": "e", 14 | "ł": "l", 15 | "ń": "n", 16 | "ó": "o", 17 | "ś": "s", 18 | "ź": "z", 19 | "ż": "z" 20 | } 21 | -------------------------------------------------------------------------------- /kirby/i18n/rules/ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "ă": "a", 3 | "î": "i", 4 | "â": "a", 5 | "ş": "s", 6 | "ș": "s", 7 | "ţ": "t", 8 | "ț": "t", 9 | "Ă": "A", 10 | "Î": "I", 11 | "Â": "A", 12 | "Ş": "S", 13 | "Ș": "S", 14 | "Ţ": "T", 15 | "Ț": "T" 16 | } 17 | -------------------------------------------------------------------------------- /kirby/i18n/rules/sv_SE.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ä": "A", 3 | "Å": "a", 4 | "Ö": "O", 5 | "ä": "a", 6 | "å": "a", 7 | "ö": "o" 8 | } 9 | -------------------------------------------------------------------------------- /kirby/i18n/rules/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ç": "C", 3 | "Ğ": "G", 4 | "İ": "I", 5 | "Ş": "S", 6 | "Ö": "O", 7 | "Ü": "U", 8 | "ç": "c", 9 | "ğ": "g", 10 | "ı": "i", 11 | "ş": "s", 12 | "ö": "o", 13 | "ü": "u" 14 | } 15 | -------------------------------------------------------------------------------- /kirby/i18n/rules/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "Ґ": "G", 3 | "І": "I", 4 | "Ї": "Ji", 5 | "Є": "Ye", 6 | "ґ": "g", 7 | "і": "i", 8 | "ї": "ji", 9 | "є": "ye" 10 | } 11 | -------------------------------------------------------------------------------- /kirby/kirby.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Ux4q7LmQ5hfTYTtz3/a 3 | mohFJMWo/iCnxVcY84PZjLwWnT+G2DTKGaEWydB77TteJQnmsgtvO5734oj3Ga3r 4 | QCfwr2gxo/0WDEBq7C5HP+YNJiuZ/iD/tYV+gloF+Aaa3Mo8AK5DYH3dnjuyfHc1 5 | veIlYX1D2MXji2IRqdweAzVi1dfI4I3Ys8awhzv653vFLj5LvAtlwlYlmYeRwci7 6 | GkAOWw709CuKQNdPBXGFQQ/pEB5mnp8mI31j8og845u6v/Sk4+85gFORSufIRfnQ 7 | GFYrPOeavxfAWQGjh7JQjr/sbKSXaJ3nDlrYsOPIrC0Rwn/jsQPO7OLdVwkc9ofL 8 | GQIDAQAB 9 | -----END PUBLIC KEY----- 10 | -------------------------------------------------------------------------------- /kirby/panel/dist/apple-touch-icon-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/kirby/panel/dist/apple-touch-icon-dark.png -------------------------------------------------------------------------------- /kirby/panel/dist/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/kirby/panel/dist/apple-touch-icon.png -------------------------------------------------------------------------------- /kirby/panel/dist/favicon-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/kirby/panel/dist/favicon-dark.png -------------------------------------------------------------------------------- /kirby/panel/dist/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/kirby/panel/dist/favicon.png -------------------------------------------------------------------------------- /kirby/panel/dist/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /kirby/panel/dist/js/DocsView.min.js: -------------------------------------------------------------------------------- 1 | import{D as t}from"./Docs.min.js";import{n as s}from"./index.min.js";import"./vendor.min.js";const o=s({components:{"k-lab-docs":t},props:{component:String,docs:Object,lab:String},mounted(){},methods:{reloadDocs(){this.$panel.view.refresh()}}},(function(){var t=this,s=t._self._c;return s("k-panel-inside",{staticClass:"k-lab-docs-view"},[s("k-header",[t._v(" "+t._s(t.component)+" "),t.docs.github||t.lab?s("k-button-group",{attrs:{slot:"buttons"},slot:"buttons"},[t.lab?s("k-button",{attrs:{icon:"lab",text:"Lab examples",size:"sm",variant:"filled",link:"/lab/"+t.lab}}):t._e(),t.docs.github?s("k-button",{attrs:{icon:"github",size:"sm",variant:"filled",link:t.docs.github,target:"_blank"}}):t._e()],1):t._e()],1),s("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[]).exports;export{o as default}; 2 | -------------------------------------------------------------------------------- /kirby/panel/dist/js/IndexView.min.js: -------------------------------------------------------------------------------- 1 | import{n as e}from"./index.min.js";import"./vendor.min.js";const t=e({props:{categories:Array,info:String,tab:String}},(function(){var e=this,t=e._self._c;return t("k-panel-inside",{staticClass:"k-lab-index-view"},[t("k-header",[e._v("Lab")]),t("k-tabs",{attrs:{tab:e.tab,tabs:[{name:"examples",label:"Examples",link:"/lab"},{name:"docs",label:"Docs",link:"/lab/docs"}]}}),e.info?t("k-box",{attrs:{icon:"question",theme:"info",text:e.info,html:!0}}):e._e(),e._l(e.categories,(function(e){return t("k-section",{key:e.name,attrs:{headline:e.name}},[t("k-collection",{attrs:{items:e.examples,empty:{icon:e.icon,text:"Add examples to "+e.path}}})],1)}))],2)}),[]).exports;export{t as default}; 2 | -------------------------------------------------------------------------------- /kirby/router.php: -------------------------------------------------------------------------------- 1 | 10 | * @link https://getkirby.com 11 | * @copyright Bastian Allgeier 12 | * @license https://opensource.org/licenses/MIT 13 | * 14 | * // TODO: include in test coverage once blueprint refactoring is done 15 | * @codeCoverageIgnore 16 | */ 17 | class NodeIcon extends NodeString 18 | { 19 | public static function field() 20 | { 21 | $field = parent::field(); 22 | $field->id = 'icon'; 23 | $field->label->translations = ['en' => 'Icon']; 24 | 25 | return $field; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /kirby/src/Blueprint/NodeProperty.php: -------------------------------------------------------------------------------- 1 | 12 | * @link https://getkirby.com 13 | * @copyright Bastian Allgeier 14 | * @license https://opensource.org/licenses/MIT 15 | * 16 | * // TODO: include in test coverage once blueprint refactoring is done 17 | * @codeCoverageIgnore 18 | */ 19 | abstract class NodeProperty 20 | { 21 | abstract public static function factory($value = null): static|null; 22 | 23 | public function render(ModelWithContent $model) 24 | { 25 | return null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /kirby/src/Blueprint/NodeString.php: -------------------------------------------------------------------------------- 1 | 12 | * @link https://getkirby.com 13 | * @copyright Bastian Allgeier 14 | * @license https://opensource.org/licenses/MIT 15 | * 16 | * // TODO: include in test coverage once blueprint refactoring is done 17 | * @codeCoverageIgnore 18 | */ 19 | class NodeString extends NodeProperty 20 | { 21 | public function __construct( 22 | public string $value, 23 | ) { 24 | } 25 | 26 | public static function factory($value = null): static|null 27 | { 28 | if ($value === null) { 29 | return null; 30 | } 31 | 32 | return new static($value); 33 | } 34 | 35 | public function render(ModelWithContent $model): string|null 36 | { 37 | return $this->value; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /kirby/src/Blueprint/NodeText.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://opensource.org/licenses/MIT 16 | * 17 | * // TODO: include in test coverage once blueprint refactoring is done 18 | * @codeCoverageIgnore 19 | */ 20 | class NodeText extends NodeI18n 21 | { 22 | public function render(ModelWithContent $model): string|null 23 | { 24 | if ($text = parent::render($model)) { 25 | return $model->toSafeString($text); 26 | } 27 | 28 | return $text; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /kirby/src/Cms/FilePermissions.php: -------------------------------------------------------------------------------- 1 | 10 | * @link https://getkirby.com 11 | * @copyright Bastian Allgeier 12 | * @license https://getkirby.com/license 13 | */ 14 | class FilePermissions extends ModelPermissions 15 | { 16 | protected string $category = 'files'; 17 | 18 | protected function canChangeTemplate(): bool 19 | { 20 | if (count($this->model->blueprints()) <= 1) { 21 | return false; 22 | } 23 | 24 | return true; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /kirby/src/Cms/LayoutColumns.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://getkirby.com/license 14 | */ 15 | class LayoutColumns extends Items 16 | { 17 | public const ITEM_CLASS = LayoutColumn::class; 18 | 19 | /** 20 | * All registered layout columns methods 21 | */ 22 | public static array $methods = []; 23 | } 24 | -------------------------------------------------------------------------------- /kirby/src/Cms/NestCollection.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://getkirby.com/license 16 | */ 17 | class NestCollection extends BaseCollection 18 | { 19 | /** 20 | * Converts all objects in the collection 21 | * to an array. This can also take a callback 22 | * function to further modify the array result. 23 | */ 24 | public function toArray(Closure|null $map = null): array 25 | { 26 | return parent::toArray($map ?? fn ($object) => $object->toArray()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /kirby/src/Cms/NestObject.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://getkirby.com/license 16 | */ 17 | class NestObject extends Obj 18 | { 19 | /** 20 | * Converts the object to an array 21 | */ 22 | public function toArray(): array 23 | { 24 | $result = []; 25 | 26 | foreach ((array)$this as $key => $value) { 27 | if ($value instanceof Field) { 28 | $result[$key] = $value->value(); 29 | continue; 30 | } 31 | 32 | if ( 33 | is_object($value) === true && 34 | method_exists($value, 'toArray') 35 | ) { 36 | $result[$key] = $value->toArray(); 37 | continue; 38 | } 39 | 40 | $result[$key] = $value; 41 | } 42 | 43 | return $result; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /kirby/src/Cms/R.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://getkirby.com/license 16 | */ 17 | class R extends Facade 18 | { 19 | public static function instance(): Request 20 | { 21 | return App::instance()->request(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /kirby/src/Cms/Response.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://getkirby.com/license 14 | */ 15 | class Response extends \Kirby\Http\Response 16 | { 17 | /** 18 | * Adjusted redirect creation which 19 | * parses locations with the Url::to method 20 | * first. 21 | */ 22 | public static function redirect( 23 | string $location = '/', 24 | int $code = 302 25 | ): static { 26 | return parent::redirect(Url::to($location), $code); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /kirby/src/Cms/S.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://getkirby.com/license 16 | */ 17 | class S extends Facade 18 | { 19 | public static function instance(): Session 20 | { 21 | return App::instance()->session(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /kirby/src/Cms/SitePermissions.php: -------------------------------------------------------------------------------- 1 | 10 | * @link https://getkirby.com 11 | * @copyright Bastian Allgeier 12 | * @license https://getkirby.com/license 13 | */ 14 | class SitePermissions extends ModelPermissions 15 | { 16 | protected string $category = 'site'; 17 | } 18 | -------------------------------------------------------------------------------- /kirby/src/Cms/Visitor.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://getkirby.com/license 16 | */ 17 | class Visitor extends Facade 18 | { 19 | public static function instance(): BaseVisitor 20 | { 21 | return App::instance()->visitor(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /kirby/src/Exception/AuthException.php: -------------------------------------------------------------------------------- 1 | 12 | * @link https://getkirby.com 13 | * @copyright Bastian Allgeier 14 | * @license https://opensource.org/licenses/MIT 15 | */ 16 | class AuthException extends Exception 17 | { 18 | protected static string $defaultKey = 'auth'; 19 | protected static string $defaultFallback = 'Unauthenticated'; 20 | protected static int $defaultHttpCode = 401; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Exception/BadMethodCallException.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://opensource.org/licenses/MIT 14 | */ 15 | class BadMethodCallException extends Exception 16 | { 17 | protected static string $defaultKey = 'invalidMethod'; 18 | protected static string $defaultFallback = 'The method "{ method }" does not exist'; 19 | protected static int $defaultHttpCode = 400; 20 | protected static array $defaultData = ['method' => null]; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Exception/DuplicateException.php: -------------------------------------------------------------------------------- 1 | 12 | * @link https://getkirby.com 13 | * @copyright Bastian Allgeier 14 | * @license https://opensource.org/licenses/MIT 15 | */ 16 | class DuplicateException extends Exception 17 | { 18 | protected static string $defaultKey = 'duplicate'; 19 | protected static string $defaultFallback = 'The entry exists'; 20 | protected static int $defaultHttpCode = 400; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Exception/ErrorPageException.php: -------------------------------------------------------------------------------- 1 | 12 | * @link https://getkirby.com 13 | * @copyright Bastian Allgeier 14 | * @license https://opensource.org/licenses/MIT 15 | */ 16 | class ErrorPageException extends Exception 17 | { 18 | protected static string $defaultKey = 'errorPage'; 19 | protected static string $defaultFallback = 'Triggered error page'; 20 | protected static int $defaultHttpCode = 404; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Exception/InvalidArgumentException.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://opensource.org/licenses/MIT 14 | */ 15 | class InvalidArgumentException extends Exception 16 | { 17 | protected static string $defaultKey = 'invalidArgument'; 18 | protected static string $defaultFallback = 'Invalid argument "{ argument }" in method "{ method }"'; 19 | protected static int $defaultHttpCode = 400; 20 | protected static array $defaultData = ['argument' => null, 'method' => null]; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Exception/LogicException.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://opensource.org/licenses/MIT 14 | */ 15 | class LogicException extends Exception 16 | { 17 | protected static string $defaultKey = 'logic'; 18 | protected static string $defaultFallback = 'This task cannot be finished'; 19 | protected static int $defaultHttpCode = 400; 20 | } 21 | -------------------------------------------------------------------------------- /kirby/src/Exception/NotFoundException.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://opensource.org/licenses/MIT 14 | */ 15 | class NotFoundException extends Exception 16 | { 17 | protected static string $defaultKey = 'notFound'; 18 | protected static string $defaultFallback = 'Not found'; 19 | protected static int $defaultHttpCode = 404; 20 | } 21 | -------------------------------------------------------------------------------- /kirby/src/Exception/PermissionException.php: -------------------------------------------------------------------------------- 1 | 12 | * @link https://getkirby.com 13 | * @copyright Bastian Allgeier 14 | * @license https://opensource.org/licenses/MIT 15 | */ 16 | class PermissionException extends Exception 17 | { 18 | protected static string $defaultKey = 'permission'; 19 | protected static string $defaultFallback = 'You are not allowed to do this'; 20 | protected static int $defaultHttpCode = 403; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Form/Mixin/EmptyState.php: -------------------------------------------------------------------------------- 1 | empty = $this->i18n($empty); 12 | } 13 | 14 | public function empty(): string|null 15 | { 16 | return $this->stringTemplate($this->empty); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /kirby/src/Form/Mixin/Max.php: -------------------------------------------------------------------------------- 1 | max; 12 | } 13 | 14 | protected function setMax(int|null $max = null) 15 | { 16 | $this->max = $max; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /kirby/src/Form/Mixin/Min.php: -------------------------------------------------------------------------------- 1 | min; 12 | } 13 | 14 | protected function setMin(int|null $min = null) 15 | { 16 | $this->min = $min; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /kirby/src/Http/Exceptions/NextRouteException.php: -------------------------------------------------------------------------------- 1 | 10 | * @link https://getkirby.com 11 | * @copyright Bastian Allgeier 12 | * @license https://opensource.org/licenses/MIT 13 | */ 14 | class NextRouteException extends \Exception 15 | { 16 | } 17 | -------------------------------------------------------------------------------- /kirby/src/Http/Request/Auth/BearerAuth.php: -------------------------------------------------------------------------------- 1 | 12 | * @link https://getkirby.com 13 | * @copyright Bastian Allgeier 14 | * @license https://opensource.org/licenses/MIT 15 | */ 16 | class BearerAuth extends Auth 17 | { 18 | /** 19 | * Returns the authentication token 20 | */ 21 | public function token(): string 22 | { 23 | return $this->data; 24 | } 25 | 26 | /** 27 | * Returns the auth type 28 | */ 29 | public function type(): string 30 | { 31 | return 'bearer'; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /kirby/src/Http/Request/Auth/SessionAuth.php: -------------------------------------------------------------------------------- 1 | 14 | * @link https://getkirby.com 15 | * @copyright Bastian Allgeier 16 | * @license https://opensource.org/licenses/MIT 17 | */ 18 | class SessionAuth extends Auth 19 | { 20 | /** 21 | * Tries to return the session object 22 | */ 23 | public function session(): Session 24 | { 25 | return App::instance()->sessionHandler()->getManually($this->data); 26 | } 27 | 28 | /** 29 | * Returns the session token 30 | */ 31 | public function token(): string 32 | { 33 | return $this->data; 34 | } 35 | 36 | /** 37 | * Returns the authentication type 38 | */ 39 | public function type(): string 40 | { 41 | return 'session'; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /kirby/src/Panel/Drawer.php: -------------------------------------------------------------------------------- 1 | 14 | * @link https://getkirby.com 15 | * @copyright Bastian Allgeier 16 | * @license https://getkirby.com/license 17 | */ 18 | class Drawer extends Dialog 19 | { 20 | protected static string $key = '$drawer'; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Panel/Lab/Snippet.php: -------------------------------------------------------------------------------- 1 | 16 | * @link https://getkirby.com 17 | * @copyright Bastian Allgeier 18 | * @license https://getkirby.com/license 19 | */ 20 | class Snippet extends BaseSnippet 21 | { 22 | public static function root(): string 23 | { 24 | return __DIR__ . '/snippets'; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /kirby/src/Panel/Lab/Template.php: -------------------------------------------------------------------------------- 1 | 16 | * @link https://getkirby.com 17 | * @copyright Bastian Allgeier 18 | * @license https://getkirby.com/license 19 | */ 20 | class Template extends BaseTemplate 21 | { 22 | public function __construct( 23 | public string $file 24 | ) { 25 | parent::__construct( 26 | name: basename($this->file) 27 | ); 28 | } 29 | 30 | public function file(): string|null 31 | { 32 | return $this->file; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /kirby/src/Panel/Redirect.php: -------------------------------------------------------------------------------- 1 | 15 | * @link https://getkirby.com 16 | * @copyright Bastian Allgeier 17 | * @license https://getkirby.com/license 18 | */ 19 | class Redirect extends Exception 20 | { 21 | /** 22 | * Returns the HTTP code for the redirect 23 | */ 24 | public function code(): int 25 | { 26 | $codes = [301, 302, 303, 307, 308]; 27 | 28 | if (in_array($this->getCode(), $codes) === true) { 29 | return $this->getCode(); 30 | } 31 | 32 | return 302; 33 | } 34 | 35 | /** 36 | * Returns the URL for the redirect 37 | */ 38 | public function location(): string 39 | { 40 | return $this->getMessage(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /kirby/src/Panel/Request.php: -------------------------------------------------------------------------------- 1 | 10 | * @link https://getkirby.com 11 | * @copyright Bastian Allgeier 12 | * @license https://getkirby.com/license 13 | */ 14 | class Request 15 | { 16 | /** 17 | * Renders request responses 18 | */ 19 | public static function response($data, array $options = []): Response 20 | { 21 | $data = Json::responseData($data); 22 | return Panel::json($data, $data['code'] ?? 200); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /kirby/src/Panel/Search.php: -------------------------------------------------------------------------------- 1 | 15 | * @link https://getkirby.com 16 | * @copyright Bastian Allgeier 17 | * @license https://getkirby.com/license 18 | */ 19 | class Search extends Json 20 | { 21 | protected static string $key = '$search'; 22 | 23 | public static function response($data, array $options = []): Response 24 | { 25 | if ( 26 | is_array($data) === true && 27 | array_key_exists('results', $data) === false 28 | ) { 29 | $data = [ 30 | 'results' => $data, 31 | 'pagination' => [ 32 | 'page' => 1, 33 | 'limit' => $total = count($data), 34 | 'total' => $total 35 | ] 36 | ]; 37 | } 38 | 39 | return parent::response($data, $options); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /kirby/src/Toolkit/Config.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://opensource.org/licenses/MIT 14 | */ 15 | class Config extends Silo 16 | { 17 | public static array $data = []; 18 | } 19 | -------------------------------------------------------------------------------- /kirby/src/Toolkit/Facade.php: -------------------------------------------------------------------------------- 1 | 11 | * @link https://getkirby.com 12 | * @copyright Bastian Allgeier 13 | * @license https://opensource.org/licenses/MIT 14 | */ 15 | abstract class Facade 16 | { 17 | /** 18 | * Returns the instance that should be 19 | * available statically 20 | */ 21 | abstract public static function instance(); 22 | 23 | /** 24 | * Proxy for all public instance calls 25 | */ 26 | public static function __callStatic(string $method, array|null $args = null) 27 | { 28 | return static::instance()->$method(...$args); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /kirby/src/Toolkit/Tpl.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://opensource.org/licenses/MIT 16 | */ 17 | class Tpl 18 | { 19 | /** 20 | * Renders the template 21 | * 22 | * @throws Throwable 23 | */ 24 | public static function load( 25 | string|null $file = null, 26 | array $data = [] 27 | ): string { 28 | if ($file === null || is_file($file) === false) { 29 | return ''; 30 | } 31 | 32 | ob_start(); 33 | 34 | $exception = null; 35 | try { 36 | F::load($file, null, $data); 37 | } catch (Throwable $e) { 38 | $exception = $e; 39 | } 40 | 41 | $content = ob_get_contents(); 42 | ob_end_clean(); 43 | 44 | if ($exception !== null) { 45 | throw $exception; 46 | } 47 | 48 | return $content; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /kirby/src/Uuid/BlockUuid.php: -------------------------------------------------------------------------------- 1 | 17 | * @link https://getkirby.com 18 | * @copyright Bastian Allgeier 19 | * @license https://getkirby.com/license 20 | */ 21 | class BlockUuid extends FieldUuid 22 | { 23 | protected const TYPE = 'block'; 24 | protected const FIELD = 'blocks'; 25 | 26 | /** 27 | * @var \Kirby\Cms\Block|null 28 | */ 29 | public Identifiable|null $model = null; 30 | 31 | /** 32 | * Converts content field to a Blocks collection 33 | * @internal 34 | */ 35 | public static function fieldToCollection(Field $field): Blocks 36 | { 37 | return $field->toBlocks(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /kirby/src/Uuid/HasUuids.php: -------------------------------------------------------------------------------- 1 | 10 | * @link https://getkirby.com 11 | * @copyright Bastian Allgeier 12 | * @license https://getkirby.com/license 13 | */ 14 | trait HasUuids 15 | { 16 | /** 17 | * Find a single element by global UUID 18 | * @since 3.8.0 19 | */ 20 | protected function findByUuid( 21 | string $uuid, 22 | string|null $scheme = null 23 | ): Identifiable|null { 24 | // handle UUID shortcuts with a leading @ 25 | if ($scheme !== null && str_starts_with($uuid, '@') === true) { 26 | $uuid = $scheme . '://' . substr($uuid, 1); 27 | } 28 | 29 | if (Uuid::is($uuid, $scheme) === true) { 30 | // look up model by UUID while prioritizing 31 | // $this collection when searching 32 | return Uuid::for($uuid, $this)->model(); 33 | } 34 | 35 | return null; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /kirby/src/Uuid/Identifiable.php: -------------------------------------------------------------------------------- 1 | 13 | * @link https://getkirby.com 14 | * @copyright Bastian Allgeier 15 | * @license https://getkirby.com/license 16 | */ 17 | interface Identifiable 18 | { 19 | public function id(); 20 | public function uuid(): Uuid|null; 21 | } 22 | -------------------------------------------------------------------------------- /kirby/src/Uuid/StructureUuid.php: -------------------------------------------------------------------------------- 1 | 17 | * @link https://getkirby.com 18 | * @copyright Bastian Allgeier 19 | * @license https://getkirby.com/license 20 | */ 21 | class StructureUuid extends FieldUuid 22 | { 23 | protected const TYPE = 'struct'; 24 | protected const FIELD = 'structure'; 25 | 26 | /** 27 | * @var \Kirby\Cms\StructureObject|null 28 | */ 29 | public Identifiable|null $model = null; 30 | 31 | /** 32 | * Converts content field to a Structure collection 33 | * @internal 34 | */ 35 | public static function fieldToCollection(Field $field): Structure 36 | { 37 | return $field->toStructure(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /kirby/vendor/autoload.php: -------------------------------------------------------------------------------- 1 | =8.0", 7 | "ext-gd": "*", 8 | "league/color-extractor": "0.4.*" 9 | }, 10 | "authors": [ 11 | { 12 | "name": "Cory LaViska", 13 | "homepage": "http://www.abeautifulsite.net/", 14 | "role": "Developer" 15 | } 16 | ], 17 | "autoload": { 18 | "psr-0": { 19 | "claviska": "src/" 20 | } 21 | }, 22 | "require-dev": { 23 | "laravel/pint": "^1.5", 24 | "phpstan/phpstan": "^1.10" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /kirby/vendor/composer/autoload_files.php: -------------------------------------------------------------------------------- 1 | $vendorDir . '/symfony/deprecation-contracts/function.php', 10 | '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', 11 | 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', 12 | 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', 13 | '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', 14 | 'f864ae44e8154e5ff6f4eec32f46d37f' => $baseDir . '/config/setup.php', 15 | '87988fc7b1c1f093da22a1a3de972f3a' => $baseDir . '/config/helpers.php', 16 | ); 17 | -------------------------------------------------------------------------------- /kirby/vendor/composer/autoload_namespaces.php: -------------------------------------------------------------------------------- 1 | array($vendorDir . '/claviska/simpleimage/src'), 10 | 'Michelf' => array($vendorDir . '/michelf/php-smartypants'), 11 | ); 12 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Whoops\Exception; 8 | 9 | use ErrorException as BaseErrorException; 10 | 11 | /** 12 | * Wraps ErrorException; mostly used for typing (at least now) 13 | * to easily cleanup the stack trace of redundant info. 14 | */ 15 | class ErrorException extends BaseErrorException 16 | { 17 | } 18 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Whoops\Handler; 8 | 9 | use Whoops\Inspector\InspectorInterface; 10 | use Whoops\RunInterface; 11 | 12 | interface HandlerInterface 13 | { 14 | /** 15 | * @return int|null A handler may return nothing, or a Handler::HANDLE_* constant 16 | */ 17 | public function handle(); 18 | 19 | /** 20 | * @param RunInterface $run 21 | * @return void 22 | */ 23 | public function setRun(RunInterface $run); 24 | 25 | /** 26 | * @param \Throwable $exception 27 | * @return void 28 | */ 29 | public function setException($exception); 30 | 31 | /** 32 | * @param InspectorInterface $inspector 33 | * @return void 34 | */ 35 | public function setInspector(InspectorInterface $inspector); 36 | } 37 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Inspector/InspectorFactory.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Whoops\Inspector; 8 | 9 | use Whoops\Exception\Inspector; 10 | 11 | class InspectorFactory implements InspectorFactoryInterface 12 | { 13 | /** 14 | * @param \Throwable $exception 15 | * @return InspectorInterface 16 | */ 17 | public function create($exception) 18 | { 19 | return new Inspector($exception, $this); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Inspector/InspectorFactoryInterface.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Whoops\Inspector; 8 | 9 | interface InspectorFactoryInterface 10 | { 11 | /** 12 | * @param \Throwable $exception 13 | * @return InspectorInterface 14 | */ 15 | public function create($exception); 16 | } 17 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Resources/views/frames_container.html.php: -------------------------------------------------------------------------------- 1 |
2 | render($frame_list) ?> 3 |
-------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | Application frames (countIsApplication() ?>) 5 | 6 | 7 | All frames () 8 | 9 | 10 | 11 | Stack frames () 12 | 13 | 14 |
15 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Resources/views/header_outer.html.php: -------------------------------------------------------------------------------- 1 |
2 | render($header) ?> 3 |
4 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Resources/views/panel_details.html.php: -------------------------------------------------------------------------------- 1 | render($frame_code) ?> 2 | render($env_details) ?> -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Resources/views/panel_details_outer.html.php: -------------------------------------------------------------------------------- 1 |
2 | render($panel_details) ?> 3 |
-------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Resources/views/panel_left.html.php: -------------------------------------------------------------------------------- 1 | render($header_outer); 3 | $tpl->render($frames_description); 4 | $tpl->render($frames_container); 5 | -------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Resources/views/panel_left_outer.html.php: -------------------------------------------------------------------------------- 1 |
2 | render($panel_left) ?> 3 |
-------------------------------------------------------------------------------- /kirby/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Whoops\Util; 8 | 9 | /** 10 | * Used as output callable for Symfony\Component\VarDumper\Dumper\HtmlDumper::dump() 11 | * 12 | * @see TemplateHelper::dump() 13 | */ 14 | class HtmlDumperOutput 15 | { 16 | private $output; 17 | 18 | public function __invoke($line, $depth) 19 | { 20 | // A negative depth means "end of dump" 21 | if ($depth >= 0) { 22 | // Adds a two spaces indentation to the line 23 | $this->output .= str_repeat(' ', $depth) . $line . "\n"; 24 | } 25 | } 26 | 27 | public function getOutput() 28 | { 29 | return $this->output; 30 | } 31 | 32 | public function clear() 33 | { 34 | $this->output = null; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /kirby/vendor/laminas/laminas-escaper/COPYRIGHT.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. (https://getlaminas.org/) 2 | -------------------------------------------------------------------------------- /kirby/vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php: -------------------------------------------------------------------------------- 1 | =5.3.0" 22 | }, 23 | "autoload": { 24 | "psr-0": { "Michelf": "" } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /kirby/vendor/psr/log/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "psr/log", 3 | "description": "Common interface for logging libraries", 4 | "keywords": ["psr", "psr-3", "log"], 5 | "homepage": "https://github.com/php-fig/log", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "PHP-FIG", 10 | "homepage": "https://www.php-fig.org/" 11 | } 12 | ], 13 | "require": { 14 | "php": ">=8.0.0" 15 | }, 16 | "autoload": { 17 | "psr-4": { 18 | "Psr\\Log\\": "src" 19 | } 20 | }, 21 | "extra": { 22 | "branch-alias": { 23 | "dev-master": "3.x-dev" 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /kirby/vendor/psr/log/src/AbstractLogger.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /kirby/vendor/psr/log/src/NullLogger.php: -------------------------------------------------------------------------------- 1 | logger) { }` 11 | * blocks. 12 | */ 13 | class NullLogger extends AbstractLogger 14 | { 15 | /** 16 | * Logs with an arbitrary level. 17 | * 18 | * @param mixed[] $context 19 | * 20 | * @throws \Psr\Log\InvalidArgumentException 21 | */ 22 | public function log($level, string|\Stringable $message, array $context = []): void 23 | { 24 | // noop 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/deprecation-contracts/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony/deprecation-contracts", 3 | "type": "library", 4 | "description": "A generic function and convention to trigger deprecation notices", 5 | "homepage": "https://symfony.com", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Nicolas Grekas", 10 | "email": "p@tchwork.com" 11 | }, 12 | { 13 | "name": "Symfony Community", 14 | "homepage": "https://symfony.com/contributors" 15 | } 16 | ], 17 | "require": { 18 | "php": ">=8.1" 19 | }, 20 | "autoload": { 21 | "files": [ 22 | "function.php" 23 | ] 24 | }, 25 | "minimum-stability": "dev", 26 | "extra": { 27 | "branch-alias": { 28 | "dev-main": "3.6-dev" 29 | }, 30 | "thanks": { 31 | "name": "symfony/contracts", 32 | "url": "https://github.com/symfony/contracts" 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/polyfill-intl-idn/Info.php: -------------------------------------------------------------------------------- 1 | and Trevor Rowbotham 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Polyfill\Intl\Idn; 13 | 14 | /** 15 | * @internal 16 | */ 17 | class Info 18 | { 19 | public $bidiDomain = false; 20 | public $errors = 0; 21 | public $validBidiDomain = true; 22 | public $transitionalDifferent = false; 23 | } 24 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php: -------------------------------------------------------------------------------- 1 | 'ss', 5 | 962 => 'σ', 6 | 8204 => '', 7 | 8205 => '', 8 | ); 9 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | use Symfony\Polyfill\Intl\Normalizer as p; 13 | 14 | if (\PHP_VERSION_ID >= 80000) { 15 | return require __DIR__.'/bootstrap80.php'; 16 | } 17 | 18 | if (!function_exists('normalizer_is_normalized')) { 19 | function normalizer_is_normalized($string, $form = p\Normalizer::FORM_C) { return p\Normalizer::isNormalized($string, $form); } 20 | } 21 | if (!function_exists('normalizer_normalize')) { 22 | function normalizer_normalize($string, $form = p\Normalizer::FORM_C) { return p\Normalizer::normalize($string, $form); } 23 | } 24 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | use Symfony\Polyfill\Intl\Normalizer as p; 13 | 14 | if (!function_exists('normalizer_is_normalized')) { 15 | function normalizer_is_normalized(?string $string, ?int $form = p\Normalizer::FORM_C): bool { return p\Normalizer::isNormalized((string) $string, (int) $form); } 16 | } 17 | if (!function_exists('normalizer_normalize')) { 18 | function normalizer_normalize(?string $string, ?int $form = p\Normalizer::FORM_C): string|false { return p\Normalizer::normalize((string) $string, (int) $form); } 19 | } 20 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/yaml/Exception/DumpException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Yaml\Exception; 13 | 14 | /** 15 | * Exception class thrown when an error occurs during dumping. 16 | * 17 | * @author Fabien Potencier 18 | */ 19 | class DumpException extends RuntimeException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/yaml/Exception/ExceptionInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Yaml\Exception; 13 | 14 | /** 15 | * Exception interface for all exceptions thrown by the component. 16 | * 17 | * @author Fabien Potencier 18 | */ 19 | interface ExceptionInterface extends \Throwable 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/yaml/Exception/RuntimeException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Yaml\Exception; 13 | 14 | /** 15 | * Exception class thrown when an error occurs during parsing. 16 | * 17 | * @author Romain Neutron 18 | */ 19 | class RuntimeException extends \RuntimeException implements ExceptionInterface 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /kirby/vendor/symfony/yaml/Tag/TaggedValue.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Yaml\Tag; 13 | 14 | /** 15 | * @author Nicolas Grekas 16 | * @author Guilhem N. 17 | */ 18 | final class TaggedValue 19 | { 20 | private string $tag; 21 | private mixed $value; 22 | 23 | public function __construct(string $tag, mixed $value) 24 | { 25 | $this->tag = $tag; 26 | $this->value = $value; 27 | } 28 | 29 | public function getTag(): string 30 | { 31 | return $this->tag; 32 | } 33 | 34 | public function getValue(): mixed 35 | { 36 | return $this->value; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /kirby/views/browser.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | We are really sorry, but your browser does not support 5 | all features required for the Kirby Panel. 6 |

7 | 8 |
9 |

10 | Fetch
11 | We use Javascript's new Fetch API. You can find a list of supported browsers for this feature on 12 | caniuse.com 13 |

14 |

15 | CSS Grid
16 | We use CSS Grids for all our layouts. You can find a list of supported browsers for this feature on 17 | caniuse.com 18 |

19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /kirby/views/fatal.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | This page is currently offline due to an unexpected error. We are very sorry for the inconvenience and will fix it as soon as possible. 5 |

6 |

7 | Advice for developers and administrators:
8 | Enable debug mode to get further information about the error. 9 |

10 | 11 | 12 | -------------------------------------------------------------------------------- /kirby/views/php.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | This page is currently offline. We are very sorry for the inconvenience and will fix it as soon as possible. 5 |

6 |

7 | Advice for developers and administrators:
8 | Change the PHP version to one supported by your version of Kirby 9 |

10 | 11 | 12 | -------------------------------------------------------------------------------- /kirby/views/snippets/footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /kirby/views/snippets/header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Error 8 | 9 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /site/blueprints/fields/cover.yml: -------------------------------------------------------------------------------- 1 | # Fields can be defined in their own field blueprints 2 | # and reused across multiple blueprints 3 | # This field is used in the album.yml and note.yml blueprints 4 | # See http://getkirby.com/docs/guide/blueprints/extending-blueprints#reusing-and-extending-single-fields 5 | type: files 6 | multiple: false 7 | query: page.images.template('image') 8 | uploads: 9 | template: image 10 | -------------------------------------------------------------------------------- /site/blueprints/files/blocks/image.yml: -------------------------------------------------------------------------------- 1 | # The blocks/image template is automatically assigned to all uploaded 2 | # images in the blocks field. We don't really need a separate blueprint 3 | # for this and can therefor extend the already existing files/image blueprint 4 | extends: files/image 5 | -------------------------------------------------------------------------------- /site/blueprints/pages/error.yml: -------------------------------------------------------------------------------- 1 | # Each page blueprint must have a title, the title may be different from the file name 2 | title: Error 3 | 4 | # Page options allow you to control how users can interact with the page. 5 | # Here we prevent reading of the page, so it is not shown to anyone in the Panel. 6 | # If you want to allow users to modify the error page content in the Panel, remove this option. 7 | # More about page options: https://getkirby.com/docs/reference/panel/blueprints/page#options 8 | options: 9 | read: false 10 | -------------------------------------------------------------------------------- /site/blueprints/pages/photography.yml: -------------------------------------------------------------------------------- 1 | # Each page blueprint must have a title, the title may be different from the file name 2 | title: Photos 3 | 4 | # Each page can have an icon that is shown in page listings when no preview image is available. 5 | icon: 🖼 6 | 7 | # Here we extend two sections which are defined in `/site/blueprints/sections/albums.yml` 8 | # They differ in their page status and the headline. 9 | sections: 10 | drafts: 11 | extends: sections/albums 12 | label: Drafts 13 | status: draft 14 | 15 | listed: 16 | extends: sections/albums 17 | label: Published Albums 18 | status: listed 19 | -------------------------------------------------------------------------------- /site/blueprints/sections/albums.yml: -------------------------------------------------------------------------------- 1 | # This section blueprint defines a pages section that can be reused across multiple blueprints 2 | # or multiple times within the same blueprint, see `/site/blueprints/pages/photography.yml` and `/site/blueprints/site.yml` 3 | # Sections can have different layouts and display additional information or a preview image 4 | # More about pages sections: https://getkirby.com/docs/reference/panel/sections/pages 5 | type: pages 6 | label: Photography 7 | parent: kirby.page("photography") 8 | size: small 9 | info: "{{ page.images.count }} image(s)" 10 | layout: cards 11 | template: album 12 | empty: No albums yet 13 | image: 14 | query: page.cover 15 | cover: true 16 | ratio: 5/4 17 | -------------------------------------------------------------------------------- /site/blueprints/sections/notes.yml: -------------------------------------------------------------------------------- 1 | # This section blueprint defines a pages section that can be reused across multiple blueprints 2 | # or multiple times within the same blueprint, see `/site/blueprints/pages/notes.yml` and `/site/blueprints/site.yml` 3 | # Sections can have different layouts and display additional information or a preview image 4 | # More about pages sections: https://getkirby.com/docs/reference/panel/sections/pages 5 | type: pages 6 | label: Notes 7 | parent: kirby.page("notes") 8 | info: "{{ page.published }}" 9 | template: note 10 | empty: No notes yet 11 | sortBy: date desc 12 | image: 13 | query: page.cover 14 | cover: true 15 | ratio: 3/2 16 | -------------------------------------------------------------------------------- /site/cache/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getkirby/starterkit/e8879787717dc23461dafdddd56f0659b2818ab6/site/cache/index.html -------------------------------------------------------------------------------- /site/collections/notes.php: -------------------------------------------------------------------------------- 1 | children() 12 | ->listed() 13 | ->sortBy('date', 'desc'); 14 | }; 15 | -------------------------------------------------------------------------------- /site/config/config.php: -------------------------------------------------------------------------------- 1 | true, 12 | 'yaml.handler' => 'symfony', // already makes use of the more modern Symfony YAML parser: https://getkirby.com/docs/reference/system/options/yaml (will become the default in a future Kirby version) 13 | ]; 14 | -------------------------------------------------------------------------------- /site/controllers/album.php: -------------------------------------------------------------------------------- 1 | images()->sortBy('sort', 'filename'); 14 | 15 | return [ 16 | 'gallery' => $gallery 17 | ]; 18 | 19 | }; 20 | -------------------------------------------------------------------------------- /site/controllers/note.php: -------------------------------------------------------------------------------- 1 | $page->tags()->split(','), 14 | ]; 15 | }; 16 | -------------------------------------------------------------------------------- /site/models/album.php: -------------------------------------------------------------------------------- 1 | content()->get('cover')->toFile() ?? $this->image(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /site/snippets/blocks/gallery.php: -------------------------------------------------------------------------------- 1 | 4 | 24 | -------------------------------------------------------------------------------- /site/snippets/blocks/video.php: -------------------------------------------------------------------------------- 1 | 15 | url()->isNotEmpty()): ?> 16 |
17 | 18 | url()) ?> 19 | 20 | caption()->isNotEmpty()): ?> 21 |
caption() ?>
22 | 23 |
24 | 25 | -------------------------------------------------------------------------------- /site/snippets/image.php: -------------------------------------------------------------------------------- 1 | $lightbox ?? false, 5 | 'href' => $href ?? $src, 6 | ]); 7 | 8 | ?> 9 | > 10 | <?= esc($alt, 'attr') ?> 18 | 19 | -------------------------------------------------------------------------------- /site/snippets/intro.php: -------------------------------------------------------------------------------- 1 | 15 |
16 |

headline()->or($page->title())->esc() ?>

17 | subheadline()->isNotEmpty()): ?> 18 |

subheadline()->esc() ?>

19 | 20 |
21 | -------------------------------------------------------------------------------- /site/snippets/layouts.php: -------------------------------------------------------------------------------- 1 | 13 | toLayouts() as $layout): ?> 14 |
15 | columns() as $column): ?> 16 |
17 |
18 | blocks() ?> 19 |
20 |
21 | 22 |
23 | 24 | -------------------------------------------------------------------------------- /site/snippets/note.php: -------------------------------------------------------------------------------- 1 | 12 | 31 | -------------------------------------------------------------------------------- /site/snippets/pagination.php: -------------------------------------------------------------------------------- 1 | 13 | hasPages()): ?> 14 | 26 | 27 | -------------------------------------------------------------------------------- /site/snippets/prevnext.php: -------------------------------------------------------------------------------- 1 | 15 | 28 | -------------------------------------------------------------------------------- /site/snippets/social.php: -------------------------------------------------------------------------------- 1 | 14 | 28 | -------------------------------------------------------------------------------- /site/templates/default.php: -------------------------------------------------------------------------------- 1 | title()`. 11 | 12 | This default template must not be removed. It is used whenever Kirby 13 | cannot find a template with the name of the content file. 14 | 15 | Snippets like the header and footer contain markup used in 16 | multiple templates. They also help to keep templates clean. 17 | 18 | More about templates: https://getkirby.com/docs/guide/templates/basics 19 | */ 20 | ?> 21 | 22 | 23 |
24 |

title()->esc() ?>

25 |
26 | text()->kt() ?> 27 |
28 |
29 | 30 | 31 | --------------------------------------------------------------------------------