mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-04 05:28:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* eslint-env jasmine */
 | 
						|
/* global Split */
 | 
						|
/* eslint-disable no-var, func-names, prefer-arrow-callback, object-shorthand, prefer-template */
 | 
						|
 | 
						|
function calcParts(expr) {
 | 
						|
    var re = /calc\(([\d]*\.?[\d]*?)%\s?-\s?([\d]+)px\)/
 | 
						|
    var m = re.exec(expr)
 | 
						|
 | 
						|
    return {
 | 
						|
        percentage: parseFloat(m[1]),
 | 
						|
        pixels: parseInt(m[2], 10),
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
describe('Split', function() {
 | 
						|
    beforeEach(function() {
 | 
						|
        document.body.style.width = '800px'
 | 
						|
        document.body.style.height = '600px'
 | 
						|
 | 
						|
        this.a = document.createElement('div')
 | 
						|
        this.b = document.createElement('div')
 | 
						|
        this.c = document.createElement('div')
 | 
						|
 | 
						|
        this.a.id = 'a'
 | 
						|
        this.b.id = 'b'
 | 
						|
        this.c.id = 'c'
 | 
						|
 | 
						|
        document.body.appendChild(this.a)
 | 
						|
        document.body.appendChild(this.b)
 | 
						|
        document.body.appendChild(this.c)
 | 
						|
    })
 | 
						|
 | 
						|
    afterEach(function() {
 | 
						|
        document.body.removeChild(this.a)
 | 
						|
        document.body.removeChild(this.b)
 | 
						|
        document.body.removeChild(this.c)
 | 
						|
    })
 | 
						|
 | 
						|
    it('splits in two when given two elements', function() {
 | 
						|
        Split(['#a', '#b'])
 | 
						|
 | 
						|
        expect(this.a.style.width).toContain('calc(50% - 5px)')
 | 
						|
        expect(this.b.style.width).toContain('calc(50% - 5px)')
 | 
						|
    })
 | 
						|
 | 
						|
    it('splits in three when given three elements', function() {
 | 
						|
        Split(['#a', '#b', '#c'])
 | 
						|
 | 
						|
        expect(calcParts(this.a.style.width).percentage).toBeCloseTo(33.33)
 | 
						|
        expect(calcParts(this.b.style.width).percentage).toBeCloseTo(33.33)
 | 
						|
        expect(calcParts(this.c.style.width).percentage).toBeCloseTo(33.33)
 | 
						|
 | 
						|
        expect(calcParts(this.a.style.width).pixels).toBe(5)
 | 
						|
        expect(calcParts(this.b.style.width).pixels).toBe(10)
 | 
						|
        expect(calcParts(this.c.style.width).pixels).toBe(5)
 | 
						|
    })
 | 
						|
 | 
						|
    it('splits vertically when direction is vertical', function() {
 | 
						|
        Split(['#a', '#b'], {
 | 
						|
            direction: 'vertical',
 | 
						|
        })
 | 
						|
 | 
						|
        expect(this.a.style.height).toContain('calc(50% - 5px)')
 | 
						|
        expect(this.b.style.height).toContain('calc(50% - 5px)')
 | 
						|
    })
 | 
						|
 | 
						|
    it('splits in percentages when given sizes', function() {
 | 
						|
        Split(['#a', '#b'], {
 | 
						|
            sizes: [25, 75],
 | 
						|
        })
 | 
						|
 | 
						|
        expect(this.a.style.width).toContain('calc(25% - 5px)')
 | 
						|
        expect(this.b.style.width).toContain('calc(75% - 5px)')
 | 
						|
    })
 | 
						|
 | 
						|
    it('splits in percentages when given sizes', function() {
 | 
						|
        Split(['#a', '#b'], {
 | 
						|
            sizes: [25, 75],
 | 
						|
        })
 | 
						|
 | 
						|
        expect(this.a.style.width).toContain('calc(25% - 5px)')
 | 
						|
        expect(this.b.style.width).toContain('calc(75% - 5px)')
 | 
						|
    })
 | 
						|
 | 
						|
    it('accounts for gutter size', function() {
 | 
						|
        Split(['#a', '#b'], {
 | 
						|
            gutterSize: 20,
 | 
						|
        })
 | 
						|
 | 
						|
        expect(this.a.style.width).toContain('calc(50% - 10px)')
 | 
						|
        expect(this.b.style.width).toContain('calc(50% - 10px)')
 | 
						|
    })
 | 
						|
 | 
						|
    it('accounts for gutter size with more than two elements', function() {
 | 
						|
        Split(['#a', '#b', '#c'], {
 | 
						|
            gutterSize: 20,
 | 
						|
        })
 | 
						|
 | 
						|
        expect(calcParts(this.a.style.width).percentage).toBeCloseTo(33.33)
 | 
						|
        expect(calcParts(this.b.style.width).percentage).toBeCloseTo(33.33)
 | 
						|
        expect(calcParts(this.c.style.width).percentage).toBeCloseTo(33.33)
 | 
						|
 | 
						|
        expect(calcParts(this.a.style.width).pixels).toBe(10)
 | 
						|
        expect(calcParts(this.b.style.width).pixels).toBe(20)
 | 
						|
        expect(calcParts(this.c.style.width).pixels).toBe(10)
 | 
						|
    })
 | 
						|
 | 
						|
    it('accounts for gutter size when direction is vertical', function() {
 | 
						|
        Split(['#a', '#b'], {
 | 
						|
            direction: 'vertical',
 | 
						|
            gutterSize: 20,
 | 
						|
        })
 | 
						|
 | 
						|
        expect(this.a.style.height).toContain('calc(50% - 10px)')
 | 
						|
        expect(this.b.style.height).toContain('calc(50% - 10px)')
 | 
						|
    })
 | 
						|
 | 
						|
    it('accounts for gutter size with more than two elements when direction is vertical', function() {
 | 
						|
        Split(['#a', '#b', '#c'], {
 | 
						|
            direction: 'vertical',
 | 
						|
            gutterSize: 20,
 | 
						|
        })
 | 
						|
 | 
						|
        expect(calcParts(this.a.style.height).percentage).toBeCloseTo(33.33)
 | 
						|
        expect(calcParts(this.b.style.height).percentage).toBeCloseTo(33.33)
 | 
						|
        expect(calcParts(this.c.style.height).percentage).toBeCloseTo(33.33)
 | 
						|
 | 
						|
        expect(calcParts(this.a.style.height).pixels).toBe(10)
 | 
						|
        expect(calcParts(this.b.style.height).pixels).toBe(20)
 | 
						|
        expect(calcParts(this.c.style.height).pixels).toBe(10)
 | 
						|
    })
 | 
						|
 | 
						|
    it('set size directly when given css values', function() {
 | 
						|
        Split(['#a', '#b'], {
 | 
						|
            sizes: ['150px', '640px'],
 | 
						|
        })
 | 
						|
 | 
						|
        expect(this.a.style.width).toBe('150px')
 | 
						|
        expect(this.b.style.width).toBe('640px')
 | 
						|
    })
 | 
						|
 | 
						|
    it('adjusts sizes using setSizes', function() {
 | 
						|
        var split = Split(['#a', '#b'])
 | 
						|
 | 
						|
        split.setSizes([70, 30])
 | 
						|
 | 
						|
        expect(this.a.style.width).toContain('calc(70% - 5px)')
 | 
						|
        expect(this.b.style.width).toContain('calc(30% - 5px)')
 | 
						|
    })
 | 
						|
 | 
						|
    it('collapse splits', function() {
 | 
						|
        var split = Split(['#a', '#b'])
 | 
						|
 | 
						|
        split.collapse(0)
 | 
						|
 | 
						|
        expect(this.a.getBoundingClientRect().width).toBeCloseTo(100, 0)
 | 
						|
        expect(this.b.getBoundingClientRect().width).toBeCloseTo(800 - 100 - 10, 0)
 | 
						|
 | 
						|
        split.collapse(1)
 | 
						|
 | 
						|
        expect(this.a.getBoundingClientRect().width).toBeCloseTo(800 - 100 - 10, 0)
 | 
						|
        expect(this.b.getBoundingClientRect().width).toBeCloseTo(100, 0)
 | 
						|
    })
 | 
						|
 | 
						|
    it('returns sizes', function() {
 | 
						|
        var split = Split(['#a', '#b'])
 | 
						|
        var sizes = split.getSizes()
 | 
						|
 | 
						|
        expect(sizes).toEqual([50, 50])
 | 
						|
 | 
						|
        split.setSizes([70, 30])
 | 
						|
 | 
						|
        sizes = split.getSizes()
 | 
						|
 | 
						|
        expect(sizes).toEqual([70, 30])
 | 
						|
    })
 | 
						|
 | 
						|
    it('sets element styles using the elementStyle function', function() {
 | 
						|
        Split(['#a', '#b'], {
 | 
						|
            elementStyle: function(dimension, size) {
 | 
						|
                return {
 | 
						|
                    width: size + '%',
 | 
						|
                }
 | 
						|
            },
 | 
						|
        })
 | 
						|
 | 
						|
        expect(this.a.style.width).toBe('50%')
 | 
						|
        expect(this.b.style.width).toBe('50%')
 | 
						|
    })
 | 
						|
})
 |