pxt-microbit 6.1.10 → 7.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/built/block-tests.js +1 -1
- package/built/common-sim.d.ts +104 -0
- package/built/common-sim.js +405 -29
- package/built/editor.js +0 -1
- package/built/fieldeditors.js +64 -11
- package/built/sim.js +1 -0
- package/built/target.js +1 -1
- package/built/target.json +1 -1
- package/built/targetlight.json +1 -1
- package/built/theme.json +1 -1
- package/built/web/rtlsemantic.css +2 -2
- package/built/web/semantic.css +2 -2
- package/docs/device/reactive.md +36 -27
- package/docs/extensions/extension-gallery.md +1071 -0
- package/docs/extensions.md +41 -1038
- package/package.json +3 -3
- package/pxtarget.json +2 -1
- package/targetconfig.json +16 -0
- package/built/web/react-common-teachertool.css +0 -13
- package/built/web/rtlreact-common-teachertool.css +0 -13
package/built/common-sim.js
CHANGED
|
@@ -711,6 +711,349 @@ var pxsim;
|
|
|
711
711
|
loops.forever = pxsim.thread.forever;
|
|
712
712
|
})(loops = pxsim.loops || (pxsim.loops = {}));
|
|
713
713
|
})(pxsim || (pxsim = {}));
|
|
714
|
+
var pxsim;
|
|
715
|
+
(function (pxsim) {
|
|
716
|
+
var browserEvents;
|
|
717
|
+
(function (browserEvents) {
|
|
718
|
+
function mouseX() {
|
|
719
|
+
return pxsim.board().mouseState.mouseX();
|
|
720
|
+
}
|
|
721
|
+
browserEvents.mouseX = mouseX;
|
|
722
|
+
function mouseY() {
|
|
723
|
+
return pxsim.board().mouseState.mouseY();
|
|
724
|
+
}
|
|
725
|
+
browserEvents.mouseY = mouseY;
|
|
726
|
+
function wheelDx() {
|
|
727
|
+
return pxsim.board().mouseState.wheelDx();
|
|
728
|
+
}
|
|
729
|
+
browserEvents.wheelDx = wheelDx;
|
|
730
|
+
function wheelDy() {
|
|
731
|
+
return pxsim.board().mouseState.wheelDy();
|
|
732
|
+
}
|
|
733
|
+
browserEvents.wheelDy = wheelDy;
|
|
734
|
+
function wheelDz() {
|
|
735
|
+
return pxsim.board().mouseState.wheelDz();
|
|
736
|
+
}
|
|
737
|
+
browserEvents.wheelDz = wheelDz;
|
|
738
|
+
})(browserEvents = pxsim.browserEvents || (pxsim.browserEvents = {}));
|
|
739
|
+
})(pxsim || (pxsim = {}));
|
|
740
|
+
var pxsim;
|
|
741
|
+
(function (pxsim) {
|
|
742
|
+
var browserEvents;
|
|
743
|
+
(function (browserEvents) {
|
|
744
|
+
let Key;
|
|
745
|
+
(function (Key) {
|
|
746
|
+
Key[Key["Zero"] = 48] = "Zero";
|
|
747
|
+
Key[Key["One"] = 49] = "One";
|
|
748
|
+
Key[Key["Two"] = 50] = "Two";
|
|
749
|
+
Key[Key["Three"] = 51] = "Three";
|
|
750
|
+
Key[Key["Four"] = 52] = "Four";
|
|
751
|
+
Key[Key["Five"] = 53] = "Five";
|
|
752
|
+
Key[Key["Six"] = 54] = "Six";
|
|
753
|
+
Key[Key["Seven"] = 55] = "Seven";
|
|
754
|
+
Key[Key["Eight"] = 56] = "Eight";
|
|
755
|
+
Key[Key["Nine"] = 57] = "Nine";
|
|
756
|
+
Key[Key["BackTick"] = 192] = "BackTick";
|
|
757
|
+
Key[Key["Hyphen"] = 189] = "Hyphen";
|
|
758
|
+
Key[Key["Equals"] = 187] = "Equals";
|
|
759
|
+
Key[Key["Q"] = 81] = "Q";
|
|
760
|
+
Key[Key["W"] = 87] = "W";
|
|
761
|
+
Key[Key["E"] = 69] = "E";
|
|
762
|
+
Key[Key["R"] = 82] = "R";
|
|
763
|
+
Key[Key["T"] = 84] = "T";
|
|
764
|
+
Key[Key["Y"] = 89] = "Y";
|
|
765
|
+
Key[Key["U"] = 85] = "U";
|
|
766
|
+
Key[Key["I"] = 73] = "I";
|
|
767
|
+
Key[Key["O"] = 79] = "O";
|
|
768
|
+
Key[Key["P"] = 80] = "P";
|
|
769
|
+
Key[Key["OpenBracket"] = 219] = "OpenBracket";
|
|
770
|
+
Key[Key["CloseBracket"] = 221] = "CloseBracket";
|
|
771
|
+
Key[Key["BackSlash"] = 220] = "BackSlash";
|
|
772
|
+
Key[Key["A"] = 65] = "A";
|
|
773
|
+
Key[Key["S"] = 83] = "S";
|
|
774
|
+
Key[Key["D"] = 68] = "D";
|
|
775
|
+
Key[Key["F"] = 70] = "F";
|
|
776
|
+
Key[Key["G"] = 71] = "G";
|
|
777
|
+
Key[Key["H"] = 72] = "H";
|
|
778
|
+
Key[Key["Space"] = 32] = "Space";
|
|
779
|
+
Key[Key["PageUp"] = 33] = "PageUp";
|
|
780
|
+
Key[Key["J"] = 74] = "J";
|
|
781
|
+
Key[Key["K"] = 75] = "K";
|
|
782
|
+
Key[Key["L"] = 76] = "L";
|
|
783
|
+
Key[Key["SemiColon"] = 186] = "SemiColon";
|
|
784
|
+
Key[Key["Apostrophe"] = 222] = "Apostrophe";
|
|
785
|
+
Key[Key["Z"] = 90] = "Z";
|
|
786
|
+
Key[Key["X"] = 88] = "X";
|
|
787
|
+
Key[Key["C"] = 67] = "C";
|
|
788
|
+
Key[Key["V"] = 86] = "V";
|
|
789
|
+
Key[Key["B"] = 66] = "B";
|
|
790
|
+
Key[Key["N"] = 78] = "N";
|
|
791
|
+
Key[Key["M"] = 77] = "M";
|
|
792
|
+
Key[Key["Comma"] = 188] = "Comma";
|
|
793
|
+
Key[Key["Period"] = 190] = "Period";
|
|
794
|
+
Key[Key["ForwardSlash"] = 191] = "ForwardSlash";
|
|
795
|
+
Key[Key["Shift"] = 16] = "Shift";
|
|
796
|
+
Key[Key["Enter"] = 13] = "Enter";
|
|
797
|
+
Key[Key["CapsLock"] = 20] = "CapsLock";
|
|
798
|
+
Key[Key["Tab"] = 9] = "Tab";
|
|
799
|
+
Key[Key["Control"] = 17] = "Control";
|
|
800
|
+
Key[Key["Meta"] = 91] = "Meta";
|
|
801
|
+
Key[Key["Alt"] = 18] = "Alt";
|
|
802
|
+
Key[Key["ArrowUp"] = 38] = "ArrowUp";
|
|
803
|
+
Key[Key["ArrowDown"] = 40] = "ArrowDown";
|
|
804
|
+
Key[Key["ArrowLeft"] = 37] = "ArrowLeft";
|
|
805
|
+
Key[Key["ArrowRight"] = 39] = "ArrowRight";
|
|
806
|
+
Key[Key["PageDown"] = 34] = "PageDown";
|
|
807
|
+
Key[Key["End"] = 35] = "End";
|
|
808
|
+
Key[Key["Home"] = 36] = "Home";
|
|
809
|
+
})(Key = browserEvents.Key || (browserEvents.Key = {}));
|
|
810
|
+
function onKeyboardEvent(event, pressed) {
|
|
811
|
+
if (pressed) {
|
|
812
|
+
pxsim.board().bus.queue(6866, getValueForKey(event));
|
|
813
|
+
}
|
|
814
|
+
else {
|
|
815
|
+
pxsim.board().bus.queue(6867, getValueForKey(event));
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
browserEvents.onKeyboardEvent = onKeyboardEvent;
|
|
819
|
+
function getValueForKey(event) {
|
|
820
|
+
switch (event.key) {
|
|
821
|
+
case "0":
|
|
822
|
+
case ")":
|
|
823
|
+
return Key.Zero;
|
|
824
|
+
case "1":
|
|
825
|
+
case "!":
|
|
826
|
+
return Key.One;
|
|
827
|
+
case "2":
|
|
828
|
+
case "@":
|
|
829
|
+
return Key.Two;
|
|
830
|
+
case "3":
|
|
831
|
+
case "#":
|
|
832
|
+
return Key.Three;
|
|
833
|
+
case "4":
|
|
834
|
+
case "$":
|
|
835
|
+
return Key.Four;
|
|
836
|
+
case "5":
|
|
837
|
+
case "%":
|
|
838
|
+
return Key.Five;
|
|
839
|
+
case "6":
|
|
840
|
+
case "^":
|
|
841
|
+
return Key.Six;
|
|
842
|
+
case "7":
|
|
843
|
+
case "&":
|
|
844
|
+
return Key.Seven;
|
|
845
|
+
case "8":
|
|
846
|
+
case "*":
|
|
847
|
+
return Key.Eight;
|
|
848
|
+
case "9":
|
|
849
|
+
case "(":
|
|
850
|
+
return Key.Nine;
|
|
851
|
+
case "`":
|
|
852
|
+
case "~":
|
|
853
|
+
return Key.BackTick;
|
|
854
|
+
case "-":
|
|
855
|
+
case "_":
|
|
856
|
+
return Key.Hyphen;
|
|
857
|
+
case "=":
|
|
858
|
+
case "+":
|
|
859
|
+
return Key.Equals;
|
|
860
|
+
case "Q":
|
|
861
|
+
case "q":
|
|
862
|
+
return Key.Q;
|
|
863
|
+
case "W":
|
|
864
|
+
case "w":
|
|
865
|
+
return Key.W;
|
|
866
|
+
case "E":
|
|
867
|
+
case "e":
|
|
868
|
+
return Key.E;
|
|
869
|
+
case "R":
|
|
870
|
+
case "r":
|
|
871
|
+
return Key.R;
|
|
872
|
+
case "T":
|
|
873
|
+
case "t":
|
|
874
|
+
return Key.T;
|
|
875
|
+
case "Y":
|
|
876
|
+
case "y":
|
|
877
|
+
return Key.Y;
|
|
878
|
+
case "U":
|
|
879
|
+
case "u":
|
|
880
|
+
return Key.U;
|
|
881
|
+
case "I":
|
|
882
|
+
case "i":
|
|
883
|
+
return Key.I;
|
|
884
|
+
case "O":
|
|
885
|
+
case "o":
|
|
886
|
+
return Key.O;
|
|
887
|
+
case "P":
|
|
888
|
+
case "p":
|
|
889
|
+
return Key.P;
|
|
890
|
+
case "[":
|
|
891
|
+
case "{":
|
|
892
|
+
return Key.OpenBracket;
|
|
893
|
+
case "]":
|
|
894
|
+
case "}":
|
|
895
|
+
return Key.CloseBracket;
|
|
896
|
+
case "\\":
|
|
897
|
+
case "|":
|
|
898
|
+
return Key.BackSlash;
|
|
899
|
+
case "A":
|
|
900
|
+
case "a":
|
|
901
|
+
return Key.A;
|
|
902
|
+
case "S":
|
|
903
|
+
case "s":
|
|
904
|
+
return Key.S;
|
|
905
|
+
case "D":
|
|
906
|
+
case "d":
|
|
907
|
+
return Key.D;
|
|
908
|
+
case "F":
|
|
909
|
+
case "f":
|
|
910
|
+
return Key.F;
|
|
911
|
+
case "G":
|
|
912
|
+
case "g":
|
|
913
|
+
return Key.G;
|
|
914
|
+
case "H":
|
|
915
|
+
case "h":
|
|
916
|
+
return Key.H;
|
|
917
|
+
case " ":
|
|
918
|
+
return Key.Space;
|
|
919
|
+
case "PageUp":
|
|
920
|
+
return Key.PageUp;
|
|
921
|
+
case "J":
|
|
922
|
+
case "j":
|
|
923
|
+
return Key.J;
|
|
924
|
+
case "K":
|
|
925
|
+
case "k":
|
|
926
|
+
return Key.K;
|
|
927
|
+
case "L":
|
|
928
|
+
case "l":
|
|
929
|
+
return Key.L;
|
|
930
|
+
case ";":
|
|
931
|
+
case ":":
|
|
932
|
+
return Key.SemiColon;
|
|
933
|
+
case "'":
|
|
934
|
+
case "\"":
|
|
935
|
+
return Key.Apostrophe;
|
|
936
|
+
case "Z":
|
|
937
|
+
case "z":
|
|
938
|
+
return Key.Z;
|
|
939
|
+
case "X":
|
|
940
|
+
case "x":
|
|
941
|
+
return Key.X;
|
|
942
|
+
case "C":
|
|
943
|
+
case "c":
|
|
944
|
+
return Key.C;
|
|
945
|
+
case "V":
|
|
946
|
+
case "v":
|
|
947
|
+
return Key.V;
|
|
948
|
+
case "B":
|
|
949
|
+
case "b":
|
|
950
|
+
return Key.B;
|
|
951
|
+
case "N":
|
|
952
|
+
case "n":
|
|
953
|
+
return Key.N;
|
|
954
|
+
case "M":
|
|
955
|
+
case "m":
|
|
956
|
+
return Key.M;
|
|
957
|
+
case ",":
|
|
958
|
+
case "<":
|
|
959
|
+
return Key.Comma;
|
|
960
|
+
case ".":
|
|
961
|
+
case ">":
|
|
962
|
+
return Key.Period;
|
|
963
|
+
case "/":
|
|
964
|
+
case "?":
|
|
965
|
+
return Key.ForwardSlash;
|
|
966
|
+
case "Shift":
|
|
967
|
+
return Key.Shift;
|
|
968
|
+
case "Enter":
|
|
969
|
+
return Key.Enter;
|
|
970
|
+
case "CapsLock":
|
|
971
|
+
return Key.CapsLock;
|
|
972
|
+
case "Tab":
|
|
973
|
+
return Key.Tab;
|
|
974
|
+
case "Control":
|
|
975
|
+
return Key.Control;
|
|
976
|
+
case "Meta":
|
|
977
|
+
return Key.Meta;
|
|
978
|
+
case "Alt":
|
|
979
|
+
return Key.Alt;
|
|
980
|
+
case "ArrowUp":
|
|
981
|
+
return Key.ArrowUp;
|
|
982
|
+
case "ArrowDown":
|
|
983
|
+
return Key.ArrowDown;
|
|
984
|
+
case "ArrowLeft":
|
|
985
|
+
return Key.ArrowLeft;
|
|
986
|
+
case "ArrowRight":
|
|
987
|
+
return Key.ArrowRight;
|
|
988
|
+
case "PageDown":
|
|
989
|
+
return Key.PageDown;
|
|
990
|
+
case "End":
|
|
991
|
+
return Key.End;
|
|
992
|
+
case "Home":
|
|
993
|
+
return Key.Home;
|
|
994
|
+
default:
|
|
995
|
+
return 0;
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
browserEvents.getValueForKey = getValueForKey;
|
|
999
|
+
})(browserEvents = pxsim.browserEvents || (pxsim.browserEvents = {}));
|
|
1000
|
+
})(pxsim || (pxsim = {}));
|
|
1001
|
+
var pxsim;
|
|
1002
|
+
(function (pxsim) {
|
|
1003
|
+
var browserEvents;
|
|
1004
|
+
(function (browserEvents) {
|
|
1005
|
+
const THROTTLE_INTERVAL = 50;
|
|
1006
|
+
class MouseState {
|
|
1007
|
+
constructor() {
|
|
1008
|
+
this.onMove = pxsim.U.throttle(() => {
|
|
1009
|
+
pxsim.board().bus.queue(6859, 0);
|
|
1010
|
+
}, THROTTLE_INTERVAL, true);
|
|
1011
|
+
this.onWheel = pxsim.U.throttle(() => {
|
|
1012
|
+
pxsim.board().bus.queue(6865, 0);
|
|
1013
|
+
}, THROTTLE_INTERVAL, true);
|
|
1014
|
+
}
|
|
1015
|
+
onEvent(event, x, y) {
|
|
1016
|
+
this.x = x;
|
|
1017
|
+
this.y = y;
|
|
1018
|
+
const events = [
|
|
1019
|
+
"pointerdown",
|
|
1020
|
+
"pointerup",
|
|
1021
|
+
"pointermove",
|
|
1022
|
+
"pointerleave",
|
|
1023
|
+
"pointerenter",
|
|
1024
|
+
"pointercancel",
|
|
1025
|
+
"pointerover",
|
|
1026
|
+
"pointerout",
|
|
1027
|
+
];
|
|
1028
|
+
// We add 1 to the button here because the left button is 0 and
|
|
1029
|
+
// that's used as a wildcard in our event bus
|
|
1030
|
+
pxsim.board().bus.queue(6857 + events.indexOf(event.type), (event.button || 0) + 1);
|
|
1031
|
+
}
|
|
1032
|
+
onWheelEvent(dx, dy, dz) {
|
|
1033
|
+
this.dx = dx;
|
|
1034
|
+
this.dy = dy;
|
|
1035
|
+
this.dz = dz;
|
|
1036
|
+
this.onWheel();
|
|
1037
|
+
}
|
|
1038
|
+
mouseX() {
|
|
1039
|
+
return this.x || 0;
|
|
1040
|
+
}
|
|
1041
|
+
mouseY() {
|
|
1042
|
+
return this.y || 0;
|
|
1043
|
+
}
|
|
1044
|
+
wheelDx() {
|
|
1045
|
+
return this.dx || 0;
|
|
1046
|
+
}
|
|
1047
|
+
wheelDy() {
|
|
1048
|
+
return this.dy || 0;
|
|
1049
|
+
}
|
|
1050
|
+
wheelDz() {
|
|
1051
|
+
return this.dz || 0;
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
browserEvents.MouseState = MouseState;
|
|
1055
|
+
})(browserEvents = pxsim.browserEvents || (pxsim.browserEvents = {}));
|
|
1056
|
+
})(pxsim || (pxsim = {}));
|
|
714
1057
|
/// <reference path="../../core/dal.d.ts"/>
|
|
715
1058
|
var pxsim;
|
|
716
1059
|
(function (pxsim) {
|
|
@@ -3179,6 +3522,7 @@ var pxsim;
|
|
|
3179
3522
|
input.setLoudSoundThreshold = setLoudSoundThreshold;
|
|
3180
3523
|
})(input = pxsim.input || (pxsim.input = {}));
|
|
3181
3524
|
})(pxsim || (pxsim = {}));
|
|
3525
|
+
/// <reference path="../../core/sim/analogSensor.ts" />
|
|
3182
3526
|
var pxsim;
|
|
3183
3527
|
(function (pxsim) {
|
|
3184
3528
|
class MicrophoneState extends pxsim.AnalogSensorState {
|
|
@@ -3792,7 +4136,9 @@ var pxsim;
|
|
|
3792
4136
|
var ImageMethods;
|
|
3793
4137
|
(function (ImageMethods) {
|
|
3794
4138
|
function XX(x) { return (x << 16) >> 16; }
|
|
4139
|
+
ImageMethods.XX = XX;
|
|
3795
4140
|
function YY(x) { return x >> 16; }
|
|
4141
|
+
ImageMethods.YY = YY;
|
|
3796
4142
|
function width(img) { return img._width; }
|
|
3797
4143
|
ImageMethods.width = width;
|
|
3798
4144
|
function height(img) { return img._height; }
|
|
@@ -4236,57 +4582,58 @@ var pxsim;
|
|
|
4236
4582
|
}
|
|
4237
4583
|
ImageMethods.drawLine = drawLine;
|
|
4238
4584
|
function drawIcon(img, icon, x, y, color) {
|
|
4239
|
-
const
|
|
4585
|
+
const src = icon.data;
|
|
4240
4586
|
if (!pxsim.image.isValidImage(icon))
|
|
4241
4587
|
return;
|
|
4242
|
-
if (
|
|
4588
|
+
if (src[1] != 1)
|
|
4243
4589
|
return; // only mono
|
|
4244
|
-
let
|
|
4245
|
-
let
|
|
4246
|
-
let byteH = pxsim.image.byteHeight(
|
|
4590
|
+
let width = pxsim.image.bufW(src);
|
|
4591
|
+
let height = pxsim.image.bufH(src);
|
|
4592
|
+
let byteH = pxsim.image.byteHeight(height, 1);
|
|
4247
4593
|
x |= 0;
|
|
4248
4594
|
y |= 0;
|
|
4249
|
-
const
|
|
4250
|
-
const
|
|
4251
|
-
if (x +
|
|
4595
|
+
const destHeight = img._height;
|
|
4596
|
+
const destWidth = img._width;
|
|
4597
|
+
if (x + width <= 0)
|
|
4252
4598
|
return;
|
|
4253
|
-
if (x >=
|
|
4599
|
+
if (x >= destWidth)
|
|
4254
4600
|
return;
|
|
4255
|
-
if (y +
|
|
4601
|
+
if (y + height <= 0)
|
|
4256
4602
|
return;
|
|
4257
|
-
if (y >=
|
|
4603
|
+
if (y >= destHeight)
|
|
4258
4604
|
return;
|
|
4259
4605
|
img.makeWritable();
|
|
4260
|
-
let
|
|
4606
|
+
let srcPointer = 8;
|
|
4261
4607
|
color = img.color(color);
|
|
4262
4608
|
const screen = img.data;
|
|
4263
|
-
for (let i = 0; i <
|
|
4264
|
-
let
|
|
4265
|
-
if (0 <=
|
|
4266
|
-
let
|
|
4267
|
-
let
|
|
4268
|
-
let
|
|
4269
|
-
let
|
|
4609
|
+
for (let i = 0; i < width; ++i) {
|
|
4610
|
+
let destX = x + i;
|
|
4611
|
+
if (0 <= destX && destX < destWidth) {
|
|
4612
|
+
let destIndex = destX + y * destWidth;
|
|
4613
|
+
let srcIndex = srcPointer;
|
|
4614
|
+
let destY = y;
|
|
4615
|
+
let destEnd = Math.min(destHeight, height + y);
|
|
4270
4616
|
if (y < 0) {
|
|
4271
|
-
|
|
4272
|
-
|
|
4617
|
+
srcIndex += ((-y) >> 3);
|
|
4618
|
+
destY += ((-y) >> 3) * 8;
|
|
4619
|
+
destIndex += (destY - y) * destWidth;
|
|
4273
4620
|
}
|
|
4274
4621
|
let mask = 0x01;
|
|
4275
|
-
let
|
|
4276
|
-
while (
|
|
4277
|
-
if (
|
|
4278
|
-
screen[
|
|
4622
|
+
let srcByte = src[srcIndex++];
|
|
4623
|
+
while (destY < destEnd) {
|
|
4624
|
+
if (destY >= 0 && (srcByte & mask)) {
|
|
4625
|
+
screen[destIndex] = color;
|
|
4279
4626
|
}
|
|
4280
4627
|
mask <<= 1;
|
|
4281
4628
|
if (mask == 0x100) {
|
|
4282
4629
|
mask = 0x01;
|
|
4283
|
-
|
|
4630
|
+
srcByte = src[srcIndex++];
|
|
4284
4631
|
}
|
|
4285
|
-
|
|
4286
|
-
|
|
4632
|
+
destIndex += destWidth;
|
|
4633
|
+
destY++;
|
|
4287
4634
|
}
|
|
4288
4635
|
}
|
|
4289
|
-
|
|
4636
|
+
srcPointer += byteH;
|
|
4290
4637
|
}
|
|
4291
4638
|
}
|
|
4292
4639
|
ImageMethods.drawIcon = drawIcon;
|
|
@@ -5129,6 +5476,35 @@ var pxsim;
|
|
|
5129
5476
|
settings._list = _list;
|
|
5130
5477
|
})(settings = pxsim.settings || (pxsim.settings = {}));
|
|
5131
5478
|
})(pxsim || (pxsim = {}));
|
|
5479
|
+
/// <reference path="../../screen/sim/image.ts" />
|
|
5480
|
+
var pxsim;
|
|
5481
|
+
(function (pxsim) {
|
|
5482
|
+
var ShaderMethods;
|
|
5483
|
+
(function (ShaderMethods) {
|
|
5484
|
+
function _mergeImage(dst, src, xy) {
|
|
5485
|
+
mergeImage(dst, src, pxsim.ImageMethods.XX(xy), pxsim.ImageMethods.YY(xy));
|
|
5486
|
+
}
|
|
5487
|
+
ShaderMethods._mergeImage = _mergeImage;
|
|
5488
|
+
function mergeImage(dst, src, x0, y0) {
|
|
5489
|
+
for (let x = 0; x < src._width; x++) {
|
|
5490
|
+
for (let y = 0; y < src._height; y++) {
|
|
5491
|
+
pxsim.ImageMethods.setPixel(dst, x0 + x, y0 + y, Math.min(pxsim.ImageMethods.getPixel(dst, x0 + x, y0 + y), pxsim.ImageMethods.getPixel(src, x, y)));
|
|
5492
|
+
}
|
|
5493
|
+
}
|
|
5494
|
+
}
|
|
5495
|
+
function _mapImage(dst, src, xy, buf) {
|
|
5496
|
+
mapImage(dst, src, pxsim.ImageMethods.XX(xy), pxsim.ImageMethods.YY(xy), buf);
|
|
5497
|
+
}
|
|
5498
|
+
ShaderMethods._mapImage = _mapImage;
|
|
5499
|
+
function mapImage(dst, src, x0, y0, buf) {
|
|
5500
|
+
for (let x = 0; x < src._width; x++) {
|
|
5501
|
+
for (let y = 0; y < src._height; y++) {
|
|
5502
|
+
pxsim.ImageMethods.setPixel(dst, x0 + x, y0 + y, buf.data[pxsim.ImageMethods.getPixel(dst, x0 + x, y0 + y) + (pxsim.ImageMethods.getPixel(src, x, y) << 4)]);
|
|
5503
|
+
}
|
|
5504
|
+
}
|
|
5505
|
+
}
|
|
5506
|
+
})(ShaderMethods = pxsim.ShaderMethods || (pxsim.ShaderMethods = {}));
|
|
5507
|
+
})(pxsim || (pxsim = {}));
|
|
5132
5508
|
var pxsim;
|
|
5133
5509
|
(function (pxsim) {
|
|
5134
5510
|
class StorageState {
|
package/built/editor.js
CHANGED
|
@@ -3092,7 +3092,6 @@ exports.showProgramTooLargeErrorAsync = showProgramTooLargeErrorAsync;
|
|
|
3092
3092
|
"use strict";
|
|
3093
3093
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3094
3094
|
/// <reference path="../node_modules/pxt-core/localtypings/pxtarget.d.ts" />
|
|
3095
|
-
/// <reference path="../node_modules/pxt-core/built/pxtblocks.d.ts" />
|
|
3096
3095
|
/// <reference path="../node_modules/pxt-core/built/pxtcompiler.d.ts" />
|
|
3097
3096
|
/// <reference path="../node_modules/pxt-core/built/pxtlib.d.ts" />
|
|
3098
3097
|
/// <reference path="../node_modules/pxt-core/localtypings/pxteditor.d.ts" />
|
package/built/fieldeditors.js
CHANGED
|
@@ -17,27 +17,80 @@ pxt.editor.initFieldExtensionsAsync = function (opts) {
|
|
|
17
17
|
|
|
18
18
|
},{"./field_gestures":2}],2:[function(require,module,exports){
|
|
19
19
|
"use strict";
|
|
20
|
-
/// <reference path="../node_modules/pxt-core/localtypings/
|
|
21
|
-
/// <reference path="../node_modules/pxt-core/built/pxtblocks.d.ts"/>
|
|
22
|
-
/// <reference path="../node_modules/pxt-core/built/pxtsim.d.ts"/>
|
|
20
|
+
/// <reference path="../node_modules/pxt-core/localtypings/pxtblockly.d.ts"/>
|
|
23
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
22
|
exports.FieldGestures = void 0;
|
|
23
|
+
const pxtblockly = pxt.blocks.requirePxtBlockly();
|
|
24
|
+
const Blockly = pxt.blocks.requireBlockly();
|
|
25
25
|
class FieldGestures extends pxtblockly.FieldImages {
|
|
26
26
|
constructor(text, options, validator) {
|
|
27
27
|
super(text, options, validator);
|
|
28
28
|
this.isFieldCustom_ = true;
|
|
29
|
-
this.buttonClick_ = function (e) {
|
|
30
|
-
let value = e.target.getAttribute('data-value');
|
|
31
|
-
this.setValue(value);
|
|
32
|
-
Blockly.DropDownDiv.hide();
|
|
33
|
-
};
|
|
34
29
|
this.columns_ = parseInt(options.columns) || 4;
|
|
35
30
|
this.width_ = parseInt(options.width) || 350;
|
|
36
31
|
this.addLabel_ = true;
|
|
37
|
-
this.renderSelectedImage_ = Blockly.FieldDropdown.prototype.renderSelectedText_;
|
|
38
|
-
this.updateSize_ = Blockly.Field.prototype.updateSize_;
|
|
39
32
|
}
|
|
40
|
-
|
|
33
|
+
render_() {
|
|
34
|
+
if (this.addLabel_) {
|
|
35
|
+
this.renderSelectedText_();
|
|
36
|
+
this.positionBorderRect_();
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
super.render_();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Renders the selected option, which must be text. */
|
|
43
|
+
renderSelectedText_() {
|
|
44
|
+
// Retrieves the selected option to display through getText_.
|
|
45
|
+
this.getTextContent().nodeValue = this.getDisplayText_();
|
|
46
|
+
const textElement = this.getTextElement();
|
|
47
|
+
Blockly.utils.dom.addClass(textElement, 'blocklyDropdownText');
|
|
48
|
+
textElement.setAttribute('text-anchor', 'start');
|
|
49
|
+
// Height and width include the border rect.
|
|
50
|
+
const hasBorder = !!this.borderRect_;
|
|
51
|
+
const height = Math.max(hasBorder ? this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0, this.getConstants().FIELD_TEXT_HEIGHT);
|
|
52
|
+
const textWidth = Blockly.utils.dom.getFastTextWidth(this.getTextElement(), this.getConstants().FIELD_TEXT_FONTSIZE, this.getConstants().FIELD_TEXT_FONTWEIGHT, this.getConstants().FIELD_TEXT_FONTFAMILY);
|
|
53
|
+
const xPadding = hasBorder
|
|
54
|
+
? this.getConstants().FIELD_BORDER_RECT_X_PADDING
|
|
55
|
+
: 0;
|
|
56
|
+
let arrowWidth = 0;
|
|
57
|
+
if (this.getSvgArrow()) {
|
|
58
|
+
arrowWidth = this.positionSVGArrow_(textWidth + xPadding, height / 2 - this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
|
|
59
|
+
}
|
|
60
|
+
this.size_.width = textWidth + arrowWidth + xPadding * 2;
|
|
61
|
+
this.size_.height = height;
|
|
62
|
+
this.positionTextElement_(xPadding, textWidth);
|
|
63
|
+
}
|
|
64
|
+
positionSVGArrow_(x, y) {
|
|
65
|
+
const svgArrow = this.getSvgArrow();
|
|
66
|
+
if (!svgArrow) {
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
const block = this.getSourceBlock();
|
|
70
|
+
const hasBorder = !!this.borderRect_;
|
|
71
|
+
const xPadding = hasBorder
|
|
72
|
+
? this.getConstants().FIELD_BORDER_RECT_X_PADDING
|
|
73
|
+
: 0;
|
|
74
|
+
const textPadding = this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING;
|
|
75
|
+
const svgArrowSize = this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;
|
|
76
|
+
const arrowX = block.RTL ? xPadding : x + textPadding;
|
|
77
|
+
svgArrow.setAttribute('transform', 'translate(' + arrowX + ',' + y + ')');
|
|
78
|
+
return svgArrowSize + textPadding;
|
|
79
|
+
}
|
|
80
|
+
// This hack exists because svgArrow is private in Blockly's field dropdown.
|
|
81
|
+
// It should always be the last image element in the field group
|
|
82
|
+
getSvgArrow() {
|
|
83
|
+
if (this.fieldGroup_) {
|
|
84
|
+
const children = this.fieldGroup_.children;
|
|
85
|
+
let lastImage;
|
|
86
|
+
for (let i = 0; i < children.length; i++) {
|
|
87
|
+
if (children.item(i).tagName.toLowerCase() === "image") {
|
|
88
|
+
lastImage = children.item(i);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return lastImage;
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
41
94
|
}
|
|
42
95
|
}
|
|
43
96
|
exports.FieldGestures = FieldGestures;
|
package/built/sim.js
CHANGED
|
@@ -4542,6 +4542,7 @@ var pxsim;
|
|
|
4542
4542
|
}
|
|
4543
4543
|
pxsim.AnalogSensorState = AnalogSensorState;
|
|
4544
4544
|
})(pxsim || (pxsim = {}));
|
|
4545
|
+
/// <reference path="../../core/sim/analogSensor.ts" />
|
|
4545
4546
|
var pxsim;
|
|
4546
4547
|
(function (pxsim) {
|
|
4547
4548
|
class MicrophoneState extends pxsim.AnalogSensorState {
|