title-switcher 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +169 -0
- package/browser/titleSwitcher.js +5456 -0
- package/browser/titleSwitcher.min.js +1 -0
- package/dist/main.js +449 -0
- package/dist/main.min.js +1 -0
- package/package.json +43 -0
package/dist/main.js
ADDED
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
// Created by Joshua Heagle
|
|
4
|
+
|
|
5
|
+
/*********************************************
|
|
6
|
+
Title Switcher: to imitate typing and switch to different titles based on DOM.
|
|
7
|
+
Requires titles to be listed as elements inside a div, pass the class of the div as an argument to TitleSwitcher.
|
|
8
|
+
**********************************************/
|
|
9
|
+
require('core-js/modules/es.symbol.to-primitive.js')
|
|
10
|
+
require('core-js/modules/es.date.to-primitive.js')
|
|
11
|
+
require('core-js/modules/es.symbol.js')
|
|
12
|
+
require('core-js/modules/es.symbol.description.js')
|
|
13
|
+
require('core-js/modules/es.number.constructor.js')
|
|
14
|
+
require('core-js/modules/es.object.define-property.js')
|
|
15
|
+
require('core-js/modules/es.symbol.iterator.js')
|
|
16
|
+
function _typeof (o) { '@babel/helpers - typeof'; return _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (o) { return typeof o } : function (o) { return o && typeof Symbol === 'function' && o.constructor === Symbol && o !== Symbol.prototype ? 'symbol' : typeof o }, _typeof(o) }
|
|
17
|
+
Object.defineProperty(exports, '__esModule', {
|
|
18
|
+
value: true
|
|
19
|
+
})
|
|
20
|
+
exports.default = void 0
|
|
21
|
+
require('core-js/modules/es.regexp.exec.js')
|
|
22
|
+
require('core-js/modules/es.string.replace.js')
|
|
23
|
+
require('core-js/modules/es.regexp.constructor.js')
|
|
24
|
+
require('core-js/modules/es.regexp.sticky.js')
|
|
25
|
+
require('core-js/modules/es.regexp.to-string.js')
|
|
26
|
+
require('core-js/modules/es.array.join.js')
|
|
27
|
+
require('core-js/modules/es.array.for-each.js')
|
|
28
|
+
require('core-js/modules/es.object.to-string.js')
|
|
29
|
+
require('core-js/modules/es.string.trim.js')
|
|
30
|
+
require('core-js/modules/web.timers.js')
|
|
31
|
+
require('core-js/modules/esnext.async-iterator.for-each.js')
|
|
32
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
33
|
+
require('core-js/modules/esnext.iterator.for-each.js')
|
|
34
|
+
require('core-js/modules/web.dom-collections.for-each.js')
|
|
35
|
+
require('core-js/modules/es.array.iterator.js')
|
|
36
|
+
require('core-js/modules/es.string.iterator.js')
|
|
37
|
+
require('core-js/modules/es.weak-map.js')
|
|
38
|
+
require('core-js/modules/esnext.weak-map.delete-all.js')
|
|
39
|
+
require('core-js/modules/web.dom-collections.iterator.js')
|
|
40
|
+
var _this = void 0
|
|
41
|
+
function _classCallCheck (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function') } }
|
|
42
|
+
function _defineProperties (target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor) } }
|
|
43
|
+
function _createClass (Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, 'prototype', { writable: false }); return Constructor }
|
|
44
|
+
function _toPropertyKey (arg) { var key = _toPrimitive(arg, 'string'); return _typeof(key) === 'symbol' ? key : String(key) }
|
|
45
|
+
function _toPrimitive (input, hint) { if (_typeof(input) !== 'object' || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || 'default'); if (_typeof(res) !== 'object') return res; throw new TypeError('@@toPrimitive must return a primitive value.') } return (hint === 'string' ? String : Number)(input) }
|
|
46
|
+
function _classPrivateFieldInitSpec (obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value) }
|
|
47
|
+
function _checkPrivateRedeclaration (obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError('Cannot initialize the same private elements twice on an object') } }
|
|
48
|
+
function _classPrivateFieldGet (receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, 'get'); return _classApplyDescriptorGet(receiver, descriptor) }
|
|
49
|
+
function _classApplyDescriptorGet (receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver) } return descriptor.value }
|
|
50
|
+
function _classPrivateFieldSet (receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, 'set'); _classApplyDescriptorSet(receiver, descriptor, value); return value }
|
|
51
|
+
function _classExtractFieldDescriptor (receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError('attempted to ' + action + ' private field on non-instance') } return privateMap.get(receiver) }
|
|
52
|
+
function _classApplyDescriptorSet (receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value) } else { if (!descriptor.writable) { throw new TypeError('attempted to set read only private field') } descriptor.value = value } }
|
|
53
|
+
var _active = /* #__PURE__ */new WeakMap()
|
|
54
|
+
var _currentClass = /* #__PURE__ */new WeakMap()
|
|
55
|
+
var _currentIndex = /* #__PURE__ */new WeakMap()
|
|
56
|
+
var _delayEffect = /* #__PURE__ */new WeakMap()
|
|
57
|
+
var _delaySwitch = /* #__PURE__ */new WeakMap()
|
|
58
|
+
var _isRandom = /* #__PURE__ */new WeakMap()
|
|
59
|
+
var _switchStyle = /* #__PURE__ */new WeakMap()
|
|
60
|
+
var _titles = /* #__PURE__ */new WeakMap()
|
|
61
|
+
var _titlesContainer = /* #__PURE__ */new WeakMap()
|
|
62
|
+
var _typeSurface = /* #__PURE__ */new WeakMap()
|
|
63
|
+
var TitleSwitcher = /* #__PURE__ */(function () {
|
|
64
|
+
/**
|
|
65
|
+
* Instantiate this as a class to get an instance of TitleSwitcher
|
|
66
|
+
* @param {string} [titlesContainer=''] - The selector where titles are stored
|
|
67
|
+
* @param {Function|string} [switchStyle='typingEffect'] - The function or function name for the effect to apply
|
|
68
|
+
* @constructor
|
|
69
|
+
*/
|
|
70
|
+
function TitleSwitcher () {
|
|
71
|
+
var titlesContainer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''
|
|
72
|
+
var switchStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'typingEffect'
|
|
73
|
+
_classCallCheck(this, TitleSwitcher)
|
|
74
|
+
_classPrivateFieldInitSpec(this, _active, {
|
|
75
|
+
writable: true,
|
|
76
|
+
value: false
|
|
77
|
+
})
|
|
78
|
+
_classPrivateFieldInitSpec(this, _currentClass, {
|
|
79
|
+
writable: true,
|
|
80
|
+
value: 'displayTitle'
|
|
81
|
+
})
|
|
82
|
+
_classPrivateFieldInitSpec(this, _currentIndex, {
|
|
83
|
+
writable: true,
|
|
84
|
+
value: 0
|
|
85
|
+
})
|
|
86
|
+
_classPrivateFieldInitSpec(this, _delayEffect, {
|
|
87
|
+
writable: true,
|
|
88
|
+
value: 200
|
|
89
|
+
})
|
|
90
|
+
_classPrivateFieldInitSpec(this, _delaySwitch, {
|
|
91
|
+
writable: true,
|
|
92
|
+
value: 400
|
|
93
|
+
})
|
|
94
|
+
_classPrivateFieldInitSpec(this, _isRandom, {
|
|
95
|
+
writable: true,
|
|
96
|
+
value: false
|
|
97
|
+
})
|
|
98
|
+
_classPrivateFieldInitSpec(this, _switchStyle, {
|
|
99
|
+
writable: true,
|
|
100
|
+
value: 'typingEffect'
|
|
101
|
+
})
|
|
102
|
+
_classPrivateFieldInitSpec(this, _titles, {
|
|
103
|
+
writable: true,
|
|
104
|
+
value: []
|
|
105
|
+
})
|
|
106
|
+
_classPrivateFieldInitSpec(this, _titlesContainer, {
|
|
107
|
+
writable: true,
|
|
108
|
+
value: null
|
|
109
|
+
})
|
|
110
|
+
_classPrivateFieldInitSpec(this, _typeSurface, {
|
|
111
|
+
writable: true,
|
|
112
|
+
value: void 0
|
|
113
|
+
})
|
|
114
|
+
_classPrivateFieldSet(this, _currentClass, 'displayTitle')
|
|
115
|
+
_classPrivateFieldSet(this, _switchStyle, this[typeof this[switchStyle] === 'function' ? switchStyle : 'typingEffect'])
|
|
116
|
+
_classPrivateFieldSet(this, _titlesContainer, titlesContainer)
|
|
117
|
+
_classPrivateFieldSet(this, _titles, [])
|
|
118
|
+
var foundContainers = titlesContainer ? document.querySelectorAll(titlesContainer) : []
|
|
119
|
+
if (foundContainers && foundContainers[0]) {
|
|
120
|
+
_classPrivateFieldSet(this, _titlesContainer, foundContainers[0])
|
|
121
|
+
_classPrivateFieldSet(this, _titles, _classPrivateFieldGet(this, _titlesContainer).children)
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Retrieve active
|
|
127
|
+
* @return {boolean}
|
|
128
|
+
*/
|
|
129
|
+
_createClass(TitleSwitcher, [{
|
|
130
|
+
key: 'active',
|
|
131
|
+
get: function get () {
|
|
132
|
+
return _classPrivateFieldGet(this, _active)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Retrieve currentClass
|
|
137
|
+
* @return {string}
|
|
138
|
+
*/
|
|
139
|
+
}, {
|
|
140
|
+
key: 'currentClass',
|
|
141
|
+
get: function get () {
|
|
142
|
+
return _classPrivateFieldGet(this, _currentClass)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Retrieve currentIndex
|
|
147
|
+
* @return {number}
|
|
148
|
+
*/
|
|
149
|
+
}, {
|
|
150
|
+
key: 'currentIndex',
|
|
151
|
+
get: function get () {
|
|
152
|
+
return _classPrivateFieldGet(this, _currentIndex)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Retrieve delayEffect
|
|
157
|
+
* @return {number}
|
|
158
|
+
*/
|
|
159
|
+
}, {
|
|
160
|
+
key: 'delayEffect',
|
|
161
|
+
get: function get () {
|
|
162
|
+
return _classPrivateFieldGet(this, _delayEffect)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Retrieve delaySwitch
|
|
167
|
+
* @return {number}
|
|
168
|
+
*/
|
|
169
|
+
}, {
|
|
170
|
+
key: 'delaySwitch',
|
|
171
|
+
get: function get () {
|
|
172
|
+
return _classPrivateFieldGet(this, _delaySwitch)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Retrieve switchStyle
|
|
177
|
+
* @return {string}
|
|
178
|
+
*/
|
|
179
|
+
}, {
|
|
180
|
+
key: 'switchStyle',
|
|
181
|
+
get: function get () {
|
|
182
|
+
return _classPrivateFieldGet(this, _switchStyle)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Retrieve list of titles DOM elements
|
|
187
|
+
* @return {Array|NodeList}
|
|
188
|
+
*/
|
|
189
|
+
}, {
|
|
190
|
+
key: 'titles',
|
|
191
|
+
get: function get () {
|
|
192
|
+
return _classPrivateFieldGet(this, _titles)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Retrieve typeSurface used
|
|
197
|
+
* @return {HTMLElement|null}
|
|
198
|
+
*/
|
|
199
|
+
}, {
|
|
200
|
+
key: 'typeSurface',
|
|
201
|
+
get: function get () {
|
|
202
|
+
return _classPrivateFieldGet(this, _typeSurface)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* This is the function to begin the switching titles
|
|
207
|
+
* @param {Object} [settings={}]
|
|
208
|
+
* @param {number} [settings.delaySwitch=400]
|
|
209
|
+
* @param {number} [settings.delayEffect=200]
|
|
210
|
+
* @param {boolean} [settings.isRandom=false]
|
|
211
|
+
* @param {boolean} [settings.immediatePause=false]
|
|
212
|
+
* @returns {TitleSwitcher}
|
|
213
|
+
*/
|
|
214
|
+
}, {
|
|
215
|
+
key: 'startTitles',
|
|
216
|
+
value: function startTitles () {
|
|
217
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}
|
|
218
|
+
var _ref$delaySwitch = _ref.delaySwitch
|
|
219
|
+
var delaySwitch = _ref$delaySwitch === void 0 ? 400 : _ref$delaySwitch
|
|
220
|
+
var _ref$delayEffect = _ref.delayEffect
|
|
221
|
+
var delayEffect = _ref$delayEffect === void 0 ? 200 : _ref$delayEffect
|
|
222
|
+
var _ref$isRandom = _ref.isRandom
|
|
223
|
+
var isRandom = _ref$isRandom === void 0 ? false : _ref$isRandom
|
|
224
|
+
var _ref$immediatePause = _ref.immediatePause
|
|
225
|
+
var immediatePause = _ref$immediatePause === void 0 ? false : _ref$immediatePause
|
|
226
|
+
var typeSurface = 'typeSurface'
|
|
227
|
+
_classPrivateFieldSet(this, _delaySwitch, delaySwitch)
|
|
228
|
+
_classPrivateFieldSet(this, _delayEffect, delayEffect)
|
|
229
|
+
_classPrivateFieldSet(this, _isRandom, isRandom)
|
|
230
|
+
_classPrivateFieldSet(this, _active, !immediatePause)
|
|
231
|
+
if (_classPrivateFieldGet(this, _currentIndex) >= _classPrivateFieldGet(this, _titles).length) {
|
|
232
|
+
_classPrivateFieldSet(this, _active, false)
|
|
233
|
+
console.warn("No titles found for '".concat(_classPrivateFieldGet(this, _titlesContainer), "'"))
|
|
234
|
+
return this
|
|
235
|
+
}
|
|
236
|
+
if (_classPrivateFieldGet(this, _isRandom)) {
|
|
237
|
+
_classPrivateFieldSet(this, _currentIndex, Math.round(Math.random() * (_classPrivateFieldGet(this, _titles).length - 2)) + 1)
|
|
238
|
+
}
|
|
239
|
+
var currentTitle = _classPrivateFieldGet(this, _titles)[_classPrivateFieldGet(this, _currentIndex)]
|
|
240
|
+
if (currentTitle.classList) {
|
|
241
|
+
currentTitle.classList.add(_classPrivateFieldGet(this, _currentClass))
|
|
242
|
+
} else {
|
|
243
|
+
currentTitle.className += ' ' + _classPrivateFieldGet(this, _currentClass)
|
|
244
|
+
}
|
|
245
|
+
var typeElement = _classPrivateFieldGet(this, _titles)[0].cloneNode(true)
|
|
246
|
+
if (typeElement.classList) {
|
|
247
|
+
typeElement.classList.add(typeSurface)
|
|
248
|
+
} else {
|
|
249
|
+
typeElement.className += ' ' + typeSurface
|
|
250
|
+
}
|
|
251
|
+
if (typeElement.classList) {
|
|
252
|
+
typeElement.classList.remove(_classPrivateFieldGet(this, _currentClass))
|
|
253
|
+
} else {
|
|
254
|
+
typeElement.className = typeElement.className.replace(new RegExp('(^|\\b)' + typeElement.className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ')
|
|
255
|
+
}
|
|
256
|
+
_classPrivateFieldGet(this, _titlesContainer).insertBefore(typeElement, _classPrivateFieldGet(this, _titlesContainer).firstChild)
|
|
257
|
+
_classPrivateFieldSet(this, _typeSurface, _classPrivateFieldGet(this, _titlesContainer).querySelectorAll('.' + typeSurface)[0])
|
|
258
|
+
_classPrivateFieldGet(this, _typeSurface).innerHTML = ''
|
|
259
|
+
_classPrivateFieldGet(this, _typeSurface).style.display = 'block'
|
|
260
|
+
Array.prototype.forEach.call(_classPrivateFieldGet(this, _titles), function (title) {
|
|
261
|
+
title.style.display = 'none'
|
|
262
|
+
})
|
|
263
|
+
return this.switchTitle(_classPrivateFieldGet(this, _titles)[_classPrivateFieldGet(this, _currentIndex)], _classPrivateFieldGet(this, _switchStyle), this)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* This is the function to pause between switching
|
|
268
|
+
*/
|
|
269
|
+
}, {
|
|
270
|
+
key: 'pause',
|
|
271
|
+
value: function pause () {
|
|
272
|
+
_classPrivateFieldSet(this, _active, false)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* This is the function to resume after a pause.
|
|
277
|
+
*/
|
|
278
|
+
}, {
|
|
279
|
+
key: 'resume',
|
|
280
|
+
value: function resume () {
|
|
281
|
+
if (!_classPrivateFieldGet(this, _active)) {
|
|
282
|
+
_classPrivateFieldSet(this, _active, true)
|
|
283
|
+
this.switchTitle(_classPrivateFieldGet(this, _titles)[_classPrivateFieldGet(this, _currentIndex)], _classPrivateFieldGet(this, _switchStyle), this)
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* This is the core function for switching titles
|
|
289
|
+
* @param {HTMLElement} currentTitle
|
|
290
|
+
* @param {Function} callBackFunction
|
|
291
|
+
* @param {TitleSwitcher} self
|
|
292
|
+
* @param {boolean} [runOnce=false]
|
|
293
|
+
* @returns {TitleSwitcher}
|
|
294
|
+
*/
|
|
295
|
+
}, {
|
|
296
|
+
key: 'switchTitle',
|
|
297
|
+
value: function switchTitle (currentTitle, callBackFunction, self) {
|
|
298
|
+
var runOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false
|
|
299
|
+
self = self || this
|
|
300
|
+
var currentIndex = 1
|
|
301
|
+
var size = _classPrivateFieldGet(self, _titles).length
|
|
302
|
+
for (var i = 1; i < size; ++i) {
|
|
303
|
+
if (_classPrivateFieldGet(self, _titles)[i] === currentTitle) {
|
|
304
|
+
currentIndex = i
|
|
305
|
+
break
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (!_classPrivateFieldGet(self, _active)) {
|
|
309
|
+
_classPrivateFieldSet(self, _currentIndex, currentIndex)
|
|
310
|
+
return self
|
|
311
|
+
}
|
|
312
|
+
var maxIndex = _classPrivateFieldGet(self, _titles).length - 1
|
|
313
|
+
var nextIndex = 1
|
|
314
|
+
if (maxIndex === 1) {
|
|
315
|
+
return callBackFunction(currentTitle, self.switchTitle, self)
|
|
316
|
+
}
|
|
317
|
+
if (_classPrivateFieldGet(self, _isRandom)) {
|
|
318
|
+
if (!self.typeSurface.textContent.trim()) {
|
|
319
|
+
currentIndex = -1
|
|
320
|
+
}
|
|
321
|
+
do {
|
|
322
|
+
nextIndex = Math.round(Math.random() * (maxIndex - 1)) + 1
|
|
323
|
+
} while (nextIndex === currentIndex)
|
|
324
|
+
} else {
|
|
325
|
+
if (!self.typeSurface.textContent.trim()) {
|
|
326
|
+
currentIndex = maxIndex
|
|
327
|
+
}
|
|
328
|
+
nextIndex = currentIndex < maxIndex ? currentIndex + 1 : 1
|
|
329
|
+
}
|
|
330
|
+
var nextTitle = _classPrivateFieldGet(self, _titles)[nextIndex]
|
|
331
|
+
if (currentTitle.classList) {
|
|
332
|
+
currentTitle.classList.remove(self.currentClass)
|
|
333
|
+
} else {
|
|
334
|
+
currentTitle.className = currentTitle.className.replace(new RegExp('(^|\\b)' + currentTitle.className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ')
|
|
335
|
+
}
|
|
336
|
+
if (nextTitle.classList) {
|
|
337
|
+
nextTitle.classList.add(self.currentClass)
|
|
338
|
+
} else {
|
|
339
|
+
nextTitle.className += ' ' + self.currentClass
|
|
340
|
+
}
|
|
341
|
+
return callBackFunction(nextTitle, runOnce ? function () {
|
|
342
|
+
return null
|
|
343
|
+
} : self.switchTitle, self, runOnce)
|
|
344
|
+
}
|
|
345
|
+
}])
|
|
346
|
+
return TitleSwitcher
|
|
347
|
+
}())
|
|
348
|
+
/**
|
|
349
|
+
* This is a helper function to improve the default 'typingEffect'
|
|
350
|
+
* @param {boolean} blinkOn
|
|
351
|
+
* @param {TitleSwitcher} self
|
|
352
|
+
* @return {TitleSwitcher}
|
|
353
|
+
*/
|
|
354
|
+
TitleSwitcher.prototype.cursorBlink = function (blinkOn, self) {
|
|
355
|
+
// display cursor effect
|
|
356
|
+
self = self || _this
|
|
357
|
+
if (blinkOn) {
|
|
358
|
+
self.typeSurface.innerHTML = self.typeSurface.innerHTML.replace(/\|| *(<\/span>)?$/, '$1').trim()
|
|
359
|
+
self.typeSurface.innerHTML = self.typeSurface.innerHTML + '<span style="display: inline-block;font-weight: normal; color: black; text-decoration: none">|</span>'
|
|
360
|
+
} else {
|
|
361
|
+
self.typeSurface.innerHTML = self.typeSurface.innerHTML.replace(/\|(<\/span>)$/, ' $1')
|
|
362
|
+
}
|
|
363
|
+
return self
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* This is the default and example of an effect being implemented when Titles are switched
|
|
368
|
+
* These functions take the currentElement in focus, the switchTitle function as a callback
|
|
369
|
+
* and an instance of the TitleSwitcher
|
|
370
|
+
* @param {HTMLElement} domObject
|
|
371
|
+
* @param {Function} callBackFunction
|
|
372
|
+
* @param {TitleSwitcher} self
|
|
373
|
+
* @param {boolean} [runOnce=false]
|
|
374
|
+
* @returns {TitleSwitcher}
|
|
375
|
+
*/
|
|
376
|
+
TitleSwitcher.prototype.typingEffect = function (domObject, callBackFunction, self) {
|
|
377
|
+
var runOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false
|
|
378
|
+
self = self || _this
|
|
379
|
+
var size = self.titles.length
|
|
380
|
+
var currentIndex = 0
|
|
381
|
+
for (var i = 1; i < size; ++i) {
|
|
382
|
+
if (self.titles[i] === domObject) {
|
|
383
|
+
currentIndex = i
|
|
384
|
+
break
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
domObject = domObject || self.titles[currentIndex + 1]
|
|
388
|
+
callBackFunction = callBackFunction || self.switchStyle
|
|
389
|
+
var blinkOn = true
|
|
390
|
+
var numBlinks = 4
|
|
391
|
+
if (self.typeSurface.hasAttribute('style')) {
|
|
392
|
+
self.typeSurface.removeAttribute('style')
|
|
393
|
+
}
|
|
394
|
+
if (domObject.hasAttribute('style')) {
|
|
395
|
+
self.typeSurface.setAttribute('style', domObject.getAttribute('style'))
|
|
396
|
+
}
|
|
397
|
+
// If we copied the title style, then display:none is set, so we need to ensure the surface is display:block
|
|
398
|
+
self.typeSurface.innerHTML = ''
|
|
399
|
+
self.typeSurface.style.display = 'block'
|
|
400
|
+
|
|
401
|
+
// Initialize with a few cursor blinks
|
|
402
|
+
for (var _i = 0; _i < numBlinks; ++_i) {
|
|
403
|
+
setTimeout(function () {
|
|
404
|
+
self.cursorBlink(blinkOn, self)
|
|
405
|
+
blinkOn = !blinkOn
|
|
406
|
+
}, _i * self.delaySwitch)
|
|
407
|
+
}
|
|
408
|
+
setTimeout(function () {
|
|
409
|
+
// Empty the surface, and display the cursor (cursor is always solid while typing / not flashing)
|
|
410
|
+
self.typeSurface.innerHTML = ''
|
|
411
|
+
self.cursorBlink(true, self)
|
|
412
|
+
// Copy each letter from the current title (text only)
|
|
413
|
+
domObject.textContent.split('').forEach(function (letter, i) {
|
|
414
|
+
setTimeout(function () {
|
|
415
|
+
// Remove the previous cursor, place the new letter, then append a formatted cursor on the end
|
|
416
|
+
self.typeSurface.innerHTML = self.typeSurface.textContent.replace('|', '') + letter + '<span style="font-weight: normal; color: black; text-decoration: none">|</span>'
|
|
417
|
+
// If the text content equals the title content with a cursor appended then we reached the end.
|
|
418
|
+
if (domObject.textContent + '|' === self.typeSurface.textContent) {
|
|
419
|
+
// Replace html with old html on last letter, so we get all the html formatting applied
|
|
420
|
+
self.typeSurface.innerHTML = domObject.innerHTML + '<span style="font-weight: normal; color: black; text-decoration: none">|</span>'
|
|
421
|
+
// Run the blinking cursor two times the regular time in order to let the text be readable before switching
|
|
422
|
+
var _loop = function _loop (_j) {
|
|
423
|
+
setTimeout(function () {
|
|
424
|
+
--_j
|
|
425
|
+
self.cursorBlink(blinkOn, self)
|
|
426
|
+
if (_j === 0) {
|
|
427
|
+
callBackFunction(domObject, function () {
|
|
428
|
+
return null
|
|
429
|
+
}, self, runOnce)
|
|
430
|
+
// callBackFunction(domObject, runOnce ? () => null : self.switchStyle, self, runOnce)
|
|
431
|
+
}
|
|
432
|
+
}, _j * self.delaySwitch)
|
|
433
|
+
j = _j
|
|
434
|
+
}
|
|
435
|
+
for (var j = 0; j < numBlinks * 2; ++j) {
|
|
436
|
+
_loop(j)
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}, i * self.delayEffect)
|
|
440
|
+
})
|
|
441
|
+
}, numBlinks * self.delaySwitch)
|
|
442
|
+
return self
|
|
443
|
+
}
|
|
444
|
+
var _default = exports.default = TitleSwitcher
|
|
445
|
+
if (void 0) {
|
|
446
|
+
(void 0).TitleSwitcher = TitleSwitcher
|
|
447
|
+
} else if (typeof window !== 'undefined') {
|
|
448
|
+
window.TitleSwitcher = TitleSwitcher
|
|
449
|
+
}
|
package/dist/main.min.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}require("core-js/modules/es.symbol.to-primitive.js"),require("core-js/modules/es.date.to-primitive.js"),require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.number.constructor.js"),require("core-js/modules/es.object.define-property.js"),require("core-js/modules/es.symbol.iterator.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/es.regexp.constructor.js"),require("core-js/modules/es.regexp.sticky.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/es.array.join.js"),require("core-js/modules/es.array.for-each.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.string.trim.js"),require("core-js/modules/web.timers.js"),require("core-js/modules/esnext.async-iterator.for-each.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.for-each.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/es.weak-map.js"),require("core-js/modules/esnext.weak-map.delete-all.js"),require("core-js/modules/web.dom-collections.iterator.js");var _this=void 0;function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var i=0;i<t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,_toPropertyKey(s.key),s)}}function _createClass(e,t,i){return t&&_defineProperties(e.prototype,t),i&&_defineProperties(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}function _toPropertyKey(e){var t=_toPrimitive(e,"string");return"symbol"===_typeof(t)?t:String(t)}function _toPrimitive(e,t){if("object"!==_typeof(e)||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,t||"default");if("object"!==_typeof(s))return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function _classPrivateFieldInitSpec(e,t,i){_checkPrivateRedeclaration(e,t),t.set(e,i)}function _checkPrivateRedeclaration(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function _classPrivateFieldGet(e,t){return _classApplyDescriptorGet(e,_classExtractFieldDescriptor(e,t,"get"))}function _classApplyDescriptorGet(e,t){return t.get?t.get.call(e):t.value}function _classPrivateFieldSet(e,t,i){return _classApplyDescriptorSet(e,_classExtractFieldDescriptor(e,t,"set"),i),i}function _classExtractFieldDescriptor(e,t,i){if(!t.has(e))throw new TypeError("attempted to "+i+" private field on non-instance");return t.get(e)}function _classApplyDescriptorSet(e,t,i){if(t.set)t.set.call(e,i);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=i}}var _active=new WeakMap,_currentClass=new WeakMap,_currentIndex=new WeakMap,_delayEffect=new WeakMap,_delaySwitch=new WeakMap,_isRandom=new WeakMap,_switchStyle=new WeakMap,_titles=new WeakMap,_titlesContainer=new WeakMap,_typeSurface=new WeakMap,TitleSwitcher=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"typingEffect";_classCallCheck(this,e),_classPrivateFieldInitSpec(this,_active,{writable:!0,value:!1}),_classPrivateFieldInitSpec(this,_currentClass,{writable:!0,value:"displayTitle"}),_classPrivateFieldInitSpec(this,_currentIndex,{writable:!0,value:0}),_classPrivateFieldInitSpec(this,_delayEffect,{writable:!0,value:200}),_classPrivateFieldInitSpec(this,_delaySwitch,{writable:!0,value:400}),_classPrivateFieldInitSpec(this,_isRandom,{writable:!0,value:!1}),_classPrivateFieldInitSpec(this,_switchStyle,{writable:!0,value:"typingEffect"}),_classPrivateFieldInitSpec(this,_titles,{writable:!0,value:[]}),_classPrivateFieldInitSpec(this,_titlesContainer,{writable:!0,value:null}),_classPrivateFieldInitSpec(this,_typeSurface,{writable:!0,value:void 0}),_classPrivateFieldSet(this,_currentClass,"displayTitle"),_classPrivateFieldSet(this,_switchStyle,this["function"==typeof this[i]?i:"typingEffect"]),_classPrivateFieldSet(this,_titlesContainer,t),_classPrivateFieldSet(this,_titles,[]);var s=t?document.querySelectorAll(t):[];s&&s[0]&&(_classPrivateFieldSet(this,_titlesContainer,s[0]),_classPrivateFieldSet(this,_titles,_classPrivateFieldGet(this,_titlesContainer).children))}return _createClass(e,[{key:"active",get:function(){return _classPrivateFieldGet(this,_active)}},{key:"currentClass",get:function(){return _classPrivateFieldGet(this,_currentClass)}},{key:"currentIndex",get:function(){return _classPrivateFieldGet(this,_currentIndex)}},{key:"delayEffect",get:function(){return _classPrivateFieldGet(this,_delayEffect)}},{key:"delaySwitch",get:function(){return _classPrivateFieldGet(this,_delaySwitch)}},{key:"switchStyle",get:function(){return _classPrivateFieldGet(this,_switchStyle)}},{key:"titles",get:function(){return _classPrivateFieldGet(this,_titles)}},{key:"typeSurface",get:function(){return _classPrivateFieldGet(this,_typeSurface)}},{key:"startTitles",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.delaySwitch,i=void 0===t?400:t,s=e.delayEffect,r=void 0===s?200:s,a=e.isRandom,l=void 0!==a&&a,c=e.immediatePause,n=void 0!==c&&c,o="typeSurface";if(_classPrivateFieldSet(this,_delaySwitch,i),_classPrivateFieldSet(this,_delayEffect,r),_classPrivateFieldSet(this,_isRandom,l),_classPrivateFieldSet(this,_active,!n),_classPrivateFieldGet(this,_currentIndex)>=_classPrivateFieldGet(this,_titles).length)return _classPrivateFieldSet(this,_active,!1),console.warn("No titles found for '".concat(_classPrivateFieldGet(this,_titlesContainer),"'")),this;_classPrivateFieldGet(this,_isRandom)&&_classPrivateFieldSet(this,_currentIndex,Math.round(Math.random()*(_classPrivateFieldGet(this,_titles).length-2))+1);var u=_classPrivateFieldGet(this,_titles)[_classPrivateFieldGet(this,_currentIndex)];u.classList?u.classList.add(_classPrivateFieldGet(this,_currentClass)):u.className+=" "+_classPrivateFieldGet(this,_currentClass);var d=_classPrivateFieldGet(this,_titles)[0].cloneNode(!0);return d.classList?d.classList.add(o):d.className+=" "+o,d.classList?d.classList.remove(_classPrivateFieldGet(this,_currentClass)):d.className=d.className.replace(new RegExp("(^|\\b)"+d.className.split(" ").join("|")+"(\\b|$)","gi")," "),_classPrivateFieldGet(this,_titlesContainer).insertBefore(d,_classPrivateFieldGet(this,_titlesContainer).firstChild),_classPrivateFieldSet(this,_typeSurface,_classPrivateFieldGet(this,_titlesContainer).querySelectorAll("."+o)[0]),_classPrivateFieldGet(this,_typeSurface).innerHTML="",_classPrivateFieldGet(this,_typeSurface).style.display="block",Array.prototype.forEach.call(_classPrivateFieldGet(this,_titles),(function(e){e.style.display="none"})),this.switchTitle(_classPrivateFieldGet(this,_titles)[_classPrivateFieldGet(this,_currentIndex)],_classPrivateFieldGet(this,_switchStyle),this)}},{key:"pause",value:function(){_classPrivateFieldSet(this,_active,!1)}},{key:"resume",value:function(){_classPrivateFieldGet(this,_active)||(_classPrivateFieldSet(this,_active,!0),this.switchTitle(_classPrivateFieldGet(this,_titles)[_classPrivateFieldGet(this,_currentIndex)],_classPrivateFieldGet(this,_switchStyle),this))}},{key:"switchTitle",value:function(e,t,i){for(var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1,a=_classPrivateFieldGet(i=i||this,_titles).length,l=1;l<a;++l)if(_classPrivateFieldGet(i,_titles)[l]===e){r=l;break}if(!_classPrivateFieldGet(i,_active))return _classPrivateFieldSet(i,_currentIndex,r),i;var c=_classPrivateFieldGet(i,_titles).length-1,n=1;if(1===c)return t(e,i.switchTitle,i);if(_classPrivateFieldGet(i,_isRandom)){i.typeSurface.textContent.trim()||(r=-1);do{n=Math.round(Math.random()*(c-1))+1}while(n===r)}else i.typeSurface.textContent.trim()||(r=c),n=r<c?r+1:1;var o=_classPrivateFieldGet(i,_titles)[n];return e.classList?e.classList.remove(i.currentClass):e.className=e.className.replace(new RegExp("(^|\\b)"+e.className.split(" ").join("|")+"(\\b|$)","gi")," "),o.classList?o.classList.add(i.currentClass):o.className+=" "+i.currentClass,t(o,s?function(){return null}:i.switchTitle,i,s)}}]),e}();TitleSwitcher.prototype.cursorBlink=function(e,t){return t=t||_this,e?(t.typeSurface.innerHTML=t.typeSurface.innerHTML.replace(/\|| *(<\/span>)?$/,"$1").trim(),t.typeSurface.innerHTML=t.typeSurface.innerHTML+'<span style="display: inline-block;font-weight: normal; color: black; text-decoration: none">|</span>'):t.typeSurface.innerHTML=t.typeSurface.innerHTML.replace(/\|(<\/span>)$/," $1"),t},TitleSwitcher.prototype.typingEffect=function(e,t,i){for(var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=(i=i||_this).titles.length,a=0,l=1;l<r;++l)if(i.titles[l]===e){a=l;break}e=e||i.titles[a+1],t=t||i.switchStyle;var c=!0;i.typeSurface.hasAttribute("style")&&i.typeSurface.removeAttribute("style"),e.hasAttribute("style")&&i.typeSurface.setAttribute("style",e.getAttribute("style")),i.typeSurface.innerHTML="",i.typeSurface.style.display="block";for(var n=0;n<4;++n)setTimeout((function(){i.cursorBlink(c,i),c=!c}),n*i.delaySwitch);return setTimeout((function(){i.typeSurface.innerHTML="",i.cursorBlink(!0,i),e.textContent.split("").forEach((function(r,a){setTimeout((function(){if(i.typeSurface.innerHTML=i.typeSurface.textContent.replace("|","")+r+'<span style="font-weight: normal; color: black; text-decoration: none">|</span>',e.textContent+"|"===i.typeSurface.textContent){i.typeSurface.innerHTML=e.innerHTML+'<span style="font-weight: normal; color: black; text-decoration: none">|</span>';for(var a=function(r){setTimeout((function(){--r,i.cursorBlink(c,i),0===r&&t(e,(function(){return null}),i,s)}),r*i.delaySwitch),l=r},l=0;l<8;++l)a(l)}}),a*i.delayEffect)}))}),4*i.delaySwitch),i};var _default=exports.default=TitleSwitcher;"undefined"!=typeof window&&(window.TitleSwitcher=TitleSwitcher);
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "title-switcher",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Add typing effect to titles and also switch through several titles.",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "gulp build",
|
|
7
|
+
"dev": "gulp",
|
|
8
|
+
"htmldocs": "jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs",
|
|
9
|
+
"readme": "gulp readme",
|
|
10
|
+
"resolutions": "npx npm-force-resolutions",
|
|
11
|
+
"test": "gulp testFull",
|
|
12
|
+
"test:quick": "gulp testQuick",
|
|
13
|
+
"watch": "gulp watchFull",
|
|
14
|
+
"watch:test": "gulp watchTest"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/jheagle/title-switcher-v2.git"
|
|
19
|
+
},
|
|
20
|
+
"author": "Joshua Heagle",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/jheagle/title-switcher-v2/issues"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/jheagle/title-switcher-v2#readme",
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"js-build-tools": "^2.2.7"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {},
|
|
30
|
+
"main": "dist/main.min.js",
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"browser"
|
|
34
|
+
],
|
|
35
|
+
"standard": {
|
|
36
|
+
"env": [
|
|
37
|
+
"jest"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"directories": {
|
|
41
|
+
"doc": "docs"
|
|
42
|
+
}
|
|
43
|
+
}
|