/
UIxAccountEditor.wox
303 lines (276 loc) · 16.7 KB
/
UIxAccountEditor.wox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE container>
<container
xmlns="http://www.w3.org/1999/xhtml"
xmlns:var="http://www.skyrix.com/od/binding"
xmlns:const="http://www.skyrix.com/od/constant"
xmlns:label="OGo:label"
xmlns:rsrc="OGo:url"
xmlns:uix="OGo:uix"><var:string var:value="doctype" const:escapeHTML="NO" />
<md-dialog flex="50" flex-sm="80" flex-xs="100">
<md-toolbar>
<div class="md-toolbar-tools">
<md-icon class="material-icons sg-icon-toolbar-bg">account_box</md-icon>
<md-input-container class="md-block md-flex">
<label><var:string label:value="Account Name"/></label>
<input type="text" required="required"
md-autofocus="true"
ng-readonly="$AccountDialogController.accountId == 0"
ng-model="$AccountDialogController.account.name"/>
</md-input-container>
</div>
</md-toolbar>
<md-dialog-content>
<form id="accountForm" name="accountForm" var:href="ownPath">
<md-tabs class="md-flex" md-border-bottom="md-border-bottom" md-dynamic-height="true">
<!-- general settings -->
<md-tab id="accountSettingsView" label:label="Settings">
<md-content class="md-padding">
<div layout="row">
<md-input-container class="md-block md-flex">
<label><var:string label:value="Server Name"/></label>
<input name="serverName" type="text" required="required"
ng-pattern="$AccountDialogController.hostnameRE"
ng-disabled="$AccountDialogController.accountId == 0"
ng-model="$AccountDialogController.account.serverName"/>
<div ng-messages="accountForm.serverName.$error" role="alert">
<div ng-message="pattern"><var:string label:value="Specify a hostname other than the local host"/></div>
</div>
</md-input-container>
<md-input-container class="md-block" flex="30">
<label><var:string label:value="Port"/></label>
<input type="number" min="1" max="65535"
ng-disabled="$AccountDialogController.accountId == 0"
ng-model="$AccountDialogController.account.port"
placeholder=""
sg-placeholder="$AccountDialogController.defaultPort"/>
</md-input-container>
</div>
<md-input-container class="md-block md-input-has-value">
<label><var:string label:value="Encryption"/></label>
<md-radio-group ng-model="$AccountDialogController.account.encryption">
<div layout="row" layout-align="space-around">
<div>
<md-radio-button
ng-click="$AccountDialogController.defaultPort = 143"
ng-disabled="$AccountDialogController.accountId == 0"
value="none" class="md-primary"><var:string label:value="None"/></md-radio-button>
</div>
<div>
<md-radio-button
ng-click="$AccountDialogController.defaultPort = 993"
ng-disabled="$AccountDialogController.accountId == 0"
value="ssl"><var:string label:value="SSL"/></md-radio-button>
</div>
<div>
<md-radio-button
ng-click="$AccountDialogController.defaultPort = 143"
ng-disabled="$AccountDialogController.accountId == 0"
value="tls"><var:string label:value="TLS"/></md-radio-button>
</div>
</div>
</md-radio-group>
</md-input-container>
<div layout="row">
<md-input-container class="md-block" flex="50">
<label><var:string label:value="User Name"/></label>
<input type="text" required="required"
autocomplete="off"
ng-disabled="$AccountDialogController.accountId == 0"
ng-model="$AccountDialogController.account.userName"/>
</md-input-container>
<md-input-container class="md-block" flex="50"
ng-hide="$AccountDialogController.accountId == 0">
<label><var:string label:value="Password"/></label>
<input type="password"
autocomplete="off"
ng-model="$AccountDialogController.account.password"/>
</md-input-container>
</div>
<md-input-container class="md-block md-flex">
<label><var:string label:value="Full Name"/></label>
<input type="text" required="required"
ng-disabled="$AccountDialogController.customFromIsReadonly()"
ng-model="$AccountDialogController.account.identities[0].fullName"/>
</md-input-container>
<div layout="row">
<md-input-container class="md-block" flex="50">
<label><var:string label:value="Email"/></label>
<input type="email" required="required"
ng-disabled="$AccountDialogController.customFromIsReadonly()"
ng-model="$AccountDialogController.account.identities[0].email"/>
</md-input-container>
<md-input-container class="md-block" flex="50"
ng-hide="$AccountDialogController.customFromIsReadonly()">
<label><var:string label:value="Reply To Email"/></label>
<input type="email"
autocomplete="off"
ng-model="$AccountDialogController.account.identities[0].replyTo"/>
</md-input-container>
</div>
<!-- To switch between a simple text editor and the CK/HTML editor, we use a ng-if and not
a ng-class as it doesn't get initialized by the ckEditor class directive -->
<md-input-container class="md-block md-flex"
ng-if="$AccountDialogController.defaults.SOGoMailComposeMessageType == 'text'">
<label><var:string label:value="Signature"/></label>
<textarea ng-model="$AccountDialogController.account.identities[0].signature"><!-- signature --></textarea>
</md-input-container>
<div class="pseudo-input-container"
ng-if="$AccountDialogController.defaults.SOGoMailComposeMessageType == 'html'">
<label class="pseudo-input-label"><var:string label:value="Signature"/></label>
<textarea class="ck-editor"
ck-locale="$AccountDialogController.defaults.LocaleCode"
ck-options="{ 'autoGrow_minHeight': 70,
'toolbar': [['Bold', 'Italic', '-', 'Link',
'Font','FontSize','-','TextColor',
'BGColor']] }"
ck-margin="8px"
ng-model="$AccountDialogController.account.identities[0].signature"><!-- signature --></textarea>
</div>
<md-input-container class="md-block md-input-has-value">
<label><var:string label:value="When I receive a request for a return receipt"/></label>
<md-radio-group ng-model="$AccountDialogController.account.receipts.receiptAction">
<md-radio-button value="ignore"><var:string label:value="Never send a return receipt"/></md-radio-button>
<md-radio-button value="allow"><var:string label:value="Allow return receipts for some messages"/></md-radio-button>
</md-radio-group>
</md-input-container>
<div layout="column" flex-offset="5"
ng-show="$AccountDialogController.account.receipts.receiptAction == 'allow'">
<md-input-container class="md-block md-flex">
<label><var:string label:value="If I'm not in the To or Cc of the message"/></label>
<md-select ng-model="$AccountDialogController.account.receipts.receiptNonRecipientAction">
<md-option const:value="ignore"><var:string label:value="Never send"/></md-option>
<md-option const:value="send"><var:string label:value="Always send"/></md-option>
<md-option const:value="ask"><var:string label:value="Ask me"/></md-option>
</md-select>
</md-input-container>
<md-input-container class="md-block md-flex">
<label><var:string label:value="If the sender is outside my domain"/></label>
<md-select ng-model="$AccountDialogController.account.receipts.receiptOutsideDomainAction">
<md-option const:value="ignore"><var:string label:value="Never send"/></md-option>
<md-option const:value="send"><var:string label:value="Always send"/></md-option>
<md-option const:value="ask"><var:string label:value="Ask me"/></md-option>
</md-select>
</md-input-container>
<md-input-container class="md-block md-flex">
<label><var:string label:value="In all other cases"/></label>
<md-select ng-model="$AccountDialogController.account.receipts.receiptAnyAction">
<md-option const:value="ignore"><var:string label:value="Never send"/></md-option>
<md-option const:value="send"><var:string label:value="Always send"/></md-option>
<md-option const:value="ask"><var:string label:value="Ask me"/></md-option>
</md-select>
</md-input-container>
</div>
</md-content>
</md-tab>
<!-- security tab -->
<md-tab id="accountSecurityView" ng-disabled="$AccountDialogController.account.isNew" label:label="Security">
<md-content id="accountSecurityContent" class="md-padding">
<div layout="column" ng-show="$AccountDialogController.account.security.hasCertificate">
<!-- S/MIME Certificate -->
<sg-block-toggle class="sg-no-print" layout="column">
<md-list-item class="sg-button-toggle">
<md-icon rsrc:md-svg-src="img/certificate.svg"><!-- certificate --></md-icon>
<p class="md-flex">
<var:string label:value="S/MIME Certificate"/>
</p>
<md-button class="md-warn"
ng-click="$AccountDialogController.removeCertificate()">
<var:string label:value="Uninstall"/>
</md-button>
<md-icon class="sg-icon-toggle">expand_more</md-icon>
</md-list-item>
<div class="sg-block-toggle">
<div class="md-margin" md-whiteframe="3">
<div class="md-padding" layout="row" layout-wrap="layout-wrap">
<div flex="50" flex-xs="100">
<div class="md-subhead md-default-theme md-fg md-primary"
ng-bind="::'Subject Name' | loc"><!-- Subject Name --></div>
<div ng-repeat="field in $AccountDialogController.certificate.subject">
<div class="pseudo-input-label" ng-bind="field[0] | loc"><!-- label --></div>
<div class="pseudo-input-field md-body-1" ng-bind="field[1]"><!-- value --></div>
</div>
</div>
<div flex="50" flex-xs="100">
<div class="md-subhead md-default-theme md-fg md-primary"
ng-bind="::'Issuer' | loc"><!-- Issuer --></div>
<div ng-repeat="field in $AccountDialogController.certificate.issuer">
<div class="pseudo-input-label" ng-bind="field[0] | loc"><!-- label --></div>
<div class="pseudo-input-field md-body-1" ng-bind="field[1]"><!-- value --></div>
</div>
</div>
</div>
</div>
</div>
</sg-block-toggle>
<md-divider><!-- divider --></md-divider>
<div class="pseudo-input-container">
<label class="pseudo-input-label"><var:string label:value="When composing a message"/></label>
<div layout="column">
<md-checkbox
class="pseudo-input-field"
ng-model="$AccountDialogController.account.security.alwaysSign"
ng-true-value="1"
ng-false-value="0"><var:string label:value="Digitally sign the message by default"/></md-checkbox>
<md-checkbox
class="pseudo-input-field"
ng-model="$AccountDialogController.account.security.alwaysEncrypt"
ng-true-value="1"
ng-false-value="0"><var:string label:value="Always try to encrypt the message"/></md-checkbox>
</div>
</div>
</div><!-- /hasCertificate -->
<div layout="column" ng-hide="$AccountDialogController.account.security.hasCertificate">
<div layout="row" layout-align="start center">
<md-input-container
class="md-flex"
ng-class="{'md-input-invalid': $AccountDialogController.form.certificateFilename.$error.fileformat}">
<label><var:string label:value="S/MIME Certificate"/></label>
<input type="text" name="certificateFilename"
ng-disabled="true"
label:placeholder="No certificate installed"
ng-model="$AccountDialogController.certificateFilename" />
<div ng-messages="accountForm.certificateFilename.$error" role="alert">
<div ng-message="fileformat"><var:string label:value="The SSL certificate must use the PKCS#12 (PFX) format."/></div>
</div>
</md-input-container>
<div>
<input id="smime-certificate-import" type="file" class="ng-hide"
nv-file-select="nv-file-select"
uploader="$AccountDialogController.uploader"/>
<label class="md-button" for="smime-certificate-import"
ng-click="$AccountDialogController.onBeforeUploadCertificate(accountForm)"
ng-hide="$AccountDialogController.uploader.isUploading">
<span><var:string label:value="Choose PKCS12 Certificate .."/></span>
</label>
</div>
</div>
<md-input-container class="md-flex">
<label><var:string label:value="Certificate Import Password"/></label>
<input type="password" autocomplete="new-password"
ng-required="$AccountDialogController.uploader.queue.length"
ng-model="$AccountDialogController.certificatePassword" />
</md-input-container>
<div layout="row" layout-align="end end">
<md-button
class="md-warn md-raised"
ng-disabled="!$AccountDialogController.certificatePassword || !$AccountDialogController.certificateFilename"
ng-click="$AccountDialogController.importCertificate()">
<var:string label:value="Upload"/>
</md-button>
</div>
</div><!-- /!hasCertificate -->
</md-content>
</md-tab>
</md-tabs>
</form>
</md-dialog-content>
<md-dialog-actions>
<md-button type="button" ng-click="$AccountDialogController.cancel()"><var:string label:value="Cancel"/></md-button>
<md-button class="md-primary" aria-label="{{::'OK' | loc}}"
ng-disabled="accountForm.$invalid"
ng-click="$AccountDialogController.save()"
ng-bind="::'OK' | loc"><!-- OK --></md-button>
</md-dialog-actions>
</md-dialog>
</container>