PageSourceSearch

https://ahang.hu/wp-content/plugins/copy-the-code/includes/element…/ai-prompt-generator/script.5697f5368f.js

js ahang.hu collected 2026-09-24 09:27:51 UTC 3,033 bytes, 142 lines download raw bytes

1(function ($) {
2	const CTCAIPromptGenerator = {
3
4		/**
5		 * Init
6		 */
7		init: function () {
8			this._bind();
9			this._generate();
10		},
11
12		/**
13		 * Binds events
14		 */
15		_bind: function () {
16			$( document ).on( 'click', '.ctc-ai-generator-button', this.doCopy );
17			$( document ).on( 'input', '.ctc-ai-prompt-generator input', this.doChange );
18		},
19
20		/**
21		 * Copy text to clipboard using CTC CopyEngine.
22		 *
23		 * @param {string} text Text to copy.
24		 * @return {Promise<boolean>} Success status.
25		 */
26		copyToClipboard: async function ( text ) {
27			// Method 1: Use CTC CopyEngine.
28			if ( window.CTC && window.CTC.CopyEngine ) {
29				try {
30					const copyEngine = new window.CTC.CopyEngine();
31					const result = await copyEngine.execute( { value: text } );
32					if ( result.success ) {
33						return true;
34					}
35				} catch ( err ) {
36					// Fall through to fallbacks.
37				}
38			}
39
40			// Method 2: Clipboard API.
41			if ( navigator.clipboard && navigator.clipboard.writeText ) {
42				try {
43					await navigator.clipboard.writeText( text );
44					return true;
45				} catch ( err ) {
46					// Fall through.
47				}
48			}
49
50			// Method 3: execCommand fallback.
51			try {
52				const textArea = document.createElement( 'textarea' );
53				textArea.value = text;
54				textArea.style.cssText = 'position:fixed;opacity:0;pointer-events:none;';
55				document.body.appendChild( textArea );
56				textArea.select();
57				const success = document.execCommand( 'copy' );
58				document.body.removeChild( textArea );
59				return success;
60			} catch ( err ) {
61				return false;
62			}
63		},
64
65		/**
66		 * Do Change
67		 */
68		doChange: function (event) {
69			event.preventDefault();
70
71			CTCAIPromptGenerator._generate();
72		},
73
74		/**
75		 * Do Copy to Clipboard
76		 */
77		doCopy: async function (event) {
78			event.preventDefault();
79
80			const self     = $( this )
81			const parent   = self.parents( '.ctc-ai-prompt-generator' )
82			const textarea = parent.find( '.ctc-ai-prompt-generator-textarea' )
83			let text       = textarea.val() || ''
84
85			// Remove first and last new line.
86			text = text.trim();
87
88			// Copy to clipboard using CTC CopyEngine.
89			await CTCAIPromptGenerator.copyToClipboard( text );
90
91			// Copied!
92			parent.addClass( 'copied' );
93			setTimeout(
94				function () {
95					parent.removeClass( 'copied' );
96				},
97				1000
98			);
99		},
100
101		/**
102		 * Generate
103		 */
104		_generate: function () {
105			const blocks = $( '.ctc-ai-prompt-generator' )
106
107			blocks.each(
108				function() {
109					const fields   = $( this ).find( '.ctc-block-field' )
110					const textarea = $( this ).find( '.ctc-ai-prompt-generator-textarea' )
111					let markup     = ''
112
113					fields.each(
114						function() {
115							const label = $( this ).find( '.ctc-block-field-label' ).text()
116							const value = $( this ).find( 'input' ).val() || ''
117
118							if ( ! value ) {
119								  return
120							}
121
122							markup += label + ': ' + value + '\n'
123						}
124					)
125
126					textarea.val( markup )
127				}
128			)
129		}
130
131	};
132
133	/**
134	 * Initialization
135	 */
136	$(
137		function () {
138			CTCAIPromptGenerator.init();
139		}
140	);
141
142})( 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.