Remove failed experiment.
This commit is contained in:
parent
733776ee88
commit
7fecd65b33
1 changed files with 21 additions and 423 deletions
|
@ -138,7 +138,6 @@ h2, h3
|
||||||
>
|
>
|
||||||
Delete
|
Delete
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% set parents = specific_tag.get_parents() %}
|
{% set parents = specific_tag.get_parents() %}
|
||||||
|
@ -171,26 +170,31 @@ h2, h3
|
||||||
{{tag_object.tag_object(tag, link="search_musts", innertext="(+)")}}
|
{{tag_object.tag_object(tag, link="search_musts", innertext="(+)")}}
|
||||||
{{tag_object.tag_object(tag, link="search_forbids", innertext="(x)")}}
|
{{tag_object.tag_object(tag, link="search_forbids", innertext="(x)")}}
|
||||||
{{tag_object.tag_object(tag, link="info", innertext=qualified_name, with_alt_description=True)-}}
|
{{tag_object.tag_object(tag, link="info", innertext=qualified_name, with_alt_description=True)-}}
|
||||||
|
{% if '.' in qualified_name -%}
|
||||||
<button
|
<button
|
||||||
class="remove_tag_button red_button button_with_confirm"
|
class="remove_tag_button red_button button_with_confirm"
|
||||||
data-holder-class="confirm_holder_delete_tag{{' hidden' if tag.name!=qualified_name else ''}}"
|
data-holder-class="confirm_holder_remove_child"
|
||||||
data-onclick="return delete_tag_form(event);"
|
|
||||||
data-prompt="Delete Tag?"
|
|
||||||
data-confirm="Delete"
|
|
||||||
data-confirm-class="remove_tag_button_perm red_button"
|
|
||||||
data-cancel-class="remove_tag_button_perm gray_button"
|
|
||||||
>Delete</button>
|
|
||||||
{{-''-}}
|
|
||||||
<button
|
|
||||||
class="remove_tag_button red_button button_with_confirm"
|
|
||||||
data-holder-class="confirm_holder_remove_child{{' hidden' if tag.name==qualified_name else ''}}"
|
|
||||||
data-onclick="return remove_child_form(event);"
|
data-onclick="return remove_child_form(event);"
|
||||||
data-prompt="Unlink Tags?"
|
data-prompt="Unlink Tags?"
|
||||||
data-confirm="Unlink"
|
data-confirm="Unlink"
|
||||||
data-confirm-class="remove_tag_button_perm red_button"
|
data-confirm-class="remove_tag_button_perm red_button"
|
||||||
data-cancel-class="remove_tag_button_perm gray_button"
|
data-cancel-class="remove_tag_button_perm gray_button"
|
||||||
>Unlink</button>
|
>
|
||||||
|
Unlink
|
||||||
|
</button>
|
||||||
|
{%- else -%}
|
||||||
|
<button
|
||||||
|
class="remove_tag_button red_button button_with_confirm"
|
||||||
|
data-holder-class="confirm_holder_delete_tag"
|
||||||
|
data-onclick="return delete_tag_form(event);"
|
||||||
|
data-prompt="Delete Tag?"
|
||||||
|
data-confirm="Delete"
|
||||||
|
data-confirm-class="remove_tag_button_perm red_button"
|
||||||
|
data-cancel-class="remove_tag_button_perm gray_button"
|
||||||
|
>
|
||||||
|
Delete
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if include_synonyms %}
|
{% if include_synonyms %}
|
||||||
|
@ -207,7 +211,9 @@ h2, h3
|
||||||
data-confirm="Remove"
|
data-confirm="Remove"
|
||||||
data-confirm-class="remove_tag_button_perm red_button"
|
data-confirm-class="remove_tag_button_perm red_button"
|
||||||
data-cancel-class="remove_tag_button_perm gray_button"
|
data-cancel-class="remove_tag_button_perm gray_button"
|
||||||
>Remove</button>
|
>
|
||||||
|
Remove
|
||||||
|
</button>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -258,141 +264,12 @@ var add_tag_button = document.getElementById('add_tag_button');
|
||||||
var message_area = document.getElementById('message_area');
|
var message_area = document.getElementById('message_area');
|
||||||
common.bind_box_to_button(add_tag_textbox, add_tag_button, false);
|
common.bind_box_to_button(add_tag_textbox, add_tag_button, false);
|
||||||
|
|
||||||
TEMPLATE_BUTTON_DELETE_TAG = `<button
|
|
||||||
class="remove_tag_button red_button button_with_confirm"
|
|
||||||
data-holder-class="confirm_holder_delete_tag hidden"
|
|
||||||
data-onclick="return delete_tag_form(event);"
|
|
||||||
data-prompt="Delete Tag?"
|
|
||||||
data-confirm="Delete"
|
|
||||||
data-confirm-class="remove_tag_button_perm red_button"
|
|
||||||
data-cancel-class="remove_tag_button_perm gray_button"
|
|
||||||
>Delete</button>`;
|
|
||||||
|
|
||||||
TEMPLATE_BUTTON_REMOVE_CHILD = `<button
|
|
||||||
class="remove_tag_button red_button button_with_confirm"
|
|
||||||
data-holder-class="confirm_holder_remove_child hidden"
|
|
||||||
data-onclick="return remove_child_form(event);"
|
|
||||||
data-prompt="Unlink Tags?"
|
|
||||||
data-confirm="Unlink"
|
|
||||||
data-confirm-class="remove_tag_button_perm red_button"
|
|
||||||
data-cancel-class="remove_tag_button_perm gray_button"
|
|
||||||
>Unlink</button>`;
|
|
||||||
|
|
||||||
TEMPLATE_BUTTON_REMOVE_SYNONYM = `<button
|
|
||||||
class="remove_tag_button red_button button_with_confirm"
|
|
||||||
data-holder-class="confirm_holder_remove_synonym"
|
|
||||||
data-onclick="return remove_synonym_form(event);"
|
|
||||||
data-prompt="Remove Synonym?"
|
|
||||||
data-confirm="Remove"
|
|
||||||
data-confirm-class="remove_tag_button_perm red_button"
|
|
||||||
data-cancel-class="remove_tag_button_perm gray_button"
|
|
||||||
>Remove</button>`;
|
|
||||||
|
|
||||||
TEMPLATE_TAG_LI = `<li><a class="tag_object" href="/search?tag_musts={tag_name}">(+)</a>
|
|
||||||
<a class="tag_object" href="/search?tag_forbids={tag_name}">(x)</a>
|
|
||||||
<a class="tag_object" href="/tag/{tag_name}">{tag_name}</a></li>`;
|
|
||||||
|
|
||||||
function get_all_tag_objects()
|
|
||||||
{ return Array.from(document.querySelectorAll(".tag_object[href^='/tag/']")); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_descendant(tag_name, child_name)
|
|
||||||
{ return get_tag_objects_matching(`(^|\\.)${re_escape(tag_name)}\\.${re_escape(child_name)}($|\\.|\\+)`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_descendants(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`(^|\\.)${re_escape(tag_name)}\\.`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_synonym(synonym)
|
|
||||||
{ return get_tag_objects_matching(`\\+${re_escape(synonym)}$`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_non_root_tag(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`\\.${re_escape(tag_name)}($|\\+)`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_non_root_tag_and_descendants(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`\\.${re_escape(tag_name)}($|\\.|\\+)`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_root_tag(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`^${re_escape(tag_name)}($|\\+)`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_root_tag_and_descendants(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`^${re_escape(tag_name)}($|\\.|\\+)`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_tag(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`(^|\\.)${re_escape(tag_name)}$`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_tag_and_descendants(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`(^|\\.)${re_escape(tag_name)}($|\\.|\\+)`); }
|
|
||||||
|
|
||||||
function get_tag_objects_for_tag_and_synonyms(tag_name)
|
|
||||||
{ return get_tag_objects_matching(`(^|\\.)${re_escape(tag_name)}($|\\+)`); }
|
|
||||||
|
|
||||||
function get_tag_objects_matching(regex)
|
|
||||||
{
|
|
||||||
regex = new RegExp(regex);
|
|
||||||
const ret = get_all_tag_objects().filter(tag_object => tag_object.innerText.match(regex));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
function split_exclusive(text, tag_name)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
Given text="a.b.c.d.e", tag_name"c", return "d.e".
|
|
||||||
*/
|
|
||||||
const regex = `(?:^|\\.)${re_escape(tag_name)}(?:$|\\.)`;
|
|
||||||
const splitted = text.split(new RegExp(regex));
|
|
||||||
if (splitted.length == 1)
|
|
||||||
{ return null; }
|
|
||||||
const descendantry = splitted.pop();
|
|
||||||
return descendantry;
|
|
||||||
}
|
|
||||||
|
|
||||||
function split_inclusive(text, tag_name)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
Given text="a.b.c.d.e", tag_name"c", return "c.d.e".
|
|
||||||
*/
|
|
||||||
const descendantry = split_exclusive(text, tag_name);
|
|
||||||
if (descendantry === null)
|
|
||||||
{ return null; }
|
|
||||||
if (descendantry === "")
|
|
||||||
{ return tag_name; }
|
|
||||||
return tag_name + "." + descendantry;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tag_object_from_li(li)
|
function tag_object_from_li(li)
|
||||||
{
|
{
|
||||||
const tag_objects = li.getElementsByClassName("tag_object");
|
const tag_objects = li.getElementsByClassName("tag_object");
|
||||||
return tag_objects[tag_objects.length - 1];
|
return tag_objects[tag_objects.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
function lift_tag_object(tag_object, from_parent)
|
|
||||||
{
|
|
||||||
const descendantry = split_exclusive(tag_object.innerText, from_parent);
|
|
||||||
const regex = `(^|\\.)${re_escape(from_parent)}\\.`;
|
|
||||||
tag_object.innerText = tag_object.innerText.replace(new RegExp(regex), "$1");
|
|
||||||
const is_now_root = tag_object.innerText.indexOf(descendantry) == 0;
|
|
||||||
if (! is_now_root)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const other_parents = get_tag_objects_matching(`\\.${re_escape(descendantry)}$`)
|
|
||||||
if (other_parents.length == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const li = tag_object.closest("li");
|
|
||||||
li.parentElement.removeChild(li);
|
|
||||||
}
|
|
||||||
|
|
||||||
function re_escape(s)
|
|
||||||
{
|
|
||||||
// Thank you Pi Marillion.
|
|
||||||
// https://stackoverflow.com/a/30851002
|
|
||||||
return s.replace(/[^A-Za-z0-9_]/g, '\\$&');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// FORM FUNCTIONS //////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
function easybake_form()
|
function easybake_form()
|
||||||
{
|
{
|
||||||
const easybake_string = add_tag_textbox.value;
|
const easybake_string = add_tag_textbox.value;
|
||||||
|
@ -454,69 +331,6 @@ function remove_synonym_form(event)
|
||||||
return api.tags.remove_synonym(tag_name, synonym, tag_action_callback);
|
return api.tags.remove_synonym(tag_name, synonym, tag_action_callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CALLBACKS ///////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
function easybake_callback(response)
|
|
||||||
{
|
|
||||||
tag_action_callback(response);
|
|
||||||
if (response.meta.status !== 200)
|
|
||||||
{return;}
|
|
||||||
for (const data of response.data)
|
|
||||||
{
|
|
||||||
if (!("action" in data))
|
|
||||||
{continue;}
|
|
||||||
const action = data.action;
|
|
||||||
if (action == "new_tag")
|
|
||||||
{
|
|
||||||
const tag_name = data.tagname;
|
|
||||||
new_tag(tag_name);
|
|
||||||
}
|
|
||||||
else if (action == "new_synonym")
|
|
||||||
{
|
|
||||||
const [tag_name, synonym] = data.tagname.split("+");
|
|
||||||
new_synonym(tag_name, synonym);
|
|
||||||
}
|
|
||||||
else if (action == "join_group")
|
|
||||||
{
|
|
||||||
const [parent_name, child_name] = data.tagname.split(".");
|
|
||||||
join_group(parent_name, child_name);
|
|
||||||
}
|
|
||||||
else if (action == "rename_tag")
|
|
||||||
{
|
|
||||||
const [rename_from, rename_to] = data.tagname.split("=");
|
|
||||||
rename_tag(rename_from, rename_to);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function delete_tag_callback(response)
|
|
||||||
{
|
|
||||||
tag_action_callback(response);
|
|
||||||
if (response.meta.status !== 200)
|
|
||||||
{return;}
|
|
||||||
const tag_name = response.data.tagname;
|
|
||||||
delete_tag(tag_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove_child_callback(response)
|
|
||||||
{
|
|
||||||
tag_action_callback(response);
|
|
||||||
if (response.meta.status !== 200)
|
|
||||||
{return;}
|
|
||||||
const [parent_name, tag_name] = response.data.tagname.split(".");
|
|
||||||
remove_child(parent_name, tag_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove_synonym_callback(response)
|
|
||||||
{
|
|
||||||
tag_action_callback(response);
|
|
||||||
if (response.meta.status !== 200)
|
|
||||||
{return;}
|
|
||||||
|
|
||||||
const synonym = response.data.synonym;
|
|
||||||
remove_synonym(synonym);
|
|
||||||
}
|
|
||||||
|
|
||||||
function tag_action_callback(response)
|
function tag_action_callback(response)
|
||||||
{
|
{
|
||||||
let datas = response.data;
|
let datas = response.data;
|
||||||
|
@ -566,216 +380,6 @@ function tag_action_callback(response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// UI UPDATERS /////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
function new_tag(tag_name)
|
|
||||||
{
|
|
||||||
const template = TEMPLATE_TAG_LI.replace(/\{tag_name\}/g, tag_name);
|
|
||||||
const new_li = common.html_to_element(template);
|
|
||||||
add_buttons_to_li(new_li);
|
|
||||||
document.getElementById("tag_list").appendChild(new_li);
|
|
||||||
sort_tag_objects();
|
|
||||||
}
|
|
||||||
|
|
||||||
function new_synonym(tag_name, synonym)
|
|
||||||
{
|
|
||||||
for (const tag_object of get_tag_objects_for_tag(tag_name))
|
|
||||||
{
|
|
||||||
const li = tag_object.closest("li");
|
|
||||||
const new_li = li.cloneNode(true);
|
|
||||||
tag_object_from_li(new_li).innerText += `+${synonym}`;
|
|
||||||
li.parentElement.appendChild(new_li);
|
|
||||||
add_buttons_to_li(new_li);
|
|
||||||
}
|
|
||||||
sort_tag_objects();
|
|
||||||
}
|
|
||||||
|
|
||||||
function join_group(parent_name, child_name)
|
|
||||||
{
|
|
||||||
console.log(parent_name + " " + SPECIFIC_TAG);
|
|
||||||
if (parent_name === SPECIFIC_TAG)
|
|
||||||
{
|
|
||||||
console.log("GO!");
|
|
||||||
return new_tag(`${parent_name}.${child_name}`);
|
|
||||||
}
|
|
||||||
const parent_tags = get_tag_objects_for_tag(parent_name);
|
|
||||||
const seen_names = new Set();
|
|
||||||
for (child_tag of get_tag_objects_for_tag_and_descendants(child_name))
|
|
||||||
{
|
|
||||||
const descendantry = split_inclusive(child_tag.innerText, child_name);
|
|
||||||
if (seen_names.has(descendantry))
|
|
||||||
{ break; }
|
|
||||||
seen_names.add(descendantry);
|
|
||||||
const child_li = child_tag.closest("li");
|
|
||||||
for (const parent_tag of parent_tags)
|
|
||||||
{
|
|
||||||
const parent_li = parent_tag.closest("li");
|
|
||||||
const new_li = child_li.cloneNode(true);
|
|
||||||
tag_object_from_li(new_li).innerText = parent_tag.innerText + "." + descendantry;
|
|
||||||
parent_li.parentElement.appendChild(new_li);
|
|
||||||
add_buttons_to_li(new_li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const tag_object of get_tag_objects_for_root_tag_and_descendants(child_name))
|
|
||||||
{
|
|
||||||
const li = tag_object.closest("li");
|
|
||||||
li.parentElement.removeChild(li);
|
|
||||||
}
|
|
||||||
sort_tag_objects();
|
|
||||||
}
|
|
||||||
|
|
||||||
function rename_tag(rename_from, rename_to)
|
|
||||||
{
|
|
||||||
if (rename_from == rename_to)
|
|
||||||
{ return; }
|
|
||||||
for (const tag_object of get_all_tag_objects())
|
|
||||||
{
|
|
||||||
tag_object.innerText = tag_object.innerText.replace(new RegExp(`(^|\\.)${re_escape(rename_from)}($|\\.|\\+)`), `$1${rename_to}$2`);
|
|
||||||
}
|
|
||||||
sort_tag_objects();
|
|
||||||
}
|
|
||||||
|
|
||||||
function delete_tag(tag_name)
|
|
||||||
{
|
|
||||||
const tag_objects = get_tag_objects_for_tag_and_synonyms(tag_name);
|
|
||||||
for (const tag_object of tag_objects)
|
|
||||||
{
|
|
||||||
const li = tag_object.closest("li");
|
|
||||||
li.parentElement.removeChild(li);
|
|
||||||
}
|
|
||||||
const child_tags = get_tag_objects_for_descendants(tag_name);
|
|
||||||
for (const child_tag of child_tags)
|
|
||||||
{
|
|
||||||
lift_tag_object(child_tag, tag_name);
|
|
||||||
}
|
|
||||||
update_all_li_buttons();
|
|
||||||
sort_tag_objects();
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove_child(parent_name, child_name)
|
|
||||||
{
|
|
||||||
const tag_objects = get_tag_objects_for_descendant(parent_name, child_name);
|
|
||||||
const seen_names = new Set();
|
|
||||||
for (const tag_object of tag_objects)
|
|
||||||
{
|
|
||||||
const descendantry = split_exclusive(tag_object.innerText, parent_name);
|
|
||||||
if (descendantry === null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const tag_li = tag_object.closest("li");
|
|
||||||
if (seen_names.has(descendantry))
|
|
||||||
{
|
|
||||||
tag_li.parentElement.removeChild(tag_li);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
tag_object.innerText = descendantry;
|
|
||||||
update_li_buttons(tag_li);
|
|
||||||
seen_names.add(descendantry);
|
|
||||||
}
|
|
||||||
|
|
||||||
const child_as_root = get_tag_objects_for_root_tag_and_descendants(child_name);
|
|
||||||
const child_as_non_root = get_tag_objects_for_non_root_tag(child_name)
|
|
||||||
if (child_as_non_root.length > 0)
|
|
||||||
{
|
|
||||||
for (const tag_object of child_as_root)
|
|
||||||
{
|
|
||||||
const tag_li = tag_object.closest("li");
|
|
||||||
tag_li.parentElement.removeChild(tag_li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sort_tag_objects();
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove_synonym(synonym)
|
|
||||||
{
|
|
||||||
for (const tag_object of get_tag_objects_for_synonym(synonym))
|
|
||||||
{
|
|
||||||
const li = tag_object.closest("li");
|
|
||||||
li.parentElement.removeChild(li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function add_buttons_to_li(li)
|
|
||||||
{
|
|
||||||
for (const existing of Array.from(li.getElementsByClassName("confirm_holder")))
|
|
||||||
{
|
|
||||||
li.removeChild(existing);
|
|
||||||
}
|
|
||||||
li.appendChild(common.html_to_element(TEMPLATE_BUTTON_DELETE_TAG));
|
|
||||||
li.appendChild(common.html_to_element(TEMPLATE_BUTTON_REMOVE_CHILD));
|
|
||||||
li.appendChild(common.html_to_element(TEMPLATE_BUTTON_REMOVE_SYNONYM));
|
|
||||||
for (const button of Array.from(li.getElementsByClassName("button_with_confirm")))
|
|
||||||
{
|
|
||||||
common.init_button_with_confirm(button);
|
|
||||||
}
|
|
||||||
update_li_buttons(li);
|
|
||||||
}
|
|
||||||
|
|
||||||
function add_buttons_to_all_lis()
|
|
||||||
{
|
|
||||||
const lis = document.getElementById("tag_list").children;
|
|
||||||
for (const li of lis)
|
|
||||||
{
|
|
||||||
add_buttons_to_li(li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function update_li_buttons(li)
|
|
||||||
{
|
|
||||||
const tag_object = tag_object_from_li(li);
|
|
||||||
const delete_button = li.querySelector(".confirm_holder_delete_tag");
|
|
||||||
const unlink_button = li.querySelector(".confirm_holder_remove_child");
|
|
||||||
const synonym_button = li.querySelector(".confirm_holder_remove_synonym");
|
|
||||||
if (tag_object.innerText.includes("+"))
|
|
||||||
{
|
|
||||||
synonym_button.classList.remove("hidden");
|
|
||||||
delete_button.classList.add("hidden");
|
|
||||||
unlink_button.classList.add("hidden");
|
|
||||||
}
|
|
||||||
else if (tag_object.innerText.includes("."))
|
|
||||||
{
|
|
||||||
unlink_button.classList.remove("hidden");
|
|
||||||
delete_button.classList.add("hidden");
|
|
||||||
synonym_button.classList.add("hidden");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
delete_button.classList.remove("hidden");
|
|
||||||
unlink_button.classList.add("hidden");
|
|
||||||
synonym_button.classList.add("hidden");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function update_all_li_buttons()
|
|
||||||
{
|
|
||||||
const lis = document.getElementById("tag_list").children;
|
|
||||||
for (const li of lis)
|
|
||||||
{
|
|
||||||
update_li_buttons(li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function sort_tag_objects()
|
|
||||||
{
|
|
||||||
const start = performance.now();
|
|
||||||
function compare(li1, li2)
|
|
||||||
{
|
|
||||||
const tag1 = tag_object_from_li(li1).innerText;
|
|
||||||
const tag2 = tag_object_from_li(li2).innerText;
|
|
||||||
return tag1 < tag2 ? -1 : 1;
|
|
||||||
}
|
|
||||||
const tag_list = document.getElementById("tag_list");
|
|
||||||
const lis = Array.from(tag_list.children);
|
|
||||||
lis.sort(compare);
|
|
||||||
for (const li of lis)
|
|
||||||
{
|
|
||||||
tag_list.appendChild(li);
|
|
||||||
}
|
|
||||||
const end = performance.now();
|
|
||||||
}
|
|
||||||
|
|
||||||
{% if specific_tag is not none %}
|
{% if specific_tag is not none %}
|
||||||
function on_open(ed, edit_element_map)
|
function on_open(ed, edit_element_map)
|
||||||
{
|
{
|
||||||
|
@ -833,11 +437,5 @@ var name_text = document.getElementById("name_text");
|
||||||
var description_text = document.getElementById("description_text");
|
var description_text = document.getElementById("description_text");
|
||||||
var ed = new editor.Editor([name_text, description_text], on_open, on_save, on_cancel);
|
var ed = new editor.Editor([name_text, description_text], on_open, on_save, on_cancel);
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
function on_pageload()
|
|
||||||
{
|
|
||||||
// window.setTimeout(add_buttons_to_all_lis, 0);
|
|
||||||
}
|
|
||||||
document.addEventListener("DOMContentLoaded", on_pageload);
|
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue