55 lines
2.0 KiB
JavaScript
55 lines
2.0 KiB
JavaScript
|
class WindowsCompositor{
|
||
|
static windowsLayer
|
||
|
|
||
|
constructor(){
|
||
|
this.windowLayer = document.body.querySelector('#windows-layer')
|
||
|
WindowsCompositor.windowsLayer = document.body.querySelector('#windows-layer')
|
||
|
if (!WebDesktopEnvironment.isMobile) {
|
||
|
let startDrag = function(event) {
|
||
|
let window = event.target.closest('.WindowFrame')
|
||
|
WindowsCompositor.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)
|
||
|
}
|
||
|
|
||
|
addEventListener('mousemove', dragWindow)
|
||
|
addEventListener('mouseup', stopDrag)
|
||
|
}
|
||
|
}
|
||
|
WindowsCompositor.windowsLayer.addEventListener('mousedown', startDrag)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {HTMLElement} window
|
||
|
*/
|
||
|
static bringWindowToFront(window){ //FIXME
|
||
|
let previousWindow = WindowsCompositor.windowsLayer.lastChild
|
||
|
if (window == null || window == undefined){
|
||
|
return
|
||
|
}
|
||
|
if (window != previousWindow){
|
||
|
WindowsCompositor.windowsLayer.insertBefore(window, previousWindow.nextSibling)
|
||
|
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}/`);
|
||
|
}
|
||
|
}
|