PageSourceSearch

https://www.lexum.cz/wp-content/plugins/lexum-ai-chat/assets/widget.js?ver=0.15.2

js lexum.cz collected 2026-10-05 07:28:38 UTC 3,040 bytes, 116 lines download raw bytes

1( function () {
2	'use strict';
3
4	var root = document.querySelector( '.lexum-chat-widget' );
5	if ( ! root ) {
6		return;
7	}
8
9	var launcher = root.querySelector( '.lexum-chat-widget__launcher' );
10	var panel = root.querySelector( '.lexum-chat-widget__panel' );
11	var closeBtn = root.querySelector( '.lexum-chat-widget__close' );
12	var newChatBtn = root.querySelector( '.lexum-chat-widget__newchat' );
13	var chat = panel.querySelector( 'deep-chat' );
14	var nudge = root.querySelector( '.lexum-chat-widget__nudge' );
15	var nudgeHideTimer = null;
16
17	function isOpen() {
18		return root.getAttribute( 'data-state' ) === 'open';
19	}
20
21	// Dismissible "chat exists here" callout: shown at most once per day
22	// (localStorage), 15s after load, auto-hides after 60s if not dismissed.
23	// Any appearance — dismissed, auto-hidden, or interrupted by opening the
24	// chat — counts toward the once-per-day cap (marked at show time, below).
25	function hideNudge() {
26		if ( ! nudge ) {
27			return;
28		}
29		nudge.setAttribute( 'hidden', '' );
30		if ( nudgeHideTimer ) {
31			clearTimeout( nudgeHideTimer );
32			nudgeHideTimer = null;
33		}
34	}
35
36	if ( nudge ) {
37		var NUDGE_SHOWN_KEY = 'lexum_ai_chat_nudge_shown';
38		var nudgeClose = nudge.querySelector( '.lexum-chat-widget__nudge-close' );
39
40		var nudgeShownToday = function () {
41			try {
42				return window.localStorage.getItem( NUDGE_SHOWN_KEY ) === new Date().toDateString();
43			} catch ( e ) {
44				return false;
45			}
46		};
47
48		var showNudge = function () {
49			if ( isOpen() || nudgeShownToday() ) {
50				return;
51			}
52			nudge.removeAttribute( 'hidden' );
53			try {
54				window.localStorage.setItem( NUDGE_SHOWN_KEY, new Date().toDateString() );
55			} catch ( e ) {}
56			nudgeHideTimer = setTimeout( hideNudge, 60000 );
57		};
58
59		if ( ! nudgeShownToday() ) {
60			setTimeout( showNudge, 15000 );
61		}
62
63		if ( nudgeClose ) {
64			nudgeClose.addEventListener( 'click', hideNudge );
65		}
66	}
67
68	function setOpen( open ) {
69		root.setAttribute( 'data-state', open ? 'open' : 'closed' );
70		launcher.setAttribute( 'aria-expanded', open ? 'true' : 'false' );
71
72		if ( open ) {
73			hideNudge();
74			panel.removeAttribute( 'hidden' );
75			if ( chat ) {
76				chat.dispatchEvent( new CustomEvent( 'lexum:opened' ) );
77			}
78			setTimeout( function () {
79				try {
80					var input = chat && chat.shadowRoot &&
81						chat.shadowRoot.querySelector( '[contenteditable], textarea, input' );
82					if ( input ) {
83						input.focus();
84					}
85				} catch ( e ) {}
86			}, 150 );
87		} else {
88			panel.setAttribute( 'hidden', '' );
89			launcher.focus();
90		}
91	}
92
93	launcher.addEventListener( 'click', function () {
94		setOpen( ! isOpen() );
95	} );
96
97	if ( closeBtn ) {
98		closeBtn.addEventListener( 'click', function () {
99			setOpen( false );
100		} );
101	}
102
103	if ( newChatBtn ) {
104		newChatBtn.addEventListener( 'click', function () {
105			if ( chat ) {
106				chat.dispatchEvent( new CustomEvent( 'lexum:new-chat' ) );
107			}
108		} );
109	}
110
111	document.addEventListener( 'keydown', function ( e ) {
112		if ( ( e.key === 'Escape' || e.key === 'Esc' ) && isOpen() ) {
113			setOpen( false );
114		}
115	} );
116} )();

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.