Bokeh Collapsing
Adapting 'SlickGrid example 5: Collapsing' to Bokeh
by Jan Burgy
HTML
<!DOCTYPE html>
<!--suppress HtmlUnknownTarget, SpellCheckingInspection, JSUnresolvedLibraryURL -->
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Collapsing DataTable</title>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bokeh/0.12.16/bokeh.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bokeh/0.12.16/bokeh-tables.min.css" />
<style>
.toggle {
height: 9px;
width: 9px;
display: inline-block;
}
.toggle.expand {
background: url(https://cdnjs.cloudflare.com/ajax/libs/6pac-slickgrid/2.4.0/images/expand.gif) no-repeat center center;
}
.toggle.collapse {
background: url(https://cdnjs.cloudflare.com/ajax/libs/6pac-slickgrid/2.4.0/images/collapse.gif) no-repeat center center;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bokeh/0.12.16/bokeh.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bokeh/0.12.16/bokeh-api.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bokeh/0.12.16/bokeh-tables.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div class="bk-root" id="bokeh-root"></div>
<script>
const DataTable = Bokeh.require('models/widgets/tables/data_table');
class TreeFormatter extends Bokeh.Tables.CellFormatter {
constructor(provider) {
super();
this.data = provider;
}
doFormat(row, cell, value, columnDef, dataContext) {
const
spacer = `<span style='display:inline-block;height:1px;width:${15 * dataContext.indent}px'></span>`,
esc = {'&': '&', '<': '<', '"': '"', "'": '''},
safe = (value + '').replace(/&<@'/g, c => esc[c]),
next = this.data.getItem(dataContext[DataTable.DTINDEX_NAME] + 1),
toggle...