mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Add "dir=auto" for input/textarea elements by default (#26735)
Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		@@ -478,6 +478,7 @@ a.label,
 | 
				
			|||||||
/* fix Fomantic's line-height cutting off "g" on Windows Chrome with Segoe UI */
 | 
					/* fix Fomantic's line-height cutting off "g" on Windows Chrome with Segoe UI */
 | 
				
			||||||
.ui.input > input {
 | 
					.ui.input > input {
 | 
				
			||||||
  line-height: var(--line-height-default);
 | 
					  line-height: var(--line-height-default);
 | 
				
			||||||
 | 
					  text-align: start; /* Override fomantic's `text-align: left` to make RTL work via HTML `dir="auto"` */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.ui.input.focus > input,
 | 
					.ui.input.focus > input,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -84,9 +84,11 @@ import {onDomReady} from './utils/dom.js';
 | 
				
			|||||||
import {initRepoIssueList} from './features/repo-issue-list.js';
 | 
					import {initRepoIssueList} from './features/repo-issue-list.js';
 | 
				
			||||||
import {initCommonIssueListQuickGoto} from './features/common-issue-list.js';
 | 
					import {initCommonIssueListQuickGoto} from './features/common-issue-list.js';
 | 
				
			||||||
import {initRepoDiffCommitBranchesAndTags} from './features/repo-diff-commit.js';
 | 
					import {initRepoDiffCommitBranchesAndTags} from './features/repo-diff-commit.js';
 | 
				
			||||||
 | 
					import {initDirAuto} from './modules/dirauto.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Init Gitea's Fomantic settings
 | 
					// Init Gitea's Fomantic settings
 | 
				
			||||||
initGiteaFomantic();
 | 
					initGiteaFomantic();
 | 
				
			||||||
 | 
					initDirAuto();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
onDomReady(() => {
 | 
					onDomReady(() => {
 | 
				
			||||||
  initGlobalCommon();
 | 
					  initGlobalCommon();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								web_src/js/modules/dirauto.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								web_src/js/modules/dirauto.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					// for performance considerations, it only uses performant syntax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function attachDirAuto(el) {
 | 
				
			||||||
 | 
					  if (el.type !== 'hidden' &&
 | 
				
			||||||
 | 
					      el.type !== 'checkbox' &&
 | 
				
			||||||
 | 
					      el.type !== 'radio' &&
 | 
				
			||||||
 | 
					      el.type !== 'range' &&
 | 
				
			||||||
 | 
					      el.type !== 'color') {
 | 
				
			||||||
 | 
					    el.dir = 'auto';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function initDirAuto() {
 | 
				
			||||||
 | 
					  const observer = new MutationObserver((mutationList) => {
 | 
				
			||||||
 | 
					    const len = mutationList.length;
 | 
				
			||||||
 | 
					    for (let i = 0; i < len; i++) {
 | 
				
			||||||
 | 
					      const mutation = mutationList[i];
 | 
				
			||||||
 | 
					      const len = mutation.addedNodes.length;
 | 
				
			||||||
 | 
					      for (let i = 0; i < len; i++) {
 | 
				
			||||||
 | 
					        const addedNode = mutation.addedNodes[i];
 | 
				
			||||||
 | 
					        if (addedNode.nodeType !== Node.ELEMENT_NODE && addedNode.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) continue;
 | 
				
			||||||
 | 
					        attachDirAuto(addedNode);
 | 
				
			||||||
 | 
					        const children = addedNode.querySelectorAll('input, textarea');
 | 
				
			||||||
 | 
					        const len = children.length;
 | 
				
			||||||
 | 
					        for (let childIdx = 0; childIdx < len; childIdx++) {
 | 
				
			||||||
 | 
					          attachDirAuto(children[childIdx]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const docNodes = document.querySelectorAll('input, textarea');
 | 
				
			||||||
 | 
					  const len = docNodes.length;
 | 
				
			||||||
 | 
					  for (let i = 0; i < len; i++) {
 | 
				
			||||||
 | 
					    attachDirAuto(docNodes[i]);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  observer.observe(document, {subtree: true, childList: true});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user