Overview AE Timelines AE Explorer Hep Explorer Delta-Delta Histogram Outlier Explorer Results Over Time

safety-outlier-explorer - Quality Control Details

This page provides a detailed report of the quality control documentation for safety-outlier-explorer. The source code for this page is available on github.

Technical Specs

Technical documentation including, functional specifications, regressions tests and risk assessments. see original

Functional Specifications

Filter by Measure

This drop-down menu is used to filter the lab variable that is displayed in the chart. The default measure is set to the first variable in the data set, but the default value can be adjusted to any measure upon the project team's request. Users can select any pre-defined measure in this filter. Selecting a measure will display the data points associated with that measure and will display the visits that the measure is collected at underneath the chart.

Filter by pre-selected characteristics

The chart can be configured to have any number of data filters. Each specified filter has a drop-down menu that is used to filter the visit data that is displayed in the chart.

Total Participants Shown

Displayed under the header, this statement provides the total number of participants in the data set in integers as well as the percentage of participants shown to one decimal place. In the default view, all participant data is included in the chart, or 100%, unless the project team requests otherwise. When filters are used, the data shown in the histogram is manipulated and the number of participant records shown at the top of the page may increase or decrease, depending on the variable selected.

Change the X-axis

The chart contains a toggle that controls the display of the x-axis. Users can view the x-axis data by study day, visit, or visit number. The x-axis displays the data point at which the measure data is collected and manipulating it changes the scale at which the measure data is plotted. Study day, visit, or visit number can be chosen for a given measure, but the chart default is to show the x-axis by study day.

Set Y-axis Limits

Users are able to adjust the lower limit of the y-axis by manipulating the input within the Lower Limit box. Users are able to adjust the upper limit of the y-axis by manipulating the input within the Upper Limit box. Each limit box has up and down arrows to adjust the value of the box by 1. Users can select an arrow to change the input or delete the current value in the box and type in a new value. When typing in a value, users must click outside of the box to apply the changes. When a user manipulates a y-axis limit, the y-axis on the chart below the controls will reflect the change.

Reset Y-axis limits

Users can change the upper and lower y-axis limits back to the default values for a measure by selecting the "Reset Limits" button. Pressing the button will erase the current values in the upper and lower limit boxes and replace them with defaults. The chart below will also reflect the changes and will show the default axes.

Normal Range Controls

Users can opt to change the method for the normal ranges to the following options: None, LLN-ULN, Standard Deviation, and Quantiles. The default for the normal range controls is set to "LLN-ULN", which is the upper and lower normal range specified in the data. Users may select "None", which will remove the green shading around the normal ranges and will remove the inlier count to the left of the charts. Users may also select "Standard Deviation", which will prompt the user to enter the number of standard deviations they would like to set as the normal range. Altering the default value will change the upper and lower normal range bands in the chart and will change the inlier count to the left of the chart. Users may also select "Quantiles", which prompts the user to enter an upper and lower quantile to set as the normal ranges. Altering the upper quantile will change the upper normal range band in the chart and altering the lower quantile will change the lower normal range band in the chart. Changing the normal ranges may change the number of inliers and the inlier count to the left of the chart will update based on your selections.

View Visits Without Data

Users can select the checkbox to view visits that do not contain data. Checking the box will show a timepoint for the visit. Unchecking the checkbox will hide the timepoint for visits without data; visits without data are hidden on default.

View Unscheduled Visits

Users can select the checkbox to view data that is not associated with a scheduled visit. Checking the box will show a timepoint for the unscheduled visit and its associated data. Unselecting the checkbox will hide the unscheduled visit timepoint and its data; unscheduled visits are hidden on default.

View Small Multiples

Clicking a data point will open a listing of small multiples below the chart that contains a detailed listing of all of the participant's records. This linked table contains small charts for each measure captured in the data set as well as the participant's subject ID, age, sex, and race. When the listing appears, the data points selected will appear in a continuous gray line inside of the chart. When a user clicks outside of the selected data point, the gray line disappears along with the detailed listing.

Clicking a data point will perform 2 actions:

Regression Tests

Warnings and Notes

Highlighting

Data Guidelines

Data Specifications for the charts. see original

The Safety Outlier Explorer is initialized with JSON data files that match the format created by d3.csv(). The chart expects an ADaM-esque data structure by default but can be customized to work with any dataset that contains one row per participant per time point per measure and includes the required columns specified below.

Default Chart

The following columns are expected in a data file used to create an instance of the safety outlier explorer. A sample chart using this configuration is found here.

Data Specification

Settings Variable Description Default Required?
id_col Unique Subject Identifier USUBJID Y
timecols[0].valuecol Visit Name VISIT Y
timecols[0].ordercol Visit Name (N) VISITNUM
timecols[1].valuecol Study Day of Visit DY
measure_col Name of Measure or Test TEST Y
value_col Result or Finding STRESN Y
unit_col Units STRESU
normalcollow Normal Range Lower Limit STRNLO
normalcolhigh Normal Range Upper Limit STRNHI
details[0].value_col Age AGE
details[1].value_col Sex SEX
details[2].value_col Race RACE

Settings

No customization is needed to initialize a chart when the data object contains all default variables above. Just pass an empty object ({}) for settings and initialize the chart like so: safetyOutlierExplorer('body', {}).init(data).

Customized Chart with Queries

The following data specs and chart settings can be used to create a chart with several custom filters, including Sex, Race and Query Status. A sample chart using this configuration is found here.

Data Specification

Settings Variable Description Default Required?
id_col Unique Subject Identifier USUBJID Y
timecols[0].valuecol Visit Name VISIT Y
timecols[0].ordercol Visit Name (N) VISITNUM
timecols[1].valuecol Study Day of Visit DY
measure_col Name of Measure or Test TEST Y
value_col Result or Finding STRESN Y
unit_col Units STRESU
normalcollow Normal Range Lower Limit STRNLO
normalcolhigh Normal Range Upper Limit STRNHI
details[0].value_col Age AGE
details[1].value_col Sex SEX
details[2].value_col Race RACE
filter Site ID SITEID Y
filter Treatment Arm ARM Y
filter Sex SEX Y
filter Race RACE Y
filter Query Flag ("Y" for yes) QUERYFL Y
custom_marks[0].tooltip Query Details QUERYDETAILS Y

