mirror of
				https://github.com/markqvist/Reticulum.git
				synced 2025-10-31 06:33:56 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| function escapeRegExp(string) {
 | |
|     return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
 | |
| }
 | |
| 
 | |
| // Callback when a copy button is clicked. Will be passed the node that was clicked
 | |
| // should then grab the text and replace pieces of text that shouldn't be used in output
 | |
| export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
 | |
| 
 | |
|     var regexp;
 | |
|     var match;
 | |
| 
 | |
|     // Do we check for line continuation characters and "HERE-documents"?
 | |
|     var useLineCont = !!lineContinuationChar
 | |
|     var useHereDoc = !!hereDocDelim
 | |
| 
 | |
|     // create regexp to capture prompt and remaining line
 | |
|     if (isRegexp) {
 | |
|         regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
 | |
|     } else {
 | |
|         regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
 | |
|     }
 | |
| 
 | |
|     const outputLines = [];
 | |
|     var promptFound = false;
 | |
|     var gotLineCont = false;
 | |
|     var gotHereDoc = false;
 | |
|     const lineGotPrompt = [];
 | |
|     for (const line of textContent.split('\n')) {
 | |
|         match = line.match(regexp)
 | |
|         if (match || gotLineCont || gotHereDoc) {
 | |
|             promptFound = regexp.test(line)
 | |
|             lineGotPrompt.push(promptFound)
 | |
|             if (removePrompts && promptFound) {
 | |
|                 outputLines.push(match[2])
 | |
|             } else {
 | |
|                 outputLines.push(line)
 | |
|             }
 | |
|             gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
 | |
|             if (line.includes(hereDocDelim) & useHereDoc)
 | |
|                 gotHereDoc = !gotHereDoc
 | |
|         } else if (!onlyCopyPromptLines) {
 | |
|             outputLines.push(line)
 | |
|         } else if (copyEmptyLines && line.trim() === '') {
 | |
|             outputLines.push(line)
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // If no lines with the prompt were found then just use original lines
 | |
|     if (lineGotPrompt.some(v => v === true)) {
 | |
|         textContent = outputLines.join('\n');
 | |
|     }
 | |
| 
 | |
|     // Remove a trailing newline to avoid auto-running when pasting
 | |
|     if (textContent.endsWith("\n")) {
 | |
|         textContent = textContent.slice(0, -1)
 | |
|     }
 | |
|     return textContent
 | |
| }
 | 
