Merge branch 'master' into dev/elastic

pull/5578/merge
Aleksander Machniak 7 years ago
commit 9eba51e23b

@ -14,6 +14,7 @@ CHANGELOG Roundcube Webmail
- Update to jQuery-minicolors 2.2.6
- Update to TinyMCE 4.7.13
- Remove sample PHP configuration from .htaccess and .user.ini files (#5850)
- Extend skin_logo setting to allow per skin logos (#6272)
- Use Masterminds/HTML5 parser for better HTML5 support (#5761)
- Add More actions button in Contacts toolbar with Copy/Move actions (#6081)
- Display an error when clicking disabled link to register protocol handler (#6079)
@ -97,6 +98,7 @@ CHANGELOG Roundcube Webmail
- Fix bug where unicode contact names could have been broken/emptied or caused DB errors (#6299)
- Fix bug where after "mark all folders as read" action message counters were not reset (#6307)
- Enigma: [EFAIL] Don't decrypt PGP messages with no MDC protection (#6289)
- Fix bug where some HTML comments could have been malformed by HTML parser (#6333)
RELEASE 1.3.6
-------------

@ -379,8 +379,14 @@ $config['support_url'] = '';
// replace Roundcube logo with this image
// specify an URL relative to the document root of this Roundcube installation
// an array can be used to specify different logos for specific template files, '*' for default logo
// for example array("*" => "/images/roundcube_logo.png", "messageprint" => "/images/roundcube_logo_print.png")
// an array can be used to specify different logos for specific template files
// '*' for default logo
// ':favicon' for favicon
// ':print' for logo on all print templates (e.g. messageprint, contactprint)
// ':small' for small screen logo in Elastic
// different logos can be specified for different skins by prefixing the skin name to the array key
// config applied in order: <skin>:<template>, <skin>:*, <template>, *
// for example array("*" => "/images/roundcube_logo.png", "messageprint" => "/images/roundcube_logo_print.png", "elastic:*" => "/images/logo.png")
$config['skin_logo'] = null;
// automatically create a new Roundcube user when log-in the first time.

@ -57,7 +57,7 @@
{
"lib": "tinymce-langs",
"version": "4.7.13",
"url": "https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy",
"url": "https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy&extension=.zip",
"dest": "program/js/tinymce"
},
{

@ -36,6 +36,7 @@ class rcmail_output_html extends rcmail_output
protected $js_labels = array();
protected $js_commands = array();
protected $skin_paths = array();
protected $skin_name = '';
protected $scripts_path = '';
protected $script_files = array();
protected $css_files = array();
@ -267,6 +268,7 @@ EOF;
$this->skin_paths = array();
$this->load_skin($skin_path);
$this->skin_name = $skin;
$this->set_env('skin', $skin);
}
@ -1271,21 +1273,27 @@ EOF;
else if ($object == 'logo') {
$attrib += array('alt' => $this->xml_command(array('', 'object', 'name="productname"')));
if ($logo = $this->config->get('skin_logo')) {
if (is_array($logo)) {
if ($template_logo = $logo[$this->template_name]) {
$attrib['src'] = $template_logo;
}
elseif ($template_logo = $logo['*']) {
$attrib['src'] = $template_logo;
if (!empty($attrib['type']) && ($template_logo = $this->get_template_logo(':' . $attrib['type'], true)) !== null) {
$attrib['src'] = $template_logo;
}
else if (($template_logo = $this->get_template_logo()) !== null) {
$attrib['src'] = $template_logo;
}
// process alternative logos (eg for Elastic small screen)
foreach ($attrib as $key => $value) {
if (preg_match('/data-src-(.*)/', $key, $matches)) {
if (($template_logo = $this->get_template_logo(':' . $matches[1], true)) !== null) {
$attrib[$key] = $template_logo;
}
}
else {
$attrib['src'] = $logo;
$attrib[$key] = !empty($attrib[$key]) ? $this->abs_url($attrib[$key]) : null;
}
}
$content = html::img($attrib);
if ($attrib['src']) {
$content = html::img($attrib);
}
}
else if ($object == 'productname') {
$name = $this->config->get('product_name', 'Roundcube Webmail');
@ -1331,6 +1339,14 @@ EOF;
$content = $this->frame($attrib, true);
}
else if ($object == 'favicon') {
if ($template_logo = $this->get_template_logo(':favicon', true)) {
$content = html::tag('link', array('rel' => 'shortcut icon', 'href' => $template_logo));
}
else if ($file = $this->config->get('favicon', '/images/favicon.ico')) {
$content = html::tag('link', array('rel' => 'shortcut icon', 'href' => $file));
}
}
// exec plugin hooks for this template object
$hook = $this->app->plugins->exec_hook("template_object_$object", $attrib + array('content' => $content));
@ -2317,4 +2333,51 @@ EOF;
return $content;
}
/**
* Get logo URL for current template based on skin_logo config option
*
* @param string $name Name of the logo to check for
* default is current template
* @param boolean $strict True if logo should only be returned for specific template
*
* @return string image URL
*/
protected function get_template_logo($name = null, $strict = false)
{
$template_logo = null;
// Use current template if none provided
if (!$name) {
$name = $this->template_name;
}
$template_names = array(
$this->skin_name . ':' . $name,
$this->skin_name . ':*',
$name,
'*',
);
// If strict matching then remove wildcard options
if ($strict) {
$template_names = preg_grep("/\*$/", $template_names, PREG_GREP_INVERT);
}
if ($logo = $this->config->get('skin_logo')) {
if (is_array($logo)) {
foreach ($template_names as $key) {
if (isset($logo[$key])) {
$template_logo = $logo[$key];
break;
}
}
}
else {
$template_logo = $logo;
}
}
return $template_logo;
}
}

@ -169,47 +169,46 @@ function rcube_text_editor(config, id)
rcmail.triggerEvent('editor-load', {config: conf, ref: ref});
if (rcmail.env.action != 'compose') {
return;
}
var area = $('#' + this.id),
height = $('div.mce-toolbar-grp:first', area.parent()).height();
// the editor might be still not fully loaded, making the editing area
// inaccessible, wait and try again (#1490310)
if (height > 200 || height > area.height()) {
return setTimeout(function () { ref.init_callback(event); }, 300);
}
if (rcmail.env.action == 'compose') {
var area = $('#' + this.id),
height = $('div.mce-toolbar-grp:first', area.parent()).height();
// the editor might be still not fully loaded, making the editing area
// inaccessible, wait and try again (#1490310)
if (height > 200 || height > area.height()) {
return setTimeout(function () { ref.init_callback(event); }, 300);
}
var css = {},
elem = rcube_find_object('_from'),
fe = rcmail.env.compose_focus_elem;
var css = {},
elem = rcube_find_object('_from'),
fe = rcmail.env.compose_focus_elem;
if (rcmail.env.default_font)
css['font-family'] = rcmail.env.default_font;
if (rcmail.env.default_font)
css['font-family'] = rcmail.env.default_font;
if (rcmail.env.default_font_size)
css['font-size'] = rcmail.env.default_font_size;
if (rcmail.env.default_font_size)
css['font-size'] = rcmail.env.default_font_size;
if (css['font-family'] || css['font-size'])
$(this.editor.getBody()).css(css);
if (css['font-family'] || css['font-size'])
$(this.editor.getBody()).css(css);
if (elem && elem.type == 'select-one') {
// insert signature (only for the first time)
if (!rcmail.env.identities_initialized)
rcmail.change_identity(elem);
if (elem && elem.type == 'select-one') {
// insert signature (only for the first time)
if (!rcmail.env.identities_initialized)
rcmail.change_identity(elem);
// Focus previously focused element
if (fe && fe.id != this.id && fe.nodeName != 'BODY') {
window.focus(); // for WebKit (#1486674)
fe.focus();
rcmail.env.compose_focus_elem = null;
// Focus previously focused element
if (fe && fe.id != this.id && fe.nodeName != 'BODY') {
window.focus(); // for WebKit (#1486674)
fe.focus();
rcmail.env.compose_focus_elem = null;
}
}
}
// set tabIndex and set focus to element that was focused before
ref.tabindex(fe && fe.id == ref.id);
ref.tabindex(ref.force_focus || (fe && fe.id == ref.id));
// Trigger resize (needed for proper editor resizing in some browsers)
$(window).resize();
};
@ -219,7 +218,6 @@ function rcube_text_editor(config, id)
{
if (rcmail.env.task == 'mail' && this.editor) {
var textarea = this.editor.getElement(),
body = this.editor.getBody(),
node = this.editor.getContentAreaContainer().childNodes[0];
if (textarea && node)
@ -245,11 +243,18 @@ function rcube_text_editor(config, id)
// ContentEditable reset fixes invisible cursor issue in Firefox < 25
if (bw.mz && bw.vendver < 25)
$(body).prop('contenteditable', false).prop('contenteditable', true);
if (focus)
body.focus();
$(this.editor.getBody()).prop('contenteditable', false).prop('contenteditable', true);
}
if (focus)
this.focus();
};
// focus the editor
this.focus = function()
{
$(this.editor || ('#' + this.id)).focus();
this.force_focus = false;
};
// switch html/plain mode
@ -280,16 +285,9 @@ function rcube_text_editor(config, id)
if (is_sig)
data = data.replace(sig_mark, '<div id="_rc_sig">' + signature.html + '</div>');
ref.force_focus = true;
input.val(data);
tinymce.execCommand('mceAddEditor', false, ref.id);
if (ref.editor) {
var body = $(ref.editor.getBody());
// #1486593
ref.tabindex(true);
// put cursor on start of the compose body
ref.editor.selection.setCursorLocation(body.children().first().get(0));
}
};
// convert to html
@ -671,6 +669,8 @@ function rcube_text_editor(config, id)
if (!form.length)
form = this.file_upload_form(rcmail.gui_objects.uploadform);
else
form.find('button,a.button').slice(1).remove(); // need only the first button
button = dialog.prepend(form).find('button,a.button')
.text(rcmail.get_label('add' + type))
@ -745,8 +745,8 @@ function rcube_text_editor(config, id)
}
// register handler for successful file upload
if (!rcmail.env.file_dialog_event) {
rcmail.env.file_dialog_event = true;
if (!rcmail.env['file_dialog_event_' + type]) {
rcmail.env['file_dialog_event+' + type] = true;
rcmail.addEventListener('fileuploaded', function(attr) {
var elem;
if (elem = ref.file_browser_entry(attr.name, attr.attachment)) {

@ -660,9 +660,9 @@ class rcube_washtml
$html = preg_replace_callback('/(<(?!\!)[\/]*)([^\s>]+)([^>]*)/', array($this, 'html_tag_callback'), $html);
// Remove invalid HTML comments (#1487759)
// Don't remove valid conditional comments
// Don't remove MSOutlook (<!-->) conditional comments (#1489004)
$html = preg_replace('/<!--[^-<>\[\n]+>/', '', $html);
// Note: We don't want to remove valid comments, conditional comments
// and MSOutlook comments (<!-->)
$html = preg_replace('/<!--[a-zA-Z0-9]+>/', '', $html);
// fix broken nested lists
self::fix_broken_lists($html);

@ -1,5 +1,5 @@
<link rel="index" href="$__comm_path" />
<link rel="shortcut icon" href="/images/favicon.ico"/>
<roundcube:object name="favicon" doctype="html4" />
<link rel="stylesheet" type="text/css" href="/common.css" />
<roundcube:if condition="in_array(env:task, array('mail', 'addressbook', 'settings'))" />
<link rel="stylesheet" type="text/css" href="/<roundcube:var name="env:task" />.css" />

@ -2,12 +2,12 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<link rel="shortcut icon" href="/images/favicon.ico"/>
<roundcube:object name="favicon" doctype="html4" />
<link rel="stylesheet" type="text/css" href="/print.css" />
</head>
<body>
<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" />
<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" type="print" />
<div id="contact-details">
<div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>

@ -2,12 +2,12 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<link rel="shortcut icon" href="/images/favicon.ico"/>
<roundcube:object name="favicon" doctype="html4" />
<link rel="stylesheet" type="text/css" href="/print.css" />
</head>
<body>
<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" />
<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" type="print" />
<div id="printmessageframe">
<roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" max="10" />

@ -5,7 +5,7 @@
@fa-font-size-base: 16px;
@fa-line-height-base: 1;
@fa-css-prefix: fa;
@fa-version: "5.0.11";
@fa-version: "5.1.0";
@fa-border-color: #eee;
@fa-inverse: #fff;
@fa-li-width: 2em;
@ -41,6 +41,7 @@
@fa-var-angle-left: "\f104";
@fa-var-angle-right: "\f105";
@fa-var-angle-up: "\f106";
@fa-var-angry: "\f556";
@fa-var-angrycreative: "\f36e";
@fa-var-angular: "\f420";
@fa-var-app-store: "\f36f";
@ -49,6 +50,7 @@
@fa-var-apple: "\f179";
@fa-var-apple-pay: "\f415";
@fa-var-archive: "\f187";
@fa-var-archway: "\f557";
@fa-var-arrow-alt-circle-down: "\f358";
@fa-var-arrow-alt-circle-left: "\f359";
@fa-var-arrow-alt-circle-right: "\f35a";
@ -68,12 +70,15 @@
@fa-var-asterisk: "\f069";
@fa-var-asymmetrik: "\f372";
@fa-var-at: "\f1fa";
@fa-var-atlas: "\f558";
@fa-var-audible: "\f373";
@fa-var-audio-description: "\f29e";
@fa-var-autoprefixer: "\f41c";
@fa-var-avianex: "\f374";
@fa-var-aviato: "\f421";
@fa-var-award: "\f559";
@fa-var-aws: "\f375";
@fa-var-backspace: "\f55a";
@fa-var-backward: "\f04a";
@fa-var-balance-scale: "\f24e";
@fa-var-ban: "\f05e";
@ -95,6 +100,7 @@
@fa-var-behance-square: "\f1b5";
@fa-var-bell: "\f0f3";
@fa-var-bell-slash: "\f1f6";
@fa-var-bezier-curve: "\f55b";
@fa-var-bicycle: "\f206";
@fa-var-bimobject: "\f378";
@fa-var-binoculars: "\f1e5";
@ -104,6 +110,7 @@
@fa-var-bity: "\f37a";
@fa-var-black-tie: "\f27e";
@fa-var-blackberry: "\f37b";
@fa-var-blender: "\f517";
@fa-var-blind: "\f29d";
@fa-var-blogger: "\f37c";
@fa-var-blogger-b: "\f37d";
@ -112,7 +119,9 @@
@fa-var-bold: "\f032";
@fa-var-bolt: "\f0e7";
@fa-var-bomb: "\f1e2";
@fa-var-bong: "\f55c";
@fa-var-book: "\f02d";
@fa-var-book-open: "\f518";
@fa-var-bookmark: "\f02e";
@fa-var-bowling-ball: "\f436";
@fa-var-box: "\f466";
@ -121,6 +130,9 @@
@fa-var-braille: "\f2a1";
@fa-var-briefcase: "\f0b1";
@fa-var-briefcase-medical: "\f469";
@fa-var-broadcast-tower: "\f519";
@fa-var-broom: "\f51a";
@fa-var-brush: "\f55d";
@fa-var-btc: "\f15a";
@fa-var-bug: "\f188";
@fa-var-building: "\f1ad";
@ -129,6 +141,7 @@
@fa-var-burn: "\f46a";
@fa-var-buromobelexperte: "\f37f";
@fa-var-bus: "\f207";
@fa-var-bus-alt: "\f55e";
@fa-var-buysellads: "\f20d";
@fa-var-calculator: "\f1ec";
@fa-var-calendar: "\f133";
@ -139,6 +152,7 @@
@fa-var-calendar-times: "\f273";
@fa-var-camera: "\f030";
@fa-var-camera-retro: "\f083";
@fa-var-cannabis: "\f55f";
@fa-var-capsules: "\f46b";
@fa-var-car: "\f1b9";
@fa-var-caret-down: "\f0d7";
@ -163,12 +177,15 @@
@fa-var-cc-visa: "\f1f0";
@fa-var-centercode: "\f380";
@fa-var-certificate: "\f0a3";
@fa-var-chalkboard: "\f51b";
@fa-var-chalkboard-teacher: "\f51c";
@fa-var-chart-area: "\f1fe";
@fa-var-chart-bar: "\f080";
@fa-var-chart-line: "\f201";
@fa-var-chart-pie: "\f200";
@fa-var-check: "\f00c";
@fa-var-check-circle: "\f058";
@fa-var-check-double: "\f560";
@fa-var-check-square: "\f14a";
@fa-var-chess: "\f439";
@fa-var-chess-bishop: "\f43a";
@ -188,6 +205,7 @@
@fa-var-chevron-up: "\f077";
@fa-var-child: "\f1ae";
@fa-var-chrome: "\f268";
@fa-var-church: "\f51d";
@fa-var-circle: "\f111";
@fa-var-circle-notch: "\f1ce";
@fa-var-clipboard: "\f328";
@ -202,6 +220,7 @@
@fa-var-cloudscale: "\f383";
@fa-var-cloudsmith: "\f384";
@fa-var-cloudversify: "\f385";
@fa-var-cocktail: "\f561";
@fa-var-code: "\f121";
@fa-var-code-branch: "\f126";
@fa-var-codepen: "\f1cb";
@ -209,16 +228,21 @@
@fa-var-coffee: "\f0f4";
@fa-var-cog: "\f013";
@fa-var-cogs: "\f085";
@fa-var-coins: "\f51e";
@fa-var-columns: "\f0db";
@fa-var-comment: "\f075";
@fa-var-comment-alt: "\f27a";
@fa-var-comment-dots: "\f4ad";
@fa-var-comment-slash: "\f4b3";
@fa-var-comments: "\f086";
@fa-var-compact-disc: "\f51f";
@fa-var-compass: "\f14e";
@fa-var-compress: "\f066";
@fa-var-concierge-bell: "\f562";
@fa-var-connectdevelop: "\f20e";
@fa-var-contao: "\f26d";
@fa-var-cookie: "\f563";
@fa-var-cookie-bite: "\f564";
@fa-var-copy: "\f0c5";
@fa-var-copyright: "\f1f9";
@fa-var-couch: "\f4b8";
@ -238,7 +262,10 @@
@fa-var-creative-commons-share: "\f4f2";
@fa-var-credit-card: "\f09d";
@fa-var-crop: "\f125";
@fa-var-crop-alt: "\f565";
@fa-var-crosshairs: "\f05b";
@fa-var-crow: "\f520";
@fa-var-crown: "\f521";
@fa-var-css3: "\f13c";
@fa-var-css3-alt: "\f38b";
@fa-var-cube: "\f1b2";
@ -255,10 +282,20 @@
@fa-var-desktop: "\f108";
@fa-var-deviantart: "\f1bd";
@fa-var-diagnoses: "\f470";
@fa-var-dice: "\f522";
@fa-var-dice-five: "\f523";
@fa-var-dice-four: "\f524";
@fa-var-dice-one: "\f525";
@fa-var-dice-six: "\f526";
@fa-var-dice-three: "\f527";
@fa-var-dice-two: "\f528";
@fa-var-digg: "\f1a6";
@fa-var-digital-ocean: "\f391";
@fa-var-digital-tachograph: "\f566";
@fa-var-discord: "\f392";
@fa-var-discourse: "\f393";
@fa-var-divide: "\f529";
@fa-var-dizzy: "\f567";
@fa-var-dna: "\f471";
@fa-var-dochub: "\f394";
@fa-var-docker: "\f395";
@ -266,14 +303,20 @@
@fa-var-dolly: "\f472";
@fa-var-dolly-flatbed: "\f474";
@fa-var-donate: "\f4b9";
@fa-var-door-closed: "\f52a";
@fa-var-door-open: "\f52b";
@fa-var-dot-circle: "\f192";
@fa-var-dove: "\f4ba";
@fa-var-download: "\f019";
@fa-var-draft2digital: "\f396";
@fa-var-drafting-compass: "\f568";
@fa-var-dribbble: "\f17d";
@fa-var-dribbble-square: "\f397";
@fa-var-dropbox: "\f16b";
@fa-var-drum: "\f569";
@fa-var-drum-steelpan: "\f56a";
@fa-var-drupal: "\f1a9";
@fa-var-dumbbell: "\f44b";
@fa-var-dyalog: "\f399";
@fa-var-earlybirds: "\f39a";
@fa-var-ebay: "\f4f4";
@ -289,6 +332,7 @@
@fa-var-envelope-open: "\f2b6";
@fa-var-envelope-square: "\f199";
@fa-var-envira: "\f299";
@fa-var-equals: "\f52c";
@fa-var-eraser: "\f12d";
@fa-var-erlang: "\f39d";
@fa-var-ethereum: "\f42e";
@ -313,6 +357,8 @@
@fa-var-fast-backward: "\f049";
@fa-var-fast-forward: "\f050";
@fa-var-fax: "\f1ac";
@fa-var-feather: "\f52d";
@fa-var-feather-alt: "\f56b";
@fa-var-female: "\f182";
@fa-var-fighter-jet: "\f0fb";
@fa-var-file: "\f15b";
@ -320,27 +366,42 @@
@fa-var-file-archive: "\f1c6";
@fa-var-file-audio: "\f1c7";
@fa-var-file-code: "\f1c9";
@fa-var-file-contract: "\f56c";
@fa-var-file-download: "\f56d";
@fa-var-file-excel: "\f1c3";
@fa-var-file-export: "\f56e";
@fa-var-file-image: "\f1c5";
@fa-var-file-import: "\f56f";
@fa-var-file-invoice: "\f570";
@fa-var-file-invoice-dollar: "\f571";
@fa-var-file-medical: "\f477";
@fa-var-file-medical-alt: "\f478";
@fa-var-file-pdf: "\f1c1";
@fa-var-file-powerpoint: "\f1c4";
@fa-var-file-prescription: "\f572";
@fa-var-file-signature: "\f573";
@fa-var-file-upload: "\f574";
@fa-var-file-video: "\f1c8";
@fa-var-file-word: "\f1c2";
@fa-var-fill: "\f575";
@fa-var-fill-drip: "\f576";
@fa-var-film: "\f008";
@fa-var-filter: "\f0b0";
@fa-var-fingerprint: "\f577";
@fa-var-fire: "\f06d";
@fa-var-fire-extinguisher: "\f134";
@fa-var-firefox: "\f269";
@fa-var-first-aid: "\f479";
@fa-var-first-order: "\f2b0";
@fa-var-first-order-alt: "\f50a";
@fa-var-firstdraft: "\f3a1";
@fa-var-fish: "\f578";
@fa-var-flag: "\f024";
@fa-var-flag-checkered: "\f11e";
@fa-var-flask: "\f0c3";
@fa-var-flickr: "\f16e";
@fa-var-flipboard: "\f44d";
@fa-var-flushed: "\f579";
@fa-var-fly: "\f417";
@fa-var-folder: "\f07b";
@fa-var-folder-open: "\f07c";
@ -359,9 +420,15 @@
@fa-var-foursquare: "\f180";
@fa-var-free-code-camp: "\f2c5";
@fa-var-freebsd: "\f3a4";
@fa-var-frog: "\f52e";
@fa-var-frown: "\f119";
@fa-var-frown-open: "\f57a";
@fa-var-fulcrum: "\f50b";
@fa-var-futbol: "\f1e3";
@fa-var-galactic-republic: "\f50c";
@fa-var-galactic-senate: "\f50d";
@fa-var-gamepad: "\f11b";
@fa-var-gas-pump: "\f52f";
@fa-var-gavel: "\f0e3";
@fa-var-gem: "\f3a5";
@fa-var-genderless: "\f22d";
@ -378,9 +445,14 @@
@fa-var-gitlab: "\f296";
@fa-var-gitter: "\f426";
@fa-var-glass-martini: "\f000";
@fa-var-glass-martini-alt: "\f57b";
@fa-var-glasses: "\f530";
@fa-var-glide: "\f2a5";
@fa-var-glide-g: "\f2a6";
@fa-var-globe: "\f0ac";
@fa-var-globe-africa: "\f57c";
@fa-var-globe-americas: "\f57d";
@fa-var-globe-asia: "\f57e";
@fa-var-gofore: "\f3a7";
@fa-var-golf-ball: "\f450";
@fa-var-goodreads: "\f3a8";
@ -395,6 +467,24 @@
@fa-var-graduation-cap: "\f19d";
@fa-var-gratipay: "\f184";
@fa-var-grav: "\f2d6";
@fa-var-greater-than: "\f531";
@fa-var-greater-than-equal: "\f532";
@fa-var-grimace: "\f57f";
@fa-var-grin: "\f580";
@fa-var-grin-alt: "\f581";
@fa-var-grin-beam: "\f582";
@fa-var-grin-beam-sweat: "\f583";
@fa-var-grin-hearts: "\f584";
@fa-var-grin-squint: "\f585";
@fa-var-grin-squint-tears: "\f586";
@fa-var-grin-stars: "\f587";
@fa-var-grin-tears: "\f588";
@fa-var-grin-tongue: "\f589";
@fa-var-grin-tongue-squint: "\f58a";
@fa-var-grin-tongue-wink: "\f58b";
@fa-var-grin-wink: "\f58c";
@fa-var-grip-horizontal: "\f58d";
@fa-var-grip-vertical: "\f58e";
@fa-var-gripfire: "\f3ac";
@fa-var-grunt: "\f3ad";
@fa-var-gulp: "\f3ae";
@ -422,17 +512,24 @@
@fa-var-hdd: "\f0a0";
@fa-var-heading: "\f1dc";
@fa-var-headphones: "\f025";
@fa-var-headphones-alt: "\f58f";
@fa-var-headset: "\f590";
@fa-var-heart: "\f004";
@fa-var-heartbeat: "\f21e";
@fa-var-helicopter: "\f533";
@fa-var-highlighter: "\f591";
@fa-var-hips: "\f452";
@fa-var-hire-a-helper: "\f3b0";
@fa-var-history: "\f1da";
@fa-var-hockey-puck: "\f453";
@fa-var-home: "\f015";
@fa-var-hooli: "\f427";
@fa-var-hornbill: "\f592";
@fa-var-hospital: "\f0f8";
@fa-var-hospital-alt: "\f47d";
@fa-var-hospital-symbol: "\f47e";
@fa-var-hot-tub: "\f593";
@fa-var-hotel: "\f594";
@fa-var-hotjar: "\f3b1";
@fa-var-hourglass: "\f254";
@fa-var-hourglass-end: "\f253";
@ -451,6 +548,7 @@
@fa-var-inbox: "\f01c";
@fa-var-indent: "\f03c";
@fa-var-industry: "\f275";
@fa-var-infinity: "\f534";
@fa-var-info: "\f129";
@fa-var-info-circle: "\f05a";
@fa-var-instagram: "\f16d";
@ -460,8 +558,10 @@
@fa-var-itunes: "\f3b4";
@fa-var-itunes-note: "\f3b5";
@fa-var-java: "\f4e4";
@fa-var-jedi-order: "\f50e";
@fa-var-jenkins: "\f3b6";
@fa-var-joget: "\f3b7";
@fa-var-joint: "\f595";
@fa-var-joomla: "\f1aa";
@fa-var-js: "\f3b8";
@fa-var-js-square: "\f3b9";
@ -472,16 +572,26 @@
@fa-var-keycdn: "\f3ba";
@fa-var-kickstarter: "\f3bb";
@fa-var-kickstarter-k: "\f3bc";
@fa-var-kiss: "\f596";
@fa-var-kiss-beam: "\f597";
@fa-var-kiss-wink-heart: "\f598";
@fa-var-kiwi-bird: "\f535";
@fa-var-korvue: "\f42f";
@fa-var-language: "\f1ab";
@fa-var-laptop: "\f109";
@fa-var-laravel: "\f3bd";
@fa-var-lastfm: "\f202";
@fa-var-lastfm-square: "\f203";
@fa-var-laugh: "\f599";
@fa-var-laugh-beam: "\f59a";
@fa-var-laugh-squint: "\f59b";
@fa-var-laugh-wink: "\f59c";
@fa-var-leaf: "\f06c";
@fa-var-leanpub: "\f212";
@fa-var-lemon: "\f094";
@fa-var-less: "\f41d";
@fa-var-less-than: "\f536";
@fa-var-less-than-equal: "\f537";
@fa-var-level-down-alt: "\f3be";
@fa-var-level-up-alt: "\f3bf";
@fa-var-life-ring: "\f1cd";
@ -505,16 +615,22 @@
@fa-var-long-arrow-alt-right: "\f30b";
@fa-var-long-arrow-alt-up: "\f30c";
@fa-var-low-vision: "\f2a8";
@fa-var-luggage-cart: "\f59d";
@fa-var-lyft: "\f3c3";
@fa-var-magento: "\f3c4";
@fa-var-magic: "\f0d0";
@fa-var-magnet: "\f076";
@fa-var-mailchimp: "\f59e";
@fa-var-male: "\f183";
@fa-var-mandalorian: "\f50f";
@fa-var-map: "\f279";
@fa-var-map-marked: "\f59f";
@fa-var-map-marked-alt: "\f5a0";
@fa-var-map-marker: "\f041";
@fa-var-map-marker-alt: "\f3c5";
@fa-var-map-pin: "\f276";
@fa-var-map-signs: "\f277";
@fa-var-marker: "\f5a1";
@fa-var-mars: "\f222";
@fa-var-mars-double: "\f227";
@fa-var-mars-stroke: "\f229";
@ -522,16 +638,23 @@
@fa-var-mars-stroke-v: "\f22a";
@fa-var-mastodon: "\f4f6";
@fa-var-maxcdn: "\f136";
@fa-var-medal: "\f5a2";
@fa-var-medapps: "\f3c6";
@fa-var-medium: "\f23a";
@fa-var-medium-m: "\f3c7";
@fa-var-medkit: "\f0fa";
@fa-var-medrt: "\f3c8";
@fa-var-meetup: "\f2e0";
@fa-var-megaport: "\f5a3";
@fa-var-meh: "\f11a";
@fa-var-meh-blank: "\f5a4";
@fa-var-meh-rolling-eyes: "\f5a5";
@fa-var-memory: "\f538";
@fa-var-mercury: "\f223";
@fa-var-microchip: "\f2db";
@fa-var-microphone: "\f130";
@fa-var-microphone-alt: "\f3c9";
@fa-var-microphone-alt-slash: "\f539";
@fa-var-microphone-slash: "\f131";
@fa-var-microsoft: "\f3ca";
@fa-var-minus: "\f068";
@ -544,17 +667,26 @@
@fa-var-mobile-alt: "\f3cd";
@fa-var-modx: "\f285";
@fa-var-monero: "\f3d0";
@fa-var-money-bill: "\f0d6";
@fa-var-money-bill-alt: "\f3d1";
@fa-var-money-bill-wave: "\f53a";
@fa-var-money-bill-wave-alt: "\f53b";
@fa-var-money-check: "\f53c";
@fa-var-money-check-alt: "\f53d";
@fa-var-monument: "\f5a6";
@fa-var-moon: "\f186";
@fa-var-mortar-pestle: "\f5a7";
@fa-var-motorcycle: "\f21c";
@fa-var-mouse-pointer: "\f245";
@fa-var-music: "\f001";
@fa-var-napster: "\f3d2";
@fa-var-neuter: "\f22c";
@fa-var-newspaper: "\f1ea";
@fa-var-nimblr: "\f5a8";
@fa-var-nintendo-switch: "\f418";
@fa-var-node: "\f419";
@fa-var-node-js: "\f3d3";
@fa-var-not-equal: "\f53e";
@fa-var-notes-medical: "\f481";
@fa-var-npm: "\f3d4";
@fa-var-ns8: "\f3d5";
@ -563,6 +695,7 @@
@fa-var-object-ungroup: "\f248";
@fa-var-odnoklassniki: "\f263";
@fa-var-odnoklassniki-square: "\f264";
@fa-var-old-republic: "\f510";
@fa-var-opencart: "\f23d";
@fa-var-openid: "\f19b";
@fa-var-opera: "\f26a";
@ -572,25 +705,36 @@
@fa-var-page4: "\f3d7";
@fa-var-pagelines: "\f18c";
@fa-var-paint-brush: "\f1fc";
@fa-var-paint-roller: "\f5aa";
@fa-var-palette: "\f53f";
@fa-var-palfed: "\f3d8";
@fa-var-pallet: "\f482";
@fa-var-paper-plane: "\f1d8";
@fa-var-paperclip: "\f0c6";
@fa-var-parachute-box: "\f4cd";
@fa-var-paragraph: "\f1dd";
@fa-var-parking: "\f540";
@fa-var-passport: "\f5ab";
@fa-var-paste: "\f0ea";
@fa-var-patreon: "\f3d9";
@fa-var-pause: "\f04c";
@fa-var-pause-circle: "\f28b";
@fa-var-paw: "\f1b0";
@fa-var-paypal: "\f1ed";
@fa-var-pen: "\f304";
@fa-var-pen-alt: "\f305";
@fa-var-pen-fancy: "\f5ac";
@fa-var-pen-nib: "\f5ad";
@fa-var-pen-square: "\f14b";
@fa-var-pencil-alt: "\f303";
@fa-var-pencil-ruler: "\f5ae";
@fa-var-people-carry: "\f4ce";
@fa-var-percent: "\f295";
@fa-var-percentage: "\f541";
@fa-var-periscope: "\f3da";
@fa-var-phabricator: "\f3db";
@fa-var-phoenix-framework: "\f3dc";
@fa-var-phoenix-squadron: "\f511";
@fa-var-phone: "\f095";
@fa-var-phone-slash: "\f3dd";
@fa-var-phone-square: "\f098";
@ -606,6 +750,8 @@
@fa-var-pinterest-p: "\f231";
@fa-var-pinterest-square: "\f0d3";
@fa-var-plane: "\f072";
@fa-var-plane-arrival: "\f5af";
@fa-var-plane-departure: "\f5b0";
@fa-var-play: "\f04b";
@fa-var-play-circle: "\f144";
@fa-var-playstation: "\f3df";
@ -618,11 +764,13 @@
@fa-var-portrait: "\f3e0";
@fa-var-pound-sign: "\f154";
@fa-var-power-off: "\f011";
@fa-var-prescription: "\f5b1";
@fa-var-prescription-bottle: "\f485";
@fa-var-prescription-bottle-alt: "\f486";
@fa-var-print: "\f02f";
@fa-var-procedures: "\f487";
@fa-var-product-hunt: "\f288";
@fa-var-project-diagram: "\f542";
@fa-var-pushed: "\f3e1";
@fa-var-puzzle-piece: "\f12e";
@fa-var-python: "\f3e2";
@ -635,12 +783,13 @@
@fa-var-quora: "\f2c4";
@fa-var-quote-left: "\f10d";
@fa-var-quote-right: "\f10e";
@fa-var-r: "\f4f7";
@fa-var-r-project: "\f4f7";
@fa-var-random: "\f074";
@fa-var-ravelry: "\f2d9";
@fa-var-react: "\f41b";
@fa-var-readme: "\f4d5";
@fa-var-rebel: "\f1d0";
@fa-var-receipt: "\f543";
@fa-var-recycle: "\f1b8";
@fa-var-red-river: "\f3e3";
@fa-var-reddit: "\f1a1";
@ -659,17 +808,26 @@
@fa-var-retweet: "\f079";
@fa-var-ribbon: "\f4d6";
@fa-var-road: "\f018";
@fa-var-robot: "\f544";
@fa-var-rocket: "\f135";
@fa-var-rocketchat: "\f3e8";
@fa-var-rockrms: "\f3e9";
@fa-var-rss: "\f09e";
@fa-var-rss-square: "\f143";
@fa-var-ruble-sign: "\f158";
@fa-var-ruler: "\f545";
@fa-var-ruler-combined: "\f546";
@fa-var-ruler-horizontal: "\f547";
@fa-var-ruler-vertical: "\f548";
@fa-var-rupee-sign: "\f156";
@fa-var-sad-cry: "\f5b3";
@fa-var-sad-tear: "\f5b4";
@fa-var-safari: "\f267";
@fa-var-sass: "\f41e";
@fa-var-save: "\f0c7";
@fa-var-schlix: "\f3ea";
@fa-var-school: "\f549";
@fa-var-screwdriver: "\f54a";
@fa-var-scribd: "\f28a";
@fa-var-search: "\f002";
@fa-var-search-minus: "\f010";
@ -689,18 +847,24 @@
@fa-var-ship: "\f21a";
@fa-var-shipping-fast: "\f48b";
@fa-var-shirtsinbulk: "\f214";
@fa-var-shoe-prints: "\f54b";
@fa-var-shopping-bag: "\f290";
@fa-var-shopping-basket: "\f291";
@fa-var-shopping-cart: "\f07a";
@fa-var-shopware: "\f5b5";
@fa-var-shower: "\f2cc";
@fa-var-shuttle-van: "\f5b6";
@fa-var-sign: "\f4d9";
@fa-var-sign-in-alt: "\f2f6";
@fa-var-sign-language: "\f2a7";
@fa-var-sign-out-alt: "\f2f5";
@fa-var-signal: "\f012";
@fa-var-signature: "\f5b7";
@fa-var-simplybuilt: "\f215";
@fa-var-sistrix: "\f3ee";
@fa-var-sitemap: "\f0e8";
@fa-var-sith: "\f512";
@fa-var-skull: "\f54c";
@fa-var-skyatlas: "\f216";
@fa-var-skype: "\f17e";
@fa-var-slack: "\f198";
@ -708,11 +872,15 @@
@fa-var-sliders-h: "\f1de";
@fa-var-slideshare: "\f1e7";
@fa-var-smile: "\f118";
@fa-var-smile-beam: "\f5b8";
@fa-var-smile-wink: "\f4da";
@fa-var-smoking: "\f48d";
@fa-var-smoking-ban: "\f54d";
@fa-var-snapchat: "\f2ab";
@fa-var-snapchat-ghost: "\f2ac";
@fa-var-snapchat-square: "\f2ad";
@fa-var-snowflake: "\f2dc";
@fa-var-solar-panel: "\f5ba";
@fa-var-sort: "\f0dc";
@fa-var-sort-alpha-down: "\f15d";
@fa-var-sort-alpha-up: "\f15e";
@ -723,16 +891,22 @@
@fa-var-sort-numeric-up: "\f163";
@fa-var-sort-up: "\f0de";
@fa-var-soundcloud: "\f1be";
@fa-var-spa: "\f5bb";
@fa-var-space-shuttle: "\f197";
@fa-var-speakap: "\f3f3";
@fa-var-spinner: "\f110";
@fa-var-splotch: "\f5bc";
@fa-var-spotify: "\f1bc";
@fa-var-spray-can: "\f5bd";
@fa-var-square: "\f0c8";
@fa-var-square-full: "\f45c";
@fa-var-squarespace: "\f5be";
@fa-var-stack-exchange: "\f18d";
@fa-var-stack-overflow: "\f16c";
@fa-var-stamp: "\f5bf";
@fa-var-star: "\f005";
@fa-var-star-half: "\f089";
@fa-var-star-half-alt: "\f5c0";
@fa-var-staylinked: "\f3f5";
@fa-var-steam: "\f1b6";
@fa-var-steam-square: "\f1b7";
@ -745,21 +919,30 @@
@fa-var-stop: "\f04d";
@fa-var-stop-circle: "\f28d";
@fa-var-stopwatch: "\f2f2";
@fa-var-store: "\f54e";
@fa-var-store-alt: "\f54f";
@fa-var-strava: "\f428";
@fa-var-stream: "\f550";
@fa-var-street-view: "\f21d";
@fa-var-strikethrough: "\f0cc";
@fa-var-stripe: "\f429";
@fa-var-stripe-s: "\f42a";
@fa-var-stroopwafel: "\f551";
@fa-var-studiovinari: "\f3f8";
@fa-var-stumbleupon: "\f1a4";
@fa-var-stumbleupon-circle: "\f1a3";
@fa-var-subscript: "\f12c";
@fa-var-subway: "\f239";
@fa-var-suitcase: "\f0f2";
@fa-var-suitcase-rolling: "\f5c1";
@fa-var-sun: "\f185";
@fa-var-superpowers: "\f2dd";
@fa-var-superscript: "\f12b";
@fa-var-supple: "\f3f9";
@fa-var-surprise: "\f5c2";
@fa-var-swatchbook: "\f5c3";
@fa-var-swimmer: "\f5c4";
@fa-var-swimming-pool: "\f5c5";
@fa-var-sync: "\f021";
@fa-var-sync-alt: "\f2f1";
@fa-var-syringe: "\f48e";
@ -784,6 +967,7 @@
@fa-var-th: "\f00a";
@fa-var-th-large: "\f009";
@fa-var-th-list: "\f00b";
@fa-var-themeco: "\f5c6";
@fa-var-themeisle: "\f2b2";
@fa-var-thermometer: "\f491";
@fa-var-thermometer-empty: "\f2cb";
@ -798,8 +982,13 @@
@fa-var-times: "\f00d";
@fa-var-times-circle: "\f057";
@fa-var-tint: "\f043";
@fa-var-tint-slash: "\f5c7";
@fa-var-tired: "\f5c8";
@fa-var-toggle-off: "\f204";
@fa-var-toggle-on: "\f205";
@fa-var-toolbox: "\f552";
@fa-var-tooth: "\f5c9";
@fa-var-trade-federation: "\f513";
@fa-var-trademark: "\f25c";
@fa-var-train: "\f238";
@fa-var-transgender: "\f224";
@ -813,6 +1002,7 @@
@fa-var-truck: "\f0d1";
@fa-var-truck-loading: "\f4de";
@fa-var-truck-moving: "\f4df";
@fa-var-tshirt: "\f553";
@fa-var-tty: "\f1e4";
@fa-var-tumblr: "\f173";
@fa-var-tumblr-square: "\f174";
@ -824,6 +1014,7 @@
@fa-var-uber: "\f402";
@fa-var-uikit: "\f403";
@fa-var-umbrella: "\f0e9";
@fa-var-umbrella-beach: "\f5ca";
@fa-var-underline: "\f0cd";
@fa-var-undo: "\f0e2";
@fa-var-undo-alt: "\f2ea";
@ -864,6 +1055,7 @@
@fa-var-utensil-spoon: "\f2e5";
@fa-var-utensils: "\f2e7";
@fa-var-vaadin: "\f408";
@fa-var-vector-square: "\f5cb";
@fa-var-venus: "\f221";
@fa-var-venus-double: "\f226";
@fa-var-venus-mars: "\f228";
@ -886,9 +1078,13 @@
@fa-var-volume-off: "\f026";
@fa-var-volume-up: "\f028";
@fa-var-vuejs: "\f41f";
@fa-var-walking: "\f554";
@fa-var-wallet: "\f555";
@fa-var-warehouse: "\f494";
@fa-var-weebly: "\f5cc";
@fa-var-weibo: "\f18a";
@fa-var-weight: "\f496";
@fa-var-weight-hanging: "\f5cd";
@fa-var-weixin: "\f1d7";
@fa-var-whatsapp: "\f232";
@fa-var-whatsapp-square: "\f40c";
@ -902,6 +1098,9 @@
@fa-var-window-restore: "\f2d2";
@fa-var-windows: "\f17a";
@fa-var-wine-glass: "\f4e3";
@fa-var-wine-glass-alt: "\f5ce";
@fa-var-wix: "\f5cf";
@fa-var-wolf-pack-battalion: "\f514";
@fa-var-won-sign: "\f159";
@fa-var-wordpress: "\f19a";
@fa-var-wordpress-simple: "\f411";

@ -925,6 +925,21 @@ html.touch {
}
}
.keylist {
padding: 0;
list-style: none;
li {
line-height: 2;
&:before {
&:extend(.font-icon-class);
content: @fa-var-key;
line-height: 1.5;
}
}
}
#identities-table {
td.mail:before {
&:extend(.font-icon-class);

@ -199,7 +199,7 @@
img {
max-height: @layout-touch-header-height;
max-width: @layout-menu-width;
max-width: @layout-mobile-menu-width - 50px;
}
a {

@ -1,5 +1,7 @@
<roundcube:include file="includes/layout.html" />
<roundcube:object name="logo" id="logo" alt="Logo" type="print" class="float-sm-right" />
<div class="print-content formcontent" role="main">
<div class="contact-header">
<div id="contactphoto" class="contact-photo">

@ -15,7 +15,7 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no, maximum-scale=1.0" id="viewport">
<link rel="shortcut icon" href="/images/favicon.ico">
<roundcube:object name="favicon" />
<link rel="stylesheet" href="/deps/bootstrap.min.css">
<roundcube:if condition="config:devel_mode" />
<link rel="stylesheet/less" href="/styles/styles.less">

@ -1,7 +1,7 @@
<div class="menu">
<h2 id="aria-label-tasknav" class="voice"><roundcube:label name="arialabeltasknav" /></h2>
<div class="popover-header">
<roundcube:object name="logo" src="/images/logo.png" id="logo" alt="Logo" />
<roundcube:object name="logo" src="/images/logo.png" data-src-small="0" id="logo" alt="Logo" />
<a class="button icon cancel"><span class="inner"><roundcube:label name="close" /></span></a>
</div>
<div id="taskmenu" role="navigation" aria-labelledby="aria-label-tasknav">

@ -1,5 +1,7 @@
<roundcube:include file="includes/layout.html" />
<roundcube:object name="logo" id="logo" alt="Logo" type="print" class="float-sm-right" />
<div class="print-content" role="main">
<div id="message-header">
<h2 class="subject">

@ -328,6 +328,11 @@ function rcube_elastic_ui()
}
callback();
});
// Store default logo path if not already set
if (!$('#logo').data('src-default')) {
$('#logo').data('src-default', $('#logo').attr('src'));
}
};
/**
@ -1367,6 +1372,7 @@ function rcube_elastic_ui()
case 'large': screen_resize_large(); break;
}
screen_resize_logo(mode);
screen_resize_headers();
// On iOS and Android the content frame height is never correct, fix it
@ -1410,6 +1416,16 @@ function rcube_elastic_ui()
}
};
function screen_resize_logo(mode)
{
if (mode == 'phone' && $('#logo').data('src-small')) {
$('#logo').attr('src', $('#logo').data('src-small'));
}
else {
$('#logo').attr('src', $('#logo').data('src-default'));
}
}
/**
* Sets left and right margin to the header title element to make it
* properly centered depending on the number of buttons on both sides

@ -1,5 +1,5 @@
<meta name="viewport" content="" id="viewport" />
<link rel="shortcut icon" href="/images/favicon.ico"/>
<roundcube:object name="favicon" />
<link rel="stylesheet" type="text/css" href="/styles.css" />
<roundcube:if condition="in_array(env:task, array('mail','addressbook','settings'))" />
<link rel="stylesheet" type="text/css" href="/<roundcube:var name="env:task" />.css" />

@ -2,12 +2,12 @@
<html>
<head>
<title><roundcube:object name="pagetitle" /></title>
<link rel="shortcut icon" href="/images/favicon.ico"/>
<roundcube:object name="favicon" />
<link rel="stylesheet" type="text/css" href="/print.css" />
</head>
<body>
<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" /></div>
<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" type="print" /></div>
<div id="contact-details" class="boxcontent">
<div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>

@ -2,12 +2,12 @@
<html>
<head>
<title><roundcube:object name="pagetitle" /></title>
<link rel="shortcut icon" href="/images/favicon.ico"/>
<roundcube:object name="favicon" />
<link rel="stylesheet" type="text/css" href="/print.css" />
</head>
<body>
<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" /></div>
<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" type="print" /></div>
<div id="printmessageframe">
<roundcube:object name="messageHeaders" class="headers-table" max="10" />

@ -93,6 +93,11 @@ class Framework_Washtml extends PHPUnit_Framework_TestCase
$washed = $this->cleanupResult($washer->wash($html));
$this->assertEquals('<p>para1</p><p>para2</p>', $washed, "HTML comments - tags inside (#1489904)");
$html = "<p>para1</p><!-- comment => comment --><p>para2</p>";
$washed = $this->cleanupResult($washer->wash($html));
$this->assertEquals('<p>para1</p><p>para2</p>', $washed, "HTML comments - bracket inside");
}
/**

Loading…
Cancel
Save