Handle child FormWidgets making AJAX requests outside of the repeater's form container. Note that this won't pass on the state of the repeater item as it exists on the webpage because that information won't be sent to the server in an AJAX request sent from outside of the repeater's form container unless the FormWidget sending the orphaned request specifically includes that data in their request, in which case the regular handling will kick in and initialize the widget properly. A discussion should be had whether this fix makes sense to be done in the Repeater FormWidget or if we should force FormWidgets to have the responsibility of initializing their parent repeaters if they're going to be making orphaned AJAX requests.
Should fix#3415, #4672.
Related: octoberrain/test-plugin#78
Credit to @SaifurRahmanMohsin
Added getConfig to make it easier for developers to fetch the config data from a list column while overriding the list items through extension. This also makes the class more compatible with [FormField](https://github.com/octobercms/october/blob/master/modules/backend/classes/FormField.php) which already has the same helper function.
Also had to revert the 100vw improvement on tabs because it causes unnecessary scroll/drag activation. Also reverted change in form.base.less that had no reasoning.
It makes more sense to use a consistent UI for all modes, the CSS is cleaner as a result. The code editor toolbar has been moved to the bottom across all instances. This is favourable to it bleeding outside of its perimeter.
Refs #3947
Refs #3948
This change will allow the individual JS assets that are compiled into a full compilation file to be loaded individually instead, allowing the developer to see their changes immediately. It introduces a new configuration variable, `cms.decompileBackendAssets`, that controls this functionality. By default, it is false and not tied to the debug value, requiring it to be explicitly enabled.
An exception was thrown when loading middleware if a requested controller is from a disabled plugin, as the `getRequestedController` method returns a Response object in this scenario.
Hat tip to @w20k.
This will detect invalid navigation item configuration in installed plugins. In debug mode, this will throw an error, otherwise, it will simply log the error.
Credit to @Samuell1. Fixes#4491.
Since repeaters have no value by themselves, a repeater that contains only another repeater was throwing a "widget not bound to controller" exception when adding a new item - the repeater item processing was not creating a form widget for the inner repeater on load, or in an AJAX call. This fix specifically checks if a child repeater has called for a new item, and if so and the current repeater has no value for this particular item, it will add a "stub" form widget to correctly bind the widget.
Fixes#4344.