+1183
-1018
lines changed Original file line number Diff line number Diff line change
@@ -49,10 +49,10 @@ public static void Start(SchemaBuilder sb)
49
49
if (count > 0)
50
50
{
51
51
Console.Write("The database ");
52
-
SafeConsole.WriteLineColor(ConsoleColor.White, Connector.Current.DatabaseName());
52
+
SafeConsole.WriteColor(ConsoleColor.Yellow, Connector.Current.DatabaseName());
53
53
Console.Write(" contains ");
54
-
SafeConsole.WriteLineColor(ConsoleColor.White, count.ToString());
55
-
Console.Write(" Sql Migrations!");
54
+
SafeConsole.WriteColor(ConsoleColor.Yellow, count.ToString());
55
+
Console.WriteLine(" Sql Migrations!");
56
56
57
57
if (SafeConsole.Ask("Do you want to create a new SQL Migration instead?"))
58
58
{
@@ -107,7 +107,7 @@ public static void EnsureMigrationTable<T>() where T : Entity
107
107
}
108
108
109
109
SafeConsole.WriteLineColor(ConsoleColor.White, "Table " + table.Name + " auto-generated...");
110
-
110
+
111
111
tr.Commit();
112
112
}
113
113
}
@@ -138,7 +138,7 @@ public static void EnsureMigrationTable<T>() where T : Entity
138
138
return null;
139
139
}
140
140
catch (Exception e)
141
-
{
141
+
{
142
142
Console.WriteLine();
143
143
144
144
SafeConsole.WriteColor(ConsoleColor.Red, e.GetType() + ": ");
Original file line number Diff line number Diff line change
@@ -25,9 +25,9 @@ public string? FileName
25
25
26
26
public EmailAttachmentType Type { get; set; }
27
27
28
-
28
+
29
29
public FileEmbedded File { get; set; }
30
30
31
31
[AutoExpressionField]
32
-
public override string ToString() => As.Expression(() => FileName ?? File.FileName);
32
+
public override string ToString() => As.Expression(() => FileName ?? (File == null ? "" : File.FileName));
33
33
}
Original file line number Diff line number Diff line change
@@ -146,7 +146,7 @@ function AlertDropdownImp(props: { checkForChangesEvery: number, keepRingingFor:
146
146
<>
147
147
<div className="nav-link sf-bell-container" onClick={handleOnToggle}>
148
148
<FontAwesomeIcon icon="bell" className={classes("sf-bell", ringing && "ringing", isOpen && "open", countResult && countResult.numAlerts > 0 && "active")} />
149
-
{countResult && countResult.numAlerts > 0 && <span className="badge badge-danger badge-pill sf-alerts-badge">{countResult.numAlerts}</span>}
149
+
{countResult && countResult.numAlerts > 0 && <span className="badge btn-danger badge-pill sf-alerts-badge">{countResult.numAlerts}</span>}
150
150
</div>
151
151
{isOpen && <div className="sf-alerts-toasts">
152
152
{alertsGroups == null ? <Toast> <Toast.Body>{JavascriptMessage.loading.niceToString()}</Toast.Body></Toast> :
@@ -164,7 +164,7 @@ function AlertDropdownImp(props: { checkForChangesEvery: number, keepRingingFor:
164
164
<Toast onClose={() => handleOnCloseAlerts(alerts!.map(a=>a))}>
165
165
<Toast.Header>
166
166
<strong >{AlertMessage._0SimilarAlerts.niceToString(alertsGroups.filter((a, i) => i >= showAlerts).sum(gr => gr.elements.length))}</strong>
167
-
<a href="#" className="mr-auto ml-auto" onClick={e => { e.preventDefault(); setShowAlert(a => a + 3); }}><small>{AlertMessage.ViewMore.niceToString()}</small></a>
167
+
<a href="#" className="me-auto ms-auto" onClick={e => { e.preventDefault(); setShowAlert(a => a + 3); }}><small>{AlertMessage.ViewMore.niceToString()}</small></a>
168
168
<small>{AlertMessage.CloseAll.niceToString()}</small>
169
169
</Toast.Header>
170
170
</Toast>
@@ -213,8 +213,8 @@ export function AlertToast(p: { alert: AlertEntity, onClose: (e: AlertEntity[])
213
213
return (
214
214
<Toast onClose={() => p.onClose([p.alert])} className={p.className}>
215
215
<Toast.Header>
216
-
{icon && <span className="mr-2">{icon}</span>}
217
-
<strong className="mr-auto">{AlertsClient.getTitle(p.alert.titleField, p.alert.alertType)}</strong>
216
+
{icon && <span className="me-2">{icon}</span>}
217
+
<strong className="me-auto">{AlertsClient.getTitle(p.alert.titleField, p.alert.alertType)}</strong>
218
218
<small>{DateTime.fromISO(p.alert.alertDate!).toRelative()}</small>
219
219
</Toast.Header>
220
220
<Toast.Body style={{ whiteSpace: "pre-wrap" }}>
@@ -242,9 +242,9 @@ export function AlertGroupToast(p: { alerts: Array<AlertEntity>, onClose: (e: Al
242
242
p.alerts.length > showAlerts &&
243
243
<Toast className="mt-0" onClose={() => p.onClose(p.alerts)}>
244
244
<Toast.Header>
245
-
{icon && <span className="mr-2">{icon}</span>}
245
+
{icon && <span className="me-2">{icon}</span>}
246
246
<strong >{AlertMessage._0SimilarAlerts.niceToString(p.alerts.length - showAlerts)}</strong>
247
-
<a href="#" className="mr-auto ml-auto" onClick={e => { e.preventDefault(); setShowAlert(a => a + 3); }}><small>{AlertMessage.ViewMore.niceToString()}</small></a>
247
+
<a href="#" className="me-auto ms-auto" onClick={e => { e.preventDefault(); setShowAlert(a => a + 3); }}><small>{AlertMessage.ViewMore.niceToString()}</small></a>
248
248
<small>{AlertMessage.CloseAll.niceToString()}</small>
249
249
</Toast.Header>
250
250
</Toast>
Original file line number Diff line number Diff line change
@@ -52,10 +52,10 @@ export function start(options: { routes: JSX.Element[], showAlerts?: (typeName:
52
52
}));
53
53
54
54
Operations.addSettings(new EntityOperationSettings(AlertOperation.Delay, {
55
-
onClick: (eoc) => chooseDate().then(d => d && eoc.defaultClick(d.toISO())).done(),
55
+
onClick: (eoc) => chooseDate().then(d => d && eoc.defaultClick(d.toISO())),
56
56
hideOnCanExecute: true,
57
-
contextual: { onClick: (coc) => chooseDate().then(d => d && coc.defaultContextualClick(d.toISO())).done() },
58
-
contextualFromMany: { onClick: (coc) => chooseDate().then(d => d && coc.defaultContextualClick(d.toISO())).done() },
57
+
contextual: { onClick: (coc) => chooseDate().then(d => d && coc.defaultContextualClick(d.toISO())) },
58
+
contextualFromMany: { onClick: (coc) => chooseDate().then(d => d && coc.defaultContextualClick(d.toISO())) },
59
59
}));
60
60
61
61
var cellFormatter = new Finder.CellFormatter((cell, ctx) => {
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@ export function start(options: { routes: JSX.Element[] }) {
31
31
return (
32
32
{
33
33
order: -1,
34
-
button: <button className="btn btn-info ml-2"
34
+
button: <button className="btn btn-info ms-2"
35
35
onClick={e => {
36
36
e.preventDefault();
37
37
var promise = ValueLineModal.show({
Original file line number Diff line number Diff line change
@@ -41,15 +41,15 @@ export default function LoginDropdown(p: {
41
41
var extraButtons = p.extraButons && p.extraButons(user);
42
42
43
43
return (
44
-
<NavDropdown className="sf-login-dropdown" id="sfLoginDropdown" title={p.renderName ? p.renderName(user) : user.userName!} alignRight >
45
-
{pv && <NavDropdown.Item id="sf-auth-profile" onClick={handleProfileClick}><FontAwesomeIcon icon="user-edit" fixedWidth className="mr-2" /> {LoginAuthMessage.MyProfile.niceToString()}</NavDropdown.Item>}
44
+
<NavDropdown className="sf-login-dropdown" id="sfLoginDropdown" title={p.renderName ? p.renderName(user) : user.userName!} align="end">
45
+
{pv && <NavDropdown.Item id="sf-auth-profile" onClick={handleProfileClick}><FontAwesomeIcon icon="user-edit" fixedWidth className="me-2" /> {LoginAuthMessage.MyProfile.niceToString()}</NavDropdown.Item>}
46
46
{cpv && <LinkContainer to="~/auth/changePassword">
47
-
<NavDropdown.Item><FontAwesomeIcon icon="key" fixedWidth className="mr-2" /> {LoginAuthMessage.ChangePassword.niceToString()}</NavDropdown.Item>
47
+
<NavDropdown.Item><FontAwesomeIcon icon="key" fixedWidth className="me-2" /> {LoginAuthMessage.ChangePassword.niceToString()}</NavDropdown.Item>
48
48
</LinkContainer>}
49
49
{extraButtons}
50
50
{(cpv || pv || extraButtons) && <NavDropdown.Divider />}
51
-
{suv && <LinkContainer to="~/auth/login"><NavDropdown.Item><FontAwesomeIcon icon="user-friends" className="mr-2" /> {LoginAuthMessage.SwitchUser.niceToString()}</NavDropdown.Item></LinkContainer>}
52
-
<NavDropdown.Item id="sf-auth-logout" onClick={() => AuthClient.logout()}><FontAwesomeIcon icon="sign-out-alt" fixedWidth className="mr-2"/> {LoginAuthMessage.Logout.niceToString()}</NavDropdown.Item>
51
+
{suv && <LinkContainer to="~/auth/login"><NavDropdown.Item><FontAwesomeIcon icon="user-friends" className="me-2" /> {LoginAuthMessage.SwitchUser.niceToString()}</NavDropdown.Item></LinkContainer>}
52
+
<NavDropdown.Item id="sf-auth-logout" onClick={() => AuthClient.logout()}><FontAwesomeIcon icon="sign-out-alt" fixedWidth className="me-2"/> {LoginAuthMessage.Logout.niceToString()}</NavDropdown.Item>
53
53
</NavDropdown>
54
54
);
55
55
}
Original file line number Diff line number Diff line change
@@ -38,13 +38,15 @@ export default function LoginPage() {
38
38
{showLoginForm && <LoginForm ctx={ctx} />}
39
39
{LoginPage.customLoginButtons && LoginPage.customLoginButtons(ctx)}
40
40
{LoginPage.showLoginForm == "initially_not" && showLoginForm == false &&
41
-
<div className="col-md-6 offset-md-3 mt-2">
42
-
<a href="#" onClick={e => {
43
-
e.preventDefault();
44
-
setShowLoginForm(true);
45
-
}}>
46
-
{LoginAuthMessage.ShowLoginForm.niceToString()}
47
-
</a>
41
+
<div className="row">
42
+
<div className="col-md-6 offset-md-3 mt-2">
43
+
<a href="#" className="ms-1" onClick={e => {
44
+
e.preventDefault();
45
+
setShowLoginForm(true);
46
+
}}>
47
+
{LoginAuthMessage.ShowLoginForm.niceToString()}
48
+
</a>
49
+
</div>
48
50
</div>
49
51
}
50
52
</div>
@@ -110,12 +112,10 @@ export function LoginForm(p: { ctx: LoginContext }) {
110
112
</div>
111
113
<div className="row">
112
114
<div className="col-md-6 offset-md-3">
113
-
<div className={classes("form-group", error("userName") && "has-error")}>
115
+
<div className={classes("form-group mb-3", error("userName") && "has-error")}>
114
116
<label className="sr-only" htmlFor="userName">{LoginAuthMessage.Username.niceToString()}</label>
115
117
<div className="input-group mb-2 mr-sm-2 mb-sm-0">
116
-
<div className="input-group-prepend">
117
-
<div className="input-group-text"><FontAwesomeIcon icon="user" style={{ width: "16px" }} /></div>
118
-
</div>
118
+
<div className="input-group-text"><FontAwesomeIcon icon="user" style={{ width: "16px" }} /></div>
119
119
<input type="text" className="form-control" id="userName" ref={userName} placeholder={LoginAuthMessage.Username.niceToString()} disabled={p.ctx.loading != null} />
120
120
</div>
121
121
{error("userName") && <span className="help-block text-danger">{error("userName")}</span>}
@@ -124,12 +124,10 @@ export function LoginForm(p: { ctx: LoginContext }) {
124
124
</div>
125
125
<div className="row">
126
126
<div className="col-md-6 offset-md-3">
127
-
<div className={classes("form-group", error("password") && "has-error")}>
127
+
<div className={classes("form-group mb-3", error("password") && "has-error")}>
128
128
<label className="sr-only" htmlFor="password">{LoginAuthMessage.Password.niceToString()}</label>
129
129
<div className="input-group mb-2 mr-sm-2 mb-sm-0">
130
-
<div className="input-group-prepend">
131
-
<div className="input-group-text"><FontAwesomeIcon icon="key" style={{ width: "16px" }} /></div>
132
-
</div>
130
+
<div className="input-group-text"><FontAwesomeIcon icon="key" style={{ width: "16px" }} /></div>
133
131
<input ref={password} type="password" name="password" className="form-control" id="password" placeholder={LoginAuthMessage.Password.niceToString()} disabled={p.ctx.loading != null} />
134
132
</div>
135
133
{error("password") && <span className="help-block text-danger">{error("password")}</span>}
@@ -138,11 +136,10 @@ export function LoginForm(p: { ctx: LoginContext }) {
138
136
</div>
139
137
{AuthClient.Options.userTicket &&
140
138
<div className="row">
141
-
<div className="col-md-6 offset-md-3" style={{ paddingTop: ".35rem" }}>
139
+
<div className="col-md-6 offset-md-3">
142
140
<div className="form-check mb-2 mr-sm-2 mb-sm-0">
143
-
<label className="sf-remember-me">
144
-
<input ref={rememberMe} name="remember" type="checkbox" disabled={p.ctx.loading != null} /> {LoginAuthMessage.RememberMe.niceToString()}
145
-
</label>
141
+
<input ref={rememberMe} name="remember" id="rememberMe" className="form-check-input" type="checkbox" disabled={p.ctx.loading != null} />
142
+
<label className="sf-remember-me form-check-label" htmlFor="rememberMe" >{LoginAuthMessage.RememberMe.niceToString()}</label>
146
143
</div>
147
144
</div>
148
145
</div>
@@ -153,15 +150,15 @@ export function LoginForm(p: { ctx: LoginContext }) {
153
150
<button type="submit" id="login" className="btn btn-success" disabled={p.ctx.loading != null}>
154
151
{p.ctx.loading == "password" ?
155
152
<FontAwesomeIcon icon="cog" fixedWidth style={{ fontSize: "larger" }} spin /> : < FontAwesomeIcon icon="sign-in-alt" />}
156
-
153
+
157
154
{p.ctx.loading == "password" ? JavascriptMessage.loading.niceToString() : AuthClient.currentUser() ? LoginAuthMessage.SwitchUser.niceToString() : LoginAuthMessage.Login.niceToString()}
158
155
</button>
159
156
{error("login") && <span className="help-block text-danger" style={{ color: "red" }}>{error("login")}</span>}
160
157
{AuthClient.Options.resetPassword && !p.ctx.loading &&
161
158
<span>
162
159
163
160
164
-
<Link to="~/auth/forgotPasswordEmail">{LoginAuthMessage.IHaveForgottenMyPassword.niceToString()}</Link>
161
+
<Link to="~/auth/forgotPasswordEmail">{LoginAuthMessage.IHaveForgottenMyPassword.niceToString()}</Link>
165
162
</span>
166
163
}
167
164
</div>
Original file line number Diff line number Diff line change
@@ -42,10 +42,10 @@ export function DoublePassword(p: { ctx: TypeContext<string>, isNew: boolean, ma
42
42
return (
43
43
<div>
44
44
<FormGroup ctx={p.ctx} labelText={LoginAuthMessage.NewPassword.niceToString()}>
45
-
<input type="password" ref={newPass} autoComplete="off" className={classes(p.ctx.formControlClass, p.mandatory && !newPass.current?.value ? "sf-mandatory" : null)} onBlur={handlePasswordBlur} />
45
+
<input type="password" ref={newPass} autoComplete="off" placeholder={LoginAuthMessage.NewPassword.niceToString()} className={classes(p.ctx.formControlClass, p.mandatory && !newPass.current?.value ? "sf-mandatory" : null)} onBlur={handlePasswordBlur} />
46
46
</FormGroup>
47
47
<FormGroup ctx={p.ctx} labelText={LoginAuthMessage.ConfirmNewPassword.niceToString()}>
48
-
<input type="password" ref={newPass2} autoComplete="off" className={classes(p.ctx.formControlClass, p.mandatory && !newPass2.current?.value ? "sf-mandatory" : null)} onBlur={handlePasswordBlur} />
48
+
<input type="password" ref={newPass2} autoComplete="off" placeholder={LoginAuthMessage.ConfirmNewPassword.niceToString()} className={classes(p.ctx.formControlClass, p.mandatory && !newPass2.current?.value ? "sf-mandatory" : null)} onBlur={handlePasswordBlur} />
49
49
</FormGroup>
50
50
</div>
51
51
);
Original file line number Diff line number Diff line change
@@ -57,13 +57,12 @@ function isControlled(p: CollapsableCardProps): [boolean, (isOpen: boolean) => v
57
57
export default function CollapsableCard(p: CollapsableCardProps) {
58
58
59
59
const [isOpen, setIsOpen] = isControlled(p);
60
-
const isRTL = React.useMemo(() => document.body.classList.contains("rtl"), []);
61
60
return (
62
61
<div className={classes("card", cardStyleClasses(p.cardStyle), p.size && ("card-" + p.size))}>
63
62
<div className={classes("card-header", cardStyleClasses(p.headerStyle))} style={{ cursor: "pointer" }} onClick={() => setIsOpen(!isOpen)}>
64
63
{(p.collapsable == undefined || p.collapsable == true) &&
65
64
<span
66
-
className={isRTL ? "float-left" : "float-right"}
65
+
className={"float-end"}
67
66
style={{ cursor: "pointer" }}
68
67
onClick={() => setIsOpen(!isOpen)}>
69
68
<FontAwesomeIcon icon={isOpen ? "chevron-up" : "chevron-down"} />
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@ export default function PropertyRouteCombo(p : PropertyRouteComboProps){
31
31
var routes = p.routes ?? Dic.getValues(getTypeInfo(p.type.cleanName).members).filter(p.filter!).map(mi => PropertyRoute.parse(p.type.cleanName, mi.name));
32
32
33
33
return (
34
-
<select className={ctx.formControlClass} value={ctx.value?.path ?? ""} onChange={handleChange} >
34
+
<select className={ctx.formSelectClass} value={ctx.value?.path ?? ""} onChange={handleChange} >
35
35
<option value=""> - </option>
36
36
{routes.map(r => r.propertyPath()).map(path =>
37
37
<option key={path} value={path}>{path}</option>
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4