🎉 Features
New markdown safe mode
The markdown parser now supports a safe mode, which escapes any custom HTML, while still parsing markdown correctly. Safe mode can now be enabled like this:
// helpers
kirbytext($text, [
'markdown' => [
'safe' => true
]
]);
kirbytextInline($text, [
'markdown' => [
'safe' => true
]
]);
markdown($text, [
'safe' => true
]);
// field methods
$page->text()->kirbytext([
'markdown' => [
'safe' => true
]
]);
$page->text()->kirbytextInline([
'markdown' => [
'safe' => true
]
]);
$page->text()->markdown([
'safe' => true
]);
The safe mode is now also available as global markdown setting:
<?php
// config.php
return [
'markdown' => [
'safe' => true
]
];
New Fiber dialog features
There are new options to define custom submit and cancel handlers for Fiber dialogs
// short version
this.$dialog('some/dialog', ({ dialog, value }) => {
// custom submit handler
});
// in options
this.$dialog('some/dialog', {
cancel: () => {
// custom cancel handler
},
submit: ({ dialog, value }) => {
// custom submit handler
}
});
Dialogs can now also be defined synchronously instead of loading them from the server.
this.$dialog({
component: 'k-remove-dialog',
props: {
text: 'Do you really want to delete this entry?'
},
cancel: () => {
// custom cancel handler
},
submit: ({ dialog, value }) => {
// custom submit handler
}
});
New Kirby\Toolkit\Date
class #4040
- extension for PHP's DateTime class
- helps with all kinds of date and time related tasks
- is now used by our date and time fields and the
timestamp()
helper - New
iso
plugin fordayjs
to parse and format ISO date/time/datetime strings
✨Enhancements
- Add missing locale parameter to
Cms\File::niceSize
,Cms\Files::niceSize()
andFilesystem\Dir::niceSize()
#4045 - Adds several dayjs plugins for handle logic that we will need for refactoring the dates and time fields #4036:
a.merge(n, "time")
: merges a defined part (date
ortime
) of dayjs objectb
into dayjs objecta
dayjs.pattern('YYYY-MM-DD")
: class that supports analysing and interpreting a specific dayjs format patterndayjs.round("minute", 5)
: method to round current dayjs object to nearest step (unit and size)dayjs.units(is12h)
: a map between units and dayjs tokens given 12/24h clockdayjs.validate()
: helper to validate a current dayjs object against a min/max boundary
- Frontend tests with Vitest #4064
- The JSON unexpected error message is now translatable #4081
- First component tests #4069
- New
this.$fiber
global in Vue - Unit tests for all main Fiber parts
🐛 Fixes
- Various date and time field fixes
- Fix computed separator in date field #3946
- Fixed passing
null
to parameter tois_file()
function inTpl::load()
method on PHP 8.1 #4032 - No longer throws deprecation warning passing null to
Str
functions - No longer throws deprecation warning implicit float to int conversion when scaling dimensions for an SVG
- Creating the user no longer collides with the content language in multi-language setups #4050
- Fixed calling
url()
helper throws deprecation warning with PHP 8.1 #4047 - Enabling
link
in pages, files and users fields works correctly again #4062 - Fixed changing slug with unsaved changes leads to Panel error #4006
- Fixed selected tab when switching languages #4071
- Fixed image back option with html color names that start with 'light' don't apply #4073
- Fixed
$page->prevUnlisted()
returns wrong collection item #4086 - Fixed redirects in fetch requests to non-fiber resources: #4084
- No longer uses POST requests for dropdowns: #4083
- Date field value gets properly saved inside structure fields when hitting Cmd+S
- Calendar dropdown of date fields closes properly inside a structure field when focussing another field
- Throws proper error when passing not an object as
step
prop to inputs - Fixed issue when only displaying year in date field
- Fixed issue with storing seconds in date/time fields
- Fixed timezone handling, removed introduction of UTC timezone pinning
panel.favicon
option now supports single string as value
return [
'panel' => [
'favicon' => 'assets/favicon.ico'
]
];
- Fixed passing null parameters in YAML parser to avoid deprecation warnings in PHP 8.1
♻️ Refactoring
- Explicit CSS data attr selectors for styling #4027
- Use https://vitest.dev for JS unit tests #4064
- Use more PHP arrow functions where it makes sense #4028
- Tweaks for
$helpers
and their unit tests #4057 - Update
composer.json
to Composer API 2.2 #4066 - Refactored Fiber class for better testability
- Removed outdated wait-on dependency #4094
- Refactored Spyc YAML parser
- Removed
mustangostang/spyc
repository from composer - Moved
Spyc
class into/dependencies
- Removed
spyc_load()
,spyc_load_file()
,spyc_dump()
functions - Removed enabling from command line
- Added more PHP unit tests
- Removed