summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/droplab/utils.js
blob: 5272778ce2dafdbe8b9c3e368fd0794fe51792a3 (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
/* eslint-disable */

import { template as _template } from 'underscore';
import { DATA_TRIGGER, DATA_DROPDOWN, TEMPLATE_REGEX } from './constants';

const utils = {
  toCamelCase(attr) {
    return this.camelize(
      attr
        .split('-')
        .slice(1)
        .join(' '),
    );
  },

  template(templateString, data) {
    const template = _template(templateString, {
      escape: TEMPLATE_REGEX,
    });

    return template(data);
  },

  camelize(str) {
    return str
      .replace(/(?:^\w|[A-Z]|\b\w)/g, (letter, index) => {
        return index === 0 ? letter.toLowerCase() : letter.toUpperCase();
      })
      .replace(/\s+/g, '');
  },

  closest(thisTag, stopTag) {
    while (thisTag && thisTag.tagName !== stopTag && thisTag.tagName !== 'HTML') {
      thisTag = thisTag.parentNode;
    }
    return thisTag;
  },

  isDropDownParts(target) {
    if (!target || !target.hasAttribute || target.tagName === 'HTML') return false;
    return target.hasAttribute(DATA_TRIGGER) || target.hasAttribute(DATA_DROPDOWN);
  },
};

export default utils;