122 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
import { attrToProp, extend } from '../components-shared/utils.js';
 | 
						|
import { paramsList } from '../components-shared/params-list.js';
 | 
						|
import defaults from '../core/defaults.js';
 | 
						|
 | 
						|
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;
 | 
						|
  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: 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)) {
 | 
						|
        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 };
 |