diff options
Diffstat (limited to 'web_src/js/modules')
-rw-r--r-- | web_src/js/modules/diff-file.test.ts | 6 | ||||
-rw-r--r-- | web_src/js/modules/diff-file.ts | 10 | ||||
-rw-r--r-- | web_src/js/modules/fomantic/dropdown.ts | 9 |
3 files changed, 17 insertions, 8 deletions
diff --git a/web_src/js/modules/diff-file.test.ts b/web_src/js/modules/diff-file.test.ts index 1f956a7d86..f0438538a0 100644 --- a/web_src/js/modules/diff-file.test.ts +++ b/web_src/js/modules/diff-file.test.ts @@ -9,6 +9,7 @@ test('diff-tree', () => { 'IsViewed': false, 'NameHash': '....', 'DiffStatus': '', + 'FileIcon': '', 'Children': [ { 'FullName': 'dir1', @@ -17,6 +18,7 @@ test('diff-tree', () => { 'IsViewed': false, 'NameHash': '....', 'DiffStatus': '', + 'FileIcon': '', 'Children': [ { 'FullName': 'dir1/test.txt', @@ -25,6 +27,7 @@ test('diff-tree', () => { 'NameHash': '....', 'EntryMode': '', 'IsViewed': false, + 'FileIcon': '', 'Children': null, }, ], @@ -36,11 +39,12 @@ test('diff-tree', () => { 'DiffStatus': 'added', 'EntryMode': '', 'IsViewed': false, + 'FileIcon': '', 'Children': null, }, ], }, - }); + }, '', ''); diffTreeStoreSetViewed(store, 'dir1/test.txt', true); expect(store.fullNameMap['dir1/test.txt'].IsViewed).toBe(true); expect(store.fullNameMap['dir1'].IsViewed).toBe(true); diff --git a/web_src/js/modules/diff-file.ts b/web_src/js/modules/diff-file.ts index 5d06f8a333..2cec7bc6b3 100644 --- a/web_src/js/modules/diff-file.ts +++ b/web_src/js/modules/diff-file.ts @@ -13,7 +13,7 @@ export type DiffTreeEntry = { EntryMode: string, IsViewed: boolean, Children: DiffTreeEntry[], - + FileIcon: string, ParentEntry?: DiffTreeEntry, } @@ -22,6 +22,8 @@ type DiffFileTreeData = { }; type DiffFileTree = { + folderIcon: string; + folderOpenIcon: string; diffFileTree: DiffFileTreeData; fullNameMap?: Record<string, DiffTreeEntry> fileTreeIsVisible: boolean; @@ -31,7 +33,7 @@ type DiffFileTree = { let diffTreeStoreReactive: Reactive<DiffFileTree>; export function diffTreeStore() { if (!diffTreeStoreReactive) { - diffTreeStoreReactive = reactiveDiffTreeStore(pageData.DiffFileTree); + diffTreeStoreReactive = reactiveDiffTreeStore(pageData.DiffFileTree, pageData.FolderIcon, pageData.FolderOpenIcon); } return diffTreeStoreReactive; } @@ -55,9 +57,11 @@ function fillFullNameMap(map: Record<string, DiffTreeEntry>, entry: DiffTreeEntr } } -export function reactiveDiffTreeStore(data: DiffFileTreeData): Reactive<DiffFileTree> { +export function reactiveDiffTreeStore(data: DiffFileTreeData, folderIcon: string, folderOpenIcon: string): Reactive<DiffFileTree> { const store = reactive({ diffFileTree: data, + folderIcon, + folderOpenIcon, fileTreeIsVisible: false, selectedItem: '', fullNameMap: {}, diff --git a/web_src/js/modules/fomantic/dropdown.ts b/web_src/js/modules/fomantic/dropdown.ts index 1b05939cf3..0360b8ef95 100644 --- a/web_src/js/modules/fomantic/dropdown.ts +++ b/web_src/js/modules/fomantic/dropdown.ts @@ -228,12 +228,13 @@ function attachDomEvents(dropdown: HTMLElement, focusable: HTMLElement, menu: HT dropdown.addEventListener('keydown', (e: KeyboardEvent) => { // here it must use keydown event before dropdown's keyup handler, otherwise there is no Enter event in our keyup handler if (e.key === 'Enter') { - const dropdownCall = fomanticDropdownFn.bind($(dropdown)); - let $item = dropdownCall('get item', dropdownCall('get value')); - if (!$item) $item = $(menu).find('> .item.selected'); // when dropdown filters items by input, there is no "value", so query the "selected" item + const elItem = menu.querySelector<HTMLElement>(':scope > .item.selected, .menu > .item.selected'); // if the selected item is clickable, then trigger the click event. // we can not click any item without check, because Fomantic code might also handle the Enter event. that would result in double click. - if ($item?.[0]?.matches('a, .js-aria-clickable')) $item[0].click(); + if (elItem?.matches('a, .js-aria-clickable') && !elItem.matches('.tw-hidden, .filtered')) { + e.preventDefault(); + elItem.click(); + } } }); |