All notable changes to twill
will be documented in this file.
- Laravel 10 support by @antonioribeiro in area17#2155
- Allow disabling automatic navigation on a Capsule package by @antonioribeiro in area17#2113
- Allow creating blocks and repeaters inside Capsules by @antonioribeiro in area17#2082
- Singleton - Add support of capsules inside the seed method by @cambad in area17#2180
- Fix nested repeater being duplicated by @brunEdo in area17#2211
- Fix for VSelect component to use float values by @eudaco in area17#2024
- #1957: Fix connected fields keepalive. by @haringsrob in area17#2047
- Backport connected fields. by @haringsrob in area17#2059
- Missing .env line for disabling S3 storage by @DarthMikke in area17#2162
- Update index.md by @alexfraundorf-com in area17#2055
- Update architecture-concepts.md by @alexfraundorf-com in area17#2054
- it-IT translation enhancements by @LucaRed in area17#1929
- it translation: fixes by @LucaRed in area17#2201
- Revert listAll change as it may conflict with method overrides.
- Restore laravel 5.8 support.
- Fix long dynamic titles not showing inside fieldsets
#2014
- Fix issue where tags could not save
#1993
- Fix long dynamic titles overflow on Block items
#1975
- Route::singleton is now Route::twillSingleton
#1961
- Various bug fixes
- When displaying a field with html after the block name, this is now stripped and cleaned
#1843
- Added support for laravel/ui 4.x and fixes an issue with Laravel 9 aws adapter
#1900
- Add command to allow developers to flush only the twill-manifest.json from cache
#1859
- Adds a ArrayContains support to connected fields
#1848
- The preview function now allows more interaction
#1561
- Adds disabled support to translated media and slideshow
#1845
- Avoids additional queries when getting blocks
#1790
- Fixed an issue where translation fallback would not work for blocks
#1754
- Fixes an issue that would allow unpublished users to continue to login
#1833
- Fixes an issue that where custom icons were not picked up by the build process
#1825
- Submit options are now configurable using the getSubmitOptions
#1719
- Using enableDraftRevisions you can now have drafts on top of published versions
#1725
- When having many blocks, the list is now srollable
#1464
- Improved support for custom icons
#1732
- Fixes a js error that occurred when cloning repeaters
#1734
- Resolved an issue where slug models could not be found if directories were nested
#1738
- Fixed slugs in nested modules to not rely on random sort anymore
#1743
- Fixed an issue where the activities dashboard could show less entries
#1764
- Fixed an issue that could cause undefined errors when using subdomain routing
#1779
- Optimized a query in HasRelated
#1789
Various small documentation updates.
->pivot
is now available when using getRelated (to get the position)#1687
- When updating a model via the repository, the updated model is now returned
#1706
- Fixed no-cache header
#1695
- Fixed divider icon not showing
#1699
- Fixed Path separators for windows in capsules
#1702
- Added
divider
(
) support to the Quill toolbar#1679
- Fixed issue that would cause Twill ui to crash when using Quill
#1680
- Fixed some backwards compatability issues with older Laravel versions
#1684
- Fixed issue with browsers in the block editor
#1689
- Fixed an issue that would not cleanup removed browser items in blocks
#1675
- Fixed an issue that would not display fields translatable in the edit modal window
#1676
- Reverts change in build folder location
- Fixed console error when editing block with media in the block editor
#1659
- Media fields can now be validated in blocks
#1648
- Internal links in quill are no longer set to target _blank
#1649
- Improved restoring support for nested modules
#1590
- Make site link translatable
#1617
- Fix SQL error on twill:refresh-crops command
#1618
- Fix locale if intl extension is missing.
#1620
- Fix usage of quotes in placeholder
#1621
- Fix visual issue with long notes on media
#1612
- Change search to allow less then 3 characters
#1613
- Add polyfill for doesntContain to ensure Laravel 7 compatability
#1635
- Fixes an error when using translated validation rules in Laravel 9
#1611
- Avoids a 500 error if glide base url is set to an empty string
#1603
- Fixes an issue where repeaters and blocks would not expand on create/duplicate
#1608
No new features were added in the final release. Please check rc and beta tags to see a full list of new features and fixes.
- Improved language label display
#1592
- Fixed regression in translatable settings
#1598
- Fixed capsule database path
#1583
- Fixed activity log morph size
#1565
- Added repeater guide
#1576
- Added option to disable repeater sorting
#1541
- Added support for connectedBrowserField when using browsers
#1400
- Changed activity log morph size to bigInt
#1565
- Fixed leftover array accessor on capsule object
#1574
- Fixed small visual issue with long labels
#1566
- Fixed MorphMany saving
#1460
- Small improvement to the install documentations
#1569
- Allows media fields to use wysiwyg
#1540
- Reverted change that throws exception when crops are missing
#1535
- Fixed issue that would cause undefined index when using octane
#1549
- Fixed bug in singleton generator when using plural name
#1551
- Fixed regression for resources in capsules and packages
#1552
- Fixed Glide url without scheme
#1545
- Improved custom page documentation
#1548
- Improved config documentation
#1537
- Added documentation on how to use custom icons
#1538
- Twill composer packages
#1446
- Url field type
#1514
- Browsers are now supported by connected fields
#1399
- Fixed regression with repeaters in updated block system
#1518
- Fixes visual issue when using limitHeight on a wysiwyg field
#1509
- When refreshing crops, block crops are now included
#1517
- Laravel 9 support
#1243
- Added Twill block classes to support block render data, validation and more
#1421
- Repeaters and blocks are now updated instead of recreated
#1431
- Improved translatable fields validations
1411
- Update Refresh Crops command to take in consideration the MorphMap
#1485
- Get image size from uploaded file instead of stored file
#1412
- Fix unauthenticated user 500 error when using custom error handler
#1449
- Fix exception for missing repository in related browser
#1405
- Do not show changed dialog when content is identical
#1359
- Improved performance when many fields/languages are used
#1350
- Added more guides
#1473
- When in debug mode and a crop is missing an exception will be shown
#1351
- When admin account creation failed, and error is now shown
#1114
- Add an option to set
$controlLanguagesPublication
in the listing layout that can be used to disable language publication controll in the create modal#1468
- You can now control the revision label from the revisionsArray method on the model
#1467
- Validations can now be created for repeaters
#1156
- Max amount of repeaters can now be set from the field rather than the repeater itself
#1433
- Added an option to automatically seed singletons
#1456
- Fixed regression where slugs were not checked if unique
#1381
- Repeater Collapse All only works once
#1330
- Ensure correct button messages when skipping modal on new content creation
#1324
- Allow media to be deleted when used model is removed
#1160
- Ensure default values are set for radios in the vuex store
#1100
- Ensure LQIP data is always available
#1352
- Add typecasting to select dropdown for settings support
#1203
- Move development specific autoload components
#1391
- Repeaters no longer expand when adding a new item
#1461
- Notes are now rendered in media fields
#1443
- When updated_at is empty, it now falls back to the created_at timestamp
#766
- When cloning a block, the new block is dereferenced from the original
#1410
- Improved content scheduling
#1307
- Fixed 500 error if google analytics data is empty
#1470
- Fixed not all Translations were loaded within editInModal
#1469
- Improved missing "disabled" implementations for various fields
#836
- Added documentation for permalinks
#903
#1092
- Added documentation for custom media metadata
#1031
- Added documentation for singleton modules
#1231
- Added guide on how to customize the create modal
#1436
- Improved documentation for field grouping
#1214
- Added documentation for side fieldsets
#1420
- Added documentation for the tags field
#1375
- Artisan command
twill:make:singleton
to generate single-record modules#1178
- Option
--hasNesting
to generate self-nested modules#1140
#1222
- Artisan command
twill:refresh-crops
to generate missing crops#1289
8b1e4f6d
- TwicPics image service
#1217
ce15c4a5
- Turkish language support
#1134
- Support for translated permalinks in the title editor
#1092
- Support for capsule service providers
#1212
- Auto detect latitude-longitude value in location field
#1275
#1170
- Adds the ability to display an indexColumn selected from a relatedBrowser
#1302
- 🚨 Fix CSRF vulnerability in logout method
#1240
29041f07
- Support attribute casting on model and translations with JSON field groups
#1151
- Support dynamic repeater titles with JSON repeaters
#1171
- Fix admin HTTP exception views detection
#1213
- Prevent conflicts with built-in Vue component names
#1164
- Add fallback to capsule model in permalink base
#1216
- Add
doctrine/dbal
3.0 support#1226
- Ensure capsule autoloading when config is cached
#1242
- Fix edit link feature regression in Quill WYSIWYG
#1270
- Remove references to deprecated Symfony class
#1269
- Prevent undefined route errors in IconsController
#1268
- Fix typo in
twill:capsule:install
command#1290
- Initialize undefined crops in cropper UI using first available ratio
#1258
- Fix
byKey()
setting query when passingsection
argument#1303
- Remove duplicate test stub class
#1311
- Fix destroy action on single nested items
#1304
- Prevent multiple AJAX requests in Block Editor previews
#1282
- Fix singleton routing for primary and secondary navigation support
#1325
- Use case insensitive like operator in filterHandleTranslations for PostgresSQL support
#1322
- Update routes mapping order to allow overrides
#1133
- Handle many-to-many relations in index columns
#1174
- Add
capsule_repository_prefix
configuration#1209
- Support custom port in
dev_mode_url
configuration#1163
- Support additional table actions in module listing
#1202
- Show red input count only if above 90% capacity
#1237
- Collapse repeater blocks on page load
#1296
- Update nested module count pluralisation
#1251
- Support
titleKey
parameter inrelatedBrowsers
configuration#1301
- Update
HasSlug
to use Eloquent instead of DB facade#1309
- Update german translations
#1235
- Update italian translations
#1312
- Update docblock annotations
#1167
- Update documentation
#1165
#1244
#1236
- Add pagination and a few more quality of life updates to the documentation
#1131
- 🚨 Fix XSS security vulnerability #1157
2dd77b15
- Hydrate related browsers on preview #1130
- Use configured namespace when generating model class in repository
80e1b590
- Translation key typo on the dashboard
c630d0d1
- Block editor updates
- Form fields updates
- Border option for 'radios' and 'checkbox'/'checkboxes' field
a0376466
04261d61
1eda5f0b
93aeb570
- Columns option for 'radios', 'select', 'checkboxes' and 'multi_select' fields
9fedcf47
ee1f6681
cad812c2
- Time picker form field
42d1880a
969e800c
- Option to make multi select searchable
bbead399
- Automatic input direction for RTL languages
e8a60d0f
318834c8
2b183493
- Click-to-place on the Location field's map
e48245aa
- Support inverse HasOne relationship for BelongsTo browsers
d1b67fa7
f1e6efc1
4f791c66
- Border option for 'radios' and 'checkbox'/'checkboxes' field
- Capsules updates
- General updates
- Prevent submitting a form before saving an input into the store
#1030
- Prevent multiple submit events in add/create modals
3dfb0c8f
cb38ba53
40248552
- Fix incorrect position of link edit options in wysiwyg editor when height limit is set
f8276462
- Ensure pasting content in quill do not make editor scroll to the top
07f7aa00
51302a15
- Safari form submit issue in Filter component
29a1f227
91390ac2
- Support revisions preview and restore with belongsTo browsers
#984
#1085
- Toggle media library unused checkbox on clear only if active
d73ff3eb
- Order files by fileable id
d7df01bf
- Register capsules routes before Twill internal routes
c1acb981
- Issues when extending Twill's exceptions handler
itca7a650e
- Support multi-country locales on Translatable
c5b341d4
5d9c9953
- Fix Exception Handler broken for Laravel 8
569ce2e6
ce58aae5
76890ffa
- Update browser documentation
b7e288db
bd9f7aeb
1f9127b8
71a505f9
4e04639d
- Update repeater field documentation
f32ddc1a
8f58d422
03dcfbd8
22dfaa49
f252727d
- Add HandleRelatedBrowsers to ModuleRepository
4c3db071
- Update french lang file
9517ff44
- Display publishable languages labels using the currently set locale
e4dcfe3d
- Move icon svg files to blade files
cf73e2fe
- Update model stub default crops
9ab7977c
4ccca727
- Add an axios global error handler to warn on session expired
c626a143
ed6164dc
3c78c933
- Prevent console errors when using custom admin pages
e1f606d6
- Missing lang keys
e408fa77
14f7212c
- Table aliases in Eloquent scopes
1d98f3b8
c37d5654
- Remove permalink field in modal if module has no slugs
cfaabe47
c0649443
7bcd3d85
- Tests suite for browsers
7c0bad69
d529cb48
2a862e0c
01fb29e0
f15034fa
99dde9c4
3d45a04b
2b6cefcd
d7e83e60
54517646
8aa2ca60
9c408428
deeaf4e3
9ee6a91f
- Complete German translations
7c6c94e2
66126b45
279e0b5e
8e982618
8de83a16
a26ac6d4
bd69cac5
93e347d9
65bb2d3c
d8b7fc93
1187482a
- Make bulk-publish notice translatable
585c1e3d
- Add and improve existing DocBlocks
17390bb6
55027c07
579cc87e
978ba592
5770a424
55c29db8
aa072490
fb0ef006
f12bc787
7f24d980
e7409b8d
aa80d1ad
2e2d5342
e2b9f027
a2a43657
4151d123
3adddbed
36a695ce
3bafed88
28c6e23e
371fb3bd
2f1767ed
e8609825
1664edb8
- Fix npm dependencies security vulnerabilities
39fb3471
ef9dd22a
304e16b1
8ea82edd
f28f8e68
b42ef685
- Allow Google2FA-QRCode 2.0 to add support for chillerlan php-qrcode
30f296a8
53067b1a
6e19e7bb
ee61209d
b7a892d9
5b3640a5
eed1476b
174a684e
#1074
- Add support for browsers using HasRelated behavior
580faa47
- Allow
dev_mode
to be set in.env
95874a1a
- Add custom subject to notifications
f137b213
- 🚨 Fix logout security vulnerability
e84abd4f
- Update capsule provider booting and registration (fixing view:cache)
5a086a32
- Save wysiwyg sourcecode value into store on change
83d3eb62
8d9a3d21
c4911046
4aebb3e3
- Move some hard coded texts to lang file
20534801
- Adds docs with examples for conditional fields
33717de7
908fb63f
05aef80c
- Fix typo in multi select inline example
8abefe1c
- Media library upload regressions (hotfix) #959
- Configuration system for capsules #924
- Automated
belongsTo
browser field relationship #913 - Internal API documentation #929
- Connected fields array values support #935
- Capsules finder methods and helpers
d30f341d
- Ability to retrieve all image crops in a single call, as generated URLs or data arrays #928
- Ability to disable crops entirely on the
medias
field #9220a153c29
7dbfaef6
- Support for custom title key in related browsers #942
- Custom create modal view regression #920
- Subdomain routing regression #908
- Media Library uploads regression when using Postgres #941
- Fix "Unresolvable dependency resolving" problem #952
- Ensures app/Twill/Capsules exists during install
deff0a87
- Fix minor typos in documentation
3dcf4fa2
- Docs: update form fields documentation #945
- Docs: add missing docs for $permalinkBase
1609765b
- Docs: add duplicate param to $indexOptions
d665967d
- Docs: add skipCreateModal option to controller docs
08fd0167
- Update rebase GitHub Actions version to support forks with branches of the same name
e08ee215
- Capsules without translations: move HasCapsules trait to the base model
8b730e81
- Laravel configuration caching: set the capsules list config as an array
2b5b07a5
- Update documentation to reflect Laravel 8 support
c01c426d
- Fix wording and add proper method description
e1293551
- Laravel 8 and PHP 8 support #740
- After long months of compatibility testing and stability testing in production, Twill is finally compatible with the latest versions of PHP and the Laravel framework.
- Twill Capsules #729
- Twill Capsules are modules encapsulated in a single folder. Like modules, they can be generated from the command line, but they can also be installed from a remote repository. We think this will enable new ways for the community and ourselves to share reusable and customizable Twill modules.
- Deep nested modules #775
- When using dot notation to nest modules, it was previously only possible to use a single children module. With those changes, it is now possible to go add deep as needed.
- Image and file replacement from the media library #660
- This new feature enables your users to replace an image or file globally from the media library, preserving all relationships with records, blocks and repeaters where the image or file has been attached.
- Nested repeaters support outside of blocks
ce75aff1
- Algolia search in docs
c1d85e48
- Glide cloud sources classes to allow Glide and S3 integration
11f0f502
- Allow renaming tag tables
3f34da73
- Allow passing email and password directly on the command line when creating a superadmin user
812331d1
- Add target attribute in Twill navigation entries to allow opening in new window
3418edcc
- Automate CMS permalink for nested modules
94742f29
- Add ability to store more data from the Google Maps API #721
dfaa5f8e
- Allow to use a different name than relationship when hydrating a repeater #717
9ead6d5c
- Support custom model identifier key in controller #780
fce6465d
- Add optional note into the Browser modal (via the Browser Field)
b4cb5b83
- 2.1 regressions with blocks configuration #813
- Block name (configuration key) and component not matching issues
- Duplicate blocks and Twill blocks conflicts issues
- Show a better message when block is missing #712
3dd66067
- Add default icon and trigger (repeater) to Block
ae162ac3
- Logging deprecated use of block and repeater definitions in config
1beadaae
- Generate Vue Blocks only for 'compiled' and confirm overwriting if file exists
bc7dfa50
- Fix uploads with custom root path on S3
a92b6232
- Closes #553. The rationale for keeping the S3_ROOT in the uuid in database is to allow changing its value while keeping, for example, older uploads in the previous root (which might be connected to a different Imgix source). It would also be a breaking change to remove the root from the uuid in database. We might reconsider this for Twill 3.
- Fix S3-compatible storage compatibility (DO Spaces)
4c8cc698
- "Create and add another" fix for macOS Safari/FF #782
2d403516
- Nested listing: maxDepth now respected
9e9c7f8d
- Publication bug in module create modal #732
7afdca7f
- Broken variables for FR emails #734
2cc9984a
- Drop index error on mediables table #800
a29a0294
- Artisan make:module (deprecated) should prompt for input #725
a5b3ffc2
- Fix for checkboxes stored as string #694
27c9887c
736a0642
- Prevent the permalink preview from wrapping when over 52 characters long
33b5641d
- Don't create superuser while on no-interaction
efac9ff7
- Route name duplicating prefix and module
f446363b
- Don't render languages columns when only one is available
c46bdcda
- Fixed nested listing on undefined children
ef9a8dfb
- Documentation
- Vapor support
- We've had the opportunity to deploy Twill instances to Laravel Vapor and refactored the way Twill deals with its own assets urls internally in the process.
- Use vendor Twill manifest when public/ is missing
5ff29afe
- i18n
- Misc.
- Wysiwyg with Quill : set default styling for italic and underline in the editor
32bbfb4f
- Consider morphed models when getting the name of the class to obtain the repository
cad35392
- Easier to use starter route
0d9c0d09
- Make slug model namespace dynamic
308f2a92
3ba04e51
7cbbc253
- Preserve the blocks order when c
alling a block editor
deafbef0
- Add fallback for adminEditUrl in browser fields
a55f9848
3b16f22d
- Wysiwyg with Quill : set default styling for italic and underline in the editor
- CI and testing
- Setup CI tests on GitHub Actions
03ab2714
- With Travis CI dropping free support for open source projects, we've had to migrate to a new CI service. GitHub Actions made the most sense for us. The migration took time to get right but we now test a larger compatibility matrix, from PHP 7.1 to PHP 8 and from Laravel 5.8 to 8.
- Add on demand rebase GitHub Actions workflow
d2a5c8e3
- Add on demand frontend build GitHub Actions workflow
c8bdf928
- Turn on TestBench debug
8c40b7d9
- Display response errors
7bb74eec
- Setup CI tests on GitHub Actions
- Community updates
- Security
- Fix npm dependencies vulnerabilities
- Fix npm dependencies vulnerabilities in docs
- Fix block editor group parameter update
121b0166
- Both
group
andgroups
can be used and receive a string or an array
- Both
- Fix #701: settings forms regression
053c4ea4
- Fix skipCreateModal option on submodules
2474ae56
- Fix #670: multi select field doesn't prevent user from picking duplicated option
33e54a43
- Remove legacy product requirement on required fields (#697) (#699)
89469159
- Fix regression introduced by #620 (#702)
52b66289
- Self-contained blocks (#597)
1e95b0ac
9ae502a4
948985ef
66fa7c5e
c00759ee
- This change allows defining blocks without adding them to the
twill.block_editor
configuration - This is backwards compatible with blocks already defined in configuration
- Repeaters are now created in a dedicated folder:
views/admin/repeaters
by default, but your existing repeaters in theviews/admin/blocks
file will still work - Annotations are now supported in blocks and repeaters Blade files:
- Provide a title with
@twillPropTitle
or@twillBlockTitle
or@twillRepeaterTitle
- Provide an icon with
@twillPropIcon
or@twillBlockIcon
or@twillRepeaterIcon
- Provide a group with
@twillPropGroup
or@twillBlockGroup
or@twillRepeaterGroup
(defaults toapp
) - Provide a repeater trigger label with
@twillPropTrigger
or@twillRepeaterTrigger
- Provide a repeater max items with
@twillPropMax
or@twillRepeaterMax
- Define a block or repeater as compiled with
@twillPropCompiled
or@twillBlockCompiled
or@twillRepeaterCompiled
- Define a block or repeater component with
@twillPropComponent
or@twillBlockComponent
or@twillRepeaterComponent
- Example:
@twillBlockTitle('Body text') @twillBlockIcon('text') @formField('wysiwyg', [ 'name' => 'text', 'label' => 'Text', ])
- This change also provides new Artisan commands:
php artisan twill:make:block {name} {baseBlock} {icon}
, which generates a new block based on a provided blockphp artisan twill:list:blocks
, which lists blocks with a couple of options:-s|--shorter
for a shorter table,-b|--blocks
for blocks only,-r|--repeaters
for repeaters only,-a|--app
for app blocks/repeaters only,-c|--custom
for app blocks/repeaters overriding Twill blocks/repeaters only,-t|--twill
for Twill blocks/repeaters only
php artisan twill:list:icons
, which lists all icons availablephp artisan twill:make:module
, equivalent to the now deprecatedtwill:module
which will be removed in Twill 3.0.
- Provide a title with
- This change allows defining blocks without adding them to the
- Resolve npm modules from root app (#617)
360d82c1
- This change allows requiring node modules from the root project folder. Previously, custom Vue components could only use npm packages installed by Twill itself. With this change, any npm package from the main app can be required. We do this by adding the root
npm_modules
folder to webpack’s module resolver.
- This change allows requiring node modules from the root project folder. Previously, custom Vue components could only use npm packages installed by Twill itself. With this change, any npm package from the main app can be required. We do this by adding the root
- Add a new option to skip the add new modal to create records (#642)
1ec1f428
- This change allows users to create full records by landing directly on the form when adding new records
- It is enabled through the new
skipCreateModal
option of a module's controller$indexOptions
array.
- Implement a new behavior to allow saving repeaters into json columns (#654)
85f96306
a2fffa4f
- This trait is not intended to replace main repeaters but to give a quick and easy alternative for simple elements where creating a new table might be an overkill.
- Simply define an array with repeater names on your repository:
protected $jsonRepeaters = [ 'REPEATER_NAME_1', 'REPEATER_NAME_2', ... ]
- Add new options to medias and files form fields
c564ecc2
571cc1e9
- filesizeMax, on the files field, to prevent selecting a file which filesize is above provided value in mb
- widthMin, on the medias field, to prevent selecting an image which width is below provided value in px
- heightMin, on the medias field, to prevent selecting an image which height is below provided value in px
- Added new option to display filenames of images in the media library grid (#658)
2034b6e7
- Add confirmation modal option to checkbox and radio form fields (#687)
41261c18
b152cdd9
fe6ec3d0
- Allow user to filter by unused images or files in the media library (#688)
a52349a9
261941fc
- Add admin title tag suffix to config (#680)
3aefcdc3
- Support checkbox form field in settings
d62d303f
- Support date_picker and color form fields in settings (#576)
f66aaa68
- Allow 3 columns layout by setting up a middle columns (#638)
2b2e3e49
- Allow browsers to sync extra pivot attributes (#629)
f33b8825
- Provide env variable for configuring custom s3 hosts
5894ccce
- Add ability to provide a custom morphed repeaters name (#679)
3a118bc3
- Support required option on wysiwyg form field
e780bcfd
- Support disabled option on select form field
e780bcfd
- Allow format change in datepicker field (#628)
936057d8
- Allow datepicker format in publication dates (#636)
477bc288
- Allow a model class to be passed instead of the relation name (#640/#619)
8bf8e8f0
- Add new
buttonOnTop
option to medias, files and browser form fields (#598)964c99a0
cf8ead0d
- Provide optional parameters for changing label and including a note in tags form field
0d535710
- Fix new listing actions behaviors
2d1b2eb5
- Destroy action was not removed when disabling forceDelete in indexOptions
- Duplicate action was showing in trash and was not removed when disabled in indexOptions (which is by default)
- Fix bulk destroy integration
- Fix validation errors display (#605)
fc5b16a9
- With the simplification of the exception handler in #561 the override of the invalidJson method was dropped by mistake. It is currently necessary as the frontend expects errors only in a validation exception response. In future improvements it would be better to keep the default Laravel response format and update the frontend to read one level deeper.
- Fix local disk and Glide base url request scheme resolution
15a2dbea
- This commit introduced an issue by using request() in config. When using php artisan config:cache that request is not coming externally with the appropriate headers.
- Fix draggable regression on datatable
a79e3d2e
- Fix scheme being added twice when APP_URL has the scheme (#651)
2e5784cc
- Fix Twill form utils aliases on Laravel 7
c0018e5c
- Fix connected fields component alias
4b61b78e
- Fix typo in translation
c0c492c5
- Fix child module redirect when adding new records in Laravel 6 / 7
e60c5066
- Fix filesize limit uploader error display (#614)
21263a3e
- Fix missing row duplication event handler for nested tables (#615)
c50b16d2
- Fix translateTitle in a form (#648)
8f5b0e28
- Fix route name duplicating prefix and module (#591)
267eec02
- Fix media form fields binding
73104e62
- Fix blocks spacing
56b5bc21
- Fix icons missing svg attributes
c29b9dd6
- Fix tests
cd50ea9d
- Fix translated medias in settings (#620)
e036313d
- Fix select with no options (#625)
3adea583
- Fix select field in settings: wrap string values in quotes (#653)
86d72939
- Fix preview iframe resizing for blocks (#669)
33f77ee7
- Fix notifications url (#678)
379df54c
- Fix multi_select values escaping (#690)
d54b94ac
- i18n improvements (#624/#573/#632)
fc856c40
ba802587
- Added a twill:sync-lang command to generate lang files from a CSV input
- Configure vue-timeago to respect the set locale
- Configure date-fns and flatpickr so they respect locale
- Update french translations
3b01dcfa
edd47e7a
- Add norwegian translations (#602)
12acbd6f
- Add italian translations
6389ffdd
1155d33e
- Add spanish translation (#689)
65789733
9163757d
- Fixes in russian localization (#586)
1d03572e
- Dynamically set time format using Internationalization API
8d53a489
- Update i18n keys and exported CSV
4cef3f5d
39346337
- Log Twill APIs exceptions in browser console
c6956b8f
- Improve tree reorder algorithm for nested modules (#600)
c00bf011
- Ignore symfony dump buttons in preview to be able to expand dd() output (#657)
90524b47
- Pass the block currently being rendered to the layout view (#664)
67df265a
- Make hydrateHandleBlocks and blocks preview recursive (#644)
eb41a1b8
- Add secondary_navigation example in docs (#692)
19879f01
- Documentation improvements
ce7c8f95
2c1a0d29
5e223e52
8822c21a
af410508
0f7b3a05
8aead1f3
4a090409
e6c313c3
3c2c3a1f
- Update composer deps
8082d7a2
- Update docs dependencies
ff1c7c7a
- Update frontend build and version
d49df23
- Update npm dependencies
11711592
- Add nested module test
b2c2b01b
- Update distributed assets
2a1fe7c5
a87aea14
8ca8cb23
63a10782
5eb8654d
2f48abc3
2b877921
687ad5f6
- Fix fields not rendering after switching locales (#572)
4ea1943b
- Fix duplicate action on Laravel 7
a30922b1
- Update distributed assets
4e19670c
- Update 2.0 changelog
24fa0942
- Update CHANGELOG.md
cb923aa6
- Fix changelog release date
57cd4e3e
We're really excited to release Twill 2.0 after a few months of focus to really set the project up for success. We've responded to the community pain points, supporting both Laravel 6 and 7, removing the need to build blocks and assets, improving documentation, introducing automated testing, and many more updates and bug fixes you can read more about below.
We were also very positively surprised by the number and quality of external contributions. Twill now has 42 contributors, twice as much as our previous release, and community members are starting to provide excellent support to other developers from their experience working with it. Thanks a lot to everyone involved! Twill also surpassed 20k installs recently!
We also want to note we understood the concerns shared by the community about our lack of releases in the past few months, and hope that this release will make you love working with Twill even more after patiently waiting for it. Our support for Laravel 6 took time to perfect, with dependencies going deprecated. Our changes to the frontend build or to the repositories traits needed to be challenged in different codebases. Stability is key for our users and it was important for us to take the time to make it right.
We could have tagged Laravel 6 support earlier though, that's entirely true, and that's something we want to address moving forward. We will now commit to releasing at least once every month. We might not want to be as quick as Laravel with a major release every 6 months, but we will be more actively releasing even if it is for a few minor fixes, that's for sure. With that said, we also want to say thank you to all the developers that tested our changes on the master branch during the past few months. It's been incredibly helpful to get feedback and contributions from the community.
We hope you enjoy this release, it is quite a big one. We're already excited about the next one!
HOW TO UPDATE
First, update your composer.json
file by using: "area17/twill": "^2.0"
.
Run composer update
in your project and then, run Twill's own update command: php artisan twill:update
. This will force update your published Twill assets. You can delete the old ones from your repository.
If you're worrying about your custom blocks disappearing from the build, you should not! Blocks are now rendered at runtime, without you having to compile them from Blade to Vue components or wait for Twill to rebuild its assets anymore! Check out our changelog below to learn more.
Finally, you will need to migrate your database using php artisan migrate
. Read more below on what might affect your existing codebase before doing so.
- Semantic versioning
- Laravel versions support
- Blocks and frontend build workflow
- Database migrations loading strategy
- Database migrations changes
- Translation models
When releasing Laravel 6 at Laracon US last year, Taylor Otwell explained why v6 instead of v5.9, since it wasn't a "paradigm changing" release for the framework. That was because Laravel adopted semantic versioning (major.minor.patch
). For simplicity, and because this is common practice for open source projects, we made that shift as well.
Starting with Twill 2.0.0, major releases are released only when breaking changes are necessary, while minor and patch releases may be released as often as every week. Minor and patch releases should never contain breaking changes.
When referencing Twill from your composer.json
file, you should always use a version constraint such as ^2.0
, since major releases of Twill do include breaking changes.
Until recently, Laravel and Twill were following romantic versioning (
paradigm.major.minor
). This is why Twill 1.2.2 was not just about patches but new features and improvements as well. Because today's release includes breaking changes and Twill now follows semantic versionning, we have to tag it as2.0.0
, even if it is not a paradigm shift at all.
Twill 2.0 supports Laravel 6 and 7, but does not support Laravel 5.4 and 5.5 anymore. 5.6, 5.7 and 5.8 are still supported.
We've removed all references to deprecated Laravel helpers from Twill, updated dependencies, and deleted some deprecated code from dropping support of 5.4 and 5.5.
We've also migrated from the deprecated dimsav/laravel-translatable to astronomic/laravel-translatable.
We've removed the Debug Bar and Inspector debugging packages as Laravel now ships with Ignition and we felt like developers should be able to pick the tools they prefer.
It is not necessary to rebuild Twill's frontend when working with blocks anymore. Their templates are now dynamically rendered in Blade and loaded at runtime by Vue. Practically, it means you do not need to run php artisan twill:blocks
and npm run twill-build
after creating or updating a block. Just reload the page to see your changes after saving your Blade file!
This is possible because Twill's blocks Vue components are simple single file components that only have a template and a mixin registration. Blocks components are now dynamically registered by Vue using x-template
scripts that are inlined by Blade.
In the process, we've also migrated from Laravel Mix to the latest version of Vue CLI, to have better control over our build. That also allowed us to fix an issue that had been annoying to quite a few users: conflicts with your own application's Laravel Mix configuration. Now, Twill's publishes it's manifest to its own directory with a custom name, and won't be a blocker to running both of your builds if necessary anymore.
If you are currently using custom Vue blocks (as in, you edited the template
, script
or style
section of a generated block Vue file), you will still need to rebuild Twill assets as you used to, but we have a 2 new Artisan commands to help you and we recommend to use them instead of our previous versions' npm scripts:
php artisan twill:build
, which will build Twill's assets with your custom blocks, located in thetwill.block_editor.custom_vue_blocks_resource_path
new configurable path (with defaults toassets/js/blocks
, like in previous versions).php artisan twill:dev
, which will start a local server that watches for changes in Twill's frontend directory. You need to set'dev_mode' => true
in yourconfig/twill.php
file when using this command. This is especially helpful for Twill's contributors, but can also be useful if you use a lot of custom components in your application.
Both commands take a --noInstall
option to avoid running npm ci
before every build.
With that, it is now possible to define a block as being compiled
in the twill.block_editor.blocks
configuration array so that the imported Vue file is prefered at runtime over the inline, template-only, version, and so that you can use the new no-build workflow for all your regular blocks!
It is also possible to completely disable this feature by setting the twill.block_editor.inline_blocks_templates
config flag to false
.
If you do disable this feature, you could continue using previous versions's npm scripts, but we recommend you stop rebuilding Twill assets entirely unless you are using custom code in your generated Vue blocks. If you do keep using our npm scripts instead of our new Artisan commands, you will need to update twill-build
from:
"twill-build": "rm -f public/hot && npm run twill-copy-blocks && cd vendor/area17/twill && npm ci && npm run prod && cp -R public/* ${INIT_CWD}/public",
to:
"twill-build": "npm run twill-copy-blocks && cd vendor/area17/twill && npm ci && npm run prod && cp -R dist/* ${INIT_CWD}/public",
On top of custom blocks, we've also made it possible to rebuild Twill with custom Vue components. This can be used to override Twill's own Vue components or create new form fields, for example. The new twill.custom_components_resource_path
configuration can be used to provide a path under Laravel resources
folder that will be used as a source of Vue components to include in your form js build when running php artisan twill:build
.
We also namespaced our inline javascript variables to prevent any conflict in the global window
moving forward. We know that window.STORE
and window.vm
were being used to hook into Twill's frontend application by some developers. This commit tried to make sure to keep that working , but your mileage may vary if you are overriding Twill views. You should update to window.TWILL.STORE
and window.TWILL.vm
or even better, using window.{{ config('twill.js_namespace') }}
instead of directly using window.TWILL
if you are in a Blade file and process.env.VUE_APP_NAME
if you are in a Vue file.
Finally, to help custom workflows, maintainers and contributors, we made everything configurable:
manifest_file
, which defaults totwill-manifest.json
public_directory
, which defaults toassets/admin
, like in previous versions, and can now be controlled through theTWILL_ASSETS_DIR
environment variabledev_mode
, which defaults tofalse
dev_mode_url
, which defaults to http://localhost:8080 and can be controlled through theTWILL_DEV_MODE_URL
environment variable.
d88ab7a0
/969e1260
/#510
/13a37fb5
/c309a3a1
/4a61875d
/9bc9c249
/dc0c5043
/43f4f6e1
/b86e8d2d
/f80278c0
/482af7fd
/6676c8e0
/3ca864bc
/ea3d7a99
/1cfd81e2
/c183b914
/20f2e022
/0a0692bf
/fb0236f2
/4cfd4f61
/ed4de74f
/e37b4cd1
/228105a3
/fbad6585
/d4f04f6b
/2ac51b3c
/5f49f67c
/471f654f
/160743b4
/b92c9d95
/0f326d59
/82b35ac2
/cedbea45
/9a754806
/45ff20c1
As recommended by Laravel's documentation, we've decided to load Twill's database migrations without publishing them. This will allow more flexibility in the future and it avoids polluting the host application migrations folder.
A boolean config key has been introduced to control this new behavior: twill.load_default_migrations
. It defaults to true
starting with Twill 2.0.
Even if you are migrating from a Twill 1.x application, you should not have to worry about running those new migrations as they have been modified to always check for existence (or inexistence) of tables and columns before doing anything. If you want to maintain migrations yourself, feel free to disable this option and use Twill's migrations
folder as a source of truth to update yours.
We've also prepared for all tables to be prefixed by twill_
in the next major release and exposed new config keys to control their names so you can already start using prefixed tables with Twill 2.0.
372#issuecomment-537965676
/7fced605
/ee489635
Like Laravel, Twill now uses big integers in migrations helpers. This is a breaking change with backwards compatibility provided through the twill.migrations_use_big_integers
configuration key.
Twill now automatically takes care of your translations models fillable
by reusing your translatedAttributes
array as long as you define a $baseModuleModel
, which now happens automatically when generating modules from the CLI. This is not a breaking change but we think you should update to this new approach to avoid duplicating your columns list in 2 files.
#414
/c4e3c3fa
/957702ac
/7a783deb
/cc958d4d
/c8151ede
- Smarter CLI
- Automated testing
- OAuth login
- JSON fields groups
- Azure uploads
- CMS i18n
- Duplicate records
- Destroy records in the trash
- Automated browsers and repeaters
- Subdomain routing
- Tiptap WYSIWYG
- And more...
Twill's module
command now offers available options through a series of questions and then generates model and migration files content dynamically depending on provided options, removing previous versions comments, providing a greatly improved developer experience.
You can use the new --all
option to enable all traits without any prompt. When providing no option, the prompt defaults to yes for all options. When providing one or multiple options, the prompt defaults to no for all other options.
It is possible to use artisan's --no-interaction
option to skip the prompt.
TravisCI is now testing Twill on all currently supported and future PHP versions. Almost 60% of all the PHP code is now covered by a PHPUnit test. Syntax errors are being checked by PHP-CS-Fixer and Scrutinizer CI is now analyzing Twill's codebase at every single commit. Prettier is now configured to maintain Twill's PSR-2 style. PHPStan also helped us fixing a few issues.
38e224ea
/e1e67949
/213b2c9b
/#516
/5af10938
/#517
/3a3605b6
/#533
94362dc5
/3d468aa4
/c287dc18
/18b069f3
/d0cab04c
/f6d2e720
/c13a267a
/9f30604d
/35749445
/85c2730c
/915053eb
/0c753c4f
/3c7e9a82
/3956339f
/6416e41b
/7cb0ac44
/21436f5c
/8f8316bb
/ff2b37e6
/466e2cc0
/c7ad1b91
/2dd11547
/5d2f7eb0
/c6f8a1ec
/2df4e94d
/6c59927a
/6a92f46b
/5cf42a51
/5082beb6
/4c5dda9e
/57c770db
/9599a055
/fc801000
/10669f1f
/cc3d5637
/0b75750e
/723f8c08
/ceb6b39d
/90898bbc
/c86b9700
/2819959f
/094a9fab
/2c2ea3ec
/9639281b
/727416e4
/cb0cb0f7
/6892e5a4
/acddf89d
/dfab755b
/2df955e9
/c4b8b599
/18405838
/ca929ecd
/7fa3a133
/708c8ced
/8bd24c28
/28de0782
/42f48b08
/12eea8ed
/bec7af63
/1c8567c5
/aa61012a
/a80b6e3c
/a85a4255
/9631e7c5
/b1308bad
You can enable the new twill.enabled.users-oauth
feature to let your users login to the CMS using any third party service supported by Laravel Socialite. By default, twill.oauth.providers
only includes google
, but you are free to change it or add more services to it. In the case of using Google, you would of course need to provide the following environment variables:
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=https://admin.<madewithtwill.com>/login/oauth/callback/google
d07002e3
/afd14245
/ 06ec2d4e
/be848d6e
It is now possible to automatically save and retrieve multiple form fields in a single JSON column in database. See #410
.
5564e488
/#452
/657e83cf
/#501
/b48793af
/#541
/74926425
/6437a073
/84176e44
A new endpoint_type
to support Azure storage of all uploads, exactly like when working with S3.
#424
/2129c084
/#443
/d81a5b94
/b7a89f38
/4bf2e133
We added a new layout to enable creating custom pages, keeping the navigation of your admin console. See our dedicated documentation section.
f1f62e16
/b72b6d12
/6040300e
/ef4e748d
/cc79fd83
/42869139
/8b5271d5
/ca5f3ce0
Clean up your repositories with this new feature that will automatically save and retrieve browser and repeaters fields for you. See #400
968e7da2
.
#467
/f5cef179
/89c2297c
/6fd64187
It is finally possible to destroy and bulk destroy records in the trash!
Records can now be duplicated from the listing page.
bb706c26
/a4e2d870
/068b6f2c
/8e39f165
/a32100e9
/bcce64fd
The CMS UI can now be translated. We are shipping this update with Russian and Chinese translations. CMS users can choose their preferred language in their profile. As we are updating this changelog, French, German, Dutch, Portuguese and Polish translations have already been contributed by the community.
#563
/#565
/#566
/de60c543
/b22e7b4b
/6f7d0527
/2abd8160
/7369838a
/af9f995d
/293f74ca
/e5eca909
/cb2da8c1
/07ddbdb7
/664cd633
/6de8008b
/cbd50c6c
/871a5ac4
/ff59fd83
/ecab8b9e
/e5540f73
/455595c7
/4e9420b1
/74fb490b
/90c303b4
/b8470635
/7e9f6d72
/26bbc59e
/8941bec9
/49a04f3d
/93c206c9
/fe37e5c3
/4dbc43ed
/d5ce295d
/56e7fed2
/f26f6a70
/becebc53
/01f629d8
/502165e7
/71209b66
/a5f097d3
/55ed36be
/f92e93c5
/d9c70aaa
/267c6672
/57a19985
/c5d514b1
/b593ad38
/abb61e38
/c1e59ba1
/11a094b7
/05ff649b
/ca27cbb4
/154d0d59
/8bdb2192
/cb482ea8
/6dcef35f
Enabling the new 'twill.support_subdomain_admin_routing'
config key allows adding top level keys to Twill's navigation and dashboard modules configuration, mapping to a subdomain. This is a very simple way to implement multi-tenant CMS/sites in Twill.
A navigation array looking like the following would expose your CMS on the admin.subdomain1.app-url.test
and admin.subdomain2.app-url.test
urls, with its corresponding links:
<?php
return [
'subdomain1' => [
'module1' => [...],
...
],
'subdomain2' => [
'module2' => [...]
...
]
];
App name can be set per subdomain using the 'twill.app_names' configuration array. For our example above:
<?php
return [
'app_names' => [
'subdomain1' => 'App 1 name',
'subdomain2' => 'App 2 name',
],
];
Subdomain configuration nesting also applies to the dashboard modules
key.
You can also provide a custom block_single_layout
per subdomain by creating a Blade file under resources/views/subdomain/layouts/blocks
.
In order to provide HTML tables support in the WYSIWYG form field, we've integrated the Tiptap editor with Twill. You can use it by using the new type
option of the wysiwyg
form field, with the tiptap
value. You can then enable the table
button in your toolbarOptions
.
ae62d294
/150eb3b1
/754e4cce
/cf25ee82
/e8b450db
/6d396a16
/6bb6e25b
/5f798ef6
/bc58e7e3
/6323071b
/584a622e
- Add form utils component aliases
5d5fa662
@formFieldset, @formColumns, @formCollapsedFields, @formConnectedFields, @formInlineCheckboxes
- Add sideFieldset and sideFieldsets sections to form
807674a2
- Add slot to publisher component
f4fceac4
- Fix #90 Add maxlength option to image metadata
54233d21
- Allow enabling svg rendering parameters in Imgix and Glide services
e3d89bc0
- Add disabled property in the form submitOptions
9129e642
- Support custom repository in dashboard and buckets configuration
9d3578e3
- Expose glide configuration
b95ca7f6
- Added get preset url for glide
26015870
- Support multi-browsers in blocks
f6cea4e5
- Add FilterLinks on Listings and Buckets
3a83a069
/c4c22bee
- Add new icons
c762ea21
#397
Support Glide Presets6afbbf5b
#521
Added support for nested repeaters in block0470afda
#526
Implement updateRepeater() for morphMany relations26a0d2de
#528
Added an extra prop to repeater field to override the name0ce0c4cc
#551
Display and apply default filters in listings77eb7f23
#562
Add new fieldNote option to browser, medias and files fieldsaa7a1c5d
#371
Fix maps implementation when printing values from an array.e6a6ac2d
#380
Bug fix with undefined route name when blocks-editor is disabledeaacdbcc
#381
Add check on translatable input store to prevent duplicate field objects2544d059
#385
Fix create superadmin user Artisan command2425ea37
#390
Fix ignoring current email in UserRequest9a6a1c10
#395
Fixed TTY issue for twill build command #23690141c36
#402
When hydrating an old revision, include the ID so relationship methods don't fail62914c81
#418
Fix join() syntax57fbdaf1
#421
Display error when the blocks dir is not foundfed7b92f
#423
Fix missing /js/blocks dir on twill:blocks command47440423
#425
Fix published being sent as string on json1cafa780
#427
Fix google2fa settings not being enabled702e31a3
#429
Fix some deprecated helpers2f1e3489
#431
fixed an http & https issue from APP URLabb1509f
#446
Fixed 'delete' => true not working in indexOptions, refs #28981a32414
#449
Fix « Handle Repeater » feature compatibility with Laravel 5.67b0a275f
#459
Wysiwyg - Counter limit (fix counter limit in Textfield)01151e54
#460
Wysiwyg - Make sure quill is ready when checking content length392f29c0
#461
Forms with no Content fieldset : fix sticky publisher module and fix sticky nav sections9a87a2b7
#469
Check the index exists before trying to save browsers in blocksd1c99948
#475
Fix the admin url of an element in the browser listing44ad2182
#481
Fix typo in docs for nested module764d9fc2
#484
Fix join() syntax in MediaLibrary/Glide.php40288a9f
#485
Fix/destroy sub modulece5d88a0
#506
add required namespaces for Arr and Str in views and blade macrosff811087
#509
Fix inconsistent use of integer and bigInteger on MariaDB 10.3c36252de
#523
Fixed a bug causing select field not accepting default to be falsed1ca7681
#536
Exception handler should return json response on ajax calldec4714a
#539
Fix getSlug() function when locale fallback is activatedc48ca396
- Fix #41 – Use text columns for medias and files uuid, alt_text, caption and filename, make alt_text nullable
96cdebd8
- Fix #504 Swap order of breadcrumbs and secondary nav
2f9a9070
- Apply mine filters on dashboard drafts only if revisions are enabled
0481894d
- Fix activity log breaking on destroyed subjects
d1a18490
- Fix lang switcher border
4ca820fa
- Fix spacing issues
dfea4805
- Fix isAjax check on VSelect component
46a6b424
- Force assets publish on twill:update
21e3fda9
- Fix deeper Twill namespaces
d64a1585
- Fix typo for issue #362
ac76481c
- Fix environment requirements in docs
40ab9d93
- Fix #290 implementation
076ed178
when uploading multiple files at once, the endpoint root was appended once for each file and when not providing the environment variable, null was appended
- Fix missing AWS_ROOT variable
2a467f22
- Fix #399 dashboard repositories service container resolution
8491bbf5
- Fix regression on form notifications
991a6212
- Fix bulk delete warning modal reference
b515028e
- Fix module maker migration generator
8e7fd67f
- Fix migration stub typo
ea14f330
- Form - Make sure $disableContentFieldset is defined
296cb90d
- Prevent LQIP generator command crashes by letting it skip on exceptions
68d9ad6c
#386
Refactor calling trait methods from repository7e45019e
#387
Refactor getLanguageLabelFromLocaleCode to use php intl's "Locale::getDisplayLanguage"e85ff145
#396
Added Logo and Badges to README3bb38272
#398
Responsive filtersb95820f4
#404
Change the way of maintaining Twill version numberd4ba16a3
#430
Move logic to modele1ac4abf
#442
Implement a Sortable function closer to the one offered by Translatable.e46b2318
#445
Replace bcrypt() with Hash::make in CreateSuperAdmin command00711ede
#450
Add style for subscript into wysiwyg8e00ed1e
#500
Extend slug character supportfe888ffe
#534
Slug characters extended42071f08
#537
Refactored HandleRepeaters trait136e7123
#538
Refactored HandleBrowsers trait61a1e810
- 2.0 version and docs updates
f7f2aff1
- Allow using the content editor even if revisions are disabled
b0095e4f
- Add message clarifying grouped validation error messages in blocks
e35afce6
- More 2.0 docs adjustements
e39e029f
- 2.0 documentation updates
09e22483
- Allow firstOrCreate to have only attributes
01415792
- Use bold font in wysiwyg editor content
bbb1bb99
- Disable Quill warnings
4fc8f3a7
- Consider itemLabel better in browser and files form fields
57e4d9da
- Button : add download and rel attributes
cc790342
- Button with a:href : update props and add target
9a2cdd8c
- CSS - set default button as inline block to avoid small visual regression
416dcb4c
- Button update default styling so it works with ahref
204efc6b
- Refactor Button component so it is using render function and can be used to display links
993b8bee
- Invert sorting order in ModuleRepository.
78a36d7f
#428
Use 'SemVer way' of requiring packages in composerad92fbf2
- Update composer.json
786d2606
,93a2f5ab
,aef641f5
,1aaf8ae9
- Update distributed assets
1c74628b
- Update docs dependencies
1990f8ca
Twill just surpassed 10k installs and today, version 1.2.2 is available with a significant amount of improvements and bug fixes thanks to the efforts of 21 contributors: Amr Noman, Antoine Doury, Antonin Caudron, Antonio Carlos Ribeiro, Bram Mittendorff, Daniel Ramos, Dmitrii Larionov, Fernando Petrelli, Franca Winter, Gilbert Moufflet, Jarred Bishop, Lorren Gordon, Nikhil Trivedi, Pablo Barrios, Quentin Renard, Rafael Milewski, Ray Tri, Riaan Laubscher, Stevan Pavlović, Yanhao Li, Žiga Pavlin.
Glide support for local image rendering
Glide is an open source image rendering service that integrates well with Twill and Laravel. It is a self-hosted option for local development and/or production websites and apps that have limited needs for image resizing and cropping. For image-heavy production websites and apps, we still recommend Imgix or a similar third party service, or at least setting up a CDN on top of your images.
The media and file libraries local
endpoint type has also been completely reworked to work with Laravel default public storage location. Remember to run php artisan storage:link
locally and as part of your deployment process if you are using local uploads rather than S3.
To try out Glide on a fresh Twill app, it is as simple as updating 2 environment variables:
MEDIA_LIBRARY_ENDPOINT_TYPE=local
MEDIA_LIBRARY_IMAGE_SERVICE=A17\Twill\Services\MediaLibrary\Glide
Of course, more configuration variables are available through the new glide
key of Twill's configuration. See the default configuration here.
Making repeaters happy again
Repeaters had a couple of issues that are now fixed in this release:
- repeaters in forms are now updating the initially created database record instead of needlessly creating a new record each time their parent model gets updated
- repeaters in blocks are now restored correctly when restoring a past revision
- medias and files fields support has been improved
Different images per language support
You can now globally enable the ability for your content editors to provide different images per language in the media form field using the media_library.translated_form_fields
configuration key (defaults to false
). The user experience is exactly the same as our other translatable field. When rendering in a template or API, you can fallback to the default language if no image has been selected for the current language.
Cleaning up internals
Lead by community member Stevan Pavlović, an effort to clean Twill internals begins with this release. Laravel helpers and facades are getting replaced by dependency injection or at least, for now, to avoid consequent breaking changes, by fully qualified imports.
And a lot more in the changelog below!
HOW TO UPDATE
To update, you will need to run composer update
in your project and then run the new Twill provided artisan command: twill:update
. This will generates new database migrations and invite you to migrate your database. Those new migrations are safe to run as they check for the existence (or inexistence) of tables and columns in your database before doing anything. If you are upgrading from an earlier version than 1.2
, you will need to update your composer.json
file first: "area17/twill": "1.2.*"
.
NOTE ABOUT UPCOMING LARAVEL 6 AND SEMANTIC VERSIONING
Laravel 6 upcoming release was announced a few weeks ago at Laracon US! Twill will of course support it soon after the official release, which should happen at the end of August at Laracon EU 🤞.
Taylor Otwell also explained why v6 instead of v5.9 since the next release is not a paradigm shift for the framework: Laravel is adopting semantic versioning (major.minor.patch
) and for simplicity, we will make that shift as well.
Right now, Laravel and Twill are following romantic versioning (paradigm.major.minor
). This is why Twill 1.2.2 is not just about patches but new features and improvements too.
Moving forward, once Laravel 6 is released, a release with breaking changes will be considered major, which would mean Twill 2.0.0 right now. A release with new features would be 1.3.0, and patches would be 1.2.3.
You can start using Composer's caret version range (^1.2.2
) now if you'd like to benefit from new features without fearing breaking changes on your next composer update
! If you'd rather stick to a stricter way of requiring Twill versions (fair enough, we do that in Twill's npm dependencies for your own safety), you will have to update your composer.json
file to get new features rather than patches only.
- Local image rendering service using Glide 🖼 (6e427fc6, e878b9af, 2a54c030, 0e8adb85)
- Support for translated medias field and extra metadatas (d16386e5, 484c3c1e, e384dad4, 5b28acf7, 4db1ff45)
- Support for maxlength counter on WYSIWYG form fields (d6301ff7, 93af3915, c916e760)
- Support for block groups (57bed474)
- Configuration option to prefix s3 uploads (#290) (b85df5ac)
- Helper to dump ready to use SQL queries (87e20508)
- Option to provide a custom static permalink under the form's title editor (f9c6ed71)
twill:update
command and new database migrations for 1.2.2 (b251ffa0)
- Fix media and file local libraries: local disk is now defined automatically by Twill, and configured to work seamlessly with Glide (10b9cc7a, 52cabe32, ff1add80, 10aa2c53, 876c93a2)
- Fix repeaters issues with restoration, update, medias and files fields support (7ec42565, 6425a3fe, c2703b25, 60a239b8, 7e348f4d)
- Fix #32: markdown based mail notifications breaking in host Laravel apps (c0239ad7)
- Fix authorization gates conflicts (d2036f29, b08b1218)
- Fix default Quill.js WYSIWYG theme rendering (e593ac6f)
- Fix browser when a selected item is deleted (5e085139)
- Fix global search input misbehavior (31fef7ce)
- Fix publish button label copy when publishing is not available (82ec2c8d)
- Fix Twill dev script console errors by disabling host check in hot script (0707f5bc)
- Fix Twill provided blocks validation rule (cc277f5e)
- Fix support for custom app namespace (#280) (eb780a5b)
- Fix canvas rendered cropped image no-cache hack (#261) (ebe4450b)
- Fix S3 uploader signature function calls (#259) (41828cd5)
- Fix missing header method exception in ValidateBackHistory middleware (#234) (2ee1080d)
- Fix media metadata helper issues (1b07f493)
- Fix some documentation typos (df870b54, a6dda857)
- Fix some styling bugs (faa4f89e, 77e4d2d0)
- Fix dashboard settings: activity option was not used (f67ca2ef)
- Twill's CLI now automatically format the provided module name to be valid:
article
,articles
,Article
, you name it, will now correctly generate file for anarticles
Twill module with the correct stub replacements. (3e5d6e99) - Forms extensibility improvements (d2f4008c, 7382c64c, a06b7a8a)
- Switch from push() to save() when creating/updating models (661e5cfd)
- Add more Language code to label mappings (#299) (d842b441)
- Support more languages in frontend slugify function (2f656287)
- Improved support for Quill.js toolbar modules on the
wysiwyg
form field (e593ac6f, ff9a8319, 3f675d27) - Improve support for translatable.use_property_fallback (15a9331b)
- Use morphClass consistently in browsers (4ec38c2b)
- Use module controller defined scopes when counting by status (56a2d3aa)
- Code quality (replace helpers and facades by dependency injection when possible or fully qualified facades) (6f449ac2, 89687c1f, 9554a0cd, b0a3297c, 358ca416, 86192a16, 21068eb3, d443309d, 05bdfa2a, 80a0f919, 5acb7f1f, 49b2c664, 7625fb33, 1dea3d93, 6972435b, d597f713, 1de922b6, 37b4fd2a, 6092fba0, 6fe254a8, 5044c8ef, f9e2b5cd, c9ef6b52, bcc77308, 2b3f6d3f, df3650a0, a6106b7e, 6b5c49ac, d80ef94c, c889c116, 4f80c83d, 6f4e9c92)
- Update composer dependencies (e1dfc11e)
- Update npm dependencies (06184c0b)
- Update docs to VuePress 1.0 (72217206)
- Laravel 5.8 support (#209)
- CMS users 2 factor authentication (requires the
php-imagick
extension installed when enabled) (2753b4aa) - Media library custom fields (181eabe3)
- Browser field with multi-types (a0804b7, e6864f4)
- Medias, select and radio fields support in settings (#87) (5ba1dcd, 8d251f1)
- Support for default values in input and wysiwyg fields (1b27210)
- Add option to keep value inside connector field when toggled (d0a92f2)
- Implement an easy way to check for images existence (#53) (19e6f8f)
- Provide a way to disable the main content fieldset in forms (862307e)
- Add wide modal option to browser form field (#105) (389ce5d)
- Enable HTML rendering in browsers (#100) (f318bb1, 9ff1bc5)
- Add a way to add pattern for the routes and domain of the admin (fbc4919)
- Fix medias and files form fields conflicts (#72) (adbfe66)
- Fix login error state (e55fd55)
- Fix npm scripts in documentation (5a6d368)
- Correct documentation typos (#43) (aece0a3)
- Fix reference to hard-coded twill users table name by using config value (ec9b377)
- Fix wrong parameter order in fileObject helper (#99) (1746daf)
- Fix settings for all types of translatable configurations (2570c5f)
- Fix select field value in settings for codebases with multiple languages (0936899)
- Update and block vue-select to last version (2.5.1). Update style and logic according to changes in vue-select (b3d200d)
- Fixed published scopes hook (3bfbfd0)
- Fix publication timeframe listing column (2eee60e)
- Fix CMS global search on translated titles (a5b05d3)
- Fix for non existing crop settings (ca778f6)
- Fix default locale column length Closes #80 (209e63f)
- Fix logged-in admin user privilege escalation (27cd3f8a)
- Prevent unauthorized users from accessing CMS users listing
- Fix translated file form field creating duplicate attached files after saving twice
- Fix uploader showing duplicate on upload error
- Update to Laravel Mix 4 (#113)
- Address some install and build issues:
- Publish compiled assets on install
- Provide an experimental artisan based build command
php artisan twill:build
- Move npm documentation down as this is not needed to get started anymore, only when creating custom blocks
- Fix npm scripts cp syntax once again, fixing #165
- Update front language components to support large number of languages (#47) (5e6c22a)
- Check database connection before twill:install (#66) (30b25be)
- Improve create super admin command (#68) (8ca8927)
- Added default false value to published column on module's default migration (#93) (21e7317)
- Wysiwyg - Default styling for the superscript (8b0e950)
- Update image styling in browser items list (b3c1103)
- Memoize translations to avoid querying the relationship multiple times when checking for active translations (d0b85be, 90c1b78)
- Languages list in listings – show first 4 only (ad434c7)
- Allow main nav to scroll on overflow-x (432b463)
- Add repeaterName parameter to repository repeater relates functions (#129) (aead7aa)
- Remove unecessary check for empty value before saving text fields into vuex store (e8866e4)
- Improve usability of the full screen content editor on mobile
- Various documentation improvements
It's been an exciting first few months for Twill, and along the way, we've been listening to your feedback. Today, we're excited to release Twill 1.2 with easier setup, improved documentation, and several improvements. We also happily welcomed our first external contribution from @yanhao-li and a lot of research on extensibility from @IllyaMoskvin!
Breaking changes have been kept to a minimum and we've provided configuration variables for backward compatibility.
Reminder: Twill's versioning scheme maintains the following convention: paradigm.major.minor
, exactly like Laravel. Fun fact: this is called Romantic Versioning! When referencing Twill from your application, you should always use a version constraint such as 1.2.*
, since major releases of Twill do include breaking changes.
- Support for Laravel 5.7 (40210129, f3156836)
- Package auto-discovery for Laravel >= 5.5 (1642477)
- Documentation sources (VuePress project running at twill.io/docs)
- Updated documentation sections:
- Architecture concepts
- Local environment requirements and installation
- Configuration
- Revisions and previewing
- Dashboard
- Global search setup
- Settings sections
- Imgix sources setup
- Default CMS global search implementation (edac38ae, b234170)
- My drafts module in dashboard (70d89aa1)
- Option to enable the activity log when dashboard is disabled (3eb4b2a)
- Support for browser field in repeaters (f1f68bc)
- CMS users optional fields (title, description) (a75cb00b)
- Revision restoration (e87a71bd, eb9718ab, 937bbd24)
- Previewing repeaters in blocks (ffde802b, 8d9f656a, a6136cf1, e0f3e70c)
- Cropped thumbnail rendering CORS issue (f9f6896e)
- Prevent undefined formFieldValue in input and wysiwyg fields (5211a447)
- Uploader autoretry (342a79cf)
- CMS users permissions (publishers can't edit other users, admins can create new users) (1dd825c)
- CMS users profile image cropping parameters (b9e22a6a)
- Irrelevant error during Twill setup (94589134)
- Media library console errors on dashboard (e5f959a)
- Installation process and compatibility with existing applications (0ab27de, c6353e7)
- Previews and block editor developer experience (48a7fd8)
- Blocks customization (221a03ed, 145b35b2, a10a3d6f)
- Dashboard activities labels (15e098dc)
- Update npm deps (e1a4117c)
- CRUD module generator output (bd84f41)
- CMS users and their password reset tokens are now stored in
twill_users
andtwill_password_resets
tables by default, with options to provide custom table names inconfig/twill.php
for backward compatibility (twill.users_table
andtwill.password_resets_table
) (c6353e7) - Twill's exception handler is bound to all controllers, with an option to opt-out for extensibility (
twill.bind_exception_handler
) (43f27de) - Change default column in repository's listAll helper function to
title
(fromname
) (024be645) - Configuration enables dashboard, search and buckets features by default (a02c59c). You can disable them in the
enabled
configuration array of yourconfig/twill.php
file.
- Option to the browser field to disable sorting (228babb)
- Option to the select form field to enable search (9f49c11)
- Helper CMS image function that takes the first available attached image (3d573dc)
- Block editor custom validation rule (57cceae)
- Allow passing extra data when rendering blocks (e9a5f4d)
- Save button inside the full screen content editor (615c168)
- Configuration based CMS dashboard (81e8dfa, b1d17b3, 25f9419, 0ced2cd, 6753027, 4b125aa, b6cef76, c7a0bba)
- UI warnings when deleting from the media library, listings, and blocks from the block editor (ff8cd77)
- Select options escaping (7180e63)
- Form error when content revisions have no user anymore (2483120)
- Support older Debugbar version for Laravel <5.5 (2efc9ff)
- Slugs management on non translated models in a translated app (5c30e40)
- Babel transpilation targeted browsers (13b502a)
- Refactored nested listing (9454cdf, 3b86512, 4b4ba95, 2358a1f)
- Refactored cropping logic (79ef4fc, 310fc78)
- Cleanup and linting (ee65800, d0df756, 2d77eb7, 08d94fd, d8636bc, 5813a82, b6111a2, d495b39, 65fc025)
- Show thumbnail if available in buckets and browsers (e751272, 4f0ac41)
- Preview iframe rendering issue on Chrome (b25f457)
- Relationships sync hydration: allow hydrating a custom relationship name (f9aa631)
- Bucket screen can now live under the third level of CMS navigation (9069bb8)
- Renamed from CMS Toolkit to Twill (a30a33e, eea3abc, d395066, 93da8e2, f409597)
- Media field: fix canvas based cropped thumbnail (make sure it is working on Chrome and Firefox, still fallbacking to the original thumbnail on Safari because of lack of support for tainted canvas with CORS)
- Case insensitive search when using Postgres (47a64c1)
- Buckets: custom routes save button URL (1febe6c)
- Media field cropped thumbnail: fix Safari error (missing support for tainted canvas with CORS) (!68)
- Media field cropped thumbnail: prevent CORS errors entirely (!68)
- Cropper component refactor (!68)
- First hint of renaming introducing Twill credit in footer (b84a5f6c)
- Media field : crop is now using smart crop to detect the best crop by default (58141925)
- Media field : refresh the thumbnail of media field on the fly based on the first crop (58141925)
- Drop laravel-mix requirement on host projects (!66)
This is to avoid conflicts with arbitrary npm setups in hosts projects
(like a project running on Webpack 4, which is not compatible with Laravel Mix as of April 2018).
Provided NPM scripts have been modified to use a simple copy command.
This means the CMS build is fully independent from the project build.
It also gives up a slight performance boost in HMR mode when developing.
- Media field cropped information (2f802d8)
- Ability to disable sorting on the "title" listing column (03b65a8)
- Content editor: non draggable list of blocks in Firefox (!65)
- Media Library: switching types quickly is creating wrong listing (!64)
- Media library: bulk tagging (60c6fe9, c6ab250, 51dfd3d, 9be8227)
- Updated flatpicker and cropper deps to more recent versions (!63)
- Support for files input in forms, blocks and repeaters (!61)
- Ability to invalidate specific paths on Cloudfront (!60)
- New block icon (text-2col) (!59)
- Ignore blocks in database if config for type is not available (0a4f528)
- Refactor and hook up files library with the new single media library tab system (!61)
- Ability to configure allowed file extensions for images and files
- Ability to configure the file service (defaults to Disk)
- Ability to add custom types (documentation TODO)
- Merge Cloudfront config with host application's services config (!60)
- Move AWS sdk version and region to services configuration file (!60)
- Improve global error management and session expired UX (dd3390b)
- Fix block icons position (!59)
- Code highlighting module in WYSIWYG form field (
code-block
in toolbarOptions) (!56) - @pushonce(stack:key) and @endpushonce Blade directives to push to a Blade stack, but only once (by suffixing the stack name with an arbitrary unique key) (9830ef0c)
- Support direct S3 upload to non-default (us-east-1) S3 regions (!58)
- Block editor option to render childs in previews (64756f0)
- Frontend build configuration slimming down non-vendor admin assets by around 40% (auto-vendorize imports from node-modules) (!57)
- Refactor external js/css loader into a reusable util (d177d0ec)
- Module generator hasRevisions option (3fcf7f0)
- Misc responsive fixes for small screen (!55):
- Cropper modal update
- Media library : grid is showing 2 images on the same row on mobile
- Dropdown : resize based on available space
- Overlay header : adjust infos showing up on smaller screens
- Listing and search results : dont show thumbnails on smaller screens
- Module repository filter ignoring null scopes (1de874e)
- Eventual duplicate index name from migration helpers (!54)
- Listing filters overflow after opening (18577c1)
- Responsive: navigation, datepickers, modals, notifications, accordeons, dropdowns, filters (!52)
- Login: footer position (!52)
- Datepickers with no time option: fix value update in vuex store (!53)
- Error pages for error 419 and error 429 (page expired and too many requests) (!48)
- Focus states, active states, accessibility (!50)
- Previewer responsiveness (!50)
- Pagination reload (no reload if same page and constraint page number input) (!50)
- Missing brackets to build the index name in related table migration helper (!51)
- Color picker hue selector jumps (!49)
- NPM warning because of missing config in package.json
- Full-screen block editor with left side editing and right side drag and drop-able previews
- Blocks can now be created as regular forms using @formField Blade directives
- Vue.js blocks components generator: php artisan twill:blocks
- Form layout helpers: collapsed fields, columns, inline checkboxes and radios, connected fields
- Listings status filters (published/mine/draft/trash)
- Per CMS user listings options saved in local storage (items per page, displayed columns)
- Bulk editing in listings (publish/feature/delete/restore)
- Display/hide columns in listings
- Support for nested listings (to use in combination with a nested set)
- Support for blocks and revisions features in module stub and generator
- Publication management: add public/private and publication timeframe options
- Ability to create and edit content in a modal when a full form page is not necessary
- Custom email template
- Color picker form field
- Bulk delete and multiple selection with shift in media library
- Replace image in media form field
- Context based image alternative text and caption
- Restore soft deleted models
- Suggested frontend controller for show and preview routes with its associated router macro (Route::moduleShowWithPreview)
- Allow custom buckets routes prefixes, default to "featured" prefix
- Support starred items in buckets
- Preview in selected language
- Preview model hydration support for multi-select, browsers and repeaters
- More image helpers
- Provide a way to transform index items collection
- Provide a hook to add custom data per index item
- Allows querying module's model through its repository
- Contributions guidelines
- Simplified form views
- Unified form fields options
- Inline form fields validation messages
- Blocks are now their own Eloquent model and a polymorphic relationship instead of being a dead json column in each module
- Media in the media library can't be deleted in they are attached to a module or block
- Use consistant syntax for config keys
- Use database transactions in module repository operations
- Support slugs with non latin languages
- Slugs management when restoring a soft deleted model
- UI responsiveness
- Documentation
- Redesign of every single part of the admin ui
- Admin frontend assets sources are now part of this repository (in frontend/) and consists of multiple Vue.js apps compiled using Laravel Mix
- Laravel and Vue communicates using Vuex store hydration at page load and ajax requests
- Admin assets need to be compiled by the project using this library in order to include its own blocks
- Block editor changed from SirTrevor to custom Vue.js components
- WYSIWYG editor changed from Medium Editor JS to Quill.js
- Modules don't need an index Blade view anymore, all listings options are defined in the controller
- Repeaters for inline one-to-many relationships are now created as blocks
- Settings feature (831c3de, d2f76dd)
- Add a ratio selector on image fields (64edd52)
- Add optional open live site link to global nav (4ede5a2)
- Add a preview/open action to listings (a9a2821)
- Allow disabling delete in module listing (df7cf5b)
- Add a copy preview link to clipboard feature (dirty js, will clean up during redesign) (f50c03a)
- Add a way to prevent publication in listing by checking a canPublish property on the model item (347cc6a)
- Add new setting to block editor config: iframe width (defaults to 66) (5dc0461)
- Add a new links only config for medium editor fields in blocks (2eb64b5)
- Allow hints in blocks input fields (21b677f)
- Add placeholder in block text fields for simple repeater blocks based on numbers (e5042fd)
- Add a button to preview module landing with drafts (2957584)
- Add a scopes parameters to apply where conditions on forSlug helper (d6d10bb)
- Add 403 error page (9aa40d5)
- Log block errors (f9d8778)
- Prevent initializing already initialiazed medium editor in blocks (1742a17)
- Fix module show and preview routes (extra /) (b01c1f6)
- Fix preview links (0618bc6)
- Make sure module previews are only accessible to read only users, not disabled ones. (d92d07b)
- Fix slug input (3b25ef0)
- Allow custom publish field name in forms (043107c)
- Improve uploader drop-zone style to align with images grid (cfd32a9)
- Wording on image attachment button: use add everywhere for consistency with blocks (e6d6918)
- Hide filters dropdowns while loading select2 styles (f2eeabe)
- Hide block editor ugly json showing in textarea before Sir Trevor loads (df2193e, adf651d)
- Improve block editor UX (show title while loading, stay on edit view if validation errors) (98b8af0)
- Change cms user publish status wording (d8177be)
- Allow raw html string as index column (useful for classic model accessor instead of presenter usage) (2c057af)
- Soft delete slugs on delete and allow reusing deleted ones (b48b563)
- Do not force plain text pasting in block editor medium fields (a01e42f)
- Allow empty or "/" module preview route prefix for catch-all route (1dda40d)
- Wording on attachment: replace detach by remove (769d18d)
- Update CMS builds from UI Toolkit (c61fd17)
- Update composer.lock (6a567c9)
- Open preview in a new tab (f48fa99)
- Revisions and links wording (4bd3e29)
- Implement revisions with preview and side by side comparison (55ebdae, e35e824, 805e6b2, c51c99c, 04d1910, 303875d, e3fb70c, 28daed4, 21dd9dd, b18276c, a31b889)
- Add feature permission for publishers and admins (84e2ae0)
- Allow custom logo partial for the CMS header (435e65e)
- Add a way to add a message on top of CRUD listings (4afefe0, c9ad242)
- Add a variable to disable secondary navigation in views (a5ee316)
- Add options to the checkbox form field to enable connected actions (5dbf3c1)
- Add a way to disable feature using a canFeature attribute in models. Defaults to true. (a63aeb1)
- Add setters to the SEO object to keep defaults if passed is empty (79f9747)
- Easy way to add links in browser fields (c0d66b3, 33540d3)
- Allow raw url in CMS navigation (6e6ac31)
- Add an option to prevent related content deletion (b3016ab)
- Add an option to show the CMS users links in the top right navbar (febd212)
- Add a repository method to find first or create (0799840)
- Add a new default config with anchor for the medium editor form field (0eea90b)
- Add a scope to order with a raw string on translations (6281f1d)
- Add a scope to order by a translated field (694d8c9)
- Let's share a published scope in the parent model (c5e83e5)
- Add a way to delete existing belongsToMany repeater elements (when not used along with a multiselect) (422a924)
- Add an option to show templates on the frontend domain and protect templates from unauthenticated eyes in production (1bf3fc7)
- Add a simple way to reuse the default blocks with custom views (36ea67f)
- Add blocks css to block editor configuration (0aa829f)
- Add a new default quote block with rich editing capabilities (4f3ecad)
- Fix has slug behavior when using translations with a single locale (d574b33)
- Add global css fixes to the block editor form field (4f50df9)
- Force translations index name to be shorter (76bd481)
- Fix admin host lookup in exception handler and allow view override (b49c081)
- Fix characters limits display (missing space) (642129a)
- Don't show delete column header in browsers module if delete is not allowed (5fd4830)
- Fix fields in repeater (TODO: test on other projects) (c0277a7)
- Quickly fix the Laravel 5.4.22 security fix to accomodate for our convention of not specifying the scheme in APP_URL (d541983)
- Security update: force admin url on password reset routes. (271b4bb)
- Don't load blocks css if config say we use iframes (5ce6f1a)
- Fix medium editor link only button (ce368a7)
- Fix debug config (2728b7e)
- Improve hints display on medium textarea fields (e619967)
- Improve search and filters in browser (7380e6c)
- Retain params on listing pagination (bb41603)
- Allow custom frontend view path for errors views (e8f3822)
- CMS listing titles first letter uppercase (0f2893b)
- Fields hints improvements (238f65f)
- Browser field improvements (1be5a0d)
- Support custom button title prefix on repeaters (3debd56)
- Prevent errors and provide more ways to grab images dimensions in the Imgix service (5d9e0ca)
- Disable scrollbars on the modal frame (24e325e)
- Hide scrollbars in blocks previews (a35c919)
- Use a tinier button for repeaters (2715efb)
- Cleanup (c2875df, 6a118c2)
- Cleanup module controllers by adding default empty arrays for index and form datas (09d31eb)
- Open live site in new tab (c8543b1)
- Switch extra_css and extra_js to Blade stacks (4741806)
- Prepended scope better be prepended (83f45c6)
- Disable CMS users image by default (143f41b)
- Make parent model abstract (eed6d21)
- Remove default button block (had no renderer) (fd7b537)
- Force capitalize model first letter in getModelRepository internal helper (f7901ac)
- Don't search for tags in search, we have a filter for it (efc05ad)
- Repository searchIn helper now bundle or where queries together to avoid conflicts with other scopes (df0973b)
- Update style of the iframe for previewing the block editor (180c69d)
- Allow calling module controller form method from child controllers (ba95fba)
- Small wording updates (ed03107)
- Use the new date picker (a15830b)
- Update base blocks and text field builder (cf8fc7b)
- Implement block editor previews using iframe to prevent styles conflicts (5303259)
- Add automatic buckets from configuration (ece23a9, 72b7c6c, 98118cd, 32b011f)
- Add getItemBySlug helper function to retrieve a resource from a repository (a663cd4)
- Add required label to media and file form field (737585c)
- Add belongs_to param to the browser form field to enable single selection on browser fields (b59e129)
- Add an option to ignore fields when saving, to enable partial forms for a module (51917ac)
- Add an imageObjects method to the HasMedias trait to retrieve a collection of Image associated (06a6899)
- Allow https on S3 library (81982b3, 2b6b2de)
- Fix the URL of the back link when a validation error occurred (9f6d568)
- Fix browser module view resolution when using a custom module name (882bd8b)
- Force mediables ordering by id for medias form field with multiple images (8d0a3b7)
- Turn flash message into a js notification (e2ecb13 )
- Media form field failover in case of media params changes (new crop name for example) (8a074cd)
- Move Imgix specific params to Imgix image service implementation (b4c1aed )
- Functional block editor with default blocks (b53da8fe, 6bae67a, 1ad7cfc, 24f144ad, e884f14c, d838d04, 3714396e)
- Repeater form field (105c3f22a)
- Toggle columns in module listings (6f29f20)
- Tagging support for all models (e001d5e)
- Toolkit module views resolution (7afcf044)
- Browser insert partial (fea42b7, 84db3a6b, e7c220f)
- Translations and slugs migration helpers (786fb06)
- Password reset routes and welcome email sending policy (f04abe21)
- Slugs params for single locale setup and custom model accessor (ecfba9924, 9788a23a)
- Paginator (custom view based since L5.3) (3d8ec24)
- Laravel 5.4 support (2c5634cb, 4a129364)
- Date picker, allow custom options (f18bbf18)
- Resource browser: Add an option to allow a module name independent from the relationship (26368c7)
- Resource browser: Add option to pass parameters to browser from the view calling the browser (af3e06ab)
- Filters style on index view (now uses custom select style) (948df42, adcbd628, d4af4b89)
- Install/setup/module commands (dd19da3, f2ec13dc, acc2a662, b38a5f07)
- Documentation (using @joyce's feedback, thanks a lot!) (ac41d07ec)
- Differentiate Medium editor and rich text area (3125e5e)
- Form lang switcher is now included and hidden by default (892a1da9b)
- Added an ACL param to the uploader (2298ff40)
- Update assets command now call vendor:publish on the CMS Toolkit (f75eb38)
- Laravel 5.4 support (a3f7ca3, 44ccf77, a7121e2, 59301db)
- Frontend assets configuration (5bc0dfc, 281a394, 423a524, cd30daa, f1280b2, ff6f280)
- Browser for related content (bc0fba0, 595f146, e1811a3, 3dd25be)
- Nested modules (3835a75, 798118a, 9bbb77e, df06492, 48a8949, ad39dd6, c1f059f, 4fb42ab, e0bf2f6)
- Hidden form field (0d9d44b)
- Fix uploads on environments where config cache is enabled (178f65f)
- Prevent browser back button to get back to an authenticated page after logout (0cf4248)
- Fix date_picker fieldname (d877fa9)
- Fix checkbox partial name (40e1bca)
- Lists is deprecated (e7efee1)
- Fix resourceView blade directive (3babbcc)
- Fix non translated slugs
- Documentation (43e8cdb)
- Config merging (be425df)
- Pluralization (4e6caf5, 3d66250)
- Remove the need to set perPage for Sortable modules (3abf48a)
- Syntaxic sugar to add like where clause in controllers filters (c032539)
- Checkbox form partial (d8e98f3)
- Documentation (d4ef4e3, 2d289bf, 067d036, a732c4d, 21b5dfe, fa1d26a, 632ebb0, f981056, b2f38b4, a5466d2, 888897d)
- Installation (14b4507, b2dcbae, f35a730, 37232d3, ca26e7b, 366c9a2, 6b41db2, 6d65801, 96dc178, 59aef13, 4f113f8, 67d64e2, 9c89233, 6b5ed46, 576dc16, ebbeb9e, 25b5d27, f313f07)
- Module generator (7870d02, 868bb26, 380e214)
- User management (a43edfd, 315e95b, 8932206, 7abf5ef)
- Module views (7ea66d6, f866e19, e03aab6, 4841087)
- Rename Sorts traits to HasPosition for consistency (c09c531)
- Initial release