mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 17:23:02 +00:00
73 lines
1.6 KiB
JavaScript
73 lines
1.6 KiB
JavaScript
import * as d3 from 'd3';
|
|
import { utilRebind } from '../util/rebind';
|
|
import { uiToggle } from './toggle';
|
|
|
|
|
|
export function uiDisclosure() {
|
|
var dispatch = d3.dispatch('toggled'),
|
|
title,
|
|
expanded = false,
|
|
content = function () {};
|
|
|
|
|
|
var disclosure = function(selection) {
|
|
var hideToggle = selection.selectAll('.hide-toggle')
|
|
.data([0]);
|
|
|
|
hideToggle = hideToggle.enter()
|
|
.append('a')
|
|
.attr('href', '#')
|
|
.attr('class', 'hide-toggle')
|
|
.merge(hideToggle);
|
|
|
|
hideToggle
|
|
.text(title)
|
|
.on('click', toggle)
|
|
.classed('expanded', expanded);
|
|
|
|
|
|
var wrap = selection.selectAll('div')
|
|
.data([0]);
|
|
|
|
wrap = wrap.enter()
|
|
.append('div')
|
|
.merge(wrap);
|
|
|
|
wrap
|
|
.classed('hide', !expanded)
|
|
.call(content);
|
|
|
|
|
|
function toggle() {
|
|
expanded = !expanded;
|
|
hideToggle.classed('expanded', expanded);
|
|
wrap.call(uiToggle(expanded));
|
|
dispatch.call('toggled', this, expanded);
|
|
}
|
|
};
|
|
|
|
|
|
disclosure.title = function(_) {
|
|
if (!arguments.length) return title;
|
|
title = _;
|
|
return disclosure;
|
|
};
|
|
|
|
|
|
disclosure.expanded = function(_) {
|
|
if (!arguments.length) return expanded;
|
|
expanded = _;
|
|
return disclosure;
|
|
};
|
|
|
|
|
|
disclosure.content = function(_) {
|
|
if (!arguments.length) return content;
|
|
content = _;
|
|
return disclosure;
|
|
};
|
|
|
|
|
|
return utilRebind(disclosure, dispatch, 'on');
|
|
}
|