OLD | NEW |
(Empty) | |
| 1 |
| 2 (function(){ |
| 3 |
| 4 Polymer('core-signals',{ |
| 5 attached: function() { |
| 6 signals.push(this); |
| 7 }, |
| 8 removed: function() { |
| 9 var i = signals.indexOf(this); |
| 10 if (i >= 0) { |
| 11 signals.splice(i, 1); |
| 12 } |
| 13 } |
| 14 }); |
| 15 |
| 16 // private shared database |
| 17 var signals = []; |
| 18 |
| 19 // signal dispatcher |
| 20 function notify(name, data) { |
| 21 // convert generic-signal event to named-signal event |
| 22 var signal = new CustomEvent('core-signal-' + name, { |
| 23 // if signals bubble, it's easy to get confusing duplicates |
| 24 // (1) listen on a container on behalf of local child |
| 25 // (2) some deep child ignores the event and it bubbles |
| 26 // up to said container |
| 27 // (3) local child event bubbles up to container |
| 28 // also, for performance, we avoid signals flying up the |
| 29 // tree from all over the place |
| 30 bubbles: false, |
| 31 detail: data |
| 32 }); |
| 33 // dispatch named-signal to all 'signals' instances, |
| 34 // only interested listeners will react |
| 35 signals.forEach(function(s) { |
| 36 s.dispatchEvent(signal); |
| 37 }); |
| 38 } |
| 39 |
| 40 // signal listener at document |
| 41 document.addEventListener('core-signal', function(e) { |
| 42 notify(e.detail.name, e.detail.data); |
| 43 }); |
| 44 |
| 45 })(); |
OLD | NEW |