summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-02-19 15:31:50 +0300
committerAndrew Dolgov <[email protected]>2021-02-19 15:31:50 +0300
commite73779fec18a417ac04d694f75b6f9bbce0f47ea (patch)
treed77c6540de5a9055801c706cc12d7b7f6aa53428
parentd9fe14a0123eb90008a1be4b6ab9bb21b42f3776 (diff)
render tags on the client
-rwxr-xr-xclasses/article.php53
-rwxr-xr-xclasses/feeds.php2
-rw-r--r--js/Article.js22
-rwxr-xr-xjs/Headlines.js2
4 files changed, 22 insertions, 57 deletions
diff --git a/classes/article.php b/classes/article.php
index 8efa9088c..4020ea35a 100755
--- a/classes/article.php
+++ b/classes/article.php
@@ -199,8 +199,10 @@ class Article extends Handler_Protected {
$id = clean($_REQUEST["id"]);
- $tags_str = clean($_REQUEST["tags_str"]);
- $tags = array_unique(array_map('trim', explode(",", $tags_str)));
+ //$tags_str = clean($_REQUEST["tags_str"]);
+ //$tags = array_unique(array_map('trim', explode(",", $tags_str)));
+
+ $tags = FeedItem_Common::normalize_categories(explode(",", clean($_REQUEST["tags_str"])));
$this->pdo->beginTransaction();
@@ -225,8 +227,6 @@ class Article extends Handler_Protected {
(post_int_id, owner_uid, tag_name)
VALUES (?, ?, ?)");
- $tags = FeedItem_Common::normalize_categories($tags);
-
foreach ($tags as $tag) {
$csth->execute([$int_id, $_SESSION['uid'], $tag]);
@@ -248,14 +248,7 @@ class Article extends Handler_Protected {
$this->pdo->commit();
- $tags = self::_get_tags($id);
- $tags_str = $this->_format_tags_html($tags);
- $tags_str_full = join(", ", $tags);
-
- if (!$tags_str_full) $tags_str_full = __("no tags");
-
- print json_encode(array("id" => (int)$id,
- "content" => $tags_str, "content_full" => $tags_str_full));
+ print json_encode(["id" => (int)$id, "tags" => $tags]);
}
@@ -425,42 +418,6 @@ class Article extends Handler_Protected {
return $tags;
}
- static function _format_tags_html($tags) {
- if (!is_array($tags) || count($tags) == 0) {
- return __("no tags");
- } else {
- $maxtags = min(5, count($tags));
- $tags_str = "";
-
- for ($i = 0; $i < $maxtags; $i++) {
- $tags_str .= "<a class=\"tag\" href=\"#\" onclick=\"Feeds.open({feed:'".$tags[$i]."'})\">" . $tags[$i] . "</a>, ";
- }
-
- $tags_str = mb_substr($tags_str, 0, mb_strlen($tags_str)-2);
-
- if (count($tags) > $maxtags)
- $tags_str .= ", &hellip;";
-
- return $tags_str;
- }
- }
-
- static function _format_labels_html($labels) {
-
- if (!is_array($labels)) return '';
-
- $labels_str = "";
-
- foreach ($labels as $l) {
- $labels_str .= sprintf("<div class='label'
- style='color : %s; background-color : %s'>%s</div>",
- $l[2], $l[3], $l[1]);
- }
-
- return $labels_str;
-
- }
-
static function _format_note_html($id, $note, $allow_edit = true) {
if ($allow_edit) {
$onclick = "onclick='Plugins.Note.edit($id)'";
diff --git a/classes/feeds.php b/classes/feeds.php
index 1e1b20d93..5ad21ded9 100755
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -299,7 +299,7 @@ class Feeds extends Handler_Protected {
else
$tags = false;
- $line["tags_str"] = Article::_format_tags_html($tags);
+ $line["tags"] = Article::_get_tags($line["id"], false, $line["tag_cache"]);
$this->_mark_timestamp(" tags");
diff --git a/js/Article.js b/js/Article.js
index 4f3a162de..a11004a0a 100644
--- a/js/Article.js
+++ b/js/Article.js
@@ -130,6 +130,14 @@ const Article = {
Headlines.toggleUnread(id, 0);
},
+ renderTags: function (id, tags) {
+ const tags_short = tags.length > 5 ? tags.slice(0, 5) : tags;
+
+ return `<span class="tags" title="${tags.join(", ")}" data-tags-for="${id}">
+ ${tags_short.length > 0 ? tags_short.map((tag) => `
+ <a href="#" onclick="Feeds.open({feed: '${tag.trim()}'})" class="tag">${tag}</a>`
+ ).join(", ") : `${__("no tags")}`}</span>`;
+ },
renderLabels: function(id, labels) {
return `<span class="labels" data-labels-for="${id}">${labels.map((label) => `
<span class="label" data-label-id="${label[0]}"
@@ -286,7 +294,7 @@ const Article = {
<div class="comments">${comments}</div>
<div class="author">${hl.author}</div>
<i class="material-icons">label_outline</i>
- <span id="ATSTR-${hl.id}">${hl.tags_str}</span>
+ ${Article.renderTags(hl.id, hl.tags)}
&nbsp;<a title="${__("Edit tags for this article")}" href="#"
onclick="Article.editTags(${hl.id})">(+)</a>
<div class="buttons right">${hl.buttons}</div>
@@ -343,13 +351,13 @@ const Article = {
dialog.hide();
if (data) {
- const id = data.id;
-
- const tags = App.byId("ATSTR-" + id);
- const tooltip = dijit.byId("ATSTRTIP-" + id);
+ if (Headlines.headlines[data.id]) {
+ Headlines.headlines[data.id].tags = data.tags;
+ }
- if (tags) tags.innerHTML = data.content;
- if (tooltip) tooltip.attr('label', data.content_full);
+ App.findAll(`span[data-tags-for="${data.id}"`).forEach((ctr) => {
+ ctr.innerHTML = Article.renderTags(data.id, data.tags);
+ });
}
} catch (e) {
App.Error.report(e);
diff --git a/js/Headlines.js b/js/Headlines.js
index 2effc9192..f98b3dcce 100755
--- a/js/Headlines.js
+++ b/js/Headlines.js
@@ -495,7 +495,7 @@ const Headlines = {
<div class="left">
${hl.buttons_left}
<i class="material-icons">label_outline</i>
- <span id="ATSTR-${hl.id}">${hl.tags_str}</span>
+ ${Article.renderTags(hl.id, hl.tags)}
<a title="${__("Edit tags for this article")}" href="#"
onclick="Article.editTags(${hl.id})">(+)</a>
${comments}