Features
- The panel can now be extended with your own icon plugins 🎉
panel.plugin('my/icons', {
icons: {
'my-icon': '<path d="M7,3V13H5v2H8a1,1,0,0,0,1-1V4h2V2H8A1,1,0,0,0,7,3Z" /><circle cx="2" cy="14" r="2" /><polygon points="12 0 12 6 16 3 12 0" />'
}
});
- You can now use query templating in more blueprint options (help, default, label, empty and headline) (#1823, #1862)
fields:
text:
label: "Notes for {{ page.title }}"
type: textarea
help: "You can fill in some notes for {{ page.title }} here"
- To create a custom response in your custom API routes, you can now return a Response object (#2076)
- Content locking can be switched off with the new
content.locking
option (#2000)
return [
'content' => [
'locking' => false
]
];
- New
F::relativepath()
method
echo F::relativepath('/Users/secret/www/site/templates/default.php', '/Users/secret/www');
// result: '/site/templates/default.php'
- New
$options
argument in Json::encode()
(#2111)
echo Json::encode('здравей', JSON_UNESCAPED_UNICODE);
- Added
yml
and yaml
extensions to F::$types
(#2018)
echo F::type('yaml');
// result: code
- Added
application/yaml
and text/yaml
to Mime::$types
(#2018)
echo Mime::fromExtension('yml');
// result: application/yaml
Enhancements
- Clicking the
Today
button in the calendar dropdown will now immediately set the date (#1736)
- More detailed PHP CS settings now result in even cleaner source code
- Changing a user role is now completely disabled if there's just one role (#1948)
- The
parent
option in sections is now validated correctly and a readable error message is thrown when incorrect objects or values are given (#1938)
- The current user's role is used as the default when creating new users (#2038)
- The panel default language is now used as default in the installer and when a new user is created (#1940)
- Improved pull request template
- We now use absolute class names in doc blocks for better IDE support
- A custom panel css file has now a cache-buster timestamp (#1729)
- New detailed error messages on uploads, including php.ini setup issues (#1812)
- The image preview in structure fields now uses srcset and proper thumbnails (#2039, #2040)
- Updated contributing guide
- Invalid structure field data now throws a human-readable error message (#2046)
- Enhanced structure field preview for multiselect fields (#1996)
- We reduced the content locking frequency to make locking less resource-intensive (#2000)
- Updated translations
- Translated options in blueprints have better fallbacks now, if the language is not available (#1876)
- An invalid field section setup is now throwing a more readable error (#1935)
Fixes
- Show radio buttons in the files, pages and users pickers, when the
max
option is set to 1 (#2109)
- Fixed panel jumps on opening the file dialog from textareas (#1879)
- Fixed unicode replacements in Slug generator (#1903)
- The correct locale is now set in API calls from the panel, which fixes localised dates and other localisation issues (#1872)
- Forbidden user roles no longer appear in the user dialogs, when creating a new user or changing user roles (#1917)
- Default values in structure fields no longer block saving checkboxes and other fields correctly (#1950)
- Adding files to the textarea now creates correct absolute paths when necessary (#2003)
- Users without an admin role can now change the roles of other users if they have permissions to do so (#1919)
- Keyboard navigation through dropdowns now skips disabled options correctly (#1661)
- Routing in the panel no longer shows broken fields (#2007)
- The pattern validation in text fields is now working correctly (#2041)
- Fixed Page siblings in
page.update:after
hook (#1401)
- Consistent
$collection->append()
and $collection->prepend()
methods (#2078)
- The Vuex user store is now correctly updated when the email, language or name of the current user is changed (#1957)
- Untranslatable fields in multi-language installations are now never stored (#2001)
- Files in the files section are now sorted explicitly by the sort field to fix a wrong order (#2020)
- Invalid fractions in structure fields are now handled correctly (#1930)
- Focusing a disabled structure field no longer throws an error (#1960)
- A duplicated page is now properly indexed when the
page.duplicate:after
hook is triggered (#1923)
- Better range input behaviour when the field is empty (#2044)
- Fixed layout of the empty box, when there's a lot of text (#2065)
- The
info
option in the users field is now working correctly (#2050)
- Fixed unclickable links in the help text of a disabled field (#1965)
- The disabled toggle field now displays its state correctly (#2004)
- Fixed a bug in the time field, which always set the time to
12:00 AM
(#1781)
- The file field in API error responses is now showing the correct file path on Windows (#1937)
- Spellchecking in textareas is now enabled by default again (#2047)
- Fixed Page siblings collection in
page.changeSlug:after
hook (#1952)
- A newly created user can now be impersonated directly (#2021)
- Fixed
widont()
helper when the last word contains a dash (#1902)
- Some nested array options in the config didn't work reliably. This is now fixed (#1944)
- The
$position
parameter in the page.changeStatus:before
hook is now filled in correctly at all times (#1982)