|
|
- //* comment *//
-
- Copyright (C) 2015 Ignacio Rodríguez
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- //* globals *//
- turtleHeaps = {};
-
- //* flow:showHeap *//
- var block = logo.blocks.blockList[blk];
- logo.textMsg(JSON.stringify(turtleHeaps[turtle]));
-
- //* flow:emptyHeap *//
- turtleHeaps[turtle] = [];
-
- //* flow:push *//
- var block = logo.blocks.blockList[blk];
- var conns = block.connections;
- var arg = logo.parseArg(logo, turtle, conns[1]);
- if (!(turtle in turtleHeaps)) {
- turtleHeaps[turtle] = [];
- }
- turtleHeaps[turtle].push(arg);
-
- //* arg:pop *//
- var block = logo.blocks.blockList[blk];
- if (turtle in turtleHeaps && turtleHeaps[turtle].length > 0) {
- block.value = turtleHeaps[turtle].pop();
- } else {
- logo.errorMsg(_('empty heap'));
- block.value = null;
- }
-
- //* arg:heapEmpty *//
- var block = logo.blocks.blockList[blk];
- if (turtle in turtleHeaps) {
- block.value = (turtleHeaps[turtle].length == 0);
- } else {
- block.value = true;
- }
-
- //* flow:saveHeap *//
- function downloadFile(filename, mimetype, content) {
- var download = document.createElement('a');
- download.setAttribute('href', 'data:' + mimetype + ';charset=utf-8,' + content);
- download.setAttribute('download', filename);
- document.body.appendChild(download);
- download.click();
- document.body.removeChild(download);
- };
- var block = logo.blocks.blockList[blk];
- var conns = block.connections;
- var arg = logo.parseArg(logo, turtle, conns[1]);
- if (arg && turtle in turtleHeaps) {
- downloadFile(arg, 'text/json', JSON.stringify(turtleHeaps[turtle]));
- };
-
- //* flow:loadHeap *//
- var block = logo.blocks.blockList[blk];
- var conns = block.connections;
- var arg = logo.parseArg(logo, turtle, conns[1]);
- if (turtle in turtleHeaps) {
- var oldHeap = turtleHeaps[turtle];
- } else {
- var oldHeap = [];
- }
- if (blocks.blockList[conns[1]].name == 'loadFile') {
- if (!arg) {
- logo.errorMsg(_('You need to select a file.'));
- }
- else {
- if (arg.length != 2) {
- logo.errorMsg(_('You need to select a file.'));
- }
- else {
- try {
- turtleHeaps[turtle] = JSON.parse(arg[1]);
- if (!Array.isArray(turtleHeaps[turtle])) {
- throw 'is not array';
- }
- }
- catch (e) {
- turtleHeaps[turtle] = oldHeap;
- logo.errorMsg(_('The file you selected does not contain a valid heap.'));
- }
- }
- }
- }
- else {
- logo.errorMsg(_('The loadHeap block needs a loadFile block.'))
- };
-
- //* block:push *//
- var pushBlk = new ProtoBlock('push');
- pushBlk.palette = palettes.dict['extras'];
- blocks.protoBlockDict['push'] = pushBlk;
- pushBlk.staticLabels.push(_('push'));
- pushBlk.adjustWidthToLabel();
- pushBlk.oneArgBlock();
- pushBlk.dockTypes[1] = 'anyin';
-
- //* block:pop *//
- var popBlk = new ProtoBlock('pop');
- popBlk.palette = palettes.dict['extras'];
- blocks.protoBlockDict['pop'] = popBlk;
- popBlk.staticLabels.push(_('pop'));
- popBlk.adjustWidthToLabel();
- popBlk.parameterBlock();
-
- //* block:showHeap *//
- var showHeap = new ProtoBlock('showHeap');
- showHeap.palette = palettes.dict['extras'];
- blocks.protoBlockDict['showHeap'] = showHeap;
- showHeap.staticLabels.push(_('show heap'));
- showHeap.adjustWidthToLabel();
- showHeap.zeroArgBlock();
-
- //* block:heapEmpty *//
- var heapEmpty = new ProtoBlock('heapEmpty');
- heapEmpty.palette = palettes.dict['extras'];
- blocks.protoBlockDict['heapEmpty'] = heapEmpty;
- heapEmpty.staticLabels.push(_('heap empty?'));
- heapEmpty.adjustWidthToLabel();
- heapEmpty.booleanZeroArgBlock();
-
- //* block:emptyHeap *//
- var emptyHeap = new ProtoBlock('emptyHeap');
- emptyHeap.palette = palettes.dict['extras'];
- blocks.protoBlockDict['emptyHeap'] = emptyHeap;
- emptyHeap.staticLabels.push(_('empty heap'));
- emptyHeap.adjustWidthToLabel();
- emptyHeap.zeroArgBlock();
-
- //* block:saveHeap *//
- var saveHeap = new ProtoBlock('saveHeap');
- saveHeap.palette = palettes.dict['extras'];
- blocks.protoBlockDict['saveHeap'] = saveHeap;
- saveHeap.staticLabels.push(_('save heap'));
- saveHeap.adjustWidthToLabel();
- saveHeap.oneArgBlock();
- saveHeap.defaults.push('heap.json');
- saveHeap.dockTypes[1] = 'textin';
-
- //* block:loadHeap *//
- var loadHeap = new ProtoBlock('loadHeap');
- loadHeap.palette = palettes.dict['extras'];
- blocks.protoBlockDict['loadHeap'] = loadHeap;
- loadHeap.staticLabels.push(_('load heap'));
- loadHeap.adjustWidthToLabel();
- loadHeap.oneArgBlock();
- loadHeap.dockTypes[1] = 'filein';
- loadHeap.defaults = [[null, null]];
|