@atlaskit/editor-plugin-placeholder
Version:
Placeholder plugin for @atlaskit/editor-core.
52 lines • 2.42 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 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 currentPrompt = placeholderPrompts[currentPromptIndex];
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, TYPEWRITER_PAUSE_BEFORE_ERASE);
}
};
var _eraseLastCharacter = function eraseLastCharacter() {
if (displayedText.length > 1) {
displayedText = displayedText.substring(0, displayedText.length - 1);
placeholderNodeWithText.textContent = displayedText;
scheduleTimeout(_eraseLastCharacter, TYPEWRITER_ERASE_DELAY);
} 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();
}
};