From a783893403fc4fae232722f92adc52765e0b3c1b Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Tue, 5 Sep 2017 19:04:45 +0200
Subject: [PATCH] Set statustext value as text by default - Introduce new
boolean attribute called statustext_html in case we want explicitly
statustext gets rendered as html - Fix Calendar tooltip with new
statustext_html attribute
---
api/js/etemplate/et2_core_baseWidget.js | 8 +++++++-
api/js/jsapi/egw_tooltip.js | 16 ++++++++++++----
calendar/js/et2_widget_event.js | 9 +++++----
calendar/templates/default/conflicts.xet | 4 ++--
4 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/api/js/etemplate/et2_core_baseWidget.js b/api/js/etemplate/et2_core_baseWidget.js
index b384c2967e..6acb3c9284 100644
--- a/api/js/etemplate/et2_core_baseWidget.js
+++ b/api/js/etemplate/et2_core_baseWidget.js
@@ -32,6 +32,12 @@ var et2_baseWidget = (function(){ "use strict"; return et2_DOMWidget.extend(et2_
"description": "Tooltip which is shown for this element",
"translate": true
},
+ "statustext_html": {
+ "name": "Tooltip is html",
+ "type": "boolean",
+ "description": "Flag to allow html content in tooltip",
+ "default": false
+ },
"align": {
"name": "Align",
"type": "string",
@@ -277,7 +283,7 @@ var et2_baseWidget = (function(){ "use strict"; return et2_DOMWidget.extend(et2_
if (_value && _value != '')
{
- this.egw().tooltipBind(elem, _value);
+ this.egw().tooltipBind(elem, _value, this.options.statustext_html);
this._tooltipElem = elem;
}
}
diff --git a/api/js/jsapi/egw_tooltip.js b/api/js/jsapi/egw_tooltip.js
index c7a6b11443..64a76365d7 100644
--- a/api/js/jsapi/egw_tooltip.js
+++ b/api/js/jsapi/egw_tooltip.js
@@ -106,8 +106,9 @@ egw.extend('tooltip', egw.MODULE_WND_LOCAL, function(_app, _wnd)
* Creates the tooltip_div with the given text.
*
* @param {string} _html
+ * @param {boolean} _isHtml if set to true content gets appended as html
*/
- function prepare(_html)
+ function prepare(_html, _isHtml)
{
// Free and null the old tooltip_div
hide();
@@ -115,7 +116,14 @@ egw.extend('tooltip', egw.MODULE_WND_LOCAL, function(_app, _wnd)
//Generate the tooltip div, set it's text and append it to the body tag
tooltip_div = jQuery(_wnd.document.createElement('div'));
tooltip_div.hide();
- tooltip_div.append(_html);
+ if (_isHtml)
+ {
+ tooltip_div.append(_html);
+ }
+ else
+ {
+ tooltip_div.text(_html)
+ }
tooltip_div.addClass("egw_tooltip");
jQuery(_wnd.document.body).append(tooltip_div);
@@ -156,14 +164,14 @@ egw.extend('tooltip', egw.MODULE_WND_LOCAL, function(_app, _wnd)
* has to be a jQuery node.
* @param _html is the html code which should be shown as tooltip.
*/
- tooltipBind: function(_elem, _html) {
+ tooltipBind: function(_elem, _html, _isHtml) {
if (_html != '')
{
_elem.bind('mouseenter.tooltip', function(e) {
if (_elem != current_elem)
{
//Prepare the tooltip
- prepare(_html);
+ prepare(_html, _isHtml);
// Set the current element the mouse is over and
// initialize the position variables
diff --git a/calendar/js/et2_widget_event.js b/calendar/js/et2_widget_event.js
index 6fb33531f4..12ffc77fd4 100644
--- a/calendar/js/et2_widget_event.js
+++ b/calendar/js/et2_widget_event.js
@@ -79,6 +79,7 @@ var et2_calendar_event = (function(){ "use strict"; return et2_valueWidget.exten
// Tooltip
if(!event._tooltipElem)
{
+ event.options.statustext_html = true;
event.set_statustext(event._tooltip());
return event.div.trigger('mouseenter');
}
@@ -209,7 +210,7 @@ var et2_calendar_event = (function(){ "use strict"; return et2_valueWidget.exten
{
parent._out_of_view();
}
-
+
// This should now cease to exist, as new events have been created
this.free();
return;
@@ -521,7 +522,7 @@ var et2_calendar_event = (function(){ "use strict"; return et2_valueWidget.exten
''+egw.htmlspecialchars(this.options.value.title)+'
'+
egw.htmlspecialchars(this.options.value.description)+'
'+
''+times+'
'+
- (this.options.value.location ? ''+this.egw().lang('Location') + ':' +
+ (this.options.value.location ? '
'+this.egw().lang('Location') + ':' +
egw.htmlspecialchars(this.options.value.location)+'
' : '')+
(cat_label ? ''+this.egw().lang('Category') + ':' + cat_label +'
' : '')+
''+this.egw().lang('Participants')+':
'+
@@ -541,7 +542,7 @@ var et2_calendar_event = (function(){ "use strict"; return et2_valueWidget.exten
{
return '';
}
-
+
var participant_status = {A: 0, R: 0, T: 0, U: 0, D: 0};
var status_label = {A: 'accepted', R: 'rejected', T: 'tentative', U: 'unknown', D: 'delegated'};
var participant_summary = Object.keys(this.options.value.participants).length + ' ' + this.egw().lang('Participants')+': ';
@@ -914,7 +915,7 @@ var et2_calendar_event = (function(){ "use strict"; return et2_valueWidget.exten
}
}
},
-
+
/**
* Link the actions to the DOM nodes / widget bits.
*
diff --git a/calendar/templates/default/conflicts.xet b/calendar/templates/default/conflicts.xet
index f43a9c4b1b..67f08d945e 100644
--- a/calendar/templates/default/conflicts.xet
+++ b/calendar/templates/default/conflicts.xet
@@ -14,10 +14,10 @@
-
+
-
+