modules/ui/sections/grid_display_options.js (60 lines of code) (raw):

import { select as d3_select } from 'd3-selection'; import { t } from '../../core/localizer'; import { uiSection } from '../section'; export function uiSectionGridDisplayOptions(context) { var section = uiSection('grid-display-options', context) .label(t('background.grid.grids')) .disclosureContent(gridDisplayOptions); function chooseGrid(d3_event, d) { d3_event.preventDefault(); context.background().numGridSplits(d.numSplit); } function render(selection) { // the grid list var container = selection.selectAll('.layer-grid-list') .data([0]); var gridList = container.enter() .append('ul') .attr('class', 'layer-list layer-grid-list') .attr('dir', 'auto') .merge(container); var gridItems = gridList.selectAll('li') .data( [{ numSplit: 0, name: t('background.grid.no_grid')}, { numSplit: 2, name: t('background.grid.n_by_n', { num: 2 }) }, { numSplit: 3, name: t('background.grid.n_by_n', { num: 3 }) }, { numSplit: 4, name: t('background.grid.n_by_n', { num: 4 }) }, { numSplit: 5, name: t('background.grid.n_by_n', { num: 5 }) }, { numSplit: 6, name: t('background.grid.n_by_n', { num: 6 }) }], function(d) { return d.name; } ); var enter = gridItems.enter() .insert('li', '.custom-gridsopt') .attr('class', 'gridsopt'); var label = enter.append('label'); label.append('input') .attr('type', 'radio') .attr('name', 'grids') .property('checked', function(d){ return (d.numSplit === context.background().numGridSplits()); }) .on('change', chooseGrid); label.append('span') .text(function(d) { return d.name; }); gridItems.exit() .remove(); } function gridDisplayOptions(selection) { var gridOptionsSection = d3_select('.section-grid-display-options'); context.rapidContext().on('task_extent_set.grid_display_options', function() { if (context.rapidContext().isTaskRectangular()) { gridOptionsSection.classed('hide', false); selection.call(render); } }); if (!context.rapidContext().isTaskRectangular()){ gridOptionsSection.classed('hide', true); return; } } return section; }