diff --git a/addons/account/static/src/scss/account_dashboard.scss b/addons/account/static/src/scss/account_dashboard.scss index 6934affc44d..49d20dfe5f7 100644 --- a/addons/account/static/src/scss/account_dashboard.scss +++ b/addons/account/static/src/scss/account_dashboard.scss @@ -1,4 +1,4 @@ -.o_kanban_dashboard.o_account_kanban { +.o_kanban_dashboard.o_account_kanban .o_kanban_renderer { &.o_kanban_ungrouped .o_account_dashboard_header { margin: (0 - $o-kanban-record-margin) ($o-kanban-record-margin - $o-horizontal-padding) $o-kanban-record-margin; diff --git a/addons/account/static/src/scss/account_journal_dashboard.scss b/addons/account/static/src/scss/account_journal_dashboard.scss index bbe1a7b60dd..fdefc7c3c88 100644 --- a/addons/account/static/src/scss/account_journal_dashboard.scss +++ b/addons/account/static/src/scss/account_journal_dashboard.scss @@ -1,4 +1,4 @@ -.o_kanban_dashboard.o_account_kanban { +.o_kanban_dashboard.o_account_kanban .o_kanban_renderer { .o_kanban_record { @include media-breakpoint-up(sm) { diff --git a/addons/crm/static/src/scss/crm.scss b/addons/crm/static/src/scss/crm.scss index 7f8a7a23425..d8497d06dc6 100644 --- a/addons/crm/static/src/scss/crm.scss +++ b/addons/crm/static/src/scss/crm.scss @@ -6,7 +6,7 @@ } } -.o_opportunity_kanban { +.o_opportunity_kanban .o_kanban_renderer { .ribbon { &::before, &::after { display: none; diff --git a/addons/crm/static/src/scss/crm_team_member_views.scss b/addons/crm/static/src/scss/crm_team_member_views.scss index 86188482f60..83fbab8ed04 100644 --- a/addons/crm/static/src/scss/crm_team_member_views.scss +++ b/addons/crm/static/src/scss/crm_team_member_views.scss @@ -1,4 +1,4 @@ -.o_crm_team_member_kanban { +.o_crm_team_member_kanban .o_kanban_renderer { .o_member_assignment div.oe_gauge { width: 100px; height: 80px; diff --git a/addons/event/static/src/scss/event.scss b/addons/event/static/src/scss/event.scss index aadd6177217..5fc7356516e 100644 --- a/addons/event/static/src/scss/event.scss +++ b/addons/event/static/src/scss/event.scss @@ -1,4 +1,4 @@ -.o_kanban_view .o_event_kanban_view { +.o_kanban_view.o_event_kanban_view .o_kanban_renderer { .o_kanban_record > div { min-height: 140px; } @@ -17,7 +17,7 @@ } } -.o_kanban_view .o_event_attendee_kanban_view { +.o_kanban_view.o_event_attendee_kanban_view .o_kanban_renderer { @media (max-width: 768px) { .o_event_registration_kanban { min-height: 80px; diff --git a/addons/gamification/views/gamification_badge_views.xml b/addons/gamification/views/gamification_badge_views.xml index 6b31ec5cc44..7c8bef73aea 100644 --- a/addons/gamification/views/gamification_badge_views.xml +++ b/addons/gamification/views/gamification_badge_views.xml @@ -113,7 +113,7 @@ Badge Kanban View gamification.badge - + diff --git a/addons/hr/static/src/scss/hr.scss b/addons/hr/static/src/scss/hr.scss index eb4c249ec3d..4d030d1beea 100644 --- a/addons/hr/static/src/scss/hr.scss +++ b/addons/hr/static/src/scss/hr.scss @@ -1,4 +1,4 @@ -.o_kanban_dashboard.o_hr_department_kanban { +.o_kanban_dashboard.o_hr_department_kanban .o_kanban_renderer { --KanbanRecord-width: 450px; --KanbanRecord-width-small: 350px; } @@ -40,7 +40,7 @@ } } -.o_hr_employee_kanban { +.o_hr_employee_kanban .o_kanban_renderer { .o_employee_availability { margin: 0 1px; } diff --git a/addons/hr_attendance/views/hr_employee_view.xml b/addons/hr_attendance/views/hr_employee_view.xml index 41f2c003ace..ad22fa0066c 100644 --- a/addons/hr_attendance/views/hr_employee_view.xml +++ b/addons/hr_attendance/views/hr_employee_view.xml @@ -98,7 +98,7 @@ hr.employee 99 - + diff --git a/addons/hr_expense/static/src/scss/hr_expense.scss b/addons/hr_expense/static/src/scss/hr_expense.scss index a928874831d..f8471f4e207 100644 --- a/addons/hr_expense/static/src/scss/hr_expense.scss +++ b/addons/hr_expense/static/src/scss/hr_expense.scss @@ -1,6 +1,6 @@ .hr_expense { @include media-breakpoint-up(md) { - &.o_list_view, &.o_kanban_renderer { + &.o_list_view, &.o_kanban_view .o_kanban_renderer { min-height: auto; } } diff --git a/addons/hr_expense/static/src/views/kanban.xml b/addons/hr_expense/static/src/views/kanban.xml index 58d88c967be..33fd41b0726 100644 --- a/addons/hr_expense/static/src/views/kanban.xml +++ b/addons/hr_expense/static/src/views/kanban.xml @@ -1,6 +1,9 @@ + + +
diff --git a/addons/hr_expense/views/hr_expense_views.xml b/addons/hr_expense/views/hr_expense_views.xml index 0c6ad3f3aa6..b4174103eba 100644 --- a/addons/hr_expense/views/hr_expense_views.xml +++ b/addons/hr_expense/views/hr_expense_views.xml @@ -245,7 +245,7 @@ hr.expense.kanban hr.expense - + diff --git a/addons/hr_recruitment/static/src/scss/hr_job.scss b/addons/hr_recruitment/static/src/scss/hr_job.scss index 4bd6278d6bf..d0dc849c89e 100644 --- a/addons/hr_recruitment/static/src/scss/hr_job.scss +++ b/addons/hr_recruitment/static/src/scss/hr_job.scss @@ -1,5 +1,5 @@ -.o_kanban_renderer.o_kanban_dashboard { - &.o_hr_recruitment_kanban { +.o_kanban_dashboard.o_hr_recruitment_kanban { + .o_kanban_renderer { &.o_kanban_ungrouped .o_kanban_record { width: 450px; &:not(.o_kanban_ghost) { @@ -62,8 +62,8 @@ } } -.o_kanban_renderer { - &.o_kanban_applicant { +.o_kanban_applicant { + .o_kanban_renderer { .ribbon { &::before, &::after { display: none; diff --git a/addons/hr_timesheet/static/src/scss/timesheets_task_form.scss b/addons/hr_timesheet/static/src/scss/timesheets_task_form.scss index 6dd19031f3a..6fe10fc2267 100644 --- a/addons/hr_timesheet/static/src/scss/timesheets_task_form.scss +++ b/addons/hr_timesheet/static/src/scss/timesheets_task_form.scss @@ -1,3 +1,3 @@ -.o_project_kanban .oe_kanban_align.badge { +.o_project_kanban .o_kanban_renderer .oe_kanban_align.badge { color: inherit; } diff --git a/addons/maintenance/static/src/scss/maintenance_team_dashboard.scss b/addons/maintenance/static/src/scss/maintenance_team_dashboard.scss index 09774c65a37..87e17d5697f 100644 --- a/addons/maintenance/static/src/scss/maintenance_team_dashboard.scss +++ b/addons/maintenance/static/src/scss/maintenance_team_dashboard.scss @@ -1,3 +1,3 @@ -.o_kanban_renderer.o_maintenance_team_kanban { +.o_maintenance_team_kanban .o_kanban_renderer { --KanbanRecord-width: 420px; } diff --git a/addons/mass_mailing/static/src/scss/mass_mailing.scss b/addons/mass_mailing/static/src/scss/mass_mailing.scss index 891f4f93bd6..68870862e6f 100644 --- a/addons/mass_mailing/static/src/scss/mass_mailing.scss +++ b/addons/mass_mailing/static/src/scss/mass_mailing.scss @@ -107,7 +107,10 @@ margin-bottom: 8px; } } - &.o_kanban_mailing_list { +} + +.o_kanban_mailing_list { + .o_kanban_renderer { .o_kanban_group:not(.o_column_folded) { flex-basis: 380px } diff --git a/addons/mrp/static/src/scss/mrp_workorder_kanban.scss b/addons/mrp/static/src/scss/mrp_workorder_kanban.scss index 739e02fb8c1..28f00402658 100644 --- a/addons/mrp/static/src/scss/mrp_workorder_kanban.scss +++ b/addons/mrp/static/src/scss/mrp_workorder_kanban.scss @@ -1,5 +1,5 @@ .o_kanban_dashboard{ - &.o_mrp_workorder_kanban { + &.o_mrp_workorder_kanban .o_kanban_renderer { .o_kanban_group:not(.o_column_folded) { width: 400px + $o-kanban-group-padding; } @@ -17,14 +17,12 @@ .o_kanban_workorder_title { flex-basis: 40%; } - .o_kanban_workorder_date { - } .o_kanban_workorder_status { flex-basis: 20%; } } } - &.o_workcenter_kanban { + &.o_workcenter_kanban .o_kanban_renderer { .o_kanban_group:not(.o_column_folded) { width: 400px + $o-kanban-group-padding; } diff --git a/addons/mrp/views/ir_attachment_view.xml b/addons/mrp/views/ir_attachment_view.xml index e9add1e525c..9b23507d437 100644 --- a/addons/mrp/views/ir_attachment_view.xml +++ b/addons/mrp/views/ir_attachment_view.xml @@ -5,7 +5,7 @@ mrp.document kanban.mrp mrp.document - + diff --git a/addons/note/views/note_views.xml b/addons/note/views/note_views.xml index 460cdfaf39c..ce39d4c2fbf 100644 --- a/addons/note/views/note_views.xml +++ b/addons/note/views/note_views.xml @@ -76,7 +76,7 @@ note.note.kanban note.note - + diff --git a/addons/point_of_sale/static/src/scss/pos_dashboard.scss b/addons/point_of_sale/static/src/scss/pos_dashboard.scss index ca45e6b8a72..a0819c041c5 100644 --- a/addons/point_of_sale/static/src/scss/pos_dashboard.scss +++ b/addons/point_of_sale/static/src/scss/pos_dashboard.scss @@ -1,4 +1,4 @@ -.o_kanban_renderer.o_kanban_dashboard.o_pos_kanban.o_kanban_ungrouped { +.o_kanban_dashboard.o_pos_kanban .o_kanban_renderer.o_kanban_ungrouped { .o_kanban_record { width: 500px; } diff --git a/addons/product/views/product_template_views.xml b/addons/product/views/product_template_views.xml index fe7e4019dea..b8ea52b1ea9 100644 --- a/addons/product/views/product_template_views.xml +++ b/addons/product/views/product_template_views.xml @@ -81,7 +81,7 @@ Product.template.product.kanban product.template - + diff --git a/addons/project/static/src/scss/project_dashboard.scss b/addons/project/static/src/scss/project_dashboard.scss index f33057ae61f..90b431bf933 100644 --- a/addons/project/static/src/scss/project_dashboard.scss +++ b/addons/project/static/src/scss/project_dashboard.scss @@ -1,4 +1,4 @@ -.o_kanban_renderer.o_kanban_dashboard.o_project_kanban { +.o_kanban_dashboard.o_project_kanban .o_kanban_renderer { .o_project_kanban_main { max-width: 300px; diff --git a/addons/project/static/src/scss/project_widgets.scss b/addons/project/static/src/scss/project_widgets.scss index bf48a53122c..bf2341ba96b 100644 --- a/addons/project/static/src/scss/project_widgets.scss +++ b/addons/project/static/src/scss/project_widgets.scss @@ -37,7 +37,7 @@ cursor: pointer; } -.o_kanban_project_tasks .o_field_many2manytags, .o_kanban_tags{ +.o_kanban_project_tasks .o_kanban_renderer .o_field_many2manytags, .o_kanban_tags{ margin: 0px; } diff --git a/addons/project/static/src/views/project_task_kanban/project_task_kanban_view.scss b/addons/project/static/src/views/project_task_kanban/project_task_kanban_view.scss index 534ac1c7316..b2928cd514a 100644 --- a/addons/project/static/src/views/project_task_kanban/project_task_kanban_view.scss +++ b/addons/project/static/src/views/project_task_kanban/project_task_kanban_view.scss @@ -1,4 +1,4 @@ -.o_kanban_project_tasks { +.o_kanban_project_tasks .o_kanban_renderer { div.o_field_many2many_avatar_user[name="user_ids"] { margin-left: 6px; } diff --git a/addons/project/static/src/views/project_update_kanban/project_update_kanban.scss b/addons/project/static/src/views/project_update_kanban/project_update_kanban.scss index b67cde7724e..ad6a05c2427 100644 --- a/addons/project/static/src/views/project_update_kanban/project_update_kanban.scss +++ b/addons/project/static/src/views/project_update_kanban/project_update_kanban.scss @@ -1,4 +1,4 @@ -.o_pupdate_kanban { +.o_project_update_kanban_view .o_kanban_renderer { overflow: auto; &.o_kanban_ungrouped { padding:0px; diff --git a/addons/project/static/tests/tours/project_update_tour_tests.js b/addons/project/static/tests/tours/project_update_tour_tests.js index 2c1408a5384..f7ebf39ac50 100644 --- a/addons/project/static/tests/tours/project_update_tour_tests.js +++ b/addons/project/static/tests/tours/project_update_tour_tests.js @@ -12,7 +12,7 @@ function openProjectUpdateAndReturnToTasks(view, viewClass) { }, { trigger: ".o-kanban-button-new", content: "Create a new update from project task view : " + view, - extra_trigger: '.o_pupdate_kanban', + extra_trigger: '.o_project_update_kanban_view', }, { trigger: "button.o_form_button_cancel", content: "Discard project update from project task view : " + view, diff --git a/addons/project/views/project_update_views.xml b/addons/project/views/project_update_views.xml index df3907ea837..07377522f6c 100644 --- a/addons/project/views/project_update_views.xml +++ b/addons/project/views/project_update_views.xml @@ -66,7 +66,7 @@ project.update.view.kanban project.update - + diff --git a/addons/rating/static/src/scss/rating_rating_views.scss b/addons/rating/static/src/scss/rating_rating_views.scss index 8d5d84200b2..0b594d34739 100644 --- a/addons/rating/static/src/scss/rating_rating_views.scss +++ b/addons/rating/static/src/scss/rating_rating_views.scss @@ -1,4 +1,4 @@ -.o_kanban_renderer .o_rating_rating_kanban { +.o_rating_rating_kanban .o_kanban_renderer { .o_kanban_record { width: 350px; } diff --git a/addons/sales_team/static/src/scss/crm_team_views.scss b/addons/sales_team/static/src/scss/crm_team_views.scss index 3dbfa16ac18..760712cd31e 100644 --- a/addons/sales_team/static/src/scss/crm_team_views.scss +++ b/addons/sales_team/static/src/scss/crm_team_views.scss @@ -1,8 +1,8 @@ -.o_kanban_renderer.o_crm_team_kanban { +.o_crm_team_kanban .o_kanban_renderer { --KanbanRecord-width: 400px; } -.o_kanban_renderer.o_crm_team_member_kanban { +.o_crm_team_member_kanban .o_kanban_renderer { --KanbanRecord-width: 350px; .o_kanban_group:not(.o_column_folded) { diff --git a/addons/stock/views/stock_picking_type_views.xml b/addons/stock/views/stock_picking_type_views.xml index 041286b7d22..04684b7ed0d 100644 --- a/addons/stock/views/stock_picking_type_views.xml +++ b/addons/stock/views/stock_picking_type_views.xml @@ -129,7 +129,7 @@ stock.picking.type.kanban stock.picking.type - + diff --git a/addons/survey/static/src/scss/survey_survey_views.scss b/addons/survey/static/src/scss/survey_survey_views.scss index 204f40971e1..79bf3eabd0f 100644 --- a/addons/survey/static/src/scss/survey_survey_views.scss +++ b/addons/survey/static/src/scss/survey_survey_views.scss @@ -1,5 +1,5 @@ // KANBAN VIEW -.o_survey_survey_view_kanban { +.o_survey_view_kanban_view .o_kanban_renderer { // Common: left semi-trophy icon for certifications .o_survey_kanban_card_certification { background-image: diff --git a/addons/survey/views/survey_survey_views.xml b/addons/survey/views/survey_survey_views.xml index 08c233d6710..8e5be09daca 100644 --- a/addons/survey/views/survey_survey_views.xml +++ b/addons/survey/views/survey_survey_views.xml @@ -209,7 +209,7 @@ survey.survey.view.kanban survey.survey - + diff --git a/addons/utm/static/src/scss/utm_views.scss b/addons/utm/static/src/scss/utm_views.scss index 9791dea18d1..6b7db326bd8 100644 --- a/addons/utm/static/src/scss/utm_views.scss +++ b/addons/utm/static/src/scss/utm_views.scss @@ -1,4 +1,4 @@ -.o_kanban_renderer.o_utm_kanban { +.o_utm_kanban .o_kanban_renderer { --KanbanRecord-width: #{380px - 2 * ($grid-gutter-width * .25)}; --KanbanGroup-padding-h: #{$grid-gutter-width * .25}; --KanbanGroup-padding-bottom: #{$grid-gutter-width}; diff --git a/addons/web/static/src/views/kanban/kanban_arch_parser.js b/addons/web/static/src/views/kanban/kanban_arch_parser.js index feec6f07a9b..6783c83f592 100644 --- a/addons/web/static/src/views/kanban/kanban_arch_parser.js +++ b/addons/web/static/src/views/kanban/kanban_arch_parser.js @@ -35,7 +35,6 @@ export class KanbanArchParser extends XMLParser { parse(arch, models, modelName) { const fields = models[modelName]; const xmlDoc = this.parseXML(arch); - const className = xmlDoc.getAttribute("class") || null; let defaultOrder = stringToOrderBy(xmlDoc.getAttribute("default_order") || null); const defaultGroupBy = xmlDoc.getAttribute("default_group_by"); const limit = xmlDoc.getAttribute("limit"); @@ -171,7 +170,6 @@ export class KanbanArchParser extends XMLParser { arch, activeActions, activeFields, - className, creates, defaultGroupBy, fieldNodes, diff --git a/addons/web/static/src/views/kanban/kanban_controller.scss b/addons/web/static/src/views/kanban/kanban_controller.scss index a0225d0396f..f186a63aa87 100644 --- a/addons/web/static/src/views/kanban/kanban_controller.scss +++ b/addons/web/static/src/views/kanban/kanban_controller.scss @@ -455,10 +455,6 @@ @include media-breakpoint-up(md) { --KanbanGroup-width: calc(var(--KanbanRecord-width) + (2 * var(--KanbanGroup-padding-h))); - - &.o_kanban_small_column { - --KanbanGroup-width: calc(var(--KanbanRecord--small-width) + (2 * var(--KanbanGroup-padding-h))); - } } .o_kanban_group, @@ -596,12 +592,6 @@ } } - &.o_kanban_mobile .o_kanban_record { - div.label { - @include o-text-overflow; - } - } - // Records colours @include o-kanban-record-color; @@ -612,6 +602,19 @@ } } +.o_kanban_mobile .o_kanban_renderer .o_kanban_record { + div.label { + @include o-text-overflow; + } +} + +.o_kanban_small_column .o_kanban_renderer.o_kanban_grouped { + @include media-breakpoint-up(md) { + --KanbanGroup-width: calc(var(--KanbanRecord--small-width) + (2 * var(--KanbanGroup-padding-h))); + } +} + + // ------- Sample mode ------- .o_kanban_view .o_view_sample_data { // all records diff --git a/addons/web/static/src/views/kanban/kanban_dashboard.scss b/addons/web/static/src/views/kanban/kanban_dashboard.scss index 33c40d41ae7..3810f1808f4 100644 --- a/addons/web/static/src/views/kanban/kanban_dashboard.scss +++ b/addons/web/static/src/views/kanban/kanban_dashboard.scss @@ -1,4 +1,4 @@ -.o_kanban_dashboard { +.o_kanban_dashboard .o_kanban_renderer { // ---------------------------------------------------------------------------- // Customize kanbanView default values @@ -193,9 +193,11 @@ ); padding: $o-kanban-record-margin; } +} +.o_kanban_dashboard.o_emphasize_colors .o_kanban_renderer { // Emphasize records' colors when necessary - &.o_emphasize_colors .o_kanban_record::after { + .o_kanban_record::after { width: $o-kanban-color-border-width * 2; } } diff --git a/addons/web/static/src/views/kanban/kanban_renderer.xml b/addons/web/static/src/views/kanban/kanban_renderer.xml index 8491bca2b47..76619cc9ebd 100644 --- a/addons/web/static/src/views/kanban/kanban_renderer.xml +++ b/addons/web/static/src/views/kanban/kanban_renderer.xml @@ -3,7 +3,7 @@
diff --git a/addons/web/static/src/views/view.js b/addons/web/static/src/views/view.js index d9461a0461f..cfff4a68f97 100644 --- a/addons/web/static/src/views/view.js +++ b/addons/web/static/src/views/view.js @@ -268,11 +268,18 @@ export class View extends Component { let subType = rootNode.getAttribute("js_class"); const bannerRoute = rootNode.getAttribute("banner_route"); const sample = rootNode.getAttribute("sample"); + const classList = [ + "o_view_controller", + `o_${type}_view`, + ...(props.className || "").split(" "), + ...(rootNode.getAttribute("class") || "").split(" "), + ]; // determine ViewClass to instantiate (if not already done) if (subType) { if (viewRegistry.contains(subType)) { descr = viewRegistry.get(subType); + classList.push(`o_${subType}_view`); } else { subType = null; } @@ -304,7 +311,7 @@ export class View extends Component { relatedModels, resModel, useSampleModel: false, - className: `${props.className} o_view_controller o_${this.env.config.viewType}_view`, + className: [...new Set(classList)].filter((c) => c).join(" "), }; if (viewDescription.custom_view_id) { // for dashboard diff --git a/addons/web/static/tests/views/kanban_view_tests.js b/addons/web/static/tests/views/kanban_view_tests.js index 0b3d1771770..e0bce6ba6b7 100644 --- a/addons/web/static/tests/views/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban_view_tests.js @@ -357,8 +357,8 @@ QUnit.module("Views", (hooks) => { }, }); + assert.hasClass(target.querySelector(".o_kanban_view"), "o_kanban_test"); assert.hasClass(target.querySelector(".o_kanban_renderer"), "o_kanban_ungrouped"); - assert.hasClass(target.querySelector(".o_kanban_renderer"), "o_kanban_test"); assert.containsN(target, ".o_kanban_record:not(.o_kanban_ghost)", 4); assert.containsN(target, ".o_kanban_ghost", 6); assert.containsOnce(target, ".o_kanban_record:contains(gnap)"); @@ -432,8 +432,8 @@ QUnit.module("Views", (hooks) => { "bg-100", "o_kanban_group should have a background" ); + assert.hasClass(target.querySelector(".o_kanban_view"), "o_kanban_test"); assert.hasClass(target.querySelector(".o_kanban_renderer"), "o_kanban_grouped"); - assert.hasClass(target.querySelector(".o_kanban_renderer"), "o_kanban_test"); assert.containsN(target, ".o_kanban_group", 2); assert.containsOnce(target, ".o_kanban_group:first-child .o_kanban_record"); assert.containsN(target, ".o_kanban_group:nth-child(2) .o_kanban_record", 3); diff --git a/addons/web/static/tests/views/view_tests.js b/addons/web/static/tests/views/view_tests.js index 9de54366c54..87f14b73284 100644 --- a/addons/web/static/tests/views/view_tests.js +++ b/addons/web/static/tests/views/view_tests.js @@ -479,12 +479,8 @@ QUnit.module("Views", (hooks) => { patchWithCleanup(ToyController.prototype, { setup() { this._super(); - const { - irFilters, - searchViewArch, - searchViewFields, - searchViewId, - } = this.props.info; + const { irFilters, searchViewArch, searchViewFields, searchViewId } = + this.props.info; assert.strictEqual(searchViewArch, serverData.views["animal,false,search"]); assert.deepEqual(searchViewFields, serverData.models.animal.fields); assert.strictEqual(searchViewId, false); @@ -527,12 +523,8 @@ QUnit.module("Views", (hooks) => { patchWithCleanup(ToyController.prototype, { setup() { this._super(); - const { - irFilters, - searchViewArch, - searchViewFields, - searchViewId, - } = this.props.info; + const { irFilters, searchViewArch, searchViewFields, searchViewId } = + this.props.info; assert.strictEqual(searchViewArch, ``); assert.deepEqual(searchViewFields, {}); assert.strictEqual(searchViewId, false); @@ -571,12 +563,8 @@ QUnit.module("Views", (hooks) => { patchWithCleanup(ToyController.prototype, { setup() { this._super(); - const { - irFilters, - searchViewArch, - searchViewFields, - searchViewId, - } = this.props.info; + const { irFilters, searchViewArch, searchViewFields, searchViewId } = + this.props.info; assert.strictEqual(searchViewArch, ``); assert.deepEqual(searchViewFields, {}); assert.strictEqual(searchViewId, undefined); @@ -614,12 +602,8 @@ QUnit.module("Views", (hooks) => { patchWithCleanup(ToyController.prototype, { setup() { this._super(); - const { - irFilters, - searchViewArch, - searchViewFields, - searchViewId, - } = this.props.info; + const { irFilters, searchViewArch, searchViewFields, searchViewId } = + this.props.info; assert.strictEqual(searchViewArch, ``); assert.deepEqual(searchViewFields, {}); assert.strictEqual(searchViewId, false); @@ -679,12 +663,8 @@ QUnit.module("Views", (hooks) => { patchWithCleanup(ToyController.prototype, { setup() { this._super(); - const { - irFilters, - searchViewArch, - searchViewFields, - searchViewId, - } = this.props.info; + const { irFilters, searchViewArch, searchViewFields, searchViewId } = + this.props.info; assert.strictEqual(searchViewArch, ``); assert.deepEqual(searchViewFields, {}); assert.strictEqual(searchViewId, undefined); @@ -1425,7 +1405,7 @@ QUnit.module("Views", (hooks) => { }); assert.deepEqual(domain, [[0, "=", 1]]); assert.deepEqual(groupBy, ["birthday"]); - assert.deepEqual(orderBy, [{name: "bar", asc: true}]); + assert.deepEqual(orderBy, [{ name: "bar", asc: true }]); } } ToyController.template = xml`
`; @@ -1439,7 +1419,7 @@ QUnit.module("Views", (hooks) => { domain: [[0, "=", 1]], groupBy: ["birthday"], context: { key: "val" }, - orderBy: [{name: "bar", asc: true}], + orderBy: [{ name: "bar", asc: true }], }; await mount(View, target, { env, props }); } @@ -1593,7 +1573,7 @@ QUnit.module("Views", (hooks) => { }); assert.deepEqual(domain, ["&", [0, "=", 1], [1, "=", 1]]); assert.deepEqual(groupBy, ["name"]); - assert.deepEqual(orderBy, [{name: "bar", asc: true}]); + assert.deepEqual(orderBy, [{ name: "bar", asc: true }]); } } ToyController.template = xml`
`; @@ -1607,12 +1587,35 @@ QUnit.module("Views", (hooks) => { domain: [[0, "=", 1]], groupBy: ["birthday"], context: { search_default_filter: 1, search_default_group_by: 1 }, - orderBy: [{name: "bar", asc: true}], + orderBy: [{ name: "bar", asc: true }], }; await mount(View, target, { env, props }); } ); + QUnit.test("multiple ways to pass classes for styling", async (assert) => { + const env = await makeTestEnv({ serverData }); + const props = { + resModel: "animal", + type: "toy", + className: "o_custom_class_from_props_1 o_custom_class_from_props_2", + arch: ` + + `, + fields: {}, + }; + await mount(View, target, { env, props }); + const view = target.querySelector(".o_toy_view"); + assert.hasClass(view, "o_toy_imp_view", "should have the class from js_class attribute"); + assert.hasClass(view, "o_custom_class_from_props_1", "should have the class from props"); + assert.hasClass(view, "o_custom_class_from_props_2", "should have the class from props"); + assert.hasClass(view, "o_custom_class_from_arch_1", "should have the class from arch"); + assert.hasClass(view, "o_custom_class_from_arch_2", "should have the class from arch"); + }); + //////////////////////////////////////////////////////////////////////////// // update props //////////////////////////////////////////////////////////////////////////// diff --git a/addons/website/static/src/scss/website.backend.scss b/addons/website/static/src/scss/website.backend.scss index 7c79af5c9a6..7a746027ad9 100644 --- a/addons/website/static/src/scss/website.backend.scss +++ b/addons/website/static/src/scss/website.backend.scss @@ -195,7 +195,7 @@ display: contents; } -.o_kanban_renderer.o_theme_kanban { +.o_theme_preview_kanban_view .o_kanban_renderer { $o-theme-kanban-gray: #fcfcfc; /// Un-grouped Layout (default) diff --git a/addons/website/static/src/scss/website_visitor_views.scss b/addons/website/static/src/scss/website_visitor_views.scss index 1729089b35f..1c94168e9de 100644 --- a/addons/website/static/src/scss/website_visitor_views.scss +++ b/addons/website/static/src/scss/website_visitor_views.scss @@ -1,4 +1,4 @@ -.o_wvisitor_kanban { +.o_wvisitor_kanban .o_kanban_renderer { &.o_kanban_ungrouped { padding:0px; .o_kanban_record { diff --git a/addons/website/views/website_views.xml b/addons/website/views/website_views.xml index e4b541b04a4..4aeebfee067 100644 --- a/addons/website/views/website_views.xml +++ b/addons/website/views/website_views.xml @@ -228,7 +228,7 @@ Themes Kanban ir.module.module - + diff --git a/addons/website_slides/static/src/scss/slide_views.scss b/addons/website_slides/static/src/scss/slide_views.scss index 136766807c7..b75247d0fde 100644 --- a/addons/website_slides/static/src/scss/slide_views.scss +++ b/addons/website_slides/static/src/scss/slide_views.scss @@ -1,4 +1,4 @@ -.o_kanban_view .o_slide_kanban { +.o_kanban_view.o_slide_kanban .o_kanban_renderer { --KanbanRecord-width: 400px; .o_kanban_slides_card_manage_pane { diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml index 3e64969946f..75410c213d1 100644 --- a/addons/website_slides/views/slide_channel_views.xml +++ b/addons/website_slides/views/slide_channel_views.xml @@ -236,7 +236,7 @@ slide.channel.view.kanban slide.channel - + diff --git a/odoo/addons/base/static/src/css/modules.css b/odoo/addons/base/static/src/css/modules.css index 615116c3dac..755299a54b2 100644 --- a/odoo/addons/base/static/src/css/modules.css +++ b/odoo/addons/base/static/src/css/modules.css @@ -12,24 +12,24 @@ width: 77%; } -.o_kanban_view .o_modules_kanban .oe_module_vignette, +.o_kanban_view.o_modules_kanban .o_kanban_renderer .oe_module_vignette, .o_modules_field .o_modules_kanban .oe_module_vignette { align-items: center; display: flex; } -.o_kanban_view .o_modules_kanban .o_kanban_record .o_dropdown_kanban, -.o_modules_field .o_modules_kanban .o_kanban_record .o_dropdown_kanban { +.o_kanban_view.o_modules_kanban .o_kanban_renderer .o_kanban_record .o_dropdown_kanban, +.o_modules_field .o_modules_kanban .o_kanban_renderer .o_kanban_record .o_dropdown_kanban { visibility: visible; opacity: 0.5; } -.o_kanban_view .o_modules_kanban .o_kanban_record:hover .o_dropdown_kanban, -.o_kanban_view .o_modules_kanban .o_kanban_record .o_dropdown_kanban.show { +.o_kanban_view.o_modules_kanban .o_kanban_renderer .o_kanban_record:hover .o_dropdown_kanban, +.o_kanban_view.o_modules_kanban .o_kanban_renderer .o_kanban_record .o_dropdown_kanban.show { opacity: 1; } -.o_modules_field .o_modules_kanban { +.o_modules_field .o_modules_kanban .o_kanban_renderer { --KanbanRecord-width: 280px; --KanbanRecord-width-small: 280px; } diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml index 49e5be43943..da3d32c79f6 100644 --- a/odoo/addons/base/views/res_partner_views.xml +++ b/odoo/addons/base/views/res_partner_views.xml @@ -456,7 +456,7 @@ res.partner.kanban res.partner - +