Files
Foundry-VTT-Docker/resources/app/client/apps/av/camera-popout.js
2025-01-04 00:34:03 +01:00

69 lines
2.2 KiB
JavaScript

/**
* Abstraction of the Application interface to be used with the Draggable class as a substitute for the app
* This class will represent one popout feed window and handle its positioning and draggability
* @param {CameraViews} view The CameraViews application that this popout belongs to
* @param {string} userId ID of the user this popout belongs to
* @param {jQuery} element The div element of this specific popout window
*/
class CameraPopoutAppWrapper {
constructor(view, userId, element) {
this.view = view;
this.element = element;
this.userId = userId;
// "Fake" some application attributes
this.popOut = true;
this.options = {};
// Get the saved position
let setting = game.webrtc.settings.getUser(userId);
this.setPosition(setting);
new Draggable(this, element.find(".camera-view"), element.find(".video-container")[0], true);
}
/* -------------------------------------------- */
/**
* Get the current position of this popout window
*/
get position() {
return foundry.utils.mergeObject(this.element.position(), {
width: this.element.outerWidth(),
height: this.element.outerHeight(),
scale: 1
});
}
/* -------------------------------------------- */
/** @override */
setPosition(options={}) {
const position = Application.prototype.setPosition.call(this, options);
// Let the HTML renderer figure out the height based on width.
this.element[0].style.height = "";
if ( !foundry.utils.isEmpty(position) ) {
const current = game.webrtc.settings.client.users[this.userId] || {};
const update = foundry.utils.mergeObject(current, position);
game.webrtc.settings.set("client", `users.${this.userId}`, update);
}
return position;
}
/* -------------------------------------------- */
_onResize(event) {}
/* -------------------------------------------- */
/** @override */
bringToTop() {
let parent = this.element.parent();
let children = parent.children();
let lastElement = children[children.length - 1];
if (lastElement !== this.element[0]) {
game.webrtc.settings.set("client", `users.${this.userId}.z`, ++this.view.maxZ);
parent.append(this.element);
}
}
}