Skip to content

Instantly share code, notes, and snippets.

@karooolis
Last active May 7, 2019 15:17
Show Gist options
  • Save karooolis/8fc6a46036f734c258f8ced4f1539a84 to your computer and use it in GitHub Desktop.
Save karooolis/8fc6a46036f734c258f8ced4f1539a84 to your computer and use it in GitHub Desktop.
OCD patterns
license: mit
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
</style>
</head>
<body>
<script>
const HEIGHT = 30;
const WIDTH = 500;
const SHIFT_BAR_HEIGHT = 24
const SHIFT_BAR_PADDING = 2
const CHART_X_AXIS_HEIGHT = 30
const SHIFT_LABEL_TEXT_X_OFFSET = -20
const SHIFT_BAR_TEXT_X_OFFSET = 4
const SHIFT_BAR_TEXT_Y_OFFSET = 15
const SHIFT_INTERVALS_VERTICAL_SPACE_PERCENT = 0.2
const MARGINS = { left: 50, top: 30, right: 50 }
const MULTIPLE_USER_COLOR = '#919191'
const NO_USER_COLOR = '#F2F2F4'
const SHIFT_INTERVAL_RESOLVED_COLOR = '#629A41'
const SHIFT_INTERVAL_RESOLVED_COLOR_LOW_URGENCY = '#b1cca2'
const SHIFT_INTERVAL_TRIGGERED_COLOR = '#CA3B27'
const SHIFT_INTERVAL_ACKNOWLEDGED_COLOR = '#ECAB20'
const SHIFT_INTERVAL_HIGHLIGHTED_STROKE_COLOR = '#222231'
const SHIFT_INTERVAL_HIGHLIGHTED_MARKED_STROKE_COLOR = '#222231'
const SHIFT_INTERVAL_INCIDENT_MANAGER_TRIGGERED = '#07bdd9'
const SHIFT_INTERVAL_INCIDENT_MANAGER_RESOLVED_COLOR = SHIFT_INTERVAL_INCIDENT_MANAGER_TRIGGERED
const SHIFT_INTERVAL_INCIDENT_MANAGER_TRIGGERED_2 = '#800080'
const SHIFT_INTERVAL_INCIDENT_MANAGER_RESOLVED_COLOR_2 = SHIFT_INTERVAL_INCIDENT_MANAGER_TRIGGERED
const SHIFT_INTERVAL_TASK_TRIGGERED = '#246772'
const SHIFT_INTERVAL_TASK_RESOLVED_COLOR = SHIFT_INTERVAL_TASK_TRIGGERED
const SHIFT_INTERVAL_TASK_ACKNOWLEDGED_COLOR = '#b1eaeb'
const LOW_URGENCY_FILL_OPACITY = 0.4
var svg = d3.select("body").append("svg")
.attr("width", WIDTH + 500)
.attr("height", 1300)
function createRectPattern(element, id, fill, fillOpacity, angle = 45) {
element.append('pattern')
.attr('id', id)
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 5)
.attr('height', 3)
.attr('patternTransform', `rotate(${angle})`)
.append('rect')
.attr('width', 10)
.attr('height', 2)
.attr('fill', fill)
.attr('fill-opacity', fillOpacity)
}
function createRectPattern2(element, id, fill, fillOpacity, angle = 45) {
element.append('pattern')
.attr('id', id)
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 5)
.attr('height', 3)
.attr('patternTransform', `rotate(${angle})`)
.append('rect')
.attr('width', 10)
.attr('height', 2)
.attr('fill', fill)
.attr('fill-opacity', fillOpacity)
}
function createCirclePattern(element, id, fill, fillOpacity, angle = 45) {
element.append('pattern')
.attr('id', id)
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 5)
.attr('height', 5)
.append('circle')
.attr('cx', 1.7)
.attr('cy', 1.7)
.attr('r', 1.7)
.attr('fill', fill)
.attr('fill-opacity', fillOpacity)
}
function createPathPattern(element, id, fill, fillOpacity = 1, strokeWidth = 3, dashArray = 0) {
element.append('pattern')
.attr('id', id)
.attr('patternUnits', 'userSpaceOnUse')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', '100%')
.attr('height', '100%')
.append('line')
.attr('x1', 0)
.attr('y1', 15)
.attr('x2', WIDTH)
.attr('y2', 15)
.attr('stroke', fill)
.attr('fill-opacity', 1)
.attr('stroke-width', strokeWidth)
.attr('stroke-dasharray', dashArray)
.attr('shape-rendering', 'sharpEdges')
// element.append('pattern')
// .attr('id', id)
// .attr('patternUnits', 'userSpaceOnUse')
// .attr('width', dashArray ? dashArray * 2 : 1)
// .attr('height', 24)
// .append('g')
// .append('line')
// .attr('x1', 0)
// .attr('y1', 0)
// .attr('x2', 10)
// .attr('y2', 0)
// .attr('stroke', fill)
// .attr('fill-opacity', fillOpacity)
// .attr('stroke-width', strokeWidth)
// .attr('stroke-dasharray', dashArray)
// .attr('shape-rendering', 'geometricPrecision')
}
createRectPattern(
svg, 'resolved-pattern', SHIFT_INTERVAL_RESOLVED_COLOR, LOW_URGENCY_FILL_OPACITY, 0)
createRectPattern(
svg, 'acked-pattern', SHIFT_INTERVAL_ACKNOWLEDGED_COLOR, LOW_URGENCY_FILL_OPACITY)
createRectPattern(
svg, 'acked-pattern-vertical', SHIFT_INTERVAL_ACKNOWLEDGED_COLOR, LOW_URGENCY_FILL_OPACITY)
createRectPattern(
svg, 'triggered-pattern', SHIFT_INTERVAL_TRIGGERED_COLOR, LOW_URGENCY_FILL_OPACITY)
createCirclePattern(
svg, 'triggered-pattern-circle', SHIFT_INTERVAL_TRIGGERED_COLOR, LOW_URGENCY_FILL_OPACITY)
createRectPattern(
svg, 'im-triggered-pattern', SHIFT_INTERVAL_INCIDENT_MANAGER_TRIGGERED, 1, -45)
createRectPattern(
svg, 'task-triggered-pattern', SHIFT_INTERVAL_TASK_TRIGGERED, 1, -45)
createRectPattern2(
svg, 'task-triggered-pattern-2', SHIFT_INTERVAL_TASK_TRIGGERED, 1, -45)
// SECOND
createRectPattern(
svg, 'resolved-pattern-high', SHIFT_INTERVAL_RESOLVED_COLOR, 1)
createRectPattern(
svg, 'acked-pattern-high', SHIFT_INTERVAL_ACKNOWLEDGED_COLOR, 1)
createRectPattern(
svg, 'acked-pattern-vertical-high', SHIFT_INTERVAL_ACKNOWLEDGED_COLOR, 1)
createRectPattern(
svg, 'triggered-pattern-high', SHIFT_INTERVAL_TRIGGERED_COLOR, 1)
createCirclePattern(
svg, 'triggered-pattern-circle-high', SHIFT_INTERVAL_TRIGGERED_COLOR, 1)
createRectPattern(
svg, 'im-triggered-pattern-high', SHIFT_INTERVAL_INCIDENT_MANAGER_TRIGGERED, 1, -45)
createRectPattern(
svg, 'task-triggered-pattern-high', SHIFT_INTERVAL_TASK_TRIGGERED, 1, -45)
createPathPattern(
svg, 'task-resolved-pattern', SHIFT_INTERVAL_TASK_TRIGGERED, 3, 6, 0)
createPathPattern(
svg, 'task-acked-pattern', SHIFT_INTERVAL_TASK_TRIGGERED, 3, 7, 3)
createPathPattern(
svg, 'task-triggered-pattern-3', SHIFT_INTERVAL_TASK_TRIGGERED, 3, 6, 6)
function addElement(order, fill, text) {
svg.append("text")
.attr('x', WIDTH + 20)
.attr('y', order * 40 + 30)
.text(text)
svg.append("rect")
.attr('x', 10)
.attr('y', order * 40 + 10)
.attr('width', WIDTH)
.attr('height', 30)
.attr('fill', fill)
}
addElement(0, 'url(#resolved-pattern)', 'Shift interval resolved (low urgency)')
addElement(1, 'url(#acked-pattern)', 'Shift interval acknowledged (low urgency)')
addElement(2, 'url(#triggered-pattern)', 'Shift interval triggered (low urgency)')
addElement(3, SHIFT_INTERVAL_RESOLVED_COLOR, 'Shift interval triggered (high urgency)')
addElement(4, SHIFT_INTERVAL_TRIGGERED_COLOR, 'Shift interval triggered (high urgency)')
addElement(5, SHIFT_INTERVAL_ACKNOWLEDGED_COLOR, 'Shift interval triggered (high urgency)')
addElement(6, SHIFT_INTERVAL_TASK_RESOLVED_COLOR, 'Task resolved')
addElement(7, SHIFT_INTERVAL_TASK_ACKNOWLEDGED_COLOR, 'Task acknowledged')
addElement(8, 'url(#task-triggered-pattern)', 'Task triggered')
addElement(9, SHIFT_INTERVAL_INCIDENT_MANAGER_RESOLVED_COLOR, 'Incident manager alert resolved')
addElement(10, 'url(#im-triggered-pattern)', 'Incident manager alert triggered')
addElement(11, '#fff', '')
addElement(12, 'url(#resolved-pattern)', 'Shift interval resolved (low urgency)')
addElement(13, 'url(#acked-pattern-vertical)', 'Shift interval acknowledged (low urgency)')
addElement(14, 'url(#triggered-pattern-circle)', 'Shift interval triggered (low urgency)')
addElement(15, SHIFT_INTERVAL_RESOLVED_COLOR, 'Shift interval triggered (high urgency)')
addElement(16, 'url(#acked-pattern-vertical-high)', 'Shift interval triggered (high urgency)')
addElement(17, 'url(#triggered-pattern-circle-high)', 'Shift interval triggered (high urgency)')
addElement(18, 'url(#task-resolved-pattern)', 'Task resolved')
addElement(19, 'url(#task-acked-pattern)', 'Task acknowledged')
addElement(20, 'url(#task-triggered-pattern-3)', 'Task triggered')
addElement(21, SHIFT_INTERVAL_INCIDENT_MANAGER_TRIGGERED, 'Incident manager alert resolved')
addElement(22, 'url(#im-triggered-pattern-high)', 'Incident manager alert triggered')
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment