@atlaskit/editor-plugin-placeholder
Version:
Placeholder plugin for @atlaskit/editor-core.
62 lines • 3.35 kB
JavaScript
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();
}
};