if(!$chars)
$chars = '1100';
- $s .= '<div class="settings-block">';
+ $s .= '<span id="settings_showmore_inflated" class="settings-block fakelink" style="display: block;" onclick="openClose(\'settings_showmore_expanded\'); openClose(\'settings_showmore_inflated\');">';
$s .= '<h3>' . t('"Show more" Settings').'</h3>';
+ $s .= '</span>';
+ $s .= '<div id="settings_showmore_expanded" class="settings-block" style="display: none;">';
+ $s .= '<span class="fakelink" onclick="openClose(\'settings_showmore_expanded\'); openClose(\'settings_showmore_inflated\');">';
+ $s .= '<h3>' . t('"Show more" Settings').'</h3>';
+ $s .= '</span>';
+
$s .= '<div id="showmore-wrapper">';
$s .= '<label id="showmore-enable-label" for="showmore-enable">'.t('Enable Show More').'</label>';
$s .= '<input id="showmore-words" type="text" name="showmore-chars" value="'.$chars.'" />';
$s .= '</div><div class="clear"></div>';
- $s .= '<div class="settings-submit-wrapper" ><input type="submit" id="showmore-submit" name="showmore-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
+ $s .= '<div class="settings-submit-wrapper" ><input type="submit" id="showmore-submit" name="showmore-submit" class="settings-submit" value="' . t('Save Settings') . '" /></div>';
// $s .= '<div class="showmore-desc">' . t('Use /expression/ to provide regular expressions') . '</div>';
$s .= '</div>';
}
}
+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;
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))."...";
}