mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	"form" has an edge case: its `<input name=action>` element overwrites the `action` property, we can only set attribute. This PR makes `assignElementProperty` can handle such case, and add more tests
		
			
				
	
	
		
			26 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {assignElementProperty, type ElementWithAssignableProperties} from './common-button.ts';
 | |
| 
 | |
| test('assignElementProperty', () => {
 | |
|   const elForm = document.createElement('form');
 | |
|   assignElementProperty(elForm, 'action', '/test-link');
 | |
|   expect(elForm.action).contains('/test-link'); // the DOM always returns absolute URL
 | |
|   expect(elForm.getAttribute('action')).eq('/test-link');
 | |
|   assignElementProperty(elForm, 'text-content', 'dummy');
 | |
|   expect(elForm.textContent).toBe('dummy');
 | |
| 
 | |
|   // mock a form with its property "action" overwritten by an input element
 | |
|   const elFormWithAction = new class implements ElementWithAssignableProperties {
 | |
|     action = document.createElement('input'); // now "form.action" is not string, but an input element
 | |
|     _attrs: Record<string, string> = {};
 | |
|     setAttribute(name: string, value: string) { this._attrs[name] = value }
 | |
|     getAttribute(name: string): string | null { return this._attrs[name] }
 | |
|   }();
 | |
|   assignElementProperty(elFormWithAction, 'action', '/bar');
 | |
|   expect(elFormWithAction.getAttribute('action')).eq('/bar');
 | |
| 
 | |
|   const elInput = document.createElement('input');
 | |
|   expect(elInput.readOnly).toBe(false);
 | |
|   assignElementProperty(elInput, 'read-only', 'true');
 | |
|   expect(elInput.readOnly).toBe(true);
 | |
| });
 |