├── .gitignore
├── .htaccess
├── assets
├── css
│ └── .gitkeep
├── fonts
│ └── .gitkeep
├── images
│ └── .gitkeep
└── js
│ └── .gitkeep
├── content
├── error
│ └── error.txt
├── home
│ └── home.txt
└── site.txt
├── index.php
├── kirby
├── .gitignore
├── .travis.yml
├── bootstrap.php
├── branches
│ ├── default.php
│ ├── multilang.php
│ └── multilang
│ │ ├── content.php
│ │ ├── field.php
│ │ ├── file.php
│ │ ├── language.php
│ │ ├── languages.php
│ │ ├── page.php
│ │ └── site.php
├── classmap.php
├── composer.json
├── composer.lock
├── composer.php
├── core
│ ├── asset.php
│ ├── avatar.php
│ ├── children.php
│ ├── content.php
│ ├── field.php
│ ├── file.php
│ ├── files.php
│ ├── kirbytag.php
│ ├── kirbytext.php
│ ├── page.php
│ ├── pages.php
│ ├── role.php
│ ├── roles.php
│ ├── site.php
│ ├── user.php
│ └── users.php
├── extensions
│ ├── methods.php
│ └── tags.php
├── helpers.php
├── kirby.php
├── kirby
│ ├── component.php
│ ├── component
│ │ ├── css.php
│ │ ├── js.php
│ │ ├── markdown.php
│ │ ├── response.php
│ │ ├── smartypants.php
│ │ ├── snippet.php
│ │ ├── template.php
│ │ ├── thumb.php
│ │ └── tinyurl.php
│ ├── errorhandling.php
│ ├── event.php
│ ├── registry.php
│ ├── registry
│ │ ├── blueprint.php
│ │ ├── component.php
│ │ ├── controller.php
│ │ ├── entry.php
│ │ ├── field.php
│ │ ├── hook.php
│ │ ├── method.php
│ │ ├── model.php
│ │ ├── option.php
│ │ ├── role.php
│ │ ├── route.php
│ │ ├── snippet.php
│ │ ├── tag.php
│ │ ├── template.php
│ │ └── widget.php
│ ├── request.php
│ ├── request
│ │ ├── params.php
│ │ ├── path.php
│ │ └── query.php
│ ├── roots.php
│ ├── traits
│ │ └── image.php
│ └── urls.php
├── lib
│ ├── pageextension.php
│ └── structure.php
├── license.md
├── phpunit.xml
├── readme.md
├── system.php
├── test
│ ├── ContentTest.php
│ ├── FieldTest.php
│ ├── FileTest.php
│ ├── FilesTest.php
│ ├── KirbyTest.php
│ ├── KirbytextTest.php
│ ├── ModelsTest.php
│ ├── PageTest.php
│ ├── PagesTest.php
│ ├── RegistryEntryTest.php
│ ├── RegistryTest.php
│ ├── RoleTest.php
│ ├── RootsTest.php
│ ├── SiteTest.php
│ ├── UrlsTest.php
│ ├── UsersTest.php
│ ├── etc
│ │ ├── content
│ │ │ ├── 1-a
│ │ │ │ ├── a.txt
│ │ │ │ └── test.js
│ │ │ ├── 2-b
│ │ │ │ └── b.txt
│ │ │ ├── error
│ │ │ │ └── error.txt
│ │ │ ├── home
│ │ │ │ └── home.txt
│ │ │ ├── site.txt
│ │ │ └── tests
│ │ │ │ ├── field-name-test
│ │ │ │ └── test.txt
│ │ │ │ └── file-extension-case-test
│ │ │ │ ├── a.JSON
│ │ │ │ └── b.json
│ │ ├── kirbytext
│ │ │ ├── gist
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── image-with-alt
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── image-with-caption
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── image-with-link-popup
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── image-with-link
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── image
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── input-with-placeholder
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── link-with-class
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── link-with-link-as-text
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── link-with-popup
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── link-with-rel
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── link-with-target
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── link-without-text
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── link
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── multiline-parenthesis
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── non-matching-parenthesises
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── script-tag
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── tag-in-parenthesis
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── tel
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── twitter
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ ├── vimeo
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ │ └── youtube
│ │ │ │ ├── expected.html
│ │ │ │ └── test.txt
│ │ └── site
│ │ │ ├── accounts
│ │ │ └── test.php
│ │ │ ├── cache
│ │ │ └── .gitkeep
│ │ │ ├── config
│ │ │ └── config.php
│ │ │ ├── models
│ │ │ └── a.php
│ │ │ ├── plugins
│ │ │ ├── a
│ │ │ │ └── a.php
│ │ │ └── b.php
│ │ │ └── tags
│ │ │ ├── a.php
│ │ │ └── b.php
│ └── lib
│ │ ├── bootstrap.php
│ │ └── testcase.php
├── vendor
│ ├── autoload.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
│ │ └── platform_check.php
│ ├── erusev
│ │ ├── parsedown-extra
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE.txt
│ │ │ ├── ParsedownExtra.php
│ │ │ ├── README.md
│ │ │ ├── composer.json
│ │ │ ├── phpunit.xml.dist
│ │ │ └── test
│ │ │ │ ├── ParsedownExtraTest.php
│ │ │ │ ├── bootstrap.php
│ │ │ │ └── data
│ │ │ │ ├── abbreviation.html
│ │ │ │ ├── abbreviation.md
│ │ │ │ ├── compound_footnote.html
│ │ │ │ ├── compound_footnote.md
│ │ │ │ ├── definition_list.html
│ │ │ │ ├── definition_list.md
│ │ │ │ ├── footnote.html
│ │ │ │ ├── footnote.md
│ │ │ │ ├── markdown_inside_markup.html
│ │ │ │ ├── markdown_inside_markup.md
│ │ │ │ ├── special_attributes.html
│ │ │ │ └── special_attributes.md
│ │ └── parsedown
│ │ │ ├── LICENSE.txt
│ │ │ ├── Parsedown.php
│ │ │ ├── README.md
│ │ │ └── composer.json
│ ├── filp
│ │ └── whoops
│ │ │ ├── CHANGELOG.md
│ │ │ ├── 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
│ │ │ ├── Resources
│ │ │ ├── css
│ │ │ │ └── whoops.base.css
│ │ │ ├── js
│ │ │ │ ├── clipboard.min.js
│ │ │ │ ├── prettify.min.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
│ ├── getkirby
│ │ └── toolkit
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── bootstrap.php
│ │ │ ├── composer.json
│ │ │ ├── helpers.php
│ │ │ ├── lib
│ │ │ ├── a.php
│ │ │ ├── bitmask.php
│ │ │ ├── brick.php
│ │ │ ├── c.php
│ │ │ ├── cache.php
│ │ │ ├── cache
│ │ │ │ ├── driver.php
│ │ │ │ ├── driver
│ │ │ │ │ ├── apc.php
│ │ │ │ │ ├── file.php
│ │ │ │ │ ├── memcached.php
│ │ │ │ │ ├── mock.php
│ │ │ │ │ └── session.php
│ │ │ │ └── value.php
│ │ │ ├── collection.php
│ │ │ ├── cookie.php
│ │ │ ├── crypt.php
│ │ │ ├── data.php
│ │ │ ├── database.php
│ │ │ ├── database
│ │ │ │ └── query.php
│ │ │ ├── db.php
│ │ │ ├── detect.php
│ │ │ ├── dimensions.php
│ │ │ ├── dir.php
│ │ │ ├── email.php
│ │ │ ├── embed.php
│ │ │ ├── error.php
│ │ │ ├── errorreporting.php
│ │ │ ├── escape.php
│ │ │ ├── exif.php
│ │ │ ├── exif
│ │ │ │ ├── camera.php
│ │ │ │ └── location.php
│ │ │ ├── f.php
│ │ │ ├── folder.php
│ │ │ ├── header.php
│ │ │ ├── html.php
│ │ │ ├── i.php
│ │ │ ├── l.php
│ │ │ ├── media.php
│ │ │ ├── obj.php
│ │ │ ├── pagination.php
│ │ │ ├── password.php
│ │ │ ├── r.php
│ │ │ ├── redirect.php
│ │ │ ├── remote.php
│ │ │ ├── response.php
│ │ │ ├── router.php
│ │ │ ├── s.php
│ │ │ ├── server.php
│ │ │ ├── silo.php
│ │ │ ├── sql.php
│ │ │ ├── str.php
│ │ │ ├── system.php
│ │ │ ├── thumb.php
│ │ │ ├── timer.php
│ │ │ ├── toolkit.php
│ │ │ ├── tpl.php
│ │ │ ├── upload.php
│ │ │ ├── url.php
│ │ │ ├── v.php
│ │ │ ├── visitor.php
│ │ │ ├── xml.php
│ │ │ └── yaml.php
│ │ │ ├── phpunit.xml
│ │ │ ├── readme.md
│ │ │ ├── test
│ │ │ ├── ATest.php
│ │ │ ├── BitmaskTest.php
│ │ │ ├── CTest.php
│ │ │ ├── CollectionTest.php
│ │ │ ├── DbTest.php
│ │ │ ├── DimensionsTest.php
│ │ │ ├── DirTest.php
│ │ │ ├── EmbedTest.php
│ │ │ ├── ErrorReportingTest.php
│ │ │ ├── FTest.php
│ │ │ ├── HTMLTest.php
│ │ │ ├── HeaderTest.php
│ │ │ ├── HelpersTest.php
│ │ │ ├── LTest.php
│ │ │ ├── MediaTest.php
│ │ │ ├── ObjTest.php
│ │ │ ├── PaginationTest.php
│ │ │ ├── PasswordTest.php
│ │ │ ├── RTest.php
│ │ │ ├── ServerTest.php
│ │ │ ├── StrTest.php
│ │ │ ├── SystemTest.php
│ │ │ ├── TimerTest.php
│ │ │ ├── UrlTest.php
│ │ │ ├── VTest.php
│ │ │ ├── VisitorTest.php
│ │ │ ├── XmlTest.php
│ │ │ ├── etc
│ │ │ │ ├── content.php
│ │ │ │ ├── images
│ │ │ │ │ └── favicon.png
│ │ │ │ └── system
│ │ │ │ │ ├── executable.sh
│ │ │ │ │ └── nonexecutable.sh
│ │ │ └── lib
│ │ │ │ └── bootstrap.php
│ │ │ └── vendors
│ │ │ ├── abeautifulsite
│ │ │ └── SimpleImage.php
│ │ │ ├── mimereader
│ │ │ └── mimereader.php
│ │ │ ├── truebv
│ │ │ └── punycode.php
│ │ │ └── yaml
│ │ │ └── yaml.php
│ ├── michelf
│ │ └── php-smartypants
│ │ │ ├── License.md
│ │ │ ├── Michelf
│ │ │ ├── SmartyPants.inc.php
│ │ │ ├── SmartyPants.php
│ │ │ ├── SmartyPantsTypographer.inc.php
│ │ │ └── SmartyPantsTypographer.php
│ │ │ ├── Readme.md
│ │ │ ├── Readme.php
│ │ │ └── composer.json
│ └── psr
│ │ └── log
│ │ ├── LICENSE
│ │ ├── Psr
│ │ └── Log
│ │ │ ├── AbstractLogger.php
│ │ │ ├── InvalidArgumentException.php
│ │ │ ├── LogLevel.php
│ │ │ ├── LoggerAwareInterface.php
│ │ │ ├── LoggerAwareTrait.php
│ │ │ ├── LoggerInterface.php
│ │ │ ├── LoggerTrait.php
│ │ │ ├── NullLogger.php
│ │ │ └── Test
│ │ │ ├── DummyTest.php
│ │ │ ├── LoggerInterfaceTest.php
│ │ │ └── TestLogger.php
│ │ ├── README.md
│ │ └── composer.json
└── views
│ └── fatal.php
├── license.md
├── panel
├── .gitignore
├── .tx
│ └── config
├── app
│ ├── bootstrap.php
│ ├── config
│ │ └── routes.php
│ ├── controllers
│ │ ├── assets.php
│ │ ├── auth.php
│ │ ├── autocomplete.php
│ │ ├── avatars.php
│ │ ├── dashboard.php
│ │ ├── error.php
│ │ ├── field.php
│ │ ├── files.php
│ │ ├── installation.php
│ │ ├── options.php
│ │ ├── pages.php
│ │ ├── search.php
│ │ ├── subpages.php
│ │ └── users.php
│ ├── fields
│ │ ├── base
│ │ │ └── base.php
│ │ ├── checkbox
│ │ │ └── checkbox.php
│ │ ├── checkboxes
│ │ │ └── checkboxes.php
│ │ ├── date
│ │ │ ├── assets
│ │ │ │ └── js
│ │ │ │ │ └── date.js
│ │ │ └── date.php
│ │ ├── datetime
│ │ │ └── datetime.php
│ │ ├── email
│ │ │ └── email.php
│ │ ├── filename
│ │ │ └── filename.php
│ │ ├── headline
│ │ │ ├── assets
│ │ │ │ └── css
│ │ │ │ │ └── headline.css
│ │ │ └── headline.php
│ │ ├── hidden
│ │ │ └── hidden.php
│ │ ├── image
│ │ │ ├── assets
│ │ │ │ ├── css
│ │ │ │ │ └── image.css
│ │ │ │ └── js
│ │ │ │ │ └── image.js
│ │ │ └── image.php
│ │ ├── info
│ │ │ └── info.php
│ │ ├── input
│ │ │ └── input.php
│ │ ├── inputlist
│ │ │ └── inputlist.php
│ │ ├── line
│ │ │ └── line.php
│ │ ├── number
│ │ │ └── number.php
│ │ ├── page
│ │ │ └── page.php
│ │ ├── password
│ │ │ └── password.php
│ │ ├── radio
│ │ │ └── radio.php
│ │ ├── select
│ │ │ └── select.php
│ │ ├── structure
│ │ │ ├── assets
│ │ │ │ ├── css
│ │ │ │ │ └── structure.css
│ │ │ │ └── js
│ │ │ │ │ └── structure.js
│ │ │ ├── controller.php
│ │ │ ├── forms
│ │ │ │ ├── add.php
│ │ │ │ ├── delete.php
│ │ │ │ └── update.php
│ │ │ ├── structure.php
│ │ │ ├── styles
│ │ │ │ ├── items.php
│ │ │ │ └── table.php
│ │ │ ├── template.php
│ │ │ └── views
│ │ │ │ ├── add.php
│ │ │ │ ├── delete.php
│ │ │ │ └── update.php
│ │ ├── tags
│ │ │ └── tags.php
│ │ ├── tel
│ │ │ └── tel.php
│ │ ├── text
│ │ │ ├── assets
│ │ │ │ ├── css
│ │ │ │ │ └── counter.css
│ │ │ │ └── js
│ │ │ │ │ └── counter.js
│ │ │ └── text.php
│ │ ├── textarea
│ │ │ ├── assets
│ │ │ │ └── js
│ │ │ │ │ └── editor.js
│ │ │ ├── buttons.php
│ │ │ ├── controller.php
│ │ │ ├── forms
│ │ │ │ ├── email.php
│ │ │ │ └── link.php
│ │ │ ├── textarea.php
│ │ │ └── views
│ │ │ │ ├── email.php
│ │ │ │ └── link.php
│ │ ├── time
│ │ │ └── time.php
│ │ ├── title
│ │ │ └── title.php
│ │ ├── toggle
│ │ │ └── toggle.php
│ │ ├── url
│ │ │ ├── assets
│ │ │ │ └── js
│ │ │ │ │ └── url.js
│ │ │ └── url.php
│ │ └── user
│ │ │ └── user.php
│ ├── forms
│ │ ├── auth
│ │ │ └── login.php
│ │ ├── avatars
│ │ │ └── delete.php
│ │ ├── editor
│ │ │ ├── email.php
│ │ │ └── link.php
│ │ ├── files
│ │ │ ├── delete.php
│ │ │ └── edit.php
│ │ ├── installation
│ │ │ ├── check.php
│ │ │ └── signup.php
│ │ ├── pages
│ │ │ ├── add.php
│ │ │ ├── delete.php
│ │ │ ├── edit.php
│ │ │ ├── template.php
│ │ │ ├── toggle.php
│ │ │ └── url.php
│ │ └── users
│ │ │ ├── delete.php
│ │ │ └── user.php
│ ├── helpers.php
│ ├── layouts
│ │ ├── app.php
│ │ ├── base.php
│ │ └── fatal.php
│ ├── snippets
│ │ ├── breadcrumb.php
│ │ ├── favicon.php
│ │ ├── languages.php
│ │ ├── menu.php
│ │ ├── meta.php
│ │ ├── pages
│ │ │ ├── sidebar.php
│ │ │ └── sidebar
│ │ │ │ ├── file.php
│ │ │ │ ├── files.php
│ │ │ │ ├── menu.php
│ │ │ │ ├── subpage.php
│ │ │ │ └── subpages.php
│ │ ├── pagination.php
│ │ ├── search.php
│ │ ├── subpages
│ │ │ └── subpage.php
│ │ ├── template.php
│ │ └── uploader.php
│ ├── src
│ │ ├── panel.php
│ │ └── panel
│ │ │ ├── autocomplete.php
│ │ │ ├── collections
│ │ │ ├── children.php
│ │ │ ├── files.php
│ │ │ └── users.php
│ │ │ ├── controllers
│ │ │ ├── base.php
│ │ │ └── field.php
│ │ │ ├── errorhandling.php
│ │ │ ├── event.php
│ │ │ ├── exceptions
│ │ │ └── permissions.php
│ │ │ ├── form.php
│ │ │ ├── form
│ │ │ ├── fieldoptions.php
│ │ │ └── plugins.php
│ │ │ ├── installer.php
│ │ │ ├── layout.php
│ │ │ ├── login.php
│ │ │ ├── models
│ │ │ ├── file.php
│ │ │ ├── file
│ │ │ │ ├── menu.php
│ │ │ │ ├── options.php
│ │ │ │ └── ui.php
│ │ │ ├── page.php
│ │ │ ├── page
│ │ │ │ ├── addbutton.php
│ │ │ │ ├── blueprint.php
│ │ │ │ ├── blueprint
│ │ │ │ │ ├── field.php
│ │ │ │ │ ├── fields.php
│ │ │ │ │ ├── files.php
│ │ │ │ │ ├── options.php
│ │ │ │ │ └── pages.php
│ │ │ │ ├── changes.php
│ │ │ │ ├── menu.php
│ │ │ │ ├── options.php
│ │ │ │ ├── sidebar.php
│ │ │ │ ├── sorter.php
│ │ │ │ ├── ui.php
│ │ │ │ └── uploader.php
│ │ │ ├── site.php
│ │ │ ├── site
│ │ │ │ ├── options.php
│ │ │ │ └── ui.php
│ │ │ ├── user.php
│ │ │ └── user
│ │ │ │ ├── avatar.php
│ │ │ │ ├── avatar
│ │ │ │ └── ui.php
│ │ │ │ ├── blueprint.php
│ │ │ │ ├── history.php
│ │ │ │ └── ui.php
│ │ │ ├── roots.php
│ │ │ ├── search.php
│ │ │ ├── snippet.php
│ │ │ ├── structure.php
│ │ │ ├── structure
│ │ │ └── store.php
│ │ │ ├── topbar.php
│ │ │ ├── translation.php
│ │ │ ├── upload.php
│ │ │ ├── urls.php
│ │ │ ├── view.php
│ │ │ └── widgets.php
│ ├── topbars
│ │ ├── error.php
│ │ └── user.php
│ ├── translations
│ │ ├── ar
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── bg
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── ca
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── cs
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── da
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── de
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── el
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── en
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── es_419
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── es_ES
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── fa
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── fi
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── fr
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── hu
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── id
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── it
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── ja
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── ko
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── nb
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── nl
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── pl
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── pt_BR
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── pt_PT
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── readme.md
│ │ ├── ro
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── ru
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── sv_SE
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── tr
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ ├── zh_CN
│ │ │ ├── core.json
│ │ │ └── package.json
│ │ └── zh_TW
│ │ │ ├── core.json
│ │ │ └── package.json
│ ├── views
│ │ ├── auth
│ │ │ ├── block.php
│ │ │ ├── error.php
│ │ │ └── login.php
│ │ ├── avatars
│ │ │ └── delete.php
│ │ ├── dashboard
│ │ │ └── index.php
│ │ ├── error
│ │ │ ├── index.php
│ │ │ └── modal.php
│ │ ├── files
│ │ │ ├── delete.php
│ │ │ ├── edit.php
│ │ │ └── index.php
│ │ ├── installation
│ │ │ └── index.php
│ │ ├── options
│ │ │ └── index.php
│ │ ├── pages
│ │ │ ├── add.php
│ │ │ ├── delete.php
│ │ │ ├── edit.php
│ │ │ ├── template.php
│ │ │ ├── toggle.php
│ │ │ └── url.php
│ │ ├── search
│ │ │ └── results.php
│ │ ├── subpages
│ │ │ └── index.php
│ │ └── users
│ │ │ ├── delete.php
│ │ │ ├── edit.php
│ │ │ └── index.php
│ └── widgets
│ │ ├── account
│ │ ├── account.html.php
│ │ └── account.php
│ │ ├── history
│ │ ├── history.html.php
│ │ └── history.php
│ │ ├── license
│ │ ├── license.html.php
│ │ └── license.php
│ │ ├── pages
│ │ ├── pages.html.php
│ │ └── pages.php
│ │ └── site
│ │ ├── site.html.php
│ │ └── site.php
├── assets
│ ├── css
│ │ ├── form.css
│ │ ├── form.min.css
│ │ ├── panel.css
│ │ └── panel.min.css
│ ├── fonts
│ │ ├── fontawesome-webfont.woff
│ │ ├── fontawesome-webfont.woff2
│ │ ├── sourcesanspro-400-italic.woff
│ │ ├── sourcesanspro-400-italic.woff2
│ │ ├── sourcesanspro-400.woff
│ │ ├── sourcesanspro-400.woff2
│ │ ├── sourcesanspro-600.woff
│ │ └── sourcesanspro-600.woff2
│ ├── images
│ │ ├── avatar.png
│ │ ├── hint.arrows.png
│ │ ├── loader.black.gif
│ │ ├── loader.white.gif
│ │ ├── pattern.png
│ │ └── placeholder.png
│ ├── js
│ │ ├── dist
│ │ │ ├── app.js
│ │ │ ├── app.min.js
│ │ │ ├── form.js
│ │ │ ├── form.min.js
│ │ │ ├── panel.js
│ │ │ └── panel.min.js
│ │ └── src
│ │ │ ├── app.js
│ │ │ ├── components
│ │ │ ├── breadcrumb.js
│ │ │ ├── content.js
│ │ │ ├── delay.js
│ │ │ ├── dropdown.js
│ │ │ ├── focus.js
│ │ │ ├── form.js
│ │ │ ├── message.js
│ │ │ ├── modal.js
│ │ │ ├── search.js
│ │ │ ├── shortcuts.js
│ │ │ ├── sidebar.js
│ │ │ └── uploader.js
│ │ │ ├── jquery
│ │ │ ├── jquery.js
│ │ │ └── plugins
│ │ │ │ ├── jquery.autocomplete.js
│ │ │ │ ├── jquery.autosize.js
│ │ │ │ ├── jquery.center.js
│ │ │ │ ├── jquery.context.js
│ │ │ │ ├── jquery.drop.js
│ │ │ │ ├── jquery.dropload.js
│ │ │ │ ├── jquery.editorHelpers.js
│ │ │ │ ├── jquery.fakefocus.js
│ │ │ │ ├── jquery.filedrop.js
│ │ │ │ ├── jquery.filereader.js
│ │ │ │ ├── jquery.hotkeys.js
│ │ │ │ ├── jquery.passwordsuggestion.js
│ │ │ │ ├── jquery.serializeobject.js
│ │ │ │ ├── jquery.slug.js
│ │ │ │ ├── jquery.tags.js
│ │ │ │ ├── jquery.token.js
│ │ │ │ ├── jquery.ui.js
│ │ │ │ ├── jquery.ui.touch.js
│ │ │ │ └── jquery.upload.js
│ │ │ └── plugins
│ │ │ ├── moment.js
│ │ │ ├── nprogress.js
│ │ │ └── pikaday.js
│ └── scss
│ │ ├── components
│ │ ├── _autocomplete.scss
│ │ ├── _avatar.scss
│ │ ├── _body.scss
│ │ ├── _breadcrumb.scss
│ │ ├── _btn.scss
│ │ ├── _counter.scss
│ │ ├── _dashboard.scss
│ │ ├── _debugger.scss
│ │ ├── _dragula.scss
│ │ ├── _dropdown.scss
│ │ ├── _dropload.scss
│ │ ├── _dropzone.scss
│ │ ├── _file.scss
│ │ ├── _files.scss
│ │ ├── _fileselector.scss
│ │ ├── _fileview.scss
│ │ ├── _fonts.scss
│ │ ├── _form.scss
│ │ ├── _grid.scss
│ │ ├── _headlines.scss
│ │ ├── _hgroup.scss
│ │ ├── _icon.scss
│ │ ├── _instruction.scss
│ │ ├── _items.scss
│ │ ├── _languages.scss
│ │ ├── _main.scss
│ │ ├── _message.scss
│ │ ├── _misc.scss
│ │ ├── _modal.scss
│ │ ├── _nav.scss
│ │ ├── _nprogress.scss
│ │ ├── _pagination.scss
│ │ ├── _pikaday.scss
│ │ ├── _reset.scss
│ │ ├── _search.scss
│ │ ├── _shiv.scss
│ │ ├── _sidebar.scss
│ │ ├── _subpages.scss
│ │ ├── _tags.scss
│ │ ├── _text.scss
│ │ ├── _topbar.scss
│ │ └── _typography.scss
│ │ ├── fontawesome
│ │ ├── _animated.scss
│ │ ├── _bordered-pulled.scss
│ │ ├── _core.scss
│ │ ├── _fixed-width.scss
│ │ ├── _fontawesome.scss
│ │ ├── _icons.scss
│ │ ├── _larger.scss
│ │ ├── _list.scss
│ │ ├── _mixins.scss
│ │ ├── _path.scss
│ │ ├── _rotated-flipped.scss
│ │ ├── _screen-reader.scss
│ │ ├── _stacked.scss
│ │ └── _variables.scss
│ │ └── panel.scss
├── composer.json
├── gulpfile.js
├── index.php
├── license.md
├── package.json
├── phpunit.xml
├── readme.md
└── tests
│ ├── dummy
│ ├── images
│ │ └── forrest.jpg
│ └── site
│ │ └── blueprints
│ │ ├── alphabet.php
│ │ ├── blog.php
│ │ └── default.php
│ ├── lib
│ ├── bootstrap.php
│ └── testcase.php
│ └── tests
│ ├── AutocompleteTest.php
│ ├── ChangesTest.php
│ ├── FileModelTest.php
│ ├── HistoryTest.php
│ ├── NumberingTest.php
│ ├── PageModelTest.php
│ ├── PanelTest.php
│ ├── SiteModelTest.php
│ ├── StructureTest.php
│ └── UserModelTest.php
├── readme.md
└── site
├── blueprints
└── default.yml
├── cache
└── .gitkeep
├── config
└── config.php
├── plugins
└── .gitkeep
├── snippets
├── footer.php
└── header.php
└── templates
└── default.php
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /site/accounts
3 | /assets/avatars
4 | /thumbs/*
--------------------------------------------------------------------------------
/assets/css/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/assets/css/.gitkeep
--------------------------------------------------------------------------------
/assets/fonts/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/assets/fonts/.gitkeep
--------------------------------------------------------------------------------
/assets/images/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/assets/images/.gitkeep
--------------------------------------------------------------------------------
/assets/js/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/assets/js/.gitkeep
--------------------------------------------------------------------------------
/content/error/error.txt:
--------------------------------------------------------------------------------
1 | Title: Error
--------------------------------------------------------------------------------
/content/home/home.txt:
--------------------------------------------------------------------------------
1 | Title: Home
--------------------------------------------------------------------------------
/content/site.txt:
--------------------------------------------------------------------------------
1 | Title: Site Title
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 | launch();
--------------------------------------------------------------------------------
/kirby/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /vendor/**/.git
--------------------------------------------------------------------------------
/kirby/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 | sudo: false
3 | php:
4 | - 7.2
5 | - 7.3
6 | - 7.4
7 | matrix:
8 | fast_finish: true
9 |
--------------------------------------------------------------------------------
/kirby/bootstrap.php:
--------------------------------------------------------------------------------
1 | __DIR__ . DS . 'multilang' . DS . 'content.php',
23 | 'field' => __DIR__ . DS . 'multilang' . DS . 'field.php',
24 | 'file' => __DIR__ . DS . 'multilang' . DS . 'file.php',
25 | 'language' => __DIR__ . DS . 'multilang' . DS . 'language.php',
26 | 'languages' => __DIR__ . DS . 'multilang' . DS . 'languages.php',
27 | 'page' => __DIR__ . DS . 'multilang' . DS . 'page.php',
28 | 'site' => __DIR__ . DS . 'multilang' . DS . 'site.php',
29 | ));
--------------------------------------------------------------------------------
/kirby/branches/multilang/content.php:
--------------------------------------------------------------------------------
1 | name = f::name($this->name);
18 | $this->language = $language;
19 |
20 | }
21 |
22 | public function realroot() {
23 | return dirname($this->root()) . DS . $this->name() . '.' . $this->language . '.' . f::extension($this->root());
24 | }
25 |
26 | public function exists() {
27 | return file_exists($this->realroot());
28 | }
29 |
30 | public function language() {
31 |
32 | if(!is_null($this->language)) return $this->language;
33 |
34 | $codes = $this->page->site()->languages()->codes();
35 | $code = f::extension(f::name($this->root));
36 |
37 | return $this->language = in_array($code, $codes) ? $this->page->site()->languages()->find($code) : false;
38 |
39 | }
40 |
41 | }
--------------------------------------------------------------------------------
/kirby/branches/multilang/field.php:
--------------------------------------------------------------------------------
1 | page->site();
16 |
17 | // use current language if $lang not set
18 | if(is_null($lang)) $lang = $site->language()->code();
19 |
20 | // if language is default/fallback language
21 | if($site->language($lang)->default()) return true;
22 |
23 | $current = $this->page->content($lang);
24 | $default = $this->page->content($site->defaultLanguage->code);
25 |
26 | $field = $current->get($this->key);
27 | $untranslated = $default->get($this->key)->value();
28 |
29 | return $field->isNotEmpty() && $field->value() !== $untranslated;
30 |
31 | }
32 |
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/kirby/branches/multilang/languages.php:
--------------------------------------------------------------------------------
1 | site = $site;
14 | }
15 |
16 | public function find($code) {
17 | return isset($this->data[$code]) ? $this->data[$code] : null;
18 | }
19 |
20 | public function codes() {
21 | return $this->keys();
22 | }
23 |
24 | public function findDefault() {
25 | return $this->site->defaultLanguage();
26 | }
27 |
28 | public function __debuginfo() {
29 | return array_keys($this->data);
30 | }
31 |
32 | }
--------------------------------------------------------------------------------
/kirby/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "getkirby/kirby",
3 | "description": "The Kirby 2 core.",
4 | "keywords": ["core", "kirby", "cms"],
5 | "homepage": "https://getkirby.com",
6 | "license": "proprietary",
7 | "authors": [
8 | {
9 | "name": "Bastian Allgeier",
10 | "email": "bastian@getkirby.com",
11 | "homepage": "http://bastianallgeier.com"
12 | }
13 | ],
14 | "support": {
15 | "email": "support@getkirby.com",
16 | "issues": "https://github.com/getkirby/kirby/issues",
17 | "forum": "https://forum.getkirby.com",
18 | "source": "https://github.com/getkirby/kirby"
19 | },
20 | "autoload": {
21 | "files": ["composer.php"]
22 | },
23 | "require": {
24 | "php": ">=7.2.0",
25 | "ext-mbstring": "*",
26 | "ext-gd": "*",
27 | "erusev/parsedown": "1.7.1",
28 | "erusev/parsedown-extra": "0.7.1",
29 | "michelf/php-smartypants": "1.8.1",
30 | "getkirby/toolkit": "2.5.14",
31 | "filp/whoops": "2.1.14"
32 | },
33 | "archive": {
34 | "exclude": [
35 | "/.gitmodules",
36 | "/.gitignore",
37 | "/.travis.yml",
38 | "phpunit.xml",
39 | "/test",
40 | "/vendor"
41 | ]
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/kirby/composer.php:
--------------------------------------------------------------------------------
1 | kirby = kirby::instance();
11 | if(is_a($path, 'Media')) {
12 | parent::__construct($path->root(), $path->url());
13 | } else {
14 | parent::__construct(
15 | url::isAbsolute($path) ? null : $this->kirby->roots()->index() . DS . ltrim($path, DS),
16 | url::makeAbsolute($path)
17 | );
18 | }
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/kirby/core/avatar.php:
--------------------------------------------------------------------------------
1 | user = $user;
14 |
15 | // this should rather be coming from the user object
16 | $this->kirby = kirby::instance();
17 |
18 | // try to find the avatar
19 | if($file = f::resolve($this->kirby->roots()->avatars() . DS . $user->username(), ['jpg', 'jpeg', 'gif', 'png'])) {
20 | $filename = f::filename($file);
21 | } else {
22 | $filename = $user->username() . '.jpg';
23 | $file = $this->kirby->roots()->avatars() . DS . $filename;
24 | }
25 |
26 | parent::__construct($file, $this->kirby->urls()->avatars() . '/' . $filename);
27 |
28 | }
29 |
30 | }
--------------------------------------------------------------------------------
/kirby/kirby/component.php:
--------------------------------------------------------------------------------
1 | kirby = $kirby;
13 | }
14 |
15 | public function defaults() {
16 | return [];
17 | }
18 |
19 | public function configure() {
20 |
21 | }
22 |
23 | public function kirby() {
24 | return $this->kirby;
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/kirby/kirby/component/response.php:
--------------------------------------------------------------------------------
1 |
10 | * @link http://getkirby.com
11 | * @copyright Bastian Allgeier
12 | * @license http://getkirby.com/license
13 | */
14 | class Response extends \Kirby\Component {
15 |
16 | /**
17 | * Builds and return the response by various input
18 | *
19 | * @param mixed $response
20 | * @return mixed
21 | */
22 | public function make($response) {
23 |
24 | if(is_string($response)) {
25 | return $this->kirby->render(page($response));
26 | } else if(is_array($response)) {
27 | return $this->kirby->render(page($response[0]), $response[1]);
28 | } else if(is_a($response, 'Page')) {
29 | return $this->kirby->render($response);
30 | } else if(is_a($response, 'Response')) {
31 | return $response;
32 | } else {
33 | return null;
34 | }
35 |
36 | }
37 |
38 | }
--------------------------------------------------------------------------------
/kirby/kirby/component/snippet.php:
--------------------------------------------------------------------------------
1 |
12 | * @link http://getkirby.com
13 | * @copyright Bastian Allgeier
14 | * @license http://getkirby.com/license
15 | */
16 | class Snippet extends \Kirby\Component {
17 |
18 | /**
19 | * Returns a snippet file path by name
20 | *
21 | * @param string $name
22 | * @return string
23 | */
24 | public function file($name) {
25 | return $this->kirby->roots()->snippets() . DS . str_replace('/', DS, $name) . '.php';
26 | }
27 |
28 | /**
29 | * Renders the snippet with the given data
30 | *
31 | * @param string $name
32 | * @param array $data
33 | * @param boolean $return
34 | * @return string
35 | */
36 | public function render($name, $data = [], $return = false) {
37 | if(is_object($data)) $data = ['item' => $data];
38 | return tpl::load($this->kirby->registry->get('snippet', $name), $data, $return);
39 | }
40 |
41 | }
--------------------------------------------------------------------------------
/kirby/kirby/registry/component.php:
--------------------------------------------------------------------------------
1 |
10 | * @link http://getkirby.com
11 | * @copyright Bastian Allgeier
12 | * @license http://getkirby.com/license
13 | */
14 | class Component extends Entry {
15 |
16 | /**
17 | * Adds a new core component to Kirby
18 | *
19 | * This will directly call the component method of the
20 | * Kirby instance to register the component
21 | *
22 | * @param string $name The name of the component
23 | * @param string $class A valid component classname. Must be extend the according Kirby component type class
24 | */
25 | public function set($name, $class) {
26 | return $this->kirby->component($name, $class);
27 | }
28 |
29 | /**
30 | * Retreives a component from the Kirby component registry
31 | *
32 | * @param string $name
33 | * @return Kirby\Component
34 | */
35 | public function get($name) {
36 | return $this->kirby->component($name);
37 | }
38 |
39 | }
--------------------------------------------------------------------------------
/kirby/kirby/registry/hook.php:
--------------------------------------------------------------------------------
1 |
10 | * @link http://getkirby.com
11 | * @copyright Bastian Allgeier
12 | * @license http://getkirby.com/license
13 | */
14 | class Hook extends Entry {
15 |
16 | /**
17 | * Registers a new hook
18 | *
19 | * This will directly call the $kirby->hook() method
20 | * A hook has to be a valid closure
21 | *
22 | * @param string $name
23 | * @param Closure $callback
24 | * @return Closure
25 | */
26 | public function set($name, $callback) {
27 | return $this->kirby->hook($name, $callback);
28 | }
29 |
30 | }
--------------------------------------------------------------------------------
/kirby/kirby/registry/option.php:
--------------------------------------------------------------------------------
1 |
10 | * @link http://getkirby.com
11 | * @copyright Bastian Allgeier
12 | * @license http://getkirby.com/license
13 | */
14 | class Option extends Entry {
15 |
16 | /**
17 | * Sets a Kirby option
18 | *
19 | * This directly adds passed options to the
20 | * $kirby->options array and is just a convenient
21 | * way to do this through the registry
22 | *
23 | * @param string $key
24 | * @param mixed $value
25 | * @return mixed
26 | */
27 | public function set($key, $value) {
28 | return $this->kirby->options[$key] = $value;
29 | }
30 |
31 | /**
32 | * Retreives an option from the $kirby->$options array
33 | *
34 | * @param string $key
35 | * @param mixed $default
36 | * @return mixed
37 | */
38 | public function get($key, $default = null) {
39 | return $this->kirby->option($key, $default);
40 | }
41 |
42 | }
--------------------------------------------------------------------------------
/kirby/kirby/registry/route.php:
--------------------------------------------------------------------------------
1 |
10 | * @link http://getkirby.com
11 | * @copyright Bastian Allgeier
12 | * @license http://getkirby.com/license
13 | */
14 | class Route extends Entry {
15 |
16 | /**
17 | * Registers a new route
18 | *
19 | * This will directly add a route to
20 | * Kirby's route system, by calling $kirby->routes()
21 | *
22 | * @param string $attr
23 | */
24 | public function set($attr) {
25 | $this->kirby->routes([$attr]);
26 | }
27 |
28 | }
--------------------------------------------------------------------------------
/kirby/kirby/registry/tag.php:
--------------------------------------------------------------------------------
1 |
13 | * @link http://getkirby.com
14 | * @copyright Bastian Allgeier
15 | * @license http://getkirby.com/license
16 | */
17 | class Tag extends Entry {
18 |
19 | /**
20 | * Registers a new kirby tag array
21 | *
22 | * This will directly add the tag to the
23 | * kirbytext::$tags array.
24 | *
25 | * @param string $name
26 | * @param array $tag
27 | */
28 | public function set($name, $tag) {
29 | kirbytext::$tags[$name] = $tag;
30 | }
31 |
32 | /**
33 | * Retreives a registered kirby tag
34 | *
35 | * @param string $name
36 | * @return array
37 | */
38 | public function get($name) {
39 | return a::get(kirbytext::$tags, $name);
40 | }
41 |
42 | }
--------------------------------------------------------------------------------
/kirby/kirby/request/params.php:
--------------------------------------------------------------------------------
1 | toArray());
12 | }
13 |
14 | }
--------------------------------------------------------------------------------
/kirby/kirby/request/path.php:
--------------------------------------------------------------------------------
1 | data);
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/kirby/kirby/request/query.php:
--------------------------------------------------------------------------------
1 | parent(), $page->dirname());
13 | } else {
14 | throw new Exception('The page could not be found');
15 | }
16 | }
17 | }
--------------------------------------------------------------------------------
/kirby/lib/structure.php:
--------------------------------------------------------------------------------
1 | data[$key])) {
10 | return $this->data[$key];
11 | } else {
12 | $lowerkeys = array_change_key_case($this->data, CASE_LOWER);
13 | $lowerkey = strtolower($key);
14 | if(isset($lowerkeys[$lowerkey])) {
15 | return $lowerkeys[$lowerkey];
16 | }
17 | }
18 |
19 | return new Field($this->page, $key, null);
20 |
21 | }
22 |
23 | /**
24 | * Get formatted date fields
25 | *
26 | * @param string $format
27 | * @param string $field
28 | * @return string
29 | */
30 | public function date($format = null, $field = 'date') {
31 |
32 | if($timestamp = strtotime($this->get($field))) {
33 | if(is_null($format)) {
34 | return $timestamp;
35 | } else {
36 | return kirby()->options['date.handler']($format, $timestamp);
37 | }
38 | }
39 |
40 | }
41 |
42 | }
--------------------------------------------------------------------------------
/kirby/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | test
5 |
6 |
7 |
--------------------------------------------------------------------------------
/kirby/readme.md:
--------------------------------------------------------------------------------
1 | # Kirby v2 Core
2 |
3 | Please refer to the [Kirby Starterkit](http://github.com/getkirby-v2/starterkit)
4 | for a complete installation of Kirby 2.
5 |
6 | ## Kirby 2 - EOL
7 |
8 | Kirby 2 is an old version of Kirby CMS. We are supporting it with security updates until December 31st, 2020.
9 |
10 | For the latest version of Kirby, check out https://getkirby.com
11 |
12 | ## Author
13 | Bastian Allgeier
14 |
15 |
16 | ## Website
17 |
18 |
19 | ## License
20 |
21 |
--------------------------------------------------------------------------------
/kirby/system.php:
--------------------------------------------------------------------------------
1 | roots->index = $root;
17 | $kirby->roots->site = $rootSite;
18 | $kirby->roots->content = $rootContent;
19 |
20 | // render
21 | echo $kirby->launch();
--------------------------------------------------------------------------------
/kirby/test/ModelsTest.php:
--------------------------------------------------------------------------------
1 | true));
10 | $kirby->roots->content = TEST_ROOT_ETC . DS . 'content';
11 | $kirby->roots->site = TEST_ROOT_ETC . DS . 'site';
12 |
13 | // autoload all models
14 | $kirby->models();
15 |
16 | $site = new Site($kirby);
17 | $a = $site->find('a');
18 |
19 | $this->assertInstanceOf('Page', $a);
20 | $this->assertInstanceOf('APage', $a);
21 | $this->assertEquals('test', $a->customTestMethod());
22 |
23 | $b = $site->find('b');
24 |
25 | $this->assertInstanceOf('Page', $b);
26 | $this->assertFalse(is_a($b, 'APage'));
27 | $this->assertFalse('test' == $b->customTestMethod());
28 |
29 | }
30 |
31 | }
--------------------------------------------------------------------------------
/kirby/test/RegistryEntryTest.php:
--------------------------------------------------------------------------------
1 | kirbyInstance());
9 | }
10 |
11 | public function testConstruct() {
12 |
13 | $kirby = $this->kirbyInstance();
14 | $registry = new Kirby\Registry($kirby);
15 | $entry = new Kirby\Registry\Entry($registry, 'subtype');
16 |
17 | $this->assertInstanceOf('Kirby', $kirby);
18 | $this->assertInstanceOf('Kirby\\Registry', $entry->registry());
19 | $this->assertEquals('subtype', $entry->subtype());
20 |
21 | }
22 |
23 | }
--------------------------------------------------------------------------------
/kirby/test/etc/content/1-a/a.txt:
--------------------------------------------------------------------------------
1 | Title: A
2 | ----
3 | Date: 2012-12-12
4 | ----
5 | Created: 2012-12-12
6 | ----
--------------------------------------------------------------------------------
/kirby/test/etc/content/1-a/test.js:
--------------------------------------------------------------------------------
1 | alert('hello');
--------------------------------------------------------------------------------
/kirby/test/etc/content/2-b/b.txt:
--------------------------------------------------------------------------------
1 | Title: B
--------------------------------------------------------------------------------
/kirby/test/etc/content/error/error.txt:
--------------------------------------------------------------------------------
1 | Title: Error
--------------------------------------------------------------------------------
/kirby/test/etc/content/home/home.txt:
--------------------------------------------------------------------------------
1 | Title: Home
--------------------------------------------------------------------------------
/kirby/test/etc/content/site.txt:
--------------------------------------------------------------------------------
1 | Title: Kirby
2 |
3 | ----
4 |
5 | Author: Bastian Allgeier GmbH
6 |
7 | ----
8 |
9 | Description: This is a Kirby test file
10 |
11 | ----
12 |
13 | Keywords: Kirby, CMS, file-based
14 |
15 | ----
16 |
17 | Copyright: © 2009-(date: Year) (link: http://getkirby.com text: Kirby)
--------------------------------------------------------------------------------
/kirby/test/etc/content/tests/field-name-test/test.txt:
--------------------------------------------------------------------------------
1 | CamelCase: test
2 | ----
3 | lowercase: test
4 | ----
5 | UPPERCASE: test
6 | ----
7 | Name-With-Dashes: test
8 | ----
9 | Name_With_Underscores: test
--------------------------------------------------------------------------------
/kirby/test/etc/content/tests/file-extension-case-test/a.JSON:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/kirby/test/etc/content/tests/file-extension-case-test/a.JSON
--------------------------------------------------------------------------------
/kirby/test/etc/content/tests/file-extension-case-test/b.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/kirby/test/etc/content/tests/file-extension-case-test/b.json
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/gist/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/gist/test.txt:
--------------------------------------------------------------------------------
1 | (gist: https://gist.github.com/bastianallgeier/deae448c5913d79809a6)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-alt/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-alt/test.txt:
--------------------------------------------------------------------------------
1 | (image: http://getkirby.com/image.jpg alt: Kirby)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-caption/expected.html:
--------------------------------------------------------------------------------
1 | Kirby
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-caption/test.txt:
--------------------------------------------------------------------------------
1 | (image: http://getkirby.com/image.jpg caption: Kirby)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-link-popup/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-link-popup/test.txt:
--------------------------------------------------------------------------------
1 | (image: http://getkirby.com/image.jpg link: http://getkirby.com popup: true)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-link/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image-with-link/test.txt:
--------------------------------------------------------------------------------
1 | (image: http://getkirby.com/image.jpg link: http://getkirby.com)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/image/test.txt:
--------------------------------------------------------------------------------
1 | (image: http://getkirby.com/image.jpg)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/input-with-placeholder/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/input-with-placeholder/test.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-class/expected.html:
--------------------------------------------------------------------------------
1 | Kirby
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-class/test.txt:
--------------------------------------------------------------------------------
1 | (link: http://getkirby.com text: Kirby class: link)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-link-as-text/expected.html:
--------------------------------------------------------------------------------
1 | getkirby.com
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-link-as-text/test.txt:
--------------------------------------------------------------------------------
1 | (link: http://getkirby.com text: http://getkirby.com)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-popup/expected.html:
--------------------------------------------------------------------------------
1 | Kirby
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-popup/test.txt:
--------------------------------------------------------------------------------
1 | (link: http://getkirby.com text: Kirby popup: yes)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-rel/expected.html:
--------------------------------------------------------------------------------
1 | Kirby
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-rel/test.txt:
--------------------------------------------------------------------------------
1 | (link: http://getkirby.com text: Kirby rel: me)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-target/expected.html:
--------------------------------------------------------------------------------
1 | Kirby
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-with-target/test.txt:
--------------------------------------------------------------------------------
1 | (link: http://getkirby.com text: Kirby target: _blank)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-without-text/expected.html:
--------------------------------------------------------------------------------
1 | getkirby.com
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link-without-text/test.txt:
--------------------------------------------------------------------------------
1 | (link: http://getkirby.com)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link/expected.html:
--------------------------------------------------------------------------------
1 | Kirby
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/link/test.txt:
--------------------------------------------------------------------------------
1 | (link: http://getkirby.com text: Kirby)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/multiline-parenthesis/expected.html:
--------------------------------------------------------------------------------
1 | (
2 | multi line parenthesis
3 | should be rendered correctly
4 | )
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/multiline-parenthesis/test.txt:
--------------------------------------------------------------------------------
1 | (
2 | multi line parenthesis
3 | should be rendered correctly
4 | )
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/non-matching-parenthesises/expected.html:
--------------------------------------------------------------------------------
1 | lorem ipsum
2 | (lorem ipsum)
3 | lorem ipsum
4 | (
5 | lorem ipsum
6 | (lorem ipsum)
7 | lorem ipsum
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/non-matching-parenthesises/test.txt:
--------------------------------------------------------------------------------
1 | lorem ipsum
2 |
3 | (lorem ipsum)
4 |
5 | lorem ipsum
6 |
7 | (
8 |
9 | lorem ipsum
10 |
11 | (lorem ipsum)
12 |
13 | lorem ipsum
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/script-tag/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/script-tag/test.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/tag-in-parenthesis/expected.html:
--------------------------------------------------------------------------------
1 | (test Kirby )
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/tag-in-parenthesis/test.txt:
--------------------------------------------------------------------------------
1 | (test (link: http://getkirby.com text: Kirby class: link))
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/tel/expected.html:
--------------------------------------------------------------------------------
1 | +49 789 22323
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/tel/test.txt:
--------------------------------------------------------------------------------
1 | (tel: +49 789 22323)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/twitter/expected.html:
--------------------------------------------------------------------------------
1 | @bastianallgeier
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/twitter/test.txt:
--------------------------------------------------------------------------------
1 | (twitter: bastianallgeier)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/vimeo/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/vimeo/test.txt:
--------------------------------------------------------------------------------
1 | (vimeo: https://vimeo.com/115805751)
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/youtube/expected.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kirby/test/etc/kirbytext/youtube/test.txt:
--------------------------------------------------------------------------------
1 | (youtube: https://www.youtube.com/watch?v=VhP7ZzZysQg)
--------------------------------------------------------------------------------
/kirby/test/etc/site/accounts/test.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | username: test
4 | email: test@getkirby.com
5 | password: >
6 | $2a$10$kpBxQZ4Ib4hCLGDa7T3GYOpdR1JdB7dA2yXBorVJJrjBE8MRs.hQy
7 | language: en
8 | role: admin
9 | firstname: Test
10 | lastname: User
--------------------------------------------------------------------------------
/kirby/test/etc/site/cache/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/kirby/test/etc/site/cache/.gitkeep
--------------------------------------------------------------------------------
/kirby/test/etc/site/config/config.php:
--------------------------------------------------------------------------------
1 | roots->content = TEST_ROOT_ETC . DS . 'content';
11 | $kirby->roots->accounts = TEST_ROOT_ETC . DS . 'site' . DS . 'accounts';
12 | return $kirby;
13 |
14 | }
15 |
16 | public function siteInstance($kirby = null, $options = array()) {
17 |
18 | $kirby = !is_null($kirby) ? $kirby : $this->kirbyInstance($options);
19 | $site = new Site($kirby);
20 |
21 | return $site;
22 |
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/kirby/vendor/autoload.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/getkirby/toolkit/bootstrap.php',
10 | '4d43cb4a92fc9083dc76dd8887c0a0ef' => $baseDir . '/composer.php',
11 | );
12 |
--------------------------------------------------------------------------------
/kirby/vendor/composer/autoload_namespaces.php:
--------------------------------------------------------------------------------
1 | array($vendorDir . '/erusev/parsedown-extra'),
10 | 'Parsedown' => array($vendorDir . '/erusev/parsedown'),
11 | 'Michelf' => array($vendorDir . '/michelf/php-smartypants'),
12 | );
13 |
--------------------------------------------------------------------------------
/kirby/vendor/composer/autoload_psr4.php:
--------------------------------------------------------------------------------
1 | array($vendorDir . '/filp/whoops/src/Whoops'),
10 | 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
11 | );
12 |
--------------------------------------------------------------------------------
/kirby/vendor/composer/platform_check.php:
--------------------------------------------------------------------------------
1 | = 70200)) {
8 | $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.';
9 | }
10 |
11 | if ($issues) {
12 | if (!headers_sent()) {
13 | header('HTTP/1.1 500 Internal Server Error');
14 | }
15 | if (!ini_get('display_errors')) {
16 | if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
17 | fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
18 | } elseif (!headers_sent()) {
19 | echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
20 | }
21 | }
22 | trigger_error(
23 | 'Composer detected issues in your platform: ' . implode(' ', $issues),
24 | E_USER_ERROR
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 |
3 | php:
4 | - 5.6
5 | - 5.5
6 | - 5.4
7 | - 5.3
8 |
9 | install:
10 | - composer self-update
11 | - composer install
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2013 Emanuil Rusev, erusev.com
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "erusev/parsedown-extra",
3 | "description": "An extension of Parsedown that adds support for Markdown Extra.",
4 | "keywords": ["markdown", "markdown extra", "parser", "parsedown"],
5 | "homepage": "https://github.com/erusev/parsedown-extra",
6 | "type": "library",
7 | "license": "MIT",
8 | "authors": [
9 | {
10 | "name": "Emanuil Rusev",
11 | "email": "hello@erusev.com",
12 | "homepage": "http://erusev.com"
13 | }
14 | ],
15 | "require": {
16 | "erusev/parsedown": "~1.4"
17 | },
18 | "autoload": {
19 | "psr-0": {"ParsedownExtra": ""}
20 | }
21 | }
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/phpunit.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | test/ParsedownExtraTest.php
6 |
7 |
8 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/ParsedownExtraTest.php:
--------------------------------------------------------------------------------
1 | The HTML specification
2 | is maintained by the W3C .
3 | The abbreviation ML is contained in the abbreviation HTML .
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/abbreviation.md:
--------------------------------------------------------------------------------
1 | The HTML specification
2 | is maintained by the W3C.
3 | The abbreviation ML is contained in the abbreviation HTML.
4 |
5 | *[HTML]: Hyper Text Markup Language
6 | *[W3C]: World Wide Web Consortium
7 | *[ML]: Markup Language
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/compound_footnote.html:
--------------------------------------------------------------------------------
1 | footnote and another one
2 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/compound_footnote.md:
--------------------------------------------------------------------------------
1 | footnote [^1] and another one [^2]
2 |
3 | [^1]: line 1
4 | line 2
5 |
6 | > quote
7 |
8 | another paragraph
9 |
10 | [^2]:
11 | paragraph
12 |
13 | another paragraph
14 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/definition_list.html:
--------------------------------------------------------------------------------
1 |
2 | Term 1
3 | one
4 | two
5 | extra line
6 | Term 2
7 | lazy
8 | line
9 | multiple
10 | paragraphs
11 | nested
12 | code block
13 |
14 | quote
15 | block
16 |
17 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/definition_list.md:
--------------------------------------------------------------------------------
1 | Term 1
2 | : one
3 | : two
4 | extra line
5 |
6 | Term 2
7 |
8 | : lazy
9 | line
10 |
11 | : multiple
12 |
13 | paragraphs
14 |
15 | : nested
16 |
17 | code block
18 |
19 | > quote
20 | > block
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/footnote.html:
--------------------------------------------------------------------------------
1 | first second .
2 | first second .
3 | second time
4 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/footnote.md:
--------------------------------------------------------------------------------
1 | first [^1] second [^2].
2 |
3 | [^1]: one
4 | [^2]: two
5 |
6 | first [^a] second [^b].
7 |
8 | [^a]: one
9 | [^b]: two
10 |
11 | second time [^1]
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.html:
--------------------------------------------------------------------------------
1 |
2 |
markdown
3 |
This is another paragraph. It contains inline markup .
4 |
5 | _no markdown_
6 |
7 |
8 |
9 |
15 |
16 |
17 | _no markdown_
18 |
21 |
22 |
23 |
24 | _no markdown_
25 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.md:
--------------------------------------------------------------------------------
1 |
2 | _markdown_
3 |
4 | This is another paragraph. It contains
inline markup .
5 |
6 | _no markdown_
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | _markdown_
14 |
15 | _markdown_
16 |
17 |
18 |
19 | ---
20 |
21 |
22 | _no markdown_
23 |
24 | _markdown_
25 |
26 |
27 |
28 | ---
29 |
30 |
31 | _no markdown_
32 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/special_attributes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | The Site
4 | The Site
5 | link
6 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown-extra/test/data/special_attributes.md:
--------------------------------------------------------------------------------
1 | Header 1 {#header1}
2 | ========
3 |
4 | ## Header 2 ## {#header2}
5 |
6 | ## The Site ## {.main}
7 |
8 | ## The Site ## {.main .shine #the-site}
9 |
10 | [link](http://parsedown.org) {.primary #link .upper-case}
11 |
12 |  {#logo .big}
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2013-2018 Emanuil Rusev, erusev.com
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/kirby/vendor/erusev/parsedown/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "erusev/parsedown",
3 | "description": "Parser for Markdown.",
4 | "keywords": ["markdown", "parser"],
5 | "homepage": "http://parsedown.org",
6 | "type": "library",
7 | "license": "MIT",
8 | "authors": [
9 | {
10 | "name": "Emanuil Rusev",
11 | "email": "hello@erusev.com",
12 | "homepage": "http://erusev.com"
13 | }
14 | ],
15 | "require": {
16 | "php": ">=5.3.0",
17 | "ext-mbstring": "*"
18 | },
19 | "require-dev": {
20 | "phpunit/phpunit": "^4.8.35"
21 | },
22 | "autoload": {
23 | "psr-0": {"Parsedown": ""}
24 | },
25 | "autoload-dev": {
26 | "psr-0": {
27 | "TestParsedown": "test/",
28 | "ParsedownTest": "test/",
29 | "CommonMarkTest": "test/",
30 | "CommonMarkTestWeak": "test/"
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/kirby/vendor/filp/whoops/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # 2.1.0
2 |
3 | * Add a `SystemFacade` to allow clients to override Whoops behavior.
4 | * Show frame arguments in `PrettyPageHandler`.
5 | * Highlight the line with the error.
6 | * Add icons to search on Google and Stack Overflow.
7 |
8 | # 2.0.0
9 |
10 | Backwards compatibility breaking changes:
11 |
12 | * `Run` class is now `final`. If you inherited from `Run`, please now instead use a custom `SystemFacade` injected into the `Run` constructor, or contribute your changes to our core.
13 | * PHP < 5.5 support dropped.
14 |
--------------------------------------------------------------------------------
/kirby/vendor/filp/whoops/LICENSE.md:
--------------------------------------------------------------------------------
1 | #The MIT License
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/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\Exception\Inspector;
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 Inspector $inspector
33 | * @return void
34 | */
35 | public function setInspector(Inspector $inspector);
36 | }
37 |
--------------------------------------------------------------------------------
/kirby/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php:
--------------------------------------------------------------------------------
1 |
4 | $frame): ?>
5 |
6 |
7 |
8 | breakOnDelimiter('\\', $tpl->escape($frame->getClass() ?: '')) ?>
9 | breakOnDelimiter('\\', $tpl->escape($frame->getFunction() ?: '')) ?>
10 |
11 |
12 |
13 | getFile() ? $tpl->breakOnDelimiter('/', $tpl->shorten($tpl->escape($frame->getFile()))) : '<#unknown>' ?>getLine() ?>
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/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 |
21 |
--------------------------------------------------------------------------------
/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/layout.html.php:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 | escape($page_title) ?>
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | render($panel_left_outer) ?>
21 |
22 | render($panel_details_outer) ?>
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/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) ?>
2 | render($frames_description) ?>
3 | render($frames_container) ?>
--------------------------------------------------------------------------------
/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/getkirby/toolkit/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 | dist: trusty
3 | sudo: false
4 | php:
5 | - 7.2
6 | - 7.3
7 | - 7.4
8 | matrix:
9 | fast_finish: true
10 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "getkirby/toolkit",
3 | "description": "The Kirby 2 toolkit is a set of handy classes and helpers which make your life with PHP easier.",
4 | "keywords": ["toolkit"],
5 | "homepage": "http://toolkit.getkirby.com",
6 | "license": "MIT",
7 | "authors": [
8 | {
9 | "name": "Bastian Allgeier",
10 | "email": "bastian@getkirby.com",
11 | "homepage": "http://bastianallgeier.com"
12 | }
13 | ],
14 | "support": {
15 | "email": "support@getkirby.com",
16 | "issues": "https://github.com/getkirby/toolkit/issues",
17 | "forum": "https://forum.getkirby.com",
18 | "source": "https://github.com/getkirby/toolkit"
19 | },
20 | "autoload": {
21 | "files": ["bootstrap.php"]
22 | },
23 | "require": {
24 | "php": ">=7.2.0"
25 | },
26 | "archive": {
27 | "exclude": ["/.gitignore", "/.travis.yml", "/phpunit.xml", "/test"]
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/lib/c.php:
--------------------------------------------------------------------------------
1 |
11 | * @link http://getkirby.com
12 | * @copyright Bastian Allgeier
13 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
14 | */
15 | class C extends Silo {
16 | public static $data = array();
17 | }
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/lib/error.php:
--------------------------------------------------------------------------------
1 |
8 | * @link http://getkirby.com
9 | * @copyright Bastian Allgeier
10 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
11 | */
12 | class Error extends Exception {
13 |
14 | public function message() {
15 | return $this->message;
16 | }
17 |
18 | public function code() {
19 | return $this->code;
20 | }
21 |
22 | public function __toString() {
23 | return $this->message;
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/lib/l.php:
--------------------------------------------------------------------------------
1 |
11 | * @link http://getkirby.com
12 | * @copyright Bastian Allgeier
13 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
14 | */
15 | class L extends Silo {
16 |
17 | public static $data = array();
18 | public static $locale = 'en_US';
19 |
20 | public static function get($key = null, $data = null, $locale = null) {
21 |
22 | // get all keys
23 | if($key === null) {
24 | return parent::get();
25 |
26 | // old default value behavior
27 | } else if(!is_array($data)) {
28 | return parent::get($key, $data);
29 |
30 | // string templates
31 | } else if(is_array($data)) {
32 | return str::template(parent::get($key), $data);
33 | }
34 |
35 | }
36 |
37 | }
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/lib/timer.php:
--------------------------------------------------------------------------------
1 |
8 | * @link http://getkirby.com
9 | * @copyright Bastian Allgeier
10 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
11 | */
12 | class Timer {
13 |
14 | public static $time = null;
15 |
16 | public static function start() {
17 | $time = explode(' ', microtime());
18 | static::$time = (double)$time[1] + (double)$time[0];
19 | }
20 |
21 | public static function stop() {
22 | $time = explode(' ', microtime());
23 | $time = (double)$time[1] + (double)$time[0];
24 | $timer = static::$time;
25 | return round(($time-$timer), 5);
26 | }
27 |
28 | }
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/lib/toolkit.php:
--------------------------------------------------------------------------------
1 |
8 | * @link http://getkirby.com
9 | * @copyright Bastian Allgeier
10 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
11 | */
12 | class Toolkit {
13 |
14 | public static $version = '2.5.14';
15 |
16 | public static function version() {
17 | return static::$version;
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/lib/tpl.php:
--------------------------------------------------------------------------------
1 |
10 | * @link http://getkirby.com
11 | * @copyright Bastian Allgeier
12 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
13 | */
14 | class Tpl extends Silo {
15 |
16 | public static $data = array();
17 |
18 | public static function load($_file, $_data = array(), $_return = true) {
19 | if(!file_exists($_file)) return false;
20 | ob_start();
21 | extract(array_merge(static::$data, (array)$_data));
22 | require($_file);
23 | $_content = ob_get_contents();
24 | ob_end_clean();
25 | if($_return) return $_content;
26 | echo $_content;
27 | }
28 |
29 | }
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | test
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/readme.md:
--------------------------------------------------------------------------------
1 | # Kirby v2 Toolkit
2 |
3 | The Kirby 2 toolkit is a set of handy classes and helpers which make your life with PHP easier.
4 |
5 | ## Kirby 2 - EOL
6 |
7 | Kirby 2 is an old version of Kirby CMS. We are supporting it with security updates until December 31st, 2020.
8 |
9 | For the latest version of Kirby, check out https://getkirby.com
10 |
11 | ## License
12 |
13 |
14 |
15 | ## Author
16 |
17 | Bastian Allgeier
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/CTest.php:
--------------------------------------------------------------------------------
1 | assertEquals('testvalue', c::get('testvar'));
16 | $this->assertEquals('defaultvalue', c::get('nonexistentvar', 'defaultvalue'));
17 |
18 | }
19 |
20 | public function testSet() {
21 |
22 | c::set('anothervar', 'anothervalue');
23 | c::set('testvar', 'overwrittenvalue');
24 |
25 | $this->assertEquals('anothervalue', c::get('anothervar'));
26 | $this->assertEquals('overwrittenvalue', c::get('testvar'));
27 |
28 | c::set(array(
29 | 'var1' => 'value1',
30 | 'var2' => 'value2'
31 | ));
32 |
33 | $this->assertEquals('value1', c::get('var1'));
34 | $this->assertEquals('value2', c::get('var2'));
35 |
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/PasswordTest.php:
--------------------------------------------------------------------------------
1 | pw = 'mysupersecretpassword';
13 | $this->hash = Password::hash($this->pw);
14 |
15 | }
16 |
17 | public function testHash() {
18 | $this->assertTrue(is_string($this->hash));
19 | }
20 |
21 | public function testMatch() {
22 |
23 | $this->assertTrue(Password::match($this->pw, $this->hash));
24 | $this->assertFalse(Password::match('myincorrectpassword', $this->hash));
25 |
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/ServerTest.php:
--------------------------------------------------------------------------------
1 | assertTrue(is_array(server::get()));
10 | $this->assertEquals($_SERVER, server::get());
11 |
12 | }
13 |
14 | public function testSanitization() {
15 |
16 | $_SERVER['HTTP_HOST'] = '';
17 | $_SERVER['SERVER_NAME'] = '';
18 |
19 | $this->assertEquals('alertxss', server::get('HTTP_HOST'));
20 | $this->assertEquals('alertxss', server::get('SERVER_NAME'));
21 |
22 | $_SERVER['HTTP_HOST'] = '127.0.0.1';
23 | $_SERVER['SERVER_NAME'] = '127.0.0.1';
24 |
25 | $this->assertEquals('127.0.0.1', server::get('HTTP_HOST'));
26 | $this->assertEquals('127.0.0.1', server::get('SERVER_NAME'));
27 |
28 | $_SERVER['SERVER_PORT'] = '999';
29 |
30 | $this->assertEquals('999', server::get('SERVER_PORT'));
31 |
32 | }
33 |
34 | }
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/TimerTest.php:
--------------------------------------------------------------------------------
1 | assertTrue(is_float(timer::stop()));
13 |
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/VisitorTest.php:
--------------------------------------------------------------------------------
1 | assertEquals(false, visitor::ip());
11 | }
12 |
13 | public function testAcceptedLanguage() {
14 | $this->assertEquals(null, visitor::acceptedLanguage());
15 | }
16 |
17 | }
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/XmlTest.php:
--------------------------------------------------------------------------------
1 | string = 'Süper Önencœded ßtring';
11 | }
12 |
13 | public function testEncodeDecode() {
14 |
15 | $expected = 'Süper Önencœded ßtring';
16 |
17 | $this->assertEquals($expected, xml::encode($this->string));
18 | $this->assertEquals($this->string, xml::decode($expected));
19 |
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/etc/content.php:
--------------------------------------------------------------------------------
1 | My test content is
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/etc/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/kirby/vendor/getkirby/toolkit/test/etc/images/favicon.png
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/etc/system/executable.sh:
--------------------------------------------------------------------------------
1 | # This is an executable file used for the SystemTest.php
2 | if [ "$1" = "fail" ]
3 | then
4 | echo "This probably failed. Or so."
5 | exit 42
6 | elif [ "$1" = "something" ]
7 | then
8 | echo "Something is sometimes not that cool. But anyway."
9 | exit 0
10 | else
11 | echo "Some dummy output just to test execution of this file."
12 | exit 0
13 | fi
14 |
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/etc/system/nonexecutable.sh:
--------------------------------------------------------------------------------
1 | # This is a non-executable file used for the SystemTest.php
--------------------------------------------------------------------------------
/kirby/vendor/getkirby/toolkit/test/lib/bootstrap.php:
--------------------------------------------------------------------------------
1 | = 6
14 | if(class_exists('\PHPUnit\Framework\TestCase') && !class_exists('\PHPUnit_Framework_TestCase')) {
15 | class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase');
16 | }
17 |
18 | // include the kirby toolkit bootstrapper file
19 | require_once(dirname(TEST_ROOT) . DIRECTORY_SEPARATOR . 'bootstrap.php');
20 |
--------------------------------------------------------------------------------
/kirby/vendor/michelf/php-smartypants/Michelf/SmartyPants.inc.php:
--------------------------------------------------------------------------------
1 |
25 |
26 |
27 |
28 | PHP Smartypants Lib - Readme
29 |
30 |
31 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/kirby/vendor/michelf/php-smartypants/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "michelf/php-smartypants",
3 | "type": "library",
4 | "description": "PHP SmartyPants",
5 | "homepage": "https://michelf.ca/projects/php-smartypants/",
6 | "keywords": ["quotes", "dashes", "spaces", "typography", "typographer"],
7 | "license": "BSD-3-Clause",
8 | "authors": [
9 | {
10 | "name": "Michel Fortin",
11 | "email": "michel.fortin@michelf.ca",
12 | "homepage": "https://michelf.ca/",
13 | "role": "Developer"
14 | },
15 | {
16 | "name": "John Gruber",
17 | "homepage": "https://daringfireball.net/"
18 | }
19 | ],
20 | "require": {
21 | "php": ">=5.3.0"
22 | },
23 | "autoload": {
24 | "psr-0": { "Michelf": "" }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/kirby/vendor/psr/log/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2012 PHP Framework Interoperability Group
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/kirby/vendor/psr/log/Psr/Log/InvalidArgumentException.php:
--------------------------------------------------------------------------------
1 | logger = $logger;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/kirby/vendor/psr/log/Psr/Log/NullLogger.php:
--------------------------------------------------------------------------------
1 | logger) { }`
11 | * blocks.
12 | */
13 | class NullLogger extends AbstractLogger
14 | {
15 | /**
16 | * Logs with an arbitrary level.
17 | *
18 | * @param mixed $level
19 | * @param string $message
20 | * @param array $context
21 | *
22 | * @return void
23 | *
24 | * @throws \Psr\Log\InvalidArgumentException
25 | */
26 | public function log($level, $message, array $context = array())
27 | {
28 | // noop
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/kirby/vendor/psr/log/Psr/Log/Test/DummyTest.php:
--------------------------------------------------------------------------------
1 | =5.3.0"
15 | },
16 | "autoload": {
17 | "psr-4": {
18 | "Psr\\Log\\": "Psr/Log/"
19 | }
20 | },
21 | "extra": {
22 | "branch-alias": {
23 | "dev-master": "1.1.x-dev"
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/panel/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /assets/scss/.sass-cache
3 | /node_modules
--------------------------------------------------------------------------------
/panel/.tx/config:
--------------------------------------------------------------------------------
1 | [main]
2 | host = https://www.transifex.com
3 |
4 | [panel.core]
5 | file_filter = app/translations//core.json
6 | source_lang = en
7 | type = KEYVALUEJSON
--------------------------------------------------------------------------------
/panel/app/controllers/autocomplete.php:
--------------------------------------------------------------------------------
1 | result();
10 | } catch(Exception $e) {
11 | $result = array();
12 | }
13 |
14 | return $this->json(array(
15 | 'data' => $result
16 | ));
17 |
18 | }
19 |
20 | }
--------------------------------------------------------------------------------
/panel/app/controllers/dashboard.php:
--------------------------------------------------------------------------------
1 | screen('dashboard/index', panel()->site(), array(
8 | 'widgets' => new Kirby\Panel\Widgets()
9 | ));
10 |
11 | }
12 |
13 | }
--------------------------------------------------------------------------------
/panel/app/controllers/error.php:
--------------------------------------------------------------------------------
1 | modal('error', array(
13 | 'text' => $text,
14 | 'back' => url::last(),
15 | ));
16 | } else {
17 | return $this->screen('error/index', 'error', array(
18 | 'text' => $text
19 | ));
20 | }
21 |
22 | }
23 |
24 | }
--------------------------------------------------------------------------------
/panel/app/controllers/options.php:
--------------------------------------------------------------------------------
1 | site();
9 |
10 | $sidebar = $site->sidebar();
11 | $form = $site->form('edit', function($form) use($site, $self) {
12 |
13 | try {
14 |
15 | // validate all fields
16 | $form->validate();
17 |
18 | // stop at invalid fields
19 | if(!$form->isValid()) {
20 | throw new Exception(l('pages.show.error.form'));
21 | }
22 |
23 | $site->update($form->serialize());
24 | $self->notify(':)');
25 | return $self->redirect('options');
26 | } catch(Exception $e) {
27 | return $self->alert($e->getMessage());
28 | }
29 |
30 | });
31 |
32 | return $this->screen('options/index', $site, array(
33 | 'site' => $site,
34 | 'form' => $form,
35 | 'files' => $sidebar->files(),
36 | 'license' => panel()->license(),
37 | 'uploader' => $this->snippet('uploader', array('url' => $site->url('upload')))
38 | ));
39 |
40 | }
41 |
42 | }
--------------------------------------------------------------------------------
/panel/app/controllers/search.php:
--------------------------------------------------------------------------------
1 | view('search/results', array(
12 | 'pages' => $search->pages(),
13 | 'users' => $search->users(),
14 | ));
15 |
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/panel/app/fields/email/email.php:
--------------------------------------------------------------------------------
1 | type = 'email';
8 | $this->icon = 'envelope';
9 | $this->label = l::get('fields.email.label', 'Email');
10 | $this->placeholder = l::get('fields.email.placeholder', 'mail@example.com');
11 | $this->autocomplete = true;
12 |
13 | }
14 |
15 | public function input() {
16 |
17 | $input = parent::input();
18 |
19 | if($this->autocomplete) {
20 | $input->attr('autocomplete', 'off');
21 | $input->data(array(
22 | 'field' => 'autocomplete',
23 | 'url' => panel()->urls()->api() . '/autocomplete/emails?_csrf=' . panel()->csrf()
24 | ));
25 | }
26 |
27 | return $input;
28 |
29 | }
30 |
31 | public function validate() {
32 | return v::email($this->result());
33 | }
34 |
35 | }
--------------------------------------------------------------------------------
/panel/app/fields/filename/filename.php:
--------------------------------------------------------------------------------
1 | addClass('field-icon');
12 | $icon->append('.' . $this->extension . ' ');
13 |
14 | return $icon;
15 |
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/panel/app/fields/headline/assets/css/headline.css:
--------------------------------------------------------------------------------
1 | .field-with-headline:first-child {
2 | padding-top: 0;
3 | }
4 | .field-with-headline {
5 | padding-top: 3em;
6 | }
7 | .field-with-headline .hgroup span:empty::before {
8 | content: '\a0';
9 | }
10 |
11 | .field-with-headline-numbered {
12 | counter-increment: count;
13 | }
14 | .field-with-headline-numbered .hgroup span {
15 | padding-left: 1.5em;
16 | }
17 | .field-with-headline-numbered .hgroup::before {
18 | position: absolute;
19 | content: counter(count, decimal-leading-zero);
20 | left: 0;
21 | color: #8dae28;
22 | font-weight: 400;
23 | }
24 |
--------------------------------------------------------------------------------
/panel/app/fields/headline/headline.php:
--------------------------------------------------------------------------------
1 | array(
9 | 'headline.css'
10 | )
11 | );
12 |
13 | public function result() {
14 | return null;
15 | }
16 |
17 | public function label() {
18 | return null;
19 | }
20 |
21 | public function content() {
22 | return '' . html($this->i18n($this->label)) . ' ';
23 | }
24 |
25 | public function element() {
26 | $element = parent::element();
27 | $element->addClass('field-with-headline');
28 | if($this->numbered()) $element->addClass('field-with-headline-numbered');
29 | return $element;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/panel/app/fields/hidden/hidden.php:
--------------------------------------------------------------------------------
1 | 'hidden',
8 | 'name' => $this->name(),
9 | 'value' => $this->value()
10 | ));
11 | }
12 |
13 | }
--------------------------------------------------------------------------------
/panel/app/fields/image/assets/css/image.css:
--------------------------------------------------------------------------------
1 | .field-with-image select {
2 | margin-left: 3rem;
3 | }
4 | .field-with-image .input-preview {
5 | position: absolute;
6 | top: 2px;
7 | left: 2px;
8 | bottom: 2px;
9 | width: 2.75em;
10 | background: url(../images/pattern.png);
11 | }
12 | .field-with-image .input-preview figure {
13 | display: block;
14 | width: 100%;
15 | height: 100%;
16 | background-repeat: no-repeat;
17 | background-position: center center;
18 | background-size: cover;
19 | }
--------------------------------------------------------------------------------
/panel/app/fields/info/info.php:
--------------------------------------------------------------------------------
1 | addClass('field-with-icon');
14 | return $element;
15 | }
16 |
17 | public function input() {
18 | return '' . kirbytext($this->i18n($this->text())) . '
';
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/panel/app/fields/input/input.php:
--------------------------------------------------------------------------------
1 | addClass('input');
11 | $input->attr(array(
12 | 'type' => $this->type(),
13 | 'value' => '',
14 | 'required' => $this->required(),
15 | 'name' => $this->name(),
16 | 'autocomplete' => $this->autocomplete() === false ? 'off' : 'on',
17 | 'autofocus' => $this->autofocus(),
18 | 'placeholder' => $this->i18n($this->placeholder()),
19 | 'readonly' => $this->readonly(),
20 | 'disabled' => $this->disabled(),
21 | 'id' => $this->id()
22 | ));
23 |
24 | if(!is_array($this->value())) {
25 | $input->val($this->value());
26 | }
27 |
28 | if($this->readonly()) {
29 | $input->attr('tabindex', '-1');
30 | $input->addClass('input-is-readonly');
31 | }
32 |
33 | return $input;
34 |
35 | }
36 |
37 | }
--------------------------------------------------------------------------------
/panel/app/fields/line/line.php:
--------------------------------------------------------------------------------
1 | ';
11 | }
12 |
13 | public function element() {
14 | $element = parent::element();
15 | $element->addClass('field-with-line');
16 | return $element;
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/panel/app/fields/number/number.php:
--------------------------------------------------------------------------------
1 | type = 'number';
8 | $this->label = l::get('fields.number.label', 'Number');
9 | $this->placeholder = l::get('fields.number.placeholder', '#');
10 | $this->step = 1;
11 | $this->min = false;
12 | $this->max = false;
13 |
14 | }
15 |
16 | public function input() {
17 | $input = parent::input();
18 | $input->attr('step', $this->step);
19 | $input->attr('min', $this->min);
20 | $input->attr('max', $this->max);
21 | return $input;
22 | }
23 |
24 | public function validate() {
25 |
26 | if(!v::num($this->result())) return false;
27 |
28 | if($this->validate and is_array($this->validate)) {
29 | return parent::validate();
30 | } else {
31 | if(is_numeric($this->min) and !v::min($this->result(), $this->min)) return false;
32 | if(is_numeric($this->max) and !v::max($this->result(), $this->max)) return false;
33 | }
34 |
35 | return true;
36 |
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/panel/app/fields/page/page.php:
--------------------------------------------------------------------------------
1 | icon = 'chain';
8 | $this->label = l::get('fields.page.label', 'Page');
9 | $this->placeholder = l::get('fields.page.placeholder', 'path/to/page');
10 |
11 | }
12 |
13 | public function input() {
14 |
15 | $input = parent::input();
16 | $input->data(array(
17 | 'field' => 'autocomplete',
18 | 'url' => panel()->urls()->api() . '/autocomplete/uris'
19 | ));
20 |
21 | return $input;
22 |
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/panel/app/fields/password/password.php:
--------------------------------------------------------------------------------
1 | type = 'password';
10 | $this->icon = 'key';
11 | $this->label = l('fields.password.label', 'Password');
12 |
13 | }
14 |
15 | public function input() {
16 |
17 | $input = parent::input();
18 |
19 | if($this->suggestion) {
20 | $input->data(array(
21 | 'field' => 'passwordSuggestion'
22 | ));
23 | }
24 |
25 | return $input;
26 |
27 | }
28 |
29 | public function help() {
30 | if($this->suggestion and !$this->readonly) {
31 | $this->help = $this->suggestion();
32 | }
33 | return parent::help();
34 | }
35 |
36 | public function suggestion() {
37 | return '
';
38 | }
39 |
40 | }
--------------------------------------------------------------------------------
/panel/app/fields/radio/radio.php:
--------------------------------------------------------------------------------
1 | options();
10 | if(is_array($options)) {
11 | reset($options);
12 | $value = key($options);
13 | }
14 | }
15 | return $value;
16 | }
17 |
18 | public function input() {
19 |
20 | $val = func_get_arg(0);
21 | $input = parent::input();
22 | $input->addClass('radio');
23 | $input->attr('type', 'radio');
24 | $input->val($val);
25 |
26 | if($this->readonly) {
27 | $input->attr('disabled', true);
28 | }
29 |
30 | $input->attr('checked', $val == $this->value());
31 | return $input;
32 |
33 | }
34 |
35 | public function item($value, $text) {
36 | $item = parent::item($value, $text);
37 | $item->addClass('input-with-radio');
38 | return $item;
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/panel/app/fields/structure/forms/add.php:
--------------------------------------------------------------------------------
1 | fields(), array(), $structure->field());
6 | $form->cancel($model);
7 | $form->buttons->submit->value = l('add');
8 |
9 | return $form;
10 |
11 | };
--------------------------------------------------------------------------------
/panel/app/fields/structure/forms/delete.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'fields.structure.delete.label',
8 | 'type' => 'info',
9 | )
10 | ));
11 |
12 | $form->style('delete');
13 | $form->cancel($model);
14 |
15 | return $form;
16 |
17 | };
--------------------------------------------------------------------------------
/panel/app/fields/structure/forms/update.php:
--------------------------------------------------------------------------------
1 | fields(), $entry->toArray(), $structure->field());
6 |
7 | $form->cancel($model);
8 | $form->buttons->submit->value = l('ok');
9 |
10 | return $form;
11 |
12 | };
--------------------------------------------------------------------------------
/panel/app/fields/structure/styles/items.php:
--------------------------------------------------------------------------------
1 | entries() as $entry): ?>
2 |
3 |
4 | entry($entry) ?>
5 |
6 | readonly()): ?>
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/panel/app/fields/structure/template.php:
--------------------------------------------------------------------------------
1 |
6 |
7 | headline() ?>
8 |
9 |
10 |
11 | entries()->count()): ?>
12 |
15 |
16 | style() . '.php') ?>
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/panel/app/fields/structure/views/add.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/fields/structure/views/delete.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/fields/structure/views/update.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/fields/tel/tel.php:
--------------------------------------------------------------------------------
1 | type = 'tel';
7 | $this->icon = 'phone';
8 | $this->label = l::get('fields.tel.label', 'Phone');
9 | }
10 |
11 | }
--------------------------------------------------------------------------------
/panel/app/fields/text/assets/css/counter.css:
--------------------------------------------------------------------------------
1 | .field-counter {
2 | position: absolute;
3 | right: 0;
4 | top: 0;
5 | text-align: right;
6 | font-size: .9em;
7 | line-height: 1.66666666666667;
8 | }
9 | .field-counter.outside-range {
10 | color: #b3000a;
11 | }
--------------------------------------------------------------------------------
/panel/app/fields/text/assets/js/counter.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.counter = function() {
4 |
5 | return this.each(function() {
6 |
7 | var counter = $(this);
8 |
9 | if(counter.data('counter')) {
10 | return counter;
11 | }
12 |
13 | var field = counter.parent('.field').find('.input');
14 | var length = $.trim(field.val()).length;
15 | var max = field.data('max');
16 | var min = field.data('min');
17 |
18 | field.keyup(function() {
19 | length = $.trim(field.val()).length;
20 | counter.text(length + (max ? '/' + max : ''));
21 | if((max && length > max) || (min && length < min)) {
22 | counter.addClass('outside-range');
23 | } else {
24 | counter.removeClass('outside-range');
25 | }
26 | }).trigger('keyup');
27 |
28 | counter.data('counter', true);
29 |
30 | });
31 |
32 | };
33 |
34 | }(jQuery));
--------------------------------------------------------------------------------
/panel/app/fields/textarea/controller.php:
--------------------------------------------------------------------------------
1 | model();
8 | $form = $this->form('link', array($page, $this->fieldname()));
9 |
10 | return $this->modal('link', compact('form'));
11 |
12 | }
13 |
14 | public function email($textarea = null) {
15 |
16 | $page = $this->model();
17 | $form = $this->form('email', array($page, $this->fieldname()));
18 |
19 | return $this->modal('email', compact('form'));
20 |
21 | }
22 |
23 | }
--------------------------------------------------------------------------------
/panel/app/fields/textarea/forms/email.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'editor.email.address.label',
8 | 'type' => 'email',
9 | 'placeholder' => 'editor.email.address.placeholder',
10 | 'autofocus' => 'true',
11 | 'required' => 'true',
12 | ),
13 | 'text' => array(
14 | 'label' => 'editor.email.text.label',
15 | 'type' => 'text',
16 | 'help' => 'editor.email.text.help',
17 | 'icon' => 'font'
18 | )
19 | ));
20 |
21 | $form->data('textarea', 'form-field-' . $textarea);
22 | $form->style('editor');
23 | $form->cancel($page);
24 |
25 | return $form;
26 |
27 | };
--------------------------------------------------------------------------------
/panel/app/fields/textarea/forms/link.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'editor.link.url.label',
8 | 'type' => 'text',
9 | 'placeholder' => 'http://',
10 | 'autofocus' => 'true',
11 | 'required' => 'true',
12 | 'icon' => 'chain'
13 | ),
14 | 'text' => array(
15 | 'label' => 'editor.link.text.label',
16 | 'type' => 'text',
17 | 'help' => 'editor.link.text.help',
18 | 'icon' => 'font'
19 | ),
20 | ));
21 |
22 | $form->data('textarea', 'form-field-' . $textarea);
23 | $form->style('editor');
24 | $form->cancel($page);
25 |
26 | return $form;
27 |
28 | };
--------------------------------------------------------------------------------
/panel/app/fields/toggle/toggle.php:
--------------------------------------------------------------------------------
1 | text())) {
10 | case 'yes/no':
11 | $true = l::get('fields.toggle.yes');
12 | $false = l::get('fields.toggle.no');
13 | break;
14 | case 'on/off':
15 | $true = l::get('fields.toggle.on');
16 | $false = l::get('fields.toggle.off');
17 | break;
18 | }
19 |
20 | return array(
21 | 'true' => $true,
22 | 'false' => $false
23 | );
24 |
25 | }
26 |
27 | public function value() {
28 | $value = parent::value();
29 |
30 | if(in_array($value, array('yes', 'true', true, 1, 'on'), true)) {
31 | return 'true';
32 | } else {
33 | return 'false';
34 | }
35 |
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/panel/app/fields/url/assets/js/url.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.urlfield = function() {
4 |
5 | return this.each(function() {
6 |
7 | var $this = $(this);
8 |
9 | if($this.data('urlfield')) {
10 | return;
11 | } else {
12 | $this.data('urlfield', true);
13 | }
14 |
15 | var $icon = $this.next('.field-icon');
16 |
17 | $icon.css({
18 | 'cursor': 'pointer',
19 | 'pointer-events': 'auto'
20 | });
21 |
22 | $icon.on('click', function() {
23 |
24 | var url = $.trim($this.val());
25 |
26 | if(url !== '' && $this.is(':valid')) {
27 | window.open(url);
28 | } else {
29 | $this.focus();
30 | }
31 |
32 | });
33 |
34 | });
35 |
36 | };
37 |
38 | })(jQuery);
--------------------------------------------------------------------------------
/panel/app/fields/url/url.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'url.js'
8 | )
9 | );
10 |
11 | public function __construct() {
12 |
13 | $this->type = 'url';
14 | $this->icon = 'chain';
15 | $this->label = l::get('fields.url.label', 'URL');
16 | $this->placeholder = 'http://';
17 |
18 | }
19 |
20 | public function validate() {
21 | return v::url($this->value());
22 | }
23 |
24 | public function input() {
25 | $input = parent::input();
26 | $input->data('field', 'urlfield');
27 | return $input;
28 | }
29 |
30 | }
--------------------------------------------------------------------------------
/panel/app/fields/user/user.php:
--------------------------------------------------------------------------------
1 | type = 'text';
7 | $this->icon = 'user';
8 | $this->label = l::get('fields.user.label', 'User');
9 | }
10 |
11 | // generating user list here instead of in the constructor because of
12 | // https://github.com/getkirby/panel/issues/1034
13 | public function options() {
14 | $options = null;
15 |
16 | foreach(kirby()->site()->users() as $user) {
17 | $options[$user->username()] = $user->username();
18 | }
19 |
20 | return $options;
21 | }
22 |
23 | public function value() {
24 | $value = parent::value();
25 |
26 | // default to current user if no default one is defined
27 | if(empty($value) && !$this->default && $this->default !== false) {
28 | return site()->user()->username();
29 | } else {
30 | return $value;
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/panel/app/forms/auth/login.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'login.username.label',
8 | 'type' => 'text',
9 | 'icon' => 'user',
10 | 'required' => true,
11 | 'autofocus' => true,
12 | 'default' => s::get('kirby_panel_username')
13 | ),
14 | 'password' => array(
15 | 'label' => 'login.password.label',
16 | 'type' => 'password',
17 | 'required' => true
18 | )
19 | ));
20 |
21 | $form->attr('autocomplete', 'off');
22 | $form->data('autosubmit', 'native');
23 | $form->style('centered');
24 |
25 | $form->buttons->submit->value = l('login.button');
26 |
27 | return $form;
28 |
29 | };
30 |
31 |
--------------------------------------------------------------------------------
/panel/app/forms/avatars/delete.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'type' => 'info'
8 | )
9 | ));
10 |
11 | $form->fields->image->text = '(image: ' . $avatar->url() . ' class: avatar avatar-full avatar-centered)';
12 | $form->centered = true;
13 | $form->style('delete');
14 |
15 | return $form;
16 |
17 | };
18 |
19 |
20 |
--------------------------------------------------------------------------------
/panel/app/forms/editor/email.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'editor.email.address.label',
8 | 'type' => 'email',
9 | 'placeholder' => 'editor.email.address.placeholder',
10 | 'autofocus' => 'true',
11 | 'required' => 'true',
12 | ),
13 | 'text' => array(
14 | 'label' => 'editor.email.text.label',
15 | 'type' => 'text',
16 | 'help' => 'editor.email.text.help',
17 | )
18 | ));
19 |
20 | $form->data('textarea', 'form-field-' . $textarea);
21 | $form->style('editor');
22 | $form->cancel($page, 'show');
23 |
24 | return $form;
25 |
26 | };
--------------------------------------------------------------------------------
/panel/app/forms/editor/link.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'editor.link.url.label',
8 | 'type' => 'text',
9 | 'placeholder' => 'http://',
10 | 'autofocus' => 'true',
11 | 'required' => 'true',
12 | ),
13 | 'text' => array(
14 | 'label' => 'editor.link.text.label',
15 | 'type' => 'text',
16 | 'help' => 'editor.link.text.help',
17 | ),
18 | ));
19 |
20 | $form->data('textarea', 'form-field-' . $textarea);
21 | $form->style('editor');
22 | $form->cancel($page, 'show');
23 |
24 | return $form;
25 |
26 | };
--------------------------------------------------------------------------------
/panel/app/forms/files/delete.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'files.delete.headline',
8 | 'type' => 'text',
9 | 'readonly' => true,
10 | 'icon' => false,
11 | 'default' => $file->filename()
12 | )
13 | ));
14 |
15 | $form->style('delete');
16 | $form->cancel($file);
17 |
18 | return $form;
19 |
20 | };
--------------------------------------------------------------------------------
/panel/app/forms/installation/check.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'type' => 'info'
8 | )
9 | ));
10 |
11 | if(count($problems) > 1) {
12 | $info = new Brick('ol');
13 | foreach($problems as $problem) {
14 | $info->append('' . $problem . ' ');
15 | }
16 | } else {
17 | $info = new Brick('p');
18 | foreach($problems as $problem) {
19 | $info->append($problem);
20 | }
21 | }
22 |
23 | // add the list of problems to the info field
24 | $form->fields->info->text = (string)$info;
25 |
26 | // setup the retry button
27 | $form->buttons->submit->value = l('installation.check.retry');
28 | $form->buttons->submit->autofocus = true;
29 |
30 | $form->style('centered');
31 | $form->alert(l('installation.check.text'));
32 |
33 | return $form;
34 |
35 | };
--------------------------------------------------------------------------------
/panel/app/forms/pages/delete.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'pages.delete.headline',
8 | 'type' => 'text',
9 | 'readonly' => true,
10 | 'icon' => false,
11 | 'default' => $page->title(),
12 | 'help' => $page->id(),
13 | )
14 | ];
15 |
16 | if($page->children()->count()) {
17 | $fields['check'] = [
18 | 'label' => 'pages.delete.children.headline',
19 | 'type' => 'checkbox',
20 | 'text' => 'pages.delete.children.text',
21 | 'help' => 'pages.delete.children.help',
22 | 'required' => true
23 | ];
24 | }
25 |
26 | $form = new Kirby\Panel\Form($fields);
27 | $form->style('delete');
28 | $form->cancel($page);
29 |
30 | return $form;
31 |
32 | };
--------------------------------------------------------------------------------
/panel/app/forms/pages/template.php:
--------------------------------------------------------------------------------
1 | parent()->blueprint()->pages()->template() as $template) {
8 | $options[$template->name()] = $template->title();
9 | }
10 |
11 | // create the form
12 | $form = new Kirby\Panel\Form(array(
13 | 'template' => array(
14 | 'label' => 'pages.template.select.label',
15 | 'type' => 'select',
16 | 'options' => $options,
17 | 'default' => key($options),
18 | 'required' => true,
19 | 'readonly' => count($options) == 1 ? true : false,
20 | 'icon' => count($options) == 1 ? $page->blueprint()->pages()->template()->first()->icon() : 'chevron-down',
21 | 'autofocus' => true
22 | ),
23 | 'disclaimer' => array(
24 | 'type' => 'info',
25 | 'text' => ''
26 | )
27 | ), array(
28 | 'template' => $page->intendedTemplate()
29 | ));
30 |
31 | $form->buttons->submit->val(l('change'));
32 | $form->cancel($page);
33 |
34 | return $form;
35 |
36 | };
--------------------------------------------------------------------------------
/panel/app/forms/pages/url.php:
--------------------------------------------------------------------------------
1 | 'btn btn-icon label-option',
8 | 'href' => '#',
9 | 'data-title' => str::slug($page->title())
10 | ));
11 |
12 | // url preview
13 | $preview = new Brick('div', '', array('class' => 'uid-preview'));
14 | $preview->append(ltrim($page->parent()->uri() . '/', '/'));
15 | $preview->append('' . $page->slug() . ' ');
16 |
17 | // create the form
18 | $form = new Kirby\Panel\Form(array(
19 | 'uid' => array(
20 | 'label' => l('pages.url.uid.label') . $option,
21 | 'type' => 'text',
22 | 'icon' => 'chain',
23 | 'autofocus' => true,
24 | 'help' => $preview,
25 | 'default' => $page->slug()
26 | )
27 | ));
28 |
29 | $form->buttons->submit->val(l('change'));
30 | $form->cancel($page);
31 |
32 | return $form;
33 |
34 | };
--------------------------------------------------------------------------------
/panel/app/forms/users/delete.php:
--------------------------------------------------------------------------------
1 | array(
7 | 'label' => 'users.delete.headline',
8 | 'type' => 'text',
9 | 'readonly' => true,
10 | 'icon' => false,
11 | 'default' => $user->username(),
12 | 'help' => $user->email(),
13 | )
14 | ));
15 |
16 | $form->style('delete');
17 | $form->cancel($user, 'edit');
18 |
19 | return $form;
20 |
21 | };
22 |
23 |
--------------------------------------------------------------------------------
/panel/app/layouts/app.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | option('panel.stylesheet')): ?>
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/panel/app/layouts/base.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | option('panel.stylesheet')): ?>
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/panel/app/layouts/fatal.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Kirby Panel
5 |
6 |
7 |
21 |
22 |
23 |
24 | Panel Error:
25 |
26 |
27 |
28 |
29 | Find more info on: getkirby.com
30 |
31 |
32 |
--------------------------------------------------------------------------------
/panel/app/snippets/breadcrumb.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/panel/app/snippets/favicon.php:
--------------------------------------------------------------------------------
1 | ';
--------------------------------------------------------------------------------
/panel/app/snippets/languages.php:
--------------------------------------------------------------------------------
1 | count() > 1): ?>
2 |
3 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/panel/app/snippets/menu.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/panel/app/snippets/meta.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/panel/app/snippets/pages/sidebar.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/panel/app/snippets/pages/sidebar/file.php:
--------------------------------------------------------------------------------
1 |
2 | canHavePreview(), ' data-url="' . $file->crop(75)->url() . '"') ?> data-helper="filename()) ?>" data-text="dragText()) ?>" href="url('edit')) ?>">
3 | icon() . __($file->filename()) ?>
4 |
5 |
6 |
--------------------------------------------------------------------------------
/panel/app/snippets/pages/sidebar/menu.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/panel/app/snippets/pages/sidebar/subpage.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | icon() ?>title()) ?>
4 | displayNum()) ?>
5 |
6 |
7 |
--------------------------------------------------------------------------------
/panel/app/snippets/pagination.php:
--------------------------------------------------------------------------------
1 | pages() > 1): ?>
2 |
14 |
--------------------------------------------------------------------------------
/panel/app/snippets/search.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/panel/app/snippets/template.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/panel/app/snippets/uploader.php:
--------------------------------------------------------------------------------
1 | isset($multiple) ? $multiple : true,
5 | 'accept' => isset($accept) ? $accept : false
6 | ));
7 |
8 | ?>
9 |
13 |
14 |
--------------------------------------------------------------------------------
/panel/app/src/panel/exceptions/permissions.php:
--------------------------------------------------------------------------------
1 | _root = panel::instance()->roots()->layouts();
12 | }
13 |
14 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/models/file/options.php:
--------------------------------------------------------------------------------
1 | file = $file;
17 | $this->page = $file->page();
18 | }
19 |
20 | public function preview() {
21 |
22 | if($this->file->isWebImage()) {
23 | return true;
24 | } else if($this->file->extension() === 'svg') {
25 | return true;
26 | } else {
27 | return false;
28 | }
29 |
30 | }
31 |
32 | public function thumb() {
33 |
34 | if($this->file->isWebImage() === false) {
35 | return false;
36 | } else if(kirby()->option('thumbs.driver') == 'gd') {
37 | if($this->width() > 2048 or $this->height() > 2048) {
38 | return false;
39 | } else {
40 | return true;
41 | }
42 | } else {
43 | return true;
44 | }
45 |
46 | }
47 |
48 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/models/file/ui.php:
--------------------------------------------------------------------------------
1 | file = $file;
11 | }
12 |
13 | public function update() {
14 | return $this->file->event('update:ui')->isAllowed();
15 | }
16 |
17 | public function rename() {
18 | return $this->file->event('rename:ui')->isAllowed();
19 | }
20 |
21 | public function replace() {
22 | return $this->file->event('replace:ui')->isAllowed();
23 | }
24 |
25 | public function delete() {
26 | return $this->file->event('delete:ui')->isAllowed();
27 | }
28 |
29 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/models/page/addbutton.php:
--------------------------------------------------------------------------------
1 | page = $page;
13 | $this->modal = true;
14 | $this->url = $this->page->url('add');
15 |
16 | if(!$this->page->ui()->create()) {
17 | throw new Exception(l('subpages.add.error.more'));
18 | }
19 |
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/models/site/ui.php:
--------------------------------------------------------------------------------
1 | site = $site;
11 | }
12 |
13 | public function create() {
14 | if($this->site->options()->create() === false) {
15 | return false;
16 | } else {
17 | return $this->site->event('create:ui')->isAllowed();
18 | }
19 | }
20 |
21 | public function update() {
22 | if($this->site->options()->update() === false) {
23 | return false;
24 | } else {
25 | return $this->site->event('update:ui')->isAllowed();
26 | }
27 | }
28 |
29 | public function upload() {
30 | if($this->site->options()->upload() === false) {
31 | return false;
32 | } else {
33 | return $this->site->event('upload:ui')->isAllowed();
34 | }
35 | }
36 |
37 | public function files() {
38 | return $this->site->options()->files();
39 | }
40 |
41 | public function pages() {
42 | return $this->site->options()->pages();
43 | }
44 |
45 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/models/user/avatar/ui.php:
--------------------------------------------------------------------------------
1 | avatar = $avatar;
11 | }
12 |
13 | public function active() {
14 | if($this->avatar->exists()) {
15 | return $this->replace() || $this->delete();
16 | } else {
17 | return $this->upload();
18 | }
19 | }
20 |
21 | public function upload() {
22 | return $this->avatar->event('upload:ui')->isAllowed();
23 | }
24 |
25 | public function replace() {
26 | return $this->avatar->event('replace:ui')->isAllowed();
27 | }
28 |
29 | public function delete() {
30 | return $this->avatar->event('delete:ui')->isAllowed();
31 | }
32 |
33 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/models/user/ui.php:
--------------------------------------------------------------------------------
1 | user = $user;
11 | }
12 |
13 | public function read() {
14 | return $this->user->event('read:ui')->isAllowed();
15 | }
16 |
17 | public function create() {
18 | return $this->user->event('create:ui')->isAllowed();
19 | }
20 |
21 | public function update() {
22 | return $this->user->event('update:ui')->isAllowed();
23 | }
24 |
25 | public function delete() {
26 | return $this->user->event('delete:ui')->isAllowed();
27 | }
28 |
29 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/snippet.php:
--------------------------------------------------------------------------------
1 | _root = panel::instance()->roots()->snippets();
12 | }
13 |
14 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/upload.php:
--------------------------------------------------------------------------------
1 | 'The file is missing',
12 | static::ERROR_MISSING_TMP_DIR => 'The /tmp directory is missing on your server',
13 | static::ERROR_FAILED_UPLOAD => 'The upload failed',
14 | static::ERROR_PARTIAL_UPLOAD => 'The file has been only been partially uploaded',
15 | static::ERROR_UNALLOWED_OVERWRITE => 'The file exists and cannot be overwritten',
16 | static::ERROR_MAX_SIZE => 'The file is too big. The maximum size is ' . f::niceSize($this->maxSize()),
17 | static::ERROR_MOVE_FAILED => 'The file could not be moved',
18 | static::ERROR_UNACCEPTED => 'The file is not accepted by the server'
19 | );
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/urls.php:
--------------------------------------------------------------------------------
1 | panel = $panel;
12 |
13 | // base url
14 | $this->index = rtrim($this->panel->kirby()->urls()->index(), '/') . '/' . basename($root);
15 |
16 | // assets
17 | $this->assets = $this->index . '/assets';
18 | $this->css = $this->assets . '/css';
19 | $this->js = $this->assets . '/js';
20 | $this->images = $this->assets . '/images';
21 |
22 | // enable urls without rewriting
23 | if(kirby()->option('rewrite') === false) {
24 | $this->index .= '/index.php';
25 | }
26 |
27 | // shortcuts
28 | $this->api = $this->index . '/api';
29 | $this->login = $this->index . '/login';
30 | $this->logout = $this->index . '/logout';
31 | $this->error = $this->index . '/error';
32 |
33 | }
34 |
35 | public function __debuginfo() {
36 |
37 | // get the obj debuginfo
38 | $data = parent::__debuginfo();
39 |
40 | // remove the recursion
41 | unset($data['panel']);
42 |
43 | return $data;
44 |
45 | }
46 |
47 | }
--------------------------------------------------------------------------------
/panel/app/src/panel/view.php:
--------------------------------------------------------------------------------
1 | _root = panel::instance()->roots()->views();
18 | $this->_file = $file;
19 | $this->_data = $data;
20 | }
21 |
22 | public function __set($key, $value) {
23 | $this->_data[$key] = $value;
24 | }
25 |
26 | public function render() {
27 | $file = $this->_root . DS . str_replace('.', DS, $this->_file) . '.php';
28 | if(!file_exists($file)) throw new Exception(l('view.error.invalid') . $file);
29 | return tpl::load($file, $this->_data);
30 | }
31 |
32 | public function __toString() {
33 | try {
34 | return (string)$this->render();
35 | } catch(Exception $e) {
36 | return $e->getMessage();
37 | }
38 | }
39 |
40 | }
--------------------------------------------------------------------------------
/panel/app/topbars/error.php:
--------------------------------------------------------------------------------
1 | append('', l('error.headline'));
5 | };
--------------------------------------------------------------------------------
/panel/app/topbars/user.php:
--------------------------------------------------------------------------------
1 | append(purl('users'), l('users'));
6 |
7 | if($user === 'user') {
8 | $topbar->append(purl('users/add'), l('users.index.add'));
9 | } else {
10 | $topbar->append($user->url(), $user->username());
11 | }
12 |
13 | };
--------------------------------------------------------------------------------
/panel/app/translations/ar/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "العربية",
3 | "direction": "rtl",
4 | "author": "أحمد الحداد ",
5 | "version": "1.0.0"
6 | }
--------------------------------------------------------------------------------
/panel/app/translations/bg/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Bulgarian",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/ca/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Catalan",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/cs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Česky",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/da/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Dansk",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/de/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Deutsch",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/el/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Ελληνικά",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/en/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "English",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/es_419/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Español (América Latina)",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/es_ES/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Español (España)",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/fa/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "پارسی",
3 | "direction": "rtl"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/fi/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Suomi",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/fr/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Français",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/hu/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Hungarian",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/id/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Bahasa Indonesia",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/it/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Italiano",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/ja/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Japanese",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/ko/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "한국어",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/nb/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Norsk Bokmål",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/nl/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Nederlands",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/pl/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Polski",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/pt_BR/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Português (Brasileiro)",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/pt_PT/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Português (Portugal)",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/readme.md:
--------------------------------------------------------------------------------
1 | # About Panel translations
2 |
3 | Panel translations are managed at [Transifex](https://www.transifex.com/getkirby/panel). Changes at Transifex are used in this repository.
4 | If you'd like to contribute (thank you!), please request access to your language at Transifex.
5 |
6 | Read more in the [Kirby docs](https://getkirby.com/docs/developer-guide/panel/translations).
--------------------------------------------------------------------------------
/panel/app/translations/ro/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Română",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/ru/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Русский (Russian)",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/sv_SE/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Svenska",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/tr/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Türkçe",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/zh_CN/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "简体中文(大陆)",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/translations/zh_TW/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "繁體中文(台灣)",
3 | "direction": "ltr"
4 | }
--------------------------------------------------------------------------------
/panel/app/views/auth/block.php:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/panel/app/views/auth/error.php:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/panel/app/views/auth/login.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/panel/app/views/avatars/delete.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/views/error/index.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/panel/app/views/error/modal.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/panel/app/views/files/delete.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/views/installation/index.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/panel/app/views/pages/add.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/panel/app/views/pages/delete.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/views/pages/edit.php:
--------------------------------------------------------------------------------
1 |
30 |
31 |
--------------------------------------------------------------------------------
/panel/app/views/pages/template.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/panel/app/views/pages/toggle.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/views/pages/url.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/panel/app/views/search/results.php:
--------------------------------------------------------------------------------
1 | count()): ?>
2 |
17 |
18 |
19 | count()): ?>
20 |
35 |
--------------------------------------------------------------------------------
/panel/app/views/users/delete.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/panel/app/widgets/account/account.html.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/panel/app/widgets/account/account.php:
--------------------------------------------------------------------------------
1 | user();
4 | $read = $user->ui()->read();
5 |
6 | if($read) {
7 | $options = [
8 | [
9 | 'text' => l('dashboard.index.account.edit'),
10 | 'icon' => 'pencil',
11 | 'link' => $user->url('edit')
12 | ]
13 | ];
14 | } else {
15 | $options = [];
16 | }
17 |
18 | return [
19 | 'title' => [
20 | 'text' => l('dashboard.index.account.title'),
21 | 'link' => $read ? $user->url('edit') : false,
22 | ],
23 | 'options' => $options,
24 | 'html' => function() use($user, $read) {
25 | return tpl::load(__DIR__ . DS . 'account.html.php', array(
26 | 'user' => $user,
27 | 'read' => $read
28 | ));
29 | }
30 | ];
--------------------------------------------------------------------------------
/panel/app/widgets/history/history.html.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/panel/app/widgets/history/history.php:
--------------------------------------------------------------------------------
1 | array(
5 | 'text' => l('dashboard.index.history.title'),
6 | 'link' => false,
7 | ),
8 | 'html' => function() {
9 | return tpl::load(__DIR__ . DS . 'history.html.php', array(
10 | 'history' => panel()->user()->history()->get()
11 | ));
12 | }
13 | );
--------------------------------------------------------------------------------
/panel/app/widgets/license/license.html.php:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/panel/app/widgets/license/license.php:
--------------------------------------------------------------------------------
1 | license();
4 |
5 | if($license->type() == 'trial' and !$license->local()) {
6 |
7 | return array(
8 | 'title' => array(
9 | 'text' => l('dashboard.index.license.title'),
10 | 'link' => false,
11 | 'compressed' => false
12 | ),
13 | 'html' => function() {
14 | return tpl::load(__DIR__ . DS . 'license.html.php', array(
15 | 'text' => kirbytext(str::template(l('dashboard.index.license.text'), array(
16 | 'buy' => 'http://getkirby.com/buy',
17 | 'docs' => 'http://getkirby.com/docs/installation/license-code'
18 | )))
19 | ));
20 | }
21 | );
22 |
23 | } else {
24 | return false;
25 | }
--------------------------------------------------------------------------------
/panel/app/widgets/pages/pages.html.php:
--------------------------------------------------------------------------------
1 |
6 |
7 | = $pagination ?>
8 |
9 |
--------------------------------------------------------------------------------
/panel/app/widgets/site/site.html.php:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/panel/app/widgets/site/site.php:
--------------------------------------------------------------------------------
1 | array(
5 | 'text' => l('dashboard.index.site.title'),
6 | 'link' => url(),
7 | 'target' => '_blank',
8 | ),
9 | 'html' => function() {
10 | return tpl::load(__DIR__ . DS . 'site.html.php');
11 | }
12 | );
--------------------------------------------------------------------------------
/panel/assets/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/panel/assets/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/panel/assets/fonts/sourcesanspro-400-italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/sourcesanspro-400-italic.woff
--------------------------------------------------------------------------------
/panel/assets/fonts/sourcesanspro-400-italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/sourcesanspro-400-italic.woff2
--------------------------------------------------------------------------------
/panel/assets/fonts/sourcesanspro-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/sourcesanspro-400.woff
--------------------------------------------------------------------------------
/panel/assets/fonts/sourcesanspro-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/sourcesanspro-400.woff2
--------------------------------------------------------------------------------
/panel/assets/fonts/sourcesanspro-600.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/sourcesanspro-600.woff
--------------------------------------------------------------------------------
/panel/assets/fonts/sourcesanspro-600.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/fonts/sourcesanspro-600.woff2
--------------------------------------------------------------------------------
/panel/assets/images/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/images/avatar.png
--------------------------------------------------------------------------------
/panel/assets/images/hint.arrows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/images/hint.arrows.png
--------------------------------------------------------------------------------
/panel/assets/images/loader.black.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/images/loader.black.gif
--------------------------------------------------------------------------------
/panel/assets/images/loader.white.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/images/loader.white.gif
--------------------------------------------------------------------------------
/panel/assets/images/pattern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/images/pattern.png
--------------------------------------------------------------------------------
/panel/assets/images/placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/assets/images/placeholder.png
--------------------------------------------------------------------------------
/panel/assets/js/src/components/breadcrumb.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.breadcrumb = function() {
4 |
5 | return this.each(function() {
6 |
7 | var el = $(this);
8 | var dropdown = el.clone();
9 |
10 | dropdown.removeClass('breadcrumb');
11 | dropdown.addClass('dropdown')
12 | .addClass('dropdown-left')
13 | .addClass('breadcrumb-dropdown');
14 |
15 | dropdown.attr('id', 'breadcrumb-menu');
16 | dropdown.find('.nav-icon').remove();
17 | dropdown.find('.breadcrumb-list').removeClass('nav-bar').removeClass('breadcrumb-list').addClass('dropdown-list');
18 | dropdown.find('.breadcrumb-link').removeClass('breadcrumb-link');
19 | dropdown.find('.breadcrumb-label').removeClass('breadcrumb-label');
20 |
21 | el.append(dropdown);
22 |
23 | });
24 |
25 | };
26 |
27 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/components/delay.js:
--------------------------------------------------------------------------------
1 | var Delay = function() {
2 |
3 | var delays = {};
4 |
5 | var start = function(id, callback, time) {
6 | stop(id);
7 | delays[id] = setTimeout(callback, time);
8 | };
9 |
10 | var stop = function(id) {
11 | if(!id) {
12 | for(var id in delays) {
13 | if(delays.hasOwnProperty(id)) stop(id);
14 | }
15 | } else if(delays[id]) {
16 | clearTimeout(delays[id]);
17 | }
18 | };
19 |
20 | return {
21 | start: start,
22 | stop: stop
23 | };
24 |
25 | };
--------------------------------------------------------------------------------
/panel/assets/js/src/components/dropdown.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.dropdown = function() {
4 |
5 | return this.each(function() {
6 |
7 | var parent = $(this);
8 |
9 | if(parent.is(document)) {
10 | // kill all dropdowns when the document is being clicked
11 | parent.on('click.dropdown', function() {
12 | parent.find('.dropdown').not('.contextmenu').hide();
13 | });
14 | // kill all dropdowns on escape
15 | parent.on('keydown.dropdown', function(e) {
16 | if(e.keyCode == 27) parent.trigger('click.dropdown');
17 | });
18 | // kill all dropdowns when the browser window is being resized
19 | $(window).resize(function() {
20 | parent.find('.dropdown').not('.contextmenu').hide();
21 | });
22 | }
23 |
24 | parent.find('.dropdown').hide();
25 | parent.on('click', '[data-dropdown]', function() {
26 | parent.trigger('click.dropdown');
27 | $($(this).attr('href')).show();
28 | return false;
29 | });
30 |
31 | });
32 |
33 | };
34 |
35 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/components/message.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.message = function() {
4 |
5 | return this.each(function() {
6 |
7 | var message = $(this);
8 | var form = message.closest('form');
9 |
10 | message.on('close', function() {
11 | message.remove();
12 | form.find('.field-with-error').removeClass('field-with-error');
13 | form.find('[autofocus]').focus();
14 | $(document).trigger('keyup.center');
15 | });
16 |
17 | message.on('click', function() {
18 | message.trigger('close');
19 | });
20 |
21 | });
22 |
23 | };
24 |
25 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.center.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.center = function(margin) {
4 |
5 | return this.each(function() {
6 |
7 | if($(this).data('center')) {
8 | return $(this).data('center');
9 | } else {
10 |
11 | var box = $(this);
12 | var win = $(window);
13 | var height = function() {
14 | return box.height() + margin;
15 | }
16 |
17 | box.data('height', height());
18 |
19 | $(document).on('keyup.center', function() {
20 | box.data('height', height());
21 | win.trigger('resize.center');
22 | });
23 |
24 | win.on('resize.center', function() {
25 | if(win.height() <= box.data('height') + margin) {
26 | box.css({
27 | 'top' : 'auto',
28 | 'margin-top' : 0
29 | });
30 | } else {
31 | box.css({
32 | 'top' : '50%',
33 | 'margin-top' : -(Math.round(box.data('height') / 2))
34 | });
35 | }
36 | }).trigger('resize.center');
37 |
38 | }
39 |
40 | });
41 |
42 | };
43 |
44 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.drop.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.drop = function(options) {
4 |
5 | if(options == 'destroy') {
6 | return this.off('dragenter.drop dragover.drop dragexit.drop dragleave.drop dragend.drop drop.drop');
7 | } else {
8 |
9 | var enter;
10 |
11 | return this.on('dragenter.drop dragover.drop dragexit.drop dragleave.drop dragend.drop drop.drop', function(e) {
12 |
13 | e.stopPropagation();
14 | e.preventDefault();
15 |
16 | if(e.type == 'dragenter') {
17 | enter = e.target;
18 | } else if(e.type == 'dragleave' && enter !== e.target) {
19 | return;
20 | }
21 |
22 | if(options[e.type]) options[e.type].apply(this, [e]);
23 |
24 | });
25 |
26 | }
27 | };
28 |
29 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.fakefocus.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.fakefocus = function(classname) {
4 | return this.each(function(){
5 |
6 | $(this).on({
7 | 'click' : function() {
8 | $(this).find('input, textarea, select').focus();
9 | },
10 | 'focusin' : function() {
11 | $(this).addClass(classname);
12 | },
13 | 'focusout' : function() {
14 | $(this).removeClass(classname);
15 | }
16 | });
17 |
18 | });
19 |
20 | };
21 |
22 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.filedrop.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.filedrop = function(options) {
4 |
5 | if(options == 'destroy') {
6 | return this.drop('destroy');
7 | }
8 |
9 | if(!$.support.fileReader) return false;
10 |
11 | var defaults = {
12 | drop : function(event) {},
13 | files : function(files) {},
14 | };
15 |
16 | var options = $.extend({}, defaults, options);
17 | var drop = options.drop;
18 |
19 | options.drop = function(event) {
20 | drop.apply(this, [event]);
21 |
22 | if(event.originalEvent.dataTransfer && event.originalEvent.dataTransfer.files) {
23 | $.fileReader(event.originalEvent.dataTransfer.files, options.files);
24 | }
25 |
26 | };
27 |
28 | this.drop(options);
29 |
30 | };
31 |
32 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.filereader.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.support.fileReader = !!(window.File && window.FileList && window.FileReader);
4 |
5 | $.fileReader = function(files, callback) {
6 |
7 | if(!$.support.fileReader) return false;
8 |
9 | var complete = [];
10 | var onload = function(file) {
11 | return function() {
12 | complete.push(file);
13 | if(complete.length === files.length) callback(complete);
14 | };
15 | };
16 | for(var i = 0; i < files.length; i++) {
17 | var reader = new FileReader();
18 | reader.onload = onload(files[i]);
19 | reader.readAsArrayBuffer(files[i]);
20 | }
21 |
22 | };
23 |
24 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.passwordsuggestion.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.passwordSuggestion = function() {
4 |
5 | return this.each(function() {
6 |
7 | var input = $(this);
8 | var field = input.closest('.field');
9 | var form = input.closest('.form');
10 | var suggest = field.find('.pw-suggestion');
11 | var passwords = form.find('[type=password]');
12 |
13 | // Password suggestion
14 | field.find('.pw-reload').on('click', function(e) {
15 | e.preventDefault();
16 | suggest.text($.token());
17 | }).trigger('click');
18 |
19 | passwords.on('blur', function() {
20 | passwords.attr('type', 'password');
21 | });
22 |
23 | suggest.click(function(e) {
24 | e.preventDefault();
25 | var pass = suggest.text();
26 | input.attr('type', 'text').val(pass).first().select();
27 |
28 | // try to find a matching confirmation find and fill that as well
29 | form.find('[name=passwordconfirmation]').attr('type', 'text').val(pass);
30 |
31 | });
32 |
33 | });
34 |
35 | };
36 |
37 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.serializeobject.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.serializeObject = function() {
4 | var o = {};
5 | var a = this.serializeArray();
6 | $.each(a, function() {
7 | if(o[this.name] !== undefined) {
8 | if(!o[this.name].push) {
9 | o[this.name] = [o[this.name]];
10 | }
11 | o[this.name].push(this.value || '');
12 | } else {
13 | o[this.name] = this.value || '';
14 | }
15 | });
16 | return o;
17 | };
18 |
19 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.slug.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.slug = function(text) {
4 |
5 | text = $.trim(text.toLowerCase());
6 |
7 | $.each($.slug.table || {}, function(key, val) {
8 | text = text.split(key).join(val);
9 | });
10 |
11 | return text
12 | .replace(/[^\x09\x0A\x0D\x20-\x7E]/, '')
13 | .replace(/[^a-z0-9]/gi, '-')
14 | .replace(/(-)\1+/g, '-')
15 | .replace(/-+$/,'')
16 | .replace(/^-+/,'');
17 |
18 | };
19 |
20 | })(jQuery);
--------------------------------------------------------------------------------
/panel/assets/js/src/jquery/plugins/jquery.token.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.token = function(length) {
4 |
5 | var length = length || 28;
6 | var set = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789!@#$%&*?';
7 | var token = '';
8 |
9 | for(x=0; x li {
2 | list-style: none;
3 | }
4 | .nav > li > a {
5 | display: block;
6 | }
7 | .nav-bar > li {
8 | body.ltr & {
9 | float: left;
10 | }
11 | body.rtl & {
12 | float: right;
13 | }
14 | }
15 | .nav-icon {
16 | display: inline-block;
17 | background: #000;
18 | color: #fff;
19 | padding: 1em 0 1em;
20 | text-align: center;
21 | line-height: 1em;
22 | height: 3em;
23 | width: 4em;
24 | }
25 | .nav-icon:hover {
26 | color: #999;
27 | }
28 | .nav-icon-left {
29 | body.ltr & {
30 | border-right: 1px solid #555;
31 | }
32 | body.rtl & {
33 | border-left: 1px solid #555;
34 | }
35 | }
36 | .nav-icon-right {
37 | body.ltr & {
38 | border-left: 1px solid #555;
39 | }
40 | body.rtl & {
41 | border-right: 1px solid #555;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/panel/assets/scss/components/_nprogress.scss:
--------------------------------------------------------------------------------
1 | /* Make clicks pass-through */
2 | #nprogress {
3 | pointer-events: none;
4 | }
5 |
6 | #nprogress .bar {
7 | background: #fff;
8 | position: fixed;
9 | z-index: 1031;
10 | top: 0;
11 | left: 0;
12 | width: 100%;
13 | height: 2px;
14 | }
--------------------------------------------------------------------------------
/panel/assets/scss/components/_pagination.scss:
--------------------------------------------------------------------------------
1 | .pagination {
2 | position: relative;
3 | margin-bottom: 2.5em;
4 | }
5 | .pagination a,
6 | .pagination span {
7 | padding: .5em 0;
8 | display: block;
9 | }
10 | .pagination .pagination-prev {
11 | body.ltr & {
12 | float: left;
13 | padding-right: 1em;
14 | }
15 | body.rtl & {
16 | float: right;
17 | padding-left: 1em;
18 | }
19 | }
20 | .pagination-index {
21 | position: absolute;
22 | left: 2em;
23 | right: 2em;
24 | text-align: center;
25 | color: #777;
26 | }
27 | .pagination-index select {
28 | position: absolute;
29 | top: 0;
30 | bottom: 0;
31 | left: 50%;
32 | cursor: pointer;
33 | -webkit-transform: translate(-50%, 0);
34 | -moz-transform: translate(-50%, 0);
35 | -ms-transform: translate(-50%, 0);
36 | transform: translate(-50%, 0);
37 | min-width: 6em;
38 | opacity: 0;
39 | }
40 | .pagination .pagination-next {
41 | body.ltr & {
42 | float: right;
43 | padding-left: 1em;
44 | }
45 | body.rtl & {
46 | float: left;
47 | padding-right: 1em;
48 | }
49 | }
50 | .pagination .pagination-inactive {
51 | color: #ddd;
52 | pointer-events: none;
53 | }
54 |
--------------------------------------------------------------------------------
/panel/assets/scss/components/_reset.scss:
--------------------------------------------------------------------------------
1 | *, *:before, *:after {
2 | margin: 0;
3 | padding: 0;
4 | -webkit-box-sizing: border-box;
5 | -moz-box-sizing: border-box;
6 | box-sizing: border-box;
7 | }
8 |
9 | article,
10 | aside,
11 | details,
12 | figcaption,
13 | figure,
14 | footer,
15 | header,
16 | hgroup,
17 | main,
18 | nav,
19 | section,
20 | summary {
21 | display: block;
22 | }
23 |
24 | abbr {
25 | border: none;
26 | }
27 |
28 | img {
29 | max-width: 100%;
30 | }
31 |
32 | img.lazy {
33 | opacity: 0;
34 | -webkit-transition: opacity .3s;
35 | -moz-transition: opacity .3s;
36 | -ms-transition: opacity .3s;
37 | transition: opacity .3s;
38 | }
39 | img.lazy.has-loaded {
40 | opacity: 1;
41 | }
--------------------------------------------------------------------------------
/panel/assets/scss/components/_topbar.scss:
--------------------------------------------------------------------------------
1 | .topbar {
2 | position: absolute;
3 | top: 0;
4 | left: 0;
5 | right: 0;
6 | z-index: 100;
7 | height: 3em;
8 | background: #000;
9 | }
10 |
11 | .topbar .nav-icon {
12 | position: absolute;
13 | top: 0;
14 | }
15 | .topbar .nav-icon-left {
16 | body.ltr & {
17 | left: 0;
18 | }
19 | body.rtl & {
20 | right: 0;
21 | }
22 | }
23 | .topbar .nav-icon-right {
24 | body.ltr & {
25 | right: 0;
26 | }
27 | body.rtl & {
28 | left: 0;
29 | }
30 | }
31 | .topbar .breadcrumb {
32 | body.ltr & {
33 | margin-left: 4em;
34 | }
35 | body.rtl & {
36 | margin-right: 4em;
37 | }
38 | }
39 | .topbar .dropdown {
40 | position: absolute;
41 | z-index: 1000;
42 | top: 3em;
43 | }
44 |
--------------------------------------------------------------------------------
/panel/assets/scss/components/_typography.scss:
--------------------------------------------------------------------------------
1 | * {
2 | font-size: 100%;
3 | font-family: "Source Sans Pro", "Apple LiGothic Medium", "Microsoft JhengHei UI", "Helvetica Neue", Arial, sans-serif;
4 | }
5 | .light {
6 | font-weight: 300;
7 | }
8 | b,
9 | strong,
10 | .strong {
11 | font-weight: 600;
12 | }
13 | a {
14 | text-decoration: none;
15 | color: #000;
16 | }
17 | .marginalia {
18 | color: #777;
19 | }
20 | hr {
21 | display: block;
22 | height: 2px;
23 | background: #ddd;
24 | border: 0;
25 | }
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .#{$fa-css-prefix}-pull-left { float: left; }
11 | .#{$fa-css-prefix}-pull-right { float: right; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .#{$fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_fontawesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | //@import "bordered-pulled";
14 | @import "animated";
15 | //@import "rotated-flipped";
16 | //@import "stacked";
17 | @import "icons";
18 | @import "screen-reader";
19 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff');
7 | font-weight: normal;
8 | font-style: normal;
9 | }
10 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_screen-reader.scss:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { @include sr-only(); }
5 | .sr-only-focusable { @include sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/panel/assets/scss/fontawesome/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/panel/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "getkirby/panel",
3 | "description": "The Kirby 2 panel.",
4 | "keywords": ["panel", "kirby", "cms"],
5 | "homepage": "https://getkirby.com",
6 | "license": "proprietary",
7 | "authors": [
8 | {
9 | "name": "Bastian Allgeier",
10 | "email": "bastian@getkirby.com",
11 | "homepage": "http://bastianallgeier.com"
12 | }
13 | ],
14 | "support": {
15 | "email": "support@getkirby.com",
16 | "issues": "https://github.com/getkirby/panel/issues",
17 | "forum": "https://forum.getkirby.com",
18 | "source": "https://github.com/getkirby/panel"
19 | }
20 | }
--------------------------------------------------------------------------------
/panel/index.php:
--------------------------------------------------------------------------------
1 | roots->index)) {
27 | $kirby->roots->index = $index;
28 | }
29 |
30 | // the default avatar directory
31 | if(!isset($kirby->roots->avatars)) {
32 | $kirby->roots->avatars = $index . DS . 'assets' . DS . 'avatars';
33 | }
34 |
35 | // the default thumbs directory
36 | if(!isset($kirby->roots->thumbs)) {
37 | $kirby->roots->thumbs = $index . DS . 'thumbs';
38 | }
39 |
40 | // create the panel object
41 | $panel = new Panel($kirby, __DIR__);
42 |
43 | // launch the panel
44 | echo $panel->launch();
--------------------------------------------------------------------------------
/panel/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "kirby-panel",
3 | "version": "2.5.14",
4 | "author": "Bastian Allgeier ",
5 | "homepage": "https://getkirby.com",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/getkirby/panel"
9 | },
10 | "bugs": {
11 | "url": "https://github.com/getkirby/panel/issues"
12 | },
13 | "keywords": [
14 | "kirby",
15 | "cms",
16 | "php",
17 | "file-based",
18 | "webinterface",
19 | "admin",
20 | "panel"
21 | ],
22 | "devDependencies": {
23 | "gulp": "*",
24 | "gulp-concat": "*",
25 | "gulp-cssmin": "*",
26 | "gulp-image": "*",
27 | "gulp-jshint": "*",
28 | "gulp-sass": "*",
29 | "gulp-uglify": "*",
30 | "jshint": "*"
31 | },
32 | "private": true
33 | }
34 |
--------------------------------------------------------------------------------
/panel/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | tests/tests/AutocompleteTest.php
5 | tests/tests/ChangesTest.php
6 | tests/tests/FileModelTest.php
7 | tests/tests/HistoryTest.php
8 | tests/tests/NumberingTest.php
9 | tests/tests/PageModelTest.php
10 | tests/tests/PanelTest.php
11 | tests/tests/SiteModelTest.php
12 | tests/tests/StructureTest.php
13 | tests/tests/UserModelTest.php
14 |
15 |
16 |
--------------------------------------------------------------------------------
/panel/readme.md:
--------------------------------------------------------------------------------
1 | # Kirby v2 Panel
2 |
3 | This is the Kirby Panel submodule.
4 |
5 | Please refer to the [Kirby v2 Starterkit](http://github.com/getkirby-v2/starterkit)
6 | for a complete installation of Kirby 2
7 |
8 | ## Kirby 2 - EOL
9 |
10 | Kirby 2 is an old version of Kirby CMS. We are supporting it with security updates until December 31st, 2020.
11 |
12 | For the latest version of Kirby, check out https://getkirby.com
13 |
14 | ## Author
15 | Bastian Allgeier
16 |
17 |
18 | ## Website
19 |
20 |
21 | ## License
22 |
23 |
--------------------------------------------------------------------------------
/panel/tests/dummy/images/forrest.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/panel/tests/dummy/images/forrest.jpg
--------------------------------------------------------------------------------
/panel/tests/dummy/site/blueprints/alphabet.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | title: Alphabet
4 | pages:
5 | template: char
6 | num: zero
7 | files: false
8 | fields:
9 | title:
10 | label: Title
11 | type: text
12 |
--------------------------------------------------------------------------------
/panel/tests/dummy/site/blueprints/blog.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | title: Blog
4 | pages:
5 | template: article
6 | num: date
7 | files: false
8 | fields:
9 | title:
10 | label: Title
11 | type: text
12 |
--------------------------------------------------------------------------------
/panel/tests/dummy/site/blueprints/default.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | title: Default Page
4 | pages: true
5 | files: true
6 | fields:
7 | title:
8 | label: Title
9 | type: text
10 | text:
11 | label: Text
12 | type: textarea
--------------------------------------------------------------------------------
/panel/tests/lib/bootstrap.php:
--------------------------------------------------------------------------------
1 | = 6
12 | if(class_exists('\PHPUnit\Framework\TestCase') && !class_exists('\PHPUnit_Framework_TestCase')) {
13 | class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase');
14 | }
15 |
16 | // include the kirby testcase file
17 | require_once(__DIR__ . DIRECTORY_SEPARATOR . 'testcase.php');
18 |
--------------------------------------------------------------------------------
/panel/tests/tests/HistoryTest.php:
--------------------------------------------------------------------------------
1 | user = $this->createAdmin();
10 | $this->history = $this->user->history();
11 | $this->page = $this->site->children()->create('test', 'test');
12 |
13 | }
14 |
15 | public function testConstruct() {
16 | $this->assertInstanceOf('Kirby\\Panel\\Models\\User\\History', $this->history);
17 | }
18 |
19 | public function testAddWithoutLogin() {
20 | // Todo: fails because of missing auth check
21 | // $this->history->add($this->page);
22 | // $this->assertEquals(array(), $this->history->get());
23 | }
24 |
25 | public function testInvalidPage() {
26 | $this->user->login('test');
27 | $this->history->add('doesnotexist');
28 | $this->assertEquals(array(), $this->history->get());
29 | }
30 |
31 | public function testAdd() {
32 |
33 | /* Todo: fails for no particular reason so far
34 | $this->user->login('test');
35 | $this->history->add($this->page);
36 | $this->assertEquals(array('test'), $this->history->get());
37 | */
38 | }
39 |
40 | }
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Kirby 2 Plainkit - EOL
2 |
3 | Kirby 2 is an old version of Kirby CMS and has reached its end of life. We are no longer supporting it.
4 |
5 | For the latest version of Kirby, check out https://getkirby.com
6 |
7 | ## Website
8 | https://getkirby.com
9 |
10 | ## Archived Documentation
11 | https://k2.getkirby.com
12 |
13 | ## License
14 | https://getkirby.com/license
15 |
--------------------------------------------------------------------------------
/site/blueprints/default.yml:
--------------------------------------------------------------------------------
1 | title: Page
2 | pages: true
3 | files: true
4 | fields:
5 | title:
6 | label: Title
7 | type: text
8 | text:
9 | label: Text
10 | type: textarea
--------------------------------------------------------------------------------
/site/cache/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/getkirby-v2/plainkit/29a53ff23f2304bb4d0fb1b274a1e38553e1a08d/site/cache/.gitkeep
--------------------------------------------------------------------------------
/site/config/config.php:
--------------------------------------------------------------------------------
1 |
2 |