From 269398be1d90166c43cedbab6d4b6985f13fe9de Mon Sep 17 00:00:00 2001
From: Ralf Becker <ralfbecker@outdoor-training.de>
Date: Mon, 3 Feb 2014 09:54:45 +0000
Subject: [PATCH] add href implementation analog to image

---
 etemplate/js/et2_widget_progress.js | 59 +++++++++++++++++++++--------
 1 file changed, 44 insertions(+), 15 deletions(-)

diff --git a/etemplate/js/et2_widget_progress.js b/etemplate/js/et2_widget_progress.js
index 85f45e908e..6306cadaca 100644
--- a/etemplate/js/et2_widget_progress.js
+++ b/etemplate/js/et2_widget_progress.js
@@ -19,10 +19,10 @@
 
 /**
  * Class which implements the "progress" XET-Tag
- * 
+ *
  * @augments et2_valueWidget
- */ 
-var et2_progress = et2_valueWidget.extend([et2_IDetachedDOM], 
+ */
+var et2_progress = et2_valueWidget.extend([et2_IDetachedDOM],
 {
 	attributes: {
 		"href": {
@@ -53,10 +53,10 @@ var et2_progress = et2_valueWidget.extend([et2_IDetachedDOM],
 
 	/**
 	 * Constructor
-	 * 
+	 *
 	 * @memberOf et2_progress
 	 */
-	init: function() 
+	init: function()
 	{
 		this._super.apply(this, arguments);
 
@@ -66,7 +66,7 @@ var et2_progress = et2_valueWidget.extend([et2_IDetachedDOM],
 		this.progress.style.width = "0";
 		outer.appendChild(this.progress);
 
-		if (this.options.href) 
+		if (this.options.href)
 		{
 			outer.className += ' et2_clickable';
 		}
@@ -76,7 +76,7 @@ var et2_progress = et2_valueWidget.extend([et2_IDetachedDOM],
 		}
 		this.setDOMNode(outer);	// set's this.node = outer
 	},
-	
+
 	click: function()
 	{
 		this._super.apply(this, arguments);
@@ -88,36 +88,60 @@ var et2_progress = et2_valueWidget.extend([et2_IDetachedDOM],
 	},
 
 	// setting the value as width of the progress-bar
-	set_value: function(_value) 
+	set_value: function(_value)
 	{
 		_value = parseInt(_value)+"%";	// make sure we have percent attached
 		this.progress.style.width = _value;
 		if (!this.options.label) this.set_label(_value);
 	},
-	
+
 	// set's label as title of this.node
-	set_label: function(_value) 
+	set_label: function(_value)
 	{
 		this.node.title = _value;
 	},
 
 	// set's class of this.node; preserve baseclasses et2_progress and if this.options.href is set et2_clickable
-	set_class: function(_value) 
+	set_class: function(_value)
 	{
-		var baseClass = "et2_progress"
-		if (this.options.href) 
+		var baseClass = "et2_progress";
+		if (this.options.href)
 		{
 			baseClass += ' et2_clickable';
 		}
 		this.node.setAttribute('class', baseClass + ' ' + _value);
 	},
 
+	set_href: function (_value)
+	{
+		if (!this.isInTree())
+		{
+			return false;
+		}
+
+		this.options.href = _value;
+		jQuery(this.node).wrapAll('<a href="'+_value+'"></a>"');
+
+		var href = this.options.href;
+		var popup = this.options.extra_link_popup;
+		var target = this.options.extra_link_target;
+		jQuery(this.node).parent().click(function(e)
+		{
+			egw.open_link(href,target,popup);
+			e.preventDefault();
+			return false;
+		});
+
+		return true;
+	},
+
 	/**
 	 * Implementation of "et2_IDetachedDOM" for fast viewing in gridview
+	 *
+	 * * @param {array} _attrs array to add further attributes to
 	 */
-
 	getDetachedAttributes: function(_attrs) {
-		_attrs.push("value", "label", "onclick");
+		_attrs.push("value", "label", "href");
 	},
 
 	getDetachedNodes: function() {
@@ -142,6 +166,11 @@ var et2_progress = et2_valueWidget.extend([et2_IDetachedDOM],
 		{
 			this.set_value(_values["label"]);
 		}
+		if(_values["href"])
+		{
+			jQuery(this.node).addClass('et2_clickable');
+			this.set_href(_values["href"]);
+		}
 	}
 });
 et2_register_widget(et2_progress, ["progress"]);