Merge branch 'next-reply' of https://github.com/tinode/webapp into next-reply
This commit is contained in:
+154
-35
@@ -69,8 +69,8 @@ a.gray:focus {
|
|||||||
height: 1.4em;
|
height: 1.4em;
|
||||||
line-height: 1.4em;
|
line-height: 1.4em;
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
padding-left: .35rem;
|
padding: 0 .35rem;
|
||||||
padding-right: .35rem;
|
margin: 0.15rem;
|
||||||
border: 1px solid #999;
|
border: 1px solid #999;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
@@ -405,6 +405,10 @@ div.trusted-badge {
|
|||||||
color: #FFC107!important; /* amber 500 */
|
color: #FFC107!important; /* amber 500 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.green {
|
||||||
|
color: #388e3c; /* green 700 */
|
||||||
|
}
|
||||||
|
|
||||||
.red {
|
.red {
|
||||||
color: #D32F2F!important; /* red 700 */
|
color: #D32F2F!important; /* red 700 */
|
||||||
}
|
}
|
||||||
@@ -806,6 +810,11 @@ i.search {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 1rem 1.5rem 1rem 0.5rem;
|
padding: 1rem 1.5rem 1rem 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.info-box > span {
|
||||||
|
line-height: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.info-box .cancel {
|
.info-box .cancel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0.25rem;
|
right: 0.25rem;
|
||||||
@@ -830,6 +839,7 @@ i.search {
|
|||||||
border-bottom: 1px solid #b3e5fc;
|
border-bottom: 1px solid #b3e5fc;
|
||||||
color: #0288d1;
|
color: #0288d1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-box .cancel .material-icons {
|
.info-box .cancel .material-icons {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
color: #757575;
|
color: #757575;
|
||||||
@@ -929,6 +939,12 @@ i.search {
|
|||||||
font-weight: lighter;
|
font-weight: lighter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.contact-box .contact-comment > span {
|
||||||
|
overflow-x: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
.contact-box .contact-comment b {
|
.contact-box .contact-comment b {
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
}
|
}
|
||||||
@@ -1856,7 +1872,7 @@ ul.tabbar li.active > a {
|
|||||||
width: 1.35rem;
|
width: 1.35rem;
|
||||||
height: 1.35rem;
|
height: 1.35rem;
|
||||||
margin-left: 0.5rem;
|
margin-left: 0.5rem;
|
||||||
line-height: 1.35rem;
|
line-height: 1.45rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
@@ -1931,6 +1947,7 @@ ul.tabbar li.active > a {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
padding-top: 0.1em;
|
||||||
color: rgba(250, 250, 250, 0.8); /* default text color #FAFAFA, gray 50 */
|
color: rgba(250, 250, 250, 0.8); /* default text color #FAFAFA, gray 50 */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1939,105 +1956,204 @@ ul.tabbar li.active > a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Colors of letter tiles */
|
/* Colors of letter tiles */
|
||||||
.light-color0 {
|
.lt-bg-0 {
|
||||||
background-color: #ef9a9a;
|
background-color: #ef9a9a;
|
||||||
}
|
}
|
||||||
.light-color1 {
|
.lt-bg-1 {
|
||||||
background-color: #90caf9;
|
background-color: #90caf9;
|
||||||
}
|
}
|
||||||
.light-color2 {
|
.lt-bg-2 {
|
||||||
background-color: #b0bec5;
|
background-color: #b0bec5;
|
||||||
}
|
}
|
||||||
.light-color3 {
|
.lt-bg-3 {
|
||||||
background-color: #b39ddb;
|
background-color: #b39ddb;
|
||||||
}
|
}
|
||||||
.light-color4 {
|
.lt-bg-4 {
|
||||||
background-color: #ffab91;
|
background-color: #ffab91;
|
||||||
}
|
}
|
||||||
.light-color5 {
|
.lt-bg-5 {
|
||||||
background-color: #a5d6a7;
|
background-color: #a5d6a7;
|
||||||
}
|
}
|
||||||
.light-color6 {
|
.lt-bg-6 {
|
||||||
background-color: #eeeeee;
|
background-color: #eeeeee;
|
||||||
}
|
}
|
||||||
.light-color7 {
|
.lt-bg-7 {
|
||||||
background-color: #e6ee9c;
|
background-color: #e6ee9c;
|
||||||
}
|
}
|
||||||
.light-color8 {
|
.lt-bg-8 {
|
||||||
background-color: #c5e1a5;
|
background-color: #c5e1a5;
|
||||||
}
|
}
|
||||||
.light-color9 {
|
.lt-bg-9 {
|
||||||
background-color: #f0e57d;
|
background-color: #f0e57d;
|
||||||
}
|
}
|
||||||
.light-color10 {
|
.lt-bg-10 {
|
||||||
background-color: #f48fb1;
|
background-color: #f48fb1;
|
||||||
}
|
}
|
||||||
.light-color11 {
|
.lt-bg-11 {
|
||||||
background-color: #9fa8da;
|
background-color: #9fa8da;
|
||||||
}
|
}
|
||||||
.light-color12 {
|
.lt-bg-12 {
|
||||||
background-color: #ffe082;
|
background-color: #ffe082;
|
||||||
}
|
}
|
||||||
.light-color13 {
|
.lt-bg-13 {
|
||||||
background-color: #bcaaa4;
|
background-color: #bcaaa4;
|
||||||
}
|
}
|
||||||
.light-color14 {
|
.lt-bg-14 {
|
||||||
background-color: #80deea;
|
background-color: #80deea;
|
||||||
}
|
}
|
||||||
.light-color15 {
|
.lt-bg-15 {
|
||||||
background-color: #ce93d8;
|
background-color: #ce93d8;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Darker version of letter tile colors */
|
/* Darker version of letter tile colors */
|
||||||
.dark-color0 {
|
.dk-bg-0 {
|
||||||
background-color: #C62828;
|
background-color: #C62828;
|
||||||
}
|
}
|
||||||
.dark-color1 {
|
.dk-bg-1 {
|
||||||
background-color: #AD1457;
|
background-color: #AD1457;
|
||||||
}
|
}
|
||||||
.dark-color2 {
|
.dk-bg-2 {
|
||||||
background-color: #6A1B9A;
|
background-color: #6A1B9A;
|
||||||
}
|
}
|
||||||
.dark-color3 {
|
.dk-bg-3 {
|
||||||
background-color: #4527A0;
|
background-color: #4527A0;
|
||||||
}
|
}
|
||||||
.dark-color4 {
|
.dk-bg-4 {
|
||||||
background-color: #283593;
|
background-color: #283593;
|
||||||
}
|
}
|
||||||
.dark-color5 {
|
.dk-bg-5 {
|
||||||
background-color: #1565C0;
|
background-color: #1565C0;
|
||||||
}
|
}
|
||||||
.dark-color6 {
|
.dk-bg-6 {
|
||||||
background-color: #0277BD;
|
background-color: #0277BD;
|
||||||
}
|
}
|
||||||
.dark-color7 {
|
.dk-bg-7 {
|
||||||
background-color: #00838F;
|
background-color: #00838F;
|
||||||
}
|
}
|
||||||
.dark-color8 {
|
.dk-bg-8 {
|
||||||
background-color: #00695C;
|
background-color: #00695C;
|
||||||
}
|
}
|
||||||
.dark-color9 {
|
.dk-bg-9 {
|
||||||
background-color: #2E7D32;
|
background-color: #2E7D32;
|
||||||
}
|
}
|
||||||
.dark-color10 {
|
.dk-bg-10 {
|
||||||
background-color: #558B2F;
|
background-color: #558B2F;
|
||||||
}
|
}
|
||||||
.dark-color11 {
|
.dk-bg-11 {
|
||||||
background-color: #9E9D24;
|
background-color: #9E9D24;
|
||||||
}
|
}
|
||||||
.dark-color12 {
|
.dk-bg-12 {
|
||||||
background-color: #F9A825;
|
background-color: #F9A825;
|
||||||
}
|
}
|
||||||
.dark-color13 {
|
.dk-bg-13 {
|
||||||
background-color: #FF8F00;
|
background-color: #FF8F00;
|
||||||
}
|
}
|
||||||
.dark-color14 {
|
.dk-bg-14 {
|
||||||
background-color: #EF6C00;
|
background-color: #EF6C00;
|
||||||
}
|
}
|
||||||
.dark-color15 {
|
.dk-bg-15 {
|
||||||
background-color: #D84315;
|
background-color: #D84315;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Same colors as above but for text as opposite to background */
|
||||||
|
.lt-fg-0 {
|
||||||
|
color: #ef9a9a!important;
|
||||||
|
}
|
||||||
|
.lt-fg-1 {
|
||||||
|
color: #90caf9!important;
|
||||||
|
}
|
||||||
|
.lt-fg-2 {
|
||||||
|
color: #b0bec5!important;
|
||||||
|
}
|
||||||
|
.lt-fg-3 {
|
||||||
|
color: #b39ddb!important;
|
||||||
|
}
|
||||||
|
.lt-fg-4 {
|
||||||
|
color: #ffab91!important;
|
||||||
|
}
|
||||||
|
.lt-fg-5 {
|
||||||
|
color: #a5d6a7!important;
|
||||||
|
}
|
||||||
|
.lt-fg-6 {
|
||||||
|
color: #eeeeee!important;
|
||||||
|
}
|
||||||
|
.lt-fg-7 {
|
||||||
|
color: #e6ee9c!important;
|
||||||
|
}
|
||||||
|
.lt-fg-8 {
|
||||||
|
color: #c5e1a5!important;
|
||||||
|
}
|
||||||
|
.lt-fg-9 {
|
||||||
|
color: #f0e57d!important;
|
||||||
|
}
|
||||||
|
.lt-fg-10 {
|
||||||
|
color: #f48fb1!important;
|
||||||
|
}
|
||||||
|
.lt-fg-11 {
|
||||||
|
color: #9fa8da!important;
|
||||||
|
}
|
||||||
|
.lt-fg-12 {
|
||||||
|
color: #ffe082!important;
|
||||||
|
}
|
||||||
|
.lt-fg-13 {
|
||||||
|
color: #bcaaa4!important;
|
||||||
|
}
|
||||||
|
.lt-fg-14 {
|
||||||
|
color: #80deea!important;
|
||||||
|
}
|
||||||
|
.lt-fg-15 {
|
||||||
|
color: #ce93d8!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dk-fg-0 {
|
||||||
|
color: #C62828!important;
|
||||||
|
}
|
||||||
|
.dk-fg-1 {
|
||||||
|
color: #AD1457!important;
|
||||||
|
}
|
||||||
|
.dk-fg-2 {
|
||||||
|
color: #6A1B9A!important;
|
||||||
|
}
|
||||||
|
.dk-fg-3 {
|
||||||
|
color: #4527A0!important;
|
||||||
|
}
|
||||||
|
.dk-fg-4 {
|
||||||
|
color: #283593!important;
|
||||||
|
}
|
||||||
|
.dk-fg-5 {
|
||||||
|
color: #1565C0!important;
|
||||||
|
}
|
||||||
|
.dk-fg-6 {
|
||||||
|
color: #0277BD!important;
|
||||||
|
}
|
||||||
|
.dk-fg-7 {
|
||||||
|
color: #00838F!important;
|
||||||
|
}
|
||||||
|
.dk-fg-8 {
|
||||||
|
color: #00695C!important;
|
||||||
|
}
|
||||||
|
.dk-fg-9 {
|
||||||
|
color: #2E7D32!important;
|
||||||
|
}
|
||||||
|
.dk-fg-10 {
|
||||||
|
color: #558B2F!important;
|
||||||
|
}
|
||||||
|
.dk-fg-11 {
|
||||||
|
color: #9E9D24!important;
|
||||||
|
}
|
||||||
|
.dk-fg-12 {
|
||||||
|
color: #F9A825!important;
|
||||||
|
}
|
||||||
|
.dk-fg-13 {
|
||||||
|
color: #FF8F00!important;
|
||||||
|
}
|
||||||
|
.dk-fg-14 {
|
||||||
|
color: #EF6C00!important;
|
||||||
|
}
|
||||||
|
.dk-fg-15 {
|
||||||
|
color: #D84315!important;
|
||||||
|
}
|
||||||
|
|
||||||
/* Material icons resized from the default 24pt */
|
/* Material icons resized from the default 24pt */
|
||||||
.material-icons {
|
.material-icons {
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
@@ -2051,6 +2167,9 @@ ul.tabbar li.active > a {
|
|||||||
.material-icons.big {
|
.material-icons.big {
|
||||||
font-size: 2.4rem;
|
font-size: 2.4rem;
|
||||||
}
|
}
|
||||||
|
.material-icons.huge {
|
||||||
|
font-size: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
#self-avatar .material-icons {
|
#self-avatar .material-icons {
|
||||||
font-size: 2.4rem;
|
font-size: 2.4rem;
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+12
-4
@@ -11,6 +11,7 @@ const EXTRACTED_STRINGS = './src/i18n/ex/base-en.json';
|
|||||||
const BASE_LANG = 'en';
|
const BASE_LANG = 'en';
|
||||||
const LANG_DIR = './src/i18n/';
|
const LANG_DIR = './src/i18n/';
|
||||||
const LANG_PATTERN = './src/i18n/*.json';
|
const LANG_PATTERN = './src/i18n/*.json';
|
||||||
|
const LANG_PATTERN_ONE = './src/i18n/%s.json';
|
||||||
const FINAL_FILE = './src/messages.json';
|
const FINAL_FILE = './src/messages.json';
|
||||||
|
|
||||||
const args = process.argv.slice(2);
|
const args = process.argv.slice(2);
|
||||||
@@ -20,11 +21,18 @@ function getLocaleFromFileName(filename) {
|
|||||||
return parts[parts.length - 1].split('.json')[0];
|
return parts[parts.length - 1].split('.json')[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called with a parameter?
|
function printf(str) {
|
||||||
|
const args = [].slice.call(arguments, 1);
|
||||||
|
let i = 0;
|
||||||
|
return str.replace(/%s/g, () => args[i++]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called with one or two parameters?
|
||||||
if (args[0] == 'missing' || args[0] == 'obsolete') {
|
if (args[0] == 'missing' || args[0] == 'obsolete') {
|
||||||
// Extract missing or obsolete translations as requested.
|
// Extract missing or obsolete translations as requested.
|
||||||
// Read all translations.
|
// Read either all or just one translation.
|
||||||
const extracted = globSync(LANG_PATTERN)
|
const pattern = args[1] ? printf(LANG_PATTERN_ONE, args[1]) : LANG_PATTERN;
|
||||||
|
const extracted = globSync(pattern)
|
||||||
.map((filename) => {
|
.map((filename) => {
|
||||||
const locale = getLocaleFromFileName(filename);
|
const locale = getLocaleFromFileName(filename);
|
||||||
const translated = JSON.parse(fs.readFileSync(filename, 'utf8'));
|
const translated = JSON.parse(fs.readFileSync(filename, 'utf8'));
|
||||||
@@ -83,7 +91,7 @@ globSync(LANG_PATTERN)
|
|||||||
const [key, value] = ent;
|
const [key, value] = ent;
|
||||||
if (!baseMessages[key] && translated[key]) {
|
if (!baseMessages[key] && translated[key]) {
|
||||||
// Obsolete, no longer missing.
|
// Obsolete, no longer missing.
|
||||||
translated[key].missing = false;
|
translated[key].missing = !translated[key].translation;
|
||||||
translated[key].obsolete = true;
|
translated[key].obsolete = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+34
-48
@@ -34,13 +34,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"action_more": {
|
|
||||||
"translation": "Mehr",
|
|
||||||
"defaultMessage": "More",
|
|
||||||
"description": "Action for showing more content",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"action_report_chat": {
|
"action_report_chat": {
|
||||||
"translation": "Unterhaltung melden",
|
"translation": "Unterhaltung melden",
|
||||||
"defaultMessage": "Report Conversation",
|
"defaultMessage": "Report Conversation",
|
||||||
@@ -461,13 +454,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_default_access": {
|
|
||||||
"translation": "Standard Zugriffsmodus:",
|
|
||||||
"defaultMessage": "Default access mode:",
|
|
||||||
"description": "Section title",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"label_default_access_mode": {
|
"label_default_access_mode": {
|
||||||
"translation": "Standard Zugriffsmodus:",
|
"translation": "Standard Zugriffsmodus:",
|
||||||
"defaultMessage": "Default access mode:",
|
"defaultMessage": "Default access mode:",
|
||||||
@@ -1026,13 +1012,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_general": {
|
|
||||||
"translation": "Allgemein",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Sidepanel title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_notifications": {
|
"sidepanel_title_acc_notifications": {
|
||||||
"translation": "Benachrichtigungen",
|
"translation": "Benachrichtigungen",
|
||||||
"defaultMessage": "Notifications",
|
"defaultMessage": "Notifications",
|
||||||
@@ -1040,13 +1019,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_security": {
|
|
||||||
"translation": "Sicherheit",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Sidepanel title for AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_support": {
|
"sidepanel_title_acc_support": {
|
||||||
"translation": "Unterstützung",
|
"translation": "Unterstützung",
|
||||||
"defaultMessage": "Support",
|
"defaultMessage": "Support",
|
||||||
@@ -1082,13 +1054,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_crop": {
|
|
||||||
"translation": "Zum Anpassen ziehen",
|
|
||||||
"defaultMessage": "Drag to Adjust",
|
|
||||||
"description": "Sidepanel title for AvatarCropView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_login": {
|
"sidepanel_title_login": {
|
||||||
"translation": "Anmelden",
|
"translation": "Anmelden",
|
||||||
"defaultMessage": "Sign In",
|
"defaultMessage": "Sign In",
|
||||||
@@ -1272,17 +1237,17 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"description_editing_placeholder": {
|
"description_editing_placeholder": {
|
||||||
"translation": "",
|
"translation": "Beschreibung (optional)",
|
||||||
"defaultMessage": "Description (optional)",
|
"defaultMessage": "Description (optional)",
|
||||||
"description": "Placeholder for editing topic description",
|
"description": "Placeholder for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_description": {
|
"label_description": {
|
||||||
"translation": "",
|
"translation": "Beschreibung",
|
||||||
"defaultMessage": "Description",
|
"defaultMessage": "Description",
|
||||||
"description": "Label for editing topic description",
|
"description": "Label for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"button_security": {
|
"button_security": {
|
||||||
@@ -1293,10 +1258,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_general": {
|
"panel_title_general": {
|
||||||
"translation": "",
|
"translation": "Allgemein",
|
||||||
"defaultMessage": "General",
|
"defaultMessage": "General",
|
||||||
"description": "Title for TopicCommon.",
|
"description": "Title for TopicCommon.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_security": {
|
"panel_title_security": {
|
||||||
@@ -1307,10 +1272,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_crop": {
|
"panel_title_crop": {
|
||||||
"translation": "",
|
"translation": "Zum Anpassen ziehen",
|
||||||
"defaultMessage": "Drag to Adjust",
|
"defaultMessage": "Drag to Adjust",
|
||||||
"description": "Title for AvatarCropView.",
|
"description": "Title for AvatarCropView.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_members": {
|
"panel_title_members": {
|
||||||
@@ -1321,17 +1286,17 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_anonymous": {
|
"permissions_anonymous": {
|
||||||
"translation": "",
|
"translation": "Anonym",
|
||||||
"defaultMessage": "Anonymous",
|
"defaultMessage": "Anonymous",
|
||||||
"description": "Title for editing default anonymous permissions",
|
"description": "Title for editing default anonymous permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_authenticated": {
|
"permissions_authenticated": {
|
||||||
"translation": "",
|
"translation": "Authentifiziert",
|
||||||
"defaultMessage": "Authenticated",
|
"defaultMessage": "Authenticated",
|
||||||
"description": "Title for editing default authenticated permissions",
|
"description": "Title for editing default authenticated permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"topic_delete": {
|
"topic_delete": {
|
||||||
@@ -1342,9 +1307,30 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_user": {
|
"permissions_user": {
|
||||||
"translation": "",
|
"translation": "Benutzerberechtigungen",
|
||||||
"defaultMessage": "User's Permissions",
|
"defaultMessage": "User's Permissions",
|
||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "Eine E-Mail wurde an {email} gesendet. Folgen Sie den Anweisungen in der E-Mail, um Ihr Passwort zurückzusetzen.",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "Archiviert:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message",
|
||||||
"missing": true,
|
"missing": true,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1375,5 +1375,19 @@
|
|||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "Archived:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+42
-77
@@ -34,13 +34,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"action_more": {
|
|
||||||
"translation": "Más",
|
|
||||||
"defaultMessage": "More",
|
|
||||||
"description": "Action for showing more content",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"action_report_chat": {
|
"action_report_chat": {
|
||||||
"translation": "Reportar conversación",
|
"translation": "Reportar conversación",
|
||||||
"defaultMessage": "Report Conversation",
|
"defaultMessage": "Report Conversation",
|
||||||
@@ -461,13 +454,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_default_access": {
|
|
||||||
"translation": "Modo de acceso predeterminado:",
|
|
||||||
"defaultMessage": "Default access mode:",
|
|
||||||
"description": "Section title",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"label_default_access_mode": {
|
"label_default_access_mode": {
|
||||||
"translation": "Modo de acceso predeterminado:",
|
"translation": "Modo de acceso predeterminado:",
|
||||||
"defaultMessage": "Default access mode:",
|
"defaultMessage": "Default access mode:",
|
||||||
@@ -1026,13 +1012,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_general": {
|
|
||||||
"translation": "General",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Sidepanel title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_notifications": {
|
"sidepanel_title_acc_notifications": {
|
||||||
"translation": "Notificaciones",
|
"translation": "Notificaciones",
|
||||||
"defaultMessage": "Notifications",
|
"defaultMessage": "Notifications",
|
||||||
@@ -1040,13 +1019,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_security": {
|
|
||||||
"translation": "Seguridad",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Sidepanel title for AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_support": {
|
"sidepanel_title_acc_support": {
|
||||||
"translation": "Soporte",
|
"translation": "Soporte",
|
||||||
"defaultMessage": "Support",
|
"defaultMessage": "Support",
|
||||||
@@ -1082,13 +1054,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_crop": {
|
|
||||||
"translation": "Arrastra para ajustar",
|
|
||||||
"defaultMessage": "Drag to Adjust",
|
|
||||||
"description": "Sidepanel title for AvatarCropView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_login": {
|
"sidepanel_title_login": {
|
||||||
"translation": "Iniciar sesión",
|
"translation": "Iniciar sesión",
|
||||||
"defaultMessage": "Sign In",
|
"defaultMessage": "Sign In",
|
||||||
@@ -1180,13 +1145,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"title_info": {
|
|
||||||
"translation": "Información",
|
|
||||||
"defaultMessage": "Info",
|
|
||||||
"description": "Title for InfoView",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"title_manage_tags": {
|
"title_manage_tags": {
|
||||||
"translation": "Gestionar",
|
"translation": "Gestionar",
|
||||||
"defaultMessage": "Manage",
|
"defaultMessage": "Manage",
|
||||||
@@ -1272,87 +1230,73 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"description_editing_placeholder": {
|
"description_editing_placeholder": {
|
||||||
"translation": "",
|
"translation": "Descripción (opcional)",
|
||||||
"defaultMessage": "Description (optional)",
|
"defaultMessage": "Description (optional)",
|
||||||
"description": "Placeholder for editing topic description",
|
"description": "Placeholder for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_description": {
|
"label_description": {
|
||||||
"translation": "",
|
"translation": "Descripción",
|
||||||
"defaultMessage": "Description",
|
"defaultMessage": "Description",
|
||||||
"description": "Label for editing topic description",
|
"description": "Label for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"button_security": {
|
"button_security": {
|
||||||
"translation": "",
|
"translation": "Seguridad",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Navigaton button for security panel.",
|
"description": "Navigaton button for security panel.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_acc_general": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_acc_security": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Title for TopicSecirityView and AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_crop": {
|
"panel_title_crop": {
|
||||||
"translation": "",
|
"translation": "Arrastra para ajustar",
|
||||||
"defaultMessage": "Drag to Adjust",
|
"defaultMessage": "Drag to Adjust",
|
||||||
"description": "Title for AvatarCropView.",
|
"description": "Title for AvatarCropView.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_general": {
|
"panel_title_general": {
|
||||||
"translation": "",
|
"translation": "General",
|
||||||
"defaultMessage": "General",
|
"defaultMessage": "General",
|
||||||
"description": "Title for TopicCommon.",
|
"description": "Title for TopicCommon.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_members": {
|
"panel_title_members": {
|
||||||
"translation": "",
|
"translation": "Miembros",
|
||||||
"defaultMessage": "Members",
|
"defaultMessage": "Members",
|
||||||
"description": "Title for managing group members view.",
|
"description": "Title for managing group members view.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_security": {
|
"panel_title_security": {
|
||||||
"translation": "",
|
"translation": "Seguridad",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Title for TopicSecirity and AccSecurity.",
|
"description": "Title for TopicSecirity and AccSecurity.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_info": {
|
"panel_title_info": {
|
||||||
"translation": "",
|
"translation": "Información",
|
||||||
"defaultMessage": "Info",
|
"defaultMessage": "Info",
|
||||||
"description": "Title for InfoView",
|
"description": "Title for InfoView",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_anonymous": {
|
"permissions_anonymous": {
|
||||||
"translation": "",
|
"translation": "Anónimo",
|
||||||
"defaultMessage": "Anonymous",
|
"defaultMessage": "Anonymous",
|
||||||
"description": "Title for editing default anonymous permissions",
|
"description": "Title for editing default anonymous permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_authenticated": {
|
"permissions_authenticated": {
|
||||||
"translation": "",
|
"translation": "Autenticado",
|
||||||
"defaultMessage": "Authenticated",
|
"defaultMessage": "Authenticated",
|
||||||
"description": "Title for editing default authenticated permissions",
|
"description": "Title for editing default authenticated permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"topic_delete": {
|
"topic_delete": {
|
||||||
@@ -1363,9 +1307,30 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_user": {
|
"permissions_user": {
|
||||||
"translation": "",
|
"translation": "Permisos del usuario",
|
||||||
"defaultMessage": "User's Permissions",
|
"defaultMessage": "User's Permissions",
|
||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "Se ha enviado un correo electrónico a {email}. Siga las instrucciones del correo electrónico para restablecer su contraseña.",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "Archivado:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message",
|
||||||
"missing": true,
|
"missing": true,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -345,6 +345,10 @@
|
|||||||
"defaultMessage": "Name",
|
"defaultMessage": "Name",
|
||||||
"description": "Label for editing topic name"
|
"description": "Label for editing topic name"
|
||||||
},
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic"
|
||||||
|
},
|
||||||
"label_user_contacts": {
|
"label_user_contacts": {
|
||||||
"defaultMessage": "Contacts:",
|
"defaultMessage": "Contacts:",
|
||||||
"description": "Label for user contacts"
|
"description": "Label for user contacts"
|
||||||
@@ -437,6 +441,10 @@
|
|||||||
"defaultMessage": "Mute",
|
"defaultMessage": "Mute",
|
||||||
"description": "Turn off notifications"
|
"description": "Turn off notifications"
|
||||||
},
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message"
|
||||||
|
},
|
||||||
"menu_item_restore_topic": {
|
"menu_item_restore_topic": {
|
||||||
"defaultMessage": "Restore",
|
"defaultMessage": "Restore",
|
||||||
"description": "Restore topic from archive"
|
"description": "Restore topic from archive"
|
||||||
@@ -521,6 +529,10 @@
|
|||||||
"defaultMessage": "Password",
|
"defaultMessage": "Password",
|
||||||
"description": "Placeholder/prompt for entering password"
|
"description": "Placeholder/prompt for entering password"
|
||||||
},
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent"
|
||||||
|
},
|
||||||
"password_unchanged_prompt": {
|
"password_unchanged_prompt": {
|
||||||
"defaultMessage": "Unchanged",
|
"defaultMessage": "Unchanged",
|
||||||
"description": "Message in editor while password is unchanged"
|
"description": "Message in editor while password is unchanged"
|
||||||
|
|||||||
+42
-87
@@ -34,13 +34,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"action_more": {
|
|
||||||
"translation": "더보기",
|
|
||||||
"defaultMessage": "More",
|
|
||||||
"description": "Action for showing more content",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"action_report_chat": {
|
"action_report_chat": {
|
||||||
"translation": "대화기록",
|
"translation": "대화기록",
|
||||||
"defaultMessage": "Report Conversation",
|
"defaultMessage": "Report Conversation",
|
||||||
@@ -461,13 +454,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_default_access": {
|
|
||||||
"translation": "기본액세스모드: ",
|
|
||||||
"defaultMessage": "Default access mode:",
|
|
||||||
"description": "Section title",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"label_default_access_mode": {
|
"label_default_access_mode": {
|
||||||
"translation": "기본액세스모드: ",
|
"translation": "기본액세스모드: ",
|
||||||
"defaultMessage": "Default access mode:",
|
"defaultMessage": "Default access mode:",
|
||||||
@@ -1026,13 +1012,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_general": {
|
|
||||||
"translation": "일반",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Sidepanel title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_notifications": {
|
"sidepanel_title_acc_notifications": {
|
||||||
"translation": "알림",
|
"translation": "알림",
|
||||||
"defaultMessage": "Notifications",
|
"defaultMessage": "Notifications",
|
||||||
@@ -1040,13 +1019,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_security": {
|
|
||||||
"translation": "보안",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Sidepanel title for AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_support": {
|
"sidepanel_title_acc_support": {
|
||||||
"translation": "지원",
|
"translation": "지원",
|
||||||
"defaultMessage": "Support",
|
"defaultMessage": "Support",
|
||||||
@@ -1082,13 +1054,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_crop": {
|
|
||||||
"translation": "드래그하여 조정",
|
|
||||||
"defaultMessage": "Drag to Adjust",
|
|
||||||
"description": "Sidepanel title for AvatarCropView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_login": {
|
"sidepanel_title_login": {
|
||||||
"translation": "로그인",
|
"translation": "로그인",
|
||||||
"defaultMessage": "Sign In",
|
"defaultMessage": "Sign In",
|
||||||
@@ -1180,13 +1145,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"title_info": {
|
|
||||||
"translation": "정보",
|
|
||||||
"defaultMessage": "Info",
|
|
||||||
"description": "Title for InfoView",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"title_manage_tags": {
|
"title_manage_tags": {
|
||||||
"translation": "관리",
|
"translation": "관리",
|
||||||
"defaultMessage": "Manage",
|
"defaultMessage": "Manage",
|
||||||
@@ -1271,98 +1229,74 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"grant_permissions": {
|
|
||||||
"translation": "승인",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"message_not_readable": {
|
|
||||||
"translation": "메시지에접근할수없음",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"description_editing_placeholder": {
|
"description_editing_placeholder": {
|
||||||
"translation": "",
|
"translation": "설명(선택 사항)",
|
||||||
"defaultMessage": "Description (optional)",
|
"defaultMessage": "Description (optional)",
|
||||||
"description": "Placeholder for editing topic description",
|
"description": "Placeholder for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_description": {
|
"label_description": {
|
||||||
"translation": "",
|
"translation": "설명",
|
||||||
"defaultMessage": "Description",
|
"defaultMessage": "Description",
|
||||||
"description": "Label for editing topic description",
|
"description": "Label for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"button_security": {
|
"button_security": {
|
||||||
"translation": "",
|
"translation": "보안",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Navigaton button for security panel.",
|
"description": "Navigaton button for security panel.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_acc_general": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_acc_security": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Title for TopicSecirityView and AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_crop": {
|
"panel_title_crop": {
|
||||||
"translation": "",
|
"translation": "드래그하여 조정",
|
||||||
"defaultMessage": "Drag to Adjust",
|
"defaultMessage": "Drag to Adjust",
|
||||||
"description": "Title for AvatarCropView.",
|
"description": "Title for AvatarCropView.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_general": {
|
"panel_title_general": {
|
||||||
"translation": "",
|
"translation": "일반",
|
||||||
"defaultMessage": "General",
|
"defaultMessage": "General",
|
||||||
"description": "Title for TopicCommon.",
|
"description": "Title for TopicCommon.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_members": {
|
"panel_title_members": {
|
||||||
"translation": "",
|
"translation": "구성원",
|
||||||
"defaultMessage": "Members",
|
"defaultMessage": "Members",
|
||||||
"description": "Title for managing group members view.",
|
"description": "Title for managing group members view.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_security": {
|
"panel_title_security": {
|
||||||
"translation": "",
|
"translation": "보안",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Title for TopicSecirity and AccSecurity.",
|
"description": "Title for TopicSecirity and AccSecurity.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_info": {
|
"panel_title_info": {
|
||||||
"translation": "",
|
"translation": "정보",
|
||||||
"defaultMessage": "Info",
|
"defaultMessage": "Info",
|
||||||
"description": "Title for InfoView",
|
"description": "Title for InfoView",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_anonymous": {
|
"permissions_anonymous": {
|
||||||
"translation": "",
|
"translation": "익명",
|
||||||
"defaultMessage": "Anonymous",
|
"defaultMessage": "Anonymous",
|
||||||
"description": "Title for editing default anonymous permissions",
|
"description": "Title for editing default anonymous permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_authenticated": {
|
"permissions_authenticated": {
|
||||||
"translation": "",
|
"translation": "인증됨",
|
||||||
"defaultMessage": "Authenticated",
|
"defaultMessage": "Authenticated",
|
||||||
"description": "Title for editing default authenticated permissions",
|
"description": "Title for editing default authenticated permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"topic_delete": {
|
"topic_delete": {
|
||||||
@@ -1373,9 +1307,30 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_user": {
|
"permissions_user": {
|
||||||
"translation": "",
|
"translation": "사용자 권한",
|
||||||
"defaultMessage": "User's Permissions",
|
"defaultMessage": "User's Permissions",
|
||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "이메일이 {email}(으)로 전송되었습니다. 이메일의 지침에 따라 비밀번호를 재설정하세요.",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "보관됨:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message",
|
||||||
"missing": true,
|
"missing": true,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
}
|
}
|
||||||
|
|||||||
+42
-77
@@ -34,13 +34,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"action_more": {
|
|
||||||
"translation": "Mai multe",
|
|
||||||
"defaultMessage": "More",
|
|
||||||
"description": "Action for showing more content",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"action_report_chat": {
|
"action_report_chat": {
|
||||||
"translation": "Raportează conversația",
|
"translation": "Raportează conversația",
|
||||||
"defaultMessage": "Report Conversation",
|
"defaultMessage": "Report Conversation",
|
||||||
@@ -461,13 +454,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_default_access": {
|
|
||||||
"translation": "Modul default:",
|
|
||||||
"defaultMessage": "Default access mode:",
|
|
||||||
"description": "Section title",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"label_default_access_mode": {
|
"label_default_access_mode": {
|
||||||
"translation": "Default access mode:",
|
"translation": "Default access mode:",
|
||||||
"defaultMessage": "Default access mode:",
|
"defaultMessage": "Default access mode:",
|
||||||
@@ -1026,13 +1012,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_general": {
|
|
||||||
"translation": "Generale",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Sidepanel title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_notifications": {
|
"sidepanel_title_acc_notifications": {
|
||||||
"translation": "Notificări",
|
"translation": "Notificări",
|
||||||
"defaultMessage": "Notifications",
|
"defaultMessage": "Notifications",
|
||||||
@@ -1040,13 +1019,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_security": {
|
|
||||||
"translation": "Securitate",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Sidepanel title for AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_support": {
|
"sidepanel_title_acc_support": {
|
||||||
"translation": "Ajutor",
|
"translation": "Ajutor",
|
||||||
"defaultMessage": "Support",
|
"defaultMessage": "Support",
|
||||||
@@ -1082,13 +1054,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_crop": {
|
|
||||||
"translation": "Trageți pentru a ajusta",
|
|
||||||
"defaultMessage": "Drag to Adjust",
|
|
||||||
"description": "Sidepanel title for AvatarCropView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_login": {
|
"sidepanel_title_login": {
|
||||||
"translation": "Conectează-te",
|
"translation": "Conectează-te",
|
||||||
"defaultMessage": "Sign In",
|
"defaultMessage": "Sign In",
|
||||||
@@ -1180,13 +1145,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"title_info": {
|
|
||||||
"translation": "Info",
|
|
||||||
"defaultMessage": "Info",
|
|
||||||
"description": "Title for InfoView",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"title_manage_tags": {
|
"title_manage_tags": {
|
||||||
"translation": "Administrează",
|
"translation": "Administrează",
|
||||||
"defaultMessage": "Manage",
|
"defaultMessage": "Manage",
|
||||||
@@ -1272,87 +1230,73 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"description_editing_placeholder": {
|
"description_editing_placeholder": {
|
||||||
"translation": "",
|
"translation": "Descriere (opțional)",
|
||||||
"defaultMessage": "Description (optional)",
|
"defaultMessage": "Description (optional)",
|
||||||
"description": "Placeholder for editing topic description",
|
"description": "Placeholder for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_description": {
|
"label_description": {
|
||||||
"translation": "",
|
"translation": "Descriere",
|
||||||
"defaultMessage": "Description",
|
"defaultMessage": "Description",
|
||||||
"description": "Label for editing topic description",
|
"description": "Label for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"button_security": {
|
"button_security": {
|
||||||
"translation": "",
|
"translation": "Securitate",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Navigaton button for security panel.",
|
"description": "Navigaton button for security panel.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_acc_general": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_acc_security": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Title for TopicSecirityView and AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_crop": {
|
"panel_title_crop": {
|
||||||
"translation": "",
|
"translation": "Trageți pentru a ajusta",
|
||||||
"defaultMessage": "Drag to Adjust",
|
"defaultMessage": "Drag to Adjust",
|
||||||
"description": "Title for AvatarCropView.",
|
"description": "Title for AvatarCropView.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_general": {
|
"panel_title_general": {
|
||||||
"translation": "",
|
"translation": "Generale",
|
||||||
"defaultMessage": "General",
|
"defaultMessage": "General",
|
||||||
"description": "Title for TopicCommon.",
|
"description": "Title for TopicCommon.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_members": {
|
"panel_title_members": {
|
||||||
"translation": "",
|
"translation": "Membri",
|
||||||
"defaultMessage": "Members",
|
"defaultMessage": "Members",
|
||||||
"description": "Title for managing group members view.",
|
"description": "Title for managing group members view.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_security": {
|
"panel_title_security": {
|
||||||
"translation": "",
|
"translation": "Securitate",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Title for TopicSecirity and AccSecurity.",
|
"description": "Title for TopicSecirity and AccSecurity.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_info": {
|
"panel_title_info": {
|
||||||
"translation": "",
|
"translation": "Info",
|
||||||
"defaultMessage": "Info",
|
"defaultMessage": "Info",
|
||||||
"description": "Title for InfoView",
|
"description": "Title for InfoView",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_anonymous": {
|
"permissions_anonymous": {
|
||||||
"translation": "",
|
"translation": "Anonim",
|
||||||
"defaultMessage": "Anonymous",
|
"defaultMessage": "Anonymous",
|
||||||
"description": "Title for editing default anonymous permissions",
|
"description": "Title for editing default anonymous permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_authenticated": {
|
"permissions_authenticated": {
|
||||||
"translation": "",
|
"translation": "Autentificat",
|
||||||
"defaultMessage": "Authenticated",
|
"defaultMessage": "Authenticated",
|
||||||
"description": "Title for editing default authenticated permissions",
|
"description": "Title for editing default authenticated permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"topic_delete": {
|
"topic_delete": {
|
||||||
@@ -1363,9 +1307,30 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_user": {
|
"permissions_user": {
|
||||||
"translation": "",
|
"translation": "Permisiunile utilizatorului",
|
||||||
"defaultMessage": "User's Permissions",
|
"defaultMessage": "User's Permissions",
|
||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "Un e-mail a fost trimis către {email}. Urmați instrucțiunile din e-mail pentru a vă reseta parola.",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "Arhivat:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message",
|
||||||
"missing": true,
|
"missing": true,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
}
|
}
|
||||||
|
|||||||
+42
-77
@@ -34,13 +34,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"action_more": {
|
|
||||||
"translation": "Ещё",
|
|
||||||
"defaultMessage": "More",
|
|
||||||
"description": "Action for showing more content",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"action_report_chat": {
|
"action_report_chat": {
|
||||||
"translation": "Сообщить о нарушении",
|
"translation": "Сообщить о нарушении",
|
||||||
"defaultMessage": "Report Conversation",
|
"defaultMessage": "Report Conversation",
|
||||||
@@ -461,13 +454,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_default_access": {
|
|
||||||
"translation": "Права по умолчанию:",
|
|
||||||
"defaultMessage": "Default access mode:",
|
|
||||||
"description": "Section title",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"label_default_access_mode": {
|
"label_default_access_mode": {
|
||||||
"translation": "Доступ по умолчанию:",
|
"translation": "Доступ по умолчанию:",
|
||||||
"defaultMessage": "Default access mode:",
|
"defaultMessage": "Default access mode:",
|
||||||
@@ -1026,13 +1012,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_general": {
|
|
||||||
"translation": "Общие настройки",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Sidepanel title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_notifications": {
|
"sidepanel_title_acc_notifications": {
|
||||||
"translation": "Уведомления",
|
"translation": "Уведомления",
|
||||||
"defaultMessage": "Notifications",
|
"defaultMessage": "Notifications",
|
||||||
@@ -1040,13 +1019,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_security": {
|
|
||||||
"translation": "Безопасность",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Sidepanel title for AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_support": {
|
"sidepanel_title_acc_support": {
|
||||||
"translation": "Поддержка",
|
"translation": "Поддержка",
|
||||||
"defaultMessage": "Support",
|
"defaultMessage": "Support",
|
||||||
@@ -1082,13 +1054,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_crop": {
|
|
||||||
"translation": "Обрезать картинку",
|
|
||||||
"defaultMessage": "Drag to Adjust",
|
|
||||||
"description": "Sidepanel title for AvatarCropView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_login": {
|
"sidepanel_title_login": {
|
||||||
"translation": "Авторизация",
|
"translation": "Авторизация",
|
||||||
"defaultMessage": "Sign In",
|
"defaultMessage": "Sign In",
|
||||||
@@ -1180,13 +1145,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"title_info": {
|
|
||||||
"translation": "Подробности",
|
|
||||||
"defaultMessage": "Info",
|
|
||||||
"description": "Title for InfoView",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"title_manage_tags": {
|
"title_manage_tags": {
|
||||||
"translation": "Редактировать",
|
"translation": "Редактировать",
|
||||||
"defaultMessage": "Manage",
|
"defaultMessage": "Manage",
|
||||||
@@ -1272,87 +1230,73 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"description_editing_placeholder": {
|
"description_editing_placeholder": {
|
||||||
"translation": "",
|
"translation": "Описание (не обязательно)",
|
||||||
"defaultMessage": "Description (optional)",
|
"defaultMessage": "Description (optional)",
|
||||||
"description": "Placeholder for editing topic description",
|
"description": "Placeholder for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_description": {
|
"label_description": {
|
||||||
"translation": "",
|
"translation": "Описание",
|
||||||
"defaultMessage": "Description",
|
"defaultMessage": "Description",
|
||||||
"description": "Label for editing topic description",
|
"description": "Label for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"button_security": {
|
"button_security": {
|
||||||
"translation": "",
|
"translation": "Безопасность",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Navigaton button for security panel.",
|
"description": "Navigaton button for security panel.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_acc_general": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_acc_security": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Title for TopicSecirityView and AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_crop": {
|
"panel_title_crop": {
|
||||||
"translation": "",
|
"translation": "Обрезать картинку",
|
||||||
"defaultMessage": "Drag to Adjust",
|
"defaultMessage": "Drag to Adjust",
|
||||||
"description": "Title for AvatarCropView.",
|
"description": "Title for AvatarCropView.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_general": {
|
"panel_title_general": {
|
||||||
"translation": "",
|
"translation": "Общие настройки",
|
||||||
"defaultMessage": "General",
|
"defaultMessage": "General",
|
||||||
"description": "Title for TopicCommon.",
|
"description": "Title for TopicCommon.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_members": {
|
"panel_title_members": {
|
||||||
"translation": "",
|
"translation": "Участники",
|
||||||
"defaultMessage": "Members",
|
"defaultMessage": "Members",
|
||||||
"description": "Title for managing group members view.",
|
"description": "Title for managing group members view.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_security": {
|
"panel_title_security": {
|
||||||
"translation": "",
|
"translation": "Безопасность",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Title for TopicSecirity and AccSecurity.",
|
"description": "Title for TopicSecirity and AccSecurity.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_info": {
|
"panel_title_info": {
|
||||||
"translation": "",
|
"translation": "Подробности",
|
||||||
"defaultMessage": "Info",
|
"defaultMessage": "Info",
|
||||||
"description": "Title for InfoView",
|
"description": "Title for InfoView",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_anonymous": {
|
"permissions_anonymous": {
|
||||||
"translation": "",
|
"translation": "Анонимный",
|
||||||
"defaultMessage": "Anonymous",
|
"defaultMessage": "Anonymous",
|
||||||
"description": "Title for editing default anonymous permissions",
|
"description": "Title for editing default anonymous permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_authenticated": {
|
"permissions_authenticated": {
|
||||||
"translation": "",
|
"translation": "Авторизованный",
|
||||||
"defaultMessage": "Authenticated",
|
"defaultMessage": "Authenticated",
|
||||||
"description": "Title for editing default authenticated permissions",
|
"description": "Title for editing default authenticated permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"topic_delete": {
|
"topic_delete": {
|
||||||
@@ -1363,9 +1307,30 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_user": {
|
"permissions_user": {
|
||||||
"translation": "",
|
"translation": "Права доступа",
|
||||||
"defaultMessage": "User's Permissions",
|
"defaultMessage": "User's Permissions",
|
||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "Сообщение было отправлено на адрес {email}. Следуйте инструкциям в сообщении, чтобы изменить пароль.",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "Архивирован:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message",
|
||||||
"missing": true,
|
"missing": true,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
}
|
}
|
||||||
|
|||||||
+52
-86
@@ -34,13 +34,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"action_more": {
|
|
||||||
"translation": "更多",
|
|
||||||
"defaultMessage": "More",
|
|
||||||
"description": "Action for showing more content",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"action_report_chat": {
|
"action_report_chat": {
|
||||||
"translation": "檢舉對話",
|
"translation": "檢舉對話",
|
||||||
"defaultMessage": "Report Conversation",
|
"defaultMessage": "Report Conversation",
|
||||||
@@ -56,9 +49,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"badge_danger": {
|
"badge_danger": {
|
||||||
|
"translation": "不可信",
|
||||||
"defaultMessage": "Untrustworthy",
|
"defaultMessage": "Untrustworthy",
|
||||||
"description": "Suspicious or untrustworthy account or topic badge",
|
"description": "Suspicious or untrustworthy account or topic badge",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"badge_owner": {
|
"badge_owner": {
|
||||||
@@ -69,15 +63,17 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"badge_staff": {
|
"badge_staff": {
|
||||||
|
"translation": "員工管理",
|
||||||
"defaultMessage": "Staff-managed",
|
"defaultMessage": "Staff-managed",
|
||||||
"description": "Explanation of a staff-managed account or topic badge",
|
"description": "Explanation of a staff-managed account or topic badge",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"badge_verified": {
|
"badge_verified": {
|
||||||
|
"translation": "已驗證/官方",
|
||||||
"defaultMessage": "Verified/official",
|
"defaultMessage": "Verified/official",
|
||||||
"description": "Explanation of a verified account or topic badge",
|
"description": "Explanation of a verified account or topic badge",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"badge_you": {
|
"badge_you": {
|
||||||
@@ -298,9 +294,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"delete_account_warning": {
|
"delete_account_warning": {
|
||||||
|
"translation": "您確定要刪除您的帳戶嗎?此操作無法撤消。",
|
||||||
"defaultMessage": "Are you sure you want to delete your account? It cannot be undone.",
|
"defaultMessage": "Are you sure you want to delete your account? It cannot be undone.",
|
||||||
"description": "Warning message when deleting an account",
|
"description": "Warning message when deleting an account",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"delete_messages_warning": {
|
"delete_messages_warning": {
|
||||||
@@ -457,13 +454,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_default_access": {
|
|
||||||
"translation": "預設存取模式:",
|
|
||||||
"defaultMessage": "Default access mode:",
|
|
||||||
"description": "Section title",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"label_default_access_mode": {
|
"label_default_access_mode": {
|
||||||
"translation": "預設存取模式:",
|
"translation": "預設存取模式:",
|
||||||
"defaultMessage": "Default access mode:",
|
"defaultMessage": "Default access mode:",
|
||||||
@@ -757,9 +747,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"menu_item_restore_topic": {
|
"menu_item_restore_topic": {
|
||||||
|
"translation": "恢復",
|
||||||
"defaultMessage": "Restore",
|
"defaultMessage": "Restore",
|
||||||
"description": "Restore topic from archive",
|
"description": "Restore topic from archive",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"menu_item_send_retry": {
|
"menu_item_send_retry": {
|
||||||
@@ -1021,13 +1012,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_general": {
|
|
||||||
"translation": "一般",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Sidepanel title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_notifications": {
|
"sidepanel_title_acc_notifications": {
|
||||||
"translation": "通知",
|
"translation": "通知",
|
||||||
"defaultMessage": "Notifications",
|
"defaultMessage": "Notifications",
|
||||||
@@ -1035,13 +1019,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_security": {
|
|
||||||
"translation": "安全性",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Sidepanel title for AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_support": {
|
"sidepanel_title_acc_support": {
|
||||||
"translation": "支援",
|
"translation": "支援",
|
||||||
"defaultMessage": "Support",
|
"defaultMessage": "Support",
|
||||||
@@ -1077,12 +1054,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_crop": {
|
|
||||||
"defaultMessage": "Drag to Adjust",
|
|
||||||
"description": "Sidepanel title for AvatarCropView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_login": {
|
"sidepanel_title_login": {
|
||||||
"translation": "登入",
|
"translation": "登入",
|
||||||
"defaultMessage": "Sign In",
|
"defaultMessage": "Sign In",
|
||||||
@@ -1174,13 +1145,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"title_info": {
|
|
||||||
"translation": "資訊",
|
|
||||||
"defaultMessage": "Info",
|
|
||||||
"description": "Title for InfoView",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"title_manage_tags": {
|
"title_manage_tags": {
|
||||||
"translation": "管理",
|
"translation": "管理",
|
||||||
"defaultMessage": "Manage",
|
"defaultMessage": "Manage",
|
||||||
@@ -1265,93 +1229,74 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"delete_account_arning": {
|
|
||||||
"translation": "您確定要刪除您的帳號嗎?此操作無法復原。",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"description_editing_placeholder": {
|
"description_editing_placeholder": {
|
||||||
"translation": "",
|
"translation": "說明(可選)",
|
||||||
"defaultMessage": "Description (optional)",
|
"defaultMessage": "Description (optional)",
|
||||||
"description": "Placeholder for editing topic description",
|
"description": "Placeholder for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_description": {
|
"label_description": {
|
||||||
"translation": "",
|
"translation": "說明",
|
||||||
"defaultMessage": "Description",
|
"defaultMessage": "Description",
|
||||||
"description": "Label for editing topic description",
|
"description": "Label for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"button_security": {
|
"button_security": {
|
||||||
"translation": "",
|
"translation": "安全性",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Navigaton button for security panel.",
|
"description": "Navigaton button for security panel.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_acc_general": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_acc_security": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Title for TopicSecirityView and AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_crop": {
|
"panel_title_crop": {
|
||||||
"translation": "",
|
"translation": "拖動調整",
|
||||||
"defaultMessage": "Drag to Adjust",
|
"defaultMessage": "Drag to Adjust",
|
||||||
"description": "Title for AvatarCropView.",
|
"description": "Title for AvatarCropView.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_general": {
|
"panel_title_general": {
|
||||||
"translation": "",
|
"translation": "一般",
|
||||||
"defaultMessage": "General",
|
"defaultMessage": "General",
|
||||||
"description": "Title for TopicCommon.",
|
"description": "Title for TopicCommon.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_members": {
|
"panel_title_members": {
|
||||||
"translation": "",
|
"translation": "成員",
|
||||||
"defaultMessage": "Members",
|
"defaultMessage": "Members",
|
||||||
"description": "Title for managing group members view.",
|
"description": "Title for managing group members view.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_security": {
|
"panel_title_security": {
|
||||||
"translation": "",
|
"translation": "安全性",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Title for TopicSecirity and AccSecurity.",
|
"description": "Title for TopicSecirity and AccSecurity.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_info": {
|
"panel_title_info": {
|
||||||
"translation": "",
|
"translation": "資訊",
|
||||||
"defaultMessage": "Info",
|
"defaultMessage": "Info",
|
||||||
"description": "Title for InfoView",
|
"description": "Title for InfoView",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_anonymous": {
|
"permissions_anonymous": {
|
||||||
"translation": "",
|
"translation": "匿名",
|
||||||
"defaultMessage": "Anonymous",
|
"defaultMessage": "Anonymous",
|
||||||
"description": "Title for editing default anonymous permissions",
|
"description": "Title for editing default anonymous permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_authenticated": {
|
"permissions_authenticated": {
|
||||||
"translation": "",
|
"translation": "已認證",
|
||||||
"defaultMessage": "Authenticated",
|
"defaultMessage": "Authenticated",
|
||||||
"description": "Title for editing default authenticated permissions",
|
"description": "Title for editing default authenticated permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"topic_delete": {
|
"topic_delete": {
|
||||||
@@ -1362,9 +1307,30 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_user": {
|
"permissions_user": {
|
||||||
"translation": "",
|
"translation": "用戶權限",
|
||||||
"defaultMessage": "User's Permissions",
|
"defaultMessage": "User's Permissions",
|
||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "一封電子郵件已發送至 {email}。按照電子郵件中的說明重置密碼。",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "存檔聊天:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message",
|
||||||
"missing": true,
|
"missing": true,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
}
|
}
|
||||||
|
|||||||
+42
-77
@@ -34,13 +34,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"action_more": {
|
|
||||||
"translation": "更多",
|
|
||||||
"defaultMessage": "More",
|
|
||||||
"description": "Action for showing more content",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"action_report_chat": {
|
"action_report_chat": {
|
||||||
"translation": "检举垃圾邮件",
|
"translation": "检举垃圾邮件",
|
||||||
"defaultMessage": "Report Conversation",
|
"defaultMessage": "Report Conversation",
|
||||||
@@ -461,13 +454,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_default_access": {
|
|
||||||
"translation": "默认权限模式:",
|
|
||||||
"defaultMessage": "Default access mode:",
|
|
||||||
"description": "Section title",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"label_default_access_mode": {
|
"label_default_access_mode": {
|
||||||
"translation": "蓦然访问模式:",
|
"translation": "蓦然访问模式:",
|
||||||
"defaultMessage": "Default access mode:",
|
"defaultMessage": "Default access mode:",
|
||||||
@@ -1026,13 +1012,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_general": {
|
|
||||||
"translation": "常用设定",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Sidepanel title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_notifications": {
|
"sidepanel_title_acc_notifications": {
|
||||||
"translation": "通知",
|
"translation": "通知",
|
||||||
"defaultMessage": "Notifications",
|
"defaultMessage": "Notifications",
|
||||||
@@ -1040,13 +1019,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_acc_security": {
|
|
||||||
"translation": "安全",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Sidepanel title for AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_acc_support": {
|
"sidepanel_title_acc_support": {
|
||||||
"translation": "支持",
|
"translation": "支持",
|
||||||
"defaultMessage": "Support",
|
"defaultMessage": "Support",
|
||||||
@@ -1082,13 +1054,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"sidepanel_title_crop": {
|
|
||||||
"translation": "拖动调整",
|
|
||||||
"defaultMessage": "Drag to Adjust",
|
|
||||||
"description": "Sidepanel title for AvatarCropView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"sidepanel_title_login": {
|
"sidepanel_title_login": {
|
||||||
"translation": "登录",
|
"translation": "登录",
|
||||||
"defaultMessage": "Sign In",
|
"defaultMessage": "Sign In",
|
||||||
@@ -1180,13 +1145,6 @@
|
|||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"title_info": {
|
|
||||||
"translation": "信息",
|
|
||||||
"defaultMessage": "Info",
|
|
||||||
"description": "Title for InfoView",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"title_manage_tags": {
|
"title_manage_tags": {
|
||||||
"translation": "管理标签",
|
"translation": "管理标签",
|
||||||
"defaultMessage": "Manage",
|
"defaultMessage": "Manage",
|
||||||
@@ -1272,87 +1230,73 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"description_editing_placeholder": {
|
"description_editing_placeholder": {
|
||||||
"translation": "",
|
"translation": "说明(可选)",
|
||||||
"defaultMessage": "Description (optional)",
|
"defaultMessage": "Description (optional)",
|
||||||
"description": "Placeholder for editing topic description",
|
"description": "Placeholder for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"label_description": {
|
"label_description": {
|
||||||
"translation": "",
|
"translation": "说明",
|
||||||
"defaultMessage": "Description",
|
"defaultMessage": "Description",
|
||||||
"description": "Label for editing topic description",
|
"description": "Label for editing topic description",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"button_security": {
|
"button_security": {
|
||||||
"translation": "",
|
"translation": "安全",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Navigaton button for security panel.",
|
"description": "Navigaton button for security panel.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_acc_general": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "General",
|
|
||||||
"description": "Title for TopicCommonView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_acc_security": {
|
|
||||||
"translation": "",
|
|
||||||
"defaultMessage": "Security",
|
|
||||||
"description": "Title for TopicSecirityView and AccSecurityView.",
|
|
||||||
"missing": false,
|
|
||||||
"obsolete": true
|
|
||||||
},
|
|
||||||
"panel_title_crop": {
|
"panel_title_crop": {
|
||||||
"translation": "",
|
"translation": "拖动调整",
|
||||||
"defaultMessage": "Drag to Adjust",
|
"defaultMessage": "Drag to Adjust",
|
||||||
"description": "Title for AvatarCropView.",
|
"description": "Title for AvatarCropView.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_general": {
|
"panel_title_general": {
|
||||||
"translation": "",
|
"translation": "常用设定",
|
||||||
"defaultMessage": "General",
|
"defaultMessage": "General",
|
||||||
"description": "Title for TopicCommon.",
|
"description": "Title for TopicCommon.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_members": {
|
"panel_title_members": {
|
||||||
"translation": "",
|
"translation": "成员",
|
||||||
"defaultMessage": "Members",
|
"defaultMessage": "Members",
|
||||||
"description": "Title for managing group members view.",
|
"description": "Title for managing group members view.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_security": {
|
"panel_title_security": {
|
||||||
"translation": "",
|
"translation": "安全",
|
||||||
"defaultMessage": "Security",
|
"defaultMessage": "Security",
|
||||||
"description": "Title for TopicSecirity and AccSecurity.",
|
"description": "Title for TopicSecirity and AccSecurity.",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"panel_title_info": {
|
"panel_title_info": {
|
||||||
"translation": "",
|
"translation": "信息",
|
||||||
"defaultMessage": "Info",
|
"defaultMessage": "Info",
|
||||||
"description": "Title for InfoView",
|
"description": "Title for InfoView",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_anonymous": {
|
"permissions_anonymous": {
|
||||||
"translation": "",
|
"translation": "匿名",
|
||||||
"defaultMessage": "Anonymous",
|
"defaultMessage": "Anonymous",
|
||||||
"description": "Title for editing default anonymous permissions",
|
"description": "Title for editing default anonymous permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_authenticated": {
|
"permissions_authenticated": {
|
||||||
"translation": "",
|
"translation": "已认证",
|
||||||
"defaultMessage": "Authenticated",
|
"defaultMessage": "Authenticated",
|
||||||
"description": "Title for editing default authenticated permissions",
|
"description": "Title for editing default authenticated permissions",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"topic_delete": {
|
"topic_delete": {
|
||||||
@@ -1363,9 +1307,30 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"permissions_user": {
|
"permissions_user": {
|
||||||
"translation": "",
|
"translation": "用户权限",
|
||||||
"defaultMessage": "User's Permissions",
|
"defaultMessage": "User's Permissions",
|
||||||
"description": "Title for editing user's permissions",
|
"description": "Title for editing user's permissions",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"password_reset_email_sent": {
|
||||||
|
"translation": "一封电子邮件已发送至 {email}。按照电子邮件中的说明重置密码。",
|
||||||
|
"defaultMessage": "An email has been sent to {email}. Follow the directions in the email to reset your password.",
|
||||||
|
"description": "Notification that the email with password reset instructions has been sent",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"label_unarchive_topic": {
|
||||||
|
"translation": "存档:",
|
||||||
|
"defaultMessage": "Archived:",
|
||||||
|
"description": "Label for unarchiving the topic",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"menu_item_reply": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Reply",
|
||||||
|
"description": "Reply to message",
|
||||||
"missing": true,
|
"missing": true,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-1
@@ -39,7 +39,7 @@ export function bytesToHumanSize(bytes) {
|
|||||||
|
|
||||||
// Get 32 bit integer hash value for a string. Ideally it should produce the same value
|
// Get 32 bit integer hash value for a string. Ideally it should produce the same value
|
||||||
// as Java's String#hash().
|
// as Java's String#hash().
|
||||||
export function stringHash(value) {
|
function stringToColorHash(value) {
|
||||||
let hash = 0;
|
let hash = 0;
|
||||||
value = '' + value;
|
value = '' + value;
|
||||||
for (let i = 0; i < value.length; i++) {
|
for (let i = 0; i < value.length; i++) {
|
||||||
@@ -48,3 +48,12 @@ export function stringHash(value) {
|
|||||||
}
|
}
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Converts user or topic ID to a CSS color class. Ideally it should produce the same color value as Java version.
|
||||||
|
// params:
|
||||||
|
// - {string} id: user or topic ID
|
||||||
|
// - {boolean} light: light or dark version of the color.
|
||||||
|
// - {boolean} fg: foreground or background color.
|
||||||
|
export function idToColorClass(id, light, fg) {
|
||||||
|
return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + (Math.abs(stringToColorHash(id)) % 16);
|
||||||
|
}
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+52
-10
@@ -91,6 +91,7 @@ class InfoView extends React.Component {
|
|||||||
owner: false,
|
owner: false,
|
||||||
admin: false,
|
admin: false,
|
||||||
sharer: false,
|
sharer: false,
|
||||||
|
deleter: false,
|
||||||
muted: false,
|
muted: false,
|
||||||
address: null,
|
address: null,
|
||||||
groupTopic: undefined,
|
groupTopic: undefined,
|
||||||
@@ -115,10 +116,12 @@ class InfoView extends React.Component {
|
|||||||
|
|
||||||
this.resetSubs = this.resetSubs.bind(this);
|
this.resetSubs = this.resetSubs.bind(this);
|
||||||
this.resetDesc = this.resetDesc.bind(this);
|
this.resetDesc = this.resetDesc.bind(this);
|
||||||
|
this.resetTags = this.resetTags.bind(this);
|
||||||
this.onMetaDesc = this.onMetaDesc.bind(this);
|
this.onMetaDesc = this.onMetaDesc.bind(this);
|
||||||
this.onSubsUpdated = this.onSubsUpdated.bind(this);
|
this.onSubsUpdated = this.onSubsUpdated.bind(this);
|
||||||
this.handleImageChanged = this.handleImageChanged.bind(this);
|
this.handleImageChanged = this.handleImageChanged.bind(this);
|
||||||
this.handleMuted = this.handleMuted.bind(this);
|
this.handleMuted = this.handleMuted.bind(this);
|
||||||
|
this.handleUnarchive = this.handleUnarchive.bind(this);
|
||||||
this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);
|
this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);
|
||||||
this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);
|
this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);
|
||||||
this.handleShowAddMembers = this.handleShowAddMembers.bind(this);
|
this.handleShowAddMembers = this.handleShowAddMembers.bind(this);
|
||||||
@@ -147,6 +150,7 @@ class InfoView extends React.Component {
|
|||||||
this.setState({topic: props.topic});
|
this.setState({topic: props.topic});
|
||||||
this.resetDesc(topic, props);
|
this.resetDesc(topic, props);
|
||||||
this.resetSubs(topic, props);
|
this.resetSubs(topic, props);
|
||||||
|
this.resetTags(topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,6 +203,7 @@ class InfoView extends React.Component {
|
|||||||
owner: acs && acs.isOwner(),
|
owner: acs && acs.isOwner(),
|
||||||
admin: acs && acs.isAdmin(),
|
admin: acs && acs.isAdmin(),
|
||||||
sharer: acs && acs.isSharer(),
|
sharer: acs && acs.isSharer(),
|
||||||
|
deleter: acs && acs.isDeleter(),
|
||||||
muted: acs && acs.isMuted(),
|
muted: acs && acs.isMuted(),
|
||||||
|
|
||||||
fullName: _clip(topic.public ? topic.public.fn : undefined, MAX_TITLE_LENGTH),
|
fullName: _clip(topic.public ? topic.public.fn : undefined, MAX_TITLE_LENGTH),
|
||||||
@@ -206,6 +211,7 @@ class InfoView extends React.Component {
|
|||||||
avatar: makeImageUrl(topic.public ? topic.public.photo : null),
|
avatar: makeImageUrl(topic.public ? topic.public.photo : null),
|
||||||
trustedBadges: badges,
|
trustedBadges: badges,
|
||||||
private: _clip(topic.private ? topic.private.comment : null, MAX_TITLE_LENGTH),
|
private: _clip(topic.private ? topic.private.comment : null, MAX_TITLE_LENGTH),
|
||||||
|
archived: topic.isArchived(),
|
||||||
address: topic.name,
|
address: topic.name,
|
||||||
groupTopic: topic.isGroupType(),
|
groupTopic: topic.isGroupType(),
|
||||||
channel: topic.isChannelType() || topic.chan,
|
channel: topic.isChannelType() || topic.chan,
|
||||||
@@ -215,8 +221,15 @@ class InfoView extends React.Component {
|
|||||||
auth: defacs.auth,
|
auth: defacs.auth,
|
||||||
anon: defacs.anon
|
anon: defacs.anon
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (topic.getType() == 'grp' && acs && acs.isOwner()) {
|
resetTags(topic) {
|
||||||
|
if (topic.getType() != 'grp') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const acs = topic.getAccessMode();
|
||||||
|
if (acs && acs.isOwner()) {
|
||||||
// Requesting tags: owner is editing the topic.
|
// Requesting tags: owner is editing the topic.
|
||||||
topic.getMeta(topic.startMetaQuery().withTags().build());
|
topic.getMeta(topic.startMetaQuery().withTags().build());
|
||||||
}
|
}
|
||||||
@@ -256,14 +269,17 @@ class InfoView extends React.Component {
|
|||||||
this.props.onChangePermissions(this.props.topic, checked ? '-P' : '+P');
|
this.props.onChangePermissions(this.props.topic, checked ? '-P' : '+P');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleUnarchive(ignored, ignored2) {
|
||||||
|
this.props.onTopicUnArchive(this.props.topic);
|
||||||
|
}
|
||||||
|
|
||||||
handlePermissionsChanged(which, perm) {
|
handlePermissionsChanged(which, perm) {
|
||||||
console.log("handlePermissionsChanged", which, perm);
|
|
||||||
switch (which) {
|
switch (which) {
|
||||||
case 'auth':
|
case 'auth':
|
||||||
this.props.onTopicDescUpdate(this.props.topic, null, null, {auth: perm});
|
this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {auth: perm});
|
||||||
break;
|
break;
|
||||||
case 'anon':
|
case 'anon':
|
||||||
this.props.onTopicDescUpdate(this.props.topic, null, null, {anon: perm});
|
this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {anon: perm});
|
||||||
break;
|
break;
|
||||||
case 'mode':
|
case 'mode':
|
||||||
case 'want':
|
case 'want':
|
||||||
@@ -276,10 +292,11 @@ class InfoView extends React.Component {
|
|||||||
this.props.onChangePermissions(this.props.topic, perm, this.state.userPermissionsEdited);
|
this.props.onChangePermissions(this.props.topic, perm, this.state.userPermissionsEdited);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.handleBackNavigate();
|
||||||
}
|
}
|
||||||
|
|
||||||
handleLaunchPermissionsEditor(which, uid) {
|
handleLaunchPermissionsEditor(which, uid) {
|
||||||
console.log(which, uid);
|
|
||||||
const {formatMessage} = this.props.intl;
|
const {formatMessage} = this.props.intl;
|
||||||
let toEdit, toCompare, toSkip, titleEdit, titleCompare, userTitle, userAvatar;
|
let toEdit, toCompare, toSkip, titleEdit, titleCompare, userTitle, userAvatar;
|
||||||
switch (which) {
|
switch (which) {
|
||||||
@@ -339,7 +356,7 @@ class InfoView extends React.Component {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
console.log("Unknown permission editing mode '" + which + "'");
|
console.error("Unknown permission editing mode '" + which + "'");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.setState({
|
this.setState({
|
||||||
@@ -468,17 +485,31 @@ class InfoView extends React.Component {
|
|||||||
tinode={this.props.tinode}
|
tinode={this.props.tinode}
|
||||||
topic={this.props.topic}
|
topic={this.props.topic}
|
||||||
onCredAdd={this.props.onCredAdd}
|
onCredAdd={this.props.onCredAdd}
|
||||||
onTopicTagsUpdate={this.props.onTopicTagsUpdate}
|
onTopicTagsUpdateRequest={this.props.onTopicTagsUpdateRequest}
|
||||||
onCredConfirm={this.props.onCredConfirm}
|
onCredConfirm={this.props.onCredConfirm}
|
||||||
onCredDelete={this.props.onCredDelete}
|
onCredDelete={this.props.onCredDelete}
|
||||||
onUpdateTopicDesc={this.props.onTopicDescUpdate}
|
onUpdateTopicDesc={this.props.onTopicDescUpdateRequest}
|
||||||
onUpdateTags={this.props.onUpdateTags}
|
|
||||||
onError={this.props.onError} />
|
onError={this.props.onError} />
|
||||||
:
|
:
|
||||||
view == 'security' ?
|
view == 'security' ?
|
||||||
<TopicSecurity
|
<TopicSecurity
|
||||||
tinode={this.props.tinode}
|
|
||||||
topic={this.props.topic}
|
topic={this.props.topic}
|
||||||
|
owner={this.state.owner}
|
||||||
|
admin={this.state.admin}
|
||||||
|
sharer={this.state.sharer}
|
||||||
|
deleter={this.state.deleter}
|
||||||
|
muted={this.state.muted}
|
||||||
|
|
||||||
|
groupTopic={this.state.groupTopic}
|
||||||
|
channel={this.state.channel}
|
||||||
|
access={this.state.access}
|
||||||
|
modeGiven={this.state.modeGiven}
|
||||||
|
modeWant={this.state.modeWant}
|
||||||
|
modeGiven2={this.state.modeGiven2}
|
||||||
|
modeWant2={this.state.modeWant2}
|
||||||
|
auth={this.state.auth}
|
||||||
|
anon={this.state.anon}
|
||||||
|
|
||||||
onShowAlert={this.props.onShowAlert}
|
onShowAlert={this.props.onShowAlert}
|
||||||
onDeleteMessages={this.props.onDeleteMessages}
|
onDeleteMessages={this.props.onDeleteMessages}
|
||||||
onLeaveTopic={this.props.onLeaveTopic}
|
onLeaveTopic={this.props.onLeaveTopic}
|
||||||
@@ -544,6 +575,17 @@ class InfoView extends React.Component {
|
|||||||
</label>
|
</label>
|
||||||
<CheckBox name="P" checked={this.state.muted} onChange={this.handleMuted} />
|
<CheckBox name="P" checked={this.state.muted} onChange={this.handleMuted} />
|
||||||
</div>
|
</div>
|
||||||
|
{this.state.archived ?
|
||||||
|
<div className="panel-form-row">
|
||||||
|
<label>
|
||||||
|
<FormattedMessage id="label_unarchive_topic" defaultMessage="Archived:"
|
||||||
|
description="Label for unarchiving the topic" />
|
||||||
|
</label>
|
||||||
|
<CheckBox name="archived" checked={true} onChange={this.handleUnarchive} />
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
null
|
||||||
|
}
|
||||||
<div className="hr" />
|
<div className="hr" />
|
||||||
<div className="panel-form-row">
|
<div className="panel-form-row">
|
||||||
<a href="#" className="flat-button" onClick={(e) => {e.preventDefault(); this.props.onNavigate('security');}}>
|
<a href="#" className="flat-button" onClick={(e) => {e.preventDefault(); this.props.onNavigate('security');}}>
|
||||||
|
|||||||
+44
-51
@@ -98,7 +98,7 @@ class MessagesView extends React.Component {
|
|||||||
this.handleScrollEvent = this.handleScrollEvent.bind(this);
|
this.handleScrollEvent = this.handleScrollEvent.bind(this);
|
||||||
this.handleDescChange = this.handleDescChange.bind(this);
|
this.handleDescChange = this.handleDescChange.bind(this);
|
||||||
this.handleSubsUpdated = this.handleSubsUpdated.bind(this);
|
this.handleSubsUpdated = this.handleSubsUpdated.bind(this);
|
||||||
this.handleNewMessage = this.handleNewMessage.bind(this);
|
this.handleMessageUpdate = this.handleMessageUpdate.bind(this);
|
||||||
this.handleAllMessagesReceived = this.handleAllMessagesReceived.bind(this);
|
this.handleAllMessagesReceived = this.handleAllMessagesReceived.bind(this);
|
||||||
this.handleInfoReceipt = this.handleInfoReceipt.bind(this);
|
this.handleInfoReceipt = this.handleInfoReceipt.bind(this);
|
||||||
this.handleImagePostview = this.handleImagePostview.bind(this);
|
this.handleImagePostview = this.handleImagePostview.bind(this);
|
||||||
@@ -144,7 +144,7 @@ class MessagesView extends React.Component {
|
|||||||
// or vertical shrinking.
|
// or vertical shrinking.
|
||||||
componentDidUpdate(prevProps, prevState) {
|
componentDidUpdate(prevProps, prevState) {
|
||||||
if (this.messagesScroller) {
|
if (this.messagesScroller) {
|
||||||
if (prevState.topic != this.state.topic || prevState.messages.length != this.state.messages.length) {
|
if (prevState.topic != this.state.topic || prevState.latestMsgSeq != this.state.latestMsgSeq) {
|
||||||
// New message
|
// New message
|
||||||
this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition;
|
this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition;
|
||||||
} else if (prevProps.viewportHeight > this.props.viewportHeight) {
|
} else if (prevProps.viewportHeight > this.props.viewportHeight) {
|
||||||
@@ -160,7 +160,7 @@ class MessagesView extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (topic) {
|
if (topic) {
|
||||||
topic.onData = this.handleNewMessage;
|
topic.onData = this.handleMessageUpdate;
|
||||||
topic.onAllMessagesReceived = this.handleAllMessagesReceived;
|
topic.onAllMessagesReceived = this.handleAllMessagesReceived;
|
||||||
topic.onInfo = this.handleInfoReceipt;
|
topic.onInfo = this.handleInfoReceipt;
|
||||||
topic.onMetaDesc = this.handleDescChange;
|
topic.onMetaDesc = this.handleDescChange;
|
||||||
@@ -228,7 +228,8 @@ class MessagesView extends React.Component {
|
|||||||
if (!nextProps.topic) {
|
if (!nextProps.topic) {
|
||||||
// Default state: no topic.
|
// Default state: no topic.
|
||||||
nextState = {
|
nextState = {
|
||||||
messages: [],
|
latestMsgSeq: -1,
|
||||||
|
latestClearId: -1,
|
||||||
onlineSubs: [],
|
onlineSubs: [],
|
||||||
topic: null,
|
topic: null,
|
||||||
title: '',
|
title: '',
|
||||||
@@ -261,7 +262,6 @@ class MessagesView extends React.Component {
|
|||||||
|
|
||||||
if (topic) {
|
if (topic) {
|
||||||
// Topic exists.
|
// Topic exists.
|
||||||
const msgs = [];
|
|
||||||
const subs = [];
|
const subs = [];
|
||||||
|
|
||||||
if (nextProps.connected) {
|
if (nextProps.connected) {
|
||||||
@@ -272,14 +272,7 @@ class MessagesView extends React.Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
topic.messages(function(msg) {
|
|
||||||
if (!msg.deleted) {
|
|
||||||
msgs.push(msg);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.assign(nextState, {
|
Object.assign(nextState, {
|
||||||
messages: msgs,
|
|
||||||
onlineSubs: subs
|
onlineSubs: subs
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -306,12 +299,15 @@ class MessagesView extends React.Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
Object.assign(nextState, {
|
Object.assign(nextState, {
|
||||||
|
latestMsgSeq: topic.maxMsgSeq(),
|
||||||
|
latestClearId: topic.maxClearId(),
|
||||||
channel: topic.isChannelType()
|
channel: topic.isChannelType()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Invalid topic.
|
// Invalid topic.
|
||||||
Object.assign(nextState, {
|
Object.assign(nextState, {
|
||||||
messages: [],
|
latestMsgSeq: -1,
|
||||||
|
latestClearId: -1,
|
||||||
onlineSubs: [],
|
onlineSubs: [],
|
||||||
title: '',
|
title: '',
|
||||||
avatar: null,
|
avatar: null,
|
||||||
@@ -401,10 +397,12 @@ class MessagesView extends React.Component {
|
|||||||
const topic = this.props.tinode.getTopic(this.state.topic);
|
const topic = this.props.tinode.getTopic(this.state.topic);
|
||||||
if (topic && topic.isSubscribed() && topic.msgHasMoreMessages()) {
|
if (topic && topic.isSubscribed() && topic.msgHasMoreMessages()) {
|
||||||
newState.fetchingMessages = true;
|
newState.fetchingMessages = true;
|
||||||
topic.getMessagesPage(MESSAGES_PAGE).catch((err) => {
|
topic.getMessagesPage(MESSAGES_PAGE)
|
||||||
this.setState({fetchingMessages: false});
|
.then(() => this.setState({fetchingMessages: false}))
|
||||||
this.props.onError(err.message, 'err');
|
.catch((err) => {
|
||||||
});
|
this.setState({fetchingMessages: false});
|
||||||
|
this.props.onError(err.message, 'err');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return newState;
|
return newState;
|
||||||
@@ -521,33 +519,32 @@ class MessagesView extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleNewMessage(msg) {
|
// The 'msg' could be false-ish if some message ranges were deleted.
|
||||||
// Regenerate messages list
|
handleMessageUpdate(msg) {
|
||||||
const topic = this.props.tinode.getTopic(this.state.topic);
|
const topic = this.props.tinode.getTopic(this.state.topic);
|
||||||
const newState = {messages: []};
|
if (!msg) {
|
||||||
topic.messages((m) => {
|
// msg could be null if one or more messages were deleted.
|
||||||
if (!m.deleted) {
|
// Updating state to force redraw.
|
||||||
newState.messages.push(m);
|
this.setState({latestClearId: topic.maxClearId()});
|
||||||
}
|
return;
|
||||||
});
|
|
||||||
|
|
||||||
// msg could be null if one or more messages were deleted.
|
|
||||||
if (msg && !msg.deleted) {
|
|
||||||
// If the message is added to the end of the message list,
|
|
||||||
// scroll to the bottom.
|
|
||||||
if (topic.isNewMessage(msg.seq)) {
|
|
||||||
newState.scrollPosition = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Aknowledge messages except own messages. They are
|
|
||||||
// automatically assumed to be read and recived.
|
|
||||||
const status = topic.msgStatus(msg, true);
|
|
||||||
if (status >= Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) {
|
|
||||||
this.postReadNotification(msg.seq);
|
|
||||||
}
|
|
||||||
this.props.onData(msg);
|
|
||||||
}
|
}
|
||||||
this.setState(newState);
|
|
||||||
|
this.setState({latestMsgSeq: topic.maxMsgSeq()});
|
||||||
|
|
||||||
|
// If the message is added to the end of the message list,
|
||||||
|
// scroll to the bottom.
|
||||||
|
if (topic.isNewMessage(msg.seq)) {
|
||||||
|
this.setState({scrollPosition: 0});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aknowledge messages except own messages. They are
|
||||||
|
// automatically assumed to be read and recived.
|
||||||
|
const status = topic.msgStatus(msg, true);
|
||||||
|
if (status >= Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) {
|
||||||
|
this.postReadNotification(msg.seq);
|
||||||
|
}
|
||||||
|
// This will send "received" notifications right away.
|
||||||
|
this.props.onData(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
handleAllMessagesReceived(count) {
|
handleAllMessagesReceived(count) {
|
||||||
@@ -798,7 +795,8 @@ class MessagesView extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleCancelUpload(seq, uploader) {
|
handleCancelUpload(seq, uploader) {
|
||||||
const found = this.state.messages.find(msg => msg.seq == seq);
|
const topic = this.props.tinode.getTopic(this.state.topic);
|
||||||
|
const found = topic.findMessage(seq);
|
||||||
if (found) {
|
if (found) {
|
||||||
found._cancelled = true;
|
found._cancelled = true;
|
||||||
}
|
}
|
||||||
@@ -1019,13 +1017,8 @@ class MessagesView extends React.Component {
|
|||||||
let messageNodes = [];
|
let messageNodes = [];
|
||||||
let previousFrom = null;
|
let previousFrom = null;
|
||||||
let chatBoxClass = null;
|
let chatBoxClass = null;
|
||||||
for (let i=0; i<this.state.messages.length; i++) {
|
topic.messages((msg, prev, next, i) => {
|
||||||
let msg = this.state.messages[i];
|
let nextFrom = next ? (next.from || null) : 'chan';
|
||||||
let nextFrom = null;
|
|
||||||
|
|
||||||
if (i + 1 < this.state.messages.length) {
|
|
||||||
nextFrom = this.state.messages[i+1].from || 'chan';
|
|
||||||
}
|
|
||||||
|
|
||||||
let sequence = 'single';
|
let sequence = 'single';
|
||||||
let thisFrom = msg.from || 'chan';
|
let thisFrom = msg.from || 'chan';
|
||||||
@@ -1085,7 +1078,7 @@ class MessagesView extends React.Component {
|
|||||||
|
|
||||||
key={msg.seq} />
|
key={msg.seq} />
|
||||||
);
|
);
|
||||||
}
|
});
|
||||||
|
|
||||||
let lastSeen = null;
|
let lastSeen = null;
|
||||||
if (isChannel) {
|
if (isChannel) {
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ export default class PasswordResetView extends React.PureComponent {
|
|||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
email: '',
|
email: '',
|
||||||
password: ''
|
password: '',
|
||||||
|
sent: false
|
||||||
};
|
};
|
||||||
|
|
||||||
this.handleSubmit = this.handleSubmit.bind(this);
|
this.handleSubmit = this.handleSubmit.bind(this);
|
||||||
@@ -21,7 +22,7 @@ export default class PasswordResetView extends React.PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
let parsed = HashNavigation.parseUrlHash(window.location.hash);
|
const parsed = HashNavigation.parseUrlHash(window.location.hash);
|
||||||
this.setState({token: parsed.params.token, scheme: parsed.params.scheme});
|
this.setState({token: parsed.params.token, scheme: parsed.params.scheme});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,8 +30,14 @@ export default class PasswordResetView extends React.PureComponent {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (this.state.token) {
|
if (this.state.token) {
|
||||||
this.props.onReset(this.state.scheme, this.state.password.trim(), this.state.token);
|
this.props.onReset(this.state.scheme, this.state.password.trim(), this.state.token);
|
||||||
|
} else if (this.state.sent) {
|
||||||
|
this.props.onCancel();
|
||||||
} else {
|
} else {
|
||||||
this.props.onRequest('email', this.state.email.trim());
|
const email = this.state.email.trim();
|
||||||
|
this.setState({email: email});
|
||||||
|
this.props.onRequest('email', email).then(() => {
|
||||||
|
this.setState({sent: true});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,10 +50,9 @@ export default class PasswordResetView extends React.PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let reset = (this.state.token && this.state.scheme);
|
|
||||||
return (
|
return (
|
||||||
<form id="password-reset-form" onSubmit={this.handleSubmit}>
|
<form id="password-reset-form" onSubmit={this.handleSubmit}>
|
||||||
{reset ?
|
{(this.state.token && this.state.scheme) ?
|
||||||
<FormattedMessage id="new_password_placeholder" defaultMessage="Enter new password"
|
<FormattedMessage id="new_password_placeholder" defaultMessage="Enter new password"
|
||||||
description="Placeholder for entering new password">{
|
description="Placeholder for entering new password">{
|
||||||
(placeholder) => <VisiblePassword
|
(placeholder) => <VisiblePassword
|
||||||
@@ -56,7 +62,17 @@ export default class PasswordResetView extends React.PureComponent {
|
|||||||
required={true} autoFocus={true}
|
required={true} autoFocus={true}
|
||||||
onChange={this.handlePasswordChange} />
|
onChange={this.handlePasswordChange} />
|
||||||
}</FormattedMessage>
|
}</FormattedMessage>
|
||||||
:
|
: this.state.sent ?
|
||||||
|
<>
|
||||||
|
<br/>
|
||||||
|
<center><i className="material-icons huge green">task_alt</i></center>
|
||||||
|
<br/>
|
||||||
|
<center><FormattedMessage id="password_reset_email_sent"
|
||||||
|
defaultMessage="An email has been sent to {email}. Follow the directions in the email to reset your password."
|
||||||
|
values={{ email: <tt>{this.state.email}</tt> }}
|
||||||
|
description="Notification that the email with password reset instructions has been sent" /></center>
|
||||||
|
</>
|
||||||
|
:
|
||||||
<>
|
<>
|
||||||
<label htmlFor="inputEmail">
|
<label htmlFor="inputEmail">
|
||||||
<FormattedMessage id="label_reset_password"
|
<FormattedMessage id="label_reset_password"
|
||||||
@@ -75,8 +91,13 @@ export default class PasswordResetView extends React.PureComponent {
|
|||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
<div className="dialog-buttons">
|
<div className="dialog-buttons">
|
||||||
<button className="primary" type="submit">{reset ?
|
<button className="primary" type="submit">{
|
||||||
<FormattedMessage id="button_reset" defaultMessage="Reset" description="Button [Reset]" /> :
|
(this.state.token && this.state.scheme) ?
|
||||||
|
<FormattedMessage id="button_reset" defaultMessage="Reset" description="Button [Reset]" />
|
||||||
|
: this.state.sent ?
|
||||||
|
<FormattedMessage id="button_ok" defaultMessage="OK"
|
||||||
|
description="Button [OK]" />
|
||||||
|
:
|
||||||
<FormattedMessage id="button_send_request" defaultMessage="Send request"
|
<FormattedMessage id="button_send_request" defaultMessage="Send request"
|
||||||
description="Button [Send request]" />
|
description="Button [Send request]" />
|
||||||
}</button>
|
}</button>
|
||||||
|
|||||||
@@ -245,8 +245,8 @@ class SidepanelView extends React.Component {
|
|||||||
view === 'reset' ?
|
view === 'reset' ?
|
||||||
<PasswordResetView
|
<PasswordResetView
|
||||||
onRequest={this.props.onPasswordResetRequest}
|
onRequest={this.props.onPasswordResetRequest}
|
||||||
onReset={this.props.onResetPassword} /> :
|
onReset={this.props.onResetPassword}
|
||||||
|
onCancel={this.props.onCancel} /> :
|
||||||
null}
|
null}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -120,8 +120,9 @@ class TinodeWeb extends React.Component {
|
|||||||
this.handleStartTopicRequest = this.handleStartTopicRequest.bind(this);
|
this.handleStartTopicRequest = this.handleStartTopicRequest.bind(this);
|
||||||
this.handleNewTopicCreated = this.handleNewTopicCreated.bind(this);
|
this.handleNewTopicCreated = this.handleNewTopicCreated.bind(this);
|
||||||
this.handleTopicUpdateRequest = this.handleTopicUpdateRequest.bind(this);
|
this.handleTopicUpdateRequest = this.handleTopicUpdateRequest.bind(this);
|
||||||
|
this.handleUnarchive = this.handleUnarchive.bind(this);
|
||||||
this.handleChangePermissions = this.handleChangePermissions.bind(this);
|
this.handleChangePermissions = this.handleChangePermissions.bind(this);
|
||||||
this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
|
this.handleTagsUpdateRequest = this.handleTagsUpdateRequest.bind(this);
|
||||||
this.handleLogout = this.handleLogout.bind(this);
|
this.handleLogout = this.handleLogout.bind(this);
|
||||||
this.handleDeleteAccount = this.handleDeleteAccount.bind(this);
|
this.handleDeleteAccount = this.handleDeleteAccount.bind(this);
|
||||||
this.handleDeleteTopicRequest = this.handleDeleteTopicRequest.bind(this);
|
this.handleDeleteTopicRequest = this.handleDeleteTopicRequest.bind(this);
|
||||||
@@ -225,7 +226,7 @@ class TinodeWeb extends React.Component {
|
|||||||
serviceWorkerChannel.addEventListener('message', this.handlePushMessage);
|
serviceWorkerChannel.addEventListener('message', this.handlePushMessage);
|
||||||
} else {
|
} else {
|
||||||
// Safari is broken by design.
|
// Safari is broken by design.
|
||||||
console.warn('Your browser does not support BroadcastChannel. Some features will not be available');
|
console.warn("Your browser does not support BroadcastChannel. Some features will not be available");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Window/tab visible or invisible for pausing timers.
|
// Window/tab visible or invisible for pausing timers.
|
||||||
@@ -1238,7 +1239,8 @@ class TinodeWeb extends React.Component {
|
|||||||
}
|
}
|
||||||
params.public = pub;
|
params.public = pub;
|
||||||
}
|
}
|
||||||
if (priv) {
|
|
||||||
|
if (typeof priv == 'string') {
|
||||||
params.private = (priv === Tinode.DEL_CHAR) ?
|
params.private = (priv === Tinode.DEL_CHAR) ?
|
||||||
Tinode.DEL_CHAR : {comment: priv};
|
Tinode.DEL_CHAR : {comment: priv};
|
||||||
}
|
}
|
||||||
@@ -1251,6 +1253,13 @@ class TinodeWeb extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleUnarchive(topicName) {
|
||||||
|
const topic = this.tinode.getTopic(topicName);
|
||||||
|
if (topic) {
|
||||||
|
topic.archive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handleUpdatePasswordRequest(password) {
|
handleUpdatePasswordRequest(password) {
|
||||||
this.handleError();
|
this.handleError();
|
||||||
|
|
||||||
@@ -1278,7 +1287,7 @@ class TinodeWeb extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleTagsUpdated(topicName, tags) {
|
handleTagsUpdateRequest(topicName, tags) {
|
||||||
const topic = this.tinode.getTopic(topicName);
|
const topic = this.tinode.getTopic(topicName);
|
||||||
if (topic) {
|
if (topic) {
|
||||||
topic.setMeta({tags: tags}).catch((err) => {
|
topic.setMeta({tags: tags}).catch((err) => {
|
||||||
@@ -1433,7 +1442,7 @@ class TinodeWeb extends React.Component {
|
|||||||
subscribed && deleter ? 'messages_clear_hard' : null,
|
subscribed && deleter ? 'messages_clear_hard' : null,
|
||||||
muted ? (blocked ? null : 'topic_unmute') : 'topic_mute',
|
muted ? (blocked ? null : 'topic_unmute') : 'topic_mute',
|
||||||
self_blocked ? 'topic_unblock' : 'topic_block',
|
self_blocked ? 'topic_unblock' : 'topic_block',
|
||||||
!archived ? 'topic_restore' : 'topic_archive',
|
archived ? 'topic_restore' : 'topic_archive',
|
||||||
'topic_delete'
|
'topic_delete'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -1521,7 +1530,7 @@ class TinodeWeb extends React.Component {
|
|||||||
|
|
||||||
handlePasswordResetRequest(method, value) {
|
handlePasswordResetRequest(method, value) {
|
||||||
// If already connected, connnect() will return a resolved promise.
|
// If already connected, connnect() will return a resolved promise.
|
||||||
this.tinode.connect()
|
return this.tinode.connect()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return this.tinode.requestResetAuthSecret('basic', method, value);
|
return this.tinode.requestResetAuthSecret('basic', method, value);
|
||||||
})
|
})
|
||||||
@@ -1697,7 +1706,7 @@ class TinodeWeb extends React.Component {
|
|||||||
errorActionText={this.state.errorActionText}
|
errorActionText={this.state.errorActionText}
|
||||||
|
|
||||||
onNavigate={this.infoNavigator}
|
onNavigate={this.infoNavigator}
|
||||||
onTopicDescUpdate={this.handleTopicUpdateRequest}
|
onTopicDescUpdateRequest={this.handleTopicUpdateRequest}
|
||||||
onShowAlert={this.handleShowAlert}
|
onShowAlert={this.handleShowAlert}
|
||||||
onChangePermissions={this.handleChangePermissions}
|
onChangePermissions={this.handleChangePermissions}
|
||||||
onMemberUpdateRequest={this.handleMemberUpdateRequest}
|
onMemberUpdateRequest={this.handleMemberUpdateRequest}
|
||||||
@@ -1707,7 +1716,8 @@ class TinodeWeb extends React.Component {
|
|||||||
onBlockTopic={this.handleBlockTopicRequest}
|
onBlockTopic={this.handleBlockTopicRequest}
|
||||||
onReportTopic={this.handleReportTopic}
|
onReportTopic={this.handleReportTopic}
|
||||||
onAddMember={this.handleManageGroupMembers}
|
onAddMember={this.handleManageGroupMembers}
|
||||||
onTopicTagsUpdate={this.handleTagsUpdated}
|
onTopicTagsUpdateRequest={this.handleTagsUpdateRequest}
|
||||||
|
onTopicUnArchive={this.handleUnarchive}
|
||||||
onInitFind={this.tnInitFind}
|
onInitFind={this.tnInitFind}
|
||||||
onError={this.handleError}
|
onError={this.handleError}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import Attachment from './attachment.jsx';
|
|||||||
import LetterTile from './letter-tile.jsx';
|
import LetterTile from './letter-tile.jsx';
|
||||||
import ReceivedMarker from './received-marker.jsx'
|
import ReceivedMarker from './received-marker.jsx'
|
||||||
import UploadingImage from './uploading-image.jsx'
|
import UploadingImage from './uploading-image.jsx'
|
||||||
|
|
||||||
import { sanitizeImageUrl, sanitizeUrl } from '../lib/utils.js';
|
import { sanitizeImageUrl, sanitizeUrl } from '../lib/utils.js';
|
||||||
|
|
||||||
class ChatMessage extends React.PureComponent {
|
class ChatMessage extends React.PureComponent {
|
||||||
@@ -106,8 +107,10 @@ class ChatMessage extends React.PureComponent {
|
|||||||
attachments.push(<Attachment
|
attachments.push(<Attachment
|
||||||
tinode={this.props.tinode}
|
tinode={this.props.tinode}
|
||||||
downloadUrl={Drafty.getDownloadUrl(att)}
|
downloadUrl={Drafty.getDownloadUrl(att)}
|
||||||
filename={att.name} uploading={Drafty.isProcessing(att)}
|
filename={att.name}
|
||||||
mimetype={att.mime} size={Drafty.getEntitySize(att)}
|
uploading={Drafty.isProcessing(att)}
|
||||||
|
mimetype={att.mime}
|
||||||
|
size={Drafty.getEntitySize(att)}
|
||||||
progress={this.state.progress}
|
progress={this.state.progress}
|
||||||
onCancelUpload={this.handleCancelUpload}
|
onCancelUpload={this.handleCancelUpload}
|
||||||
onError={this.props.onError}
|
onError={this.props.onError}
|
||||||
@@ -175,10 +178,10 @@ class ChatMessage extends React.PureComponent {
|
|||||||
</div>
|
</div>
|
||||||
{fullDisplay ?
|
{fullDisplay ?
|
||||||
<div className="author">
|
<div className="author">
|
||||||
<FormattedMessage id="user_not_found" defaultMessage="Not found"
|
{this.props.userName ||
|
||||||
description="In place of a user's full name when the user is not found.">{
|
<i><FormattedMessage id="user_not_found" defaultMessage="Not found"
|
||||||
(notFound) => {return this.props.userName || <i>{notFound}</i>}
|
description="In place of a user's full name when the user is not found." /></i>
|
||||||
}</FormattedMessage>
|
}
|
||||||
</div>
|
</div>
|
||||||
: null
|
: null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ class Contact extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
{this.props.showMode ?
|
{this.props.showMode ?
|
||||||
<span><ContactBadges badges={badges} /></span> :
|
<span><ContactBadges badges={badges} /></span> :
|
||||||
this.props.small ? null : <div className="contact-comment">{marker}{subtitle || '\u00A0'}</div>}
|
this.props.small ? null : <div className="contact-comment">{marker}<span>{subtitle || '\u00A0'}</span></div>}
|
||||||
</div>
|
</div>
|
||||||
{this.props.showContextMenu ?
|
{this.props.showContextMenu ?
|
||||||
<span className="menuTrigger">
|
<span className="menuTrigger">
|
||||||
@@ -161,7 +161,7 @@ function draftyFormatter(style, data, values, key) {
|
|||||||
case 'FM':
|
case 'FM':
|
||||||
el = React.Fragment;
|
el = React.Fragment;
|
||||||
values = [<i key="fm" className="material-icons">dashboard</i>,
|
values = [<i key="fm" className="material-icons">dashboard</i>,
|
||||||
formatMessage(messages.drafty_form)].concat(values || []);
|
formatMessage(messages.drafty_form)].concat(' ', values || []);
|
||||||
break;
|
break;
|
||||||
case 'RW':
|
case 'RW':
|
||||||
el = React.Fragment;
|
el = React.Fragment;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
|
|
||||||
import Tinode from 'tinode-sdk';
|
import Tinode from 'tinode-sdk';
|
||||||
|
|
||||||
import { stringHash } from '../lib/strformat.js';
|
import { idToColorClass } from '../lib/strformat.js';
|
||||||
import { sanitizeImageUrl } from '../lib/utils.js';
|
import { sanitizeImageUrl } from '../lib/utils.js';
|
||||||
|
|
||||||
export default class LetterTile extends React.PureComponent {
|
export default class LetterTile extends React.PureComponent {
|
||||||
@@ -10,8 +10,7 @@ export default class LetterTile extends React.PureComponent {
|
|||||||
let avatar;
|
let avatar;
|
||||||
if (this.props.avatar === true) {
|
if (this.props.avatar === true) {
|
||||||
const isGroup = (Tinode.topicType(this.props.topic) == 'grp');
|
const isGroup = (Tinode.topicType(this.props.topic) == 'grp');
|
||||||
const iconColor = (isGroup ? 'light-color' : 'dark-color')
|
const iconColor = idToColorClass(this.props.topic, isGroup);
|
||||||
+ (Math.abs(stringHash(this.props.topic)) % 16);
|
|
||||||
if (this.props.topic && this.props.title && this.props.title.trim()) {
|
if (this.props.topic && this.props.title && this.props.title.trim()) {
|
||||||
const letter = this.props.title.trim().charAt(0);
|
const letter = this.props.title.trim().charAt(0);
|
||||||
const className = 'lettertile ' + iconColor;
|
const className = 'lettertile ' + iconColor;
|
||||||
|
|||||||
@@ -21,10 +21,11 @@ export default class TopicCommon extends React.Component {
|
|||||||
addCredActive: false,
|
addCredActive: false,
|
||||||
addCredInvalid: false,
|
addCredInvalid: false,
|
||||||
newCred: '',
|
newCred: '',
|
||||||
tags: [],
|
tags: []
|
||||||
previousTagsUpdated: undefined
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.previousTagsUpdated = undefined;
|
||||||
|
|
||||||
this.onTagsUpdated = this.onTagsUpdated.bind(this);
|
this.onTagsUpdated = this.onTagsUpdated.bind(this);
|
||||||
this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
|
this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
|
||||||
this.tnCredsUpdated = this.tnCredsUpdated.bind(this);
|
this.tnCredsUpdated = this.tnCredsUpdated.bind(this);
|
||||||
@@ -105,17 +106,19 @@ export default class TopicCommon extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Server informs that the tags have been updated.
|
||||||
onTagsUpdated(tags) {
|
onTagsUpdated(tags) {
|
||||||
this.setState({tags: tags});
|
this.setState({tags: tags});
|
||||||
|
|
||||||
if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {
|
if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {
|
||||||
this.previousTagsUpdated();
|
this.previousTagsUpdated(tags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Request server to change tags.
|
||||||
handleTagsUpdated(tags) {
|
handleTagsUpdated(tags) {
|
||||||
if (!arrayEqual(this.state.tags.slice(0), tags.slice(0))) {
|
if (!arrayEqual(this.state.tags.slice(0), tags.slice(0))) {
|
||||||
this.props.onTopicTagsUpdate(this.props.topic, tags);
|
this.props.onTopicTagsUpdateRequest(this.props.topic, tags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +146,7 @@ export default class TopicCommon extends React.Component {
|
|||||||
tinode={this.props.tinode}
|
tinode={this.props.tinode}
|
||||||
topic={this.props.topic}
|
topic={this.props.topic}
|
||||||
onUpdateTopicDesc={this.props.onUpdateTopicDesc}
|
onUpdateTopicDesc={this.props.onUpdateTopicDesc}
|
||||||
onUpdateTags={this.props.onUpdateTags}
|
onUpdateTags={this.handleTagsUpdated}
|
||||||
onError={this.props.onError} />
|
onError={this.props.onError} />
|
||||||
{this.state.isMe ?
|
{this.state.isMe ?
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -28,12 +28,13 @@ export default class TopicDescEdit extends React.Component {
|
|||||||
private: topic.private ? topic.private.comment : null,
|
private: topic.private ? topic.private.comment : null,
|
||||||
description: topic.public ? topic.public.note : undefined,
|
description: topic.public ? topic.public.note : undefined,
|
||||||
avatar: makeImageUrl(topic.public ? topic.public.photo : null),
|
avatar: makeImageUrl(topic.public ? topic.public.photo : null),
|
||||||
tags: topic.tags(),
|
tags: topic.tags() || [],
|
||||||
newAvatar: null,
|
newAvatar: null,
|
||||||
newAvatarMime: null,
|
newAvatarMime: null
|
||||||
previousOnTags: topic.onTagsUpdated
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.previousOnTags = null;
|
||||||
|
|
||||||
this.tnNewTags = this.tnNewTags.bind(this);
|
this.tnNewTags = this.tnNewTags.bind(this);
|
||||||
this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);
|
this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);
|
||||||
this.handleImageUpdated = this.handleImageUpdated.bind(this);
|
this.handleImageUpdated = this.handleImageUpdated.bind(this);
|
||||||
@@ -47,12 +48,13 @@ export default class TopicDescEdit extends React.Component {
|
|||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const topic = this.props.tinode.getTopic(this.props.topic);
|
const topic = this.props.tinode.getTopic(this.props.topic);
|
||||||
|
this.previousOnTags = topic.onTagsUpdated;
|
||||||
topic.onTagsUpdated = this.tnNewTags;
|
topic.onTagsUpdated = this.tnNewTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
const topic = this.props.tinode.getTopic(this.props.topic);
|
const topic = this.props.tinode.getTopic(this.props.topic);
|
||||||
topic.onTagsUpdated = this.state.previousOnTags;
|
topic.onTagsUpdated = this.previousOnTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
tnNewTags(tags) {
|
tnNewTags(tags) {
|
||||||
@@ -89,6 +91,7 @@ export default class TopicDescEdit extends React.Component {
|
|||||||
this.setState({newAvatar: img, newAvatarMime: mime});
|
this.setState({newAvatar: img, newAvatarMime: mime});
|
||||||
if (!img) {
|
if (!img) {
|
||||||
// Deleting the avatar.
|
// Deleting the avatar.
|
||||||
|
this.setState({avatar: null});
|
||||||
this.props.onUpdateTopicDesc(this.props.topic, theCard(null, Tinode.DEL_CHAR));
|
this.props.onUpdateTopicDesc(this.props.topic, theCard(null, Tinode.DEL_CHAR));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,48 +74,10 @@ const messages = defineMessages({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
class TopicSecurity extends React.Component {
|
class TopicSecurity extends React.PureComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
const topic = this.props.tinode.getTopic(this.props.topic);
|
|
||||||
if (!topic) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const defacs = topic.getDefaultAccess() || {};
|
|
||||||
const acs = topic.getAccessMode();
|
|
||||||
|
|
||||||
let modeGiven2 = NO_ACCESS_MODE;
|
|
||||||
let modeWant2 = NO_ACCESS_MODE;
|
|
||||||
if (topic.getType() == 'p2p') {
|
|
||||||
// Fetch the other party in the p2p conversation.
|
|
||||||
// Topic may not be ready yet, so check if user is found.
|
|
||||||
const user2 = topic.subscriber(props.topic);
|
|
||||||
if (user2 && user2.acs) {
|
|
||||||
modeGiven2 = user2.acs.getGiven();
|
|
||||||
modeWant2 = user2.acs.getWant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
owner: acs && acs.isOwner(),
|
|
||||||
admin: acs && acs.isAdmin(),
|
|
||||||
sharer: acs && acs.isSharer(),
|
|
||||||
deleter: acs && acs.isDeleter(),
|
|
||||||
muted: acs && acs.isMuted(),
|
|
||||||
|
|
||||||
groupTopic: topic.isGroupType(),
|
|
||||||
channel: topic.isChannelType(),
|
|
||||||
access: acs ? acs.getMode() : undefined,
|
|
||||||
modeGiven: acs ? acs.getGiven() : undefined,
|
|
||||||
modeWant: acs ? acs.getWant() : undefined,
|
|
||||||
modeGiven2: modeGiven2, // P2P topic, the other user mode given
|
|
||||||
modeWant2: modeWant2, // P2P topic, the other user mode want
|
|
||||||
auth: defacs ? defacs.auth : null,
|
|
||||||
anon: defacs ? defacs.anon : null,
|
|
||||||
};
|
|
||||||
|
|
||||||
this.handleDeleteTopic = this.handleDeleteTopic.bind(this);
|
this.handleDeleteTopic = this.handleDeleteTopic.bind(this);
|
||||||
this.handleDeleteMessages = this.handleDeleteMessages.bind(this);
|
this.handleDeleteMessages = this.handleDeleteMessages.bind(this);
|
||||||
this.handleLeave = this.handleLeave.bind(this);
|
this.handleLeave = this.handleLeave.bind(this);
|
||||||
@@ -140,8 +102,8 @@ class TopicSecurity extends React.Component {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const {formatMessage} = this.props.intl;
|
const {formatMessage} = this.props.intl;
|
||||||
this.props.onShowAlert(
|
this.props.onShowAlert(
|
||||||
formatMessage(this.state.deleter ? messages.delete_messages : messages.clear_messages), // title
|
formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages), // title
|
||||||
formatMessage(this.state.deleter ? messages.delete_messages_warning : messages.clear_messages_warning), // content
|
formatMessage(this.props.deleter ? messages.delete_messages_warning : messages.clear_messages_warning), // content
|
||||||
(() => { this.props.onDeleteMessages(this.props.topic); }), // onConfirm
|
(() => { this.props.onDeleteMessages(this.props.topic); }), // onConfirm
|
||||||
null, // "OK"
|
null, // "OK"
|
||||||
true, // Show Reject button
|
true, // Show Reject button
|
||||||
@@ -193,16 +155,16 @@ class TopicSecurity extends React.Component {
|
|||||||
return (
|
return (
|
||||||
<div className="scrollable-panel">
|
<div className="scrollable-panel">
|
||||||
<div className="panel-form-column">
|
<div className="panel-form-column">
|
||||||
{!this.state.channel ?
|
{!this.props.channel ?
|
||||||
<a href="#" className="flat-button" onClick={this.handleDeleteMessages}>
|
<a href="#" className="flat-button" onClick={this.handleDeleteMessages}>
|
||||||
<i className="material-icons">delete_outline</i> {
|
<i className="material-icons">delete_outline</i> {
|
||||||
formatMessage(this.state.deleter ? messages.delete_messages : messages.clear_messages)
|
formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages)
|
||||||
}
|
}
|
||||||
</a>
|
</a>
|
||||||
:
|
:
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
{this.state.owner ?
|
{this.props.owner ?
|
||||||
<a href="#" className="danger flat-button" onClick={this.handleDeleteTopic}>
|
<a href="#" className="danger flat-button" onClick={this.handleDeleteTopic}>
|
||||||
<i className="material-icons">delete</i> {formatMessage(messages.topic_delete)}
|
<i className="material-icons">delete</i> {formatMessage(messages.topic_delete)}
|
||||||
</a>
|
</a>
|
||||||
@@ -211,14 +173,14 @@ class TopicSecurity extends React.Component {
|
|||||||
<i className="material-icons">exit_to_app</i> {formatMessage(messages.leave_chat)}
|
<i className="material-icons">exit_to_app</i> {formatMessage(messages.leave_chat)}
|
||||||
</a>
|
</a>
|
||||||
}
|
}
|
||||||
{!this.state.groupTopic ?
|
{!this.props.groupTopic ?
|
||||||
<a href="#" className="danger flat-button" onClick={this.handleBlock}>
|
<a href="#" className="danger flat-button" onClick={this.handleBlock}>
|
||||||
<i className="material-icons">block</i> {formatMessage(messages.block_contact)}
|
<i className="material-icons">block</i> {formatMessage(messages.block_contact)}
|
||||||
</a>
|
</a>
|
||||||
:
|
:
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
{!this.state.owner ?
|
{!this.props.owner ?
|
||||||
<a href="#" className="danger flat-button" onClick={this.handleReport}>
|
<a href="#" className="danger flat-button" onClick={this.handleReport}>
|
||||||
<i className="material-icons">report</i> {formatMessage(messages.report_chat)}
|
<i className="material-icons">report</i> {formatMessage(messages.report_chat)}
|
||||||
</a>
|
</a>
|
||||||
@@ -228,7 +190,7 @@ class TopicSecurity extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
<div className="hr" />
|
<div className="hr" />
|
||||||
<div className="panel-form-column">
|
<div className="panel-form-column">
|
||||||
{this.state.groupTopic ?
|
{this.props.groupTopic ?
|
||||||
<>
|
<>
|
||||||
<div className="group">
|
<div className="group">
|
||||||
<label>
|
<label>
|
||||||
@@ -236,7 +198,7 @@ class TopicSecurity extends React.Component {
|
|||||||
description="Label for current user permissions" />
|
description="Label for current user permissions" />
|
||||||
</label> <tt className="clickable"
|
</label> <tt className="clickable"
|
||||||
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>
|
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>
|
||||||
{this.state.access}
|
{this.props.access}
|
||||||
</tt>
|
</tt>
|
||||||
</div>
|
</div>
|
||||||
<div className="group">
|
<div className="group">
|
||||||
@@ -248,10 +210,10 @@ class TopicSecurity extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
<div className="quoted">
|
<div className="quoted">
|
||||||
<div>Auth: <tt className="clickable"
|
<div>Auth: <tt className="clickable"
|
||||||
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('auth')}}>{this.state.auth}</tt>
|
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('auth')}}>{this.props.auth}</tt>
|
||||||
</div>
|
</div>
|
||||||
<div>Anon: <tt className="clickable"
|
<div>Anon: <tt className="clickable"
|
||||||
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('anon')}}>{this.state.anon}</tt>
|
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('anon')}}>{this.props.anon}</tt>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -269,13 +231,13 @@ class TopicSecurity extends React.Component {
|
|||||||
<FormattedMessage id="label_you" defaultMessage="You:"
|
<FormattedMessage id="label_you" defaultMessage="You:"
|
||||||
description="Label for the current user" /> <tt className="clickable"
|
description="Label for the current user" /> <tt className="clickable"
|
||||||
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>
|
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>
|
||||||
{this.state.access}
|
{this.props.access}
|
||||||
</tt>
|
</tt>
|
||||||
</div>
|
</div>
|
||||||
<div>{this.state.fullName ? this.state.fullName : formatMessage(messages.other_user)}:
|
<div>{this.props.fullName ? this.props.fullName : formatMessage(messages.other_user)}:
|
||||||
<tt className="clickable"
|
<tt className="clickable"
|
||||||
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('given')}}>
|
onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('given')}}>
|
||||||
{this.state.modeGiven2}
|
{this.props.modeGiven2}
|
||||||
</tt>
|
</tt>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+663
-162
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+189
-59
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user