get-params.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import { attrToProp, extend } from '../components-shared/utils.js';
  2. import { paramsList } from '../components-shared/params-list.js';
  3. import defaults from '../core/defaults.js';
  4. const formatValue = (val) => {
  5. if (parseFloat(val) === Number(val)) return Number(val);
  6. if (val === 'true') return true;
  7. if (val === '') return true;
  8. if (val === 'false') return false;
  9. if (val === 'null') return null;
  10. if (val === 'undefined') return undefined;
  11. return val;
  12. };
  13. const modulesParamsList = [
  14. 'a11y',
  15. 'autoplay',
  16. 'controller',
  17. 'cards-effect',
  18. 'coverflow-effect',
  19. 'creative-effect',
  20. 'cube-effect',
  21. 'fade-effect',
  22. 'flip-effect',
  23. 'free-mode',
  24. 'grid',
  25. 'hash-navigation',
  26. 'history',
  27. 'keyboard',
  28. 'mousewheel',
  29. 'navigation',
  30. 'pagination',
  31. 'parallax',
  32. 'scrollbar',
  33. 'thumbs',
  34. 'virtual',
  35. 'zoom',
  36. ];
  37. function getParams(element, propName, propValue) {
  38. const params = {};
  39. const passedParams = {};
  40. extend(params, defaults);
  41. const localParamsList = [...paramsList, 'on'];
  42. const allowedParams = localParamsList.map((key) => key.replace(/_/, ''));
  43. // First check props
  44. localParamsList.forEach((paramName) => {
  45. paramName = paramName.replace('_', '');
  46. if (typeof element[paramName] !== 'undefined') {
  47. passedParams[paramName] = element[paramName];
  48. }
  49. });
  50. // Attributes
  51. const attrsList = [...element.attributes];
  52. if (typeof propName === 'string' && typeof propValue !== 'undefined') {
  53. attrsList.push({ name: propName, value: propValue });
  54. }
  55. attrsList.forEach((attr) => {
  56. const moduleParam = modulesParamsList.filter(
  57. (mParam) => attr.name.indexOf(`${mParam}-`) === 0,
  58. )[0];
  59. if (moduleParam) {
  60. const parentObjName = attrToProp(moduleParam);
  61. const subObjName = attrToProp(attr.name.split(`${moduleParam}-`)[1]);
  62. if (typeof passedParams[parentObjName] === 'undefined') passedParams[parentObjName] = {};
  63. if (passedParams[parentObjName] === true) {
  64. passedParams[parentObjName] = { enabled: true };
  65. }
  66. passedParams[parentObjName][subObjName] = formatValue(attr.value);
  67. } else {
  68. const name = attrToProp(attr.name);
  69. if (!allowedParams.includes(name)) return;
  70. const value = formatValue(attr.value);
  71. if (passedParams[name] && modulesParamsList.includes(attr.name)) {
  72. if (passedParams[name].constructor !== Object) {
  73. passedParams[name] = {};
  74. }
  75. passedParams[name].enabled = value;
  76. } else {
  77. passedParams[name] = value;
  78. }
  79. }
  80. });
  81. extend(params, passedParams);
  82. if (params.navigation) {
  83. params.navigation = {
  84. prevEl: '.swiper-button-prev',
  85. nextEl: '.swiper-button-next',
  86. ...(params.navigation !== true ? params.navigation : {}),
  87. };
  88. } else if (params.navigation === false) {
  89. delete params.navigation;
  90. }
  91. if (params.scrollbar) {
  92. params.scrollbar = {
  93. el: '.swiper-scrollbar',
  94. ...(params.scrollbar !== true ? params.scrollbar : {}),
  95. };
  96. } else if (params.scrollbar === false) {
  97. delete params.scrollbar;
  98. }
  99. if (params.pagination) {
  100. params.pagination = {
  101. el: '.swiper-pagination',
  102. ...(params.pagination !== true ? params.pagination : {}),
  103. };
  104. } else if (params.pagination === false) {
  105. delete params.pagination;
  106. }
  107. return { params, passedParams };
  108. }
  109. export { getParams };