slight tweaks - mostly to please Lint

upd4.2
Jens Mönig 2018-02-08 09:36:16 +01:00
rodzic 0a25625537
commit 56180a3681
5 zmienionych plików z 177 dodań i 69 usunięć

185
cloud.js
Wyświetl plik

@ -5,9 +5,9 @@
a backend API for SNAP!
written by Bernat Romagosa
inspired in the old cloud API by Jens Mönig
inspired by the original cloud API by Jens Mönig
Copyright (C) 2017 by Bernat Romagosa
Copyright (C) 2018 by Bernat Romagosa
Copyright (C) 2015 by Jens Mönig
This file is part of Snap!.
@ -29,25 +29,27 @@
// Global settings /////////////////////////////////////////////////////
/*global modules, IDE_Morph, SnapSerializer, nop, localize*/
/*global modules, SnapSerializer, nop, hex_sha512, DialogBoxMorph, Color*/
modules.cloud = '2015-December-15';
modules.cloud = '2018-February-08';
// Global stuff
var Cloud;
var SnapCloud;
// Cloud /////////////////////////////////////////////////////////////
function Cloud(url) {
this.init(url);
};
}
Cloud.prototype.init = function (url) {
this.url = url;
this.username = null;
};
SnapCloud = new Cloud('https://snap-cloud.cs10.org');
// Dictionary handling
@ -92,7 +94,6 @@ Cloud.prototype.genericError = function () {
throw new Error(Cloud.genericErrorMessage);
};
// Low level functionality
Cloud.prototype.request = function (
@ -186,7 +187,6 @@ Cloud.prototype.withCredentialsRequest = function (
);
};
// Credentials management
Cloud.prototype.initSession = function (onSuccess) {
@ -208,18 +208,32 @@ Cloud.prototype.checkCredentials = function (onSuccess, onError) {
if (user.username) {
myself.username = user.username;
}
if (onSuccess) { onSuccess.call(null, user.username, user.isadmin); }
if (onSuccess) {
onSuccess.call(null, user.username, user.isadmin);
}
},
onError
);
};
Cloud.prototype.getCurrentUser = function (onSuccess, onError) {
this.request('GET', '/users/c', onSuccess, onError, 'Could not retrieve current user');
this.request(
'GET',
'/users/c',
onSuccess,
onError,
'Could not retrieve current user'
);
};
Cloud.prototype.getUser = function (username, onSuccess, onError) {
this.request('GET', '/users/' + username, onSuccess, onError, 'Could not retrieve user');
this.request(
'GET',
'/users/' + username,
onSuccess,
onError,
'Could not retrieve user'
);
};
Cloud.prototype.logout = function (onSuccess, onError) {
@ -233,7 +247,13 @@ Cloud.prototype.logout = function (onSuccess, onError) {
);
};
Cloud.prototype.login = function (username, password, persist, onSuccess, onError) {
Cloud.prototype.login = function (
username,
password,
persist,
onSuccess,
onError
) {
var myself = this;
this.request(
'POST',
@ -251,7 +271,14 @@ Cloud.prototype.login = function (username, password, persist, onSuccess, onErro
);
};
Cloud.prototype.signup = function (username, password, passwordRepeat, email, onSuccess, onError) {
Cloud.prototype.signup = function (
username,
password,
passwordRepeat,
email,
onSuccess,
onError
) {
this.request(
'POST',
'/users/' + username + '?' + this.encodeDict({
@ -264,7 +291,13 @@ Cloud.prototype.signup = function (username, password, passwordRepeat, email, on
'signup failed');
};
Cloud.prototype.changePassword = function (password, newPassword, passwordRepeat, onSuccess, onError) {
Cloud.prototype.changePassword = function (
password,
newPassword,
passwordRepeat,
onSuccess,
onError
) {
this.withCredentialsRequest(
'POST',
'/users/%username/newpassword?' + this.encodeDict({
@ -319,21 +352,31 @@ Cloud.prototype.saveProject = function (ide, onSuccess, onError) {
try {
ide.serializer.parse(body.xml);
} catch (err) {
ide.showMessage('Serialization of program data failed:\n' + err);
throw new Error('Serialization of program data failed:\n' + err);
ide.showMessage(
'Serialization of program data failed:\n' + err
);
throw new Error(
'Serialization of program data failed:\n' + err
);
}
if (body.media !== null) {
try {
ide.serializer.parse(body.media);
} catch (err) {
ide.showMessage('Serialization of media failed:\n' + err);
throw new Error('Serialization of media failed:\n' + err);
ide.showMessage(
'Serialization of media failed:\n' + err
);
throw new Error(
'Serialization of media failed:\n' + err
);
}
}
ide.serializer.isCollectingMedia = false;
ide.serializer.flushMedia();
ide.showMessage('Uploading ' + Math.round(size / 1024) + ' KB...');
ide.showMessage(
'Uploading ' + Math.round(size / 1024) + ' KB...'
);
myself.request(
'POST',
@ -342,7 +385,7 @@ Cloud.prototype.saveProject = function (ide, onSuccess, onError) {
onError,
'Project could not be saved',
false,
JSON.stringify(body), // POST body
JSON.stringify(body) // POST body
);
} else {
onError.call(this, 'You are not logged in', 'Snap!Cloud');
@ -367,8 +410,18 @@ Cloud.prototype.getProjectList = function (onSuccess, onError, withThumbnail) {
);
};
Cloud.prototype.getPublishedProjectList = function (username, page, pageSize, searchTerm, onSuccess, onError, withThumbnail) {
var path = '/projects' + (username ? '/' + username : '') + '?ispublished=true';
Cloud.prototype.getPublishedProjectList = function (
username,
page,
pageSize,
searchTerm,
onSuccess,
onError,
withThumbnail
) {
var path = '/projects' +
(username ? '/' + username : '') +
'?ispublished=true';
if (withThumbnail) {
path += '&withthumbnail=true';
@ -391,7 +444,12 @@ Cloud.prototype.getPublishedProjectList = function (username, page, pageSize, se
);
};
Cloud.prototype.getThumbnail = function (username, projectName, onSuccess, onError) {
Cloud.prototype.getThumbnail = function (
username,
projectName,
onSuccess,
onError
) {
this[username ? 'request' : 'withCredentialsRequest'](
'GET',
'/projects/' + (username || '%username') + '/'
@ -414,7 +472,12 @@ Cloud.prototype.getProject = function (projectName, onSuccess, onError) {
);
};
Cloud.prototype.getPublicProject = function (projectName, username, onSuccess, onError) {
Cloud.prototype.getPublicProject = function (
projectName,
username,
onSuccess,
onError
) {
this.request(
'GET',
'/projects/' + username + '/' + projectName,
@ -425,7 +488,12 @@ Cloud.prototype.getPublicProject = function (projectName, username, onSuccess, o
);
};
Cloud.prototype.getProjectMetadata = function (projectName, username, onSuccess, onError) {
Cloud.prototype.getProjectMetadata = function (
projectName,
username,
onSuccess,
onError
) {
this.request(
'GET',
'/projects/' + username + '/' + projectName + '/metadata',
@ -435,7 +503,12 @@ Cloud.prototype.getProjectMetadata = function (projectName, username, onSuccess,
);
};
Cloud.prototype.deleteProject = function (projectName, username, onSuccess, onError) {
Cloud.prototype.deleteProject = function (
projectName,
username,
onSuccess,
onError
) {
this[username ? 'request' : 'withCredentialsRequest'](
'DELETE',
'/projects/' + (username || '%username') + '/' + projectName,
@ -445,51 +518,86 @@ Cloud.prototype.deleteProject = function (projectName, username, onSuccess, onEr
);
};
Cloud.prototype.shareProject = function (projectName, username, onSuccess, onError) {
Cloud.prototype.shareProject = function (
projectName,
username,
onSuccess,
onError
) {
this[username ? 'request' : 'withCredentialsRequest'](
'POST',
'/projects/' + (username || '%username') + '/'
+ projectName + '/metadata?ispublic=true',
'/projects/' +
(username || '%username') +
'/' + projectName +
'/metadata?ispublic=true',
onSuccess,
onError,
'Could not share project'
);
};
Cloud.prototype.unshareProject = function (projectName, username, onSuccess, onError) {
Cloud.prototype.unshareProject = function (
projectName,
username,
onSuccess,
onError
) {
this[username ? 'request' : 'withCredentialsRequest'](
'POST',
'/projects/' + (username || '%username') + '/'
+ projectName + '/metadata?ispublic=false&ispublished=false',
'/projects/' +
(username || '%username') + '/' +
projectName +
'/metadata?ispublic=false&ispublished=false',
onSuccess,
onError,
'Could not unshare project'
);
};
Cloud.prototype.publishProject = function (projectName, username, onSuccess, onError) {
Cloud.prototype.publishProject = function (
projectName,
username,
onSuccess,
onError
) {
this[username ? 'request' : 'withCredentialsRequest'](
'POST',
'/projects/' + (username || '%username') + '/'
+ projectName + '/metadata?ispublished=true',
'/projects/' +
(username || '%username') +
'/' +
projectName +
'/metadata?ispublished=true',
onSuccess,
onError,
'Could not publish project'
);
};
Cloud.prototype.unpublishProject = function (projectName, username, onSuccess, onError) {
Cloud.prototype.unpublishProject = function (
projectName,
username,
onSuccess,
onError
) {
this[username ? 'request' : 'withCredentialsRequest'](
'POST',
'/projects/' + (username || '%username') + '/'
+ projectName + '/metadata?ispublished=false',
'/projects/' +
(username || '%username') +
'/' +
projectName +
'/metadata?ispublished=false',
onSuccess,
onError,
'Could not unpublish project'
);
};
Cloud.prototype.updateNotes = function (projectName, notes, onSuccess, onError) {
Cloud.prototype.updateNotes = function (
projectName,
notes,
onSuccess,
onError
) {
this.withCredentialsRequest(
'POST',
'/projects/%username/' + projectName + '/metadata',
@ -501,4 +609,3 @@ Cloud.prototype.updateNotes = function (projectName, notes, onSuccess, onError)
);
};
var SnapCloud = new Cloud('https://snap-cloud.cs10.org');

13
gui.js
Wyświetl plik

@ -67,7 +67,7 @@ AlignmentMorph, TabMorph, Costume, MorphicPreferences, Sound, BlockMorph,
ToggleMorph, InputSlotDialogMorph, ScriptsMorph, isNil, SymbolMorph,
BlockExportDialogMorph, BlockImportDialogMorph, SnapTranslator, localize,
List, ArgMorph, SnapCloud, Uint8Array, HandleMorph, SVG_Costume,
fontHeight, hex_sha512, sb, CommentMorph, CommandBlockMorph, BooleanSlotMorph,
fontHeight, sb, CommentMorph, CommandBlockMorph, BooleanSlotMorph,
BlockLabelPlaceHolderMorph, Audio, SpeechBubbleMorph, ScriptFocusMorph,
XML_Element, WatcherMorph, BlockRemovalDialogMorph, saveAs, TableMorph,
isSnapObject, isRetinaEnabled, disableRetinaSupport, enableRetinaSupport,
@ -75,7 +75,7 @@ isRetinaSupported, SliderMorph, Animation, BoxMorph, MediaRecorder*/
// Global stuff ////////////////////////////////////////////////////////
modules.gui = '2018-February-06';
modules.gui = '2018-February-08';
// Declarations
@ -270,7 +270,7 @@ IDE_Morph.prototype.init = function (isAutoFill) {
};
IDE_Morph.prototype.openIn = function (world) {
var hash, usr, myself = this, urlLanguage = null;
var hash, myself = this, urlLanguage = null;
SnapCloud.initSession(
function (username) {
@ -1567,7 +1567,8 @@ IDE_Morph.prototype.createCorralBar = function () {
cambutton.labelColor = this.buttonLabelColor;
cambutton.contrast = this.buttonContrast;
cambutton.drawNew();
cambutton.hint = "take a camera snapshot and\nimport it as a new sprite";
cambutton.hint = "take a camera snapshot and\n" +
"import it as a new sprite";
cambutton.fixLayout();
cambutton.setCenter(this.corralBar.center());
cambutton.setLeft(
@ -6497,7 +6498,6 @@ ProjectDialogMorph.prototype.publishProject = function () {
ProjectDialogMorph.prototype.unpublishProject = function () {
var myself = this,
ide = this.ide,
proj = this.listField.selected,
entry = this.listField.active;
@ -7945,7 +7945,8 @@ WardrobeMorph.prototype.updateList = function () {
if (!CamSnapshotDialogMorph.prototype.enabled) {
cambutton.disable();
cambutton.hint = CamSnapshotDialogMorph.prototype.notSupportedMessage;
cambutton.hint =
CamSnapshotDialogMorph.prototype.notSupportedMessage;
}
document.addEventListener(

Wyświetl plik

@ -3925,10 +3925,6 @@ Translation Updates:
* Turkish
* Chinese
* Spanish
=== development ===
* New cloud API
* Russian
*** in development ***
@ -3938,6 +3934,10 @@ Translation Updates:
* GUI: start developing v4.1.2
* Morphic: roll back temporary rectangle filling workaround for a bug in Chrome v57
180208
------
* Cloud, GUI, Widgets: New Cloud API, thanks, Bernat!
=== v4.1.2 features ===

Wyświetl plik

@ -2,25 +2,25 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Snap! Build Your Own Blocks 4.1.1</title>
<title>Snap! Build Your Own Blocks 4.1.2 - dev -</title>
<link rel="shortcut icon" href="favicon.ico">
<script type="text/javascript" src="morphic.js?version=2018-02-05"></script>
<script type="text/javascript" src="widgets.js?version=2018-02-05"></script>
<script type="text/javascript" src="blocks.js?version=2018-02-05"></script>
<script type="text/javascript" src="threads.js?version=2018-02-05"></script>
<script type="text/javascript" src="objects.js?version=2018-02-05"></script>
<script type="text/javascript" src="gui.js?version=2018-02-05"></script>
<script type="text/javascript" src="paint.js?version=2018-02-05"></script>
<script type="text/javascript" src="lists.js?version=2018-02-05"></script>
<script type="text/javascript" src="byob.js?version=2018-02-05"></script>
<script type="text/javascript" src="tables.js?version=2018-02-05"></script>
<script type="text/javascript" src="symbols.js?version=2018-02-05"></script>
<script type="text/javascript" src="xml.js?version=2018-02-05"></script>
<script type="text/javascript" src="store.js?version=2018-02-05"></script>
<script type="text/javascript" src="locale.js?version=2018-02-05"></script>
<script type="text/javascript" src="cloud.js?version=2018-02-05"></script>
<script type="text/javascript" src="sha512.js?version=2018-02-05"></script>
<script type="text/javascript" src="FileSaver.min.js?version=2018-02-05"></script>
<script type="text/javascript" src="morphic.js?version=2018-02-08"></script>
<script type="text/javascript" src="widgets.js?version=2018-02-08"></script>
<script type="text/javascript" src="blocks.js?version=2018-02-08"></script>
<script type="text/javascript" src="threads.js?version=2018-02-08"></script>
<script type="text/javascript" src="objects.js?version=2018-02-08"></script>
<script type="text/javascript" src="gui.js?version=2018-02-08"></script>
<script type="text/javascript" src="paint.js?version=2018-02-08"></script>
<script type="text/javascript" src="lists.js?version=2018-02-08"></script>
<script type="text/javascript" src="byob.js?version=2018-02-08"></script>
<script type="text/javascript" src="tables.js?version=2018-02-08"></script>
<script type="text/javascript" src="symbols.js?version=2018-02-08"></script>
<script type="text/javascript" src="xml.js?version=2018-02-08"></script>
<script type="text/javascript" src="store.js?version=2018-02-08"></script>
<script type="text/javascript" src="locale.js?version=2018-02-08"></script>
<script type="text/javascript" src="cloud.js?version=2018-02-08"></script>
<script type="text/javascript" src="sha512.js?version=2018-02-08"></script>
<script type="text/javascript" src="FileSaver.min.js?version=2018-02-08"></script>
<script type="text/javascript">
var world;
window.onload = function () {

Wyświetl plik

@ -7,7 +7,7 @@
written by Jens Mönig
jens@moenig.org
Copyright (C) 2017 by Jens Mönig
Copyright (C) 2018 by Jens Mönig
This file is part of Snap!.
@ -85,7 +85,7 @@ HTMLCanvasElement, fontHeight, SymbolMorph, localize, SpeechBubbleMorph,
ArrowMorph, MenuMorph, isString, isNil, SliderMorph, MorphicPreferences,
ScrollFrameMorph, MenuItemMorph, Note*/
modules.widgets = '2017-September-25';
modules.widgets = '2018-February-08';
var PushButtonMorph;
var ToggleButtonMorph;