<snapdata remixID="9117563"><project name="Notifications" app="Snap! 10.1-dev, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAAzlJREFUeF7t10FKY2EQhdFfUXDiFtyPGxB0oAbcidvJJrIeceIkBAevwVkPlOZy6QI5GaeqyHkfPHK2bdu2fAgMCZwJcEje2S8BAQphVECAo/yOC1ADowICHOV3XIAaGBUQ4Ci/4wLUwKiAAEf5HRegBkYFBDjK77gANTAqIMBRfscFqIFRAQGO8jsuQA2MCghwlN9xAWpgVECAo/yOC1ADowICHOV3XIAaGBUQ4Ci/4wLUwKiAAEf5HRegBkYFBDjK77gANTAqIMBRfscFqIFRAQGO8jsuQA2MCghwlN9xAWpgVECAo/yOC1ADowICHOV3XIAaGBUQ4Ci/4wLUwKiAAEf5HRegBkYFBDjK77gANTAqIMBRfscFqIFRAQGO8jsuQA2MCghwlN9xAWpgVECAo/yOC1ADowICHOV3XIAaGBUQ4Ci/4wLUwKiAAL/h3+/36/39fd3e3q6bm5vRh/Sbjwvwm6f78fGxXl5e1ufn53p7e1v39/fr4uJiPT09raurq9/cxH/9bQL8gftwOKzX19d1fX3917eOx+N6fn5e27Z9hemTCwgwCPB0Oq3Hx8d1fn6+7u7ucn2TS4D/+Ap+eHj4egXvdrt1eXkpnZKAAP0JKaWUrRFg5maqJCDAEqQ1mYAAMzdTJQEBliCtyQQEmLmZKgkIsARpTSYgwMzNVElAgCVIazIBAWZupkoCAixBWpMJCDBzM1USEGAJ0ppMQICZm6mSgABLkNZkAgLM3EyVBARYgrQmExBg5maqJCDAEqQ1mYAAMzdTJQEBliCtyQQEmLmZKgkIsARpTSYgwMzNVElAgCVIazIBAWZupkoCAixBWpMJCDBzM1USEGAJ0ppMQICZm6mSgABLkNZkAgLM3EyVBARYgrQmExBg5maqJCDAEqQ1mYAAMzdTJQEBliCtyQQEmLmZKgkIsARpTSYgwMzNVElAgCVIazIBAWZupkoCAixBWpMJCDBzM1USEGAJ0ppMQICZm6mSgABLkNZkAgLM3EyVBARYgrQmExBg5maqJCDAEqQ1mYAAMzdTJQEBliCtyQQEmLmZKgkIsARpTSYgwMzNVElAgCVIazIBAWZupkoCfwBN/Be3THjJawAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="Notifications"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="run function ( %&apos;params&apos; ) { %&apos;body&apos; } with %&apos;args&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input><input type="%code"></input><input type="%mult%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><block var="params"/><block var="body"/></block><block var="args"/></block></script></block-definition><block-definition s="call function ( %&apos;params&apos; ) { %&apos;body&apos; } with %&apos;args&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input><input type="%code"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><block var="params"/><block var="body"/></block><block var="args"/></block></block></script></block-definition><block-definition s="alert %&apos;x&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello, world!</input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>x</l></list><l>window.alert(x);</l><list><block var="x"/></list></custom-block></script></block-definition><block-definition s="confirm %&apos;x&apos;" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt">Do you want to continue?</input></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>x</l></list><l>return window.confirm(x);</l><list><block var="x"/></list></custom-block></block></script></block-definition><block-definition s="prompt %&apos;x&apos; default %&apos;d&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt">What is your name?</input><input type="%txt">John Doe</input></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>x</l><l>d</l></list><l>return window.prompt(x, d);</l><list><block var="x"/><block var="d"/></list></custom-block></block></script></block-definition><block-definition s="$poster request permission" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="let %upvar be %s"><l>done?</l><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list></list><l>var done = false;&#xD;Notification.requestPermission().then(function() {done = true;});&#xD;return function() {return done;};</l><list></list></custom-block></custom-block><block s="doWaitUntil"><block s="evaluate"><block var="done?"/><list></list></block></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;x&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>var</l><block var="x"/></block></script></block-definition><block-definition s="$poster permission" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list></list><l>return Notification.permission;</l><list></list></custom-block></block></script></block-definition><block-definition s="$poster new Notification title: %&apos;x&apos; options: %&apos;o&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%obj"></input></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>x</l><l>o</l></list><l>return new Notification(x, o||null);</l><list><block var="x"/><block var="o"/></list></custom-block></block></script></block-definition><block-definition s="$poster options $nl dir: %&apos;di&apos; lang: %&apos;la&apos; $nl badge: %&apos;ba&apos; body: %&apos;bo&apos; $nl tag: %&apos;ta&apos; icon: %&apos;ic&apos; $nl image: %&apos;im&apos; data: %&apos;da&apos; $nl vibrate: %&apos;vi&apos; renotify: %&apos;re&apos; $nl require interaction: %&apos;rI&apos; $nl actions: %&apos;ac&apos; silent: %&apos;si&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">auto<options>auto&#xD;ltr&#xD;rtl</options></input><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input><input type="%s"></input><input type="%mult%n"></input><input type="%b">false</input><input type="%b">false</input><input type="%mult%obj"></input><input type="%b">false</input></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>di</l><l>la</l><l>ba</l><l>bo</l><l>ta</l><l>ic</l><l>im</l><l>da</l><l>vi</l><l>re</l><l>rI</l><l>ac</l><l>si</l></list><l>const options = {&#xD;dir: di, lang: la,&#xD;badge: ba, body: bo,&#xD;tag: ta || "default", icon: ic,&#xD;image: im, data: da,&#xD;vibrate: si? undefined : vi.asArray(), renotify: re,&#xD;requireInteraction: rI,&#xD;actions: ac.asArray(), silent: si&#xD;};&#xD;options.toString = function() {return "[object NotificationOptions]";};&#xD;return options;</l><list><block var="di"/><block var="la"/><block var="ba"/><block var="bo"/><block var="ta"/><block var="ic"/><block var="im"/><block var="da"/><block var="vi"/><block var="re"/><block var="rI"/><block var="ac"/><block var="si"/></list></custom-block></block></script></block-definition><block-definition s="$poster action: %&apos;a&apos; title: %&apos;t&apos; icon: %&apos;i&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>a</l><l>t</l><l>i</l></list><l>const O = {&#xD;action: a, title: t, icon: i&#xD;};&#xD;O.toString = function() {return "[object NotificationAction]";};&#xD;return O;</l><list><block var="a"/><block var="t"/><block var="i"/></list></custom-block></block></script></block-definition><block-definition s="$poster close %&apos;N&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>N</l></list><l>if(N instanceof Notification) {&#xD;N.close();&#xD;} else {&#xD;throw TypeError("A Notification object was not provided.");&#xD;};</l><list><block var="N"/></list></custom-block></script></block-definition><block-definition s="$poster %&apos;N&apos; on click %&apos;f&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%obj"></input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>N</l><l>f</l></list><l>if(N instanceof Notification) {&#xD;if(typeof f == "function") {N.onclick = f;} else {&#xD;throw TypeError("A function was not provided second.");&#xD;}} else {&#xD;throw TypeError("A Notification object was not provided first.");&#xD;};</l><list><block var="N"/><block var="f"/></list></custom-block></script></block-definition><block-definition s="$poster %&apos;N&apos; on close %&apos;f&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%obj"></input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>N</l><l>f</l></list><l>if(N instanceof Notification) {&#xD;if(typeof f == "function") {N.onclose = f;} else {&#xD;throw TypeError("A function was not provided second.");&#xD;}} else {&#xD;throw TypeError("A Notification object was not provided first.");&#xD;};</l><list><block var="N"/><block var="f"/></list></custom-block></script></block-definition><block-definition s="$poster %&apos;N&apos; on error %&apos;f&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%obj"></input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>N</l><l>f</l></list><l>if(N instanceof Notification) {&#xD;if(typeof f == "function") {N.onerror = f;} else {&#xD;throw TypeError("A function was not provided second.");&#xD;}} else {&#xD;throw TypeError("A Notification object was not provided first.");&#xD;};</l><list><block var="N"/><block var="f"/></list></custom-block></script></block-definition><block-definition s="$poster %&apos;N&apos; on show %&apos;f&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%obj"></input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>N</l><l>f</l></list><l>if(N instanceof Notification) {&#xD;if(typeof f == "function") {N.onshow = f;} else {&#xD;throw TypeError("A function was not provided second.");&#xD;}} else {&#xD;throw TypeError("A Notification object was not provided first.");&#xD;};</l><list><block var="N"/><block var="f"/></list></custom-block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="220"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="221"></list></costumes><sounds><list struct="atomic" id="222"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="227"><costumes><list struct="atomic" id="228"></list></costumes><sounds><list struct="atomic" id="229"></list></sounds><blocks></blocks><variables></variables><scripts></scripts></sprite></sprites></stage><variables></variables></scene></scenes></project><media name="Notifications" app="Snap! 10.1-dev, https://snap.berkeley.edu" version="2"></media></snapdata>