You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
3 years ago
|
export default {
|
||
|
setup() {
|
||
|
const { ref, computed } = Vue;
|
||
|
|
||
|
const title = ref("");
|
||
|
const link = ref("");
|
||
|
const overview = ref("");
|
||
|
const categories = ref([""]);
|
||
|
const date = ref(null);
|
||
|
|
||
|
const sent = ref(false);
|
||
|
const disabled = computed(() => {
|
||
|
return [title, overview, overview, categories].some((input) => input.value == "");
|
||
|
});
|
||
|
|
||
2 years ago
|
const newPad = function () {
|
||
|
let name = title.value.trim().replaceAll(" ", "_");
|
||
|
let url = `https://pad.xpub.nl/p/${name}`;
|
||
|
window.open(url);
|
||
|
return url;
|
||
|
};
|
||
|
|
||
3 years ago
|
const submit = function () {
|
||
2 years ago
|
if (link.value == "") {
|
||
|
link.value = newPad();
|
||
|
}
|
||
|
|
||
2 years ago
|
fetch("api", {
|
||
3 years ago
|
method: "POST",
|
||
|
headers: { "Content-Type": "application/json" },
|
||
|
body: JSON.stringify({
|
||
2 years ago
|
title: title.value.trim(),
|
||
3 years ago
|
link: link.value,
|
||
|
overview: overview.value,
|
||
2 years ago
|
categories: categories.value.join(", "),
|
||
3 years ago
|
date: date.value,
|
||
|
}),
|
||
|
});
|
||
|
sent.value = true;
|
||
|
|
||
|
title.value = "";
|
||
|
link.value = "";
|
||
|
overview.value = "";
|
||
|
categories.value = [""];
|
||
|
date.value = null;
|
||
|
};
|
||
|
|
||
2 years ago
|
return { title, link, overview, categories, date, submit, newPad, sent, disabled };
|
||
3 years ago
|
},
|
||
|
|
||
|
template: `
|
||
|
|
||
|
<div class='app-form'>
|
||
|
<h2>Add a new pad</h2>
|
||
2 years ago
|
<input class='title' type="text" v-model="title" placeholder="Title" />
|
||
|
<input class='link' type="text" v-model="link" placeholder="URL" />
|
||
3 years ago
|
|
||
2 years ago
|
<input class='overview' type="text" v-model="overview" placeholder="Overview" />
|
||
|
<input class='categories' type="text" v-model="categories[index]" placeholder="Category" v-for="(category, index) in categories" :key="index"/>
|
||
3 years ago
|
<button class="add" @click="categories.push('')">+</button>
|
||
2 years ago
|
<input class='date' type="date" v-model="date" placeholder="Date" />
|
||
3 years ago
|
|
||
2 years ago
|
<button @click="submit" class="submit">Insert</button>
|
||
3 years ago
|
</div>
|
||
|
|
||
|
|
||
|
`,
|
||
|
};
|