UNPKG

@atlaskit/editor-plugin-placeholder

Version:

Placeholder plugin for @atlaskit/editor-core.

62 lines 3.35 kB
import { TYPEWRITER_CYCLE_DELAY, TYPEWRITER_ERASE_DELAY, TYPEWRITER_PAUSE_BEFORE_ERASE, TYPEWRITER_TYPE_DELAY } from './constants'; export var cycleThroughPlaceholderPrompts = function cycleThroughPlaceholderPrompts(placeholderPrompts, activeTypewriterTimeouts, placeholderNodeWithText) { var initialDelayWhenUserTypedAndDeleted = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; var options = arguments.length > 4 ? arguments[4] : undefined; var prefersReducedMotion = typeof window !== 'undefined' && typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches; if (prefersReducedMotion) { var _placeholderPrompts$; placeholderNodeWithText.textContent = (_placeholderPrompts$ = placeholderPrompts[0]) !== null && _placeholderPrompts$ !== void 0 ? _placeholderPrompts$ : ''; return; } var currentPromptIndex = 0; var displayedText = ''; var animationTimeouts = []; var clearAllTimeouts = function clearAllTimeouts() { animationTimeouts.forEach(function (timeoutId) { return clearTimeout(timeoutId); }); animationTimeouts = []; }; var scheduleTimeout = function scheduleTimeout(callback, delay) { var timeoutId = setTimeout(callback, delay); animationTimeouts.push(timeoutId); return timeoutId; }; var _startAnimationCycle = function startAnimationCycle() { var _options$eraseDelay, _options$pauseBeforeE; var currentPrompt = placeholderPrompts[currentPromptIndex]; var eraseDelay = (_options$eraseDelay = options === null || options === void 0 ? void 0 : options.eraseDelay) !== null && _options$eraseDelay !== void 0 ? _options$eraseDelay : TYPEWRITER_ERASE_DELAY; var pauseBeforeErase = (_options$pauseBeforeE = options === null || options === void 0 ? void 0 : options.pauseBeforeErase) !== null && _options$pauseBeforeE !== void 0 ? _options$pauseBeforeE : TYPEWRITER_PAUSE_BEFORE_ERASE; var characterIndex = 0; var _typeNextCharacter = function typeNextCharacter() { if (characterIndex < currentPrompt.length) { displayedText = currentPrompt.substring(0, characterIndex + 1); placeholderNodeWithText.textContent = displayedText; characterIndex++; scheduleTimeout(_typeNextCharacter, TYPEWRITER_TYPE_DELAY); } else { scheduleTimeout(_eraseLastCharacter, pauseBeforeErase); } }; var _eraseLastCharacter = function eraseLastCharacter() { if (displayedText.length > 1) { displayedText = displayedText.substring(0, displayedText.length - 1); placeholderNodeWithText.textContent = displayedText; scheduleTimeout(_eraseLastCharacter, eraseDelay); } else { displayedText = ' '; placeholderNodeWithText.textContent = displayedText; currentPromptIndex = (currentPromptIndex + 1) % placeholderPrompts.length; scheduleTimeout(_startAnimationCycle, TYPEWRITER_CYCLE_DELAY); } }; _typeNextCharacter(); }; activeTypewriterTimeouts === null || activeTypewriterTimeouts === void 0 || activeTypewriterTimeouts.push(clearAllTimeouts); if (initialDelayWhenUserTypedAndDeleted > 0) { placeholderNodeWithText.textContent = ' '; scheduleTimeout(_startAnimationCycle, initialDelayWhenUserTypedAndDeleted); } else { _startAnimationCycle(); } };