Merge branch 'soon' into staging

This commit is contained in:
ansuz 2019-11-08 09:31:38 -05:00
commit 05827d9202
5 changed files with 55 additions and 3 deletions

View File

@ -1,3 +1,37 @@
# Elasmotherium release notes
## Goals
This is a small release, focused on bug fixes and UI improvements, while we're finalizing bigger team-centric features planned for the next release.
## Update notes
This is a pretty basic release:
1. stop your server
2. pull the latest source code
3. restart your server
## Features
* Media elements (images, videos, pdf, etc.) will now display a placeholder while they're being downloaded and decrypted.
* Media elements deleted from the server by their owner will now display a "broken/missing" image.
* The "auto-close brackets" option in the Code and Slide applications can now be disabled from the user settings.
* "Add item" and "Add board" buttons in Kanban have been moved to improve usability with small screens.
* The "transfer ownership" feature for pads has been extended to shared folders. It is now possible to offer ownership of a shared folder to a friend.
* For administrators
* Better sorting of support tickets in the administration panel. Unanswered messages will be displayed first.
* Add team configuration options in `customize/application_config.js`
* `maxTeamsSlots` defines the maximum number of teams a user can join (default is 3). Teams may significantly increase the loading time of pages and we consider 3 to be a good balance between usability and performances.
* `maxOwnedTeams` defines the number of teams a user can own (default is 1). This number prevent users to create many teams only to increase their storage limit.
## Bug fixes
* The "pad creation modal" (Ctrl+E) is now working everywhere in the drive.
* We've fixed the share button for unregistered users (https://github.com/xwiki-labs/cryptpad/issues/457).
* We've fixed an issue with newly created kanban items replacing existing ones.
* Transfering/offering pad ownership from a team to yourself is now working properly.
# Dodo release (v3.3.0) # Dodo release (v3.3.0)
## Goals ## Goals

View File

@ -1005,6 +1005,9 @@ define([
}); });
}; };
Store.setPadTitle = function (clientId, data, cb) { Store.setPadTitle = function (clientId, data, cb) {
if (store.offline) {
return void cb({ error: 'OFFLINE' });
}
var title = data.title; var title = data.title;
var href = data.href; var href = data.href;
var channel = data.channel; var channel = data.channel;
@ -1831,6 +1834,10 @@ define([
if (!cmdData || !cmdData.cmd) { return; } if (!cmdData || !cmdData.cmd) { return; }
//var data = cmdData.data; //var data = cmdData.data;
var s = getStore(cmdData.teamId); var s = getStore(cmdData.teamId);
if (s.offline) {
broadcast([], 'NETWORK_DISCONNECT');
return void cb({ error: 'OFFLINE' });
}
var cb2 = function (data2) { var cb2 = function (data2) {
// Send the CHANGE event to all the stores because the command may have // Send the CHANGE event to all the stores because the command may have
// affected data from a shared folder used by multiple teams. // affected data from a shared folder used by multiple teams.
@ -2289,9 +2296,11 @@ define([
}); });
rt.proxy.on('disconnect', function () { rt.proxy.on('disconnect', function () {
store.offline = true;
broadcast([], 'NETWORK_DISCONNECT'); broadcast([], 'NETWORK_DISCONNECT');
}); });
rt.proxy.on('reconnect', function (info) { rt.proxy.on('reconnect', function (info) {
store.offline = false;
broadcast([], 'NETWORK_RECONNECT', {myId: info.myId}); broadcast([], 'NETWORK_RECONNECT', {myId: info.myId});
}); });

View File

@ -101,6 +101,12 @@ define([
path: p path: p
}); });
}); });
proxy.on('disconnect', function () {
team.offline = true;
});
proxy.on('reconnect', function (info) {
team.offline = false;
});
}; };
var closeTeam = function (ctx, teamId) { var closeTeam = function (ctx, teamId) {

View File

@ -511,7 +511,7 @@ define([
path: initialPathInDrive // Where to store the pad if we don't have it in our drive path: initialPathInDrive // Where to store the pad if we don't have it in our drive
}; };
Cryptpad.setPadTitle(data, function (err) { Cryptpad.setPadTitle(data, function (err) {
cb(err); cb({error: err});
}); });
}); });
sframeChan.on('EV_SET_TAB_TITLE', function (newTabTitle) { sframeChan.on('EV_SET_TAB_TITLE', function (newTabTitle) {

View File

@ -64,10 +64,13 @@ define([
sframeChan.query('Q_SET_PAD_TITLE_IN_DRIVE', { sframeChan.query('Q_SET_PAD_TITLE_IN_DRIVE', {
title: title, title: title,
defaultTitle: defaultTitle defaultTitle: defaultTitle
}, function (err) { }, function (err, obj) {
err = err || (obj && obj.error);
if (err === 'E_OVER_LIMIT') { if (err === 'E_OVER_LIMIT') {
return void UI.alert(Messages.pinLimitNotPinned, null, true); return void UI.alert(Messages.pinLimitNotPinned, null, true);
} else if (err) { return; } } else if (err) {
return UI.alert(Messages.driveOfflineError);
}
evTitleChange.fire(title); evTitleChange.fire(title);
if (titleUpdated) { if (titleUpdated) {
titleUpdated(undefined, title); titleUpdated(undefined, title);