├── .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
-------------------------------------------------------------------------------- /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 1 and another one 2

2 |
3 |
4 |
    5 |
  1. 6 |

    line 1 7 | line 2

    8 |
    9 |

    quote

    10 |
    11 |

    another paragraph 

    12 |
  2. 13 |
  3. 14 |

    paragraph

    15 |

    another paragraph 

    16 |
  4. 17 |
18 |
-------------------------------------------------------------------------------- /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 1 second 2.

2 |

first 3 second 4.

3 |

second time 1

4 |
5 |
6 |
    7 |
  1. 8 |

    one 

    9 |
  2. 10 |
  3. 11 |

    two 

    12 |
  4. 13 |
  5. 14 |

    one 

    15 |
  6. 16 |
  7. 17 |

    two 

    18 |
  8. 19 |
20 |
-------------------------------------------------------------------------------- /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 |
10 |

markdown

11 |
12 |

markdown

13 |
14 |
15 |
16 |
17 | _no markdown_ 18 |
19 |

markdown

20 |
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 |

Header 1

2 |

Header 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](/md.png) {#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 |
2 | 3 | 4 | 5 | Application frames (countIsApplication() ?>) 6 | 7 | 8 | 9 | Application frames (countIsApplication() ?>) 10 | 11 | 12 | 13 | All frames () 14 | 15 | 16 | 17 | Stack frames () 18 | 19 | 20 |
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 | <?php echo $tpl->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 | 16 | 17 |
18 | -------------------------------------------------------------------------------- /panel/app/fields/structure/template.php: -------------------------------------------------------------------------------- 1 |
6 | 7 | headline() ?> 8 | 9 |
10 | 11 | entries()->count()): ?> 12 |
13 | 14 |
15 | 16 | style() . '.php') ?> 17 | 18 |
19 | 20 |
-------------------------------------------------------------------------------- /panel/app/fields/structure/views/add.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /panel/app/fields/structure/views/delete.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /panel/app/fields/structure/views/update.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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 | <?php __($title) ?> 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 | <?php __($title) ?> 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 | -------------------------------------------------------------------------------- /panel/app/snippets/favicon.php: -------------------------------------------------------------------------------- 1 | '; -------------------------------------------------------------------------------- /panel/app/snippets/languages.php: -------------------------------------------------------------------------------- 1 | count() > 1): ?> 2 | 3 |
    4 | 5 | 6 | code()) ?> 7 | 8 | 9 | 18 | 19 |
    20 | 21 | 22 | -------------------------------------------------------------------------------- /panel/app/snippets/menu.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | 4 | 5 | -------------------------------------------------------------------------------- /panel/app/views/avatars/delete.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /panel/app/views/error/index.php: -------------------------------------------------------------------------------- 1 |
    2 |

    3 |

    4 |
    -------------------------------------------------------------------------------- /panel/app/views/error/modal.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /panel/app/views/files/delete.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /panel/app/views/installation/index.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /panel/app/views/pages/add.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /panel/app/views/pages/delete.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /panel/app/views/pages/edit.php: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 | 5 |
    6 |
    7 | 8 | isWritable()): ?> 9 |
    10 |

    11 | 12 |

    13 |
    14 |

    15 |
    16 |
    17 | 18 | 19 | 20 |
    21 |
    22 | 23 | 24 | 25 | 26 |
    27 |
    28 | 29 |
    30 | 31 | -------------------------------------------------------------------------------- /panel/app/views/pages/template.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /panel/app/views/pages/toggle.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /panel/app/views/pages/url.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /panel/app/views/search/results.php: -------------------------------------------------------------------------------- 1 | count()): ?> 2 |
    3 | 16 |
    17 | 18 | 19 | count()): ?> 20 |
    21 | 34 |
    35 | -------------------------------------------------------------------------------- /panel/app/views/users/delete.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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 |
    12 |
    13 | 14 |
    15 |
    -------------------------------------------------------------------------------- /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 | 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 | -------------------------------------------------------------------------------- /site/snippets/header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?php echo $site->title()->html() ?> | <?php echo $page->title()->html() ?> 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /site/templates/default.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |

    title()->html() ?>

    4 | 5 | --------------------------------------------------------------------------------