var bricks = window.bricks || {}; bricks.Svg = class extends bricks.VBox { /* options:{ rate: url: color:* blinktime:* } */ constructor(opts){ opts.rate = opts.rate || 1; opts.cwidth = opts.rate; opts.cheight = opts.rate; opts.blinktime = opts.blinktime? opts.blinktime : 0; opts.dynsize = true; super(opts); if (! this.color) { this.color = bricks.app.get_color(); } if (opts.url){ this.set_url(opts.url); } } set_url(url){ if (!url){ this.dom_element.innerHTML = ''; return; } this.url = url; fetch(url) .then(response => response.text()) .then(svgText => { if (svgText.startsWith(" { if (s.state == state){ this.set_url(s.url); this.dispatch('state_changed', state); done = true; return; } }); if (! done) this.set_url(null); } } bricks.MultipleStateIcon = class extends bricks.Svg { constructor(opts){ opts.url = opts.urls[opts.state]; super(opts); this.state = opts.state; this.urls = opts.urls; this.bind('click', this.change_state.bind(this)); } change_state(event){ event.stopPropagation(); var states = Object.keys(this.urls); for (var i=0;i= states.length) k = 0; this.set_state(states[k]); this.dispatch('state_changed', this.state); break; } } } set_state(state){ this.state = state; this.set_url(this.urls[state]); } } bricks.Factory.register('Svg', bricks.Svg); bricks.Factory.register('StatedSvg', bricks.StatedSvg); bricks.Factory.register('MultipleStateIcon', bricks.MultipleStateIcon);