-
Notifications
You must be signed in to change notification settings - Fork 257
/
Copy pathdiff-ui.js
61 lines (49 loc) · 1.47 KB
/
diff-ui.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var findup = require('findup-element')
var mpos = require('mouse-position')
var css = require('insert-css')
var domify = require('domify')
var slice = require('sliced')
var clamp = require('clamp')
var fs = require('fs')
module.exports = DiffUI
function DiffUI(compare) {
if (!(this instanceof DiffUI)) return new DiffUI(compare)
var el = this.el = document.body.appendChild(
domify(fs.readFileSync(
__dirname + '/diff-ui.html', 'utf8'
))
)
var buttons = slice(el.querySelectorAll('ul > li'))
var slider = el.querySelector('.diff-slider-inner')
var outerSlider = el.querySelector('.diff-slider')
var mouse = mpos(slider, window)
var sliding = false
mouse.on('move', function() {
if (!sliding) return
var slide = clamp(mouse.x / 300, 0, 1)
compare.amount = slide
slider.style.width = slide * 100 + '%'
})
outerSlider.addEventListener('mousedown', function(e) {
sliding = true
}, false)
window.addEventListener('mouseup', function(e) {
sliding = false
}, false)
el.addEventListener('click', function(e) {
var button = findup(e.target, 'li')
if (!button) return
var mode = button.getAttribute('data-mode')
if (mode) return select(mode)
}, false)
select('slide')
function select(mode) {
compare.mode = mode
buttons.forEach(function(button) {
button.classList.remove('selected')
})
el.querySelector('[data-mode="'+mode+'"]')
.classList
.add('selected')
}
}