mirror of https://github.com/OCA/web.git
[IMP] web_widget_model_viewer: black, isort, prettier
parent
495b040f12
commit
1e6942bd3f
|
@ -0,0 +1 @@
|
||||||
|
../../../../web_widget_model_viewer
|
|
@ -0,0 +1,6 @@
|
||||||
|
import setuptools
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
setup_requires=['setuptools-odoo'],
|
||||||
|
odoo_addon=True,
|
||||||
|
)
|
|
@ -1,34 +1,33 @@
|
||||||
// Copyright 2020 Lorenzo Battistini @ TAKOBI
|
// Copyright 2020 Lorenzo Battistini @ TAKOBI
|
||||||
// Copyright 2020 Andrea Piovesana @ Openindustry.it
|
// 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";
|
"use strict";
|
||||||
|
|
||||||
var BasicFields = require('web.basic_fields');
|
var BasicFields = require("web.basic_fields");
|
||||||
var core = require('web.core');
|
var core = require("web.core");
|
||||||
var registry = require('web.field_registry');
|
var registry = require("web.field_registry");
|
||||||
var session = require('web.session');
|
var session = require("web.session");
|
||||||
var utils = require('web.utils');
|
var utils = require("web.utils");
|
||||||
var _t = core._t;
|
var _t = core._t;
|
||||||
var qweb = core.qweb;
|
var qweb = core.qweb;
|
||||||
|
|
||||||
var FieldBinaryModelViewer = BasicFields.FieldBinaryFile.extend({
|
var FieldBinaryModelViewer = BasicFields.FieldBinaryFile.extend({
|
||||||
template: 'FieldBinaryModelViewer',
|
template: "FieldBinaryModelViewer",
|
||||||
events: _.extend({}, BasicFields.FieldBinaryFile.prototype.events, {
|
events: _.extend({}, BasicFields.FieldBinaryFile.prototype.events, {
|
||||||
'click': function () {
|
click: function () {
|
||||||
if (this.mode === "readonly") {
|
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 () {
|
init: function () {
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
var max_upload_size = this.attrs.max_upload_size;
|
var max_upload_size = this.attrs.max_upload_size;
|
||||||
if (max_upload_size) {
|
if (max_upload_size) {
|
||||||
this.max_upload_size = parseInt(max_upload_size) * 1024 * 1024;
|
this.max_upload_size = parseInt(max_upload_size) * 1024 * 1024;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.max_upload_size = 250 * 1024 * 1024; // 250M
|
this.max_upload_size = 250 * 1024 * 1024; // 250M
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -37,61 +36,77 @@ odoo.define('web_widget_model_viewer.FieldBinaryModelViewer', function (require)
|
||||||
var url = "";
|
var url = "";
|
||||||
if (this.value) {
|
if (this.value) {
|
||||||
if (!utils.is_bin_size(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 {
|
} else {
|
||||||
url = session.url('/web/content', {
|
url = session.url("/web/content", {
|
||||||
model: this.model,
|
model: this.model,
|
||||||
id: JSON.stringify(this.res_id),
|
id: JSON.stringify(this.res_id),
|
||||||
field: this.name,
|
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;
|
var style = this.attrs.style;
|
||||||
if (style) {
|
if (style) {
|
||||||
$glb.attr('style', style);
|
$glb.attr("style", style);
|
||||||
}
|
}
|
||||||
this.$('> model-viewer').remove();
|
this.$("> model-viewer").remove();
|
||||||
this.$el.prepend($glb);
|
this.$el.prepend($glb);
|
||||||
$glb.on('error', function () {
|
$glb.on("error", function () {
|
||||||
self._clearFile();
|
self._clearFile();
|
||||||
$glb.attr('src', "");
|
$glb.attr("src", "");
|
||||||
self.do_warn(_t("3D model"), _t("Could not display the selected model."));
|
self.do_warn(
|
||||||
|
_t("3D model"),
|
||||||
|
_t("Could not display the selected model.")
|
||||||
|
);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
fullscreen: function (ev) {
|
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;
|
var modelViewerElem = ev.target.parentElement.parentElement.parentElement;
|
||||||
if (isFullscreenAvailable) {
|
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 (fullscreenElement) {
|
||||||
if (document.exitFullscreen) {
|
if (document.exitFullscreen) {
|
||||||
document.exitFullscreen();
|
document.exitFullscreen();
|
||||||
} else if (document.mozCancelFullScreen) { /* Firefox */
|
} else if (document.mozCancelFullScreen) {
|
||||||
document.mozCancelFullScreen();
|
/* Firefox */
|
||||||
} else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */
|
document.mozCancelFullScreen();
|
||||||
document.webkitExitFullscreen();
|
} else if (document.webkitExitFullscreen) {
|
||||||
} else if (document.msExitFullscreen) { /* IE/Edge */
|
/* Chrome, Safari and Opera */
|
||||||
document.msExitFullscreen();
|
document.webkitExitFullscreen();
|
||||||
}
|
} else if (document.msExitFullscreen) {
|
||||||
}
|
/* IE/Edge */
|
||||||
else {
|
document.msExitFullscreen();
|
||||||
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 if (modelViewerElem.requestFullscreen) {
|
||||||
}
|
modelViewerElem.requestFullscreen();
|
||||||
else {
|
} 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");
|
console.error("ERROR : full screen not supported by web browser");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
registry.add('model_viewer', FieldBinaryModelViewer);
|
registry.add("model_viewer", FieldBinaryModelViewer);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,16 +1,28 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<templates id="template" xml:space="preserve">
|
<templates id="template" xml:space="preserve">
|
||||||
<t t-name="FieldBinaryModelViewer">
|
<t t-name="FieldBinaryModelViewer">
|
||||||
<div class="o_field_image" aria-atomic="true" style="background-color: #FFFFFF;">
|
<div
|
||||||
|
class="o_field_image"
|
||||||
|
aria-atomic="true"
|
||||||
|
style="background-color: #FFFFFF;"
|
||||||
|
>
|
||||||
<t t-if="widget.mode !== 'readonly'">
|
<t t-if="widget.mode !== 'readonly'">
|
||||||
<div class="o_form_image_controls">
|
<div class="o_form_image_controls">
|
||||||
<button class="fa fa-pencil float-left o_select_file_button fa-2x" title="Edit" aria-label="Edit"/>
|
<button
|
||||||
<button class="fa fa-trash-o float-right o_clear_file_button fa-2x" title="Clear" aria-label="Clear"/>
|
class="fa fa-pencil float-left o_select_file_button fa-2x"
|
||||||
|
title="Edit"
|
||||||
|
aria-label="Edit"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
class="fa fa-trash-o float-right o_clear_file_button fa-2x"
|
||||||
|
title="Clear"
|
||||||
|
aria-label="Clear"
|
||||||
|
/>
|
||||||
|
|
||||||
<span class="o_form_binary_progress">Uploading...</span>
|
<span class="o_form_binary_progress">Uploading...</span>
|
||||||
<t t-call="HiddenInputFile">
|
<t t-call="HiddenInputFile">
|
||||||
<t t-set="image_only" t-value="true"/>
|
<t t-set="image_only" t-value="true" />
|
||||||
<t t-set="fileupload_id" t-value="widget.fileupload_id"/>
|
<t t-set="fileupload_id" t-value="widget.fileupload_id" />
|
||||||
</t>
|
</t>
|
||||||
</div>
|
</div>
|
||||||
</t>
|
</t>
|
||||||
|
@ -18,15 +30,21 @@
|
||||||
</t>
|
</t>
|
||||||
<t t-name="FieldBinaryModelViewer-glb">
|
<t t-name="FieldBinaryModelViewer-glb">
|
||||||
<model-viewer
|
<model-viewer
|
||||||
t-att-src='url'
|
t-att-src='url'
|
||||||
t-att-border="widget.readonly ? 0 : 1"
|
t-att-border="widget.readonly ? 0 : 1"
|
||||||
t-att-name="widget.name"
|
t-att-name="widget.name"
|
||||||
alt="3D model"
|
alt="3D model"
|
||||||
auto-rotate="1"
|
auto-rotate="1"
|
||||||
camera-controls="1">
|
camera-controls="1"
|
||||||
|
>
|
||||||
<div class="text-center mt-2 mb-2 mr-2">
|
<div class="text-center mt-2 mb-2 mr-2">
|
||||||
<span id="model-viewer-fullscreen" title="View fullscreen" role="img" aria-label="Fullscreen">
|
<span
|
||||||
<i class="fa fa-arrows-alt fa-2x"/>
|
id="model-viewer-fullscreen"
|
||||||
|
title="View fullscreen"
|
||||||
|
role="img"
|
||||||
|
aria-label="Fullscreen"
|
||||||
|
>
|
||||||
|
<i class="fa fa-arrows-alt fa-2x" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</model-viewer>
|
</model-viewer>
|
||||||
|
|
|
@ -1,14 +1,31 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<template id="web_layout_model_viewer" name="Web layout Model viewer" inherit_id="web.layout">
|
<template
|
||||||
|
id="web_layout_model_viewer"
|
||||||
|
name="Web layout Model viewer"
|
||||||
|
inherit_id="web.layout"
|
||||||
|
>
|
||||||
<xpath expr="//meta[@name='viewport']" position="after">
|
<xpath expr="//meta[@name='viewport']" position="after">
|
||||||
<script type="module" src="/web_widget_model_viewer/static/lib/model-viewer.min.js" />
|
<script
|
||||||
<script nomodule="1" src="/web_widget_model_viewer/static/lib/model-viewer-legacy.js" />
|
type="module"
|
||||||
|
src="/web_widget_model_viewer/static/lib/model-viewer.min.js"
|
||||||
|
/>
|
||||||
|
<script
|
||||||
|
nomodule="1"
|
||||||
|
src="/web_widget_model_viewer/static/lib/model-viewer-legacy.js"
|
||||||
|
/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
<template id="assets_backend" name="web_widget_model_viewer assets" inherit_id="web.assets_backend">
|
<template
|
||||||
|
id="assets_backend"
|
||||||
|
name="web_widget_model_viewer assets"
|
||||||
|
inherit_id="web.assets_backend"
|
||||||
|
>
|
||||||
<xpath expr="." position="inside">
|
<xpath expr="." position="inside">
|
||||||
<script type="text/javascript" src="/web_widget_model_viewer/static/src/js/web_widget_model_viewer.js" />
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/web_widget_model_viewer/static/src/js/web_widget_model_viewer.js"
|
||||||
|
/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
Loading…
Reference in New Issue