more of a form stuff...

This commit is contained in:
Marcell Mars 2021-06-02 02:02:20 +02:00
parent 46a4decd1e
commit b0f35832ec
5 changed files with 123 additions and 69 deletions

View file

@ -72,12 +72,12 @@ form {
margin-top: 1rem; margin-top: 1rem;
} }
label { label, .filepath {
grid-column: 1/2; grid-column: 1/2;
text-transform: capitalize; text-transform: capitalize;
} }
input, button, textarea, .selecttier { input, button, textarea, .selecttier, .relpath {
grid-column: 2/3; grid-column: 2/3;
} }
@ -99,6 +99,7 @@ textarea {
.tierline { .tierline {
display: flex; display: flex;
align-items: baseline;
} }
.tiertitle { .tiertitle {
@ -110,3 +111,38 @@ textarea {
margin-left: auto; margin-left: auto;
padding-left: 0.2rem; padding-left: 0.2rem;
} }
select {
align-self: start;
border: 0;
padding: 0.1rem;
}
.selecttier {
margin-top: 0.5rem;
}
.buttons button {
border: solid #999 1px;
padding: 0;
padding-left: 0.1rem;
padding-right: 0.1rem;
margin: 1px;
}
.filepath {
font-size: large;
font-style: italic;
margin-bottom: 1rem;
}
.relpath {
font-size: large;
font-weight: bold;
}
.tierbox, #selecthas {
margin-top: 0.5rem;
}

View file

@ -9,12 +9,12 @@
let relpermalink = ""; let relpermalink = "";
let protocol = ""; let protocol = "";
let title = "Foo bar"; let title = "Foo bar";
let tiers = [];
let tier = {};
let hastiers = "";
let candidates = [];
let hases = []; let hases = [];
let frontmatter = {}
frontmatter['triad'] = {};
frontmatter['ascriptions'] = {};
function keyUp(e) { function keyUp(e) {
if (e.key == "Escape") { if (e.key == "Escape") {
window.history.back() window.history.back()
@ -29,14 +29,12 @@
return Array.from(diff) return Array.from(diff)
} }
function newHasTiers(h) { function newHasTiers(arrgs) {
hastiers = h.detail.substring(1) let [fmKeyType, oldFmKey, newFmKey] = arrgs.detail;
tiers = [] frontmatter[fmKeyType][oldFmKey]['candidates'] = METASP[newFmKey].tiers;
if (hastiers != "Has new") { frontmatter[fmKeyType][oldFmKey]['tiers'] = [];
candidates = METASP[hastiers].tiers
}
} }
function loadHugoPageMetadata() { function loadHugoPageMetadata() {
var el = document.createElement('script'); var el = document.createElement('script');
el.onload = ()=> { el.onload = ()=> {
@ -49,40 +47,55 @@
relpermalink = repo.relpermalink relpermalink = repo.relpermalink
protocol = document.location.protocol.substring(0,4) protocol = document.location.protocol.substring(0,4)
hases = Object.keys(METASP) hases = Object.keys(METASP)
Object.entries(repo.frontmatter).forEach(([fmKey,fmValue]) =>
{
let fmKeyType = ''
if (fmKey.toLowerCase().startsWith("has_")) {
if (hases.includes(fmKey.substr(4))) {
fmKeyType = 'triad'
fmKey = fmKey.substr(4)
}
} else if (hases.includes(fmKey.toLowerCase())) {
fmKeyType = 'ascriptions'
}
if (fmKeyType != "") {
if (Array.isArray(fmValue)) {
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)
} else {
frontmatter[fmKeyType][fmKey]['candidates'].push(t)
}
})
}
}
}
)
let tkey = Object.keys(repo.frontmatter).filter(t => t.toLowerCase() == "title")[0] let tkey = Object.keys(repo.frontmatter).filter(t => t.toLowerCase() == "title")[0]
title = repo.frontmatter[tkey] title = repo.frontmatter[tkey]
let xastiers = Object.keys(repo.frontmatter).filter(t => t.toLowerCase().startsWith("has_"))
if (xastiers.length == 1) {
hastiers = xastiers[0].substr(4)
tiers = []
repo.frontmatter[xastiers[0]].forEach(t => {
METASP[hastiers].tiers.forEach(f => {
if (f.file == t) {
tiers.push(f)
}
})
})
candidates = diffArrr(METASP[hastiers].tiers, tiers)
}
} }
el.src = `../js/repo/${location.hash.substring(1)}.js` el.src = `../js/repo/${location.hash.substring(1)}.js`
document.body.appendChild(el) document.body.appendChild(el)
} }
function addToCandidatesRemoveFromTiers(tier) { function addToCandidatesRemoveFromTiers(arrgs) {
console.log("addToCandidates", tier.detail) const [tier, fmKeyType, fmKey] = arrgs.detail
tiers = tiers.filter(t => t !== tier.detail); frontmatter[fmKeyType][fmKey]['tiers'] = frontmatter[fmKeyType][fmKey]['tiers'].filter(t => t !== tier);
candidates = [...candidates, tier.detail] frontmatter[fmKeyType][fmKey]['candidates'] = [...frontmatter[fmKeyType][fmKey]['candidates'], tier]
} }
function addToTiersRemoveFromCandidates(v) { function addToTiersRemoveFromCandidates(arrgs) {
console.log("addToTiers", v.detail) const [value, fmKeyType, fmKey] = arrgs.detail
let value = v.detail const tier = frontmatter[fmKeyType][fmKey]['candidates'].filter(t => t.file == value)
const tier = candidates.filter(t => t.file == value) if (tier.length > 0) {
if (tier.length > 0) { frontmatter[fmKeyType][fmKey]['tiers'] = [...frontmatter[fmKeyType][fmKey]['tiers'], tier[0]]
tiers = [...tiers, tier[0]] frontmatter[fmKeyType][fmKey]['candidates'] = frontmatter[fmKeyType][fmKey]['candidates'].filter(t=> t != tier[0])
candidates = candidates.filter(t=> t != tier[0]) }
}
} }
onMount(()=> {loadHugoPageMetadata()}) onMount(()=> {loadHugoPageMetadata()})
@ -92,9 +105,15 @@
<main id="sandpoints"> <main id="sandpoints">
<form> <form>
<SpTitle relpath={relpath} title={title} /> <SpTitle relpath={relpath} title={title} />
<SpHasWhat on:hasTiersSelected={newHasTiers} hases={hases} hastiers={hastiers} /> {#each Object.entries(frontmatter) as fmItems}
<SpHasTiers on:addToCandidatesRemoveFromTiers={addToCandidatesRemoveFromTiers} hastiers={hastiers} candidates={candidates} tiers={tiers}/> {#if ['ascriptions', 'triad'].includes(fmItems[0])}
<SpHasCandidates on:addToTiersRemoveFromCandidates={addToTiersRemoveFromCandidates} candidates={candidates} /> {#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}
{/if}
{/each}
<label for="content">Content:</label> <label for="content">Content:</label>
<textarea bind:value={v} oninput='this.style.height = "";this.style.height = this.scrollHeight + 3 + "px"'></textarea> <textarea bind:value={v} oninput='this.style.height = "";this.style.height = this.scrollHeight + 3 + "px"'></textarea>
{#if document.location.protocol.substring(0,4) != "file"} {#if document.location.protocol.substring(0,4) != "file"}

View file

@ -2,6 +2,8 @@
import { createEventDispatcher } from 'svelte'; import { createEventDispatcher } from 'svelte';
import { afterUpdate } from 'svelte'; import { afterUpdate } from 'svelte';
export let candidates; export let candidates;
export let fmKeyType;
export let fmKey;
export let value; export let value;
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
@ -14,12 +16,12 @@
}); });
$: { $: {
dispatch("addToTiersRemoveFromCandidates", value) dispatch("addToTiersRemoveFromCandidates", [value, fmKeyType, fmKey])
value = 1; value = 1;
} }
</script> </script>
{#if candidates.length > 0} {#if candidates && candidates.length > 0}
<select class="selecttier" bind:value> <select class="selecttier" bind:value>
<option id="addnew" value="1" disabled selected>Add new...</option> <option id="addnew" value="1" disabled selected>Add new...</option>
{#each candidates as tier (tier.file)} {#each candidates as tier (tier.file)}

View file

@ -1,11 +1,12 @@
<script> <script>
import { createEventDispatcher } from 'svelte'; import { createEventDispatcher } from 'svelte';
export let hastiers;
export let tiers; export let tiers;
export let fmKey;
export let fmKeyType;
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
function removeTier(tier) { function removeTier(tier) {
dispatch("addToCandidatesRemoveFromTiers", tier) dispatch("addToCandidatesRemoveFromTiers", [tier, fmKeyType, fmKey])
} }
function swapTier(tier, n) { function swapTier(tier, n) {
@ -20,12 +21,12 @@
</script> </script>
{#if tiers.length >0} {#if tiers && tiers.length >0}
<div class="tierbox"> <div class="tierbox">
{#each tiers as tier, i (tier.file)} {#each tiers as tier, i (tier.file)}
<div class="tierline"> <div class="tierline">
<div class="filetitle"> <div class="filetitle">
<input readonly type="text" name="has_{hastiers}[]" class="hasinput" value="{tier.file}"><span class="tiertitle">({tier.title})</span> <input readonly type="text" name="{'triad' == fmKey ? "has_":"" }{fmKey}[]" class="hasinput" value="{tier.file}"><span class="tiertitle">({tier.title})</span>
</div> </div>
<div class="buttons"> <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 == tiers.length ? true:false}>⇓</button>

View file

@ -1,35 +1,31 @@
<script> <script>
import { createEventDispatcher } from 'svelte'; import { createEventDispatcher } from 'svelte';
import { afterUpdate } from 'svelte'; import { afterUpdate } from 'svelte';
export let fmKeyType;
export let fmKey;
export let fmValues;
export let hases; export let hases;
export let hastiers;
let value; let value;
let toggleFmKey = ''
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
afterUpdate(() => { function optselName(has) {
let optsel = document.getElementById('hasNew') return `_${has}_${fmKeyType}`
if (hastiers=="" && optsel) { }
optsel.selected = 'selected';
optsel.disabled = 'disabled'
} else if (hastiers != "") {
let optsel = document.getElementById('_' + hastiers)
optsel.selected = 'selected'
}
});
$: { $: {
console.log("hases", hases) if (value && value.split("_")[1] != fmKey) {
if (value && value.startsWith("_")) { toggleFmKey = fmKey;
dispatch("hasTiersSelected", value) dispatch("hasTiersSelected", [fmKeyType, fmKey, value.split("_")[1]])
} else if (toggleFmKey == fmKey) {
dispatch("hasTiersSelected", [fmKeyType, fmKey, value.split("_")[1]])
toggleFmKey = ''
} }
} }
</script> </script>
<select id="selecthas" bind:value> <select class="{fmKeyType}_{fmKey}" bind:value>
{#if hastiers == ""}
<option id="hasNew" title="Has new" value="hasNew">Has new...</option>
{/if}
{#each hases as has} {#each hases as has}
<option id="{'_' + has}" class="hasoption" title="{has}" value={'_' + has}>Has {has}:</option> <option id="{optselName(has)}" class="hasoption" selected={has == fmKey ? "selected":""} title="{has}" value={optselName(has)}>{'triad' == fmKeyType ? "Has ":""}{has}:</option>
{/each} {/each}
</select> </select>