function RangeFacet(div, config, options) { this._div = div; this._config = config; this._options = options; this._from = ("from" in this._config) ? this._config.from : null; this._to = ("to" in this._config) ? this._config.to : null; this._selectNumeric = ("selectNumeric" in this._config) ? this._config.selectNumeric : true; this._selectNonNumeric = ("selectNonNumeric" in this._config) ? this._config.selectNonNumeric : true; this._selectBlank = ("selectBlank" in this._config) ? this._config.selectBlank : true; this._selectError = ("selectError" in this._config) ? this._config.selectError : true; this._baseNumericCount = 0; this._baseNonNumericCount = 0; this._baseBlankCount = 0; this._baseErrorCount = 0; this._numericCount = 0; this._nonNumericCount = 0; this._blankCount = 0; this._errorCount = 0; this._error = false; this._initializedUI = false; } RangeFacet.prototype.reset = function() { this._from = this._config.min; this._to = this._config.max; this._sliderWidget.update( this._config.min, this._config.max, this._config.step, this._from, this._to ); this._selectNumeric = true; this._selectNonNumeric = true; this._selectBlank = true; this._selectError = true; this._setRangeIndicators(); }; RangeFacet.reconstruct = function(div, uiState) { return new RangeFacet(div, uiState.c, uiState.o); }; RangeFacet.prototype.dispose = function() { }; RangeFacet.prototype.getUIState = function() { var json = { c: this.getJSON(), o: this._options }; return json; }; RangeFacet.prototype.getJSON = function() { var o = { type: "range", name: this._config.name, expression: this._config.expression, columnName: this._config.columnName, selectNumeric: this._selectNumeric, selectNonNumeric: this._selectNonNumeric, selectBlank: this._selectBlank, selectError: this._selectError }; if (this._from !== null) { o.from = this._from; } if (this._to !== null) { o.to = this._to; } return o; }; RangeFacet.prototype.hasSelection = function() { if (!this._selectNumeric || !this._selectNonNumeric || !this._selectBlank || !this._selectError) { return true; } return (this._from !== null && (!this._initializedUI || this._from > this._config.min)) || (this._to !== null && (!this._initializedUI || this._to < this._config.max)); }; RangeFacet.prototype._initializeUI = function() { var self = this; this._div .empty() .show() .html( '
' + '
' + '' + '' + '
 ' + 'reset' + 'change' + '' + '
' + '
' + '
' + '
' + '
Loading...
' + '
' + '
' + '
' + '
' + '
' + '
' ); this._elmts = DOM.bind(this._div); this._elmts.facetTitle.text(this._config.name); this._elmts.changeButton.attr("title","Current Expression: " + this._config.expression).click(function() { self._elmts.expressionDiv.slideToggle(100); }); this._elmts.expressionDiv.text(this._config.expression).click(function() { self._editExpression(); }).hide(); this._elmts.resetButton.click(function() { self.reset(); self._updateRest(); }); this._elmts.removeButton.click(function() { self._remove(); }); this._histogram = new HistogramWidget(this._elmts.histogramDiv, { binColors: [ "#ccccff", "#6666ff" ] }); this._sliderWidget = new SliderWidget(this._elmts.sliderWidgetDiv); this._elmts.sliderWidgetDiv.bind("slide", function(evt, data) { self._from = data.from; self._to = data.to; self._setRangeIndicators(); }).bind("stop", function(evt, data) { self._from = data.from; self._to = data.to; self._selectNumeric = true; self._updateRest(); }); }; RangeFacet.prototype._renderOtherChoices = function() { var self = this; var container = this._elmts.otherChoicesDiv.empty(); if (this._baseNonNumericCount === 0 && this._baseBlankCount === 0 && this._baseErrorCount === 0) { return; } var facet_id = this._div.attr("id"); var choices = $('
').addClass("facet-range-choices"); // ----------------- numeric ----------------- var numericCheck = $('').attr("id",facet_id + "-numeric").appendTo(choices).change(function() { self._selectNumeric = !self._selectNumeric; self._updateRest(); }); if (this._selectNumeric) numericCheck.attr("checked","checked"); var numericLabel = $('