PageSourceSearch

https://www.krampitz.de/wp-content/plugins/wpbot-pro-master/templates/template-01/board-expand.js?ver=15.6.10

js krampitz.de collected 2026-09-25 10:11:22 UTC 6,615 bytes, 279 lines download raw bytes

1(function ($) {
2	'use strict';
3
4	var expandedClass = 'wp-chatbot-is-expanded';
5	var bodyExpandedClass = 'wp-chatbot-expanded-active';
6
7	function getBotConfig() {
8		return window.wp_chatbot_obj || window.wpChatBotVar || {};
9	}
10
11	function isExpandSupported() {
12		return $('#wp-chatbot-desktop-expand').length > 0;
13	}
14
15	function isMobileFullScreenViewport() {
16		return (
17			window.matchMedia('(max-width: 1024px)').matches &&
18			$('#wp-chatbot-chat-container').hasClass('wp-chatbot-mobile-full-screen')
19		);
20	}
21
22	function getDefaultContentHeight() {
23		var maxHeight = parseInt(getBotConfig().chatbot_content, 10);
24
25		if (isNaN(maxHeight) || maxHeight <= 0) {
26			maxHeight = 650;
27		}
28
29		return Math.max(280, maxHeight - 50);
30	}
31
32	var expandAnimMs = 420;
33	var collapseAnimMs = 420;
34	var isExpandAnimating = false;
35
36	function getExpandedContentHeight() {
37		var defaultH = getDefaultContentHeight();
38		var expandedMax = 560;
39		var expandedMin = 420;
40		var boost = 130;
41
42		return Math.min(
43			expandedMax,
44			Math.max(expandedMin, defaultH + boost)
45		);
46	}
47
48	function getOpenOrigin() {
49		var $board = $('#wp-chatbot-board-container');
50		return $board.attr('data-wpbot-open-origin') === 'bl' ? 'bl' : 'br';
51	}
52
53	function playExpandMotion(expanding) {
54		var $board = $('#wp-chatbot-board-container');
55		var origin = getOpenOrigin();
56		var expandCls = 'wp-chatbot-board-expand-animate';
57		var collapseCls = 'wp-chatbot-board-expand-collapsing';
58		var originCls =
59			'wp-chatbot-board-expand-origin-' + (origin === 'bl' ? 'bl' : 'br');
60
61		$board.removeClass(
62			expandCls +
63				' ' +
64				collapseCls +
65				' wp-chatbot-board-expand-origin-bl wp-chatbot-board-expand-origin-br'
66		);
67
68		if (!$board.length || !$board[0].offsetParent) {
69			return;
70		}
71
72		void $board[0].offsetWidth;
73		$board.addClass(originCls);
74		$board.addClass(expanding ? expandCls : collapseCls);
75
76		window.setTimeout(
77			function () {
78				$board.removeClass(
79					expandCls +
80						' ' +
81						collapseCls +
82						' wp-chatbot-board-expand-origin-bl wp-chatbot-board-expand-origin-br'
83				);
84			},
85			expanding ? expandAnimMs : collapseAnimMs
86		);
87	}
88
89	function applyExpandedClasses(expanded) {
90		var $chat = $('#wp-chatbot-chat-container');
91		var $ball = $('#wp-chatbot-ball-container');
92		var $board = $('#wp-chatbot-board-container');
93		var $start = $('#wp-chatbot-ball-container .wp-chatbot-start-container');
94
95		$('body').toggleClass(bodyExpandedClass, expanded);
96		$chat.toggleClass(expandedClass, expanded);
97		$ball.toggleClass(expandedClass, expanded);
98		$board.toggleClass(expandedClass, expanded);
99		$start.toggleClass(expandedClass, expanded);
100	}
101
102	function updateExpandButton(expanded) {
103		var $btn = $('#wp-chatbot-desktop-expand');
104
105		$btn.attr('aria-pressed', expanded ? 'true' : 'false');
106		$btn.attr(
107			'title',
108			expanded ? $btn.data('collapse-label') : $btn.data('expand-label')
109		);
110		$btn
111			.find('i')
112			.toggleClass('fa-expand', !expanded)
113			.toggleClass('fa-compress', expanded);
114	}
115
116	function runCollapseAnimation() {
117		var $content = $('#wp-chatbot-ball-container .wp-chatbot-content');
118		var expandedH = getExpandedContentHeight();
119		var defaultH = getDefaultContentHeight();
120
121		isExpandAnimating = true;
122		updateExpandButton(false);
123		playExpandMotion(false);
124
125		// Lock current size, then remove expanded state so width/height can transition.
126		$content.css({
127			height: expandedH + 'px',
128			maxHeight: expandedH + 'px',
129		});
130
131		window.requestAnimationFrame(function () {
132			window.requestAnimationFrame(function () {
133				applyExpandedClasses(false);
134
135				$content.css({
136					height: defaultH + 'px',
137					maxHeight: defaultH + 'px',
138				});
139			});
140		});
141
142		window.setTimeout(function () {
143			$content.css({ height: '', maxHeight: '' });
144			updateSlimScroll(defaultH);
145			isExpandAnimating = false;
146		}, collapseAnimMs);
147	}
148
149	function updateSlimScroll(height) {
150		var $inner = $('#wp-chatbot-ball-container .wp-chatbot-ball-inner');
151
152		if (!$inner.length || isMobileFullScreenViewport()) {
153			return;
154		}
155
156		try {
157			if ($inner.parent().hasClass('slimScrollDiv')) {
158				$inner.slimScroll({ destroy: true });
159			}
160
161			$inner.css({ height: height + 'px', maxHeight: height + 'px' });
162			$inner.slimScroll({
163				height: height + 'px',
164				start: 'bottom',
165			});
166		} catch (err) {
167			$inner.css({
168				height: height + 'px',
169				maxHeight: height + 'px',
170				overflowY: 'auto',
171			});
172		}
173	}
174
175	function setExpanded(expanded) {
176		var $btn = $('#wp-chatbot-desktop-expand');
177		var $content = $('#wp-chatbot-ball-container .wp-chatbot-content');
178		var isExpanded = $('#wp-chatbot-chat-container').hasClass(
179			expandedClass
180		);
181
182		if (!$btn.length || isExpandAnimating) {
183			return;
184		}
185
186		if (!expanded) {
187			if (!isExpanded) {
188				return;
189			}
190			runCollapseAnimation();
191			return;
192		}
193
194		if (isExpanded) {
195			return;
196		}
197
198		playExpandMotion(true);
199		applyExpandedClasses(true);
200		updateExpandButton(true);
201
202		var contentHeight = getExpandedContentHeight();
203
204		$content.css({
205			height: contentHeight + 'px',
206			maxHeight: contentHeight + 'px',
207		});
208
209		window.setTimeout(function () {
210			updateSlimScroll(contentHeight);
211		}, expandAnimMs + 40);
212	}
213
214	function collapseIfExpanded() {
215		if ($('#wp-chatbot-chat-container').hasClass(expandedClass)) {
216			setExpanded(false);
217		}
218	}
219
220	function toggleExpanded() {
221		if (!isExpandSupported()) {
222			return;
223		}
224
225		setExpanded(!$('#wp-chatbot-chat-container').hasClass(expandedClass));
226	}
227
228	// Capture phase so header controls are not swallowed by other handlers.
229	document.addEventListener(
230		'click',
231		function (event) {
232			if (!event.target.closest('#wp-chatbot-desktop-expand')) {
233				return;
234			}
235
236			event.preventDefault();
237			event.stopPropagation();
238			event.stopImmediatePropagation();
239			toggleExpanded();
240		},
241		true
242	);
243
244	$(document).on('keydown', '#wp-chatbot-desktop-expand', function (e) {
245		if (e.key === 'Enter' || e.key === ' ') {
246			e.preventDefault();
247			toggleExpanded();
248		}
249	});
250
251	$(document).on(
252		'click',
253		'#wp-chatbot-desktop-close, #wp-chatbot-mobile-close',
254		collapseIfExpanded
255	);
256
257	$(document).on('click', '#wp-chatbot-ball', function () {
258		window.setTimeout(function () {
259			if (
260				!$('#wp-chatbot-board-container').hasClass('active-chat-board')
261			) {
262				collapseIfExpanded();
263			}
264		}, 450);
265	});
266
267	$(window).on('resize.wpbotBoardExpand', function () {
268		if (!$('#wp-chatbot-chat-container').hasClass(expandedClass)) {
269			return;
270		}
271
272		var height = getExpandedContentHeight();
273		$('#wp-chatbot-ball-container .wp-chatbot-content').css({
274			height: height + 'px',
275			maxHeight: height + 'px',
276		});
277		updateSlimScroll(height);
278	});
279})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.