Settings Object

{
     time_cols: [
        {
            value_col: 'VISIT',
            type: 'ordinal',
            label: 'Visit',
            rotate_tick_labels: true,
            vertical_space: 100,
            order_col: 'VISITNUM'
        },
        {
            value_col: 'DY',
            type: 'linear',
            label: 'Study Day',
            rotate_tick_labels: false,
            vertical_space: 0
        }
    ],
    filters: [
        {value_col: 'ARM', label: 'Arm'},
        {value_col: 'SITEID', label: 'Site ID'},
        {value_col: 'SEX', label: 'Sex'},
        {value_col: 'RACE', label: 'Race'},
        {value_col: 'QUERYFL', label: 'Open Query?'}
    ],
    details: [
        {value_col: 'ARM', label: 'Arm'},
        {value_col: 'AGE', label: 'Age'},
        {value_col: 'SEX', label: 'Sex'},
        {value_col: 'RACE', label: 'Race'}
    ],
    custom_marks: [
        {
            per: ['USUBJID', 'VISIT', 'STRESN'],
            type: 'circle',
            attributes: {
                'fill-opacity': 1,
                'stroke': 'red',
                'fill': 'red'
            },
            values: {
                QUERYFL: ['Y']
            },
            tooltip: 'Query Details: [QUERYDETAILS]'
        }
    ],
    multiples_sizing: {
        width: 250,
        height: 75
    }
}

API

Technical specifications for API. see original

safetyOutlierExplorer(element, settings)

a factory to create a custom Webcharts chart object

returns: chart

Param Type Description
element string CSS selector identifying the element in which to create the chart
settings object settings object specifying options for how the chart is to appear and behave. Options defined here overwrite default values; see Configuration

Events

participantsSelected

The custom participantsSelected event is dispatched to the overall chart wrapper (chart.wrap) whenever the details for a given participant are viewed (or cleared) by clicking on a line or point in the chart. The event has a custom data property holding an array with the selected ID when a new participant is selected (["123-456-7"]) or an empty array when participant details are cleared.

Chart Configuration

Technical specifications for chart configuration. see original

The most straightforward way to customize the Safety Outlier Explorer is by using a configuration object whose properties describe the behavior and appearance of the chart. Since the Safety Outlier Explorer is a Webcharts chart object, many default Webcharts settings are set in the defaultSettings.js file as described below. Refer to the Webcharts documentation for more details on these settings.

In addition to the standard Webcharts settings several custom settings not available in the base Webcharts library have been added to the Safety Outlier Explorer to facilitate data mapping and other custom functionality. These custom settings are described in detail below. All defaults can be overwritten by users.

Renderer-specific settings

The sections below describe each safety-outlier-explorer setting as of version 2.3.0.

settings.id_col

string

unique identifier variable name

default: "USUBJID"

settings.time_cols

array

visit metadata

default:

[
  {
    "type": "ordinal",
    "value_col": "VISIT",
    "label": "Visit",
    "order_col": "VISITNUM",
    "order": null,
    "rotate_tick_labels": true,
    "vertical_space": 100
  },
  {
    "type": "linear",
    "value_col": "DY",
    "label": "Study Day",
    "order_col": "DY",
    "order": null,
    "rotate_tick_labels": false,
    "vertical_space": 0
  }
]

settings.time_cols[].type

string

Visit variable data type

default: "ordinal"

settings.timecols[].valuecol

string

Visit variable name

default: "VISIT"

settings.time_cols[].label

string

Visit variable label

default: "Visit"

settings.timecols[].ordercol

string

Visit ordering variable name

default: "VISITNUM"

settings.time_cols[].order

array

Visit order

default: none

settings.timecols[].rotatetick_labels

boolean

Rotate tick labels 45 degrees?

default: true

settings.timecols[].verticalspace

number

Rotated tick label spacing

default: 100

settings.measure_col

string

measure variable name

default: "TEST"

settings.unit_col

string

measure unit variable name

default: "STRESU"

settings.value_col

string

result variable name

default: "STRESN"

settings.normalcollow

string

LLN variable name

default: "STNRLO"

settings.normalcolhigh

string

ULN variable name

default: "STNRHI"

settings.start_value

string

value of measure to display initially

default: none

settings.filters

array

an array of filter variables and associated metadata

default: none

settings.filters[].value_col

string

Variable name

default: none

settings.filters[].label

string

Variable label

default: none

settings.details

array

an array of ID-level variables and associated metadata

default:

[
  {
    "value_col": "AGE",
    "label": "Age"
  },
  {
    "value_col": "SEX",
    "label": "Sex"
  },
  {
    "value_col": "RACE",
    "label": "Race"
  }
]

settings.details[].value_col

string

Variable name

default: "AGE"

settings.details[].label

string

Variable label

default: "Age"

settings.tooltip_cols

object

added in v2.4. Takes an array of col/label objects and adds those values to the end of the standard point tooltips. The following would add Date to the tooltip: {tooltip_cols: [{label:"Date",value_col:"DT"}]};

default: null

settings.multiples_sizing

object

width and height of small multiples

settings.multiples_sizing.width

number

Width

default: 300

settings.multiples_sizing.height

number

Height

default: 100

settings.normalrangemethod

string

method for identifying the normal range

default: "LLN-ULN"

settings.normalrangesd

number

the number of standard deviations from the mean with which to define the normal range

default: 1.96

settings.normalrangequantile_low

number

this quantile defines the lower bound of the normal range

default: 0.05

settings.normalrangequantile_high

number

this quantile defines the upper bound of the normal range

default: 0.95

settings.visitswithoutdata

boolean

controls display of visits without data for the current measure

default: false

settings.unscheduled_visits

boolean

controls display of unscheduled visits

default: false

settings.unscheduledvisitpattern

string

a regular expression that identifies unscheduled visits

default: "/unscheduled|early termination/i"

settings.unscheduledvisitsvalues

array

an array of strings that identify unscheduled visits; overrides unscheduledvisitpattern

default: none

settings.line_attributes

object

an object that defines the line color, thickness, and opacity

settings.line_attributes.stroke

string

Line Color

default: "black"

settings.line_attributes.stroke-width

number

Line Thickness

default: 0.5

settings.line_attributes.stroke-opacity

number

Line Opacity

