modules/ui/flash.js (86 lines of code) (raw):

import { select as d3_select } from 'd3-selection'; import { timeout as d3_timeout } from 'd3-timer'; var _flashTimer; export function uiFlash() { var _duration = 2000; var _iconName = '#iD-icon-no'; var _iconClass = 'disabled'; var _text = ''; var _textClass; function flash() { if (_flashTimer) { _flashTimer.stop(); } d3_select('#footer-wrap') .attr('class', 'footer-hide'); d3_select('#flash-wrap') .attr('class', 'footer-show'); var content = d3_select('#flash-wrap').selectAll('.flash-content') .data([0]); // Enter var contentEnter = content.enter() .append('div') .attr('class', 'flash-content'); var iconEnter = contentEnter .append('svg') .attr('class', 'flash-icon') .append('g') .attr('transform', 'translate(10,10)'); iconEnter .append('circle') .attr('r', 9); iconEnter .append('use') .attr('transform', 'translate(-7,-7)') .attr('width', '14') .attr('height', '14'); contentEnter .append('div') .attr('class', 'flash-text'); // Update content = content .merge(contentEnter); content .selectAll('.flash-icon') .attr('class', 'flash-icon ' + (_iconClass || '')); content .selectAll('.flash-icon use') .attr('xlink:href', _iconName); content .selectAll('.flash-text') .attr('class', 'flash-text ' + (_textClass || '')) .text(_text); _flashTimer = d3_timeout(function() { _flashTimer = null; d3_select('#footer-wrap') .attr('class', 'footer-show'); d3_select('#flash-wrap') .attr('class', 'footer-hide'); }, _duration); return content; } flash.duration = function(_) { if (!arguments.length) return _duration; _duration = _; return flash; }; flash.text = function(_) { if (!arguments.length) return _text; _text = _; return flash; }; flash.textClass = function(_) { if (!arguments.length) return _textClass; _textClass = _; return flash; }; flash.iconName = function(_) { if (!arguments.length) return _iconName; _iconName = _; return flash; }; flash.iconClass = function(_) { if (!arguments.length) return _iconClass; _iconClass = _; return flash; }; return flash; }