UNPKG

ripplet.js

Version:

Fully controllable vanilla-js material design ripple effect generator

47 lines (46 loc) 1.72 kB
import ripplet from './ripplet'; export default ripplet; export * from './ripplet'; // Element.prototype.closest is not implemented in IE // https://caniuse.com/#feat=element-closest var findRippletTarget = function (element) { while (element && !element.hasAttribute('data-ripplet')) { element = element.parentElement; } return element; }; var parseOptions = function (optionsString) { var options = {}; if (optionsString) { for (var _i = 0, _a = optionsString.split(';'); _i < _a.length; _i++) { var s = _a[_i]; var index = s.indexOf(':'); options[s .slice(0, index) .trim() .replace(/[a-zA-Z0-9_]-[a-z]/g, function ($0) { return $0[0] + $0[2].toUpperCase(); })] = s.slice(index + 1).trim(); } } return options; }; addEventListener('pointerdown', function (event) { if (event.button !== 0) { return; } var currentTarget = findRippletTarget(event.target); if (!currentTarget) { return; } var options = parseOptions(currentTarget.getAttribute('data-ripplet')); if (options.clearing !== 'false') { options.clearing = 'false'; var clear_1 = function () { ripplet.clear(currentTarget, container); currentTarget.removeEventListener('pointerup', clear_1); currentTarget.removeEventListener('pointerleave', clear_1); }; currentTarget.addEventListener('pointerup', clear_1); currentTarget.addEventListener('pointerleave', clear_1); } var container = ripplet({ currentTarget: currentTarget, clientX: event.clientX, clientY: event.clientY }, options); }, true);