2015-03-23 14:47:05 +03:00
|
|
|
PaneContainer = require '../src/pane-container'
|
2015-04-14 16:10:05 +03:00
|
|
|
PaneAxisElement = require '../src/pane-axis-element'
|
|
|
|
PaneAxis = require '../src/pane-axis'
|
2015-03-23 14:47:05 +03:00
|
|
|
|
2015-04-14 16:31:59 +03:00
|
|
|
describe "PaneResizeHandleElement", ->
|
2015-04-15 17:20:17 +03:00
|
|
|
describe "when panes are added or removed in PaneAxisElement", ->
|
2015-04-14 16:10:05 +03:00
|
|
|
[paneAxisElement, paneAxis] = []
|
|
|
|
|
|
|
|
beforeEach ->
|
|
|
|
paneAxisElement = document.createElement('atom-pane-axis')
|
|
|
|
paneAxis = new PaneAxis({})
|
|
|
|
paneAxisElement.initialize(paneAxis)
|
|
|
|
document.querySelector('#jasmine-content').appendChild(paneAxisElement)
|
|
|
|
|
2015-04-15 17:20:17 +03:00
|
|
|
it "inserts or removes resize elements", ->
|
2015-04-14 16:10:05 +03:00
|
|
|
expectPaneAxisElement = (index) ->
|
|
|
|
child = paneAxisElement.children[index]
|
|
|
|
expect(child.nodeName.toLowerCase()).toBe('atom-pane-axis')
|
|
|
|
|
|
|
|
expectResizeElement = (index) ->
|
|
|
|
child = paneAxisElement.children[index]
|
|
|
|
expect(paneAxisElement.isPaneResizeHandleElement(child)).toBe(true)
|
|
|
|
|
2015-04-14 19:23:48 +03:00
|
|
|
models = (new PaneAxis({}) for i in [0..2])
|
|
|
|
paneAxis.addChild(models[0])
|
|
|
|
paneAxis.addChild(models[1])
|
|
|
|
expectResizeElement(1)
|
2015-04-14 16:10:05 +03:00
|
|
|
|
2015-04-14 19:23:48 +03:00
|
|
|
paneAxis.addChild(models[2])
|
|
|
|
expectPaneAxisElement(i) for i in [0, 2, 4]
|
2015-04-14 16:10:05 +03:00
|
|
|
expectResizeElement(i) for i in [1, 3]
|
|
|
|
|
2015-04-14 19:23:48 +03:00
|
|
|
# test removeChild
|
|
|
|
paneAxis.removeChild(models[2])
|
2015-04-15 04:32:51 +03:00
|
|
|
expectResizeElement(i) for i in [1]
|
2015-04-14 16:10:05 +03:00
|
|
|
|
2015-04-15 17:20:17 +03:00
|
|
|
describe "when the resize element is dragged ", ->
|
2015-04-14 19:23:48 +03:00
|
|
|
[container, containerElement] = []
|
2015-04-15 04:32:51 +03:00
|
|
|
[resizeElementMove, getElementWidth, expectPaneScale] = []
|
2015-03-23 14:47:05 +03:00
|
|
|
|
|
|
|
beforeEach ->
|
|
|
|
container = new PaneContainer
|
2015-04-16 00:04:10 +03:00
|
|
|
containerElement = atom.views.getView(container)
|
2015-03-23 14:47:05 +03:00
|
|
|
document.querySelector('#jasmine-content').appendChild(containerElement)
|
|
|
|
|
|
|
|
resizeElementMove = (resizeElement, clientX, clientY) ->
|
|
|
|
mouseDownEvent = new MouseEvent 'mousedown',
|
|
|
|
{ view: window, bubbles: true, button: 0 }
|
|
|
|
resizeElement.dispatchEvent(mouseDownEvent)
|
|
|
|
|
|
|
|
mouseMoveEvent = new MouseEvent 'mousemove',
|
|
|
|
{ view: window, bubbles: true, clientX: clientX, clientY: clientY}
|
|
|
|
resizeElement.dispatchEvent(mouseMoveEvent)
|
|
|
|
|
|
|
|
mouseUpEvent = new MouseEvent 'mouseup',
|
|
|
|
{view: window, bubbles: true, button: 0}
|
|
|
|
resizeElement.dispatchEvent(mouseUpEvent)
|
|
|
|
|
|
|
|
getElementWidth = (element) ->
|
|
|
|
element.getBoundingClientRect().width
|
|
|
|
|
2015-04-14 19:23:48 +03:00
|
|
|
# assert the pane's flex scale. arguments is list of pane-scale pair
|
2015-04-15 04:32:51 +03:00
|
|
|
expectPaneScale = ->
|
|
|
|
args = Array::slice.call(arguments, 0)
|
2015-04-14 19:23:48 +03:00
|
|
|
for paneScale in args
|
|
|
|
expect(paneScale[0].getFlexScale()).toBeCloseTo(paneScale[1], 0.1)
|
2015-03-23 14:47:05 +03:00
|
|
|
|
2015-04-15 17:20:17 +03:00
|
|
|
it "adds and removes panes in the direction that the pane is being dragged", ->
|
2015-03-23 14:47:05 +03:00
|
|
|
leftPane = container.getActivePane()
|
|
|
|
middlePane = leftPane.splitRight()
|
|
|
|
|
2015-04-15 04:32:51 +03:00
|
|
|
[resizeElements, paneElements] = []
|
|
|
|
reloadElements = ->
|
|
|
|
resizeElements = containerElement.querySelectorAll('atom-pane-resize-handle')
|
|
|
|
paneElements = containerElement.querySelectorAll('atom-pane')
|
|
|
|
reloadElements()
|
|
|
|
expect(resizeElements.length).toBe(1)
|
2015-03-23 14:47:05 +03:00
|
|
|
|
|
|
|
resizeElementMove(resizeElements[0], getElementWidth(paneElements[0]) / 2)
|
2015-04-14 19:23:48 +03:00
|
|
|
expectPaneScale [leftPane, 0.5], [middlePane, 1.5]
|
2015-03-23 14:47:05 +03:00
|
|
|
|
2015-04-15 04:32:51 +03:00
|
|
|
# add a new pane
|
2015-04-14 19:23:48 +03:00
|
|
|
rightPane = middlePane.splitRight()
|
2015-04-15 04:32:51 +03:00
|
|
|
reloadElements()
|
2015-03-23 14:47:05 +03:00
|
|
|
clientX = getElementWidth(paneElements[0]) + getElementWidth(paneElements[1]) / 2
|
|
|
|
resizeElementMove(resizeElements[1], clientX)
|
2015-04-14 19:23:48 +03:00
|
|
|
expectPaneScale [leftPane, 0.5], [middlePane, 0.75], [rightPane, 1.75]
|
2015-03-23 14:47:05 +03:00
|
|
|
|
2015-04-14 19:23:48 +03:00
|
|
|
middlePane.close()
|
|
|
|
expectPaneScale [leftPane, 0.44], [rightPane, 1.55]
|
2015-03-23 15:47:20 +03:00
|
|
|
|
|
|
|
leftPane.close()
|
2015-04-14 19:23:48 +03:00
|
|
|
expectPaneScale [rightPane, 1]
|
2015-03-23 15:47:20 +03:00
|
|
|
|
2015-04-15 17:20:17 +03:00
|
|
|
it "splits or closes panes in orthogonal direction that the pane is being dragged", ->
|
2015-03-23 15:47:20 +03:00
|
|
|
leftPane = container.getActivePane()
|
|
|
|
rightPane = leftPane.splitRight()
|
|
|
|
|
|
|
|
resizeElement = containerElement.querySelector('atom-pane-resize-handle')
|
|
|
|
resizeElementMove(resizeElement, getElementWidth(resizeElement.previousSibling) / 2)
|
|
|
|
|
2015-04-14 19:23:48 +03:00
|
|
|
# dynamically split pane, pane's flexScale will become to 1
|
|
|
|
lowerPane = leftPane.splitDown()
|
|
|
|
expectPaneScale [lowerPane, 1], [leftPane, 1], [leftPane.getParent(), 0.5]
|
2015-03-23 15:47:20 +03:00
|
|
|
|
2015-04-14 19:23:48 +03:00
|
|
|
# dynamically close pane, the pane's flexscale will recorver to origin value
|
|
|
|
lowerPane.close()
|
|
|
|
expectPaneScale [leftPane, 0.5], [rightPane, 1.5]
|