diff --git a/setup/web_widget_model_viewer/odoo/addons/web_widget_model_viewer b/setup/web_widget_model_viewer/odoo/addons/web_widget_model_viewer new file mode 120000 index 000000000..44e6bb1b5 --- /dev/null +++ b/setup/web_widget_model_viewer/odoo/addons/web_widget_model_viewer @@ -0,0 +1 @@ +../../../../web_widget_model_viewer \ No newline at end of file diff --git a/setup/web_widget_model_viewer/setup.py b/setup/web_widget_model_viewer/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/web_widget_model_viewer/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/web_widget_model_viewer/static/src/js/web_widget_model_viewer.js b/web_widget_model_viewer/static/src/js/web_widget_model_viewer.js index 1af153a70..e3ef0662a 100644 --- a/web_widget_model_viewer/static/src/js/web_widget_model_viewer.js +++ b/web_widget_model_viewer/static/src/js/web_widget_model_viewer.js @@ -1,34 +1,33 @@ // Copyright 2020 Lorenzo Battistini @ TAKOBI // Copyright 2020 Andrea Piovesana @ Openindustry.it -odoo.define('web_widget_model_viewer.FieldBinaryModelViewer', function (require) { +odoo.define("web_widget_model_viewer.FieldBinaryModelViewer", function (require) { "use strict"; - var BasicFields = require('web.basic_fields'); - var core = require('web.core'); - var registry = require('web.field_registry'); - var session = require('web.session'); - var utils = require('web.utils'); + var BasicFields = require("web.basic_fields"); + var core = require("web.core"); + var registry = require("web.field_registry"); + var session = require("web.session"); + var utils = require("web.utils"); var _t = core._t; var qweb = core.qweb; var FieldBinaryModelViewer = BasicFields.FieldBinaryFile.extend({ - template: 'FieldBinaryModelViewer', + template: "FieldBinaryModelViewer", events: _.extend({}, BasicFields.FieldBinaryFile.prototype.events, { - 'click': function () { + click: function () { if (this.mode === "readonly") { - this.trigger_up('bounce_edit'); + this.trigger_up("bounce_edit"); } }, - 'click #model-viewer-fullscreen': 'fullscreen', + "click #model-viewer-fullscreen": "fullscreen", }), - supportedFieldTypes: ['binary'], + supportedFieldTypes: ["binary"], init: function () { this._super.apply(this, arguments); var max_upload_size = this.attrs.max_upload_size; if (max_upload_size) { this.max_upload_size = parseInt(max_upload_size) * 1024 * 1024; - } - else { + } else { this.max_upload_size = 250 * 1024 * 1024; // 250M } }, @@ -37,61 +36,77 @@ odoo.define('web_widget_model_viewer.FieldBinaryModelViewer', function (require) var url = ""; if (this.value) { if (!utils.is_bin_size(this.value)) { - url = 'data:model/gltf-binary;base64,' + this.value; + url = "data:model/gltf-binary;base64," + this.value; } else { - url = session.url('/web/content', { + url = session.url("/web/content", { model: this.model, id: JSON.stringify(this.res_id), field: this.name, }); } } - var $glb = $(qweb.render("FieldBinaryModelViewer-glb", {widget: this, url: url})); + var $glb = $( + qweb.render("FieldBinaryModelViewer-glb", {widget: this, url: url}) + ); var style = this.attrs.style; if (style) { - $glb.attr('style', style); + $glb.attr("style", style); } - this.$('> model-viewer').remove(); + this.$("> model-viewer").remove(); this.$el.prepend($glb); - $glb.on('error', function () { + $glb.on("error", function () { self._clearFile(); - $glb.attr('src', ""); - self.do_warn(_t("3D model"), _t("Could not display the selected model.")); + $glb.attr("src", ""); + self.do_warn( + _t("3D model"), + _t("Could not display the selected model.") + ); }); }, fullscreen: function (ev) { - var isFullscreenAvailable = document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled || document.msFullscreenEnabled || false; + var isFullscreenAvailable = + document.fullscreenEnabled || + document.mozFullScreenEnabled || + document.webkitFullscreenEnabled || + document.msFullscreenEnabled || + false; var modelViewerElem = ev.target.parentElement.parentElement.parentElement; if (isFullscreenAvailable) { - var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement; + var fullscreenElement = + document.fullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement || + document.msFullscreenElement; if (fullscreenElement) { - if (document.exitFullscreen) { - document.exitFullscreen(); - } else if (document.mozCancelFullScreen) { /* Firefox */ - document.mozCancelFullScreen(); - } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */ - document.webkitExitFullscreen(); - } else if (document.msExitFullscreen) { /* IE/Edge */ - document.msExitFullscreen(); - } - } - else { - if (modelViewerElem.requestFullscreen) { - modelViewerElem.requestFullscreen(); - } else if (modelViewerElem.mozRequestFullScreen) { /* Firefox */ - modelViewerElem.mozRequestFullScreen(); - } else if (modelViewerElem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */ - modelViewerElem.webkitRequestFullscreen(); - } else if (modelViewerElem.msRequestFullscreen) { /* IE/Edge */ - modelViewerElem.msRequestFullscreen(); + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.mozCancelFullScreen) { + /* Firefox */ + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { + /* Chrome, Safari and Opera */ + document.webkitExitFullscreen(); + } else if (document.msExitFullscreen) { + /* IE/Edge */ + document.msExitFullscreen(); } - } - } - else { + } else if (modelViewerElem.requestFullscreen) { + modelViewerElem.requestFullscreen(); + } else if (modelViewerElem.mozRequestFullScreen) { + /* Firefox */ + modelViewerElem.mozRequestFullScreen(); + } else if (modelViewerElem.webkitRequestFullscreen) { + /* Chrome, Safari and Opera */ + modelViewerElem.webkitRequestFullscreen(); + } else if (modelViewerElem.msRequestFullscreen) { + /* IE/Edge */ + modelViewerElem.msRequestFullscreen(); + } + } else { console.error("ERROR : full screen not supported by web browser"); } }, }); - registry.add('model_viewer', FieldBinaryModelViewer); + registry.add("model_viewer", FieldBinaryModelViewer); }); diff --git a/web_widget_model_viewer/static/src/xml/web_widget_model_viewer.xml b/web_widget_model_viewer/static/src/xml/web_widget_model_viewer.xml index b2c15ec13..fcccd2f10 100644 --- a/web_widget_model_viewer/static/src/xml/web_widget_model_viewer.xml +++ b/web_widget_model_viewer/static/src/xml/web_widget_model_viewer.xml @@ -1,16 +1,28 @@ - + -
+
-
@@ -18,15 +30,21 @@ + t-att-src='url' + t-att-border="widget.readonly ? 0 : 1" + t-att-name="widget.name" + alt="3D model" + auto-rotate="1" + camera-controls="1" + >
- - + +
diff --git a/web_widget_model_viewer/views/assets.xml b/web_widget_model_viewer/views/assets.xml index 79e47348b..b445e9aae 100644 --- a/web_widget_model_viewer/views/assets.xml +++ b/web_widget_model_viewer/views/assets.xml @@ -1,14 +1,31 @@ - + -