Socket
Socket
Sign inDemoInstall

svelte-typewriter

Package Overview
Dependencies
Maintainers
1
Versions
83
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

svelte-typewriter - npm Package Compare versions

Comparing version 1.5.4 to 1.5.5

6

CHANGELOG.md

@@ -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 @@

2

package.json

@@ -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))
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc