]> git.mxchange.org Git - friendica-addons.git/commitdiff
showmore now only count what is visible to know if it should act, fixes #1
authorDomovoy <domovoy@errlock.org>
Mon, 23 Jul 2012 18:07:15 +0000 (20:07 +0200)
committerDomovoy <domovoy@errlock.org>
Mon, 23 Jul 2012 18:07:15 +0000 (20:07 +0200)
showmore/showmore.php

index 2b4d5d0fcce8337670120eb0e0ae5ae9633bf831..e4f0de4ef0616a5ba7427e3cac4722b986ce5e8c 100755 (executable)
@@ -66,6 +66,31 @@ function showmore_addon_settings_post(&$a,&$b) {
        }
 }
 
+function get_body_length($body) {
+       $string = trim($body);
+
+       // We need to get rid of hidden tags (display: none)
+       $dom = DomDocument::loadHTML($body);
+       $xpath = new DOMXPath($dom);
+
+       /*
+        * Checking any possible syntax of the style attribute with xpath is impossible
+        * So we just get any element with a style attribute, and check them with a regexp
+        */
+       $xr = $xpath->query('//*[@style]');
+       foreach($xr as $node) {
+               if(preg_match('/.*display: *none *;.*/',$node->getAttribute('style'))) {
+                       // Hidden, remove it from its parent
+                       $node->parentNode->removeChild($node);
+               }
+       }
+       // Now we can get the body of our HTML DomDocument, it contains only what is visible
+       $string = $dom->saveHTML($dom->getElementsByTagName('body')->item(0));
+
+       $string = strip_tags($string);
+       return strlen($string);
+}
+
 function showmore_prepare_body(&$a,&$b) {
 
        $words = null;
@@ -76,7 +101,7 @@ function showmore_prepare_body(&$a,&$b) {
        if(!$chars)
                $chars = 1100;
 
-       if (strlen(strip_tags(trim($b['html']))) > $chars) {
+       if (get_body_length($b['html']) > $chars) {
                $found = true;
                $shortened = trim(showmore_cutitem($b['html'], $chars))."...";
        }