- boardwalk exports ContentType and SetSecurityHeaders
- pact.AdminClientAssets files are read and hashed at boot and served by exact
key under {prefix}/assets/{vendor}/{plugin}/ with nosniff, CSP, CORP,
no-cache and an ETag; a miss falls through to the SPA
- list and form schemas carry assets URLs with a ?v= hash
- toolbar.buttons resolves create, delete and registered actions after decode;
toolbarActions is permission-filtered per admin
- POST .../toolbar/{action} behind requireAjax and action permissions
45 lines
2.0 KiB
JSON
45 lines
2.0 KiB
JSON
{
|
|
"data": {
|
|
"title": "Widgets",
|
|
"recordsPerPage": 20,
|
|
"perPageOptions": [],
|
|
"showSearch": true,
|
|
"showSetup": false,
|
|
"showCheckboxes": true,
|
|
"showSorting": true,
|
|
"searchTerm": "",
|
|
"recordUrl": "acme/demo/widgets/update/:id",
|
|
"toolbarButtons": ["create", "delete"],
|
|
"toolbarActions": [],
|
|
"assets": { "scripts": [], "styles": [] },
|
|
"columns": [
|
|
{ "key": "name", "label": "Name", "searchable": true, "sortable": true },
|
|
{ "key": "code", "label": "Code", "searchable": true, "sortable": true },
|
|
{ "key": "tags", "label": "Tags", "searchable": false, "sortable": false, "type": "relation", "relation": "tags", "select": "name" },
|
|
{ "key": "created_at", "label": "Created", "searchable": false, "sortable": true, "type": "datetime" },
|
|
{ "key": "active", "label": "Active", "searchable": false, "sortable": false, "type": "switch" }
|
|
],
|
|
"filters": [
|
|
{ "name": "active", "label": "Active", "type": "switch", "column": "active", "trueValue": true, "falseValue": false },
|
|
{ "name": "created", "label": "Created", "type": "daterange", "column": "created_at" },
|
|
{ "name": "maker", "label": "Maker", "type": "scope", "scope": "byMaker", "modelClass": "Acme\\Demo\\Models\\Maker", "nameFrom": "name" }
|
|
],
|
|
"rowActions": [],
|
|
"bulkActions": [],
|
|
"messages": {
|
|
"create": { "other": "New widget" },
|
|
"deleteConfirm": { "one": "Delete :count widget?", "other": "Delete :count widgets?" },
|
|
"deleteSelected": { "other": "Delete selected" },
|
|
"deleted": { "one": "Deleted :count widget", "other": "Deleted :count widgets" },
|
|
"empty": { "other": "No widgets yet." },
|
|
"emptySearch": { "other": "Nothing found" },
|
|
"emptySearchHint": { "other": "No widget matches “:term”." },
|
|
"recordCount": { "one": ":count widget", "other": ":count widgets" },
|
|
"searchPrompt": { "other": "Search widgets…" },
|
|
"selected": { "other": "Selected :count" }
|
|
},
|
|
"meta": { "locale": "en" }
|
|
},
|
|
"meta": { "locale": "en" }
|
|
}
|