mirror of https://github.com/snachodog/mybuddy.git
Basically everything works :)
This commit is contained in:
parent
c397836e68
commit
4fd55124f4
|
@ -1,7 +1,3 @@
|
||||||
<div>
|
|
||||||
{{ widget }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form_control" data-tags-url="{% url 'api:api-root' %}tags/"
|
<div class="form_control" data-tags-url="{% url 'api:api-root' %}tags/"
|
||||||
{% for k, v in widget.attrs.items %}
|
{% for k, v in widget.attrs.items %}
|
||||||
{{ k }}={{ v }}
|
{{ k }}={{ v }}
|
||||||
|
@ -20,22 +16,19 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="new-tags">
|
<div class="new-tags">
|
||||||
<span>Suggestions:</span>
|
<div class="create-tag-inputs input-group">
|
||||||
|
<input class="form-control" type="text" name="" placeholder="Tag name">
|
||||||
|
<div class="input-group-append">
|
||||||
|
<button class="btn btn-outline-primary bg-dark btn-add-new-tag" type="button">Add</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span>Recently used:</span>
|
||||||
{% for t in widget.tag_suggestions.quick %}
|
{% for t in widget.tag_suggestions.quick %}
|
||||||
<span data-value="{{ t.name }}" data-color="{{ t.color }}" class="tag btn badge badge-pill cursor-pointer mr-1" style="background-color: {{ t.color }};">
|
<span data-value="{{ t.name }}" data-color="{{ t.color }}" class="tag btn badge badge-pill cursor-pointer mr-1" style="background-color: {{ t.color }};">
|
||||||
{{ t.name }}
|
{{ t.name }}
|
||||||
<span class="add-remove-icon pl-1 pr-1">+</span>
|
<span class="add-remove-icon pl-1 pr-1">+</span>
|
||||||
</span>
|
</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<div class="createtag btn badge badge-pill cursor-pointer border">
|
|
||||||
<span class="plus">+</span>
|
|
||||||
<div class="create-tag-inputs input-group ml-3 mr-3 d-none">
|
|
||||||
<input class="form-control" type="text" name="" placeholder="Tag name">
|
|
||||||
<div class=="input-group-append">
|
|
||||||
<button class="btn btn-outline-primary btn-add-new-tag" type="button">Add</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input
|
||||||
type="hidden"
|
type="hidden"
|
||||||
|
@ -54,18 +47,9 @@
|
||||||
const inputElement = widget.querySelector('input[type="hidden"]');
|
const inputElement = widget.querySelector('input[type="hidden"]');
|
||||||
|
|
||||||
const apiTagsUrl = widget.getAttribute('data-tags-url');
|
const apiTagsUrl = widget.getAttribute('data-tags-url');
|
||||||
const createTagButton = widget.querySelector('.createtag');
|
const createTagInputs = widget.querySelector('.create-tag-inputs');
|
||||||
const addTagInput = createTagButton.querySelector('input[type="text"]');
|
const addTagInput = createTagInputs.querySelector('input[type="text"]');
|
||||||
const addTagButton = createTagButton.querySelector('.btn-add-new-tag');
|
const addTagButton = createTagInputs.querySelector('.btn-add-new-tag');
|
||||||
|
|
||||||
function showCreateTag() {
|
|
||||||
createTagButton.removeEventListener('click', showCreateTag);
|
|
||||||
createTagButton.classList.remove('btn');
|
|
||||||
createTagButton.querySelector(".plus").classList.add("d-none");
|
|
||||||
createTagButton.querySelector(".create-tag-inputs").classList.remove("d-none");
|
|
||||||
addTagInput.value = "";
|
|
||||||
}
|
|
||||||
createTagButton.addEventListener('click', showCreateTag);
|
|
||||||
|
|
||||||
function doReq(method, uri, data, success, fail) {
|
function doReq(method, uri, data, success, fail) {
|
||||||
const req = new XMLHttpRequest();
|
const req = new XMLHttpRequest();
|
||||||
|
@ -90,25 +74,30 @@
|
||||||
req.send(data);
|
req.send(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createTag() {
|
function createTagClicked() {
|
||||||
const tagName = addTagInput.value.trim();
|
const tagName = addTagInput.value.trim();
|
||||||
const uriTagName = encodeURIComponent(tagName);
|
const uriTagName = encodeURIComponent(tagName);
|
||||||
|
|
||||||
|
function success() {
|
||||||
|
addTagInput.value = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail(msg) {
|
||||||
|
msg = msg || "Error creating tag";
|
||||||
|
|
||||||
|
addTagInput.select()
|
||||||
|
alert(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tagName) {
|
||||||
|
fail('Not a valid tag name');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const data = JSON.stringify({
|
const data = JSON.stringify({
|
||||||
'name': addTagInput.value
|
'name': addTagInput.value
|
||||||
});
|
});
|
||||||
|
|
||||||
function close() {
|
|
||||||
createTagButton.addEventListener('click', showCreateTag);
|
|
||||||
createTagButton.classList.add('btn');
|
|
||||||
createTagButton.querySelector(".plus").classList.remove("d-none");
|
|
||||||
createTagButton.querySelector(".create-tag-inputs").classList.add("d-none");
|
|
||||||
}
|
|
||||||
|
|
||||||
function fail() {
|
|
||||||
close();
|
|
||||||
alert("Error creating tag");
|
|
||||||
}
|
|
||||||
|
|
||||||
function addTag(name, color) {
|
function addTag(name, color) {
|
||||||
const foundTag = widget.querySelector(`span[data-value="${name}"]`);
|
const foundTag = widget.querySelector(`span[data-value="${name}"]`);
|
||||||
|
@ -119,8 +108,7 @@
|
||||||
const tag = createNewTag(name, color, "-");
|
const tag = createNewTag(name, color, "-");
|
||||||
insertTag(currentTags, tag);
|
insertTag(currentTags, tag);
|
||||||
removeTagCallback(tag);
|
removeTagCallback(tag);
|
||||||
|
success();
|
||||||
close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
doReq("GET", `${apiTagsUrl}?name=${uriTagName}`, null,
|
doReq("GET", `${apiTagsUrl}?name=${uriTagName}`, null,
|
||||||
|
@ -140,7 +128,14 @@
|
||||||
}, fail
|
}, fail
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
addTagButton.addEventListener('click', createTag);
|
addTagButton.addEventListener('click', createTagClicked);
|
||||||
|
addTagInput.addEventListener('keydown', (e) => {
|
||||||
|
const key = e.key.toLowerCase();
|
||||||
|
if (key === "enter") {
|
||||||
|
e.preventDefault();
|
||||||
|
createTagClicked();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function hexParse(x) {
|
function hexParse(x) {
|
||||||
return parseInt(x, 16);
|
return parseInt(x, 16);
|
||||||
|
@ -184,12 +179,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function insertTag(list, tag) {
|
function insertTag(list, tag) {
|
||||||
const createTag = list.querySelector(".createtag");
|
list.appendChild(tag);
|
||||||
if (createTag) {
|
|
||||||
list.insertBefore(tag, createTag);
|
|
||||||
} else {
|
|
||||||
list.appendChild(tag);
|
|
||||||
}
|
|
||||||
updateInputList();
|
updateInputList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue