Show Hours Only in Duration

Beto
Mega Guru

How can I see only hours? Either removing minutes and seconds fields OR having them disabled (read-only).

 

find_real_file.png

1 ACCEPTED SOLUTION

Let us you have the table with some duration fields, for example, field1 and field2. You can create Client Script with type onLoad, which has the following code:

function onLoad() {
	var doc = g_form.getControl("field1").ownerDocument,
		win = doc.defaultView,
		table = g_form.getTableName(),
		hideMinSecFields = function (field) {
			function getElem (field, suffix, prefix) {
				return doc.getElementById((prefix || "") + table + "." + field + (suffix || ""));
			}
			var controlHour = getElem(field, "dur_hour", "ni."),
				controlMin = getElem(field, "dur_min", "ni."),
				controlSec = getElem(field, "dur_sec", "ni."), cs;			

			if (controlMin != null && controlMin.style != null) {
				controlMin.style.display = "none";
			}
			if (controlSec != null && controlSec.style != null) {
				if (win != null && win.getComputedStyle != null) {
					cs = win.getComputedStyle(controlSec, null);
					if (controlHour != null && controlHour.style != null && cs != null) {
						controlHour.style.borderRightStyle = cs.getPropertyValue("border-right-style");
						controlHour.style.borderRightWidth = cs.getPropertyValue("border-right-width");
						controlHour.style.borderRightColor = cs.getPropertyValue("border-right-color");
						controlHour.style.borderBottomRightRadius = cs.getPropertyValue("border-bottom-right-radius");
						controlHour.style.borderTopRightRadius = cs.getPropertyValue("border-top-right-radius");
					}
				}
				controlSec.style.display = "none";
			}
		};
	hideMinSecFields("field1");
	hideMinSecFields("field2");
}

It's the same code, which I posted before, but where I posted before. The controls in the form will be displayed without min/sec. Something like on the picture below:

find_real_file.png

View solution in original post

11 REPLIES 11

Oleg
Mega Sage

There are currently no option/attribute of duration, which will display the duration in the form in which you need. I had the same requirement and wrote small function, which use DOM manipulations to hide unneeded input fields. To de mostly safe I initialized docwin and table variables first of all by the following code:

var doc = g_form.getControl("someElementFromTheForm").ownerDocument,
	win = doc.defaultView,
	table = g_form.getTableName();

where someElementFromTheForm is the column name of some element of the form. The main code is the following:

var hideMinSecFields = function (field) {
		function getElem (field, suffix, prefix) {
			return doc.getElementById((prefix || "") + table + "." + field + (suffix || ""));
		}
		var controlHour = getElem(field, "dur_hour", "ni."),
			controlMin = getElem(field, "dur_min", "ni."),
			controlSec = getElem(field, "dur_sec", "ni."), cs;			

		if (controlMin != null && controlMin.style != null) {
			controlMin.style.display = "none";
		}
		if (controlSec != null && controlSec.style != null) {
			if (win != null && win.getComputedStyle != null) {
				cs = win.getComputedStyle(controlSec, null);
				if (controlHour != null && controlHour.style != null && cs != null) {
					controlHour.style.borderRightStyle = cs.getPropertyValue("border-right-style");
					controlHour.style.borderRightWidth = cs.getPropertyValue("border-right-width");
					controlHour.style.borderRightColor = cs.getPropertyValue("border-right-color");
					controlHour.style.borderBottomRightRadius = cs.getPropertyValue("border-bottom-right-radius");
					controlHour.style.borderTopRightRadius = cs.getPropertyValue("border-top-right-radius");
				}
			}
			controlSec.style.display = "none";
		}
	};

To hide the min/sec fields you need just call hideMinSecFields function with the name of the duration field as parameter.

How do I run this? onLoad client script?

Yes of cause. It's a part of code, which will be start onLoad.

Sorry, can you give me the steps? I'm not sure where and how to implement this.