separated extension primitives from extension dropdown menus

snap7
jmoenig 2021-06-18 18:41:02 +02:00
rodzic a55bd02eeb
commit 990911b295
5 zmienionych plików z 55 dodań i 51 usunięć

Wyświetl plik

@ -14,6 +14,7 @@
* tweaked make-variables library * tweaked make-variables library
* tweaked strings library * tweaked strings library
* extensions: added color library dropdown menu * extensions: added color library dropdown menu
* blocks, threads, extensions: separated extension primitives from extension dropdown menus
### 2021-06-17 ### 2021-06-17
* extensions: added APL extension primitives * extensions: added APL extension primitives

Wyświetl plik

@ -8,8 +8,8 @@
<script src="src/morphic.js?version=2021-02-10"></script> <script src="src/morphic.js?version=2021-02-10"></script>
<script src="src/symbols.js?version=2021-03-03"></script> <script src="src/symbols.js?version=2021-03-03"></script>
<script src="src/widgets.js?version=2021-01-05"></script> <script src="src/widgets.js?version=2021-01-05"></script>
<script src="src/blocks.js?version=2021-06-15"></script> <script src="src/blocks.js?version=2021-06-18"></script>
<script src="src/threads.js?version=2021-06-17"></script> <script src="src/threads.js?version=2021-06-18"></script>
<script src="src/objects.js?version=2021-06-14"></script> <script src="src/objects.js?version=2021-06-14"></script>
<script src="src/gui.js?version=2021-06-14"></script> <script src="src/gui.js?version=2021-06-14"></script>
<script src="src/paint.js?version=2020-05-17"></script> <script src="src/paint.js?version=2020-05-17"></script>

Wyświetl plik

