added (Bernat's) JSON parser to SPLIT block

pull/89/head
jmoenig 2019-01-09 11:03:43 +01:00
rodzic 05a8c5bdfc
commit 56c5971aae
5 zmienionych plików z 37 dodań i 7 usunięć

Wyświetl plik

@ -6,6 +6,7 @@
* Store: tweaked format for serializing atomic data lists
* Morphic: added option to include alpha in color comparison
* Objects: fixed "set pen color (color picker)" to observe, i.e. overwrite transparency
* Lists, Threads, Objects: added (Bernat's) JSON parser to SPLIT block
### 2019-01-08
* Objects: automatically parse csv files on import, experimental "raw data" and "parse" ops

Wyświetl plik

@ -6,12 +6,12 @@
<link rel="shortcut icon" href="src/favicon.ico">
<script type="text/javascript" src="src/morphic.js?version=2019-01-09"></script>
<script type="text/javascript" src="src/widgets.js?version=2018-10-02"></script>
<script type="text/javascript" src="src/blocks.js?version=2019-01-04"></script>
<script type="text/javascript" src="src/threads.js?version=2019-01-08"></script>
<script type="text/javascript" src="src/blocks.js?version=2019-01-09"></script>
<script type="text/javascript" src="src/threads.js?version=2019-01-09"></script>
<script type="text/javascript" src="src/objects.js?version=2019-01-09"></script>
<script type="text/javascript" src="src/gui.js?version=2019-01-02"></script>
<script type="text/javascript" src="src/paint.js?version=2018-10-02"></script>
<script type="text/javascript" src="src/lists.js?version=2019-01-08"></script>
<script type="text/javascript" src="src/lists.js?version=2019-01-09"></script>
<script type="text/javascript" src="src/byob.js?version=2018-11-12"></script>
<script type="text/javascript" src="src/tables.js?version=2018-10-02"></script>
<script type="text/javascript" src="src/symbols.js?version=2018-10-02"></script>

Wyświetl plik

@ -148,7 +148,7 @@ CustomCommandBlockMorph, SymbolMorph, ToggleButtonMorph, DialMorph*/
// Global stuff ////////////////////////////////////////////////////////
modules.blocks = '2019-January-08';
modules.blocks = '2019-January-09';
var SyntaxElementMorph;
var BlockMorph;
@ -1046,7 +1046,8 @@ SyntaxElementMorph.prototype.labelPart = function (spec) {
'line' : ['line'],
'tab' : ['tab'],
'cr' : ['cr'],
'csv' : ['csv']
'csv' : ['csv'],
'json' : ['json']
/*
'csv records' : ['csv records'],
'csv fields' : ['csv fields']

Wyświetl plik

@ -62,7 +62,7 @@ CellMorph, ArrowMorph, MenuMorph, snapEquals, Morph, isNil, localize, isString,
MorphicPreferences, TableDialogMorph, SpriteBubbleMorph, SpeechBubbleMorph,
TableFrameMorph, TableMorph, Variable, isSnapObject*/
modules.lists = '2019-January-08';
modules.lists = '2019-January-09';
var List;
var ListWatcherMorph;

Wyświetl plik

@ -62,7 +62,7 @@ StageMorph, SpriteMorph, StagePrompterMorph, Note, modules, isString, copy,
isNil, WatcherMorph, List, ListWatcherMorph, alert, console, TableMorph, Color,
TableFrameMorph, ColorSlotMorph, isSnapObject, Map*/
modules.threads = '2019-January-08';
modules.threads = '2019-January-09';
var ThreadManager;
var Process;
@ -2780,6 +2780,8 @@ Process.prototype.reportTextSplit = function (string, delimiter) {
break;
case 'csv':
return this.parseCSV(string);
case 'json':
return this.parseJSON(string);
/*
case 'csv records':
return this.parseCSVrecords(string);
@ -2910,6 +2912,32 @@ Process.prototype.parseCSVfields = function (text) {
};
*/
Process.prototype.parseJSON = function (string) {
// Bernat's original Snapi contribution
function listify(jsonObject) {
if (jsonObject instanceof Array) {
return new List(
jsonObject.map(function(eachElement) {
return listify(eachElement);
})
);
} else if (jsonObject instanceof Object) {
return new List(
Object.keys(jsonObject).map(function(eachKey) {
return new List([
eachKey,
listify(jsonObject[eachKey])
]);
})
);
} else {
return jsonObject;
}
}
return listify(JSON.parse(string));
};
// Process debugging
Process.prototype.alert = function (data) {