Commit 973208c3 authored by Joshua Gould's avatar Joshua Gould

scroll lens

parent baa26b67
/*!
* Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)
*
* Copyright 2013-2016 bootstrap-select
* Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
/*!
* Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)
*
* Copyright 2013-2016 bootstrap-select
* Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
*/select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\9}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px;z-index:1}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group.bs-container{position:absolute}.bootstrap-select.btn-group.bs-container .dropdown-menu{z-index:1060}.bootstrap-select.btn-group .dropdown-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li.active small{color:#fff}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -72,7 +72,6 @@
.morpheus-tip-inline {
font-size: 12px;
max-width: 400px;
z-index: 10000;
position: absolute;
background-color: rgba(255, 255, 255, 0.9);
......
This diff is collapsed.
morpheus.DatasetUtil = function() {
};
morpheus.DatasetUtil.min = function(dataset) {
morpheus.DatasetUtil.min = function(dataset, seriesIndex) {
seriesIndex = seriesIndex || 0;
var min = Number.MAX_VALUE;
for (var i = 0, rows = dataset.getRowCount(); i < rows; i++) {
for (var j = 0, columns = dataset.getColumnCount(); j < columns; j++) {
var d = dataset.getValue(i, j);
var d = dataset.getValue(i, j, seriesIndex);
if (isNaN(d)) {
continue;
}
......@@ -20,11 +21,12 @@ morpheus.DatasetUtil.transposedView = function(dataset) {
return dataset instanceof morpheus.TransposedDatasetView ? dataset
.getDataset() : new morpheus.TransposedDatasetView(dataset);
};
morpheus.DatasetUtil.max = function(dataset) {
morpheus.DatasetUtil.max = function(dataset, seriesIndex) {
seriesIndex = seriesIndex || 0;
var max = -Number.MAX_VALUE;
for (var i = 0, rows = dataset.getRowCount(); i < rows; i++) {
for (var j = 0, columns = dataset.getColumnCount(); j < columns; j++) {
var d = dataset.getValue(i, j);
var d = dataset.getValue(i, j, seriesIndex);
if (isNaN(d)) {
continue;
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
/**
* @param model{morpheus.SelectionModel}
*/
morpheus.ScentedSearch = function(model, positions, isVertical, scrollbar,
controller) {
morpheus.ScentedSearch = function (model, positions, isVertical, scrollbar,
controller) {
morpheus.AbstractCanvas.call(this, false);
this.model = model;
this.positions = positions;
......@@ -12,41 +12,42 @@ morpheus.ScentedSearch = function(model, positions, isVertical, scrollbar,
this.searchIndices = [];
scrollbar.decorator = this;
var _this = this;
var mouseMove = function(e) {
var mouseMove = function (e) {
var index = _this.getIndex(e);
_this.mouseMovedIndex = index;
document.body.style.cursor = index < 0 ? 'default' : 'pointer';
scrollbar.canvas.style.cursor = index < 0 ? 'default' : 'pointer';
var tipOptions = {
event : e
event: e,
dataLens: true
};
if (isVertical) {
controller.setToolTip(index >= 0 ? _this.searchIndices[index] : -1,
-1, tipOptions);
-1, tipOptions);
} else {
controller.setToolTip(-1, index >= 0 ? _this.searchIndices[index]
: -1, tipOptions);
: -1, tipOptions);
}
};
var mouseExit = function(e) {
var mouseExit = function (e) {
// need to set body cursor b/c mouse can be partially on the scroll bar,
// but the canvas cursor has no effect
document.body.style.cursor = 'default';
scrollbar.canvas.style.cursor = 'default';
};
$(scrollbar.canvas).on('mousemove', mouseMove).on('mouseexit', mouseExit);
$(scrollbar.canvas).on('mousemove', mouseMove).on('mouseout', mouseExit);
};
morpheus.ScentedSearch.LINE_HEIGHT = 3.5;
morpheus.ScentedSearch.prototype = {
mouseMovedIndex : -1,
getIndex : function(event) {
mouseMovedIndex: -1,
getIndex: function (event) {
var pix = morpheus.CanvasUtil.getMousePos(event.target, event);
var val = pix[this.isVertical ? 'y' : 'x'];
return this.getIndexForPix(val);
},
getIndexForPix : function(pix) {
getIndexForPix: function (pix) {
var indices = this.searchIndices;
if (indices == null) {
return -1;
......@@ -54,8 +55,8 @@ morpheus.ScentedSearch.prototype = {
var tolerance = morpheus.ScentedSearch.LINE_HEIGHT;
if (this.mouseMovedIndex > 0) {
var midVal = this.positions
.getPosition(indices[this.mouseMovedIndex])
* scale;
.getPosition(indices[this.mouseMovedIndex])
* scale;
if (Math.abs(midVal - pix) <= tolerance) {
return this.mouseMovedIndex;
}
......@@ -85,71 +86,71 @@ morpheus.ScentedSearch.prototype = {
return -1; // -(low + 1); // key not found.
},
tap : function(position) {
tap: function (position) {
var val = position[this.isVertical ? 'y' : 'x'];
var index = this.getIndexForPix(val);
this.scrollbar.canvas.style.cursor = index < 0 ? 'default' : 'pointer';
if (index >= 0) {
if (this.isVertical) {
this.controller.scrollTop(this.positions
.getPosition(this.searchIndices[index]));
.getPosition(this.searchIndices[index]));
} else {
this.controller.scrollLeft(this.positions
.getPosition(this.searchIndices[index]));
.getPosition(this.searchIndices[index]));
}
return true;
}
return false;
},
update : function() {
update: function () {
this.searchIndices = this.model.getViewIndices().values().sort(
function(a, b) {
return a < b ? -1 : 1;
});
function (a, b) {
return a < b ? -1 : 1;
});
},
draw : function(clip, context) {
draw: function (clip, context) {
var width = this.scrollbar.getUnscaledWidth();
var height = this.scrollbar.getUnscaledHeight();
var availableLength = ((this.isVertical ? height : width))
- morpheus.ScentedSearch.LINE_HEIGHT;
- morpheus.ScentedSearch.LINE_HEIGHT;
this.scale = availableLength
/ (this.positions.getPosition(this.positions.getLength() - 1) + this.positions
.getItemSize(this.positions.getLength() - 1));
/ (this.positions.getPosition(this.positions.getLength() - 1) + this.positions
.getItemSize(this.positions.getLength() - 1));
context.strokeStyle = 'rgb(106,137,177)';
context.fillStyle = 'rgb(182,213,253)';
context.lineWidth = 1;
this.drawIndices(context, this.searchIndices);
this.drawHoverMatchingValues(context);
},
drawHoverMatchingValues : function(context) {
drawHoverMatchingValues: function (context) {
var heatmap = this.controller;
context.fillStyle = 'black';
if (heatmap.mousePositionOptions
&& heatmap.mousePositionOptions.name != null) {
&& heatmap.mousePositionOptions.name != null) {
var isColumns = !this.isVertical;
var track = heatmap.getTrack(heatmap.mousePositionOptions.name,
isColumns);
isColumns);
if (track == null) {
return;
}
if (track.settings.highlightMatchingValues) {
var hoverIndex = isColumns ? heatmap.getProject()
.getHoverColumnIndex() : heatmap.getProject()
.getHoverRowIndex();
.getHoverColumnIndex() : heatmap.getProject()
.getHoverRowIndex();
if (hoverIndex === -1) {
return;
}
var vector = track.getVector();
var value = vector.getValue(hoverIndex);
var valueToModelIndices = track.getFullVector().getProperties()
.get(morpheus.VectorKeys.VALUE_TO_INDICES);
.get(morpheus.VectorKeys.VALUE_TO_INDICES);
if (!valueToModelIndices) {
var fullVector = track.getFullVector();
valueToModelIndices = morpheus.VectorUtil
.createValueToIndicesMap(fullVector);
.createValueToIndicesMap(fullVector);
fullVector.getProperties().set(
morpheus.VectorKeys.VALUE_TO_INDICES,
valueToModelIndices);
morpheus.VectorKeys.VALUE_TO_INDICES,
valueToModelIndices);
}
var modelIndices = valueToModelIndices.get(value);
......@@ -159,26 +160,26 @@ morpheus.ScentedSearch.prototype = {
}
var scale = this.scale;
var lineLength = !this.isVertical ? this.scrollbar
.getUnscaledHeight() : this.scrollbar
.getUnscaledWidth();
.getUnscaledHeight() : this.scrollbar
.getUnscaledWidth();
var isVertical = this.isVertical;
var positions = this.positions;
var project = heatmap.getProject();
for (var i = 0, length = modelIndices.length; i < length; i++) {
var modelIndex = modelIndices[i];
var index = isVertical ? project
.convertModelRowIndexToView(modelIndex) : project
.convertModelColumnIndexToView(modelIndex);
.convertModelRowIndexToView(modelIndex) : project
.convertModelColumnIndexToView(modelIndex);
if (index === -1) {
continue;
}
var pix = positions.getPosition(index) * scale;
if (isVertical) {
context.fillRect(0, pix, lineLength,
morpheus.ScentedSearch.LINE_HEIGHT);
morpheus.ScentedSearch.LINE_HEIGHT);
} else {
context.fillRect(pix, 0,
morpheus.ScentedSearch.LINE_HEIGHT, lineLength);
morpheus.ScentedSearch.LINE_HEIGHT, lineLength);
}
}
......@@ -186,10 +187,10 @@ morpheus.ScentedSearch.prototype = {
}
},
drawIndices : function(context, highlightedIndices) {
drawIndices: function (context, highlightedIndices) {
var scale = this.scale;
var lineLength = !this.isVertical ? this.scrollbar.getUnscaledHeight()
: this.scrollbar.getUnscaledWidth();
: this.scrollbar.getUnscaledWidth();
var isVertical = this.isVertical;
var positions = this.positions;
......@@ -199,14 +200,14 @@ morpheus.ScentedSearch.prototype = {
if (isVertical) {
context.beginPath();
context.rect(0, pix, lineLength,
morpheus.ScentedSearch.LINE_HEIGHT);
morpheus.ScentedSearch.LINE_HEIGHT);
context.fill();
context.stroke();
} else {
context.beginPath();
context.rect(pix, 0, morpheus.ScentedSearch.LINE_HEIGHT,
lineLength);
lineLength);
context.fill();
context.stroke();
}
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment