You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.8 KiB
152 lines
3.8 KiB
import { ref, reactive, watch, computed } from "vue";
|
|
|
|
|
|
function isIterable(obj) {
|
|
// checks for null and undefined
|
|
if (obj == null) {
|
|
return false;
|
|
}
|
|
return typeof obj[Symbol.iterator] === 'function';
|
|
}
|
|
|
|
export async function homeAction(options = {}) {
|
|
return await ( await fetch("/", {
|
|
method: "POST",
|
|
headers: {
|
|
Accept: "application/json",
|
|
},
|
|
body: JSON.stringify(options),
|
|
})).json();
|
|
}
|
|
|
|
export async function getQuery(query, options = {}) {
|
|
return (await ( await fetch("/api/query", {
|
|
method: "POST",
|
|
headers: {
|
|
Accept: "application/json",
|
|
// completely unsafe
|
|
// Authorization: "Basic "+btoa("api@api.de:H]RcScp];76!-PB")
|
|
},
|
|
body: JSON.stringify({
|
|
query: query,
|
|
...options
|
|
}),
|
|
})).json()).result;
|
|
}
|
|
|
|
|
|
async function getKirby(endpoint) {
|
|
return (await (await fetch("/api"+endpoint, {
|
|
method: "GET",
|
|
headers: {
|
|
// completely unsafe
|
|
Authorization: "Basic "+btoa("api@api.de:H]RcScp];76!-PB")
|
|
}
|
|
})).json()).data;
|
|
// .catch(error => {
|
|
// console.log("Error:", error);
|
|
// });
|
|
}
|
|
|
|
export async function setKirby(endpoint, data) {
|
|
const response = await fetch(`/${endpoint}`, {
|
|
method: "POST",
|
|
cache: "no-cache",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify({
|
|
action: "update",
|
|
data: data
|
|
}),
|
|
});
|
|
const ret = await response.json();
|
|
return ret;
|
|
}
|
|
|
|
function updateContent(endpoint, data) {
|
|
return fetch("/api"+endpoint, {
|
|
method: "PATCH",
|
|
headers: {
|
|
// "X-CSRF" : g_csrf,
|
|
// completely unsafe
|
|
"Authorization": "Basic "+btoa("api@api.de:H]RcScp];76!-PB")
|
|
},
|
|
body: JSON.stringify(data)
|
|
})
|
|
.then(response => response.json())
|
|
.then(response => {
|
|
// console.log(response.data);
|
|
})
|
|
.catch(error => {
|
|
console.log("Error:", error);
|
|
});
|
|
}
|
|
|
|
|
|
export const convertToPages = async (obj) => {
|
|
for(var key in obj){
|
|
if (obj[key].hasOwnProperty("link")) {
|
|
obj[key] = await kirbyPage(obj[key].link);
|
|
} else if (Array.isArray(obj[key]) || typeof obj[key] === 'object' ) {
|
|
obj[key] = convertToPages(obj[key]);
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
|
|
export const kirbyPage = async (endpoint) => {
|
|
if (!endpoint.startsWith("/pages/")){
|
|
endpoint = "/pages/"+endpoint.replaceAll("/","+");
|
|
}
|
|
|
|
let patch = false;
|
|
const page = new Proxy(reactive({}), {
|
|
async set(target, key, value) {
|
|
if(value.hasOwnProperty("uuid") && value.uuid.startsWith("page://")){
|
|
value = await kirbyPage(value.link);
|
|
}
|
|
if (Array.isArray(value) || typeof value === 'object' ) {
|
|
for(var i in value){
|
|
if (value[i].hasOwnProperty("uuid") && value[i].uuid.startsWith("page://")) {
|
|
value[i] = await kirbyPage(value[i].link);
|
|
}
|
|
}
|
|
}
|
|
target[key] = value;
|
|
if (patch) {
|
|
const data = {};
|
|
if (value.isPage) {
|
|
data[key] = "page://"+value.uuid;
|
|
} else if (Array.isArray(value) || typeof value === 'object' ) {
|
|
data[key] = [];
|
|
for (var i in value) {
|
|
if (value[i].isPage) {
|
|
data[key].push("page://"+value[i].uuid);
|
|
} else {
|
|
data[key].push(value[i]);
|
|
}
|
|
}
|
|
} else {
|
|
data[key] = value;
|
|
}
|
|
updateContent(endpoint, data);
|
|
}
|
|
return true;
|
|
},
|
|
get(target, prop, receiver) {
|
|
if (prop == "isPage") {
|
|
return true;
|
|
}
|
|
return target[prop];
|
|
}
|
|
}
|
|
);
|
|
const lastData = ref({});
|
|
const kData = await getKirby(endpoint);
|
|
Object.assign(page, kData.content);
|
|
|
|
patch = true;
|
|
return page;
|
|
}
|
|
|