Commit 5f34ddc8 authored by LianaHus's avatar LianaHus

refactor panel-resize

parent 7316f0db
...@@ -81,7 +81,7 @@ var css = csjs` ...@@ -81,7 +81,7 @@ var css = csjs`
width : 50px; width : 50px;
user-select : none; user-select : none;
} }
.sidepanel { .sidepanel {
display : flex; display : flex;
flex-direction : row-reverse; flex-direction : row-reverse;
width : 320px; width : 320px;
...@@ -141,7 +141,6 @@ class App { ...@@ -141,7 +141,6 @@ class App {
init () { init () {
var self = this var self = this
self._components.resizeFeature = new PanelsResize('#side-panel', '#editor-container', { 'minWidth': 330, x: 450 })
run.apply(self) run.apply(self)
} }
...@@ -157,7 +156,7 @@ class App { ...@@ -157,7 +156,7 @@ class App {
// center panel, resizable // center panel, resizable
self._view.sidepanel = yo` self._view.sidepanel = yo`
<div id="side-panel" class=${css.sidepanel}> <div id="side-panel" style="min-width: 320px;" class=${css.sidepanel}>
${''} ${''}
</div> </div>
` `
...@@ -169,10 +168,13 @@ class App { ...@@ -169,10 +168,13 @@ class App {
</div> </div>
` `
self._components.resizeFeature = new PanelsResize(self._view.sidepanel)
self._view.el = yo` self._view.el = yo`
<div class=${css.browsersolidity}> <div class=${css.browsersolidity}>
${self._view.iconpanel} ${self._view.iconpanel}
${self._view.sidepanel} ${self._view.sidepanel}
${self._components.resizeFeature.render()}
${self._view.mainpanel} ${self._view.mainpanel}
</div> </div>
` `
......
...@@ -10,13 +10,13 @@ export class FramingService { ...@@ -10,13 +10,13 @@ export class FramingService {
start () { start () {
this.sidePanel.events.on('toggle', () => { this.sidePanel.events.on('toggle', () => {
this.resizeFeature.panel1.clientWidth !== 0 ? this.resizeFeature.minimize() : this.resizeFeature.maximise() this.resizeFeature.panel.clientWidth !== 0 ? this.resizeFeature.hidePanel() : this.resizeFeature.showPanel()
}) })
this.sidePanel.events.on('showing', () => { this.sidePanel.events.on('showing', () => {
this.resizeFeature.panel1.clientWidth === 0 ? this.resizeFeature.maximise() : '' this.resizeFeature.panel.clientWidth === 0 ? this.resizeFeature.showPanel() : ''
}) })
this.mainPanel.events.on('toggle', () => { this.mainPanel.events.on('toggle', () => {
this.resizeFeature.maximise() this.resizeFeature.showPanel()
}) })
this.verticalIcon.select('fileExplorers') this.verticalIcon.select('fileExplorers')
......
...@@ -3,11 +3,10 @@ const csjs = require('csjs-inject') ...@@ -3,11 +3,10 @@ const csjs = require('csjs-inject')
const css = csjs` const css = csjs`
.dragbar { .dragbar {
width : 4px; width : 1px;
height : 100%; height : 100%;
cursor : col-resize; cursor : col-resize;
z-index : 999; z-index : 999;
/* border-right : 2px solid var(--primary); */
} }
.ghostbar { .ghostbar {
width : 3px; width : 3px;
...@@ -21,88 +20,74 @@ const css = csjs` ...@@ -21,88 +20,74 @@ const css = csjs`
} }
` `
/*
* opt:
* minWidth : minimn width for panels
* x : position of gutter at load
*
*
*/
export default class PanelsResize { export default class PanelsResize {
constructor (idpanel1, idpanel2, opt) { constructor (panel) {
var panel1 = document.querySelector(idpanel1) this.panel = panel
var panel2 = document.querySelector(idpanel2) let self = this;
this.panel1 = panel1 const string = panel.style.minWidth
this.panel2 = panel2 this.minWidth = string.length > 2 ? parseInt(string.substring(0, string.length - 2)) : 0
this.opt = opt window.addEventListener('resize', function (event) {
self.setPosition(event)
})
}
var ghostbar = yo`<div class=${css.ghostbar}></div>` render () {
this.ghostbar = yo`<div class=${css.ghostbar}></div>`
let mousedown = (event) => { let mousedown = (event) => {
event.preventDefault() event.preventDefault()
if (event.which === 1) { if (event.which === 1) {
moveGhostbar(event) moveGhostbar(event)
document.body.appendChild(ghostbar) document.body.appendChild(this.ghostbar)
document.addEventListener('mousemove', moveGhostbar) document.addEventListener('mousemove', moveGhostbar)
document.addEventListener('mouseup', removeGhostbar) document.addEventListener('mouseup', removeGhostbar)
document.addEventListener('keydown', cancelGhostbar) document.addEventListener('keydown', cancelGhostbar)
} }
} }
let cancelGhostbar = (event) => { let cancelGhostbar = (event) => {
if (event.keyCode === 27) { if (event.keyCode === 27) {
document.body.removeChild(ghostbar) document.body.removeChild(this.ghostbar)
document.removeEventListener('mousemove', moveGhostbar) document.removeEventListener('mousemove', moveGhostbar)
document.removeEventListener('mouseup', removeGhostbar) document.removeEventListener('mouseup', removeGhostbar)
document.removeEventListener('keydown', cancelGhostbar) document.removeEventListener('keydown', cancelGhostbar)
} }
} }
let moveGhostbar = (event) => { // @NOTE VERTICAL ghostbar let moveGhostbar = (event) => {
let p = processPositions(event) this.ghostbar.style.left = event.x + 'px'
if (p.panel1Width <= opt.minWidth || p.panel2Width <= opt.minWidth) return
ghostbar.style.left = event.x + 'px'
}
let setPosition = (event) => {
let p = processPositions(event)
panel1.style.width = p.panel1Width + 'px'
panel2.style.left = p.panel2left + 'px'
panel2.style.width = p.panel2Width + 'px'
} }
let removeGhostbar = (event) => { let removeGhostbar = (event) => {
document.body.removeChild(ghostbar) document.body.removeChild(this.ghostbar)
document.removeEventListener('mousemove', moveGhostbar) document.removeEventListener('mousemove', moveGhostbar)
document.removeEventListener('mouseup', removeGhostbar) document.removeEventListener('mouseup', removeGhostbar)
document.removeEventListener('keydown', cancelGhostbar) document.removeEventListener('keydown', cancelGhostbar)
setPosition(event) this.setPosition(event)
} }
let processPositions = (event) => { return yo`<div onmousedown=${mousedown} class=${css.dragbar}></div>`
let panel1Width = event.x - panel1.offsetLeft }
panel1Width = panel1Width < opt.minWidth ? opt.minWidth : panel1Width
let panel2left = panel1.offsetLeft + panel1Width
let panel2Width = panel2.parentElement.clientWidth - panel1.offsetLeft - panel1Width
panel2Width = panel2Width < opt.minWidth ? opt.minWidth : panel2Width
return { panel1Width, panel2left, panel2Width }
}
window.addEventListener('resize', function (event) {
setPosition({ x: panel1.offsetLeft + panel1.clientWidth })
})
var dragbar = yo`<div onmousedown=${mousedown} class=${css.dragbar}></div>` calculatePanelWidth (event) {
panel1.appendChild(dragbar) return event.x - this.panel.offsetLeft
}
setPosition(opt) setPosition (event) {
let panelWidth = this.calculatePanelWidth(event)
// close the panel if the width is less than a minWidth
if (panelWidth > this.minWidth - 10 || this.panel.style.display == 'none') {
this.panel.style.width = panelWidth + 'px'
this.showPanel()
} else this.hidePanel()
} }
minimize () { hidePanel () {
this.panel1.style.display = 'none' this.panel.style.display = 'none'
} }
maximise () { showPanel () {
this.panel1.style.display = 'flex' this.panel.style.display = 'flex'
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment