Ethan Dalool
da5c1ee008
Tags on photos can now have timestamps, so that if you are tagging a video or audio you can reference a specific moment with your tag. In the interface, this means the tag is clickable and seeks to that point in the media. For the user interface, I am finding I need to move away from jinja for the object cards because it is too much hassle to keep the code for jinja-based cards for static rendering and the js-based cards for dynamic rendering in sync. Rather than write the same cards in two languages I can dump the JSON into the script and render the cards on load. Which makes the static HTML worse but that's what the JSON API is for anyway.
579 lines
13 KiB
JavaScript
579 lines
13 KiB
JavaScript
const api = {};
|
|
|
|
/**************************************************************************************************/
|
|
api.admin = {};
|
|
|
|
api.admin.clear_sessions =
|
|
function clear_sessions(callback)
|
|
{
|
|
return http.post({
|
|
url: "/admin/clear_sessions",
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.admin.reload_config =
|
|
function reload_config(callback)
|
|
{
|
|
return http.post({
|
|
url: "/admin/reload_config",
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.admin.uncache =
|
|
function uncache(callback)
|
|
{
|
|
return http.post({
|
|
url: "/admin/uncache",
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
/**************************************************************************************************/
|
|
api.albums = {};
|
|
|
|
api.albums._add_remove_photos =
|
|
function _add_remove_photos(album_id, photo_ids, add_or_remove, callback)
|
|
{
|
|
let url;
|
|
if (add_or_remove === "add")
|
|
{ url = `/album/${album_id}/add_photo`; }
|
|
else if (add_or_remove === "remove")
|
|
{ url = `/album/${album_id}/remove_photo`; }
|
|
else
|
|
{ throw `should be 'add' or 'remove', not ${add_or_remove}.`; }
|
|
|
|
if (Array.isArray(photo_ids))
|
|
{ photo_ids = photo_ids.join(","); }
|
|
|
|
return http.post({
|
|
url: url,
|
|
data: {"photo_id": photo_ids},
|
|
callback: callback
|
|
});
|
|
}
|
|
|
|
api.albums.add_child =
|
|
function add_child(album_id, child_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/add_child`,
|
|
data: {"child_id": child_id},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.add_photos =
|
|
function add_photos(album_id, photo_ids, callback)
|
|
{
|
|
return api.albums._add_remove_photos(album_id, photo_ids, "add", callback);
|
|
}
|
|
|
|
api.albums.create =
|
|
function create(title, parent_id, callback)
|
|
{
|
|
return http.post({
|
|
url: "/albums/create_album",
|
|
data: {"title": title, "parent_id": parent_id},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.delete =
|
|
function _delete(album_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/delete`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.get_all_albums =
|
|
function get_all_albums(callback)
|
|
{
|
|
return http.get({
|
|
url: "/all_albums.json",
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.edit =
|
|
function edit(album_id, title, description, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/edit`,
|
|
data: {"title": title, "description": description},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.refresh_directories =
|
|
function refresh_directories(album_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/refresh_directories`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.remove_child =
|
|
function remove_child(album_id, child_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/remove_child`,
|
|
data: {"child_id": child_id},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.remove_photos =
|
|
function remove_photos(album_id, photo_ids, callback)
|
|
{
|
|
return api.albums._add_remove_photos(album_id, photo_ids, "remove", callback);
|
|
}
|
|
|
|
api.albums.remove_thumbnail_photo =
|
|
function remove_thumbnail_photo(album_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/remove_thumbnail_photo`,
|
|
data: {},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.set_thumbnail_photo =
|
|
function set_thumbnail_photo(album_id, photo_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/set_thumbnail_photo`,
|
|
data: {"photo_id": photo_id},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.show_in_folder =
|
|
function show_in_folder(album_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/album/${album_id}/show_in_folder`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.albums.callback_follow =
|
|
function callback_follow(response)
|
|
{
|
|
if ((response.meta.status !== 200) || (! response.meta.json_ok) || (! response.data.id))
|
|
{
|
|
alert(JSON.stringify(response));
|
|
return;
|
|
}
|
|
window.location.href = "/album/" + response.data.id;
|
|
}
|
|
|
|
api.albums.callback_go_to_albums =
|
|
function callback_go_to_albums(response)
|
|
{
|
|
if (response.meta.status !== 200)
|
|
{
|
|
alert(JSON.stringify(response));
|
|
return;
|
|
}
|
|
window.location.href = "/albums";
|
|
}
|
|
|
|
/**************************************************************************************************/
|
|
api.bookmarks = {};
|
|
|
|
api.bookmarks.create =
|
|
function create(b_url, title, callback)
|
|
{
|
|
return http.post({
|
|
url: "/bookmarks/create_bookmark",
|
|
data: {"url": b_url.trim(), "title": title},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.bookmarks.delete =
|
|
function _delete(bookmark_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/bookmark/${bookmark_id}/delete`,
|
|
data: {},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.bookmarks.edit =
|
|
function edit(bookmark_id, title, b_url, callback)
|
|
{
|
|
return http.post({
|
|
url: `/bookmark/${bookmark_id}/edit`,
|
|
data: {"title": title.trim(), "url": b_url.trim()},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
/**************************************************************************************************/
|
|
api.photos = {};
|
|
|
|
api.photos.add_tag =
|
|
function add_tag(photo_id, tagname, timestamp, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/add_tag`,
|
|
data: {"tagname": tagname, "timestamp": timestamp},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.batch_add_tag =
|
|
function batch_add_tag(photo_ids, tagname, callback)
|
|
{
|
|
return http.post({
|
|
url: "/batch/photos/add_tag",
|
|
data: {"photo_ids": photo_ids.join(","), "tagname": tagname},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.batch_generate_thumbnail =
|
|
function batch_generate_thumbnail(photo_ids, callback)
|
|
{
|
|
return http.post({
|
|
url: "/batch/photos/generate_thumbnail",
|
|
data: {"photo_ids": photo_ids.join(",")},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.batch_refresh_metadata =
|
|
function batch_refresh_metadata(photo_ids, callback)
|
|
{
|
|
return http.post({
|
|
url: "/batch/photos/refresh_metadata",
|
|
data: {"photo_ids": photo_ids.join(",")},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.batch_remove_tag =
|
|
function batch_remove_tag(photo_ids, tagname, callback)
|
|
{
|
|
return http.post({
|
|
url: "/batch/photos/remove_tag",
|
|
data: {"photo_ids": photo_ids.join(","), "tagname": tagname},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.batch_set_searchhidden =
|
|
function batch_set_searchhidden(photo_ids, callback)
|
|
{
|
|
return http.post({
|
|
url: "/batch/photos/set_searchhidden",
|
|
data: {"photo_ids": photo_ids.join(",")},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.batch_unset_searchhidden =
|
|
function batch_unset_searchhidden(photo_ids, callback)
|
|
{
|
|
return http.post({
|
|
url: "/batch/photos/unset_searchhidden",
|
|
data: {"photo_ids": photo_ids.join(",")},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.copy_tags =
|
|
function copy_tags(photo_id, other_photo, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/copy_tags`,
|
|
data: {"other_photo": other_photo},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.delete =
|
|
function _delete(photo_id, delete_file, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/delete`,
|
|
data: {"delete_file": delete_file},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.generate_thumbnail =
|
|
function generate_thumbnail(photo_id, special, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/generate_thumbnail`,
|
|
data: special,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.get_download_zip_token =
|
|
function get_download_zip_token(photo_ids, callback)
|
|
{
|
|
return http.post({
|
|
url: "/batch/photos/download_zip",
|
|
data: {"photo_ids": photo_ids.join(",")},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.download_zip =
|
|
function download_zip(zip_token)
|
|
{
|
|
const url = `/batch/photos/download_zip/${zip_token}.zip`;
|
|
window.location.href = url;
|
|
}
|
|
|
|
api.photos.callback_download_zip =
|
|
function callback_download_zip(response)
|
|
{
|
|
let zip_token = response.data.zip_token;
|
|
api.photos.download_zip(zip_token);
|
|
}
|
|
|
|
api.photos.refresh_metadata =
|
|
function refresh_metadata(photo_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/refresh_metadata`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.remove_tag =
|
|
function remove_tag(photo_id, tagname, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/remove_tag`,
|
|
data: {"tagname": tagname},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.search =
|
|
function search(parameters, callback)
|
|
{
|
|
parameters = parameters.toString();
|
|
let url = "/search.json";
|
|
if (parameters !== "" )
|
|
{
|
|
url += "?" + parameters;
|
|
}
|
|
return http.get({
|
|
url: url,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.set_searchhidden =
|
|
function set_searchhidden(photo_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/set_searchhidden`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.unset_searchhidden =
|
|
function unset_searchhidden(photo_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/unset_searchhidden`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.show_in_folder =
|
|
function show_in_folder(photo_id, callback)
|
|
{
|
|
return http.post({
|
|
url: `/photo/${photo_id}/show_in_folder`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.photos.callback_go_to_search =
|
|
function callback_go_to_search(response)
|
|
{
|
|
if (response.meta.status !== 200)
|
|
{
|
|
alert(JSON.stringify(response));
|
|
return;
|
|
}
|
|
window.location.href = "/search";
|
|
}
|
|
|
|
/**************************************************************************************************/
|
|
api.photo_tag_rel = {};
|
|
|
|
api.photo_tag_rel.delete =
|
|
function _delete({id, callback=null})
|
|
{
|
|
return http.post({
|
|
url: `/photo_tag_rel/${id}/delete`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
/**************************************************************************************************/
|
|
api.tags = {};
|
|
|
|
api.tags.add_child =
|
|
function add_child(tag_name, child_name, callback)
|
|
{
|
|
return http.post({
|
|
url: `/tag/${tag_name}/add_child`,
|
|
data: {"child_name": child_name},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.add_synonym =
|
|
function add_synonym(tag_name, syn_name, callback)
|
|
{
|
|
return http.post({
|
|
url: `/tag/${tag_name}/add_synonym`,
|
|
data: {"syn_name": syn_name},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.create =
|
|
function create(name, description, callback)
|
|
{
|
|
return http.post({
|
|
url: `/tags/create_tag`,
|
|
data: {"name": name, "description": description},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.delete =
|
|
function _delete(tag_name, callback)
|
|
{
|
|
return http.post({
|
|
url: `/tag/${tag_name}/delete`,
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.easybake =
|
|
function easybake(easybake_string, callback)
|
|
{
|
|
return http.post({
|
|
url: "/tags/easybake",
|
|
data: {"easybake_string": easybake_string},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.edit =
|
|
function edit(tag_name, name, description, callback)
|
|
{
|
|
return http.post({
|
|
url: `/tag/${tag_name}/edit`,
|
|
data: {"name": name, "description": description},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.get_all_tags =
|
|
function get_all_tags(callback)
|
|
{
|
|
return http.get({
|
|
url: "/all_tags.json",
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.remove_child =
|
|
function remove_child(tag_name, child_name, callback)
|
|
{
|
|
return http.post({
|
|
url: `/tag/${tag_name}/remove_child`,
|
|
data: {"child_name": child_name},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.remove_synonym =
|
|
function remove_synonym(tag_name, syn_name, callback)
|
|
{
|
|
return http.post({
|
|
url: `/tag/${tag_name}/remove_synonym`,
|
|
data: {"syn_name": syn_name},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.tags.callback_go_to_tags =
|
|
function callback_go_to_tags(response)
|
|
{
|
|
if (response.meta.status !== 200)
|
|
{
|
|
alert(JSON.stringify(response));
|
|
return;
|
|
}
|
|
window.location.href = "/tags";
|
|
}
|
|
|
|
/**************************************************************************************************/
|
|
api.users = {};
|
|
|
|
api.users.edit =
|
|
function edit(username, display_name, callback)
|
|
{
|
|
return http.post({
|
|
url: `/user/${username}/edit`,
|
|
data: {"display_name": display_name},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.users.login =
|
|
function login(username, password, callback)
|
|
{
|
|
return http.post({
|
|
url: "/login",
|
|
data: {"username": username, "password": password},
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.users.logout =
|
|
function logout(callback)
|
|
{
|
|
return http.post({
|
|
url: "/logout",
|
|
callback: callback,
|
|
});
|
|
}
|
|
|
|
api.users.register =
|
|
function register(username, display_name, password_1, password_2, callback)
|
|
{
|
|
const data = {
|
|
"username": username,
|
|
"display_name": display_name,
|
|
"password_1": password_1,
|
|
"password_2": password_2,
|
|
};
|
|
return http.post({
|
|
url: "/register",
|
|
data: data,
|
|
callback: callback,
|
|
});
|
|
}
|