/
uzer_007
/
Rixea
Обзор
Документация
Войти
/
uzer_007
/
Rixea
Код
Запросы
0
Задачи
Вики
Пакеты
5
Релизы
2
CI/CD
Аналитика
Безопасность
master
web_src/js/components/DiffFileTree.vue
76 строк
2 KB
uzer_007
feat: первая версия Rixea
02 авг 2026, 22:16
02 авг 2026, 22:16
d4f7504
Код
Авторство
О чём код?
<script lang="ts" setup> import DiffFileTreeItem from './DiffFileTreeItem.vue'; import {toggleElem} from '../utils/dom.ts'; import {diffTreeStore, updateDiffFileTreeButtonState} from '../modules/diff-file.ts'; import {setFileFolding} from '../features/file-fold.ts'; import {onMounted, onUnmounted} from 'vue'; import {localUserSettings} from '../modules/user-settings.ts'; const LOCAL_STORAGE_KEY = 'diff_file_tree_visible'; const store = diffTreeStore(); onMounted(() => { // Default to true if unset store.fileTreeIsVisible = localUserSettings.getBoolean(LOCAL_STORAGE_KEY, true); document.querySelector('.diff-toggle-file-tree-button')!.addEventListener('click', toggleVisibility); hashChangeListener(); window.addEventListener('hashchange', hashChangeListener); }); onUnmounted(() => { document.querySelector('.diff-toggle-file-tree-button')!.removeEventListener('click', toggleVisibility); window.removeEventListener('hashchange', hashChangeListener); }); function hashChangeListener() { store.selectedItem = window.location.hash; expandSelectedFile(); } function expandSelectedFile() { // expand file if the selected file is folded if (store.selectedItem) { const box = document.querySelector(store.selectedItem); const folded = box?.getAttribute('data-folded') === 'true'; if (folded) setFileFolding(box, box.querySelector('.fold-file')!, false); } } function toggleVisibility() { updateVisibility(!store.fileTreeIsVisible); } function updateVisibility(visible: boolean) { store.fileTreeIsVisible = visible; localUserSettings.setBoolean(LOCAL_STORAGE_KEY, store.fileTreeIsVisible); updateState(store.fileTreeIsVisible); } function updateState(visible: boolean) { const btn = document.querySelector<HTMLElement>('.diff-toggle-file-tree-button')!; const [toShow, toHide] = btn.querySelectorAll('.icon'); const tree = document.querySelector('#diff-file-tree')!; updateDiffFileTreeButtonState(btn, visible); toggleElem(tree, visible); toggleElem(toShow, !visible); toggleElem(toHide, visible); } </script> <template> <!-- only render the tree if we're visible. in many cases this is something that doesn't change very often --> <div v-if="store.fileTreeIsVisible" class="diff-file-tree-items"> <DiffFileTreeItem v-for="item in store.diffFileTree.TreeRoot.Children" :key="item.FullName" :item="item"/> </div> </template> <style scoped> .diff-file-tree-items { display: flex; flex-direction: column; gap: 1px; margin-right: .5rem; } </style>