1 | var tap = require('tap-event')
|
2 | var domify = require('domify')
|
3 | var template = require('./template.html')
|
4 | var classes = require('classes')
|
5 | var event = require('event')
|
6 | var detect = require('prop-detect')
|
7 | var transitionEnd = detect.transitionend
|
8 |
|
9 | document.addEventListener('touchstart', function(){}, true)
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | module.exports = function (option) {
|
21 | var el = domify(template)
|
22 | var body = el.querySelector('.actionsheet-body')
|
23 | Object.keys(option).forEach(function (key) {
|
24 | if (key == 'cancel') return
|
25 | var o = option[key]
|
26 | body.appendChild(domify('<div class="actionsheet-item" data-action="' + key + '">' + o.text + '</div>'))
|
27 | })
|
28 | if (option.cancel) {
|
29 | var text = option.cancel.text || 'cancel'
|
30 | body.parentNode.appendChild(domify('<div class="actionsheet-foot"><div class="actionsheet-item cancel">' + text + '</div></div>'))
|
31 | }
|
32 | document.body.appendChild(el)
|
33 |
|
34 | var ontap = tap(function (e) {
|
35 | var target = e.target
|
36 | cleanUp()
|
37 | if (target.hasAttribute('data-action')){
|
38 | var action = target.dataset.action
|
39 | var cb = option[action].callback
|
40 | if (cb) cb.call(null)
|
41 | }
|
42 | })
|
43 | event.bind(el, 'touchstart', ontap)
|
44 | function end() {
|
45 | event.unbind(el, transitionEnd, end)
|
46 | if (el.parentNode) el.parentNode.removeChild(el)
|
47 | }
|
48 | function cleanUp() {
|
49 | event.unbind(el, 'touchstart', ontap)
|
50 | event.bind(el, transitionEnd, end)
|
51 | classes(el).remove('active')
|
52 | }
|
53 | return new Promise(function (resolve) {
|
54 | setTimeout(function () {
|
55 | classes(el).add('active')
|
56 | resolve()
|
57 | }, 20)
|
58 | })
|
59 | }
|