X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=showmore%2Fshowmore.php;h=a9d8334f3e41dea7532d2df1d11599cf95fb2a70;hb=02b2fe9b1082c84d49582c4bc1dc4d746c12fc45;hp=2b4d5d0fcce8337670120eb0e0ae5ae9633bf831;hpb=c42807e2eff2aa41a28676d4bdaacb82e537a9f0;p=friendica-addons.git diff --git a/showmore/showmore.php b/showmore/showmore.php index 2b4d5d0f..a9d8334f 100755 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -34,8 +34,14 @@ function showmore_addon_settings(&$a,&$s) { if(!$chars) $chars = '1100'; - $s .= '
'; + $s .= ''; $s .= '

' . t('"Show more" Settings').'

'; + $s .= '
'; + $s .= ''; @@ -66,6 +72,38 @@ function showmore_addon_settings_post(&$a,&$b) { } } +function get_body_length($body) { + $string = trim($body); + + // DomDocument doesn't like empty strings + if(! strlen($string)) { + return 0; + } + + // We need to get rid of hidden tags (display: none) + + // Get rid of the warning. It would be better to have some valid html as input + $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(); + + $string = strip_tags($string); + return strlen($string); +} + function showmore_prepare_body(&$a,&$b) { $words = null; @@ -76,16 +114,16 @@ 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))."..."; } if($found) { $rnd = random_string(8); - $b['html'] = ''.$shortened." ". - ''.sprintf(t('show more')).''. - ''; + $b['html'] = ''.$shortened." ". + ''.sprintf(t('show more')).''. + ''; } }