turtlestitch/Examples/JSfunctions.xml

1 wiersz
12 KiB
XML

<project name="JSFunctions" app="Snap! 4.0, http://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAADW0lEQVR4nO3YMUvrYBiG4fOn/A1SEHkbdVRHBaGOjopTBkFKN0FFFBxE3MStq0NB7eTmZnEuWl3ynEGSY09r9XAqj8T7gkLzNdF3uPma5pcAo1/uAfCzESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrEoVYERoe3vbPQb+QakCbDabOj4+1v39vWq1miJC5+fn7rEwQqkCjIiB416vZ5oGn1G6ANM07Tv+rKurq68YCR8oVYDValWS1Gg0FBFqNBrFZ2tra4oIRYQ2NzcHru12u1pcXPynaPH/ShPgzs5O3y42MzNTvD88PNTS0lJxfHNzo+np6YG/0ev1tLGxMbCepqmur6/HPDGkkgR4enqqiNDFxUWx9nYny3e+iNDe3t7A57laraYsy4b+j2azye74BUoRYO75+VnSn+Byf4dTr9eHxjQqsCzLtLKyMqZJkStVgO9ptVqampr68LxRAa6vr+vx8XGcY0E/JEDpdQdLkqTYHf9+PNNut3VwcPDu9Xz9fo0fE+B7IkLValVJknx43rC1/Fd1ROju7u7T1+LVjw8wd3l5OXDvmHt4eFC9Xu9bOzk5GbgnHHZtq9UiwBEIcIS5uTlFhJIkKX7g5IZFlaapOp1O39r8/PzQRzt4RYCftLu72xfd/v6+jo6OiuMsy1SpVHR2dtZ3HbvfaAT4HyJCy8vLur291ezsrCYmJop7yqenp+IcvI8Ax6DdbkuSXl5e+h56LywsqNvtmqf73ghwTDqdjiqVSl+A+Wt1ddU93rdFgGOwtbU1NLy3r8nJSfeY3xIBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCw+g0KEg+EdOsprQAAAABJRU5ErkJggg==</thumbnail><stage name="Stage" width="480" height="360" costume="0" tempo="60" threadsafe="false" lines="round" codify="false" scheduled="false" id="1"><pentrails>data:image/png;base64,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</pentrails><costumes><list id="2"></list></costumes><sounds><list id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="34.00441814031274" y="-3.328227907064843" heading="105" scale="1" rotation="1" draggable="true" costume="0" color="80,80,80" pen="tip" id="8"><costumes><list id="9"></list></costumes><sounds><list id="10"></list></sounds><variables></variables><blocks></blocks><scripts><script x="20" y="20"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l></list><l>return +a + +b</l></block><list><l>3</l><l>4</l></list></block></script><script x="20" y="71"><block s="doDeclareVariables"><list><l>mult</l></list></block><block s="doSetVar"><l>mult</l><block s="reportJSFunction"><list><l>a</l><l>b</l></list><l>return +a * +b</l></block></block><block s="doSayFor"><block s="evaluate"><block var="mult"/><list><l>5</l><l>2</l></list></block><l>2</l></block></script><script x="20" y="166"><block s="doRun"><block s="reportJSFunction"><list><l>degrees</l></list><l>this.turn(+degrees)</l></block><list><l>15</l></list></block></script><script x="20" y="223"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l><l>start</l><l>end</l></list><l>return new List(list.asArray().slice(+start - 1, +end))</l></block><list><block s="reportNewList"><list><l>foo</l><l>bar</l><l>baz</l><l>qux</l><l>frob</l><l>spam</l><l>garply</l></list></block><l>3</l><l>5</l></list></block></script><script x="20" y="292"><custom-block s="copy %l from %n to %n"><block s="reportNewList"><list><l>foo</l><l>bar</l><l>baz</l><l>qux</l><l>frob</l><l>spam</l><l>garply</l></list></block><l>3</l><l>5</l></custom-block></script><script x="20" y="329"><block s="clear"></block></script><script x="20" y="365"><block s="doRun"><block s="reportJSFunction"><list><l>size</l><l>level</l></list><l>var myself = this;&#xD;&#xD;function sierp (length, depth) {&#xD; if (depth) {&#xD; for (var i = 0; i &lt; 3; i +=1) {&#xD; sierp(length / 2, depth - 1);&#xD; myself.forward(length)&#xD; myself.turn(120);&#xD; }&#xD; } &#xD;}&#xD;&#xD;this.clear();&#xD;this.up();&#xD;this.gotoXY(0, 0);&#xD;this.down();&#xD;for (var i = 0; i &lt; 12; i += 1) {&#xD; sierp(+size, +level);&#xD; this.turn(30);&#xD;}&#xD;this.up();</l></block><list><l>200</l><l>5</l></list></block></script><script x="20" y="684"><custom-block s="label %txt of size %n"><l>Hello!</l><l>36</l></custom-block></script><script x="20" y="723"><custom-block s="JS map %repRing over %l"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l>hello </l><l></l></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>foo</l><l>bar</l><l>baz</l></list></block></custom-block></script><script x="20" y="766"><custom-block s="speak %s"><l>Hello, World!</l></custom-block></script></scripts></sprite></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="copy %&apos;list&apos; from %&apos;start&apos; to %&apos;end&apos;" type="reporter" category="lists"><header></header><code></code><inputs><input type="%l"></input><input type="%n">1</input><input type="%n">10</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l><l>start</l><l>end</l></list><l>return new List(list.asArray().slice(+start - 1, +end))</l></block><list><block var="list"/><block var="start"/><block var="end"/></list></block></block></script></block-definition><block-definition s="label %&apos;text&apos; of size %&apos;size&apos;" type="command" category="pen"><header></header><code></code><inputs><input type="%txt">Hello!</input><input type="%n">12</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>text</l><l>size</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD; context = stage.penTrails().getContext(&apos;2d&apos;),&#xD; rotation = radians(this.direction() - 90),&#xD; trans = new Point(&#xD; this.center().x - stage.left(),&#xD; this.center().y - stage.top()&#xD; ),&#xD; ide = this.parentThatIsA(IDE_Morph),&#xD; isWarped = this.Warped,&#xD; len,&#xD; pos;&#xD;&#xD;if (isWarped) {endWarp(); }&#xD;context.save();&#xD;context.font = size + &apos;px monospace&apos;;&#xD;context.textAlign = &apos;left&apos;;&#xD;context.textBaseline = &apos;alphabetic&apos;;&#xD;context.fillStyle = this.color.toString();&#xD;len = context.measureText(text).width;&#xD;trans = trans.multiplyBy(1 / stage.scale);&#xD;context.translate(trans.x, trans.y);&#xD;context.rotate(rotation);&#xD;context.fillText(text, 0, 0);&#xD;context.translate(-trans.x, -trans.y);&#xD;context.restore();&#xD;pos = new Point(&#xD; len * Math.sin(radians(this.direction())),&#xD; len * Math.cos(radians(this.direction())));&#xD;pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;this.gotoXY(pos.x, pos.y, false);&#xD;this.changed();&#xD;if (isWarped) {this.startWarp(); }&#xD;stage.changed();</l></block><list><block var="text"/><block var="size"/></list></block></script></block-definition><block-definition s="JS map %&apos;reporter&apos; over %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>reporter</l><l>list</l><l>process</l></list><l>// process.context.inputs:&#xD;// [0] - reporter&#xD;// [1] - list (original source)&#xD;// ---------------------------------&#xD;// [2..n] - result values (target)&#xD;&#xD;if (process.context.inputs.length - 2 === list.length()) {&#xD; process.returnValueToParentContext(&#xD; new List(process.context.inputs.slice(2))&#xD; );&#xD; return;&#xD;}&#xD;var next = list.at(process.context.inputs.length - 1);&#xD;process.pushContext();&#xD;process.evaluate(reporter, new List([next]));</l></block><list><block var="reporter"/><block var="list"/></list></block></block></script></block-definition><block-definition s="speak %&apos;text&apos;" type="command" category="sound"><header></header><code></code><inputs><input type="%s">Hello, World!</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>window.speechSynthesis.speak(new SpeechSynthesisUtterance(msg))</l></block><list><block var="text"/></list></block></script></block-definition></blocks><variables></variables></project>