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