Browse Source

ui: making the security menu more compact

j8
Bettenbuk Zoltan 4 years ago
parent
commit
b534c4f624

+ 7
- 1
css/_e2ee.scss View File

4
     }
4
     }
5
 
5
 
6
     .description {
6
     .description {
7
-        font-size: .8em;
7
+        font-size: 13px;
8
         margin: 15px 0;
8
         margin: 15px 0;
9
+
10
+        .read-more {
11
+            cursor: pointer;
12
+            opacity: .7;
13
+        }
9
     }
14
     }
10
 
15
 
11
     .key-field {
16
     .key-field {
14
         flex-direction: row;
19
         flex-direction: row;
15
 
20
 
16
         label {
21
         label {
22
+            font-size: 14px;
17
             font-weight: 700;
23
             font-weight: 700;
18
         }
24
         }
19
 
25
 

+ 4
- 0
css/_lobby.scss View File

34
     display: flex;
34
     display: flex;
35
     flex-direction: column;
35
     flex-direction: column;
36
 
36
 
37
+    .description {
38
+        font-size: 13px;
39
+    }
40
+
37
     .control-row {
41
     .control-row {
38
         display: flex;
42
         display: flex;
39
         flex-direction: row;
43
         flex-direction: row;

+ 4
- 4
css/modals/security/_security.scss View File

8
             display: flex;
8
             display: flex;
9
             flex-direction: column;
9
             flex-direction: column;
10
 
10
 
11
+            .description {
12
+                font-size: 13px;
13
+            }
14
+
11
             .password {
15
             .password {
12
                 align-items: center;
16
                 align-items: center;
13
                 display: flex;
17
                 display: flex;
25
             }
29
             }
26
         }
30
         }
27
 
31
 
28
-        & > :first-child:not(:last-child) {
29
-            margin-right: 24px;
30
-        }
31
-
32
         .separator-line {
32
         .separator-line {
33
             margin: 24px 0 24px -20px;
33
             margin: 24px 0 24px -20px;
34
             padding: 0 20px;
34
             padding: 0 20px;

+ 1
- 3
lang/main-el.json View File

193
         "dismiss": "Απόρριψη",
193
         "dismiss": "Απόρριψη",
194
         "displayNameRequired": "Γεια σου! Ποιο είναι το όνομα σου;",
194
         "displayNameRequired": "Γεια σου! Ποιο είναι το όνομα σου;",
195
         "done": "Έγινε",
195
         "done": "Έγινε",
196
-        "e2eeDescription": "<p>Η από άκρη σε άκρη κρυπτογράφηση είναι σήμερα <strong>σε ΠΕΙΡΑΜΑΤΙΚΟ στάδιο</strong>. Παρακαλώ δείτε <a href='https://jitsi.org/blog/e2ee/' target='_blank'>αυτήν την ανάρτηση</a> για λεπτομέρειες.</p><br/><p>Παρακαλώ να έχετε κατά νου ότι η ενεργοποίηση της από άκρη σε άκρη κρυπτογράφησης θα απενεργοποιήσει από την πλευρά του διακομιστή υπηρεσίες όπως: καταγραφή, live streaming και συμμετοχή μέσω τηλεφώνου. Επίσης, να έχετε κατά νου ότι η συνάντηση θα λειτουργήσει μόνο για τους ανθρώπους που συνδέονται από φυλλομετρητές με υποστήριξη για insertable streams.</p>",
197
-        "e2eeLabel": "Κλειδί",
196
+        "e2eeDescription": "Η από άκρη σε άκρη κρυπτογράφηση είναι σήμερα σε ΠΕΙΡΑΜΑΤΙΚΟ στάδιο. Παρακαλώ να έχετε κατά νου ότι η ενεργοποίηση της από άκρη σε άκρη κρυπτογράφησης θα απενεργοποιήσει από την πλευρά του διακομιστή υπηρεσίες όπως: καταγραφή, live streaming και συμμετοχή μέσω τηλεφώνου. Επίσης, να έχετε κατά νου ότι η συνάντηση θα λειτουργήσει μόνο για τους ανθρώπους που συνδέονται από φυλλομετρητές με υποστήριξη για insertable streams.",
198
         "e2eeNoKey": "None",
197
         "e2eeNoKey": "None",
199
         "e2eeSet": "Set",
198
         "e2eeSet": "Set",
200
-        "e2eeTitle": "Από άκρη σε άκρη κρυπτογράφηση",
201
         "e2eeToggleSet": "Set key",
199
         "e2eeToggleSet": "Set key",
202
         "e2eeWarning": "ΠΡΟΕΙΔΟΠΟΊΗΣΗ: Δε φαίνεται να έχουν όλοι οι συμμετέχοντες στη συνάντηση αυτή υποστήριξη για από άκρη σε άκρη κρυπτογράφηση. Αν την ενεργοποιήσετε, δεν θα μπορέσουν να σας δουν ούτε να σας ακούσουν.",
200
         "e2eeWarning": "ΠΡΟΕΙΔΟΠΟΊΗΣΗ: Δε φαίνεται να έχουν όλοι οι συμμετέχοντες στη συνάντηση αυτή υποστήριξη για από άκρη σε άκρη κρυπτογράφηση. Αν την ενεργοποιήσετε, δεν θα μπορέσουν να σας δουν ούτε να σας ακούσουν.",
203
         "enterDisplayName": "Παρακαλώ εισάγετε το όνομά σας εδώ",
201
         "enterDisplayName": "Παρακαλώ εισάγετε το όνομά σας εδώ",

+ 1
- 3
lang/main-es.json View File

195
         "dismiss": "Descartar",
195
         "dismiss": "Descartar",
196
         "displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
196
         "displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
197
         "done": "Listo",
197
         "done": "Listo",
198
-        "e2eeDescription": "<p>El cifrado Extremo-a-Extremo es actualmente <strong>EXPERIMENTAL</strong>. Por favor lea<a href='https://jitsi.org/blog/e2ee/' target='_blank'>este artículo</a> para más detalles.</p><br/><p>Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.</p>",
199
-        "e2eeLabel": "Clave",
200
-        "e2eeTitle": "Cifrado Extremo-a-Extremo",
198
+        "e2eeDescription": "El cifrado Extremo-a-Extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.",
201
         "e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
199
         "e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
202
         "enterDisplayName": "Por favor ingresa tu nombre aquí",
200
         "enterDisplayName": "Por favor ingresa tu nombre aquí",
203
         "error": "Error",
201
         "error": "Error",

+ 1
- 3
lang/main-esUS.json View File

194
         "dismiss": "Descartar",
194
         "dismiss": "Descartar",
195
         "displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
195
         "displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
196
         "done": "Listo",
196
         "done": "Listo",
197
-        "e2eeDescription": "<p>El cifrado Extremo-a-Extremo es actualmente <strong>EXPERIMENTAL</strong>. Por favor lea<a href='https://jitsi.org/blog/e2ee/' target='_blank'>este artículo</a> para más detalles.</p><br/><p>Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.</p>",
198
-        "e2eeLabel": "Clave",
199
-        "e2eeTitle": "Cifrado Extremo-a-Exremo",
197
+        "e2eeDescription": "El cifrado Extremo-a-Extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.",
200
         "e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
198
         "e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
201
         "enterDisplayName": "Por favor ingresa tu nombre aquí",
199
         "enterDisplayName": "Por favor ingresa tu nombre aquí",
202
         "error": "Error",
200
         "error": "Error",

+ 0
- 3
lang/main-eu.json View File

175
         "dismiss": "Baztertu",
175
         "dismiss": "Baztertu",
176
         "displayNameRequired": "Kaixo! Zein da zure izena?",
176
         "displayNameRequired": "Kaixo! Zein da zure izena?",
177
         "done": "Eginda",
177
         "done": "Eginda",
178
-        "e2eeDescription": "",
179
-        "e2eeLabel": "",
180
-        "e2eeTitle": "",
181
         "e2eeWarning": "",
178
         "e2eeWarning": "",
182
         "enterDisplayName": "Sartu zure izena hemen",
179
         "enterDisplayName": "Sartu zure izena hemen",
183
         "error": "Errorea",
180
         "error": "Errorea",

+ 1
- 3
lang/main-mr.json View File

175
         "dismiss": "Dismiss",
175
         "dismiss": "Dismiss",
176
         "displayNameRequired": "हाय! तुझे नाव काय आहे?",
176
         "displayNameRequired": "हाय! तुझे नाव काय आहे?",
177
         "done": "पूर्ण झाले",
177
         "done": "पूर्ण झाले",
178
-        "e2eeDescription": "<p>एंड-टू-एंड एनक्रिप्शन सध्या आहे <strong>प्रायोगिक</strong>. कृपया पहा <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a>तपशीलांसाठी.</p><br/><p>कृपया लक्षात ठेवा की एंड-टू-एंड एन्क्रिप्शन चालू केल्याने सर्व्हर-साइड प्रदान सेवा प्रभावीपणे अक्षम होईल: रेकॉर्डिंग, थेट प्रवाह आणि फोन सहभाग. हे देखील लक्षात ठेवा की मीटिंग केवळ समाविष्ट करण्यायोग्य प्रवाहांसाठी समर्थन असलेल्या ब्राउझरमधून सामील झालेल्या लोकांसाठीच कार्य करेल.</p>",
179
-        "e2eeLabel": "Key",
180
-        "e2eeTitle": "एंड-टू-एंड एनक्रिप्शन",
178
+        "e2eeDescription": "एंड-टू-एंड एनक्रिप्शन सध्या आहे प्रायोगिक. कृपया लक्षात ठेवा की एंड-टू-एंड एन्क्रिप्शन चालू केल्याने सर्व्हर-साइड प्रदान सेवा प्रभावीपणे अक्षम होईल: रेकॉर्डिंग, थेट प्रवाह आणि फोन सहभाग. हे देखील लक्षात ठेवा की मीटिंग केवळ समाविष्ट करण्यायोग्य प्रवाहांसाठी समर्थन असलेल्या ब्राउझरमधून सामील झालेल्या लोकांसाठीच कार्य करेल.",
181
         "e2eeWarning": "चेतावणी:या बैठकीतील सर्व सहभागींना एंड-टू-एंड एनक्रिप्शनसाठी समर्थन असल्याचे दिसत नाही. आपण सक्षम केल्यास ते आपल्याला पाहण्यास किंवा ऐकण्यास सक्षम राहणार नाहीत.",
179
         "e2eeWarning": "चेतावणी:या बैठकीतील सर्व सहभागींना एंड-टू-एंड एनक्रिप्शनसाठी समर्थन असल्याचे दिसत नाही. आपण सक्षम केल्यास ते आपल्याला पाहण्यास किंवा ऐकण्यास सक्षम राहणार नाहीत.",
182
         "enterDisplayName": "कृपया आपले नाव येथे प्रविष्ट करा",
180
         "enterDisplayName": "कृपया आपले नाव येथे प्रविष्ट करा",
183
         "error": "त्रुटी",
181
         "error": "त्रुटी",

+ 1
- 3
lang/main-oc.json View File

278
         "muteEveryoneTitle": "",
278
         "muteEveryoneTitle": "",
279
         "muteEveryoneDialog": "",
279
         "muteEveryoneDialog": "",
280
         "muteEveryoneElseTitle": "Copar lo son a totes levat {{whom}} ?",
280
         "muteEveryoneElseTitle": "Copar lo son a totes levat {{whom}} ?",
281
-        "muteEveryoneElseDialog": "",
282
-        "e2eeTitle": "Chiframent del cap a la fin",
283
-        "e2eeLabel": "Clau"
281
+        "muteEveryoneElseDialog": ""
284
     },
282
     },
285
     "dialOut": {
283
     "dialOut": {
286
         "statusMessage": "ara es {{status}}"
284
         "statusMessage": "ara es {{status}}"

+ 0
- 3
lang/main-sl.json View File

189
         "dismiss": "Prekliči",
189
         "dismiss": "Prekliči",
190
         "displayNameRequired": "Pozdravljeni! Kako vam je ime?",
190
         "displayNameRequired": "Pozdravljeni! Kako vam je ime?",
191
         "done": "Končano",
191
         "done": "Končano",
192
-        "e2eeDescription": "<p>End-to-End Encryption is currently <strong>EXPERIMENTAL</strong>. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details.</p><br/><p>Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.</p>",
193
-        "e2eeLabel": "Key",
194
-        "e2eeTitle": "End-to-End Encryption",
195
         "e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
192
         "e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
196
         "enterDisplayName": "Prosimo vnesite svoje ime",
193
         "enterDisplayName": "Prosimo vnesite svoje ime",
197
         "error": "Napaka",
194
         "error": "Napaka",

+ 1
- 3
lang/main-uk.json View File

180
         "dismiss": "Скасувати",
180
         "dismiss": "Скасувати",
181
         "displayNameRequired": "Вітання! Як вас звати?",
181
         "displayNameRequired": "Вітання! Як вас звати?",
182
         "done": "Готово",
182
         "done": "Готово",
183
-        "e2eeDescription": "<p>Наскрізне шифрування зараз в режимі<strong>ТЕСТУВАННЯ</strong>. Будь ласка, перегляньте <a href='https://jitsi.org/blog/e2ee/' target='_blank'>цю публікацію</a> для докладної інформації.</p><br/><p>Зверніть увагу, що увімкнення наскрізного шифрування призведе до вимкнення таких служб на стороні сервера: запису, живої трансляції запису в онлайні та участі у конференції за допомогою вхідного телефонного дзвінка. Також, просимо звернути увагу, що приєднання до зустрічі в такому разі буде можливе лише з браузера, який має підтримувати потоки зі вставкою (insertable streams).</p>",
184
-        "e2eeLabel": "Ключ",
185
-        "e2eeTitle": "Наскрізне шифрування",
183
+        "e2eeDescription": "Наскрізне шифрування зараз в режимі ТЕСТУВАННЯ. Зверніть увагу, що увімкнення наскрізного шифрування призведе до вимкнення таких служб на стороні сервера: запису, живої трансляції запису в онлайні та участі у конференції за допомогою вхідного телефонного дзвінка. Також, просимо звернути увагу, що приєднання до зустрічі в такому разі буде можливе лише з браузера, який має підтримувати потоки зі вставкою (insertable streams).",
186
         "e2eeWarning": "УВАГА: Схоже, що не всі учасники цієї зустрічі мають підтримку технології наскрізного шифрування. Якщо ви увімкнете цю функцію, то вони не зможуть ані чути, ані бачити вас.",
184
         "e2eeWarning": "УВАГА: Схоже, що не всі учасники цієї зустрічі мають підтримку технології наскрізного шифрування. Якщо ви увімкнете цю функцію, то вони не зможуть ані чути, ані бачити вас.",
187
         "enterDisplayName": "Будь ласка, зазначте ваше ім'я",
185
         "enterDisplayName": "Будь ласка, зазначте ваше ім'я",
188
         "error": "Помилка",
186
         "error": "Помилка",

+ 3
- 3
lang/main.json View File

193
         "dismiss": "Dismiss",
193
         "dismiss": "Dismiss",
194
         "displayNameRequired": "Hi! What’s your name?",
194
         "displayNameRequired": "Hi! What’s your name?",
195
         "done": "Done",
195
         "done": "Done",
196
-        "e2eeDescription": "End-to-End Encryption is currently EXPERIMENTAL. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details. Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.",
197
-        "e2eeLabel": "Key",
196
+        "e2eeDescription": "End-to-End Encryption is currently EXPERIMENTAL. Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.",
197
+        "e2eeLabel": "E2EE key",
198
         "e2eeNoKey": "None",
198
         "e2eeNoKey": "None",
199
-        "e2eeTitle": "End-to-End Encryption",
200
         "e2eeToggleSet": "Set key",
199
         "e2eeToggleSet": "Set key",
201
         "e2eeSet": "Set",
200
         "e2eeSet": "Set",
202
         "e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
201
         "e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
247
         "passwordRequired": "$t(lockRoomPasswordUppercase) required",
246
         "passwordRequired": "$t(lockRoomPasswordUppercase) required",
248
         "popupError": "Your browser is blocking pop-up windows from this site. Please enable pop-ups in your browser's security settings and try again.",
247
         "popupError": "Your browser is blocking pop-up windows from this site. Please enable pop-ups in your browser's security settings and try again.",
249
         "popupErrorTitle": "Pop-up blocked",
248
         "popupErrorTitle": "Pop-up blocked",
249
+        "readMore": "more",
250
         "recording": "Recording",
250
         "recording": "Recording",
251
         "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
251
         "recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
252
         "recordingDisabledForGuestTooltip": "Guests can't start recordings.",
252
         "recordingDisabledForGuestTooltip": "Guests can't start recordings.",

+ 30
- 6
react/features/e2ee/components/E2EESection.js View File

4
 import type { Dispatch } from 'redux';
4
 import type { Dispatch } from 'redux';
5
 
5
 
6
 import { createE2EEEvent, sendAnalytics } from '../../analytics';
6
 import { createE2EEEvent, sendAnalytics } from '../../analytics';
7
-import { translate, translateToHTML } from '../../base/i18n';
7
+import { translate } from '../../base/i18n';
8
 import { getParticipants } from '../../base/participants';
8
 import { getParticipants } from '../../base/participants';
9
 import { connect } from '../../base/redux';
9
 import { connect } from '../../base/redux';
10
 import { setE2EEKey } from '../actions';
10
 import { setE2EEKey } from '../actions';
40
      */
40
      */
41
     editing: boolean,
41
     editing: boolean,
42
 
42
 
43
+    /**
44
+     * True if the section description should be expanded, false otherwise.
45
+     */
46
+    expand: boolean,
47
+
43
     /**
48
     /**
44
      * The current E2EE key.
49
      * The current E2EE key.
45
      */
50
      */
68
 
73
 
69
         this.state = {
74
         this.state = {
70
             editing: false,
75
             editing: false,
76
+            expand: false,
71
             key: this.props._key
77
             key: this.props._key
72
         };
78
         };
73
 
79
 
74
         // Bind event handlers so they are only bound once for every instance.
80
         // Bind event handlers so they are only bound once for every instance.
81
+        this._onExpand = this._onExpand.bind(this);
75
         this._onKeyChange = this._onKeyChange.bind(this);
82
         this._onKeyChange = this._onKeyChange.bind(this);
76
         this._onSet = this._onSet.bind(this);
83
         this._onSet = this._onSet.bind(this);
77
         this._onToggleSetKey = this._onToggleSetKey.bind(this);
84
         this._onToggleSetKey = this._onToggleSetKey.bind(this);
85
      */
92
      */
86
     render() {
93
     render() {
87
         const { _everyoneSupportsE2EE, t } = this.props;
94
         const { _everyoneSupportsE2EE, t } = this.props;
88
-        const { editing } = this.state;
95
+        const { editing, expand } = this.state;
96
+        const description = t('dialog.e2eeDescription');
89
 
97
 
90
         return (
98
         return (
91
             <div id = 'e2ee-section'>
99
             <div id = 'e2ee-section'>
92
-                <p className = 'title'>
93
-                    { t('dialog.e2eeTitle') }
94
-                </p>
95
                 <p className = 'description'>
100
                 <p className = 'description'>
96
-                    { translateToHTML(t, 'dialog.e2eeDescription') }
101
+                    { expand && description }
102
+                    { !expand && description.substring(0, 100) }
103
+                    { !expand && <span
104
+                        className = 'read-more'
105
+                        onClick = { this._onExpand }>
106
+                            ... { t('dialog.readMore') }
107
+                    </span> }
97
                 </p>
108
                 </p>
98
                 {
109
                 {
99
                     !_everyoneSupportsE2EE
110
                     !_everyoneSupportsE2EE
125
         );
136
         );
126
     }
137
     }
127
 
138
 
139
+    _onExpand: () => void;
140
+
141
+    /**
142
+     * Callback to be invoked when the description is expanded.
143
+     *
144
+     * @returns {void}
145
+     */
146
+    _onExpand() {
147
+        this.setState({
148
+            expand: true
149
+        });
150
+    }
151
+
128
     _onKeyChange: (Object) => void;
152
     _onKeyChange: (Object) => void;
129
 
153
 
130
     /**
154
     /**

+ 3
- 1
react/features/lobby/components/web/LobbySection.js View File

88
         return (
88
         return (
89
             <>
89
             <>
90
                 <div id = 'lobby-section'>
90
                 <div id = 'lobby-section'>
91
-                    { t('lobby.enableDialogText') }
91
+                    <p className = 'description'>
92
+                        { t('lobby.enableDialogText') }
93
+                    </p>
92
                     <div className = 'control-row'>
94
                     <div className = 'control-row'>
93
                         <label>
95
                         <label>
94
                             { t('lobby.toggleLabel') }
96
                             { t('lobby.toggleLabel') }

+ 3
- 1
react/features/security/components/security-dialog/PasswordSection.js View File

170
 
170
 
171
     return (
171
     return (
172
         <div className = 'security-dialog password-section'>
172
         <div className = 'security-dialog password-section'>
173
-            { t('security.about') }
173
+            <p className = 'description'>
174
+                { t('security.about') }
175
+            </p>
174
             <div className = 'security-dialog password'>
176
             <div className = 'security-dialog password'>
175
                 <div
177
                 <div
176
                     className = 'info-dialog info-dialog-column info-dialog-password'
178
                     className = 'info-dialog info-dialog-column info-dialog-password'

Loading…
Cancel
Save