diff --git a/showmore.tgz b/showmore.tgz new file mode 100644 index 00000000..70c4beef Binary files /dev/null and b/showmore.tgz differ diff --git a/showmore/README b/showmore/README new file mode 100755 index 00000000..8ee882e3 --- /dev/null +++ b/showmore/README @@ -0,0 +1,3 @@ +Show more + +Shortens messages and offers a link to show more. diff --git a/showmore/showmore.css b/showmore/showmore.css new file mode 100755 index 00000000..710c1f3f --- /dev/null +++ b/showmore/showmore.css @@ -0,0 +1,19 @@ + +#showmore-label, #showmore-enable-label { + float: left; + width: 300px; + margin-top: 10px; +} + +#showmore-words, #showmore-enable { + float: left; + margin-top: 10px; +} + +#showmore-submit { + margin-top: 15px; +} + +.showmore-desc { + margin-top: 10px; +} diff --git a/showmore/showmore.php b/showmore/showmore.php new file mode 100755 index 00000000..7842a58e --- /dev/null +++ b/showmore/showmore.php @@ -0,0 +1,121 @@ + + * based upon NSFW from Mike Macgirvin + * + */ + +function showmore_install() { + register_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); + register_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + register_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); +} + +function showmore_uninstall() { + unregister_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); + unregister_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + unregister_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); +} + +function showmore_addon_settings(&$a,&$s) { + + if(! local_user()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + $a->page['htmlhead'] .= ''."\r\n"; + + $enable_checked = (intval(get_pconfig(local_user(),'showmore','disable')) ? '' : ' checked="checked"'); + $chars = get_pconfig(local_user(),'showmore','chars'); + if(!$chars) + $chars = '1100'; + + $s .= '
'; + $s .= '

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

'; + $s .= '
'; + + $s .= ''; + $s .= ''; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; +// $s .= '
' . t('Use /expression/ to provide regular expressions') . '
'; + + return; +} + +function showmore_addon_settings_post(&$a,&$b) { + + if(! local_user()) + return; + + if($_POST['showmore-submit']) { + set_pconfig(local_user(),'showmore','chars',trim($_POST['showmore-chars'])); + $enable = ((x($_POST,'showmore-enable')) ? intval($_POST['showmore-enable']) : 0); + $disable = 1-$enable; + set_pconfig(local_user(),'showmore','disable', $disable); + info( t('Show More Settings saved.') . EOL); + } +} + +function showmore_prepare_body(&$a,&$b) { + + $words = null; + if(get_pconfig(local_user(),'showmore','disable')) + return; + + $chars = (int)get_pconfig(local_user(),'showmore','chars'); + if(!$chars) + $chars = 1100; + + if (strlen(strip_tags(trim($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')).''. + ''; + } +} + +function showmore_cutitem($text, $limit) { + $text = trim($text); + + $text = mb_convert_encoding($text, 'HTML-ENTITIES', "UTF-8"); + + $text = substr($text, 0, $limit); + + $pos1 = strrpos($text, "<"); + $pos2 = strrpos($text, ">"); + $pos3 = strrpos($text, "&"); + $pos4 = strrpos($text, ";"); + + if ($pos1 > $pos3) { + if ($pos1 > $pos2) + $text = substr($text, 0, $pos1); + } else { + if ($pos3 > $pos4) + $text = substr($text, 0, $pos3); + } + + $doc = new DOMDocument(); + $doc->preserveWhiteSpace = false; + + $doctype = ''; + @$doc->loadHTML($doctype."".$text.""); + + $text = $doc->saveHTML(); + $text = str_replace(array("", "", $doctype), array("", "", ""), $text); + + return($text); +}