mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-29 13:31:20 +00:00 
			
		
		
		
	Before, the Vue `<SvgIcon>` always outputs DOM nodes like: 
```html
<span class="outer-class">
    <svg class="class-name-defined" ...></svg>
</span>
```
The `span` is redundant and I guess such layout and the inconsistent
`class/class-name` attributes would cause bugs sooner or later.
This PR makes the `<SvgIcon>` clear, and it's faster than before,
because it doesn't need to parse the whole SVG string.
Before: 
<details>

</details>
After:

---------
Co-authored-by: silverwind <me@silverwind.io>
		
	
			
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {expect, test} from 'vitest';
 | |
| import {svg, SvgIcon, svgParseOuterInner} from './svg.js';
 | |
| import {createApp, h} from 'vue';
 | |
| 
 | |
| test('svg', () => {
 | |
|   expect(svg('octicon-repo')).toMatch(/^<svg/);
 | |
|   expect(svg('octicon-repo', 16)).toContain('width="16"');
 | |
|   expect(svg('octicon-repo', 32)).toContain('width="32"');
 | |
| });
 | |
| 
 | |
| test('svgParseOuterInner', () => {
 | |
|   const {svgOuter, svgInnerHtml} = svgParseOuterInner('octicon-repo');
 | |
|   expect(svgOuter.nodeName).toMatch('svg');
 | |
|   expect(svgOuter.classList.contains('octicon-repo')).toBeTruthy();
 | |
|   expect(svgInnerHtml).toContain('<path');
 | |
| });
 | |
| 
 | |
| test('SvgIcon', () => {
 | |
|   const root = document.createElement('div');
 | |
|   createApp({render: () => h(SvgIcon, {name: 'octicon-link', size: 24, class: 'base', className: 'extra'})}).mount(root);
 | |
|   const node = root.firstChild;
 | |
|   expect(node.nodeName).toEqual('svg');
 | |
|   expect(node.getAttribute('width')).toEqual('24');
 | |
|   expect(node.getAttribute('height')).toEqual('24');
 | |
|   expect(node.classList.contains('octicon-link')).toBeTruthy();
 | |
|   expect(node.classList.contains('base')).toBeTruthy();
 | |
|   expect(node.classList.contains('extra')).toBeTruthy();
 | |
| });
 |