mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 09:12:52 +00:00
Give different instances of the raw tag editor distinct classes and disclosure states Correctly expand raw tags section by default when selecting a feature with a fallback preset Fix raw tag editor tests
140 lines
3.6 KiB
JavaScript
140 lines
3.6 KiB
JavaScript
import {
|
|
select as d3_select
|
|
} from 'd3-selection';
|
|
|
|
import { uiDisclosure } from './disclosure';
|
|
import { utilFunctor } from '../util';
|
|
|
|
// A unit of controls or info to be used in a layout, such as within a pane.
|
|
// Can be labeled and collapsible.
|
|
export function uiSection(id, context) {
|
|
|
|
var _classes = utilFunctor('');
|
|
var _shouldDisplay;
|
|
var _content;
|
|
|
|
var _disclosure;
|
|
var _title;
|
|
var _expandedByDefault = utilFunctor(true);
|
|
var _disclosureContent;
|
|
var _disclosureExpanded;
|
|
|
|
var _containerSelection = d3_select(null);
|
|
|
|
var section = {
|
|
id: id
|
|
};
|
|
|
|
section.classes = function(val) {
|
|
if (!arguments.length) return _classes;
|
|
_classes = utilFunctor(val);
|
|
return section;
|
|
};
|
|
|
|
section.title = function(val) {
|
|
if (!arguments.length) return _title;
|
|
_title = utilFunctor(val);
|
|
return section;
|
|
};
|
|
|
|
section.expandedByDefault = function(val) {
|
|
if (!arguments.length) return _expandedByDefault;
|
|
_expandedByDefault = utilFunctor(val);
|
|
return section;
|
|
};
|
|
|
|
section.shouldDisplay = function(val) {
|
|
if (!arguments.length) return _shouldDisplay;
|
|
_shouldDisplay = utilFunctor(val);
|
|
return section;
|
|
};
|
|
|
|
section.content = function(val) {
|
|
if (!arguments.length) return _content;
|
|
_content = val;
|
|
return section;
|
|
};
|
|
|
|
section.disclosureContent = function(val) {
|
|
if (!arguments.length) return _disclosureContent;
|
|
_disclosureContent = val;
|
|
return section;
|
|
};
|
|
|
|
section.disclosureExpanded = function(val) {
|
|
if (!arguments.length) return _disclosureExpanded;
|
|
_disclosureExpanded = val;
|
|
return section;
|
|
};
|
|
|
|
// may be called multiple times
|
|
section.render = function(selection) {
|
|
|
|
_containerSelection = selection
|
|
.selectAll('.section-' + id)
|
|
.data([0]);
|
|
|
|
var sectionEnter = _containerSelection
|
|
.enter()
|
|
.append('div')
|
|
.attr('class', 'section section-' + id + ' ' + (_classes && _classes() || ''));
|
|
|
|
_containerSelection = sectionEnter
|
|
.merge(_containerSelection);
|
|
|
|
_containerSelection
|
|
.call(renderContent);
|
|
};
|
|
|
|
section.reRender = function() {
|
|
_containerSelection
|
|
.call(renderContent);
|
|
};
|
|
|
|
section.selection = function() {
|
|
return _containerSelection;
|
|
};
|
|
|
|
section.disclosure = function() {
|
|
return _disclosure;
|
|
};
|
|
|
|
// may be called multiple times
|
|
function renderContent(selection) {
|
|
if (_shouldDisplay) {
|
|
var shouldDisplay = _shouldDisplay();
|
|
selection.classed('hide', !shouldDisplay);
|
|
if (!shouldDisplay) {
|
|
selection.html('');
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_disclosureContent) {
|
|
if (!_disclosure) {
|
|
_disclosure = uiDisclosure(context, id.replace(/-/g, '_'), _expandedByDefault())
|
|
.title(_title || '')
|
|
/*.on('toggled', function(expanded) {
|
|
if (expanded) { selection.node().parentNode.scrollTop += 200; }
|
|
})*/
|
|
.content(_disclosureContent);
|
|
}
|
|
if (_disclosureExpanded !== undefined) {
|
|
_disclosure.expanded(_disclosureExpanded);
|
|
_disclosureExpanded = undefined;
|
|
}
|
|
selection
|
|
.call(_disclosure);
|
|
|
|
return;
|
|
}
|
|
|
|
if (_content) {
|
|
selection
|
|
.call(_content);
|
|
}
|
|
}
|
|
|
|
return section;
|
|
}
|