building everything on top of iterating over keys is rarely a good
idea..
This commit is contained in:
parent
b0f35832ec
commit
e3fd3e2226
|
@ -11,17 +11,18 @@
|
|||
let title = "Foo bar";
|
||||
|
||||
let hases = [];
|
||||
let hasesCandidates = [];
|
||||
let frontmatter = {}
|
||||
frontmatter['triad'] = {};
|
||||
frontmatter['ascriptions'] = {};
|
||||
frontmatter['triad'] = [];
|
||||
frontmatter['ascriptions'] = [];
|
||||
|
||||
function keyUp(e) {
|
||||
if (e.key == "Escape") {
|
||||
window.history.back()
|
||||
}
|
||||
}
|
||||
|
||||
function diffArrr(arr, arrr) {
|
||||
|
||||
function diffArrr(arr, arrr) {
|
||||
let diff = new Set(arr)
|
||||
for (let e of arrr) {
|
||||
diff.delete(e)
|
||||
|
@ -30,9 +31,10 @@
|
|||
}
|
||||
|
||||
function newHasTiers(arrgs) {
|
||||
let [fmKeyType, oldFmKey, newFmKey] = arrgs.detail;
|
||||
frontmatter[fmKeyType][oldFmKey]['candidates'] = METASP[newFmKey].tiers;
|
||||
frontmatter[fmKeyType][oldFmKey]['tiers'] = [];
|
||||
let [fmKeyType, index, oldFmKey, newFmKey] = arrgs.detail;
|
||||
frontmatter[fmKeyType][index] = {'fmKey': newFmKey, 'tiers': [], 'candidates': METASP[newFmKey].tiers}
|
||||
hasesCandidates = [...hasesCandidates, oldFmKey];
|
||||
hasesCandidates = hasesCandidates.filter(h => h != newFmKey);
|
||||
}
|
||||
|
||||
function loadHugoPageMetadata() {
|
||||
|
@ -57,24 +59,27 @@
|
|||
}
|
||||
} else if (hases.includes(fmKey.toLowerCase())) {
|
||||
fmKeyType = 'ascriptions'
|
||||
} else {
|
||||
fmKeyType = 'notSandpoints'
|
||||
}
|
||||
|
||||
if (fmKeyType != "") {
|
||||
if (['triad', 'ascriptions'].includes(fmKeyType)) {
|
||||
if (Array.isArray(fmValue)) {
|
||||
let tiers = []
|
||||
let candidates = []
|
||||
METASP[fmKey].tiers.forEach(t => {
|
||||
(fmKey in frontmatter[fmKeyType]) || (frontmatter[fmKeyType][fmKey] = {});
|
||||
('tiers' in frontmatter[fmKeyType][fmKey]) || (frontmatter[fmKeyType][fmKey]['tiers'] = []);
|
||||
('candidates' in frontmatter[fmKeyType][fmKey]) || (frontmatter[fmKeyType][fmKey]['candidates'] = []);
|
||||
if (fmValue.includes(t.file)) {
|
||||
frontmatter[fmKeyType][fmKey]['tiers'].push(t)
|
||||
tiers.push(t)
|
||||
} else {
|
||||
frontmatter[fmKeyType][fmKey]['candidates'].push(t)
|
||||
candidates.push(t)
|
||||
}
|
||||
})
|
||||
})
|
||||
frontmatter[fmKeyType].push({'fmKey': fmKey, 'tiers': tiers, 'candidates': candidates})
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
hasesCandidates = diffArrr(hases, [...frontmatter['triad'].map(t => { return t.fmKey }), ...frontmatter['ascriptions'].map(t => { return t.fmKey })])
|
||||
|
||||
let tkey = Object.keys(repo.frontmatter).filter(t => t.toLowerCase() == "title")[0]
|
||||
title = repo.frontmatter[tkey]
|
||||
|
@ -84,17 +89,18 @@
|
|||
}
|
||||
|
||||
function addToCandidatesRemoveFromTiers(arrgs) {
|
||||
const [tier, fmKeyType, fmKey] = arrgs.detail
|
||||
frontmatter[fmKeyType][fmKey]['tiers'] = frontmatter[fmKeyType][fmKey]['tiers'].filter(t => t !== tier);
|
||||
frontmatter[fmKeyType][fmKey]['candidates'] = [...frontmatter[fmKeyType][fmKey]['candidates'], tier]
|
||||
let [fmKeyType, index, fmKey, tier] = arrgs.detail;
|
||||
frontmatter[fmKeyType][index]['fmKey'] = fmKey;
|
||||
frontmatter[fmKeyType][index]['tiers'] = frontmatter[fmKeyType][index]['tiers'].filter(t => t !== tier);
|
||||
frontmatter[fmKeyType][index]['candidates'] = [...frontmatter[fmKeyType][index]['candidates'], tier]
|
||||
}
|
||||
|
||||
function addToTiersRemoveFromCandidates(arrgs) {
|
||||
const [value, fmKeyType, fmKey] = arrgs.detail
|
||||
const tier = frontmatter[fmKeyType][fmKey]['candidates'].filter(t => t.file == value)
|
||||
let [fmKeyType, index, fmKey, value] = arrgs.detail;
|
||||
const tier = frontmatter[fmKeyType][index]['candidates'].filter(t => t.file == value)
|
||||
if (tier.length > 0) {
|
||||
frontmatter[fmKeyType][fmKey]['tiers'] = [...frontmatter[fmKeyType][fmKey]['tiers'], tier[0]]
|
||||
frontmatter[fmKeyType][fmKey]['candidates'] = frontmatter[fmKeyType][fmKey]['candidates'].filter(t=> t != tier[0])
|
||||
frontmatter[fmKeyType][index]['tiers'] = [...frontmatter[fmKeyType][index]['tiers'], tier[0]]
|
||||
frontmatter[fmKeyType][index]['candidates'] = frontmatter[fmKeyType][index]['candidates'].filter(t=> t != tier[0])
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -107,10 +113,10 @@
|
|||
<SpTitle relpath={relpath} title={title} />
|
||||
{#each Object.entries(frontmatter) as fmItems}
|
||||
{#if ['ascriptions', 'triad'].includes(fmItems[0])}
|
||||
{#each Object.entries(fmItems[1]) as fmItem}
|
||||
<SpHasWhat fmKeyType="{fmItems[0]}" fmKey="{fmItem[0] || ''}" fmValues={fmItem[1]} hases={hases} on:hasTiersSelected={newHasTiers} />
|
||||
<SpHasTiers on:addToCandidatesRemoveFromTiers={addToCandidatesRemoveFromTiers} fmKeyType="{fmItems[0]}" fmKey={fmItem[0] || ''} tiers={fmItem[1].tiers || []} />
|
||||
<SpHasCandidates on:addToTiersRemoveFromCandidates={addToTiersRemoveFromCandidates} fmKeyType="{fmItems[0]}" fmKey={fmItem[0] || ''} candidates={fmItem[1].candidates || []} />
|
||||
{#each fmItems[1] as fmItem, i}
|
||||
<SpHasWhat index={i} fmKeyType={fmItems[0]} fmItem={fmItem} hases={hases} hasesCandidates={hasesCandidates} on:hasTiersSelected={newHasTiers} />
|
||||
<SpHasTiers on:addToCandidatesRemoveFromTiers={addToCandidatesRemoveFromTiers} index={i} fmKeyType={fmItems[0]} fmItem={fmItem} />
|
||||
<SpHasCandidates on:addToTiersRemoveFromCandidates={addToTiersRemoveFromCandidates} index={i} fmKeyType={fmItems[0]} fmItem={fmItem} />
|
||||
{/each}
|
||||
{/if}
|
||||
{/each}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<script>
|
||||
import { createEventDispatcher } from 'svelte';
|
||||
import { afterUpdate } from 'svelte';
|
||||
export let candidates;
|
||||
export let index;
|
||||
export let fmItem;
|
||||
export let fmKeyType;
|
||||
export let fmKey;
|
||||
|
||||
export let value;
|
||||
const dispatch = createEventDispatcher();
|
||||
|
@ -16,15 +16,15 @@
|
|||
});
|
||||
|
||||
$: {
|
||||
dispatch("addToTiersRemoveFromCandidates", [value, fmKeyType, fmKey])
|
||||
dispatch("addToTiersRemoveFromCandidates", [fmKeyType, index, fmItem.fmKey, value])
|
||||
value = 1;
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if candidates && candidates.length > 0}
|
||||
{#if fmItem.candidates && fmItem.candidates.length > 0}
|
||||
<select class="selecttier" bind:value>
|
||||
<option id="addnew" value="1" disabled selected>Add new...</option>
|
||||
{#each candidates as tier (tier.file)}
|
||||
{#each fmItem.candidates as tier (tier.file)}
|
||||
<option title="{tier.title}" value={tier.file}>{tier.file} {#if tier.title.length < 70}({tier.title}){:else}({tier.title.slice(0, 68) + '…'}){/if}</option>
|
||||
{/each}
|
||||
</select>
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
<script>
|
||||
import { createEventDispatcher } from 'svelte';
|
||||
export let tiers;
|
||||
export let fmKey;
|
||||
export let index;
|
||||
export let fmItem;
|
||||
export let fmKeyType;
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
function removeTier(tier) {
|
||||
dispatch("addToCandidatesRemoveFromTiers", [tier, fmKeyType, fmKey])
|
||||
dispatch("addToCandidatesRemoveFromTiers", [fmKeyType, index, fmItem.fmKey, tier])
|
||||
}
|
||||
|
||||
function swapTier(tier, n) {
|
||||
tiers.some((t, i)=> {
|
||||
fmItem.tiers.some((t, i)=> {
|
||||
if (t==tier) {
|
||||
tiers[i] = tiers[i+n]
|
||||
tiers[i+n] = tier
|
||||
fmItem.tiers[i] = fmItem.tiers[i+n]
|
||||
fmItem.tiers[i+n] = tier
|
||||
return true
|
||||
}
|
||||
})
|
||||
|
@ -21,15 +21,15 @@
|
|||
|
||||
</script>
|
||||
|
||||
{#if tiers && tiers.length >0}
|
||||
{#if fmItem.tiers && fmItem.tiers.length >0}
|
||||
<div class="tierbox">
|
||||
{#each tiers as tier, i (tier.file)}
|
||||
{#each fmItem.tiers as tier, i (tier.file)}
|
||||
<div class="tierline">
|
||||
<div class="filetitle">
|
||||
<input readonly type="text" name="{'triad' == fmKey ? "has_":"" }{fmKey}[]" class="hasinput" value="{tier.file}"><span class="tiertitle">({tier.title})</span>
|
||||
<input readonly type="text" name="{'triad' == fmItem.fmKey ? "has_":"" }{fmItem.fmKey}[]" class="hasinput" value="{tier.file}"><span class="tiertitle">({tier.title})</span>
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<button type="button" class="buttondown" on:click="{swapTier(tier, 1)}" disabled={i+1 == tiers.length ? true:false}>⇓</button>
|
||||
<button type="button" class="buttondown" on:click="{swapTier(tier, 1)}" disabled={i+1 == fmItem.tiers.length ? true:false}>⇓</button>
|
||||
<button type="button" class="buttonup" on:click="{swapTier(tier, -1)}" disabled={i == 0 ? true:false}>⇑</button>
|
||||
<button type="button" on:click="{removeTier(tier)}">×</button>
|
||||
</div>
|
||||
|
|
|
@ -1,31 +1,36 @@
|
|||
<script>
|
||||
import { createEventDispatcher } from 'svelte';
|
||||
import { afterUpdate } from 'svelte';
|
||||
import { onMount } from 'svelte';
|
||||
export let fmItem;
|
||||
export let fmKeyType;
|
||||
export let fmKey;
|
||||
export let fmValues;
|
||||
export let index;
|
||||
export let hases;
|
||||
export let hasesCandidates;
|
||||
let value;
|
||||
let toggleFmKey = ''
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
|
||||
function optselName(has) {
|
||||
return `_${has}_${fmKeyType}`
|
||||
}
|
||||
|
||||
$: {
|
||||
if (value && value.split("_")[1] != fmKey) {
|
||||
toggleFmKey = fmKey;
|
||||
dispatch("hasTiersSelected", [fmKeyType, fmKey, value.split("_")[1]])
|
||||
} else if (toggleFmKey == fmKey) {
|
||||
dispatch("hasTiersSelected", [fmKeyType, fmKey, value.split("_")[1]])
|
||||
toggleFmKey = ''
|
||||
|
||||
onMount(()=> {
|
||||
const selectEvent = document.getElementById(`${fmKeyType}_${fmItem.fmKey}`)
|
||||
if (selectEvent) {
|
||||
selectEvent.addEventListener('change', (e) => {
|
||||
dispatch("hasTiersSelected", [fmKeyType, index, fmItem.fmKey, e.target.value.split("_")[1]]);})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<select class="{fmKeyType}_{fmKey}" bind:value>
|
||||
<select id="{fmKeyType}_{fmItem.fmKey}" bind:value>
|
||||
{#each hases as has}
|
||||
<option id="{optselName(has)}" class="hasoption" selected={has == fmKey ? "selected":""} title="{has}" value={optselName(has)}>{'triad' == fmKeyType ? "Has ":""}{has}:</option>
|
||||
{#if has == fmItem.fmKey}
|
||||
<option id="{optselName(has)}" class="hasoption" selected title="{has}" value={optselName(has)}>{'triad' == fmKeyType ? "Has ":""}{has}:</option>
|
||||
{/if}
|
||||
{/each}
|
||||
{#each hasesCandidates as has}
|
||||
<option id="{optselName(has)}" class="hasoption" title="{has}" value={optselName(has)}>{'triad' == fmKeyType ? "Has ":""}{has}:</option>
|
||||
{/each}
|
||||
</select>
|
||||
|
|
Loading…
Reference in New Issue