PluginProbe ʕ •ᴥ•ʔ
Strong Testimonials / 2.33
Strong Testimonials v2.33
3.3.6 3.3.5 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.0.1 2.30.9 2.31.10 2.32 2.32.1 2.32.2 2.32.3 2.32.4 2.33 2.34 2.35 2.36 2.37 2.38 2.38.1 2.39 2.39.1 2.39.2 2.39.3 2.40.0 2.40.1 2.40.2 2.40.3 2.40.4 2.40.5 2.40.6 2.40.7 2.41.0 2.41.1 2.50.0 2.50.1 2.50.2 2.50.3 2.50.4 2.51.0 2.51.1 2.51.2 2.51.3 2.51.4 2.51.5 2.51.6 2.51.7 2.51.8 2.51.9 3.0.0 3.0.1 3.0.2 3.0.3 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.20 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.17 3.2.18 3.2.19 3.2.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.3.0
strong-testimonials / public / js / lib / readmore / readmore.js
strong-testimonials / public / js / lib / readmore Last commit date
readmore.js 7 years ago readmore.min.js 7 years ago
readmore.js
123 lines
1 /**
2 * readmore.js
3 *
4 * @param toggleButtonText
5 * @param toggleButtonText.dataset
6 * @param toggleButtonText.dataset.moreText
7 * @param toggleButtonText.dataset.lessText
8 */
9
10 (function () {
11
12 /*
13 * forEach method
14 * thanks https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/
15 */
16 var forEach = function (array, callback, scope) {
17 for (var i = 0; i < array.length; i++) {
18 callback.call(scope, i, array[i]); // passes back stuff we need
19 }
20 };
21
22 /*
23 * Do stuff at the end of animation.
24 */
25 var onAnimationEnd = function (event) {
26 if (event.type === 'animationend' && event.animationName === 'fadeOutUp') {
27 // Add `hidden` attribute
28 event.target.setAttribute('hidden', 'true');
29
30 // Show read-more link
31 event.target.parentElement.querySelector('.readmore-toggle').style.display = 'inline';
32
33 // Show ellipsis
34 var ellipsis = event.target.parentElement.querySelector('.ellipsis');
35 if (ellipsis) {
36 ellipsis.style.display = 'inline';
37 }
38
39 fireCustomEvent();
40 }
41 };
42
43 var fireCustomEvent = function () {
44 window.dispatchEvent(new Event('toggleFullContent'));
45 };
46
47 // Only in modern browsers.
48 if ('querySelector' in document && 'addEventListener' in window) {
49
50 // Listen for an animation.
51 var fullTextWrappers = document.querySelectorAll('.readmore-content');
52
53 forEach(fullTextWrappers, function (index, fullTextWrapper) {
54 fullTextWrapper.addEventListener('transitionend', onAnimationEnd);
55 fullTextWrapper.addEventListener('animationend', onAnimationEnd);
56 });
57
58 // Listen to each button.
59 var toggleButtons = document.querySelectorAll('.readmore-toggle');
60
61 forEach(toggleButtons, function (index, toggleButton) {
62
63 toggleButton.addEventListener('click', function () {
64
65 var fullTextWrapper = this.parentElement.querySelector('.readmore-content');
66 if (!fullTextWrapper) {
67 return;
68 }
69
70 var ellipsis = this.parentElement.querySelector('.ellipsis');
71 var toggleButtonText = this.querySelector('.readmore-text');
72
73 // change attributes and text if full text is shown/hidden
74 if (fullTextWrapper.hasAttribute('hidden')) {
75
76 // show
77
78 // 1. remove hidden attribute so we can animate it
79 fullTextWrapper.removeAttribute('hidden');
80
81 // 2. update toggle link
82 // change text (may be blank)
83 toggleButtonText.innerText = toggleButtonText.dataset.lessText;
84 toggleButton.setAttribute('aria-expanded', true);
85 if( ellipsis ) {
86 ellipsis.style.display = 'none';
87 }
88
89 // 3. animate it
90 fullTextWrapper.classList.add('fadeInDown');
91 fullTextWrapper.classList.remove('fadeOutUp');
92 fullTextWrapper.classList.remove('faster');
93
94 fireCustomEvent();
95
96 } else {
97
98 // hide
99
100 // 1. update toggle link
101 // hide link during transition
102 toggleButton.style.display = 'none'
103 toggleButton.setAttribute('aria-expanded', false);
104 // change link text (may be blank)
105 toggleButtonText.innerText = toggleButtonText.dataset.moreText;
106
107 // 2. animate it
108 fullTextWrapper.classList.add('fadeOutUp');
109 fullTextWrapper.classList.add('faster');
110 fullTextWrapper.classList.remove('fadeInDown');
111
112 // 3. do stuff at end of animation (the event listener above)
113
114 }
115
116 });
117
118 });
119
120 }
121
122 })();
123