You've already forked obsidian-visualiser
Remove unused components, change zod to v4 and cahnge a few character properties
This commit is contained in:
@@ -95,193 +95,4 @@ onMounted(async () => {
|
||||
onBeforeUnmount(() => {
|
||||
editor?.unmount();
|
||||
});
|
||||
/* import { Icon } from '@iconify/vue/dist/iconify.js';
|
||||
import type { Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/dist/types/tree-item';
|
||||
import type { FileType, LocalContent, TreeItem } from '#shared/content.util';
|
||||
import { DEFAULT_CONTENT, iconByType, Content, getPath } from '#shared/content.util';
|
||||
import type { Preferences } from '~/types/general';
|
||||
import { fakeA as proseA } from '#shared/proses';
|
||||
import { parsePath } from '~/shared/general.util';
|
||||
import type { CanvasContent } from '~/types/canvas';
|
||||
|
||||
export type TreeItemEditable = LocalContent &
|
||||
{
|
||||
parent?: string;
|
||||
name?: string;
|
||||
customPath?: boolean;
|
||||
children?: TreeItemEditable[];
|
||||
}
|
||||
|
||||
definePageMeta({
|
||||
rights: ['admin', 'editor'],
|
||||
layout: 'null',
|
||||
});
|
||||
|
||||
const { user } = useUserSession();
|
||||
|
||||
const router = useRouter();
|
||||
const open = ref(true), topOpen = ref(true);
|
||||
|
||||
const toaster = useToast();
|
||||
const saveStatus = ref<'idle' | 'pending' | 'success' | 'error'>('idle');
|
||||
|
||||
let navigation = Content.tree as TreeItemEditable[];
|
||||
const selected = ref<TreeItemEditable>();
|
||||
|
||||
const preferences = useCookie<Preferences>('preferences', { default: () => ({ markdown: { editing: 'split' }, canvas: { gridSnap: true, neighborSnap: true, spacing: 32 } }), watch: true, maxAge: 60*60*24*31 });
|
||||
|
||||
watch(selected, async (value, old) => {
|
||||
if(selected.value)
|
||||
{
|
||||
if(!selected.value.content && selected.value.path)
|
||||
{
|
||||
selected.value = await Content.content(selected.value.path);
|
||||
}
|
||||
|
||||
router.replace({ hash: '#' + selected.value!.path || getPath(selected.value!) });
|
||||
}
|
||||
else
|
||||
{
|
||||
router.replace({ hash: '' });
|
||||
}
|
||||
})
|
||||
const debouncedSave = useDebounceFn(save, 60000, { maxWait: 180000 });
|
||||
|
||||
useShortcuts({
|
||||
//meta_s: { usingInput: true, handler: () => save(), prevent: true },
|
||||
meta_n: { usingInput: true, handler: () => add('markdown'), prevent: true },
|
||||
meta_shift_n: { usingInput: true, handler: () => add('folder'), prevent: true },
|
||||
meta_shift_z: { usingInput: true, handler: () => router.push({ name: 'explore-path', params: { path: 'index' } }), prevent: true }
|
||||
})
|
||||
|
||||
function add(type: FileType): void
|
||||
{
|
||||
if(!navigation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const news = [...tree.search(navigation, 'title', 'Nouveau')].filter((e, i, a) => a.indexOf(e) === i);
|
||||
const title = `Nouveau${news.length > 0 ? ' (' + news.length +')' : ''}`;
|
||||
const item: TreeItemEditable = { navigable: true, private: false, parent: '', path: '', title: title, name: parsePath(title), type: type, order: 0, children: [], customPath: false, content: DEFAULT_CONTENT[type], owner: -1, timestamp: new Date(), visit: 0 };
|
||||
|
||||
if(!selected.value)
|
||||
{
|
||||
navigation = [...navigation, item];
|
||||
}
|
||||
else if(selected.value?.children)
|
||||
{
|
||||
item.parent = getPath(selected.value);
|
||||
navigation = tree.insertChild(navigation, item.parent, item);
|
||||
}
|
||||
else
|
||||
{
|
||||
navigation = tree.insertAfter(navigation, getPath(selected.value), item);
|
||||
}
|
||||
}
|
||||
function updateTree(instruction: Instruction, itemId: string, targetId: string) : TreeItemEditable[] | undefined {
|
||||
if(!navigation)
|
||||
return;
|
||||
|
||||
const item = tree.find(navigation, itemId);
|
||||
const target = tree.find(navigation, targetId);
|
||||
|
||||
if(!item)
|
||||
return;
|
||||
|
||||
if (instruction.type === 'reparent') {
|
||||
const path = tree.getPathToItem({
|
||||
current: navigation,
|
||||
targetId: targetId,
|
||||
});
|
||||
if (!path) {
|
||||
console.error(`missing ${path}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const desiredId = path[instruction.desiredLevel];
|
||||
let result = tree.remove(navigation, itemId);
|
||||
result = tree.insertAfter(result, desiredId, item);
|
||||
return result;
|
||||
}
|
||||
|
||||
// the rest of the actions require you to drop on something else
|
||||
if (itemId === targetId)
|
||||
return navigation;
|
||||
|
||||
if (instruction.type === 'reorder-above') {
|
||||
let result = tree.remove(navigation, itemId);
|
||||
result = tree.insertBefore(result, targetId, item);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (instruction.type === 'reorder-below') {
|
||||
let result = tree.remove(navigation, itemId);
|
||||
result = tree.insertAfter(result, targetId, item);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (instruction.type === 'make-child') {
|
||||
if(!target || target.type !== 'folder')
|
||||
return;
|
||||
|
||||
let result = tree.remove(navigation, itemId);
|
||||
result = tree.insertChild(result, targetId, item);
|
||||
rebuildPath([item], targetId);
|
||||
return result;
|
||||
}
|
||||
|
||||
return navigation;
|
||||
}
|
||||
function transform(items: TreeItem[] | undefined): TreeItemEditable[] | undefined
|
||||
{
|
||||
return items?.map(e => ({
|
||||
...e,
|
||||
parent: e.path.substring(0, e.path.lastIndexOf('/')),
|
||||
name: e.path.substring(e.path.lastIndexOf('/') + 1),
|
||||
customPath: e.path.substring(e.path.lastIndexOf('/') + 1) !== parsePath(e.title),
|
||||
children: transform(e.children)
|
||||
})) as TreeItemEditable[] | undefined;
|
||||
}
|
||||
function flatten(items: TreeItemEditable[] | undefined): TreeItemEditable[]
|
||||
{
|
||||
return items?.flatMap(e => [e, ...flatten(e.children)]) ?? [];
|
||||
}
|
||||
function drop(instruction: Instruction, itemId: string, targetId: string)
|
||||
{
|
||||
navigation = updateTree(instruction, itemId, targetId) ?? navigation ?? [];
|
||||
}
|
||||
function rebuildPath(tree: TreeItemEditable[] | null | undefined, parentPath: string)
|
||||
{
|
||||
if(!tree)
|
||||
return;
|
||||
|
||||
tree.forEach(e => {
|
||||
e.parent = parentPath;
|
||||
rebuildPath(e.children, getPath(e));
|
||||
});
|
||||
}
|
||||
function save()
|
||||
{
|
||||
if(selected.value && selected.value.content)
|
||||
{
|
||||
selected.value.path = getPath(selected.value);
|
||||
Content.save(selected.value);
|
||||
}
|
||||
}
|
||||
|
||||
const defaultExpanded = computed(() => {
|
||||
if(router.currentRoute.value.hash)
|
||||
{
|
||||
const split = router.currentRoute.value.hash.substring(1).split('/');
|
||||
split.forEach((e, i) => { if(i !== 0) split[i] = split[i - 1] + '/' + e });
|
||||
return split;
|
||||
}
|
||||
});
|
||||
/*watch(router.currentRoute, (value) => {
|
||||
if(value && value.hash && navigation)
|
||||
selected.value = tree.find(navigation, value.hash.substring(1));
|
||||
else
|
||||
selected.value = undefined;
|
||||
}, { immediate: true }); */
|
||||
</script>
|
||||
Reference in New Issue
Block a user