dijit
Version:
Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u
124 lines (104 loc) • 4.03 kB
JavaScript
define([
"dojo/_base/declare", // declare
"dojo/has",
"dojo/number", // number.format
"dojo/query", // query
"dojo/_base/lang", // lang
"./HorizontalRule"
], function(declare, has, number, query, lang, HorizontalRule){
// module:
// dijit/form/HorizontalRuleLabels
var HorizontalRuleLabels = declare("dijit.form.HorizontalRuleLabels", HorizontalRule, {
// summary:
// Labels for `dijit/form/HorizontalSlider`
templateString: '<div class="dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH"></div>',
// labelStyle: String
// CSS style to apply to individual text labels
labelStyle: "",
// labels: String[]?
// Array of text labels to render - evenly spaced from left-to-right or bottom-to-top.
// Alternately, minimum and maximum can be specified, to get numeric labels.
labels: [],
// numericMargin: Integer
// Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
numericMargin: 0,
// numericMinimum: Integer
// Leftmost label value for generated numeric labels when labels[] are not specified
minimum: 0,
// numericMaximum: Integer
// Rightmost label value for generated numeric labels when labels[] are not specified
maximum: 1,
// constraints: Object
// pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
constraints: {pattern: "#%"},
_positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerH" style="left:',
_labelPrefix: '"><div class="dijitRuleLabel dijitRuleLabelH">',
_suffix: '</div></div>',
_calcPosition: function(pos){
// summary:
// Returns the value to be used in HTML for the label as part of the left: attribute
// tags:
// protected extension
return pos;
},
_genHTML: function(pos, ndx){
var label = this.labels[ndx];
return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle +
this._genDirectionHTML(label) +
this._labelPrefix + label + this._suffix;
},
_genDirectionHTML: function(label){
// extension point for bidi code
return "";
},
getLabels: function(){
// summary:
// Overridable function to return array of labels to use for this slider.
// Can specify a getLabels() method instead of a labels[] array, or min/max attributes.
// tags:
// protected extension
// if the labels array was not specified directly, then see if <li> children were
var labels = this.labels;
if(!labels.length && this.srcNodeRef){
// for markup creation, labels are specified as child elements
labels = query("> li", this.srcNodeRef).map(function(node){
return String(node.innerHTML);
});
}
// if the labels were not specified directly and not as <li> children, then calculate numeric labels
if(!labels.length && this.count > 1){
labels = []; // avoid modifying labels[] array in the prototype
var start = this.minimum;
var inc = (this.maximum - start) / (this.count - 1);
for(var i = 0; i < this.count; i++){
labels.push((i < this.numericMargin || i >= (this.count - this.numericMargin)) ? '' : number.format(start, this.constraints));
start += inc;
}
}
return labels;
},
postMixInProperties: function(){
this.inherited(arguments);
this.labels = this.getLabels();
this.count = this.labels.length;
}
});
if(has("dojo-bidi")){
HorizontalRuleLabels.extend({
_setTextDirAttr: function(textDir){
if(this.textDir != textDir){
this._set("textDir", textDir);
query(".dijitRuleLabelContainer", this.domNode).forEach(
lang.hitch(this, function(labelNode){
labelNode.style.direction = this.getTextDir(labelNode.innerText || labelNode.textContent || "");
})
);
}
},
_genDirectionHTML: function(label){
return (this.textDir ? ("direction:" + this.getTextDir(label) + ";") : "")
}
});
}
return HorizontalRuleLabels;
});