Blame view

node_modules/swiper/shared/get-element-params.mjs 3.51 KB
7820380e   “wangming”   1
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
106
  import { e as extend, i as isObject, c as attrToProp, p as paramsList } from './update-swiper.mjs';
  import { d as defaults } from './swiper-core.mjs';
  
  const formatValue = val => {
    if (parseFloat(val) === Number(val)) return Number(val);
    if (val === 'true') return true;
    if (val === '') return true;
    if (val === 'false') return false;
    if (val === 'null') return null;
    if (val === 'undefined') return undefined;
    if (typeof val === 'string' && val.includes('{') && val.includes('}') && val.includes('"')) {
      let v;
      try {
        v = JSON.parse(val);
      } catch (err) {
        v = val;
      }
      return v;
    }
    return val;
  };
  const modulesParamsList = ['a11y', 'autoplay', 'controller', 'cards-effect', 'coverflow-effect', 'creative-effect', 'cube-effect', 'fade-effect', 'flip-effect', 'free-mode', 'grid', 'hash-navigation', 'history', 'keyboard', 'mousewheel', 'navigation', 'pagination', 'parallax', 'scrollbar', 'thumbs', 'virtual', 'zoom'];
  function getParams(element, propName, propValue) {
    const params = {};
    const passedParams = {};
    extend(params, defaults);
    const localParamsList = [...paramsList, 'on'];
    const allowedParams = localParamsList.map(key => key.replace(/_/, ''));
  
    // First check props
    localParamsList.forEach(paramName => {
      paramName = paramName.replace('_', '');
      if (typeof element[paramName] !== 'undefined') {
        passedParams[paramName] = element[paramName];
      }
    });
  
    // Attributes
    const attrsList = [...element.attributes];
    if (typeof propName === 'string' && typeof propValue !== 'undefined') {
      attrsList.push({
        name: propName,
        value: isObject(propValue) ? {
          ...propValue
        } : propValue
      });
    }
    attrsList.forEach(attr => {
      const moduleParam = modulesParamsList.filter(mParam => attr.name.indexOf(`${mParam}-`) === 0)[0];
      if (moduleParam) {
        const parentObjName = attrToProp(moduleParam);
        const subObjName = attrToProp(attr.name.split(`${moduleParam}-`)[1]);
        if (typeof passedParams[parentObjName] === 'undefined') passedParams[parentObjName] = {};
        if (passedParams[parentObjName] === true) {
          passedParams[parentObjName] = {
            enabled: true
          };
        }
        passedParams[parentObjName][subObjName] = formatValue(attr.value);
      } else {
        const name = attrToProp(attr.name);
        if (!allowedParams.includes(name)) return;
        const value = formatValue(attr.value);
        if (passedParams[name] && modulesParamsList.includes(attr.name) && !isObject(value)) {
          if (passedParams[name].constructor !== Object) {
            passedParams[name] = {};
          }
          passedParams[name].enabled = !!value;
        } else {
          passedParams[name] = value;
        }
      }
    });
    extend(params, passedParams);
    if (params.navigation) {
      params.navigation = {
        prevEl: '.swiper-button-prev',
        nextEl: '.swiper-button-next',
        ...(params.navigation !== true ? params.navigation : {})
      };
    } else if (params.navigation === false) {
      delete params.navigation;
    }
    if (params.scrollbar) {
      params.scrollbar = {
        el: '.swiper-scrollbar',
        ...(params.scrollbar !== true ? params.scrollbar : {})
      };
    } else if (params.scrollbar === false) {
      delete params.scrollbar;
    }
    if (params.pagination) {
      params.pagination = {
        el: '.swiper-pagination',
        ...(params.pagination !== true ? params.pagination : {})
      };
    } else if (params.pagination === false) {
      delete params.pagination;
    }
    return {
      params,
      passedParams
    };
  }
  
  export { getParams as g };