mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 18:12:20 +01:00 
			
		
		
		
	1. Add some "render-content" classes to "markup" elements when the
content is rendered
2. Use correct "markup" wrapper for "preview" (but not set that class on
the tab)
3. Remove incorrect "markup" class from LFS file view, because there is
no markup content
    * "edit-diff" is also removed because it does nothing
5. Use "initPdfViewer" for PDF viewer
6. Remove incorrect "content" class from milestone markup
7. Init all ".markup" elements by new init framework
---------
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
		
	
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {displayError} from './common.ts';
 | |
| 
 | |
| function targetElement(el: Element): {target: Element, displayAsBlock: boolean} {
 | |
|   // The target element is either the parent "code block with loading indicator", or itself
 | |
|   // It is designed to work for 2 cases (guaranteed by backend code):
 | |
|   // * <pre class="code-block is-loading"><code class="language-math display">...</code></pre>
 | |
|   // * <code class="language-math">...</code>
 | |
|   return {
 | |
|     target: el.closest('.code-block.is-loading') ?? el,
 | |
|     displayAsBlock: el.classList.contains('display'),
 | |
|   };
 | |
| }
 | |
| 
 | |
| export async function initMarkupCodeMath(elMarkup: HTMLElement): Promise<void> {
 | |
|   const el = elMarkup.querySelector('code.language-math'); // .markup code.language-math'
 | |
|   if (!el) return;
 | |
| 
 | |
|   const [{default: katex}] = await Promise.all([
 | |
|     import(/* webpackChunkName: "katex" */'katex'),
 | |
|     import(/* webpackChunkName: "katex" */'katex/dist/katex.css'),
 | |
|   ]);
 | |
| 
 | |
|   const MAX_CHARS = 1000;
 | |
|   const MAX_SIZE = 25;
 | |
|   const MAX_EXPAND = 1000;
 | |
| 
 | |
|   const {target, displayAsBlock} = targetElement(el);
 | |
|   if (target.hasAttribute('data-render-done')) return;
 | |
|   const source = el.textContent;
 | |
| 
 | |
|   if (source.length > MAX_CHARS) {
 | |
|     displayError(target, new Error(`Math source of ${source.length} characters exceeds the maximum allowed length of ${MAX_CHARS}.`));
 | |
|     return;
 | |
|   }
 | |
|   try {
 | |
|     const tempEl = document.createElement(displayAsBlock ? 'p' : 'span');
 | |
|     katex.render(source, tempEl, {
 | |
|       maxSize: MAX_SIZE,
 | |
|       maxExpand: MAX_EXPAND,
 | |
|       displayMode: displayAsBlock, // katex: true for display (block) mode, false for inline mode
 | |
|     });
 | |
|     target.replaceWith(tempEl);
 | |
|   } catch (error) {
 | |
|     displayError(target, error);
 | |
|   }
 | |
| }
 |