First commit

This commit is contained in:
2026-01-14 23:24:24 +01:00
commit c9f15b87b3
214 changed files with 9851 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
document.addEventListener('alpine:init', () => {
Alpine.store('alphabreed', {
backUrl: '/',
pending: false,
async apiCall(method, url, data) {
this.pending = true;
const options = {
method: method,
headers: { 'Authorization': localStorage.getItem('alphabreedtoken') }
};
if (data) {
options.body = new FormData();
for (let key in data)
if (data.hasOwnProperty(key))
options.body.append(key, data[key]);
}
const response = await fetch(url, options);
this.pending = false;
if (!response.ok)
return false;
if (response.status == 204)
return true;
return await response.json();
},
async checkToken() {
const token = localStorage.getItem('alphabreedtoken');
if (!token) {
window.location = '/login/?back='+encodeURIComponent(this.backUrl);
return false;
}
const result = await this.apiCall('POST', '/api/collections/users/auth-refresh');
if (!result.token) {
window.location = '/login/?back='+encodeURIComponent(this.backUrl);
return false;
}
localStorage.setItem('alphabreedtoken', result.token);
localStorage.setItem('alphabreedid', result.record.id);
return true;
},
async createBookmarkCategory(name) {
const result = await this.apiCall('POST',
'/api/collections/bookmarkcategories/records',
{ owner: localStorage.getItem('alphabreedid'), name: name }
);
return result.id;
},
async updateBookmarkCategory(id, name) {
await this.apiCall('PATCH',
'/api/collections/bookmarkcategories/records/'+encodeURIComponent(id),
{ owner: localStorage.getItem('alphabreedid'), name: name }
);
},
async deleteBookmarkCategory(id) {
await this.apiCall('DELETE',
'/api/collections/bookmarkcategories/records/'+encodeURIComponent(id)
);
},
async createBookmark(categoryId, name, url) {
const result = await this.apiCall('POST',
'/api/collections/bookmarks/records',
{
owner: localStorage.getItem('alphabreedid'),
category: categoryId,
name: name,
url: url
}
);
return result.id;
},
async updateBookmark(id, categoryId, name, url) {
await this.apiCall('PATCH',
'/api/collections/bookmarks/records/'+encodeURIComponent(id),
{
owner: localStorage.getItem('alphabreedid'),
category: categoryId,
name: name,
url: url
}
);
},
async deleteBookmark(id) {
await this.apiCall('DELETE',
'/api/collections/bookmarks/records/'+encodeURIComponent(id)
);
},
async getBookmarkCategories() {
const result = await this.apiCall('GET',
'/api/collections/bookmarkcategories/records?perPage=9999&fields=id,name&sort=name'
);
return result.items;
},
async getBookmarks() {
const result = await this.apiCall('GET',
'/api/collections/bookmarks/records?perPage=1000&expand=category&fields=id,name,url,expand.category.id,expand.category.name&sort=name'
);
return result.items;
},
async getNotes() {
const owner = localStorage.getItem('alphabreedid');
const result = await this.apiCall('GET',
'/api/collections/notes/records/'+encodeURIComponent(owner)+'?fields=notes'
);
if (result === false)
return false;
return result.notes;
},
async createNotes(notes) {
return await this.apiCall('POST',
'/api/collections/notes/records',
{ id: localStorage.getItem('alphabreedid'), notes: notes }
);
},
async updateNotes(notes) {
const owner = localStorage.getItem('alphabreedid');
return await this.apiCall('PATCH',
'/api/collections/notes/records/'+encodeURIComponent(owner),
{ notes: notes }
);
},
});
});