diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index 92c5bb35..e35cef73 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -64,10 +64,51 @@ function rcube_calendar_ui(settings) var Q = this.quote_html; - // php equivalent - var nl2br = function(str) + var text2html = function(str, maxlen, maxlines) { - return String(str).replace(/\n/g, "
"); + var html = Q(String(str)); + + // limit visible text length + if (maxlen) { + var morelink = ' '+rcmail.gettext('showmore','calendar')+'', + lines = html.split(/\r?\n/), + words, out = '', len = 0; + + for (var i=0; i < lines.length; i++) { + len += lines[i].length; + if (maxlines && i == maxlines - 1) { + out += lines[i] + '\n' + morelink; + maxlen = html.length * 2; + } + else if (len > maxlen) { + len = out.length; + words = lines[i].split(' '); + for (var j=0; j < words.length; j++) { + len += words[j].length + 1; + out += words[j] + ' '; + if (len > maxlen) { + out += morelink; + maxlen = html.length * 2; + } + } + out += '\n'; + } + else + out += lines[i] + '\n'; + } + + if (maxlen > str.length) + out += ''; + + html = out; + } + + // simple link parser + return html + .replace(/([hf]t+ps?:\/\/[^\s\n\(\)&]+)/g, '$1') + .replace(/([^\s\n\(\);]+@[^\s\n\(\)\[\]\/,;?!&"']+)/g, '$1') + .replace(/(mailto:)([^"]+)"/g, '$1" onclick="rcmail.command(\'compose\', \'$2\');return false"') + .replace(/\n/g, "
"); }; // same as str.split(delimiter) but it ignores delimiters within quoted strings @@ -260,9 +301,9 @@ function rcube_calendar_ui(settings) $('#event-title').html(Q(event.title)).show(); if (event.location) - $('#event-location').html('@ ' + Q(event.location)).show(); + $('#event-location').html('@ ' + text2html(event.location)).show(); if (event.description) - $('#event-description').show().children('.event-text').html(nl2br(Q(event.description))); // TODO: format HTML with clickable links and stuff + $('#event-description').show().children('.event-text').html(text2html(event.description, 300, 6)); // render from-to in a nice human-readable way $('#event-date').html(Q(me.event_date_text(event))).show(); diff --git a/plugins/calendar/localization/de_CH.inc b/plugins/calendar/localization/de_CH.inc index 05db20f2..35f79d20 100644 --- a/plugins/calendar/localization/de_CH.inc +++ b/plugins/calendar/localization/de_CH.inc @@ -65,6 +65,7 @@ $labels['parentcalendar'] = 'Übergeordneter Kalender'; $labels['searchearlierdates'] = '« Frühere Termine suchen'; $labels['searchlaterdates'] = 'Spätere Termine suchen »'; $labels['andnmore'] = '$nr weitere...'; +$labels['showmore'] = 'Mehr anzeigen...'; $labels['togglerole'] = 'Klick zum Ändern der Rolle'; // agenda view diff --git a/plugins/calendar/localization/de_DE.inc b/plugins/calendar/localization/de_DE.inc index 4bc2e08d..f74a45f9 100644 --- a/plugins/calendar/localization/de_DE.inc +++ b/plugins/calendar/localization/de_DE.inc @@ -65,6 +65,7 @@ $labels['parentcalendar'] = 'Übergeordneter Kalender'; $labels['searchearlierdates'] = '« Frühere Termine suchen'; $labels['searchlaterdates'] = 'Spätere Termine suchen »'; $labels['andnmore'] = '$nr weitere...'; +$labels['showmore'] = 'Mehr anzeigen...'; $labels['togglerole'] = 'Klick zum Ändern der Rolle'; // agenda view diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc index e25eb239..29458a1e 100644 --- a/plugins/calendar/localization/en_US.inc +++ b/plugins/calendar/localization/en_US.inc @@ -65,6 +65,7 @@ $labels['parentcalendar'] = 'Superior calendar'; $labels['searchearlierdates'] = '« Search for earlier events'; $labels['searchlaterdates'] = 'Search for later events »'; $labels['andnmore'] = '$nr more...'; +$labels['showmore'] = 'Show more...'; $labels['togglerole'] = 'Click to toggle role'; // agenda view diff --git a/plugins/calendar/skins/default/calendar.css b/plugins/calendar/skins/default/calendar.css index 895fd997..d8497fcf 100644 --- a/plugins/calendar/skins/default/calendar.css +++ b/plugins/calendar/skins/default/calendar.css @@ -262,6 +262,16 @@ div.uidialog { text-align: center; } +a.morelink { + font-size: 90%; + color: #C33; + text-decoration: none; +} + +a.morelink:hover { + text-decoration: underline; +} + a.miniColors-trigger { margin-top: -3px; }