default: 0.75

settings.point_attributes

object

an object that defines the point color, radius, and opacity and its outline color, thickness, and opacity

settings.point_attributes.stroke

string

Point Outline Color

default: "rgb(102,194,165)"

settings.point_attributes.stroke-width

number

Point Outline Thickness

default: 0.5

settings.point_attributes.stroke-opacity

number

Point Outline Opacity

default: 1

settings.point_attributes.fill

string

Point Color

default: "rgb(102,194,165)"

settings.point_attributes.radius

number

Point Radius

default: 3

settings.point_attributes.fill-opacity

number

Point Opacity

default: 1

Webcharts settings

The object below contains each Webcharts setting as of version 2.3.0.

{
    x: {
        column: null, //set in syncSettings()
        type: null, //set in syncSettings()
        behavior: 'raw'
    },
    y: {
        column: null, //set in syncSettings()
        stat: 'mean',
        type: 'linear',
        label: 'Value',
        behavior: 'raw',
        format: '0.2f'
    },
    marks: [
        {
            per: null, //set in syncSettings()
            type: 'line',
            attributes: {
                'clip-path': 'url(#1)'
            },
            tooltip: null //set in syncSettings()
        },
        {
            per: null, //set in syncSettings()
            type: 'circle',
            attributes: {
                'clip-path': 'url(#1)'
            },
            tooltip: null //set in syncSettings()
        }
    ],
    resizable: true,
    margin: { right: 20 }, //create space for box plot
    aspect: 3
}

Testing Logs

