69 lines
2.2 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
}
|