optimized serialization of lists with atomic data in project files

pull/89/head
jmoenig 2019-01-08 16:20:50 +01:00
rodzic dfb2907c84
commit cefb945ec1
3 zmienionych plików z 28 dodań i 4 usunięć

Wyświetl plik

@ -4,6 +4,7 @@
### 2019-01-08
* Objects: automatically parse csv files on import, experimental "raw data" and "parse" ops
* Lists: fixed an off-by-one error in becomeLinked()
* Store: optimized serialization of lists with atomic data in project files
### 2019-01-07
* Lists, Objects: directly export and import lists as csv files, under construction

Wyświetl plik

@ -17,7 +17,7 @@
<script type="text/javascript" src="src/symbols.js?version=2018-10-02"></script>
<script type="text/javascript" src="src/sketch.js?version=2018-10-02"></script>
<script type="text/javascript" src="src/xml.js?version=2018-11-12"></script>
<script type="text/javascript" src="src/store.js?version=2019-01-02"></script>
<script type="text/javascript" src="src/store.js?version=2019-01-08"></script>
<script type="text/javascript" src="src/locale.js?version=2019-01-04"></script>
<script type="text/javascript" src="src/cloud.js?version=2018-11-28"></script>
<script type="text/javascript" src="src/sha512.js?version=2018-10-02"></script>

Wyświetl plik

@ -55,13 +55,13 @@ CommandBlockMorph, detect, CustomCommandBlockMorph, CustomReporterBlockMorph,
Color, List, newCanvas, Costume, Sound, Audio, IDE_Morph, ScriptsMorph,
BlockMorph, ArgMorph, InputSlotMorph, TemplateSlotMorph, CommandSlotMorph,
FunctionSlotMorph, MultiArgMorph, ColorSlotMorph, nop, CommentMorph, isNil,
localize, sizeOf, ArgLabelMorph, SVG_Costume, MorphicPreferences,
localize, sizeOf, ArgLabelMorph, SVG_Costume, MorphicPreferences, Process,
SyntaxElementMorph, Variable, isSnapObject, console, BooleanSlotMorph,
normalizeCanvas, contains*/
// Global stuff ////////////////////////////////////////////////////////
modules.store = '2019-January-02';
modules.store = '2019-January-08';
// XML_Serializer ///////////////////////////////////////////////////////
@ -852,7 +852,7 @@ SnapSerializer.prototype.loadSounds = function (object, model) {
// private
var sounds = model.childNamed('sounds');
if (sounds) {
// object.sounds = this.loadValue(sounds.require('list')); +++
// object.sounds = this.loadValue(sounds.require('list'));
object.sounds = this.loadValue(sounds.require(
'list',
function () {
@ -1315,6 +1315,12 @@ SnapSerializer.prototype.loadValue = function (model, object) {
return model.contents === 'true';
case 'list':
if (model.attributes.hasOwnProperty('linked')) {
if (model.attributes.format === 'csv') {
v = Process.prototype.parseCSV(model.contents);
v.becomeLinked();
record();
return v;
}
v = new List();
v.isLinked = true;
record();
@ -1341,6 +1347,11 @@ SnapSerializer.prototype.loadValue = function (model, object) {
});
return lst;
}
if (model.attributes.format === 'csv') {
v = Process.prototype.parseCSV(model.contents);
record();
return v;
}
v = new List();
record();
v.contents = model.childrenNamed('item').map(function (item) {
@ -2137,6 +2148,18 @@ List.prototype.toXML = function (serializer, mediaContext) {
// mediaContext is an optional name-stub
// when collecting media into a separate module
var xml, value, item;
if (this.hasOnlyAtomicData() &&
(!this.isLinked || !StageMorph.prototype.enableSublistIDs)) {
// special case for a less cluttered format
return serializer.format(
'<list format="csv" ' +
(this.isLinked ? 'linked="linked" ' : '') +
'~>%</list>',
this.asCSV()
);
}
if (this.isLinked) {
xml = '<list linked="linked" ~>';
if (StageMorph.prototype.enableSublistIDs) {