showmore now only count what is visible to know if it should act, fixes #1
This commit is contained in:
parent
5f22a40974
commit
7b786e0214
1 changed files with 26 additions and 1 deletions
|
@ -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))."...";
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue