Unverified Commit fe101a56 authored by yann300's avatar yann300 Committed by GitHub

Merge pull request #2270 from ethereum/toasterIssue

side panel resize
parents a08cdc69 e2584414
...@@ -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,22 +156,25 @@ class App { ...@@ -157,22 +156,25 @@ 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>
` `
// handle the editor + terminal // handle the editor + terminal
self._view.mainpanel = yo` self._view.mainpanel = yo`
<div id="editor-container" class=${css.mainpanel}> <div id="main-panel" class=${css.mainpanel}>
${''} ${''}
</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,70 @@ const css = csjs` ...@@ -21,88 +20,70 @@ 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) const string = panel.style.minWidth
this.panel1 = panel1 this.minWidth = string.length > 2 ? parseInt(string.substring(0, string.length - 2)) : 0
this.panel2 = panel2 }
this.opt = opt
var ghostbar = yo`<div class=${css.ghostbar}></div>` render () {
this.ghostbar = yo`<div class=${css.ghostbar}></div>`
let mousedown = (event) => { const 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) => { const 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 const 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) => { const 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) { calculatePanelWidth (event) {
setPosition({ x: panel1.offsetLeft + panel1.clientWidth }) return event.x - this.panel.offsetLeft
}) }
var dragbar = yo`<div onmousedown=${mousedown} class=${css.dragbar}></div>`
panel1.appendChild(dragbar)
setPosition(opt) setPosition (event) {
const 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'
} }
} }
...@@ -17,10 +17,10 @@ function checkFilter (browser, filter, test, done) { ...@@ -17,10 +17,10 @@ function checkFilter (browser, filter, test, done) {
done() done()
return return
} }
var filterClass = '#editor-container div[class^="search"] input[class^="filter"]' const filterClass = '#main-panel div[class^="search"] input[class^="filter"]'
browser.setValue(filterClass, filter, function () { browser.setValue(filterClass, filter, function () {
browser.execute(function () { browser.execute(function () {
return document.querySelector('#editor-container div[class^="journal"]').innerHTML === test return document.querySelector('#main-panel div[class^="journal"]').innerHTML === test
}, [], function (result) { }, [], function (result) {
browser.clearValue(filterClass).setValue(filterClass, '', function () { browser.clearValue(filterClass).setValue(filterClass, '', function () {
if (!result.value) { if (!result.value) {
......
...@@ -16,12 +16,12 @@ class TestFunction extends EventEmitter { ...@@ -16,12 +16,12 @@ class TestFunction extends EventEmitter {
}) })
.click('.instance button[title="' + fnFullName + '"]') .click('.instance button[title="' + fnFullName + '"]')
.pause(500) .pause(500)
.waitForElementPresent('#editor-container div[class^="terminal"] span[id="tx' + txHash + '"]') .waitForElementPresent('#main-panel div[class^="terminal"] span[id="tx' + txHash + '"]')
.assert.containsText('#editor-container div[class^="terminal"] span[id="tx' + txHash + '"] span', log) .assert.containsText('#main-panel div[class^="terminal"] span[id="tx' + txHash + '"] span', log)
.click('#editor-container div[class^="terminal"] span[id="tx' + txHash + '"] div[class^="log"]') .click('#main-panel div[class^="terminal"] span[id="tx' + txHash + '"] div[class^="log"]')
.perform(function (client, done) { .perform(function (client, done) {
if (expectedReturn) { if (expectedReturn) {
client.getText('#editor-container div[class^="terminal"] span[id="tx' + txHash + '"] table[class^="txTable"] #decodedoutput', (result) => { client.getText('#main-panel div[class^="terminal"] span[id="tx' + txHash + '"] table[class^="txTable"] #decodedoutput', (result) => {
console.log(result) console.log(result)
var equal = deepequal(JSON.parse(result.value), JSON.parse(expectedReturn)) var equal = deepequal(JSON.parse(result.value), JSON.parse(expectedReturn))
if (!equal) { if (!equal) {
...@@ -33,7 +33,7 @@ class TestFunction extends EventEmitter { ...@@ -33,7 +33,7 @@ class TestFunction extends EventEmitter {
}) })
.perform((client, done) => { .perform((client, done) => {
if (expectedEvent) { if (expectedEvent) {
client.getText('#editor-container div[class^="terminal"] span[id="tx' + txHash + '"] table[class^="txTable"] #logs', (result) => { client.getText('#main-panel div[class^="terminal"] span[id="tx' + txHash + '"] table[class^="txTable"] #logs', (result) => {
console.log(result) console.log(result)
var equal = deepequal(JSON.parse(result.value), JSON.parse(expectedEvent)) var equal = deepequal(JSON.parse(result.value), JSON.parse(expectedEvent))
if (!equal) { if (!equal) {
......
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