hide_blockquote - a new plugin for hiding citation blocks
parent
70faa8e555
commit
85a6173879
@ -0,0 +1,46 @@
|
||||
if (window.rcmail)
|
||||
rcmail.addEventListener('init', function() { hide_blockquote(); });
|
||||
|
||||
function hide_blockquote()
|
||||
{
|
||||
var limit = rcmail.env.blockquote_limit;
|
||||
|
||||
if (limit <= 0)
|
||||
return;
|
||||
|
||||
$('pre > blockquote', $('#messagebody')).each(function() {
|
||||
var div, link, q = $(this),
|
||||
text = $.trim(q.text()),
|
||||
res = text.split(/\n/);
|
||||
|
||||
if (res.length <= limit) {
|
||||
// there can be also a block with very long wrapped line
|
||||
// assume line height = 15px
|
||||
if (q.height() <= limit * 15)
|
||||
return;
|
||||
}
|
||||
|
||||
div = $('<blockquote class="blockquote-header">')
|
||||
.css({'white-space': 'nowrap', overflow: 'hidden', position: 'relative'})
|
||||
.text(res[0]);
|
||||
|
||||
link = $('<span class="blockquote-link">')
|
||||
.css({position: 'absolute', 'z-Index': 2})
|
||||
.text(rcmail.gettext('hide_blockquote.show'))
|
||||
.data('parent', div)
|
||||
.click(function() {
|
||||
var t = $(this), parent = t.data('parent'), visible = parent.is(':visible');
|
||||
|
||||
t.text(rcmail.gettext(visible ? 'hide' : 'show', 'hide_blockquote'))
|
||||
.detach().appendTo(visible ? q : parent);
|
||||
|
||||
parent[visible ? 'hide' : 'show']();
|
||||
q[visible ? 'show' : 'hide']();
|
||||
});
|
||||
|
||||
link.appendTo(div);
|
||||
|
||||
// Modify blockquote
|
||||
q.hide().css({position: 'relative'}).before(div);
|
||||
});
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Quotation block hidding
|
||||
*
|
||||
* Plugin that adds a possibility to hide long blocks of cited text in messages.
|
||||
*
|
||||
* Configuration:
|
||||
* // Minimum number of citation lines. Longer citation blocks will be hidden.
|
||||
* // 0 - no limit (no hidding).
|
||||
* $rcmail_config['hide_blockquote_limit'] = 0;
|
||||
*
|
||||
* @version @package_version@
|
||||
* @license GNU GPLv3+
|
||||
* @author Aleksander Machniak <alec@alec.pl>
|
||||
*/
|
||||
class hide_blockquote extends rcube_plugin
|
||||
{
|
||||
public $task = 'mail|settings';
|
||||
|
||||
function init()
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
if ($rcmail->task == 'mail'
|
||||
&& ($rcmail->action == 'preview' || $rcmail->action == 'show')
|
||||
&& ($limit = $rcmail->config->get('hide_blockquote_limit'))
|
||||
) {
|
||||
// include styles
|
||||
$skin = $rcmail->config->get('skin');
|
||||
if (!file_exists($this->home."/skins/$skin/style.css")) {
|
||||
$skin = 'default';
|
||||
}
|
||||
$this->include_stylesheet("skins/$skin/style.css");
|
||||
|
||||
// Script and localization
|
||||
$this->include_script('hide_blockquote.js');
|
||||
$this->add_texts('localization', true);
|
||||
|
||||
// set env variable for client
|
||||
$rcmail->output->set_env('blockquote_limit', $limit);
|
||||
}
|
||||
else if ($rcmail->task == 'settings') {
|
||||
$dont_override = $rcmail->config->get('dont_override', array());
|
||||
if (!in_array('hide_blockquote_limit', $dont_override)) {
|
||||
$this->add_hook('preferences_list', array($this, 'prefs_table'));
|
||||
$this->add_hook('preferences_save', array($this, 'save_prefs'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function prefs_table($args)
|
||||
{
|
||||
if ($args['section'] != 'mailview') {
|
||||
return $args;
|
||||
}
|
||||
|
||||
$this->add_texts('localization');
|
||||
|
||||
$rcmail = rcmail::get_instance();
|
||||
$limit = (int) $rcmail->config->get('hide_blockquote_limit');
|
||||
$field_id = 'hide_blockquote_limit';
|
||||
$input = new html_inputfield(array('name' => '_'.$field_id, 'id' => $field_id, 'size' => 5));
|
||||
|
||||
$args['blocks']['main']['options']['hide_blockquote_limit'] = array(
|
||||
'title' => $this->gettext('quotelimit'),
|
||||
'content' => $input->show($limit ? $limit : '')
|
||||
);
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
function save_prefs($args)
|
||||
{
|
||||
if ($args['section'] == 'mailview') {
|
||||
$args['prefs']['hide_blockquote_limit'] = (int) get_input_value('_hide_blockquote_limit', RCUBE_INPUT_POST);
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['hide'] = 'Hide';
|
||||
$labels['show'] = 'Show';
|
||||
$labels['quotelimit'] = 'Hide citation when lines count is greater than';
|
||||
|
||||
?>
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['hide'] = 'Ukryj';
|
||||
$labels['show'] = 'Pokaż';
|
||||
$labels['quotelimit'] = 'Ukryj blok cytatu gdy liczba linii jest większa od';
|
||||
|
||||
?>
|
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
||||
http://pear.php.net/dtd/tasks-1.0.xsd
|
||||
http://pear.php.net/dtd/package-2.0
|
||||
http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>hide_blockquote</name>
|
||||
<channel>pear.roundcube.net</channel>
|
||||
<summary>Citation blocks hiding for Roundcube</summary>
|
||||
<description>This allows to hide long blocks of cited text in messages.</description>
|
||||
<lead>
|
||||
<name>Aleksander Machniak</name>
|
||||
<user>alec</user>
|
||||
<email>alec@alec.pl</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2012-05-23</date>
|
||||
<version>
|
||||
<release>1.0</release>
|
||||
<api>1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license>
|
||||
<notes>-</notes>
|
||||
<contents>
|
||||
<dir baseinstalldir="/" name="/">
|
||||
<file name="hide_blockquote.php" role="php">
|
||||
<tasks:replace from="@name@" to="name" type="package-info"/>
|
||||
<tasks:replace from="@package_version@" to="version" type="package-info"/>
|
||||
</file>
|
||||
<file name="hide_blockquote.js" role="data">
|
||||
<tasks:replace from="@name@" to="name" type="package-info"/>
|
||||
<tasks:replace from="@package_version@" to="version" type="package-info"/>
|
||||
</file>
|
||||
<file name="localization/en_US.inc" role="data"></file>
|
||||
<file name="localization/pl_PL.inc" role="data"></file>
|
||||
<file name="skins/default/style.css" role="data"></file>
|
||||
</dir>
|
||||
<!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.2.1</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.7.0</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
</dependencies>
|
||||
<phprelease/>
|
||||
</package>
|
@ -0,0 +1,31 @@
|
||||
span.blockquote-link {
|
||||
font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
|
||||
top: 0;
|
||||
cursor: pointer;
|
||||
right: 5px;
|
||||
height: 14px;
|
||||
min-width: 40px;
|
||||
padding: 0 8px;
|
||||
font-size: 10px;
|
||||
font-weight: bold;
|
||||
color: #a8a8a8;
|
||||
line-height: 14px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 1px #fff;
|
||||
text-align: center;
|
||||
border: 1px solid #e8e8e8;
|
||||
border-top: none;
|
||||
border-bottom-right-radius: 6px;
|
||||
border-bottom-left-radius: 6px;
|
||||
background: #fff;
|
||||
background: -moz-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#e8e8e8));
|
||||
background: -o-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
|
||||
background: -ms-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
|
||||
background: linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
|
||||
}
|
||||
|
||||
blockquote.blockquote-header {
|
||||
text-overflow: ellipsis !important;
|
||||
padding-right: 60px !important;
|
||||
}
|
Loading…
Reference in New Issue