diff --git a/customize.dist/src/less2/include/alertify.less b/customize.dist/src/less2/include/alertify.less
index d3bf95360..06f3ad58a 100644
--- a/customize.dist/src/less2/include/alertify.less
+++ b/customize.dist/src/less2/include/alertify.less
@@ -153,6 +153,41 @@
margin-bottom: @alertify_padding-base;
margin: 0;
overflow: auto;
+ .alertify-tabs {
+ .alertify-tabs-titles {
+ height: 30px;
+ display: flex;
+ border-bottom: 1px solid @alertify-fore;
+ margin-bottom: 20px;
+ box-sizing: content-box;
+ span {
+ font-size: 20px;
+ height: 30px;
+ line-height: 30px;
+ box-sizing: border-box;
+ padding: 0 15px;
+ border-left: 1px solid lighten(@alertify-base, 10%);
+ border-right: 1px solid lighten(@alertify-base, 10%);
+ cursor: pointer;
+ }
+ span.alertify-tabs-active {
+ background-color: @alertify-fore;
+ border-left: 1px solid @alertify-fore;
+ border-right: 1px solid @alertify-fore;
+ color: @alertify-base;
+ font-weight: bold;
+ cursor: default;
+ }
+ }
+ .alertify-tabs-contents {
+ & > div {
+ display: none;
+ }
+ & > div.alertify-tabs-content-active {
+ display: block;
+ }
+ }
+ }
}
input:not(.form-control), textarea {
diff --git a/customize.dist/translations/messages.fr.js b/customize.dist/translations/messages.fr.js
index ad1059b6c..c26333b2b 100644
--- a/customize.dist/translations/messages.fr.js
+++ b/customize.dist/translations/messages.fr.js
@@ -375,6 +375,7 @@ define(function () {
out.fm_emptyTrashDialog = "Êtes-vous sûr de vouloir vider la corbeille ?";
out.fm_removeSeveralPermanentlyDialog = "Êtes-vous sûr de vouloir supprimer ces {0} éléments de votre CryptDrive de manière permanente ?";
out.fm_removePermanentlyDialog = "Êtes-vous sûr de vouloir supprimer cet élément de votre CryptDrive de manière permanente ?";
+ out.fm_deleteOwnedPads = "Êtes-vous sûr de vouloir supprimer définitivement ce pad du serveur ?";
out.fm_restoreDialog = "Êtes-vous sûr de vouloir restaurer {0} à son emplacement précédent ?";
out.fm_removeSeveralDialog = "Êtes-vous sûr de vouloir déplacer ces {0} éléments vers la corbeille ?";
out.fm_removeDialog = "Êtes-vous sûr de vouloir déplacer {0} vers la corbeille ?";
@@ -391,6 +392,7 @@ define(function () {
out.fm_info_allFiles = 'Contient tous les fichiers de "Documents", "Fichiers non triés" et "Corbeille". Vous ne pouvez pas supprimer ou déplacer des fichiers depuis cet endroit.'; // Same here
out.fm_info_anonymous = 'Vous n\'êtes pas connecté, ces pads risquent donc d\'être supprimés (découvrez pourquoi). ' +
'Inscrivez-vous ou connectez-vous pour les maintenir en vie.';
+ out.fm_info_owned = "Vous êtes propriétaire des pads affichés dans cette catégorie. Cela signifie que vous pouvez choisir de les supprimer définitivement du serveur à n'importe quel moment. Ils seront alors inaccessibles pour tous les autres utilisateurs.";
out.fm_alert_backupUrl = "Lien de secours pour ce CryptDrive.
" +
"Il est fortement recommandé de garder ce lien pour vous-même.
" +
"Il vous servira en cas de perte des données de votre navigateur afin de retrouver vos fichiers.
" +
@@ -409,6 +411,8 @@ define(function () {
out.fm_burnThisDriveButton = "Effacer toutes les informations stockées par CryptPad dans votre navigateur";
out.fm_burnThisDrive = "Êtes-vous sûr de vouloir supprimmer tout ce qui est stocké par CryptPad dans votre navigateur ?
" +
"Cette action supprimera votre CryptDrive et son historique de votre navigateur, mais les pads existeront toujours (de manière chiffrée) sur notre serveur.";
+ out.fm_padIsOwned = "Vous êtes le propriétaire de ce pad";
+ out.fm_padIsOwnedOther = "Ce pad est la propriété d'un autre utilisateur";
// File - Context menu
out.fc_newfolder = "Nouveau dossier";
out.fc_rename = "Renommer";
@@ -785,5 +789,13 @@ define(function () {
out.feedback_privacy = "Nous prenons au sérieux le respect de votre vie privée, et en même temps nous souhaitons rendre CryptPad très simple à utiliser. Nous utilisons cette page pour comprendre quelles fonctionnalités dans l'interface comptent le plus pour les utilisateurs, en l'appelant avec un paramètre spécifiant quelle action a été réalisée.";
out.feedback_optout = "Si vous le souhaitez, vous pouvez désactiver ces requêtes en vous rendant dans votre page de préférences, où vous trouverez une case à cocher pour désactiver le retour d'expérience.";
+ // Creation page
+ // Properties about creation data
+ out.creation_owners = "Propriétaires";
+ out.creation_ownedByOther = "Possédé par un autre utilisateur";
+ out.creation_noOwner = "Pad de propriétaire";
+ out.creation_expiration = "Date d'expiration";
+ out.creation_propertiesTitle = "Disponibilité";
+
return out;
});
diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js
index 08d206ca4..cd3f966a9 100644
--- a/customize.dist/translations/messages.js
+++ b/customize.dist/translations/messages.js
@@ -380,6 +380,7 @@ define(function () {
out.fm_removePermanentlyDialog = "Are you sure you want to remove that element from your CryptDrive permanently?";
out.fm_removeSeveralDialog = "Are you sure you want to move these {0} elements to the trash?";
out.fm_removeDialog = "Are you sure you want to move {0} to the trash?";
+ out.fm_deleteOwnedPads = "Are you sure you want to remove permanently this pad from the server?";
out.fm_restoreDialog = "Are you sure you want to restore {0} to its previous location?";
out.fm_unknownFolderError = "The selected or last visited directory no longer exist. Opening the parent folder...";
out.fm_contextMenuError = "Unable to open the context menu for that element. If the problem persist, try to reload the page.";
@@ -394,6 +395,7 @@ define(function () {
out.fm_info_allFiles = 'Contains all the files from "Documents", "Unsorted" and "Trash". You can\'t move or remove files from here.'; // Same here
out.fm_info_anonymous = 'You are not logged in so your pads will expire after 3 months (find out more). ' +
'Sign up or Log in to keep them alive.';
+ out.fm_info_owned = "You are the owner of the pads displayed here. This means you can remove them permanently from the server whenever you want. If you do so, other users won't be able to access them anymore.";
out.fm_alert_backupUrl = "Backup link for this drive.
" +
"It is highly recommended that you keep it secret.
" +
"You can use it to retrieve all your files in case your browser memory got erased.
" +
@@ -412,6 +414,8 @@ define(function () {
out.fm_burnThisDriveButton = "Erase all information stored by CryptPad in your browser";
out.fm_burnThisDrive = "Are you sure you want to remove everything stored by CryptPad in your browser?
" +
"This will remove your CryptDrive and its history from your browser, but your pads will still exist (encrypted) on our server.";
+ out.fm_padIsOwned = "You are the owner of this pad";
+ out.fm_padIsOwnedOther = "This pad is owned by another user";
// File - Context menu
out.fc_newfolder = "New folder";
out.fc_rename = "Rename";
@@ -819,6 +823,12 @@ define(function () {
out.creation_createTitle = "Create a pad";
out.creation_createFromTemplate = "From template";
out.creation_createFromScratch = "From scratch";
+ // Properties about creation data
+ out.creation_owners = "Owners";
+ out.creation_ownedByOther = "Owned by another user";
+ out.creation_noOwner = "No owner";
+ out.creation_expiration = "Expiration time";
+ out.creation_propertiesTitle = "Availability";
return out;
});
diff --git a/www/common/common-interface.js b/www/common/common-interface.js
index 5cbcaa5f5..f45d44380 100644
--- a/www/common/common-interface.js
+++ b/www/common/common-interface.js
@@ -128,6 +128,38 @@ define([
]);
};
+ /**
+ * tabs is an array containing objects
+ * each object must have the following attributes:
+ * - title: String
+ * - content: DOMElement
+ */
+ dialog.tabs = function (tabs) {
+ var contents = [];
+ var titles = [];
+ tabs.forEach(function (tab) {
+ if (!tab.content || !tab.title) { return; }
+ var content = tab.content;
+ var title = h('span.alertify-tabs-title', tab.title);
+ $(title).click(function () {
+ titles.forEach(function (t) { $(t).removeClass('alertify-tabs-active'); });
+ contents.forEach(function (c) { $(c).removeClass('alertify-tabs-content-active'); });
+ $(title).addClass('alertify-tabs-active');
+ $(content).addClass('alertify-tabs-content-active');
+ });
+ titles.push(title);
+ contents.push(content);
+ });
+ if (contents.length) {
+ $(contents[0]).addClass('alertify-tabs-content-active');
+ $(titles[0]).addClass('alertify-tabs-active');
+ }
+ return h('div.alertify-tabs', [
+ h('div.alertify-tabs-titles', titles),
+ h('div.alertify-tabs-contents', contents),
+ ]);
+ };
+
UI.tokenField = function (target) {
var t = {
element: target || h('input'),
diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js
index 3cd975a65..90e554d31 100644
--- a/www/common/common-ui-elements.js
+++ b/www/common/common-ui-elements.js
@@ -89,17 +89,50 @@ define([
common.getPadAttribute('tags', waitFor(function (err, val) {
data.tags = val;
}));
+ common.getPadAttribute('owners', waitFor(function (err, val) {
+ data.owners = val;
+ }));
+ common.getPadAttribute('expire', waitFor(function (err, val) {
+ data.expire = val;
+ }));
}).nThen(function () {
cb(void 0, data);
});
};
- UIElements.getProperties = function (common, data, cb) {
+ var getRightsProperties = function (common, data, cb) {
var $d = $('