personal-website/front/src/decorat/desktop-decorat.js

54 lines
1.9 KiB
JavaScript
Raw Normal View History

2023-07-18 17:15:06 +00:00
export default class DesktopDecorat{
/** @type {Element} */
2023-07-18 20:47:12 +00:00
#windowsLayer
2023-07-18 17:15:06 +00:00
constructor(){
this.windowLayer = document.body.querySelector('#windows-layer')
2023-07-18 20:47:12 +00:00
// this.#windowsLayer = document.body.querySelector('#windows-layer')
this.#windowsLayer = document.body.querySelector('#windows-layer')
let startDrag = function(event) {
let window = event.target.closest('.WindowFrame')
DesktopDecorat.bringWindowToFront(window)
if (event.target.classList.contains("DragArea")){
let xPosInit = event.offsetX
let yPosInit = event.offsetY
let dragWindow = function(event){
window.style.left = `${event.clientX - xPosInit}px`
window.style.top = `${event.clientY - yPosInit}px`
}
let stopDrag = function(){
removeEventListener('mousemove', dragWindow)
removeEventListener('mouseup', stopDrag)
2023-07-18 17:15:06 +00:00
}
2023-07-18 20:47:12 +00:00
addEventListener('mousemove', dragWindow)
addEventListener('mouseup', stopDrag)
2023-07-18 17:15:06 +00:00
}
}
2023-07-18 20:47:12 +00:00
this.#windowsLayer.addEventListener('mousedown', startDrag)
2023-07-18 17:15:06 +00:00
}
/**
* @param {HTMLElement} window
*/
static bringWindowToFront(window){ //FIXME
2023-07-18 20:47:12 +00:00
let previousWindow = this.#windowsLayer.lastChild
2023-07-18 17:15:06 +00:00
if (window == null || window == undefined){
return
}
if (window != previousWindow){
2023-07-18 20:47:12 +00:00
this.#windowsLayer.insertBefore(window, previousWindow.nextSibling)
2023-07-18 17:15:06 +00:00
previousWindow.classList.remove("Focused")
window.classList.add("Focused")
} else {
window.classList.add("Focused")
}
return
}
static ChangeURL(appWindow){
let appId = appWindow.getAttribute('appid')
window.history.replaceState(null, "", `/${appId}/`);
}
}