mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-25 15:05:32 +00:00
60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
import * as d3 from 'd3';
|
|
import { rebind } from '../util/rebind';
|
|
import { Toggle } from './toggle';
|
|
|
|
export function Disclosure() {
|
|
var dispatch = d3.dispatch('toggled'),
|
|
title,
|
|
expanded = false,
|
|
content = function () {};
|
|
|
|
var disclosure = function(selection) {
|
|
var $link = selection.selectAll('.hide-toggle')
|
|
.data([0]);
|
|
|
|
$link = $link.enter().append('a')
|
|
.attr('href', '#')
|
|
.attr('class', 'hide-toggle')
|
|
.merge($link);
|
|
|
|
$link.text(title)
|
|
.on('click', toggle)
|
|
.classed('expanded', expanded);
|
|
|
|
var $body = selection.selectAll('div')
|
|
.data([0]);
|
|
|
|
$body = $body.enter().append('div').merge($body);
|
|
|
|
$body.classed('hide', !expanded)
|
|
.call(content);
|
|
|
|
function toggle() {
|
|
expanded = !expanded;
|
|
$link.classed('expanded', expanded);
|
|
$body.call(Toggle(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 rebind(disclosure, dispatch, 'on');
|
|
}
|