You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
7.7 KiB
275 lines
7.7 KiB
|
|
/*
|
|
* ================================================================================
|
|
* Range Field
|
|
*
|
|
* ================================================================================
|
|
*/
|
|
|
|
bobj.crv.params.newRangeField = function(kwArgs) {
|
|
return new bobj.crv.params.RangeField(kwArgs);
|
|
};
|
|
|
|
bobj.crv.params.RangeField = function(kwArgs) {
|
|
kwArgs = MochiKit.Base.update( {
|
|
id : bobj.uniqueId(),
|
|
cleanValue : {},
|
|
foreColor : 'black',
|
|
isTextItalic: false,
|
|
tooltip : ''
|
|
}, kwArgs);
|
|
|
|
this.widgetType = 'RangeField';
|
|
this.value = kwArgs.cleanValue;
|
|
|
|
// Update instance with constructor arguments
|
|
bobj.fillIn(this, kwArgs);
|
|
};
|
|
|
|
bobj.crv.params.RangeField.prototype = {
|
|
setTabDisabled : function(dis) {
|
|
if(this.layer) {
|
|
var tds = this.layer.getElementsByTagName("TD");
|
|
for(var i = 0, len = tds.length; i < len ; i++) {
|
|
bobj.disableTabbingKey(tds[i], dis);
|
|
}
|
|
}
|
|
},
|
|
|
|
setTooltip : function(text) {
|
|
if(this.layer) {
|
|
this.layer.title = text;
|
|
}
|
|
},
|
|
|
|
setForeColor : function(color) {
|
|
if(this.layer) {
|
|
this.layer.style.color = color;
|
|
}
|
|
},
|
|
|
|
setTextItalic : function(isItalic) {
|
|
if(this.layer) {
|
|
this.layer.style.fontStyle = isItalic ? 'italic' : '';
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Generates HTML for either lower or upper bound value
|
|
* @param value - the value of upper/lower bound
|
|
* @param isRightAligned - a flag for indicating whether left align or right align the generated HTML
|
|
* @return
|
|
*/
|
|
getValueHTML : function(value, isRightAligned) {
|
|
value = value ? value : ' ';
|
|
var style = {
|
|
'text-align' : isRightAligned ? (bobj.crv.config.isRTL? 'left':'right') : (bobj.crv.config.isRTL? 'right':'left')
|
|
};
|
|
|
|
var SPAN = "";
|
|
|
|
//[ADAPT01680961] In IE we should force the span to show the value in one line
|
|
if (MochiKit.Base.isIE ()) {
|
|
SPAN = bobj.html.SPAN( {
|
|
style : {"white-space" : 'nowrap'}
|
|
}, value);
|
|
}
|
|
else {
|
|
SPAN = bobj.html.SPAN(null, value);
|
|
}
|
|
|
|
return bobj.html.TD( {
|
|
style : style,
|
|
role : 'presentation'
|
|
}, SPAN);
|
|
|
|
},
|
|
|
|
isValueValidRange: function() {
|
|
return this.value != null && this.value.lowerBound != null && this.value.upperBound != null;
|
|
},
|
|
|
|
getHTML : function() {
|
|
var TR = "";
|
|
var h = bobj.html;
|
|
|
|
if(this.isValueValidRange()) {
|
|
TR = h.TR(null, this.getValueHTML(this.getValue().lowerBound.value, true), this
|
|
.getMiddleImageHTML(), this.getValueHTML(this.getValue().upperBound.value, false))
|
|
}
|
|
else {
|
|
TR = h.TR(null, this.getValueHTML(this.getValue(), false))
|
|
}
|
|
|
|
return h.TABLE( {
|
|
id : this.id,
|
|
'class' : 'iactRangeFieldTable',
|
|
role : 'group',
|
|
'title' : this.tooltip + " " + this._getRangeValueToolTip(),
|
|
style : {color : this.foreColor, "font-style" : this.isTextItalic ? 'italic' :''}
|
|
}, TR);
|
|
},
|
|
|
|
_getRangeValueToolTip : function () {
|
|
var str = "";
|
|
|
|
if(this.isValueValidRange()) {
|
|
var RangeBoundTypes = bobj.crv.params.RangeBoundTypes;
|
|
|
|
switch (this.getValue().lowerBound.type) {
|
|
case RangeBoundTypes.EXCLUSIVE:
|
|
str += "(" + this.getValue().lowerBound.value;
|
|
break;
|
|
case RangeBoundTypes.INCLUSIVE:
|
|
str += "[" + this.getValue().lowerBound.value;
|
|
break;
|
|
case RangeBoundTypes.UNBOUNDED:
|
|
str += "( " ;
|
|
break;
|
|
}
|
|
|
|
str += "..";
|
|
|
|
switch (this.getValue().upperBound.type) {
|
|
case RangeBoundTypes.EXCLUSIVE:
|
|
str += this.getValue().upperBound.value + ")" ;
|
|
break;
|
|
case RangeBoundTypes.INCLUSIVE:
|
|
str += this.getValue().upperBound.value + "]";
|
|
break;
|
|
case RangeBoundTypes.UNBOUNDED:
|
|
str += " )" ;
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
str += this.getValue();
|
|
}
|
|
|
|
return str;
|
|
},
|
|
|
|
/**
|
|
*
|
|
* @return HTML for Range type (INCLUSIVE / EXCLUSIVE / UNBOUND)
|
|
*/
|
|
getMiddleImageHTML : function() {
|
|
var lowerImageSrc = "";
|
|
var upperImageSrc = "";
|
|
var lineSrc = "images/line.gif";
|
|
|
|
switch (this.getValue().lowerBound.type) {
|
|
case bobj.crv.params.RangeBoundTypes.EXCLUSIVE:
|
|
lowerImageSrc = "images/hollowCircle.gif";
|
|
break;
|
|
case bobj.crv.params.RangeBoundTypes.INCLUSIVE:
|
|
lowerImageSrc = "images/filledCircle.gif";
|
|
break;
|
|
case bobj.crv.params.RangeBoundTypes.UNBOUNDED:
|
|
if(bobj.crv.config.isRTL){
|
|
lowerImageSrc = "images/rightTriangle.gif";
|
|
} else {
|
|
lowerImageSrc = "images/leftTriangle.gif";
|
|
}
|
|
break;
|
|
}
|
|
|
|
switch (this.getValue().upperBound.type) {
|
|
case bobj.crv.params.RangeBoundTypes.EXCLUSIVE:
|
|
upperImageSrc = "images/hollowCircle.gif";
|
|
break;
|
|
case bobj.crv.params.RangeBoundTypes.INCLUSIVE:
|
|
upperImageSrc = "images/filledCircle.gif";
|
|
break;
|
|
case bobj.crv.params.RangeBoundTypes.UNBOUNDED:
|
|
if(bobj.crv.config.isRTL){
|
|
upperImageSrc = "images/leftTriangle.gif";
|
|
} else {
|
|
upperImageSrc = "images/rightTriangle.gif";
|
|
}
|
|
break;
|
|
}
|
|
|
|
var TDStyle = {
|
|
'vertical-align' : 'middle'
|
|
};
|
|
|
|
var IMG = bobj.html.IMG;
|
|
return bobj.html.TD( {
|
|
style : TDStyle
|
|
}, IMG( {
|
|
src : bobj.crvUri(lowerImageSrc)
|
|
}), IMG( {
|
|
src : bobj.crvUri(lineSrc)
|
|
}), IMG( {
|
|
src : bobj.crvUri(upperImageSrc)
|
|
}));
|
|
},
|
|
|
|
/**
|
|
* Initializes the widget
|
|
*/
|
|
init : function() {
|
|
this.layer = getLayer(this.id);
|
|
},
|
|
|
|
/**
|
|
*
|
|
* @return the evaluated width of lower bound TD
|
|
*/
|
|
getLowerBoundValueWidth : function() {
|
|
if(!this.isValueValidRange())
|
|
return 0;
|
|
|
|
var value = this.getValue().lowerBound.value;
|
|
|
|
var fontFamily = MochiKit.Style.computedStyle(this.layer, 'fontFamily');
|
|
var fontSize = MochiKit.Style.computedStyle(this.layer, 'fontSize');
|
|
|
|
if (!fontFamily)
|
|
fontFamily = "arial , sans-serif";
|
|
|
|
if (!fontSize)
|
|
fontSize = "12px";
|
|
|
|
return bobj.getStringWidth(value, fontFamily, fontSize);
|
|
},
|
|
|
|
getLowerBoundTD : function() {
|
|
if (this.layer)
|
|
return this.layer.getElementsByTagName("TD")[0];
|
|
|
|
return null;
|
|
},
|
|
|
|
setLowerBoundValueWidth : function(w) {
|
|
if (this.getLowerBoundTD())
|
|
this.getLowerBoundTD().style.width = w+"px";
|
|
},
|
|
|
|
reset : function(value) {
|
|
this.value = value;
|
|
this.cleanValue = value;
|
|
this.updateUI();
|
|
},
|
|
|
|
updateUI : function() {
|
|
var parent = this.layer.parentNode;
|
|
MochiKit.DOM.removeElement(this.layer);
|
|
append2(parent, this.getHTML());
|
|
this.init();
|
|
},
|
|
|
|
setValue : function(rangeValue) {
|
|
this.value = rangeValue;
|
|
this.updateUI();
|
|
},
|
|
|
|
setCleanValue : function(rangeValue) {
|
|
this.cleanValue = rangeValue;
|
|
},
|
|
|
|
getValue : function() {
|
|
return this.value;
|
|
}
|
|
}; |