diff --git a/addons/web/static/src/views/view_button/view_button.js b/addons/web/static/src/views/view_button/view_button.js index 7f293ef529c..66d19e53761 100644 --- a/addons/web/static/src/views/view_button/view_button.js +++ b/addons/web/static/src/views/view_button/view_button.js @@ -124,6 +124,7 @@ ViewButton.props = [ "size?", "tabindex?", "title?", + "style?", "string?", "slots?", ]; diff --git a/addons/web/static/src/views/view_button/view_button.xml b/addons/web/static/src/views/view_button/view_button.xml index 5a80c9a68e7..04178d1346c 100644 --- a/addons/web/static/src/views/view_button/view_button.xml +++ b/addons/web/static/src/views/view_button/view_button.xml @@ -8,6 +8,7 @@ t-att-name="props.clickParams.name" t-att-special="props.clickParams.special" t-att-href="props.tag === 'a' and '#'" + t-att-style="props.style" t-att-type="clickParams.type" t-att-data-tooltip-template="hasBigTooltip ? 'views.ViewButtonTooltip' : false" t-att-data-tooltip-info="hasBigTooltip ? tooltip : false" diff --git a/addons/web/static/tests/views/kanban_view_tests.js b/addons/web/static/tests/views/kanban_view_tests.js index c4fb0de1dca..e574a00ecaf 100644 --- a/addons/web/static/tests/views/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban_view_tests.js @@ -6386,6 +6386,39 @@ QUnit.module("Views", (hooks) => { assert.containsN(target, ".o_btn_test_2", 3, "kanban should have three buttons of type 2"); }); + QUnit.test("support styling of anchor tags with action type", async function (assert) { + assert.expect(3); + + const actionService = { + start() { + return { + doActionButton: (action) => assert.strictEqual(action.name, "42"), + }; + }, + }; + registry.category("services").add("action", actionService, { force: true }); + + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` + + +
+ + Click me ! +
+
+
`, + resId: 1, + }); + + await click(target.querySelector("a[type='action']")); + assert.hasClass(target.querySelector("a[type='action']"), "btn-primary"); + assert.strictEqual(target.querySelector("a[type='action']").style.marginLeft, "10px"); + }); + QUnit.test("button executes action and reloads", async (assert) => { const kanban = await makeView({ type: "kanban",