You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.6 KiB
85 lines
3.6 KiB
/** @odoo-module **/
|
|
// Model for patch the FieldBinaryImage and add function for image preview
|
|
var basicFields = require('web.basic_fields');
|
|
var FieldBinaryImage = basicFields.FieldBinaryImage;
|
|
import { patch } from 'web.utils';
|
|
|
|
function removeEnlargedImage() {
|
|
// Function for close the enlarged image
|
|
const enlargedImg = document.querySelector(".enlarged-image");
|
|
document.body.removeChild(enlargedImg);
|
|
const blurredBg = document.querySelector(".blurred-bg");
|
|
document.body.removeChild(blurredBg);
|
|
const closeButton = document.querySelector(".close-button");
|
|
document.body.removeChild(closeButton);
|
|
document.body.classList.remove("enlarged-image-body");
|
|
}
|
|
|
|
patch(FieldBinaryImage.prototype, 'widget_preview_image/static/src/js/image_preview_widget.js', {
|
|
events: _.extend({}, FieldBinaryImage.prototype.events, {
|
|
'click img': function (ev) {
|
|
this.trigger_up('bounce_edit');
|
|
this.img_click(ev)
|
|
},
|
|
}),
|
|
img_click(ev) {
|
|
// Image click function for enlarge the FieldBinaryImage
|
|
const clickedImg = ev.target;
|
|
if (document.body.classList.contains("enlarged-image-body")) {
|
|
removeEnlargedImage();
|
|
return;
|
|
}
|
|
const newImg = document.createElement("img");
|
|
if (clickedImg.src.includes("avatar_128") && (clickedImg.name != 'avatar_128')){
|
|
newImg.src = clickedImg.src.replace("avatar_128", "image_1920");
|
|
}
|
|
else if (clickedImg.src.includes("image_128") && (clickedImg.name != 'image_128')){
|
|
newImg.src = clickedImg.src.replace("image_128", "image_1920");
|
|
}
|
|
else {
|
|
newImg.src = clickedImg.src
|
|
}
|
|
newImg.classList.add("enlarged-image");
|
|
newImg.style.position = "fixed";
|
|
newImg.style.top = 0;
|
|
newImg.style.bottom = 0;
|
|
newImg.style.left = 0;
|
|
newImg.style.right = 0;
|
|
newImg.style.margin = "auto";
|
|
newImg.style.maxWidth = "95%";
|
|
newImg.style.maxHeight = "95%";
|
|
newImg.style.zIndex = 9999;
|
|
// Create a div element for the blurred background
|
|
const blurredBg = document.createElement("div");
|
|
blurredBg.classList.add("blurred-bg");
|
|
blurredBg.style.position = "fixed";
|
|
blurredBg.style.top = 0;
|
|
blurredBg.style.bottom = 0;
|
|
blurredBg.style.left = 0;
|
|
blurredBg.style.right = 0;
|
|
blurredBg.style.background = "rgba(0, 0, 0, 0.5)";
|
|
blurredBg.style.backdropFilter = "blur(10px)";
|
|
blurredBg.style.zIndex = 9998;
|
|
// Create a button to close the enlarged image
|
|
const closeButton = document.createElement("button");
|
|
closeButton.classList.add("close-button");
|
|
closeButton.innerHTML = "Close";
|
|
closeButton.style.position = "fixed";
|
|
closeButton.style.top = "10px";
|
|
closeButton.style.right = "10px";
|
|
closeButton.style.padding = "5px";
|
|
closeButton.style.background = "transparent";
|
|
closeButton.style.border = "none";
|
|
closeButton.style.color = "#fff";
|
|
closeButton.style.fontSize = "16px";
|
|
closeButton.style.zIndex = 9999;
|
|
// Add a click event listener to the close button to remove the enlarged image
|
|
closeButton.addEventListener("click", removeEnlargedImage);
|
|
// Add the img, div, and button elements to the body
|
|
document.body.appendChild(blurredBg);
|
|
document.body.appendChild(newImg);
|
|
document.body.appendChild(closeButton);
|
|
// Add a class to the body to indicate that an image is enlarged
|
|
document.body.classList.add("enlarged-image-body");
|
|
},
|
|
});
|