Browse Source

implement support for multiple pub/mark buttons, add plugin which adds a separate mark button to article botton in combined mode (closes #382)

Andrew Dolgov 11 năm trước cách đây
mục cha
commit
035d7a5a8f
4 tập tin đã thay đổi với 95 bổ sung44 xóa
  1. 18 16
      classes/feeds.php
  2. 37 27
      js/viewfeed.js
  3. 39 0
      plugins/mark_button/init.php
  4. 1 1
      tt-rss.css

+ 18 - 16
classes/feeds.php

@@ -343,34 +343,33 @@ class Feeds extends Handler_Protected {
 					array_push($topmost_article_ids, $id);
 				}
 
-				if ($line["unread"] == "t" || $line["unread"] == "1") {
+				if (sql_bool_to_bool($line["unread"])) {
 					$class .= " Unread";
 					++$num_unread;
-					$is_unread = true;
-				} else {
-					$is_unread = false;
 				}
 
-				if ($line["marked"] == "t" || $line["marked"] == "1") {
-					$marked_pic = "<img id=\"FMPIC-$id\"
+				if (sql_bool_to_bool($line["marked"])) {
+					$marked_pic = "<img
 						src=\"images/mark_set.svg\"
 						class=\"markedPic\" alt=\"Unstar article\"
-						onclick='javascript:toggleMark($id)'>";
+						onclick='toggleMark($id)'>";
+					$class .= " marked";
 				} else {
-					$marked_pic = "<img id=\"FMPIC-$id\"
+					$marked_pic = "<img
 						src=\"images/mark_unset.svg\"
 						class=\"markedPic\" alt=\"Star article\"
-						onclick='javascript:toggleMark($id)'>";
+						onclick='toggleMark($id)'>";
 				}
 
-				if ($line["published"] == "t" || $line["published"] == "1") {
-					$published_pic = "<img id=\"FPPIC-$id\" src=\"images/pub_set.svg\"
-						class=\"markedPic\"
-						alt=\"Unpublish article\" onclick='javascript:togglePub($id)'>";
+				if (sql_bool_to_bool($line["published"])) {
+					$published_pic = "<img src=\"images/pub_set.svg\"
+						class=\"pubPic\"
+							alt=\"Unpublish article\" onclick='togglePub($id)'>";
+					$class .= " published";
 				} else {
-					$published_pic = "<img id=\"FPPIC-$id\" src=\"images/pub_unset.svg\"
-						class=\"markedPic\"
-						alt=\"Publish article\" onclick='javascript:togglePub($id)'>";
+					$published_pic = "<img src=\"images/pub_unset.svg\"
+						class=\"pubPic\"
+						alt=\"Publish article\" onclick='togglePub($id)'>";
 				}
 
 #				$content_link = "<a target=\"_blank\" href=\"".$line["link"]."\">" .
@@ -706,6 +705,9 @@ class Feeds extends Handler_Protected {
 
 					$reply['content'] .= "<div style=\"float : right\">";
 
+//					$reply['content'] .= "$marked_pic";
+//					$reply['content'] .= "$published_pic";
+
 					foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_BUTTON) as $p) {
 						$reply['content'] .= $p->hook_article_button($line);
 					}

+ 37 - 27
js/viewfeed.js

@@ -442,21 +442,27 @@ function toggleMark(id, client_only) {
 	try {
 		var query = "?op=rpc&id=" + id + "&method=mark";
 
-		var img = $("FMPIC-" + id);
+		var row = $("RROW-" + id);
+		if (!row) return;
 
-		if (!img) return;
+		var imgs = row.getElementsByClassName("markedPic");
 
-		if (img.src.match("mark_unset")) {
-			img.src = img.src.replace("mark_unset", "mark_set");
-			img.alt = __("Unstar article");
-			query = query + "&mark=1";
+		for (i = 0; i < imgs.length; i++) {
+			var img = imgs[i];
 
-		} else {
-			img.src = img.src.replace("mark_set", "mark_unset");
-			img.alt = __("Star article");
-			query = query + "&mark=0";
+			if (!row.hasClassName("marked")) {
+				img.src = img.src.replace("mark_unset", "mark_set");
+				img.alt = __("Unstar article");
+				query = query + "&mark=1";
+			} else {
+				img.src = img.src.replace("mark_set", "mark_unset");
+				img.alt = __("Star article");
+				query = query + "&mark=0";
+			}
 		}
 
+		row.toggleClassName("marked");
+
 		if (!client_only) {
 			new Ajax.Request("backend.php", {
 				parameters: query,
@@ -480,22 +486,30 @@ function togglePub(id, client_only, no_effects, note) {
 			query = query + "&note=undefined";
 		}
 
-		var img = $("FPPIC-" + id);
-
-		if (!img) return;
+		var row = $("RROW-" + id);
+		if (!row) return;
 
-		if (img.src.match("pub_unset") || note != undefined) {
-			img.src = img.src.replace("pub_unset", "pub_set");
-			img.alt = __("Unpublish article");
-			query = query + "&pub=1";
+		var imgs = row.getElementsByClassName("pubPic");
 
-		} else {
-			img.src = img.src.replace("pub_set", "pub_unset");
-			img.alt = __("Publish article");
+		for (i = 0; i < imgs.length; i++) {
+			var img = imgs[i];
 
-			query = query + "&pub=0";
+			if (!row.hasClassName("published") || note != undefined) {
+				img.src = img.src.replace("pub_unset", "pub_set");
+				img.alt = __("Unpublish article");
+				query = query + "&pub=1";
+			} else {
+				img.src = img.src.replace("pub_set", "pub_unset");
+				img.alt = __("Publish article");
+				query = query + "&pub=0";
+			}
 		}
 
+		if (note != undefined)
+			row.addClassName("published");
+		else
+			row.toggleClassName("published");
+
 		if (!client_only) {
 			new Ajax.Request("backend.php", {
 				parameters: query,
@@ -915,9 +929,7 @@ function selectArticles(mode) {
 					if (cb) cb.attr("checked", false);
 				}
 			} else if (mode == "marked") {
-				var img = $("FMPIC-" + child.id.replace("RROW-", ""));
-
-				if (img && img.src.match("mark_set")) {
+				if (child.hasClassName("marked")) {
 					child.addClassName("Selected");
 					if (cb) cb.attr("checked", true);
 				} else {
@@ -925,9 +937,7 @@ function selectArticles(mode) {
 					if (cb) cb.attr("checked", false);
 				}
 			} else if (mode == "published") {
-				var img = $("FPPIC-" + child.id.replace("RROW-", ""));
-
-				if (img && img.src.match("pub_set")) {
+				if (child.hasClassName("published")) {
 					child.addClassName("Selected");
 					if (cb) cb.attr("checked", true);
 				} else {

+ 39 - 0
plugins/mark_button/init.php

@@ -0,0 +1,39 @@
+<?php
+class Mark_Button extends Plugin {
+	private $link;
+	private $host;
+
+	function init($host) {
+		$this->link = $host->get_link();
+		$this->host = $host;
+
+		$host->add_hook($host::HOOK_ARTICLE_BUTTON, $this);
+	}
+
+	function about() {
+		return array(1.0,
+			"Bottom un/star button for the combined mode",
+			"fox");
+	}
+
+	function hook_article_button($line) {
+		$marked_pic = "";
+
+		if (get_pref($this->link, "COMBINED_DISPLAY_MODE")) {
+			if (sql_bool_to_bool($line["marked"])) {
+				$marked_pic = "<img
+					src=\"images/mark_set.svg\"
+					class=\"markedPic\" alt=\"Unstar article\"
+					onclick='toggleMark($id)'>";
+			} else {
+				$marked_pic = "<img
+					src=\"images/mark_unset.svg\"
+					class=\"markedPic\" alt=\"Star article\"
+					onclick='toggleMark($id)'>";
+			}
+		}
+
+		return $marked_pic;
+	}
+}
+?>

+ 1 - 1
tt-rss.css

@@ -402,7 +402,7 @@ div.hlFeed a:hover {
 	color : #4684ff;
 }
 
-img.markedPic {
+img.markedPic, img.pubPic {
 	cursor : pointer;
 	vertical-align : middle;
 }