@ -158,7 +158,7 @@ CustomCommandBlockMorph, ToggleButtonMorph, DialMorph, SnapExtensions*/
// Global stuff //////////////////////////////////////////////////////// // Global stuff ////////////////////////////////////////////////////////
modules.blocks = '2021-June-15'; modules.blocks = '2021-June-18';
var SyntaxElementMorph; var SyntaxElementMorph;
var BlockMorph; var BlockMorph;
@ -9329,7 +9329,7 @@ InputSlotMorph.prototype.messagesReceivedMenu = function (searching) {
InputSlotMorph.prototype.primitivesMenu = function () { InputSlotMorph.prototype.primitivesMenu = function () {
var dict = {}, var dict = {},
allNames = Array.from(SnapExtensions.keys()); allNames = Array.from(SnapExtensions.primitives.keys());
allNames.sort().forEach(name => allNames.sort().forEach(name =>
dict[name] = name dict[name] = name

Wyświetl plik

@ -34,7 +34,10 @@ modules.extensions = '2021-June-18';
// Global stuff // Global stuff
var SnapExtensions = new Map(); var SnapExtensions = {
primitives: new Map(),
menus: new Map()
};
/* /*
SnapExtensions is a global dictionary of named functions which appear SnapExtensions is a global dictionary of named functions which appear
@ -62,42 +65,42 @@ var SnapExtensions = new Map();
// errors & exceptions (err_): // errors & exceptions (err_):
SnapExtensions.set( SnapExtensions.primitives.set(
'err_error(msg)', 'err_error(msg)',
function (msg) { function (msg) {
throw new Error(msg); throw new Error(msg);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'err_try(cmd, catch, err)', 'err_try(cmd, catch, err)',
function (action, exception, errVarName, proc) { function (action, exception, errVarName, proc) {
proc.tryCatch(action, exception, errVarName); proc.tryCatch(action, exception, errVarName);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'err_reset', 'err_reset',
function (proc) { function (proc) {
proc.resetErrorHandling(); proc.resetErrorHandling();
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'err_ignore', 'err_ignore',
nop nop
); );
// list utils (lst_): // list utils (lst_):
SnapExtensions.set( SnapExtensions.primitives.set(
'lst_sort(list, fn)', 'lst_sort(list, fn)',
function (data, fn, proc) { function (data, fn, proc) {
return proc.reportAtomicSort(data, fn); return proc.reportAtomicSort(data, fn);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'lst_linked(list)', 'lst_linked(list)',
function (data) { function (data) {
return data.isLinked; return data.isLinked;
@ -106,14 +109,14 @@ SnapExtensions.set(
// text utils (txt_): // text utils (txt_):
SnapExtensions.set( SnapExtensions.primitives.set(
'txt_lowercase(txt)', 'txt_lowercase(txt)',
function (txt) { function (txt) {
return txt.toLowerCase(); return txt.toLowerCase();
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'txt_indexof(sub, txt)', 'txt_indexof(sub, txt)',
function (sub, txt) { function (sub, txt) {
return txt.indexOf(sub) + 1; return txt.indexOf(sub) + 1;
@ -122,7 +125,7 @@ SnapExtensions.set(
// data sciene & frequency distribution analysis (dta_): // data sciene & frequency distribution analysis (dta_):
SnapExtensions.set( SnapExtensions.primitives.set(
'dta_analyze(list)', 'dta_analyze(list)',
function (list) { function (list) {
var dict = new Map(), var dict = new Map(),
@ -144,14 +147,14 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'dta_group(list, fn)', 'dta_group(list, fn)',
function (data, fn, proc) { function (data, fn, proc) {
return proc.reportAtomicGroup(data, fn); return proc.reportAtomicGroup(data, fn);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'dta_transpose(list)', 'dta_transpose(list)',
function (data, proc) { function (data, proc) {
proc.assertType(data, 'list'); proc.assertType(data, 'list');
@ -159,7 +162,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'dta_crossproduct(list)', 'dta_crossproduct(list)',
function (data, proc) { function (data, proc) {
proc.assertType(data, 'list'); proc.assertType(data, 'list');
@ -169,63 +172,63 @@ SnapExtensions.set(
// World map (map_): // World map (map_):
SnapExtensions.set( SnapExtensions.primitives.set(
'map_zoom', 'map_zoom',
function () { function () {
return this.parentThatIsA(StageMorph).worldMap.zoom; return this.parentThatIsA(StageMorph).worldMap.zoom;
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_zoom(n)', 'map_zoom(n)',
function (num) { function (num) {
this.parentThatIsA(StageMorph).worldMap.setZoom(num); this.parentThatIsA(StageMorph).worldMap.setZoom(num);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_lon(x)', 'map_lon(x)',
function (x) { function (x) {
return this.parentThatIsA(StageMorph).worldMap.lonFromSnapX(x); return this.parentThatIsA(StageMorph).worldMap.lonFromSnapX(x);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_lat(y)', 'map_lat(y)',
function (y) { function (y) {
return this.parentThatIsA(StageMorph).worldMap.latFromSnapY(y); return this.parentThatIsA(StageMorph).worldMap.latFromSnapY(y);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_view(lon, lat)', 'map_view(lon, lat)',
function (lon, lat) { function (lon, lat) {
this.parentThatIsA(StageMorph).worldMap.setView(lon, lat); this.parentThatIsA(StageMorph).worldMap.setView(lon, lat);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_y(lat)', 'map_y(lat)',
function (lat) { function (lat) {
return this.parentThatIsA(StageMorph).worldMap.snapYfromLat(lat); return this.parentThatIsA(StageMorph).worldMap.snapYfromLat(lat);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_x(lon)', 'map_x(lon)',
function (lon) { function (lon) {
return this.parentThatIsA(StageMorph).worldMap.snapXfromLon(lon); return this.parentThatIsA(StageMorph).worldMap.snapXfromLon(lon);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_pan(x, y)', 'map_pan(x, y)',
function (x, y) { function (x, y) {
this.parentThatIsA(StageMorph).worldMap.panBy(x, y); this.parentThatIsA(StageMorph).worldMap.panBy(x, y);
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_dist(lat1, lon1, lat2, lon2)', 'map_dist(lat1, lon1, lat2, lon2)',
function (lat1, lon1, lat2, lon2) { function (lat1, lon1, lat2, lon2) {
return this.parentThatIsA(StageMorph).worldMap.distanceInKm( return this.parentThatIsA(StageMorph).worldMap.distanceInKm(
@ -237,7 +240,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_update', 'map_update',
function () { function () {
var stage = this.parentThatIsA(StageMorph); var stage = this.parentThatIsA(StageMorph);
@ -246,14 +249,14 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_loaded', 'map_loaded',
function () { function () {
return !this.parentThatIsA(StageMorph).worldMap.loading; return !this.parentThatIsA(StageMorph).worldMap.loading;
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_costume', 'map_costume',
function () { function () {
return new Costume( return new Costume(
@ -263,7 +266,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'map_style(name)', 'map_style(name)',
function (name) { function (name) {
this.parentThatIsA(StageMorph).worldMap.setHost(name); this.parentThatIsA(StageMorph).worldMap.setHost(name);
@ -272,7 +275,7 @@ SnapExtensions.set(
// text-to-speech (tts_): // text-to-speech (tts_):
SnapExtensions.set( SnapExtensions.primitives.set(
'tts_speak(txt, lang, pitch, rate)', 'tts_speak(txt, lang, pitch, rate)',
function (msg, accent, pitch, rate) { function (msg, accent, pitch, rate) {
var utter = new SpeechSynthesisUtterance(msg), var utter = new SpeechSynthesisUtterance(msg),
@ -288,7 +291,7 @@ SnapExtensions.set(
// XHR: // XHR:
SnapExtensions.set( SnapExtensions.primitives.set(
'xhr_request(mth, url, dta, hdrs)', 'xhr_request(mth, url, dta, hdrs)',
function (method, url, data, headers, proc) { function (method, url, data, headers, proc) {
var response, i, header; var response, i, header;
@ -317,7 +320,7 @@ SnapExtensions.set(
// Geo-location (geo_): // Geo-location (geo_):
SnapExtensions.set( SnapExtensions.primitives.set(
'geo_location(acc?)', 'geo_location(acc?)',
function (includeAccuracy) { function (includeAccuracy) {
var crd = new List(), var crd = new List(),
@ -354,7 +357,7 @@ SnapExtensions.set(
// MediaComp (mda_) // MediaComp (mda_)
SnapExtensions.set( SnapExtensions.primitives.set(
'mda_snap', 'mda_snap',
function () { function () {
var camDialog, var camDialog,
@ -374,7 +377,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'mda_record', 'mda_record',
function () { function () {
var soundRecorder, var soundRecorder,
@ -403,7 +406,7 @@ SnapExtensions.set(
// Database (db_): // Database (db_):
SnapExtensions.set( SnapExtensions.primitives.set(
'db_store(key, val)', 'db_store(key, val)',
function (key, value, proc) { function (key, value, proc) {
proc.assertType(key, ['text', 'number']); proc.assertType(key, ['text', 'number']);
@ -412,7 +415,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'db_getall', 'db_getall',
function () { function () {
var str = window.localStorage, var str = window.localStorage,
@ -430,7 +433,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'db_remove(key)', 'db_remove(key)',
function (key, proc) { function (key, proc) {
proc.assertType(key, ['text', 'number']); proc.assertType(key, ['text', 'number']);
@ -438,7 +441,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'db_get(key)', 'db_get(key)',
function (key) { function (key) {
var str = window.localStorage, var str = window.localStorage,
@ -452,7 +455,7 @@ SnapExtensions.set(
// Object properties (obj_): // Object properties (obj_):
SnapExtensions.set( SnapExtensions.primitives.set(
'obj_name(obj, name)', 'obj_name(obj, name)',
function (obj, name, proc) { function (obj, name, proc) {
var ide = this.parentThatIsA(IDE_Morph); var ide = this.parentThatIsA(IDE_Morph);
@ -475,7 +478,7 @@ SnapExtensions.set(
// Variables (var_): // Variables (var_):
SnapExtensions.set( SnapExtensions.primitives.set(
'var_declare(scope, name)', 'var_declare(scope, name)',
function (scope, name, proc) { function (scope, name, proc) {
var ide, frame; var ide, frame;
@ -499,7 +502,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'var_delete(name)', 'var_delete(name)',
function (name, proc) { function (name, proc) {
var local; var local;
@ -516,7 +519,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'var_get(name)', 'var_get(name)',
function (name, proc) { function (name, proc) {
proc.assertType(name, 'text'); proc.assertType(name, 'text');
@ -524,7 +527,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'var_set(name, val)', 'var_set(name, val)',
function (name, val, proc) { function (name, val, proc) {
var local; var local;
@ -537,7 +540,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'var_show(name)', 'var_show(name)',
function (name, proc) { function (name, proc) {
proc.doShowVar( proc.doShowVar(
@ -549,7 +552,7 @@ SnapExtensions.set(
} }
); );
SnapExtensions.set( SnapExtensions.primitives.set(
'var_hide(name)', 'var_hide(name)',
function (name, proc) { function (name, proc) {
proc.doHideVar( proc.doHideVar(
@ -564,7 +567,7 @@ SnapExtensions.set(
// IDE (ide_): // IDE (ide_):
// not needed right now, commented out for possibly later // not needed right now, commented out for possibly later
/* /*
SnapExtensions.set( SnapExtensions.primitives.set(
'ide_refreshpalette(name)', 'ide_refreshpalette(name)',
function (name) { function (name) {
var ide = this.parentThatIsA(IDE_Morph); var ide = this.parentThatIsA(IDE_Morph);
@ -579,8 +582,8 @@ SnapExtensions.set(
// Brian's colors (sigh, clr_): // Brian's colors (sigh, clr_):
SnapExtensions.set( SnapExtensions.menus.set(
'clr_menu', 'clr_numbers',
function () { function () {
var menuName = this.parent.inputs()[0].evaluate(), // first slot var menuName = this.parent.inputs()[0].evaluate(), // first slot
output, output,

Wyświetl plik

@ -62,7 +62,7 @@ isNil, WatcherMorph, List, ListWatcherMorph, alert, console, TableMorph, BLACK,
TableFrameMorph, ColorSlotMorph, isSnapObject, newCanvas, Symbol, SVG_Costume, TableFrameMorph, ColorSlotMorph, isSnapObject, newCanvas, Symbol, SVG_Costume,
SnapExtensions*/ SnapExtensions*/
modules.threads = '2021-June-17'; modules.threads = '2021-June-18';
var ThreadManager; var ThreadManager;
var Process; var Process;
@ -819,7 +819,7 @@ Process.prototype.doApplyExtension = function (prim, args) {
}; };
Process.prototype.reportApplyExtension = function (prim, args) { Process.prototype.reportApplyExtension = function (prim, args) {
var ext = SnapExtensions.get(prim); var ext = SnapExtensions.primitives.get(prim);
if (isNil(ext)) { if (isNil(ext)) {
throw new Error('missing / unspecified extension: ' + prim); throw new Error('missing / unspecified extension: ' + prim);
} }