kopia lustrzana https://github.com/backface/turtlestitch
Check project for compatibility
notify users of potential incompatibilities when opening projects created in other forks (e.g. BeetleBlocks)pull/3/merge
rodzic
947906aab9
commit
50e84f8890
43
gui.js
43
gui.js
|
|
@ -9,7 +9,7 @@
|
||||||
written by Jens Mönig
|
written by Jens Mönig
|
||||||
jens@moenig.org
|
jens@moenig.org
|
||||||
|
|
||||||
Copyright (C) 2014 by Jens Mönig
|
Copyright (C) 2015 by Jens Mönig
|
||||||
|
|
||||||
This file is part of Snap!.
|
This file is part of Snap!.
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ SpeechBubbleMorph*/
|
||||||
|
|
||||||
// Global stuff ////////////////////////////////////////////////////////
|
// Global stuff ////////////////////////////////////////////////////////
|
||||||
|
|
||||||
modules.gui = '2014-December-04';
|
modules.gui = '2015-January-12';
|
||||||
|
|
||||||
// Declarations
|
// Declarations
|
||||||
|
|
||||||
|
|
@ -300,7 +300,6 @@ IDE_Morph.prototype.openIn = function (world) {
|
||||||
this.inform('Snap!', motd);
|
this.inform('Snap!', motd);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function interpretUrlAnchors() {
|
function interpretUrlAnchors() {
|
||||||
var dict;
|
var dict;
|
||||||
if (location.hash.substr(0, 6) === '#open:') {
|
if (location.hash.substr(0, 6) === '#open:') {
|
||||||
|
|
@ -2509,7 +2508,7 @@ IDE_Morph.prototype.aboutSnap = function () {
|
||||||
world = this.world();
|
world = this.world();
|
||||||
|
|
||||||
aboutTxt = 'Snap! 4.0\nBuild Your Own Blocks\n\n--- beta ---\n\n'
|
aboutTxt = 'Snap! 4.0\nBuild Your Own Blocks\n\n--- beta ---\n\n'
|
||||||
+ 'Copyright \u24B8 2014 Jens M\u00F6nig and '
|
+ 'Copyright \u24B8 2015 Jens M\u00F6nig and '
|
||||||
+ 'Brian Harvey\n'
|
+ 'Brian Harvey\n'
|
||||||
+ 'jens@moenig.org, bh@cs.berkeley.edu\n\n'
|
+ 'jens@moenig.org, bh@cs.berkeley.edu\n\n'
|
||||||
|
|
||||||
|
|
@ -2943,12 +2942,18 @@ IDE_Morph.prototype.rawOpenProjectString = function (str) {
|
||||||
StageMorph.prototype.enableCodeMapping = false;
|
StageMorph.prototype.enableCodeMapping = false;
|
||||||
if (Process.prototype.isCatchingErrors) {
|
if (Process.prototype.isCatchingErrors) {
|
||||||
try {
|
try {
|
||||||
this.serializer.openProject(this.serializer.load(str), this);
|
this.serializer.openProject(
|
||||||
|
this.serializer.load(str, this),
|
||||||
|
this
|
||||||
|
);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.showMessage('Load failed: ' + err);
|
this.showMessage('Load failed: ' + err);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.serializer.openProject(this.serializer.load(str), this);
|
this.serializer.openProject(
|
||||||
|
this.serializer.load(str, this),
|
||||||
|
this
|
||||||
|
);
|
||||||
}
|
}
|
||||||
this.stopFastTracking();
|
this.stopFastTracking();
|
||||||
};
|
};
|
||||||
|
|
@ -2980,7 +2985,10 @@ IDE_Morph.prototype.rawOpenCloudDataString = function (str) {
|
||||||
model = this.serializer.parse(str);
|
model = this.serializer.parse(str);
|
||||||
this.serializer.loadMediaModel(model.childNamed('media'));
|
this.serializer.loadMediaModel(model.childNamed('media'));
|
||||||
this.serializer.openProject(
|
this.serializer.openProject(
|
||||||
this.serializer.loadProjectModel(model.childNamed('project')),
|
this.serializer.loadProjectModel(
|
||||||
|
model.childNamed('project'),
|
||||||
|
this
|
||||||
|
),
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
@ -2990,7 +2998,10 @@ IDE_Morph.prototype.rawOpenCloudDataString = function (str) {
|
||||||
model = this.serializer.parse(str);
|
model = this.serializer.parse(str);
|
||||||
this.serializer.loadMediaModel(model.childNamed('media'));
|
this.serializer.loadMediaModel(model.childNamed('media'));
|
||||||
this.serializer.openProject(
|
this.serializer.openProject(
|
||||||
this.serializer.loadProjectModel(model.childNamed('project')),
|
this.serializer.loadProjectModel(
|
||||||
|
model.childNamed('project'),
|
||||||
|
this
|
||||||
|
),
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -3974,6 +3985,9 @@ IDE_Morph.prototype.cloudResponse = function () {
|
||||||
IDE_Morph.prototype.cloudError = function () {
|
IDE_Morph.prototype.cloudError = function () {
|
||||||
var myself = this;
|
var myself = this;
|
||||||
|
|
||||||
|
// try finding an eplanation what's going on
|
||||||
|
// has some issues, commented out for now
|
||||||
|
/*
|
||||||
function getURL(url) {
|
function getURL(url) {
|
||||||
try {
|
try {
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
|
|
@ -3987,13 +4001,15 @@ IDE_Morph.prototype.cloudError = function () {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return function (responseText, url) {
|
return function (responseText, url) {
|
||||||
// first, try to find out an explanation for the error
|
// first, try to find out an explanation for the error
|
||||||
// and notify the user about it,
|
// and notify the user about it,
|
||||||
// if none is found, show an error dialog box
|
// if none is found, show an error dialog box
|
||||||
var response = responseText,
|
var response = responseText,
|
||||||
explanation = getURL('http://snap.berkeley.edu/cloudmsg.txt');
|
// explanation = getURL('http://snap.berkeley.edu/cloudmsg.txt'),
|
||||||
|
explanation = null;
|
||||||
if (myself.shield) {
|
if (myself.shield) {
|
||||||
myself.shield.destroy();
|
myself.shield.destroy();
|
||||||
myself.shield = null;
|
myself.shield = null;
|
||||||
|
|
@ -4044,14 +4060,7 @@ IDE_Morph.prototype.setCloudURL = function () {
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
'Snap!Cloud' :
|
'Snap!Cloud' :
|
||||||
'https://snapcloud.miosoft.com/miocon/app/' +
|
'https://snap.apps.miosoft.com/SnapCloud'
|
||||||
'login?_app=SnapCloud',
|
|
||||||
'local network lab' :
|
|
||||||
'192.168.2.107:8087/miocon/app/login?_app=SnapCloud',
|
|
||||||
'local network office' :
|
|
||||||
'192.168.186.146:8087/miocon/app/login?_app=SnapCloud',
|
|
||||||
'localhost dev' :
|
|
||||||
'localhost/miocon/app/login?_app=SnapCloud'
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
29
store.js
29
store.js
|
|
@ -7,7 +7,7 @@
|
||||||
written by Jens Mönig
|
written by Jens Mönig
|
||||||
jens@moenig.org
|
jens@moenig.org
|
||||||
|
|
||||||
Copyright (C) 2014 by Jens Mönig
|
Copyright (C) 2015 by Jens Mönig
|
||||||
|
|
||||||
This file is part of Snap!.
|
This file is part of Snap!.
|
||||||
|
|
||||||
|
|
@ -61,7 +61,7 @@ SyntaxElementMorph, Variable*/
|
||||||
|
|
||||||
// Global stuff ////////////////////////////////////////////////////////
|
// Global stuff ////////////////////////////////////////////////////////
|
||||||
|
|
||||||
modules.store = '2014-December-17';
|
modules.store = '2015-January-12';
|
||||||
|
|
||||||
|
|
||||||
// XML_Serializer ///////////////////////////////////////////////////////
|
// XML_Serializer ///////////////////////////////////////////////////////
|
||||||
|
|
@ -306,16 +306,33 @@ XML_Serializer.prototype.mediaXML = function (name) {
|
||||||
return xml + '</media>';
|
return xml + '</media>';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// SnapSerializer loading:
|
// SnapSerializer loading:
|
||||||
|
|
||||||
SnapSerializer.prototype.load = function (xmlString) {
|
SnapSerializer.prototype.load = function (xmlString, ide) {
|
||||||
// public - answer a new Project represented by the given XML String
|
// public - answer a new Project represented by the given XML String
|
||||||
return this.loadProjectModel(this.parse(xmlString));
|
return this.loadProjectModel(this.parse(xmlString), ide);
|
||||||
};
|
};
|
||||||
|
|
||||||
SnapSerializer.prototype.loadProjectModel = function (xmlNode) {
|
SnapSerializer.prototype.loadProjectModel = function (xmlNode, ide) {
|
||||||
// public - answer a new Project represented by the given XML top node
|
// public - answer a new Project represented by the given XML top node
|
||||||
|
// show a warning if the origin apps differ
|
||||||
|
|
||||||
|
var appInfo = xmlNode.attributes.app,
|
||||||
|
app = appInfo ? appInfo.split(' ')[0] : null;
|
||||||
|
|
||||||
|
if (ide && app !== this.app.split(' ')[0]) {
|
||||||
|
ide.inform(
|
||||||
|
app + ' Project',
|
||||||
|
'This project has been created by a different app:\n\n' +
|
||||||
|
app +
|
||||||
|
'\n\nand may be incompatible or fail to load here.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this.rawLoadProjectModel(xmlNode);
|
||||||
|
};
|
||||||
|
|
||||||
|
SnapSerializer.prototype.rawLoadProjectModel = function (xmlNode) {
|
||||||
|
// private
|
||||||
var myself = this,
|
var myself = this,
|
||||||
project = {sprites: {}},
|
project = {sprites: {}},
|
||||||
model,
|
model,
|
||||||
|
|
|
||||||
Ładowanie…
Reference in New Issue