PageSourceSearch

https://datenschutz-generator.de/wp-content/plugins/ts-dsg/js/frontend-testercodes.js

js datenschutz-generator.de collected 2026-09-24 08:29:15 UTC 24,201 bytes, 731 lines download raw bytes

1
2
3
4
5
6/*===================================================================================    
7*
8*
9* dsg-text-mod.js - Funktionen zur Modifizierung der Inhalte
10*
11*
12====================================================================================*/
13
14jQuery(document).ready(function($) {
15
16	// console.log('frontend-testercodes.js');
17	
18
19	//Initialize
20	window.dsg_loaded_project_json_testercode = {};
21	
22	
23	/*===================================================================================    
24*
25*
26* dsg-text-mod.js - Klicks messen
27*
28*
29====================================================================================*/
30
31var dsg_testercodes_save_obj = (function() {
32	
33    // Initialize all variables
34    let clickCount = 0;
35    let highClickThreshold = 10;
36    let lowClickThreshold = 4;
37    let highTimeThreshold = 5 * 60;
38    let lowTimeThreshold = 2 * 60;
39    let clickMultiplier = 1;
40    let timeMultiplier = 1;
41    let pageLoadTime = new Date().getTime();
42    let showDialog = true;
43    let dialogCount = 0;
44    let lastDialogTime = 0;
45    let coolDownPeriod = 120; // 2 minutes
46    let remainingTime = 0;
47    let remainingClicks = 0;
48 
49    function startCheck() {
50        // Remove any existing click handlers
51        // $(".dsg-module, input, textarea, .mce-tinymce").off("click");
52
53        // Increment click counter and log the remaining time and clicks on each click
54        $(".dsg-module, input, textarea, .mce-tinymce").on("click", function() {
55            clickCount++;
56            // console.log(`Remaining time: ${remainingTime.toFixed(3)} seconds, Remaining clicks: ${remainingClicks}`);
57        });
58
59        // Check conditions every second
60        setInterval(checkConditions, 1000);
61    }
62
63    function checkConditions() {
64        // Calculate duration the user spent on the website in seconds
65        let duration = (new Date().getTime() - pageLoadTime) / 1000;
66        // Calculate time since the last dialog
67        let timeSinceLastDialog = (new Date().getTime() - lastDialogTime) / 1000;
68        // Calculate remaining time and clicks
69        remainingTime = Math.max(highTimeThreshold * timeMultiplier - duration, 0);
70        remainingClicks = Math.max(highClickThreshold * clickMultiplier - clickCount, 0);
71
72
73        if (showDialog && (clickCount > highClickThreshold * clickMultiplier || 
74            timeSinceLastDialog > coolDownPeriod && (clickCount >= lowClickThreshold * clickMultiplier && duration >= lowTimeThreshold * timeMultiplier) || 
75            duration >= highTimeThreshold * timeMultiplier)) {
76
77            // If conditions are met, reset click counter and page load time
78            if (!$(".ui-dialog").length && !$("#dsg-drpld").length) {
79				
80			
81                clickCount = 0;
82                pageLoadTime = new Date().getTime();
83                // Execute function
84                let project_db_id = $('#dsg-cookie-header').attr('data-project_db_id');
85                
86                if ( dsg_check_premium() && project_db_id) {
87                    dsg_testercodes_save_code_dialog();
88                    // Update the last dialog time
89                    lastDialogTime = new Date().getTime();
90                }
91                
92                // Increase multipliers if they're less than 3
93                if (clickMultiplier < 3) {
94                    clickMultiplier++;
95                    timeMultiplier++;
96                }
97
98                // Increment dialog count
99                dialogCount++;
100            
101			} else {
102				lastDialogTime = new Date().getTime();
103			}
104        }
105    }
106
107    // Return startCheck function as public method
108    if (url_parameter.dsgp == undefined ) {
109        return { startCheck: startCheck, showDialog: function(value) { showDialog = value; }, getDialogCount: function() { return dialogCount; } };
110    } 
111})();
112
113if (url_parameter.dsgp === undefined ) {
114	
115	setTimeout(function() {
116		// Start the function
117		dsg_testercodes_save_obj.startCheck();
118	}, 1000);
119}
120
121
122
123//===================================================================================    
124//
125// Content PopUp
126//
127//====================================================================================
128
129
130function dsg_testercodes_save_code_dialog () {
131
132	const support_info = '(<a href="https://datenschutz-generator.de/kontakt-faq/" target="faq" title="Aufruf unserer FAQ und des Kontaktformulars im neuen Fenster">Weitere Hinweise in unserer FAQ</a>).';	
133	
134	var infotext = '<div class="dsg-entries-save-form-postinfo">Sie erhalten eine E-Mail mit bitte um Bestätigung Ihrer Anfrage. Dieses Formular können Sie jederzeit wieder aufrufen, indem Sie auf das Diskettensymbol <img src="https://datenschutz-generator.de/wp-content/plugins/ts-dsg/svg/icons/dsg-icon-104-01.svg" width="25" height="25"> oben in der Menüleiste anklicken. '+support_info+'</div>';
135		
136	var question = '<p>Möchten Sie Ihre Eingaben nicht verlieren? Bitte geben Sie hierzu Ihre E-Mail-Adresse ein.</p><p>Wir senden Ihnen anschließend einen Link zu, mit dem Sie Ihre Bearbeitung jederzeit (z.B. bei Kauf einer Lizenz oder nach Schließend des Browsers) fortsetzen können.</p><div class="dsg-entries-save-form-info"></div><div class="dsg-entries-save-form-container"><div class="dsg-entries-save-form-container-label"><label for="dsg-entries-save-form-email">Ihre E-Mailadresse:</label></div><div  class="dsg-entries-save-form-container-input"><input type="email" id="dsg-entries-save-form-email" name="email" required=""></div><div  class="dsg-entries-save-form-container-submit"><input type="submit" class="dsg-entries-save-submit" value="Speichern und Absenden" style="margin-top: 15px;">'+infotext+'</div></div>';
137
138
139
140
141
142
143    button_yes = 'Schließen';
144    button_no = 'Hinweis nicht wieder anzeigen';
145
146/*
147    var dialogButtons = [{
148        text: button_yes,
149        click: function() {
150            $(this).dialog("close");
151        }
152    }];
153	*/
154	var dialogButtons = [];
155
156    // Show the "No" button only on the second dialog
157    if (dsg_testercodes_save_obj.getDialogCount() >= 2) {
158        dialogButtons.unshift({
159            text: button_no,
160            class: 'dsg-entries-save-form-norepeat',                    
161            click: function() {
162                dsg_testercodes_save_obj.showDialog(false);
163                $(this).dialog("close");
164            }
165        });
166    }
167
168$('<div class="dsg-dialog "></div>').html(question)
169    .dialog({
170        modal: true,
171        title: 'Sichern Sie Ihre Eingaben!',
172        dialogClass: 'dsg-tester-codes-modal',
173        buttons: dialogButtons,
174        show: {
175            effect: "fadeIn",
176            duration: 500
177        },
178        open: function() {
179            $('.ui-widget-overlay').addClass('dsgusmo-overlay');
180			dsg_testercodes_display_register();
181        },            
182        close: function() {
183            $('.ui-widget-overlay').remove();
184            $(this).dialog("destroy").remove(); // This line removes the dialog
185        },
186    });
187
188}
189
190$('body').on('click', '.dsg-tester-codes-modal .ui-dialog-titlebar-close', function(e) {
191    e.preventDefault();
192    $('.ui-widget-overlay').remove();
193    $('.dsg-dialog').dialog("destroy").remove();
194
195    // Reset the pageLoadTime to current time to restart the timer
196    dsg_testercodes_save_obj.pageLoadTime = new Date().getTime(); // Ensure this variable is accessible
197});
198
199
200
201
202//===================================================================================    
203//
204// Content PopUp fern öffnen
205//
206//====================================================================================
207
208$('body').on('click', '.dsg-testcode-form-open', function() {
209
210	
211	$('.dsg-infobox-bg').fadeOut(100);
212	$('#dsg-cookie-header-infobox-wrap').fadeOut(100);
213	$('.dsg-dialog').dialog("destroy").remove();
214	$('.ui-widget-overlay').remove();
215	
216	dsg_testercodes_save_code_dialog ();
217
218}
218);
219
220//===================================================================================    
221//
222// Submit Check
223//
224//====================================================================================
225
226$('body').on('click', '.dsg-entries-save-submit', function() {
227    
228	const dialog = $('.dsg-entries-save-form-norepeat');
229    const emailInput = $('#dsg-entries-save-form-email');
230    const emailAddress = emailInput.val();
231    const emailAddressDefault = emailInput.attr('data-default');
232    const emailInfo = $('.dsg-entries-save-form-info');
233    const isValidEmail = dsg_validate_mail(emailAddress);
234
235    const displayError = (errorMessage) => {
236        emailInfo.addClass('error').removeClass('validated').html(errorMessage);
237    };
238
239    // console.log('ok sende 0' + isValidEmail);
240
241    if (emailAddress !== '' && emailAddress !== emailAddressDefault) {
242        if (isValidEmail) {
243			
244			$(this).addClass('active');
245            dsg_testercodes_save_send( emailAddress );
246			
247            // console.log('ok sende 1' + isValidEmail);
248        } else {
249            displayError(dsg_errors_text_email_invalid);
250        }
251    } else {
252        displayError(dsg_errors_text_email_missing);
253    }
254	
255	
256});
257
258
259	
260
261//===================================================================================    
262//
263// E-Mail-Addresse wurde eingegeben und geprfüft, nun Versenden
264//
265//====================================================================================
266
267function dsg_testercodes_save_send (emailAddress) {
268
269    var prj_id = "test-prj_id";
270	const emailInfo = $('.dsg-entries-save-form-info');
271	
272	project_db_id = $('#dsg-cookie-header').attr('data-project_db_id');
273	
274    var data = {
275        'action': 'dsg_ajax_testercode_email',
276        'email_address': emailAddress,
277        'category_current': category_current,
278        'project_db_id': project_db_id
279    };
280	
281	// console.dir(data);
282        
283    $.ajax({
284        url: dsg_ajax_url,
285        method: 'POST',
286        data: data,
287        success: function(response) {
288			
289			response_array = JSON.parse(response);
290			
291            // console.dir(response_array);
292			
293			if ( response_array['output_feedback'] ) {
294
295				emailInfo.html( response_array['output_feedback'] );
296			}
297			
298			if ( response_array['output_status'] === false ) {
299
300				emailInfo.addClass( "error" ).removeClass( "validated" );
301			
302			} else {
303				
304				emailInfo.addClass( "validated" ).removeClass( "error" );
305				
306			}
307			
308			$('.dsg-entries-save-submit').removeClass("active");
309			
310			//
311			dsg_testercodes_save_obj.showDialog(false);
312
313			
314        },
315        error: function(response) {
316            console.log(`dsg_testercodes_save_send failed for email address: ${emailAddress}.`);
317			$('.dsg-entries-save-submit').removeClass("active");
318        }
319    });
320}
321
322
323//===================================================================================    
324//
325// Eintrag der Übertragungsform
326//
327//====================================================================================
328
329 window.dsg_testercodes_form = function() {
330
331	if ( !$('.dsg-testercode-wrap').length && !$('body').hasClass("loaded-from-cookie") ) {
332		
333    let text_intro;
334    let text_main;
335    let text_info;
336		
337		const link_slide_start = "<a class='info-row dsg-slider-button dsg-testercode-a' data-sli
337der-id='dsg-testercode-form-inner'>";
338		const link_slide_end = "</a>";
339		
340		cookiefound = $('.button-cookie-copy-yes:visible').length;
341		
342		const support_info = '(<a href="https://datenschutz-generator.de/kontakt-faq/" target="faq" title="Aufruf unserer FAQ und des Kontaktformulars im neuen Fenster">Haben Sie weitere Fragen?</a>)';
343		
344		
345		//Test-Generator & kein Cookie gefunden
346		if ( url_parameter.dsgp === undefined && !cookiefound ) {
347			
348			text_intro = `Haben Sie einen Wiederherstellungs-Code für Ihre Eingaben im Test-Generator? ${link_slide_start}Klicken Sie dann bitte hier${link_slide_end}.`;
349			text_main = "Wenn Sie unseren Generator zuvor getestet und einen Wiederherstellungs-Code erhalten haben, dann können Sie ihn jetzt eingeben:";
350			text_info = "Hinweis: Falls Sie die Testversion des Premium-Generators genutzt haben, konnten Sie einen Wiederherstellungs-Code für Ihre Test-Eingaben anfordern. In dem Fall können Sie mit dem Wiederherstellungs-Code Ihre Eingaben hier im Testgenerator erneut laden oder nach dem Erwerb einer Lizenz in Ihr Dokument übertragen.";
351		
352		} else if ( url_parameter.dsgp !== undefined && !cookiefound ) {
353			
354			text_intro = `Haben Sie einen Wiederherstellungs-Code für Ihre Eingaben im Test-Generator? ${link_slide_start}Klicken Sie dann bitte hier${link_slide_end}.`;
355			text_main = "Wenn Sie unseren Generator schon zuvor getestet und einen Wiederherstellungs-Code erhalten haben, dann können Sie ihn jetzt eingeben:";
356			text_info = "Hinweis: Falls Sie die Testversion des Premium-Generators genutzt haben, konnten Sie einen Wiederherstellungs-Code für Ihre Test-Eingaben anfordern. In dem Fall können Sie mit dem Wiederherstellungs-Code Ihre Eingaben in Ihr Dokument übertragen.";			
357
358		} else if ( url_parameter.dsgp === undefined && cookiefound ) {
359			
360		  text_intro = `Haben Sie einen Wiederherstellungs-Code für Ihre Eingaben im Test-Generator? Dann können Sie Ihre Eingaben alternativ ${link_slide_start}auf diesem Weg laden${link_slide_end}.`;
361		  text_main = "Geben Sie den Wiederherstellungs-Code bitte ein. Sie werden vor dem Laden Ihrer Eingaben um Bestätigung gebeten:";
362		  text_info = "Hinweis: Falls Sie die Testversion des Premium-Generators genutzt haben, wurden Ihre Eingaben in einem Cookie gespeichert, damit sie nicht verloren gehen. Zusätzlich konnten Sie einen speziellen Wiederherstellungs-Code anfordern, da ein Cookie schnell gelöscht werden kann. In Ihrem Fall haben wir ein Cookie mit Ihrer letzten Speicherung gefunden. Sie können dennoch Eingaben mittels eines Wiederherstellungs-Codes laden, z.B. wenn diese von einem anderen Tag sind.";
363		
364		} else if ( url_parameter.dsgp !== undefined && cookiefound ) {
365			
366		  text_intro = `Haben Sie einen Wiederherstellungs-Code für Ihre Eingaben im Test-Generator? ${link_slide_start}Klicken Sie dann bitte hier${link_slide_end}.`;
367		  text_main = "Wenn Sie unseren Generator zuvor getestet und einen Code für Ihre Testeinträge erhalten haben, dann können Sie den Code jetzt eingeben";
368		  text_info = "Falls Sie die Testversion des Premium-Generators genutzt haben, wurden Ihre Eingaben in einem Cookie gespeichert, damit sie nicht verloren gehen. Zusätzlich konnten Sie einen speziellen Wiederherstellungs-Code anfordern, da ein Cookie schnell gelöscht werden kann. In Ihrem Fall haben wir ein Cookie mit Ihrer letzten Speicherung gefunden. Sie können dennoch Eingaben mittels eines Wiederherstellungs-Codes in Ihr Dokument übertragen, z.B. wenn diese von einem anderen Tag sind.";
369		
370		}
371		
372		if ( text_intro && text_main && text_info ) {
373			
374			
375
376		
377			form_out = `
378			<div class='dsg-testercode-wrap'>
379			  
380				<p>
381				  ${text_intro}
382				</p>
383			  </div>
384			  <div class='dsg-slider dsg-testercode-slider-content' data-slider-id='dsg-testercode-form-inner'>
385				<p>
386				${text_main}
387				</p>
388				<p class='dsg-testercode-info'></p>
389				<p class='dsg-testercode-form'>
390					<span class='dsg-testercode-text'>Ihr Wiederherstellungs-Code:</span>
391					<span class='dsg-testercode-input-wrap'>
392					  <input id='dsg-testercode-input' class='dsg-testercode-input' name='dsg-testercode-input' value=''>
393					  <input type="submit" class='dsg-testercode-submit' value='Suchen'></button>
394					</span>
395				</p>
396				<p class='dsg-testercode-postinfo'>
397				  ${text_info} ${support_info}
398				</p>
399			</div>`;
400
401
402		} else {
403			
404			form_out = "";
405			
406		}
407
408	
409	} else {
410		
411		form_out = "";
412		
413	}
414	return form_out;
415}
416
417
418
419
420//===================================================================================    
421//
422// Einen Wiederherstellungscode in der Übertragungsform suchen
423//
424//====================================================================================
425
426$('body').off('click', '.dsg-testercode-submit').on('click', '.dsg-testercode-submit', function() {
427  dsg_testercodes_form_search_prepare();
428});
429
430dsg_testercodes_form_search_prepare = function() {
431  let code_in = $('#dsg-testercode-input').val();
432  let error_message = "";
433
434  if ( code_in == "" ) { 
435    error_message = "Bitte geben Sie einen Wiederherstellungs-Code ein.";
436  } else if (isNaN(code_in)) { 
437    error_message = "Der Wiederherstellungs-Code darf nur aus Zahlen bestehen.";
438  } else if (code_in.length < 8) {
439    error_message = `Der Wiederherstellungs-Code muss mindestens achtstellig sein. Der eingegebene Code hat ${code_in.length === 1 ? 'eine Stelle' : code_in.length + ' Stellen'}.`;
440  } else if (code_in.length > 10) {
441    error_message = `Der Wiederherstellungs-Code darf maximal zehnstellig sein. Der eingegebene Code hat ${code_in.length} Stellen.`;
442  } 
443  
444  if (error_message) {
445	  
446    $('.dsg-testercode-info').html(error_message);
447    $('.dsg-testercode-info').addClass('red').removeClass('green');
448	
449  } else {
450	  
451    $('.dsg-testercode-info').removeClass('red').addClass('green');
452    $('.dsg-testercode-info').html("Bitte warten, Ihre Eingaben werden gesucht.");
453	
454	$('.dsg-testercode-submit').addClass("active");
455	dsg_testercodes_form_search( code_in );
456	
457  }
458}
459
460
461//===================================================================================    
462//
463// Code in DB suchen
464//
465//====================================================================================
466
467function dsg_testercodes_form_search( code_in ) {
468	
469    console.log(`code ist ok: ${code_in}`);
470
471	
472    var data = {
473        'action': 'dsg_ajax_testercode_search',
474        'code_in': code_in.trim(),
475        'category': category_current,
476    };
477        
478    $.ajax({
479        url: dsg_ajax_url,
480        method: 'POST',
481        data: data,
482        success: function(response) {
483			
484			response_array = JSON.parse(response);
485			
486            console.dir(response_array);
487			
488			$('.dsg-testercode-submit').removeClass("active");
489			
490			
491			if ( response_array['message'] ) {
492
493				$('.dsg-testercode-info').html( response_array['message'] );
494			}		
495
496			if ( response_array['status'] ) {
497				
498				$('.dsg-testercode-info').addClass( "green" ).removeClass( "red" );
499				
500				const transfer_form = '';
501			
502			} else {
503				
504				$('.dsg-testercode-info').addClass( "red" ).removeClass( "green" );
505			}
506			
507			
508			if ( response_array['status'] && response_array['timestamp']  && response_array['project_json'] ) {
509				
510				//Zwischenspeichern der elemente
511				dsg_loaded_project_json_testercode = response_array['project_json'];
512				
513				transfer_form =  dsg_testercodes_form_transfer( response_array['timestamp']);
514								
515				
516				$('.dsg-testercode-info').append( transfer_form);
517
518			}	
519
520			
521        },
522        error: function(response) {
523            console.log(`dsg_testercodes_form_search failed for code_in: ${code_in}.`);
524			$('.dsg-testercode-submit').removeClass("active");
525        }
526    });
527
528
529	
530}
531
532
533//===================================================================================    
534//
535// Gefundenes Projekt - Transferform ausgeben
536//
537//====================================================================================
538function dsg_testercodes_form_transfer ( timestamp_testercode ) {
539
540	time_array = window.dsg_timestamp_to_date( timestamp_testercode );
541	var date_formated = time_array[0];
542	var time_formated = time_array[1];
543	
544	text_trans_intro = 'Eingaben vom '+date_formated+' um '+time_formated+'.';
545	
546	transfer_form = `
547	<p class='dsg-testercode-trans-wrap'>
548		<span class='dsg-testercode-trans-intro'>
549		  ${text_trans_intro}
550		</span>
551		<span class='dsg-testercode-trans-submit'>
552		  <input type="submit" class="dsg-testercode-submit-transfer" value="Eingaben &uuml;bertragen">
553		</span>				
554	</p>`;
555	
556	console.log("c: "+timestamp_testercode);
557	console.dir(time_array);
558	
559	//Transfer Dialog nicht anzeigen
560	dsg_testercodes_save_obj?.showDialog?.call(false);
561	
562	return transfer_form;
563}	
564
565//===================================================================================    
566//
567// Kopiervorgang/ Transfer der Speicherung
568//
569//====================================================================================
570
571	
572    $('body').on('click', '.dsg-testercode-submit-transfer', function() {
573
574			console.dir(dsg_loaded_project_json_testercode);
575
576		if ( typeof dsg_loaded_project_json_testercode !== "undefined" ) {
577					
578			$(".dsg-testercode-submit-transfer").val('Eingaben werden geladen').attr("value",'Eingaben werden geladen').addClass('active');
579
580			setTimeout(function() {
581				
582				// Einträge am Ende vornehmen
583				//dsg_load_enter_values_init nicht nutzen, da der cookieload(aka testercodes) auch mit dsgp funktionieren soll
584				window.dsg_load_enter_values (dsg_loaded_project_json_testercode, "", "");
585					
586				//Transfer Dialog nicht anzeigen
587				dsg_testercodes_save_obj?.showDialog?.call(false);
588					
589				//wenn dsgp, dann den transfer in ein projekt kennzeichnen
590				if (url_parameter.dsgp != undefined && dsg_loaded_project_json_testercode["projectid"] != undefined) {
591					
592					dsg_testercodes_transfer_save ( dsg_loaded_project_json_testercode["projectid"], url_parameter.dsgp );
593					
594				}
595
596				//Ladehinweis für Code in Dialogen nicht anzeigen
597				$('body').addClass("loaded-from-cookie");								
598					
599				$("#dsg-drpld").removeClass('cookiemodal');					
600
601
602				
603				setTimeout(function() {
604
605					$(".dsg-testercode-submit-transfer").removeClass('active');
606		
607
608					//Wenn fertig, Ladeanzeige beenden - Auße wenn cookie-speicherung, dann anfragen, ob übernehmen
609					dsg_load_projects_dialog( 'dropped affirmative' , 'Eingaben wurden erfolgreich geladen', "Ihre Eingaben wurden erfolgreich geladen, Sie können mit der Bearbeitung des Dokuments fortfahren." );			
610
611				}, 1000);		
612
613		}, 2000);
614
615			
616			
617		} else {
618				
619				const support_info = '(<a href="https://datenschutz-generator.de/kontakt-faq/" target="faq" title="Aufruf unserer FAQ und des Kontaktformulars im neuen Fenster">Ansonsten sagen Sie uns bitte Bescheid</a> und teilen uns dabei den Wiederherstellungs-Code mit). Danke!';
620			
621				$('.dsg-testercode-info').html( "Es ist leider etwas schief gelaufen. Bitte geben Sie den Code noch einmal ein." );
622		}		
623
624			if ( response_array['status'] ) {
625				
626			
627			}
628		
629
630    });		
631
632
633//===================================================================================    
634//
635// Anzeigevorgang speichern
636//
637//====================================================================================
638	
639
640function dsg_testercodes_display_register () {
641	
642	if ( !$('body').hasClass('dsg-testercodes-display-registered') ) {
643			
644		
645		var data = {
646			'action': 'dsg_testercodes_display_register',
647			'blanko_value': 'Platzhalter',
648		};
649		
650		// console.log("dsg_testercodes_display_register");
651		// console.dir(data);
652			
653		$.ajax({
654			url: dsg_ajax_url,
655			method: 'POST',
656			data: data,
657			success: function(response) {
658				
659				response_array = JSON.parse(response);
660				console.dir(response_array);
661				
662				$('body').addClass('dsg-testercodes-display-registered');
663
664			},
665			error: function(response) {
666				console.log(`dsg_testercodes_display_register failed.`);
667			}
668		});
669
670	}
671	
672}
673
674
675//===================================================================================    
676//
677// Kopiervorgang speichern
678//
679//====================================================================================
680
681	
682
683function dsg_testercodes_transfer_save ( project_source_id, project_target_save_id ) {
684	
685	
686    var data = {
687        'action': 'dsg_ajax_testercode_transfer_save',
688        'project_source_id': project_source_id,
689        'project_target_save_id': project_target_save_id,
690
691    };
692	
693	console.dir(data);
694        
695    $.ajax({
696        url: dsg_ajax_url,
697        method: 'POST',
698        data: data,
699        success: function(response) {
700			
701			response_array = JSON.parse(response);
702			
703            console.dir(response_array);
704
705
706			
707        },
708        error: function(response) {
709            console.log(`dsg_testercodes_transfer_save failed for code_in: ${code_in}.`);
710			$('.dsg-testercode-submit').removeClass("active");
711        }
712    });
713
714
715	
716}
717
718
719
720
721//===================================================================================    
722//
723// /jQ
724//
725//
726//====================================================================================
727
728
729
730
731});

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.