mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-26 01:59:02 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * Reads the level of indentation of the first line and trims the identation for all the text by that amount.
 | |
|  *
 | |
|  * For example, for:
 | |
|  *
 | |
|  * ```json
 | |
|  *          {
 | |
|  *              "hello": "world"
 | |
|  *          }
 | |
|  * ```
 | |
|  *
 | |
|  * it results in:
 | |
|  *
 | |
|  * ```json
 | |
|  * {
 | |
|  *     "hello": "world"
 | |
|  * }
 | |
|  * ```
 | |
|  *
 | |
|  * This is meant to be used as a template string, where it allows the indentation of the template without affecting whitespace changes.
 | |
|  *
 | |
|  * @example const html = trimIndentation`\
 | |
|  *           <h1>Heading 1</h1>
 | |
|  *           <h2>Heading 2</h2>
 | |
|  *           <h3>Heading 3</h3>
 | |
|  *           <h4>Heading 4</h4>
 | |
|  *           <h5>Heading 5</h5>
 | |
|  *           <h6>Heading 6</h6>
 | |
|  *       `;
 | |
|  * @param strings
 | |
|  * @returns
 | |
|  */
 | |
| export function trimIndentation(strings: TemplateStringsArray, ...values: any[]) {
 | |
|     // Combine the strings with the values using interpolation
 | |
|     let str = strings.reduce((acc, curr, index) => {
 | |
|         return acc + curr + (values[index] !== undefined ? values[index] : '');
 | |
|     }, '');
 | |
| 
 | |
|     // Count the number of spaces on the first line.
 | |
|     let numSpaces = 0;
 | |
|     while (str.charAt(numSpaces) == " " && numSpaces < str.length) {
 | |
|         numSpaces++;
 | |
|     }
 | |
| 
 | |
|     // Trim the indentation of the first line in all the lines.
 | |
|     const lines = str.split("\n");
 | |
|     const output = [];
 | |
|     for (let i = 0; i < lines.length; i++) {
 | |
|         let numSpacesLine = 0;
 | |
|         while (str.charAt(numSpacesLine) == " " && numSpacesLine < str.length) {
 | |
|             numSpacesLine++;
 | |
|         }
 | |
|         output.push(lines[i].substring(numSpacesLine));
 | |
|     }
 | |
|     return output.join("\n");
 | |
| }
 | 
