Merge branch 'tag-improvements' of Public/pics into master

This commit is contained in:
Roflin 2019-03-16 12:12:25 +01:00 committed by Gitea
commit 3fc8ccf550
6 changed files with 69 additions and 16 deletions

View File

@ -41,8 +41,9 @@ class ProvideAutoSuggest extends JSONController
$results = Tag::matchPeople($data); $results = Tag::matchPeople($data);
foreach ($results as $id_tag => $tag) foreach ($results as $id_tag => $tag)
$this->payload['items'][] = [ $this->payload['items'][] = [
'label' => $tag, 'label' => $tag['tag'],
'id_tag' => $id_tag, 'id_tag' => $id_tag,
'url' => BASEURL . '/' . $tag['slug'] . '/',
]; ];
} }
} }

View File

@ -98,8 +98,19 @@ class ViewPhoto extends HTMLController
} }
// We are! // We are!
$photo->linkTags([(int) $_POST['id_tag']]); if (!isset($_POST['delete']))
echo json_encode(['success' => true]); {
exit; $photo->linkTags([(int) $_POST['id_tag']]);
echo json_encode(['success' => true]);
exit;
}
// ... deleting, that is.
else
{
$photo->unlinkTags([(int) $_POST['id_tag']]);
echo json_encode(['success' => true]);
exit;
}
} }
} }

View File

@ -335,8 +335,8 @@ class Tag
if (!is_array($tokens)) if (!is_array($tokens))
$tokens = explode(' ', $tokens); $tokens = explode(' ', $tokens);
return Registry::get('db')->queryPair(' return Registry::get('db')->queryPairs('
SELECT id_tag, tag SELECT id_tag, tag, slug
FROM tags FROM tags
WHERE LOWER(tag) LIKE {string:tokens} AND WHERE LOWER(tag) LIKE {string:tokens} AND
kind = {string:person} kind = {string:person}

View File

@ -588,14 +588,16 @@ a#previous_photo:hover, a#next_photo:hover {
} }
#sub_photo #tag_list li { #sub_photo #tag_list li {
display: inline; display: inline;
padding-right: 0.75em;
} }
#sub_photo #tag_list li:after { #tag_list .delete-tag {
content: ', '; opacity: 0.25;
} }
#sub_photo #tag_list li:last-child:after { #tag_list .delete-tag:hover {
content: ''; opacity: 1.0;
} }
#photo_exif_box { #photo_exif_box {
background: #fff; background: #fff;
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);

View File

@ -158,8 +158,6 @@ TagAutoSuggest.prototype.fillContainer = function(response) {
var self = this; var self = this;
node.addEventListener('click', function(event) { node.addEventListener('click', function(event) {
self.createNewTag(function(response) { self.createNewTag(function(response) {
console.log('Nieuwe tag!!');
console.log(response);
self.appendCallback(response); self.appendCallback(response);
}); });
self.closeContainer(); self.closeContainer();

View File

@ -148,8 +148,14 @@ class PhotoPage extends SubTemplate
foreach ($this->photo->getTags() as $tag) foreach ($this->photo->getTags() as $tag)
{ {
echo ' echo '
<li> <li id="tag-', $tag->id_tag, '">
<a rel="tag" title="View all posts tagged ', $tag->tag, '" href="', $tag->getUrl(), '" class="entry-tag">', $tag->tag, '</a> <a rel="tag" title="View all posts tagged ', $tag->tag, '" href="', $tag->getUrl(), '" class="entry-tag">', $tag->tag, '</a>';
if ($tag->kind === 'Person')
echo '
<a class="delete-tag" title="Unlink this tag from this photo" href="#" data-id="', $tag->id_tag, '"></a>';
echo '
</li>'; </li>';
} }
@ -168,6 +174,25 @@ class PhotoPage extends SubTemplate
<script type="text/javascript" src="', BASEURL, '/js/autosuggest.js"></script> <script type="text/javascript" src="', BASEURL, '/js/autosuggest.js"></script>
<script type="text/javascript"> <script type="text/javascript">
setTimeout(function() { setTimeout(function() {
var removeTag = function(event) {
event.preventDefault();
var that = this;
var request = new HttpRequest("post", "', $this->photo->getPageUrl(), '",
"id_tag=" + this.dataset["id"] + "&delete", function(response) {
if (!response.success) {
return;
}
var tagNode = document.getElementById("tag-" + that.dataset["id"]);
tagNode.parentNode.removeChild(tagNode);
});
};
var tagRemovalTargets = document.getElementsByClassName("delete-tag");
Array.forEach(tagRemovalTargets, function(el) {
el.addEventListener("click", removeTag);
});
var tag_autosuggest = new TagAutoSuggest({ var tag_autosuggest = new TagAutoSuggest({
inputElement: "new_tag", inputElement: "new_tag",
listElement: "tag_list", listElement: "tag_list",
@ -175,9 +200,25 @@ class PhotoPage extends SubTemplate
appendCallback: function(item) { appendCallback: function(item) {
var request = new HttpRequest("post", "', $this->photo->getPageUrl(), '", var request = new HttpRequest("post", "', $this->photo->getPageUrl(), '",
"id_tag=" + item.id_tag, function(response) { "id_tag=" + item.id_tag, function(response) {
var newNode = document.createElement("li"); var newLink = document.createElement("a");
newLink.href = item.url;
var newLabel = document.createTextNode(item.label); var newLabel = document.createTextNode(item.label);
newNode.appendChild(newLabel); newLink.appendChild(newLabel);
var removeLink = document.createElement("a");
removeLink.className = "delete-tag";
removeLink.dataset["id"] = item.id_tag;
removeLink.href = "#";
removeLink.addEventListener("click", removeTag);
var crossmark = document.createTextNode("");
removeLink.appendChild(crossmark);
var newNode = document.createElement("li");
newNode.id = "tag-" + item.id_tag;
newNode.appendChild(newLink);
newNode.appendChild(removeLink);
var list = document.getElementById("tag_list"); var list = document.getElementById("tag_list");
list.appendChild(newNode); list.appendChild(newNode);