svelte-typewriter
Advanced tools
Comparing version 1.5.4 to 1.5.5
@@ -7,2 +7,8 @@ ### Changelog | ||
#### [v1.5.4](https://github.com/henriquehbr/svelte-typewriter/compare/v1.5.3...v1.5.4) | ||
> 14 December 2019 | ||
- fix: resolve `use` directive not working on single text node elements [`5722811`](https://github.com/henriquehbr/svelte-typewriter/commit/572281123b1c2f6066d877d2c07e992fba19dd1e) | ||
#### [v1.5.3](https://github.com/henriquehbr/svelte-typewriter/compare/v1.5.2...v1.5.3) | ||
@@ -9,0 +15,0 @@ |
@@ -12,3 +12,3 @@ { | ||
}, | ||
"version": "1.5.4", | ||
"version": "1.5.5", | ||
"main": "Typewriter.svelte", | ||
@@ -15,0 +15,0 @@ "author": "Henrique Borges <henriqueborgeshbr@gmail.com>", |
export default async (node, { loop = false, cascade = false, interval = 30 } = {}) => { | ||
if (cascade && loop) throw new Error('`cascade` mode should not be used with `loop`!') | ||
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)) | ||
const hasSingleTextNode = el => el.childNodes.length === 1 && el.childNodes[0].nodeType === 3 | ||
const rng = (min, max) => Math.floor(Math.random() * (max - min) + min) | ||
const typingInterval = async () => | ||
@@ -12,5 +13,4 @@ Array.isArray(interval) ? await sleep(interval[rng(0, interval.length)]) : await sleep(interval) | ||
el.textContent += letter | ||
// Erase text if it's fully written | ||
if (loopAnimation && el.textContent === elText.join('')) { | ||
typeof loop == 'number' ? await sleep(loop) : await sleep(1500) | ||
typeof loop === 'number' ? await sleep(loop) : await sleep(1500) | ||
while (el.textContent !== '') { | ||
@@ -26,18 +26,7 @@ el.textContent = el.textContent.slice(0, -1) | ||
const typewriterMode = | ||
cascade && !loop ? 'cascade' : | ||
loop && !cascade ? 'loop' : | ||
!cascade && !loop && hasSingleTextNode(node) ? 'singleDefault' : | ||
!cascade && !loop ? 'childrenDefault' : '' | ||
const elements = [...node.children] | ||
.map(el => (loop ? el.textContent.split('') : { el, text: el.textContent.split('') } )) | ||
const elements = | ||
typewriterMode === 'cascade' || typewriterMode === 'childrenDefault' | ||
? [...node.children].map(el => ({ el, text: el.textContent.split('') })) : | ||
typewriterMode === 'singleDefault' | ||
? node.textContent.split('') : | ||
typewriterMode === 'loop' ? | ||
[...node.children].map(el => el.textContent.split('')) : '' | ||
switch (typewriterMode) { | ||
case 'cascade': | ||
switch (true) { | ||
case cascade: | ||
elements.forEach(({ el }) => (el.textContent = '')) | ||
@@ -49,6 +38,6 @@ for (const { el, text } of elements) { | ||
break | ||
case 'loop': | ||
case loop: | ||
const loopParagraphTag = node.firstChild.tagName.toLowerCase() | ||
const loopParagraph = document.createElement(loopParagraphTag) | ||
node.querySelectorAll('*').forEach(el => el.remove()) | ||
node.childNodes.forEach(el => el.remove()) | ||
node.appendChild(loopParagraph) | ||
@@ -61,13 +50,6 @@ while (true) { | ||
} | ||
case 'singleDefault': | ||
typewriterEffect(node) | ||
break | ||
case 'childrenDefault': | ||
for (const { el, text } of elements) { | ||
el.textContent = text.join('') | ||
typewriterEffect(el) | ||
} | ||
break | ||
default: throw new Error('`cascade` mode should not be used with `loop`!') | ||
default: | ||
const hasSingleTextNode = el => el.childNodes.length === 1 && el.childNodes[0].nodeType === 3 | ||
hasSingleTextNode(node) ? typewriterEffect(node) : elements.forEach(({ el }) => typewriterEffect(el)) | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
12514
48