Interactive log of QC for all code updates. Includes code reviews, feature testing and regression testing for all releases. see original
PullRequestRequesterDateRequestedBranchTargetTitleReviewIDReviewerReviewDateReviewStatusMergedByDateMergedReviewComments
0007jwildfire2016-04-15T16:34:39Zadjust-ticksmasterAdjust ticksNONEjwildfire2016-04-15T16:34:47Z
0014jwildfire2016-05-25T19:55:47ZreorgmasterReorgNONENathan Bryant2016-06-08T14:45:25Z
0015nbryant2016-06-14T17:17:40Zbuild-fixmasterfixing build to use babelNONEjwildfire2016-06-14T17:42:24Z
0026jwildfire2016-12-17T16:15:37Zv1.3.0masterSafety Outlier Explorer v1.3.0NONEjwildfire2017-02-23T22:03:03Z
0028samussiah2017-01-09T17:39:14Zcustom-filtersv1.3.0Implement custom filter functionality and update build-chf process.16036262jwildfire2017-01-10T23:16:45ZCHANGES_REQUESTEDSpencer Childress2017-01-20T14:28:14ZI'd suggest avoiding this hard code and working time_col[].type in to the settings so that the user can specify what type of axis to use. See [here](https://github.com/RhoInc/safety-outlier-explorer/pull/32#pullrequestreview-16034578) for details.
0028samussiah2017-01-09T17:39:14Zcustom-filtersv1.3.0Implement custom filter functionality and update build-chf process.16239688samussiah2017-01-11T21:27:17ZCOMMENTEDSpencer Childress2017-01-20T14:28:14ZFixed in #32
0028samussiah2017-01-09T17:39:14Zcustom-filtersv1.3.0Implement custom filter functionality and update build-chf process.17485238jwildfire2017-01-19T15:47:49ZCOMMENTEDSpencer Childress2017-01-20T14:28:14ZLooks good. Careful with the order of the PR merges. LMK if you start hitting problems.
0028samussiah2017-01-09T17:39:14Zcustom-filtersv1.3.0Implement custom filter functionality and update build-chf process.17485251jwildfire2017-01-19T15:47:52ZAPPROVEDSpencer Childress2017-01-20T14:28:14Z
0029samussiah2017-01-09T20:06:04Zparticipant-detailsv1.3.0Add participant details to small multiples container.15937822jwildfire2017-01-10T15:22:20ZAPPROVEDSpencer Childress2017-01-20T14:46:09Z👍 looks good to me. Ready to merge.
0030samussiah2017-01-10T15:39:40Zsmall-multiple-layoutv1.3.0Remove small multiple resizability to improve layout.16038309jwildfire2017-01-10T23:29:37ZAPPROVEDSpencer Childress2017-01-20T16:10:42ZLooking good. Default is a tad small for multiples; worth adding a setting for smallMultipleWidth?
0031samussiah2017-01-10T16:53:59Zconsistent-axesv1.3.0Implement consistent axes within a selected measure when other filter…16037412jwildfire2017-01-10T23:24:05ZCHANGES_REQUESTEDSpencer Childress2017-01-20T14:51:20ZLike this approach a lot. One more change related to generalizing the hard code logic for the x axis;;Another change like [this one](https://github.com/RhoInc/safety-outlier-explorer/pull/32#pullrequestreview-16034578) needed :( Should be able to pull the axis type off of `config.time_col[].type` and then decide whether to use `d3.extent()` or `d3.set().values()` based on that.
0031samussiah2017-01-10T16:53:59Zconsistent-axesv1.3.0Implement consistent axes within a selected measure when other filter…16239621samussiah2017-01-11T21:26:54ZCOMMENTEDSpencer Childress2017-01-20T14:51:20ZFixed in #32
0031samussiah2017-01-10T16:53:59Zconsistent-axesv1.3.0Implement consistent axes within a selected measure when other filter…17486009jwildfire2017-01-19T15:50:54ZCOMMENTEDSpencer Childress2017-01-20T14:51:20ZLooks good. Careful with merge order.
0031samussiah2017-01-10T16:53:59Zconsistent-axesv1.3.0Implement consistent axes within a selected measure when other filter…17486027jwildfire2017-01-19T15:50:58ZAPPROVEDSpencer Childress2017-01-20T14:51:20Z
0032samussiah2017-01-10T19:20:42Zrotate-x-tick-labelsv1.3.0Add x-axis tick label rotation functionality with setting...16034578jwildfire2017-01-10T23:05:55ZCHANGES_REQUESTEDSpencer Childress2017-01-20T15:02:03ZI'm a little worried about having a hard coded variable name here ("DY"). What happens when the user specifies a different set of `time_cols`? ;; ;; What if we had time_cols specified like this: `time_cols: [{value_col:"VISITN", axis_type:"ordinal"}, {value_col:"DY", axis_type:"linear}, ...]`, then this area becomes:;; ```;; settings.x.column = settings.time_cols[0].value_col;;; settings.x.type = settings.time_cols[0].axis_type;;; ```
0032samussiah2017-01-10T19:20:42Zrotate-x-tick-labelsv1.3.0Add x-axis tick label rotation functionality with setting...16037986samussiah2017-01-10T23:27:29ZCOMMENTEDSpencer Childress2017-01-20T15:02:03ZI like that approach a helluva lot more.
0032samussiah2017-01-10T19:20:42Zrotate-x-tick-labelsv1.3.0Add x-axis tick label rotation functionality with setting...17484963jwildfire2017-01-19T15:46:44ZAPPROVEDSpencer Childress2017-01-20T15:02:03ZLooks great. Well done.
0033samussiah2017-01-10T21:31:52Zsample-populationv1.3.0Add sample/population annotation.16032313jwildfire2017-01-10T22:50:48ZCOMMENTEDSpencer Childress2017-01-20T15:12:11ZWhy do we need super_raw_data instead of just the normal raw_data here? ;; ;; I see that convention quite a bit. Maybe we should just add it to webcharts?
0033samussiah2017-01-10T21:31:52Zsample-populationv1.3.0Add sample/population annotation.16032402jwildfire2017-01-10T22:51:25ZCOMMENTEDSpencer Childress2017-01-20T15:12:11ZLooks good - just one question about super_raw for you.
0033samussiah2017-01-10T21:31:52Zsample-populationv1.3.0Add sample/population annotation.16239290samussiah2017-01-11T21:25:15ZCOMMENTEDSpencer Childress2017-01-20T15:12:11ZUpdated to calculate population count onInit() instead of passing around an unadulterated data array.
0033samussiah2017-01-10T21:31:52Zsample-populationv1.3.0Add sample/population annotation.17486648jwildfire2017-01-19T15:53:14ZAPPROVEDSpencer Childress2017-01-20T15:12:11Z
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17487955jwildfire2017-01-19T15:57:57ZCOMMENTEDSpencer Childress2017-01-20T16:03:34ZThis probably won't work since the `unit_col` typically changes with `measure_col`
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17488232jwildfire2017-01-19T15:59:09ZCOMMENTEDSpencer Childress2017-01-20T16:03:34Zmight need something like `raw_data.filter(d=>give me the current measure)[0][chart.config.unit_col]`
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17488380jwildfire2017-01-19T15:59:40ZCOMMENTEDSpencer Childress2017-01-20T16:03:34Zwe should really clean up the data paradigm in webcharts a bit ... let's make time for that after these releases go out.
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17488727jwildfire2017-01-19T16:00:59ZCOMMENTEDSpencer Childress2017-01-20T16:03:34ZNeed to only look at the currently selected measure here. see comment above for possible implementation.
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17489594jwildfire2017-01-19T16:04:36ZCOMMENTEDSpencer Childress2017-01-20T16:03:34ZFor the moment, maybe we should create/maintain a `chart.measure_data` in this renderer. Seems like that would deal with most of this nonsense in a fairly elegant way ... just throw something like this in to `onInit()` and `onDraw()`:;; ;; ```;; var current_measure = {go get it from the control};; chart.measure_data = raw_data.filter(d=>d[chart.config.measure_col]==current_measure);; ```
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17489992jwildfire2017-01-19T16:06:03ZCOMMENTEDSpencer Childress2017-01-20T16:03:34ZYessiree. Like this a lot.
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17490118jwildfire2017-01-19T16:06:30ZDISMISSEDSpencer Childress2017-01-20T16:03:34ZSee comments about creating `chart.summary_data` to help with data flow in this renderer.
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17705172samussiah2017-01-20T15:56:15ZCOMMENTEDSpencer Childress2017-01-20T16:03:34Z@jwildfire `this.raw_data` in this case refers to an individual multiple's data, which is already filtered on a single measure. The reason I switched from `this.current_data` eludes me but it is simpler to pull a datum out of `this.raw_data`.
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17705533samussiah2017-01-20T15:57:51ZCOMMENTEDSpencer Childress2017-01-20T16:03:34ZSimilarly, `chart.raw_data` refers to the multiple's data, which is already filtered on a single measure.
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17709913samussiah2017-01-20T16:17:16ZCOMMENTEDSpencer Childress2017-01-20T16:03:34ZJust kidding, you're absolutely right. Will update to `this.filtered_data` in a new branch.
0034samussiah2017-01-17T20:19:05Zcustom-marksv1.3.0Custom marks17709930samussiah2017-01-20T16:17:20ZCOMMENTEDSpencer Childress2017-01-20T16:03:34ZJust kidding, you're absolutely right. Will update to `this.filtered_data` in a new branch.
0038samussiah2017-01-20T22:26:39Zsmall-multiple-fixesv1.3.0Add configuration of and variable y-domain to small multiples.18065992jwildfire2017-01-24T01:18:52ZCHANGES_REQUESTEDSpencer Childress2017-01-25T18:09:31ZLooks great in general. Just take a look at the highlight on point click. ;;Clicking a line gives the expected behaviour, but clicking a point (that is a ) doesn't seem to leave the participant highlighted in the main chart. Expect there just needs to be a copy/paste update in this area.
0038samussiah2017-01-20T22:26:39Zsmall-multiple-fixesv1.3.0Add configuration of and variable y-domain to small multiples.18464455samussiah2017-01-25T18:09:15ZCOMMENTEDSpencer Childress2017-01-25T18:09:31ZFixed.
0044samussiah2017-02-02T15:26:52Zy-axis-label-fixv1.3.0Fixing small multiples y-axis label issue.21894300jwildfire2017-02-14T23:45:04ZAPPROVEDjwildfire2017-02-14T23:45:17ZLooks good.
0045jwildfire2017-02-23T21:46:07Zmasterv1.3.0Update 2.0 from masterNONE
0047jwildfire2017-03-07T02:34:13Zv2.0.1masterno filters for 0 or 1 level vars. closes #4625649265samussiah2017-03-07T22:26:07ZAPPROVEDjwildfire2017-03-13T23:34:28ZNooice!
0052jwildfire2017-10-12T22:53:20Zv2.0.2-devmasterv2.0.2 - dev branch69263322samussiah2017-10-13T15:22:03ZAPPROVEDjwildfire2017-10-13T21:00:35Z
0055jwildfire2017-10-16T20:12:56Zv2.0.3-devmasterV2.0.3 dev69687382samussiah2017-10-16T20:23:09ZAPPROVEDSpencer Childress2017-10-16T20:30:43Z
0059jwildfire2017-11-17T03:03:17Zy-axis-controlsv2.1.0-devY axis controls77471728samussiah2017-11-17T15:41:40ZCOMMENTEDSpencer Childress2017-11-17T15:42:53ZSmart.
0059jwildfire2017-11-17T03:03:17Zy-axis-controlsv2.1.0-devY axis controls77471863samussiah2017-11-17T15:42:04ZAPPROVEDSpencer Childress2017-11-17T15:42:53ZEntirely functional, I likes!
0060jwildfire2017-11-17T03:04:07Zv2.1.0-devmasterv2.1.0 Development Branch81204300brittsikora2017-12-05T14:40:53ZAPPROVEDSpencer Childress2017-12-05T14:47:48ZPassed regression testing
0061jwildfire2017-11-17T03:49:06Zcheck-valuesv2.1.0-devDon't drop measures with sparse numeric data79912316samussiah2017-11-29T16:35:06ZCHANGES_REQUESTEDSpencer Childress2017-12-04T00:46:44Z`+"" === 0`;; ;; I'd prefer to kick out missing values.
0065samussiah2017-12-05T18:00:02Zy-axis-controlsmasterrefactor y-axis controls81281130jwildfire2017-12-05T18:06:45ZAPPROVEDjwildfire2017-12-05T18:08:53ZWorks like a charm. I like the updated labels
0073samussiah2018-01-26T20:03:40Zv2.2.0-devmasterSafety Outlier Explorer - v2.2.093729014brittsikora2018-02-02T19:24:45ZAPPROVEDsamussiah2018-02-02T21:34:30ZPassing regression testing in firefox and chrome
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92058104jwildfire2018-01-28T17:01:08ZAPPROVEDSpencer Childress2018-02-01T22:11:57ZVery nice - thanks for all the refactor work. ;;any specific reason to move it to preprocess? Or just trying to keep everything together? ;;Seems like this should be in #76 - Is `config.unscheduled_visits` defined yet? No biggie though. I assume this will be used in the later PRs. ;;Nice refactor here 🥇 ;;more code for #76 ? ;;I think we should make this warning visible at some point. Make it a footnote or something instead of showing it just in the console. Created #79 for later. ;;NBD, but curious if there is a reason for the funky "|" concatenation here instead of just using an object with 2 properties? ;; ;;another refactor 🏅 - you'll catch Michael Phelps in no time. ;;We should probably make an issue to fix this in webcharts. ;;Hate having to re-write the filter functionality here - I think it's slightly cleaner to filter `raw_data` based on the measure, and save the actual raw data in `super_raw` in the init callback. That way the regular webcharts filtering workflow still works. Maybe not worth fixing in v2.2 (since I'm sure this works fine), but something to keep in mind for later. ;; ;; If we ever do decide to tackle webcharts v2.0 I definitely think that we should add a `preprocessed_data` array (or something like that) to the chart object. That new array would sits between the loaded data and the data that is sent to `webcharts.draw()`.
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92243465samussiah2018-01-29T15:34:49ZCOMMENTEDSpencer Childress2018-02-01T22:11:57ZBecause it's a pain to modify `current_data`, particularly when there's more than one mark type. Simpler to modify the raw data, hence `initial_data`, `measure_data`, etc.
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92243647samussiah2018-01-29T15:35:19ZCOMMENTEDSpencer Childress2018-02-01T22:11:57ZRightio. Just copying stuff from the safety-results-over-time updates.
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92243766samussiah2018-01-29T15:35:41ZCOMMENTEDSpencer Childress2018-02-01T22:11:57ZHeh yeah.
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92244012samussiah2018-01-29T15:36:17ZCOMMENTEDSpencer Childress2018-02-01T22:11:57ZNot a bad idea, perhaps a red exclamation point with a tooltip.
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92244206samussiah2018-01-29T15:36:49ZCOMMENTEDSpencer Childress2018-02-01T22:11:57ZBecause I don't think `d3.set()` works with objects? Could be wrong about that.
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92244454samussiah2018-01-29T15:37:28ZCOMMENTEDSpencer Childress2018-02-01T22:11:57ZIt would be nice to identify controls without accessing their data.
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order92249110samussiah2018-01-29T15:48:46ZCOMMENTEDSpencer Childress2018-02-01T22:11:57ZYou're right, we don't even need this data array.;; ;; The issue here is that we want only the measure filter to change the domains. It'd be nice to specify in the filter settings the x- and y-behavior. What do you think?;; ;; This bit does seem over-engineered though. If we just set the behaviors to raw and set `raw_data` to the `measure_data` we can avoid defining the filtered data and domains.;; ;; It'd be nice if we could access the data between each of these steps:;; ;; 1. raw data;; 2. valid data, removing x- and y-values that don't make sense;; 3. filtered data, applying the filters;; 4. mark data, nesting the data
0074samussiah2018-01-26T20:04:24Zvisit-orderv2.2.0-devVisit order93308123brittsikora2018-02-01T14:55:03ZAPPROVEDSpencer Childress2018-02-01T22:11:57Z
0076samussiah2018-01-26T21:48:00Zunscheduled-visitsv2.2.0-devUnscheduled visits92089934jwildfire2018-01-29T04:38:22ZAPPROVEDSpencer Childress2018-02-01T22:12:17ZLooks good to me. ;; ;; (Just reviewed afc1f9ab433df480fe90031a75430652711632d2);;This lives elsewhere now??;;Moved in refactor? ;;`array.pop()` instead of `array[0]` is cute. Probably a bit easier to read. ;;How dare you use `chart.initial_data` instead of good ol' `chart.super_raw_data`? Kids these days. ;;Guessing this wasn't be used?
0076samussiah2018-01-26T21:48:00Zunscheduled-visitsv2.2.0-devUnscheduled visits92241069samussiah2018-01-29T15:28:38ZCOMMENTEDSpencer Childress2018-02-01T22:12:17ZChanged it to updateParticipantCount ¯\_(ツ)_/¯
0076samussiah2018-01-26T21:48:00Zunscheduled-visitsv2.2.0-devUnscheduled visits92241335samussiah2018-01-29T15:29:20ZCOMMENTEDSpencer Childress2018-02-01T22:12:17ZMoved to `onPreprocess/setYdomain`.
0076samussiah2018-01-26T21:48:00Zunscheduled-visitsv2.2.0-devUnscheduled visits92242252samussiah2018-01-29T15:31:36ZCOMMENTEDSpencer Childress2018-02-01T22:12:17ZYeah, but [`array.find()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) is the best option, but the one time I tried it out babel didn't add a polyfill so it failed in IE.
0076samussiah2018-01-26T21:48:00Zunscheduled-visitsv2.2.0-devUnscheduled visits92242534samussiah2018-01-29T15:32:21ZCOMMENTEDSpencer Childress2018-02-01T22:12:17ZI'm not a super freak.
0076samussiah2018-01-26T21:48:00Zunscheduled-visitsv2.2.0-devUnscheduled visits92242755samussiah2018-01-29T15:32:55ZCOMMENTEDSpencer Childress2018-02-01T22:12:17ZRight, only needed that in safety-results-over-time for the box plots.
0076samussiah2018-01-26T21:48:00Zunscheduled-visitsv2.2.0-devUnscheduled visits93332460brittsikora2018-02-01T15:56:10ZAPPROVEDSpencer Childress2018-02-01T22:12:17Z
0077samussiah2018-01-26T22:04:27Zvisits-without-datamasterVisits without data92091177jwildfire2018-01-29T04:47:26ZAPPROVEDSpencer Childress2018-02-01T22:12:30ZEasy peasy. ;; ;; (Just reviewed bcc71207c005f0f28a88cf11365abfd0112ad94d here)
0077samussiah2018-01-26T22:04:27Zvisits-without-datamasterVisits without data93306717brittsikora2018-02-01T14:51:24ZAPPROVEDSpencer Childress2018-02-01T22:12:30ZPass, nice job!
0078samussiah2018-01-26T22:27:45Zsettings-schemamasterSettings schema92091598jwildfire2018-01-29T04:53:42ZAPPROVEDSpencer Childress2018-02-01T22:12:45Zoopsies.
0078samussiah2018-01-26T22:27:45Zsettings-schemamasterSettings schema93336906brittsikora2018-02-01T16:06:45ZAPPROVEDSpencer Childress2018-02-01T22:12:45ZBroken in firefox, but works in chrome in the CAT. Will not be an issue outside of the CAT
0081samussiah2018-02-01T22:14:05Zrevert-78-settings-schemamasterRevert "Settings schema"NONESpencer Childress2018-02-01T22:14:14Z
0082samussiah2018-02-01T22:15:02Zrevert-77-visits-without-datamasterRevert "Visits without data"NONESpencer Childress2018-02-01T22:15:08Z
0083samussiah2018-02-01T22:18:35Zvisits-without-datav2.2.0-devVisits without dataNONESpencer Childress2018-02-01T22:18:41Z
0084samussiah2018-02-01T22:20:20Zsettings-schemav2.2.0-devSettings schemaNONESpencer Childress2018-02-01T22:20:30Z
0085samussiah2018-02-02T22:07:32Zv2.2.1-devmastermessed up npm publish so updating the patch versionNONESpencer Childress2018-02-02T22:07:43Z
0087samussiah2018-02-27T14:56:09Zv2.2.3-devmasterSafety Outlier Explorer - v2.2.3100109077pburnsdata2018-02-28T15:34:37ZAPPROVEDsamussiah2018-03-09T20:24:21Z
0087samussiah2018-02-27T14:56:09Zv2.2.3-devmasterSafety Outlier Explorer - v2.2.3102770317dschwentker2018-03-09T19:56:54ZAPPROVEDsamussiah2018-03-09T20:24:21ZTested and passed using webcharts version v1.10.0-dev. Confirmed that there are 0 results when running d3.selectAll('.wc-controls .control-label') in the console.
0089samussiah2018-03-27T13:39:27Zv2.3.0-devmasterSafety Outlier Explorer v2.3.0114456493tmbarald2018-04-23T16:19:49ZAPPROVEDSpencer Childress2018-04-27T18:16:18ZGotcha @samussiah . All good now!
0092samussiah2018-03-28T15:48:25Zdarker-linesv2.3.0-devDarker lines108142079pburnsdata2018-03-29T17:45:27ZCHANGES_REQUESTEDSpencer Childress2018-04-16T19:12:55ZIt's darker! Looks good, only concern is that because points have outlines around them now, they are getting obscured sometimes by points around them. ;; ;; ![image](https://user-images.githubusercontent.com/26064686/38103003-0be8d476-3353-11e8-808e-64a17d1fb843.png);; Maybe sending them to the front with something like this when they are selected would make sense: ;; ;; d3.selection.prototype.moveToFront = function() {;; return this.each(function() {;; this.parentNode.appendChild(this);;; });;; };;; ;; (from https://github.com/wbkd/d3-extended)
0092samussiah2018-03-28T15:48:25Zdarker-linesv2.3.0-devDarker lines110117922pburnsdata2018-04-06T15:57:08ZAPPROVEDSpencer Childress2018-04-16T19:12:55Z
0092samussiah2018-03-28T15:48:25Zdarker-linesv2.3.0-devDarker lines112072704tmbarald2018-04-13T16:14:49ZAPPROVEDSpencer Childress2018-04-16T19:12:55ZIssue fixed on all browsers
0093samussiah2018-03-30T18:51:27Znormal-range-controlsv2.3.0-devNormal range controls109115979pburnsdata2018-04-03T21:02:46ZAPPROVEDSpencer Childress2018-04-16T19:36:29Z
0093samussiah2018-03-30T18:51:27Znormal-range-controlsv2.3.0-devNormal range controls112016452tmbarald2018-04-13T13:47:03ZAPPROVEDSpencer Childress2018-04-16T19:36:29ZWorked well in all browsers. Found minor bug that was only in IE.
0094samussiah2018-03-30T19:24:53Zfix-tick-rotationv2.3.0-devFix tick rotation109442362pburnsdata2018-04-04T18:16:30ZAPPROVEDsamussiah2018-04-16T19:36:30Z
0094samussiah2018-03-30T19:24:53Zfix-tick-rotationv2.3.0-devFix tick rotation112030411tmbarald2018-04-13T14:22:34ZAPPROVEDsamussiah2018-04-16T19:36:30ZIssue fixed on all browsers
0095samussiah2018-03-30T20:39:52Zappend-unitsv2.3.0-devAppend units109445979pburnsdata2018-04-04T18:26:14ZAPPROVEDSpencer Childress2018-04-16T19:41:08Z
0095samussiah2018-03-30T20:39:52Zappend-unitsv2.3.0-devAppend units112048916tmbarald2018-04-13T15:08:45ZAPPROVEDSpencer Childress2018-04-16T19:41:08ZThe issue has been fixed for all browsers.
0098samussiah2018-04-02T15:15:40Zadd-test-page-scriptv2.3.0-devadd package.json scriptNONESpencer Childress2018-04-16T19:41:19Z
0102brittsikora2018-04-25T20:47:33Zbrittsikora-patch-1v2.3.0-devUpdating example link116034117samussiah2018-04-27T18:13:54ZAPPROVEDSpencer Childress2018-04-27T18:14:55Z
0104rtbailey2018-08-09T19:44:26Zrtbailey-patch-1v2.4.0-devUpdate LICENSE.mdNONEjwildfire2018-10-03T20:51:14Z
0108jwildfire2018-10-03T20:51:30Zv2.4.0-devmasterSafety Outlier Explorer v2.4.0163563447samussiah2018-10-10T21:11:54ZCOMMENTEDjwildfire2018-10-29T21:16:55Zthat'll teach Mozilla!
0108jwildfire2018-10-03T20:51:30Zv2.4.0-devmasterSafety Outlier Explorer v2.4.0163563478samussiah2018-10-10T21:11:59ZAPPROVEDjwildfire2018-10-29T21:16:55Z
0108jwildfire2018-10-03T20:51:30Zv2.4.0-devmasterSafety Outlier Explorer v2.4.0169512659dschwentker2018-10-29T20:53:18ZAPPROVEDjwildfire2018-10-29T21:16:55ZRegression testing run and passed in Chrome and Firefox.
0110jwildfire2018-10-04T04:20:15ZsendToBackOnClickv2.4.0-devSend points to the back on click. #105162905535samussiah2018-10-09T14:01:22ZCOMMENTEDSpencer Childress2018-10-23T18:59:45Z#pretentious
0110jwildfire2018-10-04T04:20:15ZsendToBackOnClickv2.4.0-devSend points to the back on click. #105162917010samussiah2018-10-09T14:22:04ZCOMMENTEDSpencer Childress2018-10-23T18:59:45ZThat checks out.
0110jwildfire2018-10-04T04:20:15ZsendToBackOnClickv2.4.0-devSend points to the back on click. #105162917888samussiah2018-10-09T14:23:36ZAPPROVEDSpencer Childress2018-10-23T18:59:45ZThat was a lot easier than I expected. Noice!
0112samussiah2018-10-10T21:06:13Zfix-mark-rotation-to-frontsendToBackOnClickFix mark rotation to front163564354samussiah2018-10-10T21:14:11ZCOMMENTEDSpencer Childress2018-10-23T18:59:32ZForgot to update lines. Will fix in the morning.
0112samussiah2018-10-10T21:06:13Zfix-mark-rotation-to-frontsendToBackOnClickFix mark rotation to front163564582samussiah2018-10-10T21:14:48ZCOMMENTEDSpencer Childress2018-10-23T18:59:32Ztwo applications can't hurt right?
0112samussiah2018-10-10T21:06:13Zfix-mark-rotation-to-frontsendToBackOnClickFix mark rotation to front167072468jwildfire2018-10-22T19:48:48ZAPPROVEDSpencer Childress2018-10-23T18:59:32Z🔥 Well done all around. Thanks for all the effort to make my dinky little slapdash update actually work!;; ;; ;;nice touch making this clickable.;;ugh - hate that this is needed to update the radius. we should clean this up in v2.0;;nice code, this is. ;;nicely done;;Nice addition! ⭐️for going above and beyond the spec. ;;Not sure what this bit is doing really ... ;;Is it actually called anywhere else?
0112samussiah2018-10-10T21:06:13Zfix-mark-rotation-to-frontsendToBackOnClickFix mark rotation to front167085325samussiah2018-10-22T20:04:35ZCOMMENTEDSpencer Childress2018-10-23T18:59:32Zyeah, this just makes accessing `chart.points` and `chart.lines` more accessible down the line, instead of having to `chart.marks.find(mark => mark.type == 'circle|line').groups` every time they need accessing
0112samussiah2018-10-10T21:06:13Zfix-mark-rotation-to-frontsendToBackOnClickFix mark rotation to front167380034rchronowic2018-10-23T12:09:34ZAPPROVEDSpencer Childress2018-10-23T18:59:32ZTested this fix in both Firefox and Chrome, point rotation on click still functions properly and the drop down is now properly size! ;; All good to go!
0115pburnsdata2019-01-08T21:14:35Zpburnsdata-patch-1masterResolve Spelling ErrorNONEPreston Burns
0116samussiah2019-02-07T15:33:48Zdev-v2.5.0masterSafety Outlier Explorer v2.5.0210383891danedexF52019-03-04T21:45:28ZAPPROVEDPreston Burns2019-03-05T18:14:16ZApproved
0117samussiah2019-02-07T16:56:51Zinvalid-starting-measuredev-v2.5.0add starting measure check202871707pburnsdata2019-02-12T20:02:38ZAPPROVEDSpencer Childress2019-02-18T18:44:10ZLooks good! Had trouble getting the branch/commit to load in CAT so tried it out locally - not sure yet why it wasn't working...;;yeah!
0117samussiah2019-02-07T16:56:51Zinvalid-starting-measuredev-v2.5.0add starting measure check204907947danedexF52019-02-18T18:07:19ZAPPROVEDSpencer Childress2019-02-18T18:44:10Z
0118samussiah2019-02-07T18:35:28Zextend-y-domaindev-v2.5.0extend y-domain202881020pburnsdata2019-02-12T20:17:07ZAPPROVEDSpencer Childress2019-02-18T18:44:17Znoice - good idea to make it relative to the measure domain
0118samussiah2019-02-07T18:35:28Zextend-y-domaindev-v2.5.0extend y-domain204908194danedexF52019-02-18T18:08:11ZAPPROVEDSpencer Childress2019-02-18T18:44:17Z
0119samussiah2019-02-07T23:06:45Zadd-y-incrementdev-v2.5.0precision202890680pburnsdata2019-02-12T20:31:09ZAPPROVEDSpencer Childress2019-02-18T18:44:27ZSaweet. Much better than increments of 1;;this seemed reasonable for the examples I tried
0119samussiah2019-02-07T23:06:45Zadd-y-incrementdev-v2.5.0precision204908150danedexF52019-02-18T18:07:58ZAPPROVEDSpencer Childress2019-02-18T18:44:27Z
0120samussiah2019-02-07T23:09:39Zremoved-recordsdev-v2.5.0Removed records203781500pburnsdata2019-02-14T18:22:24ZAPPROVEDSpencer Childress2019-02-18T18:44:43ZAwesome. Couldn't have made that any better;;Cool - good idea to clarify the reason for dropping;;fun lil test;;a nice touch
0120samussiah2019-02-07T23:09:39Zremoved-recordsdev-v2.5.0Removed records204908072danedexF52019-02-18T18:07:44ZAPPROVEDSpencer Childress2019-02-18T18:44:43Z
0121samussiah2019-02-12T21:35:52Zcustom-mark-highlightingdev-v2.5.0Custom mark highlighting204001325pburnsdata2019-02-14T22:26:54ZAPPROVEDSpencer Childress2019-02-18T18:45:11ZAlright, alright, alright. That's a wrap! LOOKIN GOOOD;;nice catch;;.....;;is default a method?;;MY MAN!!! YES!
0121samussiah2019-02-12T21:35:52Zcustom-mark-highlightingdev-v2.5.0Custom mark highlighting204907594samussiah2019-02-18T18:06:05ZCOMMENTEDSpencer Childress2019-02-18T18:45:11Zi think that's how babel interprets import/export syntax in the context of require(). in this case the settings files return a default function.
0121samussiah2019-02-12T21:35:52Zcustom-mark-highlightingdev-v2.5.0Custom mark highlighting204908006danedexF52019-02-18T18:07:31ZAPPROVEDSpencer Childress2019-02-18T18:45:11Z
0123jwildfire2019-03-25T18:48:02Zdev-v2.5.1masterv2.5.1218523080samussiah2019-03-25T18:53:33ZAPPROVEDSpencer Childress2019-03-25T18:53:46Z
0124jwildfire2019-03-27T19:40:42Zdev-v2.5.2masterdev-v2.5.2220059749samussiah2019-03-28T14:34:16ZAPPROVEDSpencer Childress2019-03-28T14:34:21Z
0126samussiah2019-04-09T13:53:10Zdev-v2.5.3masterFix infinite loop calculating caused by zero range.224454374jwildfire2019-04-09T14:46:59ZAPPROVEDSpencer Childress2019-04-09T14:48:29Z👍 Logic looks good and worked with the sample data set where previous data was bombing.
0133jwildfire2019-05-15T23:32:11Zdev-v2.5.4masterDev v2.5.4239016546samussiah2019-05-17T16:21:33ZCHANGES_REQUESTEDSpencer Childress2019-05-20T16:28:04ZMinor issue with `details` update.;;Details in this chart are participant-level characteristics, not listing columns. Filters and measure characteristics don't make sense here.
0133jwildfire2019-05-15T23:32:11Zdev-v2.5.4masterDev v2.5.4239595436jwildfire2019-05-20T16:10:39ZCOMMENTEDSpencer Childress2019-05-20T16:28:04ZThat makes sense. Cleaning it up now.
0133jwildfire2019-05-15T23:32:11Zdev-v2.5.4masterDev v2.5.4239603617samussiah2019-05-20T16:27:38ZAPPROVEDSpencer Childress2019-05-20T16:28:04Zprettier and their fickle opinions of code indentation...
0134dependabot[bot]2019-07-12T19:32:52Zdependabot/npm_and_yarn/lodash-4.17.14masterBump lodash from 4.17.11 to 4.17.14262466582samussiah2019-07-16T14:40:12ZAPPROVEDSpencer Childress2019-07-16T14:40:18Z
0137jwildfire2019-08-09T19:51:10Zdev-v2.5.5masterDev v2.5.5276783925pburnsdata2019-08-19T20:04:00ZAPPROVEDjwildfire2019-08-19T20:07:20ZLookin good
0138jwildfire2019-08-09T19:51:44ZaddCustomEventdev-v2.5.5Add custom event274986618pburnsdata2019-08-14T15:56:39ZAPPROVEDjwildfire2019-08-19T19:55:29ZLooks good - might need to be updated with the new [overlapping points changes](https://github.com/RhoInc/safety-outlier-explorer/pull/140) I'm guessing that this will return each subject id as you cycle through by reclicking points. My current thought is that this is better than returning all the subjects under a point since you're still only viewing one line so it's fine as is - we just might want to add events for 2.6.0 to the ids the are listed beneath the chart when you click a point - that make sense @jwildfire?
0139jwildfire2019-08-14T05:57:18Zdev-v2.6.0masterDev v2.6.0278476529rchronowic2019-08-22T14:50:11ZAPPROVEDSpencer Childress2019-08-22T17:11:58ZPassed regression testing.
0140jwildfire2019-08-14T05:57:59Znoverlapdev-v2.6.0Deal with overlapping points276627069samussiah2019-08-19T15:11:09ZAPPROVEDjwildfire2019-08-19T20:30:47ZThis is way more functional and transparent than reordering the points in the DOM. Nice work.
0142jwildfire2019-08-19T22:10:24Zhoverlapdev-v2.6.0Overlap tooltips277195757samussiah2019-08-20T14:11:31ZAPPROVEDjwildfire2019-08-20T15:32:51ZDig it.
0144samussiah2020-01-31T16:28:15Zdev-v2.6.1masterSafety Outlier Explorer v2.6.1351626698jwildfire2020-01-31T16:33:38ZAPPROVEDjwildfire2020-01-31T16:34:08Z