summaryrefslogtreecommitdiff
path: root/templates/assets/bootstrap-material-design/js/util.js
blob: 3cd2e77ee5a597183b9735e986cdf30bec3510e3 (plain)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
const Util = (() => {

  /**
   * ------------------------------------------------------------------------
   * Private TransitionEnd Helpers
   * ------------------------------------------------------------------------
   */

  let transitionEnd = false
  let transitionEndSelector = ''

  const TransitionEndEvent = {
    WebkitTransition: 'webkitTransitionEnd',
    MozTransition: 'transitionend',
    OTransition: 'oTransitionEnd otransitionend',
    transition: 'transitionend'
  }

  function transitionEndTest() {
    if (window.QUnit) {
      return false
    }

    let el = document.createElement('bmd')

    for (let name in TransitionEndEvent) {
      if (el.style[name] !== undefined) {
        return TransitionEndEvent[name] // { end: TransitionEndEvent[name] }
      }
    }

    return false
  }

  function setTransitionEndSupport() {
    transitionEnd = transitionEndTest()

    // generate a concatenated transition end event selector
    for (let name in TransitionEndEvent) {
      transitionEndSelector += ` ${TransitionEndEvent[name]}`
    }
  }

  /**
   * --------------------------------------------------------------------------
   * Public Util Api
   * --------------------------------------------------------------------------
   */

  let Util = {

    transitionEndSupported() {
      return transitionEnd
    },

    transitionEndSelector()  {
      return transitionEndSelector
    },

    isChar(event) {
      if (typeof event.which === 'undefined') {
        return true
      } else if (typeof event.which === 'number' && event.which > 0) {
        return (
          !event.ctrlKey
          && !event.metaKey
          && !event.altKey
          && event.which !== 8  // backspace
          && event.which !== 9  // tab
          && event.which !== 13 // enter
          && event.which !== 16 // shift
          && event.which !== 17 // ctrl
          && event.which !== 20 // caps lock
          && event.which !== 27 // escape
        )
      }
      return false
    },

    assert($element, invalidTest, message) {
      if (invalidTest) {
        if (!$element === undefined) {
          $element.css('border', '1px solid red')
        }
        console.error(message, $element) // eslint-disable-line no-console
        throw message
      }
    },

    describe($element) {
      if ($element === undefined) {
        return 'undefined'
      } else if ($element.length === 0) {
        return '(no matching elements)'
      }
      return `${$element[0].outerHTML.split('>')[0]}>`
    }
  }

  setTransitionEndSupport()
  return Util

})(jQuery)

export default Util