UNPKG

1.72 kBJavaScriptView Raw
1var tap = require('tap-event')
2var domify = require('domify')
3var template = require('./template.html')
4var classes = require('classes')
5var event = require('event')
6var detect = require('prop-detect')
7var transitionEnd = detect.transitionend
8
9document.addEventListener('touchstart', function(){}, true)
10
11/**
12 * create action sheet
13 * option contains key for actions.
14 * action should contain text and callback
15 *
16 * @public
17 * @param {Object} option
18 * @returns {Promise}
19 */
20module.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}