Merge branch 'staging' into design_dialogs_props

This commit is contained in:
yflory
2019-11-25 12:17:03 +01:00
75 changed files with 1269 additions and 114 deletions

View File

@@ -18,8 +18,6 @@ define(['/customize/application_config.js'], function (AppConfig) {
deprecatedKey: 'deprecated',
MAX_TEAMS_SLOTS: AppConfig.maxTeamsSlots || 3,
MAX_TEAMS_OWNED: AppConfig.maxOwnedTeams || 1,
// Sub
plan: 'CryptPad_plan',
// Apps
criticalApps: ['profile', 'settings', 'debug', 'admin', 'support', 'notifications']
};

View File

@@ -595,9 +595,10 @@ define([
}, opts);
var input = h('input.cp-password-input', attributes);
var reveal = UI.createCheckbox('cp-password-reveal', Messages.password_show);
//var reveal = UI.createCheckbox('cp-password-reveal', Messages.password_show);
var eye = h('span.fa.fa-eye.cp-password-reveal');
/*
$(reveal).find('input').on('change', function () {
if($(this).is(':checked')) {
$(input).prop('type', 'text');
@@ -607,26 +608,41 @@ define([
$(input).prop('type', 'password');
$(input).focus();
});
*/
$(eye).mousedown(function () {
$(input).prop('type', 'text');
$(input).focus();
}).mouseup(function(){
$(input).prop('type', 'password');
$(input).focus();
}).mouseout(function(){
$(input).prop('type', 'password');
$(input).focus();
});
if (displayEye) {
$(eye).mousedown(function () {
$(input).prop('type', 'text');
$(input).focus();
}).mouseup(function(){
$(input).prop('type', 'password');
$(input).focus();
}).mouseout(function(){
$(input).prop('type', 'password');
$(input).focus();
});
} else {
$(eye).click(function () {
if ($(this).hasClass('fa-eye')) {
$(input).prop('type', 'text');
$(input).focus();
$(this).removeClass('fa-eye').addClass('fa-eye-slash');
return;
}
$(input).prop('type', 'password');
$(input).focus();
$(this).removeClass('fa-eye-slash').addClass('fa-eye');
});
}
/*if (displayEye) {
$(reveal).hide();
} else {
$(eye).hide();
}
}*/
return h('span.cp-password-container', [
input,
reveal,
//reveal,
eye
]);
};
@@ -996,6 +1012,7 @@ define([
if (e.which === 32) {
e.stopPropagation();
e.preventDefault();
if ($(input).is(':checked')) { return; }
$(input).prop('checked', !$(input).is(':checked'));
$(input).change();
}

View File

@@ -570,7 +570,7 @@ define([
style: 'flex: 1;'
});
var passwordOk = h('button', Messages.properties_changePasswordButton);
var changePass = h('span.cp-password-container', [
var changePass = h('span.cp-password-change-container', [
newPassword,
passwordOk
]);
@@ -3524,19 +3524,24 @@ define([
(cb || function () {})();
};
UIElements.displayPasswordPrompt = function (common, isError) {
UIElements.displayPasswordPrompt = function (common, cfg, isError) {
var error;
if (isError) { error = setHTML(h('p.cp-password-error'), Messages.password_error); }
var info = h('p.cp-password-info', Messages.password_info);
var password = UI.passwordInput({placeholder: Messages.password_placeholder});
var button = h('button', Messages.password_submit);
cfg = cfg || {};
if (cfg.value && !isError) {
$(password).find('.cp-password-input').val(cfg.value);
}
var submit = function () {
var value = $(password).find('.cp-password-input').val();
UI.addLoadingScreen();
common.getSframeChannel().query('Q_PAD_PASSWORD_VALUE', value, function (err, data) {
if (!data) {
UIElements.displayPasswordPrompt(common, true);
UIElements.displayPasswordPrompt(common, cfg, true);
}
});
};
@@ -4091,6 +4096,7 @@ define([
common.mailbox.sendTo("INVITE_TO_TEAM_ANSWER", {
answer: yes,
teamChannel: msg.content.team.channel,
teamName: teamName,
user: {
displayName: user.name,
avatar: user.avatar,

View File

@@ -294,7 +294,8 @@ define([
// Display the notification
var name = Util.fixHTML(msg.content.user.displayName) || Messages.anonymous;
var teamName = Util.fixHTML(Util.find(msg, ['content', 'team', 'metadata', 'name']) || '');
var teamName = Util.fixHTML(Util.find(msg, ['content', 'team', 'metadata', 'name']) || '') ||
Util.fixHTML(Util.find(msg, ['content', 'teamName']));
var key = 'team_' + (msg.content.answer ? 'accept' : 'decline') + 'Invitation';
content.getFormatText = function () {
return Messages._getKey(key, [name, teamName]);

View File

@@ -575,7 +575,8 @@ define([
support: Util.find(store.proxy, ['mailboxes', 'support', 'channel']),
pendingFriends: store.proxy.friends_pending || {},
supportPrivateKey: Util.find(store.proxy, ['mailboxes', 'supportadmin', 'keys', 'curvePrivate']),
teams: teams
teams: teams,
plan: account.plan
}
};
cb(JSON.parse(JSON.stringify(metadata)));
@@ -1835,8 +1836,9 @@ define([
//var data = cmdData.data;
var s = getStore(cmdData.teamId);
if (s.offline) {
broadcast([], 'NETWORK_DISCONNECT');
return void cb({ error: 'OFFLINE' });
var send = s.id ? s.sendEvent : sendDriveEvent;
send('NETWORK_DISCONNECT');
return void cb({ error: 'OFFLINE' });
}
var cb2 = function (data2) {
// Send the CHANGE event to all the stores because the command may have
@@ -2291,17 +2293,18 @@ define([
if (path[0] === 'drive' && path[1] === "migrate" && value === 1) {
rt.network.disconnect();
rt.realtime.abort();
broadcast([], 'NETWORK_DISCONNECT');
sendDriveEvent('NETWORK_DISCONNECT');
}
});
// Proxy handlers (reconnect only called when the proxy is ready)
rt.proxy.on('disconnect', function () {
store.offline = true;
broadcast([], 'NETWORK_DISCONNECT');
sendDriveEvent('NETWORK_DISCONNECT');
});
rt.proxy.on('reconnect', function (info) {
rt.proxy.on('reconnect', function () {
store.offline = false;
broadcast([], 'NETWORK_RECONNECT', {myId: info.myId});
sendDriveEvent('NETWORK_RECONNECT');
});
// Ping clients regularly to make sure one tab was not closed without sending a removeClient()

View File

@@ -20,11 +20,11 @@ define([
}
profile.edit = Hash.getEditHashFromKeys(secret);
profile.view = Hash.getViewHashFromKeys(secret);
cb();
setTimeout(cb);
});
return;
}
cb();
setTimeout(cb);
};
var openChannel = function (ctx) {

View File

@@ -21,7 +21,8 @@ define([
// No version: visible edit
// Version 2: encrypted edit links
SF.checkMigration = function (secondaryKey, proxy, uo, cb) {
SF.checkMigration = function (secondaryKey, proxy, uo, _cb) {
var cb = Util.once(Util.mkAsync(_cb));
var drive = proxy.drive || proxy;
// View access: can't migrate
if (!secondaryKey) { return void cb(); }
@@ -82,7 +83,7 @@ define([
};
SF.load = function (config, id, data, _cb) {
var cb = Util.once(_cb);
var cb = Util.once(Util.mkAsync(_cb));
var network = config.network;
var store = config.store;
var isNew = config.isNew;
@@ -188,7 +189,7 @@ define([
return;
}
sf.teams.forEach(function (obj) {
var leave = function () { SF.leave(secret.channel, teamId); };
var leave = function () { SF.leave(secret.channel, obj.store.id); };
/*
var uo = obj.store.manager.addProxy(obj.id, rt, leave, obj.secondaryKey);
// NOTE: Shared folder migration, disable for now
@@ -300,6 +301,7 @@ define([
*/
SF.loadSharedFolders = function (Store, network, store, userObject, waitFor) {
var shared = Util.find(store.proxy, ['drive', UserObject.SHARED_FOLDERS]) || {};
var w = waitFor();
nThen(function (waitFor) {
Object.keys(shared).forEach(function (id) {
var sf = shared[id];
@@ -309,7 +311,9 @@ define([
isNewChannel: Store.isNewChannel
}, id, sf, waitFor());
});
}).nThen(waitFor());
}).nThen(function () {
setTimeout(w);
});
};
return SF;

View File

@@ -25,10 +25,6 @@ define([
var Nacl = window.nacl;
var initializeTeams = function (ctx, cb) {
cb();
};
var registerChangeEvents = function (ctx, team, proxy, fId) {
if (!team) { return; }
if (!fId) {
@@ -57,6 +53,14 @@ define([
return false;
}
});
proxy.on('disconnect', function () {
team.offline = true;
team.sendEvent('NETWORK_DISCONNECT');
});
proxy.on('reconnect', function () {
team.offline = false;
team.sendEvent('NETWORK_RECONNECT');
});
}
proxy.on('change', [], function (o, n, p) {
if (fId) {
@@ -101,12 +105,6 @@ define([
path: p
});
});
proxy.on('disconnect', function () {
team.offline = true;
});
proxy.on('reconnect', function (/* info */) {
team.offline = false;
});
};
var closeTeam = function (ctx, teamId) {
@@ -338,7 +336,7 @@ define([
};
var openChannel = function (ctx, teamData, id, _cb) {
var cb = Util.once(_cb);
var cb = Util.once(Util.mkAsync(_cb));
var hash = teamData.hash || teamData.roHash;
var secret = Hash.getSecrets('team', hash, teamData.password);
@@ -1277,10 +1275,6 @@ define([
var teams = store.proxy.teams = store.proxy.teams || {};
initializeTeams(ctx, waitFor(function (err) {
if (err) { return; }
}));
// Listen for changes in our access rights (if another worker receives edit access)
ctx.store.proxy.on('change', ['teams'], function (o, n, p) {
if (p[2] !== 'hash') { return; }
@@ -1363,6 +1357,10 @@ define([
removeClient(ctx, clientId);
};
team.execCommand = function (clientId, obj, cb) {
if (ctx.store.offline) {
return void cb({ error: 'OFFLINE' });
}
var cmd = obj.cmd;
var data = obj.data;
if (cmd === 'SUBSCRIBE') {

View File

@@ -45,6 +45,8 @@ define([
var ids = id ? [id] : exp.findChannels([channel]);
ids.forEach(function (i) {
var data = exp.getFileData(i, true);
var oldHref = exp.getHref(data);
if (oldHref === href) { return; }
data.href = exp.cryptor.encrypt(href);
});
};

View File

@@ -206,7 +206,7 @@ define([
// 2c: 'view' pad and '/p/' and a wrong password stored --> the seed is incorrect
// 2d: 'view' pad and '/p/' and password never stored (security feature) --> password-prompt
var askPassword = function (wrongPasswordStored) {
var askPassword = function (wrongPasswordStored, cfg) {
// Ask for the password and check if the pad exists
// If the pad doesn't exist, it means the password isn't correct
// or the pad has been deleted
@@ -223,7 +223,6 @@ define([
if (wrongPasswordStored) {
// Store the correct password
nThen(function (w) {
// XXX noPasswordStored: return; ?
Cryptpad.setPadAttribute('password', password, w(), parsed.getUrl());
Cryptpad.setPadAttribute('channel', secret.channel, w(), parsed.getUrl());
if (parsed.hashData.mode === 'edit') {
@@ -250,11 +249,14 @@ define([
// Not a file, so we can use `isNewChannel`
Cryptpad.isNewChannel(window.location.href, password, next);
});
sframeChan.event("EV_PAD_PASSWORD");
sframeChan.event("EV_PAD_PASSWORD", cfg);
};
var done = waitFor();
var stored = false;
var passwordCfg = {
value: ''
};
nThen(function (w) {
Cryptpad.getPadAttribute('title', w(function (err, data) {
stored = (!err && typeof (data) === "string");
@@ -264,7 +266,7 @@ define([
}), parsed.getUrl());
}).nThen(function (w) {
if (!password && !stored && sessionStorage.newPadPassword) {
password = sessionStorage.newPadPassword;
passwordCfg.value = sessionStorage.newPadPassword;
delete sessionStorage.newPadPassword;
}
@@ -274,7 +276,7 @@ define([
Cryptpad.getFileSize(window.location.href, password, w(function (e, size) {
if (size !== 0) { return void todo(); }
// Wrong password or deleted file?
askPassword(true);
askPassword(true, passwordCfg);
}));
return;
}
@@ -293,7 +295,7 @@ define([
return void todo();
}
// Wrong password or deleted file?
askPassword(true);
askPassword(true, passwordCfg);
}));
}).nThen(done);
}
@@ -364,7 +366,6 @@ define([
donateURL: Cryptpad.donateURL,
upgradeURL: Cryptpad.upgradeURL
},
plan: localStorage[Utils.Constants.plan],
isNewFile: isNewFile,
isDeleted: isNewFile && window.location.hash.length > 0,
forceCreationScreen: forceCreationScreen,

View File

@@ -595,8 +595,8 @@ define([
UI.addTooltips();
ctx.sframeChan.on("EV_PAD_PASSWORD", function () {
UIElements.displayPasswordPrompt(funcs);
ctx.sframeChan.on("EV_PAD_PASSWORD", function (cfg) {
UIElements.displayPasswordPrompt(funcs, cfg);
});
ctx.sframeChan.on("EV_PAD_PASSWORD_ERROR", function () {

View File

@@ -170,7 +170,6 @@
"viewOpenTitle": "Obre aquest document en mode només de lectura en una pestanya nova",
"fileShare": "Copia l'enllaç",
"getEmbedCode": "Obté el codi d'incrustat",
"viewEmbedTitle": "Inscrusta el document en una pàgina externa",
"viewEmbedTag": "Per incrustar aquest document, poseu aquest iframe allà on vulgueu de la vostra pàgina. Podeu donar-li l'estil desitjat utilitzant els atributs CSS o HTML.",
"fileEmbedTitle": "Incrusta el fitxer en una pàgina externa",
"fileEmbedScript": "Per incrustar aquest fitxer, poseu aquest script un cop a la vostra pàgina per carregar l'Etiqueta Multimèdia:",

View File

@@ -168,7 +168,6 @@
"viewOpenTitle": "Pad schreibgeschützt in neuem Tab öffnen",
"fileShare": "Link kopieren",
"getEmbedCode": "Einbettungscode anzeigen",
"viewEmbedTitle": "Das Pad in eine externe Webseite einbetten",
"viewEmbedTag": "Um dieses Pad einzubetten, platziere diesen iframe an der gewünschten Stelle deiner HTML-Seite. Du kannst es mit CSS oder HTML-Attributen gestalten.",
"fileEmbedTitle": "Die Datei in einer externen Seite einbetten",
"fileEmbedScript": "Um diese Datei einzubetten, füge dieses Skript einmal in deiner Webseite ein, damit das Media-Tag geladen wird:",
@@ -955,15 +954,14 @@
"properties_passwordWarning": "Das Passwort wurde erfolgreich geändert, aber dein CryptDrive konnte nicht aktualisiert werden. Du musst möglicherweise die alte Version des Pads manuell entfernen.<br>Klicke auf OK, um die Seite neu zu laden und die Zugriffsrechte zu aktualisieren.",
"properties_passwordSuccess": "Das Passwort wurde erfolgreich geändert.<br>Klicke auf OK, um die Seite neu zu laden und die Zugriffsrechte zu aktualisieren.",
"properties_changePasswordButton": "Absenden",
"share_linkCategory": "Link teilen",
"share_linkCategory": "Link",
"share_linkAccess": "Zugriffsrechte",
"share_linkEdit": "Bearbeiten",
"share_linkView": "Ansehen",
"share_linkOptions": "Linkoptionen",
"share_linkEmbed": "Einbettungsmodus (Werkzeugleiste und Benutzerliste sind verborgen)",
"share_linkPresent": "Anzeigemodus (Bearbeitbare Abschnitte sind verborgen)",
"share_linkOpen": "In einem neuen Tab öffnen",
"share_linkCopy": "In die Zwischenablage kopieren",
"share_linkEmbed": "Einbettungsmodus (Werkzeugleiste und Benutzerliste verbergen)",
"share_linkPresent": "Anzeigemodus",
"share_linkOpen": "Vorschau",
"share_linkCopy": "Kopieren",
"share_embedCategory": "Einbetten",
"share_mediatagCopy": "Media-Tag in die Zwischenablage kopieren",
"loading_pad_1": "Initialisiere Pad",
@@ -977,7 +975,7 @@
"sharedFolders_create_name": "Neuer Ordner",
"sharedFolders_create_owned": "Eigener Ordner",
"sharedFolders_create_password": "Ordnerpasswort",
"sharedFolders_share": "Teile diese URL mit anderen registrierten Benutzern, um ihnen Zugriff auf den geteilten Ordner zu geben. Sobald sie diese URL öffnen, wird der geteilte Ordner zu ihrem CryptDrive hinzugefügt.",
"sharedFolders_share": "Teile diesen Link mit anderen registrierten Benutzern, um ihnen Zugriff auf den geteilten Ordner zu geben. Sobald sie diesen Link öffnen, wird der geteilte Ordner zu ihrem CryptDrive hinzugefügt.",
"chrome68": "Anscheinend benutzt du Chrome oder Chromium in Version 68. Ein darin enthaltener Fehler führt dazu, dass nach ein paar Sekunden die Seite komplett weiß wird oder nicht mehr auf Klicks reagiert. Um das Problem zu beheben, wechsle den Tab und kehre zu CryptPad zurück, oder versuche zu scrollen. Dieser Fehler sollte in der nächsten Version deines Browsers behoben sein.",
"autostore_file": "Diese Datei",
"autostore_sf": "Dieser Ordner",
@@ -1233,5 +1231,16 @@
"driveOfflineError": "Die Verbindung zu CryptPad ist verloren gegangen. Änderungen an diesem Pad werden nicht in deinem CryptDrive gespeichert. Bitte schließe alle CryptPad-Tabs und versuche es in einem neuen Fenster erneut. ",
"storageStatus": "Speicher:<br /><b>{0}</b> von <b>{1}</b> belegt",
"teams_table": "Rollen",
"teams_table_generic": "Rollen und Berechtigungen"
"teams_table_generic": "Rollen und Berechtigungen",
"teams_table_generic_view": "Ansehen: Zugriff auf Ordner und Pads (nur Lesen)",
"teams_table_generic_edit": "Bearbeiten: Erstellen, Ändern und Löschen von Ordnern und Pads",
"teams_table_generic_admin": "Mitglieder verwalten: Einladen und Entfernen von Mitgliedern, Ändern von Benutzerrollen bis maximal Admin",
"teams_table_generic_own": "Team verwalten: Ändern von Namen und Avatar des Teams, Hinzufügen oder Entfernen von Eigentümerschaften des Teams, Löschung des Teams",
"teams_table_specific": "Ausnahmen",
"teams_table_specificHint": "Dies sind ältere geteilte Ordner, wo Benutzer noch Bearbeitungsrechte haben. Für hier erstellte oder hierhin kopierte Pads gelten Standard-Berechtigungen.",
"teams_table_admins": "Mitglieder verwalten",
"teams_table_owners": "Team verwalten",
"teams_table_role": "Rolle",
"share_contactCategory": "Kontakte",
"pad_wordCount": "Wörter: {0}"
}

View File

@@ -141,7 +141,6 @@
"viewOpenTitle": "Άνοιγμα αυτού του pad μόνο για ανάγνωση σε νέα καρτέλα",
"fileShare": "Αντιγραφή συνδέσμου",
"getEmbedCode": "Κώδικας ενσωμάτωσης",
"viewEmbedTitle": "Ενσωματώστε αυτό το pad σε μία εξωτερική σελίδα",
"viewEmbedTag": "Για να ενσωματώσετε αυτό το pad, συμπεριλάβετε αυτό το iframe στη σελίδα σας, στο σημείο που θέλετε. Μπορείτε να το διαμορφώσετε χρησιμοποιώντας CSS η HTML παραμέτρους.",
"fileEmbedTitle": "Ενσωματώστε το αρχείο σε μια εξωτερική σελίδα",
"fileEmbedScript": "Για να ενσωματώσετε αυτό το αρχείο, συμπεριλάβετε αυτό το script στη σελίδα σας για να φορτωθεί το Media Tag:",

View File

@@ -496,7 +496,6 @@
"kanban_removeItemConfirm": "Estás seguro que quieres eliminar este ítem?",
"printBackgroundNoValue": "<em>No se muestra fondo de pantalla</em>",
"getEmbedCode": "Obtener el código insertado",
"viewEmbedTitle": "Insertar la nota en una página externa",
"viewEmbedTag": "Para insertar esta nota, incluya este iframe en su página donde usted quiera. Puede darle estilo usando CSS o atributos HTML.",
"fileEmbedTitle": "Insertar el archivo en una pagina externa",
"fileEmbedScript": "Para insertar este archivo, incluya este código una vez en su página para cargar el Etiqueta de Media:",

View File

@@ -170,7 +170,6 @@
"viewOpenTitle": "Ouvrir le lien en lecture seule dans un nouvel onglet",
"fileShare": "Copier le lien",
"getEmbedCode": "Obtenir le code d'intégration",
"viewEmbedTitle": "Intégrer le pad dans une page web",
"viewEmbedTag": "Pour intégrer ce pad, veuillez inclure l'iframe suivant dans votre page là où vous souhaitez l'afficher. Vous pouvez changer sa taille en utilisant du code CSS ou des attributs HTML.",
"fileEmbedTitle": "Intégrer le fichier dans une page web",
"fileEmbedScript": "Pour intégrer un fichier, veuillez inclure le script suivant une fois dans votre page afin de pouvoir charger le Media Tag :",
@@ -962,15 +961,14 @@
"properties_passwordWarning": "Le mot de passe a été modifié avec succès mais nous n'avons pas réussi à mettre à jour votre CryptDrive avec les nouvelles informations. Vous devrez peut-être supprimer manuellement l'ancienne version de ce pad.<br>Appuyez sur OK pour recharger le pad et mettre à jour vos droits d'accès.",
"properties_passwordSuccess": "Le mot de passe a été modifié avec succès.<br>Appuyez sur OK pour mettre à jour vos droits d'accès.",
"properties_changePasswordButton": "Valider",
"share_linkCategory": "Partage",
"share_linkCategory": "Lien",
"share_linkAccess": "Droits d'accès",
"share_linkEdit": "Édition",
"share_linkView": "Lecture-seule",
"share_linkOptions": "Options du lien",
"share_linkEmbed": "Mode intégration (barre d'outils cachée)",
"share_linkPresent": "Mode présentation (sections d'édition cachées)",
"share_linkOpen": "Ouvrir le lien",
"share_linkCopy": "Copier le lien",
"share_linkEmbed": "Mode intégration (cache la barre d'outils)",
"share_linkPresent": "Présenter",
"share_linkOpen": "Apperçu",
"share_linkCopy": "Copier",
"share_embedCategory": "Intégration",
"share_mediatagCopy": "Copier le mediatag",
"loading_pad_1": "Initialisation du pad",
@@ -984,7 +982,7 @@
"sharedFolders_create_name": "Nom du dossier",
"sharedFolders_create_owned": "Être propriétaire du dossier",
"sharedFolders_create_password": "Mot de passe du dossier",
"sharedFolders_share": "Partager cette URL avec d'autres utilisateurs enregistrés leur donne accès au dossier partagé. Une fois l'URL ouverte, le dossier partagé sera ajouté au répertoire racine de leur CryptDrive.",
"sharedFolders_share": "Partager ce lien avec d'autres utilisateurs enregistrés leur donne accès au dossier partagé. Une fois le lien ouvert, le dossier partagé sera ajouté à leur CryptDrive.",
"chrome68": "Il semblerait que vous utilisiez le navigateur Chrome version 68. Ce navigateur contient un bug rendant certaines pages entièrement blanches après quelques secondes ou bloquant les clics. Pour corriger ce problème, vous pouvez vous déplacer vers un nouvel onglet et revenir ou vous pouvez essayer de faire défiler la page. Ce bug devrait être corrigé dans la prochaine version du navigateur.",
"autostore_file": "fichier",
"autostore_sf": "dossier",
@@ -1242,5 +1240,7 @@
"teams_table_specificHint": "Dans ces dossiers partagés qui sont d'une version antérieure, les lecteurs peuvent modifier les pads existants. Les pads créés ou copiés dans ces dossiers auront les permissions standard.",
"teams_table_admins": "Gérer les membres",
"teams_table_owners": "Gérer l'équipe",
"teams_table_role": "Rôle"
"teams_table_role": "Rôle",
"share_contactCategory": "Contacts",
"pad_wordCount": "Mots : {0}"
}

View File

@@ -169,7 +169,6 @@
"viewOpenTitle": "Apri questo pad in modalità solo lettura in una nuova finestra",
"fileShare": "Copia il link",
"getEmbedCode": "Mostra il codice per embedding",
"viewEmbedTitle": "Fai l'embed di questo pad in una pagina esterna",
"viewEmbedTag": "Per fare l'embed di questo pad, includi questo iframe nella tua pagina dovunque tu voglia. Puoi modificarne lo stile con gli attributi HTML o CSS.",
"fileEmbedTitle": "Fai l'embed di questo file in una pagina esterna",
"fileEmbedScript": "Per fare l'embed di questo file, includi questo script una volta nella tua pagina per caricare il Media Tag:",

View File

@@ -1241,5 +1241,6 @@
"teams_table_specificHint": "These are older shared folders where viewers still have permission to edit existing pads. Pads created or copied into these folders will have standard permissions.",
"teams_table_admins": "Manage members",
"teams_table_owners": "Manage team",
"teams_table_role": "Role"
"teams_table_role": "Role",
"pad_wordCount": "Words: {0}"
}

View File

@@ -161,7 +161,6 @@
"viewOpenTitle": "Åpne denne paden i lesemodus i en ny fane",
"fileShare": "Kopier linken",
"getEmbedCode": "Hent innlagt kode",
"viewEmbedTitle": "Legg inn paden i en ekstern side",
"canvas_width": "Bredde",
"canvas_opacity": "Gjennomsiktighet",
"canvas_opacityLabel": "Gjennomsiktighet:{0}",

View File

@@ -404,7 +404,6 @@
"viewOpen": "",
"viewOpenTitle": "",
"getEmbedCode": "",
"viewEmbedTitle": "",
"viewEmbedTag": "",
"fileEmbedTitle": "",
"fileEmbedScript": "",

View File

@@ -392,7 +392,6 @@
"themeButton": "Temă",
"themeButtonTitle": "Alege tema de culori de folosit pentru cod si editorul slide-urilor",
"fileShare": "Copiază linkul",
"viewEmbedTitle": "Include pad-ul într-o pagină externă",
"fileEmbedTitle": "Include fișierul într-o pagină externă",
"fileEmbedTag": "După care plasează această etichetă Media oriunde pe pagina unde vrei sa o plasezi",
"ok": "Ok",

View File

@@ -168,7 +168,6 @@
"viewOpenTitle": "Открыть данный документ для чтения в новой вкладке",
"fileShare": "Скопировать ссылку",
"getEmbedCode": "Получить код для встраивания",
"viewEmbedTitle": "Встроить документ во внешнюю страницу",
"notifyJoined": "{0} присоединился к совместной сессии",
"notifyRenamed": "{0} теперь известен как {1}",
"notifyLeft": "{0} покинул совместную сессию",