PageSourceSearch

https://www.kinx.net/wp-content/plugins/kboard/template/js/script.js

js kinx.net collected 2026-10-01 10:42:31 UTC 22,615 bytes, 645 lines download raw bytes

1/**
2 * @author https://www.cosmosfarm.com
3 */
4
5/**
6 * inViewport jQuery plugin by Roko C.B.
7 * http://stackoverflow.com/a/26831113/383904 Returns a callback function with
8 * an argument holding the current amount of px an element is visible in
9 * viewport (The min returned value is 0 (element outside of viewport)
10 */
11(function($, win){
12	$.fn.kboardViewport = function(cb){
13		return this.each(function(i, el){
14			function visPx(){
15				var elH = $(el).outerHeight(), H = $(win).height(), r = el.getBoundingClientRect(), t = r.top, b = r.bottom;
16				return cb.call(el, Math.max(0, t > 0 ? Math.min(elH, H - t) : (b < H ? b : H)));
17			}
18			visPx();
19			$(win).on("resize scroll", visPx);
20		});
21	};
22}(jQuery, window));
23
24var kboard_ajax_lock = false;
25if(typeof kboard_current == 'undefined') var kboard_current = {};
26if(typeof window.kboard_editor_runtime == 'undefined') window.kboard_editor_runtime = null;
27
28jQuery(document).ready(function(){
29	var kboard_mod = kboard_current.mod ? kboard_current.mod : jQuery('input[name=mod]', '.kboard-form').val();
30	if(kboard_mod == 'editor'){
31		jQuery('.kboard-tree-category-wrap').each(function(){
32			var wrap = jQuery(this);
33			if(wrap.data('use-tree-category') == 'yes' || kboard_current.use_tree_category == 'yes'){
34				kboard_tree_category_parents(wrap);
35			}
36		});
37		
38		if(kboard_current.use_editor == 'snote'){ // summernote
39			jQuery('.summernote').each(function(){
40				var height = parseInt(jQuery(this).height());
41				var placeholder = jQuery(this).attr('placeholder');
42				var lang = 'en-US';
43				
44				if(kboard_settings.locale == 'ko_KR'){
45					lang = 'ko-KR';
46				}
47				else if(kboard_settings.locale == 'ja'){
48					lang = 'ja-JP';
49				}
50				
51				jQuery(this).summernote({
52					toolbar: [
53						['style', ['style']],
54						['fontsize', ['fontsize']],
55						['font', ['bold', 'italic', 'underline', 'clear']],
56						['fontname', ['fontname']],
57						['color', ['color']],
58						['para', ['ul', 'ol', 'paragraph']],
59						['height', ['height']],
60						['table', ['table']],
61						['insert', ['link', 'video', 'hr', 'media']],
62						['view', ['fullscreen', 'codeview']],
63						['help', ['help']]
64					],
65					buttons: {
66						media: function (context) {
67							var ui = jQuery.summernote.ui;
68							var button = ui.button({
69								contents: '<i class="note-icon-picture"></i>',
70								tooltip: '이미지 입력',
71								click: function () {
72									kboard_editor_open_media();
73								}
74							});
75							return button.render();
76						}
77					},
78					disableDragAndDrop: true,
79					fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana', 'Nanum Gothic', 'Malgun Gothic', 'Noto Sans KR', 'Apple SD Gothic Neo'],
80					fontNamesIgnoreCheck: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana', 'Nanum Gothic', 'Malgun Gothic', 'Noto Sans KR', 'Apple SD Gothic Neo'],
81					fontSizes: ['8','9','10','11','12','13','14','15','16','17','18','19','20','24','30','36','48','64','82','150'],
82					lang: lang,
83					height: height,
84					placeholder: placeholder
85				});
86			});
87		}
88
89		kboard_editor_mount_scaffold();
90	}
91});
92
93function kboard_editor_mount_scaffold(){
94	var adapter = kboard_current.use_editor;
95	var mountEditor = function(){
96		try{
97			window.kboard_editor_runtime = window.KBoardEditorBootstrap.mount({
98				adapter: adapter,
99				selector: kboard_current.editor_root_selector ? kboard_current.editor_root_selector : '#kboard-editor-root',
100				textareaId: kboard_current.editor_textarea_id ? kboard_current.editor_textarea_id : 'kboard_content',
101				formSelector: '.kboard-form'
102			});
103		}
104		catch(error){
105			window.kboard_editor_runtime = null;
106			if(window.console && console.error){
107				console.error('[KBoard] Failed to mount editor scaffold:', error);
108			}
109			jQuery('#kboard_content').show();
110		}
111
112		return window.kboard_editor_runtime;
113	};
114
115	if(adapter != 'tiptap' && adapter != 'editorjs'){
116		return null;
117	}
118	if(window.kboard_editor_runtime && window.kboard_editor_runtime.adapter){
119		return window.kboard_editor_runtime;
120	}
121	if(typeof window.KBoardEditorBootstrap == 'undefined' || !window.KBoardEditorBootstrap.mount){
122		return null;
123	}
124
125	if(adapter == 'tiptap' && window.kboardTipTapReady && typeof window.kboardTipTapReady.then === 'function'){
126		window.kboardTipTapReady.then(function(){
127			mountEditor();
128		}).catch(function(error){
129			if(window.console && console.error){
130				console.error('[KBoard] TipTap runtime failed:', error);
131			}
132			jQuery('#kboard_content').show();
133		});
134		return null;
135	}
136
137	return mountEditor();
138}
139
140function kboard_editor_sync_content(form){
141	var runtime = window.kboard_editor_runtime;
142	var textarea = jQuery('#kboard_content', form).length ? jQuery('#kboard_content', form) : jQuery('#kboard_content');
143
144	if(runtime && runtime.adapter && typeof runtime.adapter.getHTML === 'function' && textarea.length){
145		textarea.val(runtime.adapter.getHTML());
146	}
147
148	return textarea.length ? textarea.val() : '';
149}
150
151function kboard_tree_category_search(index, value, element){
152	var length = jQuery('.kboard-search-option-wrap').length;
153	var tree_category_index;
154	var form = null;
155
156	if(element){
157		form = jQuery(element).closest('form');
158	}
159
160	// index에 tree_category_ 접두사가 포함되어 있는지 확인
161	var search_index = (index.toString().indexOf('tree_category_') === -1) ? 'tree_category_' + index : index;
162	tree_category_index = parseInt(search_index.replace('tree_category_', '')) + 1;
163
164	if(value){
165		if(form){
166			jQuery('input[name="kboard_search_option['+search_index+'][value]"]', form).val(value);
167		}
168		else{
169			jQuery('input[name="kboard_search_option['+search_index+'][value]"]').val(value);
170		}
171	}
172	else{
173		if(form){
174			jQuery('input[name="kboard_search_option['+search_index+'][value]"]', form).val('');
175		}
176		else{
177			jQuery('input[name="kboard_search_option['+search_index+'][value]"]').val('');
178		}
179	}
180	
181	for(var i=tree_category_index; i<=length; i++){
182		if(form){
183			jQuery('.kboard-search-option-wrap-'+i, form).remove();
184		}
185		else{
186			jQuery('.kboard-search-option-wrap-'+i).remove();
187		}
188	}
189	
190	if(form){
191		form.submit();
192	}
193	else if(kboard_current.board_id){
194		jQuery('#kboard-tree-category-search-form-'+kboard_current.board_id).submit();
195	}
196	
197	return false;
198}
199
200function kboard_tree_category_parents(wrap){
201	if(!wrap) wrap = jQuery('.kboard-tree-category-wrap');
202	
203	var use_tree_category = wrap.data('use-tree-category') ? wrap.data('use-tree-category') : kboard_current.use_tree_category;
204	var tree_category = wrap.data('tree-category') ? wrap.data('tree-category') : kboard_current.tree_category;
205	var board_id = wrap.data('board-id') ? wrap.data('board-id') : kboard_current.board_id;
206	
207	if(use_tree_category == 'yes' || use_tree_category === true){
208		var tree_category_name;
209		var tree_category_index = 1;
210		
211		tree_category_name = 'kboard_option_tree_category_';
212		
213		wrap.prepend('<select id="kboard-tree-category-'+tree_category_index+'" class="kboard-tree-category kboard-tree-category-'+tree_category_index+'"></select>');
214		jQuery('#kboard-tree-category-'+tree_category_index, wrap).append('<option value="">'+kboard_localize_strings.category+' '+kboard_localize_strings.select+'<
214/option>');
215		jQuery('#kboard-tree-category-'+tree_category_index, wrap).after('<input type="hidden" id="'+tree_category_name+tree_category_index+'" name="'+tree_category_name+tree_category_index+'" class="kboard-tree-category-hidden-'+tree_category_index+'">');
216		
217		jQuery('#kboard-tree-category-'+tree_category_index, wrap).change(function(){
218			kboard_tree_category_children(this.value, tree_category_index, tree_category_name, wrap);
219			jQuery('#kboard-tree-category-search-form-'+board_id).submit();
220		});
221		
222		jQuery.each(tree_category, function(index, element){
223			if(!element.parent_id){
224				jQuery('#kboard-tree-category-'+tree_category_index, wrap).append('<option value="'+element.id+'">'+element.category_name+'</option>');
225			}
226		});
227
228		kboard_tree_category_selected(tree_category_index, tree_category_name, wrap);
229	}
230}
231
232function kboard_tree_category_children(category_id, tree_category_index, tree_category_name, wrap){
233	if(!wrap) wrap = jQuery('.kboard-tree-category-wrap');
234	
235	var tree_category = wrap.data('tree-category') ? wrap.data('tree-category') : kboard_current.tree_category;
236	var board_id = wrap.data('board-id') ? wrap.data('board-id') : kboard_current.board_id;
237	
238	var length = jQuery('.kboard-tree-category', wrap).length;
239	var check = 0;
240	
241	for(var i=tree_category_index+1; i<=length; i++){
242		jQuery('.kboard-tree-category-'+i, wrap).remove();
243		jQuery('.kboard-tree-category-hidden-'+i, wrap).remove();
244	}
245	
246	jQuery.each(tree_category, function(index, element){
247		if(jQuery('#kboard-tree-category-'+tree_category_index, wrap).val() == element.id){
248			jQuery('#'+tree_category_name+tree_category_index, wrap).val(element.category_name);
249		}
250	});
251	
252	if(jQuery('#kboard-tree-category-'+tree_category_index, wrap).val()){
253		jQuery.each(tree_category, function(index, element){
254			if(category_id === element.parent_id){
255				if(check==0){
256					jQuery('#kboard-tree-category-'+tree_category_index, wrap).after('<select id="kboard-tree-category-'+(tree_category_index+1)+'" class="kboard-tree-category kboard-tree-category-'+(tree_category_index+1)+'"></select>');
257					jQuery('#kboard-tree-category-'+(tree_category_index+1), wrap).append('<option value="">'+kboard_localize_strings.category+' '+kboard_localize_strings.select+'</option>');
258					
259					jQuery('#kboard-tree-category-'+(tree_category_index+1), wrap).after('<input type="hidden" id="'+tree_category_name+(tree_category_index+1)+'" name="'+tree_category_name+(tree_category_index+1)+'" class="kboard-tree-category-hidden-'+(tree_category_index+1)+'">');
260					
261					jQuery('#kboard-tree-category-'+(tree_category_index+1), wrap).change(function(){
262						kboard_tree_category_children(this.value, (tree_category_index+1), tree_category_name, wrap);
263						jQuery('#kboard-tree-category-search-form-'+board_id).submit();
264					});
265				}
266				check++;
267				jQuery('#kboard-tree-category-'+(tree_category_index+1), wrap).append('<option value="'+element.id+'">'+element.category_name+'</option>');
268			}
269		});
270		kboard_tree_category_selected(tree_category_index+1, tree_category_name, wrap);
271	}
272	else{
273		for(var i=tree_category_index; i<=length; i++){
274			jQuery('.kboard-tree-category-hidden-'+i, wrap).val('');
275			jQuery('.kboard-tree-category-hidden-'+(i+1), wrap).remove();
276		}
277	}
278	
279	if(jQuery('.kboard-tree-category-search', wrap).length){
280		jQuery('input[name="kboard_search_option[tree_category_'+tree_category_index+'][value]"', wrap).val(jQuery('#'+tree_category_name+tree_category_index, wrap).val());
281		jQuery('input[name="kboard_search_option[tree_category_'+tree_category_index+'][key]"', wrap).val('tree_category_'+tree_category_index);
282	}
283}
284
285function kboard_tree_category_selected(tree_category_index, tree_category_name, wrap){
286	if(!wrap) wrap = jQuery('.kboard-tree-category-wrap');
287	
288	var check = jQuery('#tree-category-check-'+tree_category_index, wrap.parent()).val();
289	
290	if(check){
291		jQuery('#kboard-tree-category-'+tree_category_index+' option', wrap).each(function(index, element){
292			if(jQuery(element).text() == check){
293				jQuery(element).attr('selected', 'selected');
294				kboard_tree_category_children(this.value, tree_category_index, tree_category_name, wrap);
295			}
296		});
297	}
298	return false;
299}
300
301function kboard_editor_open_media(){
302	var w = 900;
303	var h = 500;
304	var media_popup_url = kboard_current.add_media_url;
305	
306	if(kboard_current.board_id){
307		if(jQuery('#kboard_media_wrapper').length){
308			jQuery('#kboard_media_wrapper').show();
309			jQuery('#kboard_media_wrapper').html(jQuery('<iframe frameborder="0"></iframe>').attr('src', media_popup_url));
310			jQuery('#kboard_media_background').show();
311		}
312		else{
313			var wrapper = jQuery('<div id="kboard_media_wrapper"></div>');
314			var background = jQuery('<div id="kboard_media_background"></div>').css({opacity:'0.5'}).click(function(){
315				kboard_media_close();
316			});
317			
318			function init_window_size(){
319				if(window.innerWidth <= 900){
320					wrapper.css({left:0, top:0, margin:'10px', width:(window.innerWidth-20), height:(window.innerHeight-20)});
321				}
322				else{
323					wrapper.css({left:'50%', top:'50%', margin:0, 'margin-left':(w/2)*-1, 'margin-top':(h/2)*-1, width:w, height:h});
324				}
325			}
326			init_window_size();
327			jQuery(window).resize(init_window_size);
328			
329			wrapper.html(jQuery('<iframe frameborder="0"></iframe>').attr('src', media_popup_url));
330			jQuery('body').append(background);
331			jQuery('body').append(wrapper);
332			
333			if(!jQuery('input[name="media_group"]').filter(function(){return this.value==kboard_settings.media_group}).length){
334				jQuery('[name="board_id"]').parents('form').append(jQuery('<input type="hidden" name="media_group">').val(kboard_settings.media_group));
335			}
336		}
337	}
338}
339
340function kboard_editor_insert_media(url){
341	if(window.kboard_editor_runtime && window.kboard_editor_runtime.adapter && typeof window.kboard_editor_runtime.adapter.insertMedia == 'function'){
342		window.kboard_editor_runtime.adapter.insertMedia(url);
343	}
344	else if(kboard_current.use_editor == 'snote'){ // summernote
345		jQuery('#kboard_content').summernote('editor.saveRange');
346		jQuery('#kboard_content').summernote('editor.restoreRange');
347		jQuery('#kboard_content').summernote('editor.focus');
348		jQuery('#kboard_content').summernote('editor.pasteHTML', "<img src=\""+url+"\" alt=\"\">");
349	}
350	else if(typeof tinyMCE != 'undefined' && tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden()){
351		tinyMCE.activeEditor.execCommand('mceInsertContent', false, "<img id=\"last_kboard_media_content\" src=\""+url+"\" alt=\"\">");
352		tinyMCE.activeEditor.focus();
353		tinyMCE.activeEditor.selection.select(tinyMCE.activeEditor.dom.select('#last_kboard_media_content')[0], true);
354		tinyMCE.activeEditor.selection.collapse(false);
355		tinyMCE.activeEditor.dom.setAttrib('last_kboard_media_content', 'id', '');
356	}
357	else if(jQuery('#kboard_content').length){
358		jQuery('#kboard_content').val(function(index, value){
359			return value + (!value?'':' ') + "<img src=\""+url+"\" alt=\"\">";
360		});
361	}
362}
363
364function kboard_media_close(){
365	jQuery('#kboard_media_wrapper').hide();
366	jQuery('#kboard_media_background').hide();
367}
368
369function kboard_document_print(url){
370	window.open(url, 'kboard_document_print');
371	return false;
372}
373
374function kboard_document_like(button, callback){
375	if(!kboard_ajax_lock){
376		kboard_ajax_lock = true;
377		jQuery.post(kboard_settings.ajax_url, {'action':'kboard_document_like', 'document_uid':jQuery(button).data('uid'), 'security':kboard_settings.ajax_security}, function(res){
378			kboard_ajax_lock = false;
379			if(typeof callback === 'function'){
380				callback(res);
381			}
382			else{
383				if(res.result == 'error'){
384					alert(res.message);
385				}
386				else{
387					jQuery('.kboard-document-like-count', button).text(res.data.like);
388				}
389			}
390		});
391	}
392	else{
393		alert(kboard_localize_strings.please_wait);
394	}
395	return false;
396}
397
398function kboard_document_unlike(button, callback){
399	if(!kboard_ajax_lock){
400		kboard_ajax_lock = true;
401		jQuery.post(kboard_settings.ajax_url, {'action':'kboard_document_unlike', 'document_uid':jQuery(button).data('uid'), 'security':kboard_settings.ajax_security}, function(res){
402			kboard_ajax_lock = false;
403			if(typeof callback === 'function'){
404				callback(res);
405			}
406			else{
407				if(res.result == 'error'){
408					alert(res.message);
409				}
410				else{
411					jQuery('.kboard-document-unlike-count', button).text(res.data.unlike);
412				}
413			}
414		});
415	}
416	else{
417		alert(kboard_localize_strings.please_wait);
418	}
419	return false;
420}
421
422function kboard_comment_like(button, callback){
423	if(!kboard_ajax_lock){
424		kboard_ajax_lock = true;
425		jQuery.post(kboard_settings.ajax_url, {'action':'kboard_comment_like', 'comment_uid':jQuery(button).data('uid'), 'security':kboard_settings.ajax_security}, function(res){
426			kboard_ajax_lock = false;
427			if(typeof callback === 'function'){
428				callback(res);
429			}
430			else{
431				if(res.result == 'error'){
432					alert(res.message);
433				}
434				else{
435					jQuery('.kboard-comment-like-count', button).text(res.data.like);
436				}
437			}
438		});
439	}
440	else{
441		alert(kboard_localize_strings.please_wait);
442	}
443	return false;
444}
445
446function kboard_comment_unlike(button, callback){
447	if(!kboard_ajax_lock){
448		kboard_ajax_lock = true;
449		jQuery.post(kboard_settings.ajax_url, {'action':'kboard_comment_unlike', 'comment_uid':jQuery(button).data('uid'), 'security':kboard_settings.ajax_security}, function(res){
450			kboard_ajax_lock = false;
451			if(typeof callback === 'function'){
452				callback(res);
453			}
454			else{
455				if(res.result == 'error'){
456					alert(res.message);
457				}
458				else{
459					jQuery('.kboard-comment-unlike-count', button).text(res.data.unlike);
460				}
461			}
462		});
463	}
464	else{
465		alert(kboard_localize_strings.please_wait);
466	}
467	return false;
468}
469
470function kboard_fields_validation(form, callback){
471	jQuery('.kboard-attr-row.required', form).each(function(index, element){
472		var required;
473		
474		if(jQuery(element).hasClass('kboard-attr-content')){
475			if(kboard_current.use_editor == 'yes'){
476				if(jQuery('#wp-kboard_content-wrap').hasClass('tmce-active')){
477					jQuery('#kboard_content').val(tinymce.get('kboard_content').getContent());
478				}
479			}
480			else if(kboard_current.use_editor == 'tiptap' || kboard_current.use_editor == 'editorjs'){
481				kboard_editor_sync_content(form);
482			}
483			required = jQuery('#kboard_content');
484		}
485		else{
486			required = jQuery(element).find('.required');
487		}
488		
489		if(jQuery(required).is(':checkbox') || jQuery(required).is(':radio')){
490			if(jQuery(element).find('.required:checked').length == 0){
491				alert(kboard_localize_strings.required.replace('%s', jQuery(element).find('.field-name').text()));
492				callback(jQuery(required).eq(0));
493				return false;
494			}
495		}
496		else if(jQuery(required).val() == 'default' || !jQuery(required).val()){
497			if(jQuery(element).hasClass('kboard-attr-address')){
498				if(!jQuery('.kboard-row-postcode input').val() || !jQuery('.kboard-row-address-1 
498input').val()){
499					alert(kboard_localize_strings.required.replace('%s', jQuery(element).find('.field-name').text()));
500					callback(required);
501					return false;
502				}
503				else{
504					return true;
505				}
506			}
507			else if(jQuery(element).hasClass('kboard-attr-file')){
508				if(jQuery('input[name="'+jQuery(element).children('.attr-value').children().attr('name')+'"]').val() == ''){
509					alert(kboard_localize_strings.required.replace('%s', jQuery(element).find('.field-name').text()));
510					callback(required);
511					return false;
512				}
513				else{
514					return true;
515				}
516			}
517			else{
518				alert(kboard_localize_strings.required.replace('%s', jQuery(element).find('.field-name').text()));
519				callback(required);
520				return false;
521			}
522		}
523	});
524}
525
526function kboard_content_update(content_uid, data, callback){
527	if(!kboard_ajax_lock){
528		kboard_ajax_lock = true;
529		jQuery.post(kboard_settings.ajax_url, {'action':'kboard_content_update', 'content_uid':content_uid, 'data':data, 'security':kboard_settings.ajax_security}, function(res){
530			kboard_ajax_lock = false;
531			if(typeof callback === 'function'){
532				callback(res);
533			}
534		});
535	}
536	else{
537		alert(kboard_localize_strings.please_wait);
538	}
539	return false;
540}
541
542function kboard_ajax_builder(args, callback){
543	if(!kboard_ajax_lock){
544		kboard_ajax_lock = true;
545		var callback2 = (typeof callback === 'function') ? callback : args['callback'];
546		args['action'] = 'kboard_ajax_builder';
547		args['callback'] = '';
548		args['security'] = kboard_settings.ajax_security;
549		jQuery.get(kboard_settings.ajax_url, args, function(res){
550			kboard_ajax_lock = false;
551			if(typeof callback2 === 'function'){
552				callback2(res);
553			}
554		});
555	}
556	else{
557		alert(kboard_localize_strings.please_wait);
558	}
559	return false;
560}
561
562function kboard_recaptcha_v3_token(form, callback){
563	var $form = jQuery(form);
564	var $recaptcha = jQuery('.kboard-recaptcha-v3', $form).first();
565	if(!$recaptcha.length){
566		callback(false);
567		return;
568	}
569	
570	var siteKey = $recaptcha.data('sitekey');
571	var action = $recaptcha.data('action') || 'kboard_submit';
572	var $token = jQuery('input[name=g-recaptcha-response]', $form).first();
573	
574	if(!siteKey || !$token.length){
575		callback(false);
576		return;
577	}
578	
579	if(typeof grecaptcha === 'undefined' || !grecaptcha.execute){
580		callback(false);
581		return;
582	}
583	
584	grecaptcha.ready(function(){
585		grecaptcha.execute(siteKey, {action: action}).then(function(token){
586			$token.val(token);
587			callback(true);
588		}, function(){
589			callback(false);
590		});
591	});
592}
593
594document.addEventListener('submit', function(event){
595	var form = event.target;
596	if(!form || !form.querySelector || !form.querySelector('.kboard-recaptcha-v3')){
597		return;
598	}
599	if(form.dataset.kboardRecaptchaV3Ready == '1'){
600		form.dataset.kboardRecaptchaV3Ready = '';
601		return;
602	}
603	if(form.dataset.kboardRecaptchaV3Loading == '1'){
604		event.preventDefault();
605		if(event.stopImmediatePropagation){
606			event.stopImmediatePropagation();
607		}
608		event.stopPropagation();
609		return;
610	}
611	
612	event.preventDefault();
613	if(event.stopImmediatePropagation){
614		event.stopImmediatePropagation();
615	}
616	event.stopPropagation();
617	form.dataset.kboardRecaptchaV3Loading = '1';
618	
619	kboard_recaptcha_v3_token(form, function(success){
620		form.dataset.kboardRecaptchaV3Loading = '';
621		if(success){
622			form.dataset.kboardRecaptchaV3Ready = '1';
623			if(typeof form.requestSubmit === 'function'){
624				form.requestSubmit();
625			}
626			else{
627				var submitButton = document.createElement('button');
628				submitButton.type = 'submit';
629				submitButton.style.display = 'none';
630				form.appendChild(submitButton);
631				submitButton.click();
632				form.removeChild(submitButton);
633			}
634		}
635		else{
636			jQuery(form).removeData('submitted');
637			if(typeof kboard_localize_strings !== 'undefined' && kboard_localize_strings.please_wait){
638				alert(kboard_localize_strings.please_wait);
639			}
640			else{
641				alert('Please wait.');
642			}
643		}
644	});
645}, true);

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.