Eliminate Python dependency: embed frontend assets in odoo-go
- Copy all OWL frontend assets (JS/CSS/XML/fonts/images) into frontend/ directory (2925 files, 43MB) — no more runtime reads from Python Odoo - Replace OdooAddonsPath config with FrontendDir pointing to local frontend/ - Rewire bundle.go, static.go, templates.go, webclient.go to read from frontend/ instead of external Python Odoo addons directory - Auto-detect frontend/ and build/ dirs relative to binary in main.go - Delete obsolete Python helper scripts (tools/*.py) The Go server is now fully self-contained: single binary + frontend/ folder. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
5
frontend/project/static/src/core/web/@types/models.d.ts
vendored
Normal file
5
frontend/project/static/src/core/web/@types/models.d.ts
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
declare module "models" {
|
||||
export interface Thread {
|
||||
collaborator_ids: ResPartner[];
|
||||
}
|
||||
}
|
||||
34
frontend/project/static/src/core/web/follower_list_patch.js
Normal file
34
frontend/project/static/src/core/web/follower_list_patch.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import { FollowerList } from "@mail/core/web/follower_list";
|
||||
import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
|
||||
import { _t } from "@web/core/l10n/translation";
|
||||
import { useService } from "@web/core/utils/hooks";
|
||||
|
||||
import { patch } from "@web/core/utils/patch";
|
||||
|
||||
const followerListPatch = {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.dialogService = useService("dialog");
|
||||
},
|
||||
/**
|
||||
* @param {MouseEvent} ev
|
||||
* @param {import("models").Follower} follower
|
||||
*/
|
||||
async onClickRemove(ev, follower) {
|
||||
if (follower.partner_id.in(follower.thread.collaborator_ids)) {
|
||||
this.dialogService.add(ConfirmationDialog, {
|
||||
title: _t("Remove Collaborator"),
|
||||
body: _t(
|
||||
"This follower is currently a project collaborator. Removing them will revoke their portal access to the project. Are you sure you want to proceed?"
|
||||
),
|
||||
confirmLabel: _t("Remove Collaborator"),
|
||||
cancelLabel: _t("Discard"),
|
||||
confirm: () => super.onClickRemove(ev, follower),
|
||||
cancel: () => {},
|
||||
});
|
||||
} else {
|
||||
super.onClickRemove(ev, follower);
|
||||
}
|
||||
},
|
||||
};
|
||||
patch(FollowerList.prototype, followerListPatch);
|
||||
13
frontend/project/static/src/core/web/thread_model_patch.js
Normal file
13
frontend/project/static/src/core/web/thread_model_patch.js
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Thread } from "@mail/core/common/thread_model";
|
||||
import { fields } from "@mail/model/misc";
|
||||
|
||||
import { patch } from "@web/core/utils/patch";
|
||||
|
||||
/** @type {import("models").Thread} */
|
||||
const threadPatch = {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.collaborator_ids = fields.Many("res.partner");
|
||||
},
|
||||
};
|
||||
patch(Thread.prototype, threadPatch);
|
||||
Reference in New Issue
Block a user