Browse Source

move to simpler CDM handling of encoded content (instead of CENCW... etc)

Andrew Dolgov 1 year ago
parent
commit
c8c9a26f30
2 changed files with 20 additions and 21 deletions
  1. 4 9
      classes/feeds.php
  2. 16 12
      js/viewfeed.js

+ 4 - 9
classes/feeds.php

@@ -499,8 +499,10 @@ class Feeds extends Handler_Protected {
 
 					$expanded_class = $expand_cdm ? "expanded" : "expandable";
 
-					$tmp_content = "<div class=\"cdm $hlc_suffix $expanded_class $class\"
-                    id=\"RROW-$id\" data-article-id='$id' data-orig-feed-id='$feed_id' $mouseover_attrs>";
+                    $content_encoded = htmlspecialchars(json_encode($line["content"]));
+
+                    $tmp_content = "<div class=\"cdm $hlc_suffix $expanded_class $class\"
+                        id=\"RROW-$id\" data-content=\"$content_encoded\" data-article-id='$id' data-orig-feed-id='$feed_id' $mouseover_attrs>";
 
 					$tmp_content .= "<div class=\"cdmHeader\">";
 					$tmp_content .= "<div style=\"vertical-align : middle\">";
@@ -616,14 +618,7 @@ class Feeds extends Handler_Protected {
 						}
 					}
 
-					$tmp_content .= "<span id=\"CWRAP-$id\">";
-					$tmp_content .= "<span id=\"CENCW-$id\" class=\"cencw\" style=\"display : none\">";
-					$tmp_content .= htmlspecialchars($line["content"]);
-					$tmp_content .= "</span>";
-					$tmp_content .= "</span>";
-
 					$tmp_content .= "</div>"; //cdmContentInner
-
 					$tmp_content .= "<div class=\"cdmIntermediate\">";
 
 					$always_display_enclosures = $line["always_display_enclosures"];

+ 16 - 12
js/viewfeed.js

@@ -1018,24 +1018,28 @@ function postMouseOut(id) {
 function unpackVisibleHeadlines() {
 	if (!isCdmMode() || !getInitParam("cdm_expanded")) return;
 
-	$$("#headlines-frame span.cencw[id]").each(
-		function (child) {
-			const row = $("RROW-" + child.id.replace("CENCW-", ""));
+    $$("#headlines-frame div[id*=RROW][data-content]").each((row) => {
+    	//console.log('checking', row.id);
 
-			if (row && row.offsetTop <= $("headlines-frame").scrollTop +
-				$("headlines-frame").offsetHeight) {
+    	if (row.offsetTop <= $("headlines-frame").scrollTop + $("headlines-frame").offsetHeight) {
+            console.log("unpacking: " + row.id);
 
-				//console.log("unpacking: " + child.id);
+            let content;
 
-				child.innerHTML = htmlspecialchars_decode(child.innerHTML);
-				child.removeAttribute('id');
+            try {
+                content = JSON.parse(row.getAttribute("data-content"));
+            } catch (e) {
+            	content = "Error decoding content: " + row.getAttribute("data-content");
+			}
 
-				PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED_CDM, row);
+			row.select(".cdmContentInner")[0].innerHTML = content;
+            row.removeAttribute("data-content");
 
-				Element.show(child);
-			}
+            PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED_CDM, row);
+		} else {
+    		throw $break;
 		}
-	);
+    });
 }
 
 function headlines_scroll_handler(e) {