@iobroker/adapter-react-v5 7.0.2 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Components/404.d.ts +3 -2
- package/Components/404.js +3 -2
- package/Components/ColorPicker.d.ts +22 -8
- package/Components/ColorPicker.js +34 -17
- package/Components/ComplexCron.js +24 -24
- package/Components/CopyToClipboard.d.ts +10 -1
- package/Components/CopyToClipboard.js +17 -8
- package/Components/CustomModal.d.ts +1 -1
- package/Components/CustomModal.js +8 -8
- package/Components/FileBrowser.d.ts +11 -11
- package/Components/FileBrowser.js +135 -152
- package/Components/FileViewer.js +34 -23
- package/Components/Icon.d.ts +16 -2
- package/Components/Icon.js +19 -8
- package/Components/IconPicker.js +10 -14
- package/Components/IconSelector.d.ts +1 -1
- package/Components/IconSelector.js +64 -74
- package/Components/Image.d.ts +8 -4
- package/Components/Image.js +13 -32
- package/Components/Loader.d.ts +2 -2
- package/Components/Loader.js +21 -18
- package/Components/Loaders/MV.d.ts +6 -1
- package/Components/Loaders/MV.js +23 -7
- package/Components/Loaders/PT.d.ts +7 -2
- package/Components/Loaders/PT.js +20 -7
- package/Components/Loaders/Vendor.d.ts +2 -2
- package/Components/Loaders/Vendor.js +15 -7
- package/Components/Logo.js +16 -18
- package/Components/MDUtils.d.ts +1 -1
- package/Components/MDUtils.js +8 -4
- package/Components/ObjectBrowser.d.ts +40 -39
- package/Components/ObjectBrowser.js +550 -435
- package/Components/Router.d.ts +1 -3
- package/Components/Router.js +3 -1
- package/Components/SaveCloseButtons.d.ts +3 -3
- package/Components/SaveCloseButtons.js +3 -3
- package/Components/Schedule.d.ts +15 -15
- package/Components/Schedule.js +177 -154
- package/Components/SelectWithIcon.d.ts +2 -2
- package/Components/SelectWithIcon.js +45 -34
- package/Components/SimpleCron/index.js +83 -43
- package/Components/TabContainer.js +2 -2
- package/Components/TabContent.js +1 -1
- package/Components/TabHeader.js +1 -1
- package/Components/TableResize.d.ts +2 -2
- package/Components/TableResize.js +5 -5
- package/Components/TextWithIcon.d.ts +1 -1
- package/Components/TextWithIcon.js +10 -8
- package/Components/ToggleThemeMenu.d.ts +2 -2
- package/Components/ToggleThemeMenu.js +3 -3
- package/Components/TreeTable.d.ts +18 -18
- package/Components/TreeTable.js +76 -72
- package/Components/UploadImage.d.ts +2 -2
- package/Components/UploadImage.js +25 -21
- package/Components/Utils.d.ts +42 -22
- package/Components/Utils.js +66 -65
- package/Components/withWidth.d.ts +2 -2
- package/Components/withWidth.js +10 -6
- package/Dialogs/ComplexCron.d.ts +2 -2
- package/Dialogs/ComplexCron.js +3 -3
- package/Dialogs/Confirm.d.ts +4 -4
- package/Dialogs/Confirm.js +18 -8
- package/Dialogs/Cron.d.ts +3 -3
- package/Dialogs/Cron.js +21 -17
- package/Dialogs/Error.d.ts +3 -3
- package/Dialogs/Error.js +6 -4
- package/Dialogs/Message.d.ts +3 -3
- package/Dialogs/Message.js +6 -4
- package/Dialogs/SelectFile.d.ts +4 -4
- package/Dialogs/SelectFile.js +6 -4
- package/Dialogs/SelectID.d.ts +12 -10
- package/Dialogs/SelectID.js +12 -8
- package/Dialogs/SimpleCron.d.ts +2 -2
- package/Dialogs/SimpleCron.js +2 -2
- package/Dialogs/TextInput.d.ts +2 -2
- package/Dialogs/TextInput.js +3 -3
- package/GenericApp.d.ts +19 -13
- package/GenericApp.js +128 -85
- package/LegacyConnection.d.ts +240 -248
- package/LegacyConnection.js +500 -525
- package/README.md +1234 -1170
- package/Theme.d.ts +1 -1
- package/Theme.js +9 -12
- package/assets/devices.json +1 -0
- package/assets/rooms.json +1 -0
- package/craco-module-federation.js +3 -12
- package/i18n/de.json +434 -434
- package/i18n/en.json +434 -434
- package/i18n/es.json +434 -434
- package/i18n/fr.json +434 -434
- package/i18n/it.json +434 -434
- package/i18n/nl.json +434 -434
- package/i18n/pl.json +434 -434
- package/i18n/pt.json +434 -434
- package/i18n/ru.json +434 -434
- package/i18n/uk.json +434 -434
- package/i18n/zh-cn.json +434 -434
- package/i18n.d.ts +26 -19
- package/i18n.js +28 -22
- package/icons/IconAdapter.js +2 -2
- package/icons/IconAlias.js +2 -2
- package/icons/IconChannel.js +2 -2
- package/icons/IconClearFilter.js +2 -2
- package/icons/IconClosed.js +2 -2
- package/icons/IconCopy.js +2 -2
- package/icons/IconDevice.js +2 -2
- package/icons/IconDocument.js +2 -2
- package/icons/IconDocumentReadOnly.js +2 -2
- package/icons/IconExpert.js +2 -2
- package/icons/IconFx.js +2 -2
- package/icons/IconInstance.js +2 -2
- package/icons/IconLogout.js +2 -2
- package/icons/IconNoIcon.js +2 -2
- package/icons/IconOpen.d.ts +2 -2
- package/icons/IconOpen.js +2 -2
- package/icons/IconProps.d.ts +4 -3
- package/icons/IconState.d.ts +2 -2
- package/icons/IconState.js +2 -2
- package/index.css +3 -2
- package/package.json +1 -1
- package/src/Components/404.tsx +32 -31
- package/src/Components/ColorPicker.tsx +142 -114
- package/src/Components/ComplexCron.tsx +174 -137
- package/src/Components/CopyToClipboard.tsx +22 -9
- package/src/Components/CustomModal.tsx +76 -69
- package/src/Components/FileBrowser.tsx +959 -852
- package/src/Components/FileViewer.tsx +146 -127
- package/src/Components/Icon.tsx +80 -52
- package/src/Components/IconPicker.tsx +83 -67
- package/src/Components/IconSelector.tsx +159 -141
- package/src/Components/Image.tsx +43 -26
- package/src/Components/Loader.tsx +56 -32
- package/src/Components/Logo.tsx +62 -52
- package/src/Components/MDUtils.tsx +10 -6
- package/src/Components/ObjectBrowser.tsx +3198 -2478
- package/src/Components/Router.tsx +11 -11
- package/src/Components/SaveCloseButtons.tsx +43 -39
- package/src/Components/Schedule.tsx +1091 -853
- package/src/Components/SelectWithIcon.tsx +135 -93
- package/src/Components/TabContainer.tsx +21 -19
- package/src/Components/TabContent.tsx +13 -12
- package/src/Components/TabHeader.tsx +10 -9
- package/src/Components/TableResize.tsx +52 -37
- package/src/Components/TextWithIcon.tsx +30 -19
- package/src/Components/ToggleThemeMenu.tsx +31 -13
- package/src/Components/TreeTable.tsx +468 -385
- package/src/Components/UploadImage.tsx +153 -121
- package/src/Components/Utils.tsx +135 -127
- package/src/Components/loader.css +40 -31
- package/src/Components/withWidth.tsx +23 -12
- package/src/Connection.tsx +1 -3
- package/src/Dialogs/ComplexCron.tsx +55 -61
- package/src/Dialogs/Confirm.tsx +88 -65
- package/src/Dialogs/Cron.tsx +122 -112
- package/src/Dialogs/Error.tsx +37 -42
- package/src/Dialogs/Message.tsx +39 -37
- package/src/Dialogs/SelectFile.tsx +95 -85
- package/src/Dialogs/SelectID.tsx +141 -129
- package/src/Dialogs/SimpleCron.tsx +44 -44
- package/src/Dialogs/TextInput.tsx +60 -68
- package/src/GenericApp.tsx +342 -242
- package/src/LegacyConnection.tsx +972 -842
- package/src/Prompt.tsx +3 -1
- package/src/Theme.tsx +19 -26
- package/src/icons/IconAdapter.tsx +16 -14
- package/src/icons/IconAlias.tsx +16 -14
- package/src/icons/IconChannel.tsx +55 -16
- package/src/icons/IconClearFilter.tsx +17 -15
- package/src/icons/IconClosed.tsx +16 -11
- package/src/icons/IconCopy.tsx +16 -11
- package/src/icons/IconDevice.tsx +121 -22
- package/src/icons/IconDocument.tsx +16 -11
- package/src/icons/IconDocumentReadOnly.tsx +21 -12
- package/src/icons/IconExpert.tsx +20 -12
- package/src/icons/IconFx.tsx +16 -14
- package/src/icons/IconInstance.tsx +16 -14
- package/src/icons/IconLogout.tsx +20 -18
- package/src/icons/IconNoIcon.tsx +16 -14
- package/src/icons/IconOpen.tsx +17 -12
- package/src/icons/IconProps.tsx +4 -3
- package/src/icons/IconState.tsx +34 -13
- package/src/index.css +3 -2
- package/tasks.js +91 -0
- package/types.d.ts +141 -0
- package/Components/Loaders/PT.css +0 -109
- package/Components/Loaders/Vendor.css +0 -13
- package/Components/loader.css +0 -222
- package/Components/types.d.ts +0 -82
- package/assets/devices/Alarm Systems.svg +0 -19
- package/assets/devices/Amplifier.svg +0 -22
- package/assets/devices/Awnings.svg +0 -5
- package/assets/devices/Battery Status.svg +0 -5
- package/assets/devices/Ceiling Spotlights.svg +0 -16
- package/assets/devices/Chandelier.svg +0 -7
- package/assets/devices/Climate.svg +0 -12
- package/assets/devices/Coffee Makers.svg +0 -6
- package/assets/devices/Cold Water.svg +0 -31
- package/assets/devices/Computer.svg +0 -21
- package/assets/devices/Consumption.svg +0 -8
- package/assets/devices/Curtains.svg +0 -43
- package/assets/devices/Dishwashers.svg +0 -12
- package/assets/devices/Doors.svg +0 -6
- package/assets/devices/Doorstep.svg +0 -35
- package/assets/devices/Dryer.svg +0 -14
- package/assets/devices/Fan.svg +0 -20
- package/assets/devices/Floor Lamps.svg +0 -5
- package/assets/devices/Garage Doors.svg +0 -9
- package/assets/devices/Gates.svg +0 -32
- package/assets/devices/Hairdryer.svg +0 -23
- package/assets/devices/Handle.svg +0 -6
- package/assets/devices/Hanging Lamps.svg +0 -9
- package/assets/devices/Heater.svg +0 -44
- package/assets/devices/Hoods.svg +0 -12
- package/assets/devices/Hot Water.svg +0 -10
- package/assets/devices/Humidity.svg +0 -41
- package/assets/devices/Iron.svg +0 -5
- package/assets/devices/Irrigation.svg +0 -23
- package/assets/devices/Led Strip.svg +0 -31
- package/assets/devices/Light.svg +0 -30
- package/assets/devices/Lightings.svg +0 -46
- package/assets/devices/Lock.svg +0 -19
- package/assets/devices/Louvre.svg +0 -7
- package/assets/devices/Mowing Machine.svg +0 -9
- package/assets/devices/Music.svg +0 -13
- package/assets/devices/Outdoor Blinds.svg +0 -7
- package/assets/devices/People.svg +0 -19
- package/assets/devices/Pool.svg +0 -8
- package/assets/devices/Power Consumption.svg +0 -13
- package/assets/devices/Printer.svg +0 -10
- package/assets/devices/Pump.svg +0 -10
- package/assets/devices/Receiver.svg +0 -19
- package/assets/devices/Sconces.svg +0 -10
- package/assets/devices/Security.svg +0 -34
- package/assets/devices/Shading.svg +0 -5
- package/assets/devices/Shutters.svg +0 -11
- package/assets/devices/SmokeDetector.svg +0 -13
- package/assets/devices/Sockets.svg +0 -13
- package/assets/devices/Speaker.svg +0 -35
- package/assets/devices/Stove.svg +0 -12
- package/assets/devices/Table Lamps.svg +0 -12
- package/assets/devices/Temperature Sensors.svg +0 -28
- package/assets/devices/Tv.svg +0 -8
- package/assets/devices/Vacuum Cleaner.svg +0 -16
- package/assets/devices/Ventilation.svg +0 -12
- package/assets/devices/Washing Machines.svg +0 -16
- package/assets/devices/Water Consumption.svg +0 -6
- package/assets/devices/Water Heater.svg +0 -8
- package/assets/devices/Water.svg +0 -40
- package/assets/devices/Weather.svg +0 -28
- package/assets/devices/Window.svg +0 -8
- package/assets/rooms/Anteroom.svg +0 -53
- package/assets/rooms/Attic.svg +0 -21
- package/assets/rooms/Balcony.svg +0 -13
- package/assets/rooms/Barn.svg +0 -6
- package/assets/rooms/Basement.svg +0 -5
- package/assets/rooms/Bathroom.svg +0 -38
- package/assets/rooms/Bedroom.svg +0 -5
- package/assets/rooms/Boiler Room.svg +0 -13
- package/assets/rooms/Carport.svg +0 -17
- package/assets/rooms/Cellar.svg +0 -89
- package/assets/rooms/Chamber.svg +0 -9
- package/assets/rooms/Corridor.svg +0 -53
- package/assets/rooms/Dining Area.svg +0 -37
- package/assets/rooms/Dining Room.svg +0 -37
- package/assets/rooms/Dining.svg +0 -37
- package/assets/rooms/Dressing Room.svg +0 -5
- package/assets/rooms/Driveway.svg +0 -15
- package/assets/rooms/Entrance.svg +0 -44
- package/assets/rooms/Equipment Room.svg +0 -15
- package/assets/rooms/Front Yard.svg +0 -64
- package/assets/rooms/Gallery.svg +0 -14
- package/assets/rooms/Garage.svg +0 -20
- package/assets/rooms/Garden.svg +0 -13
- package/assets/rooms/Ground Floor.svg +0 -95
- package/assets/rooms/Guest Bathroom.svg +0 -33
- package/assets/rooms/Guest Room.svg +0 -5
- package/assets/rooms/Gym.svg +0 -5
- package/assets/rooms/Hall.svg +0 -19
- package/assets/rooms/Home Theater.svg +0 -8
- package/assets/rooms/Kitchen.svg +0 -18
- package/assets/rooms/Laundry Room.svg +0 -12
- package/assets/rooms/Living Area.svg +0 -11
- package/assets/rooms/Living Room.svg +0 -10
- package/assets/rooms/Locker Room.svg +0 -17
- package/assets/rooms/Nursery.svg +0 -5
- package/assets/rooms/Office.svg +0 -8
- package/assets/rooms/Outdoors.svg +0 -7
- package/assets/rooms/Playroom.svg +0 -6
- package/assets/rooms/Pool.svg +0 -8
- package/assets/rooms/Rear Wall.svg +0 -30
- package/assets/rooms/Second Floor.svg +0 -95
- package/assets/rooms/Shed.svg +0 -16
- package/assets/rooms/Sleeping Area.svg +0 -22
- package/assets/rooms/Stairway.svg +0 -5
- package/assets/rooms/Stairwell.svg +0 -15
- package/assets/rooms/Storeroom.svg +0 -5
- package/assets/rooms/Summer House.svg +0 -27
- package/assets/rooms/Swimming Pool.svg +0 -21
- package/assets/rooms/Terrace.svg +0 -7
- package/assets/rooms/Toilet.svg +0 -10
- package/assets/rooms/Upstairs.svg +0 -6
- package/assets/rooms/Wardrobe.svg +0 -60
- package/assets/rooms/Washroom.svg +0 -20
- package/assets/rooms/Wc.svg +0 -10
- package/assets/rooms/Windscreen.svg +0 -60
- package/assets/rooms/Workshop.svg +0 -23
- package/assets/rooms/Workspace.svg +0 -8
package/src/Components/Image.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { type JSX } from 'react';
|
|
2
|
+
import { Component } from 'react';
|
|
2
3
|
|
|
3
4
|
import IconNoIcon from '../icons/IconNoIcon';
|
|
4
5
|
|
|
@@ -58,8 +59,11 @@ interface ImageState {
|
|
|
58
59
|
showError?: boolean;
|
|
59
60
|
}
|
|
60
61
|
|
|
62
|
+
/**
|
|
63
|
+
* A component for displaying an image.
|
|
64
|
+
*/
|
|
61
65
|
class Image extends Component<ImageProps, ImageState> {
|
|
62
|
-
private svg:
|
|
66
|
+
private svg: JSX.Element | null;
|
|
63
67
|
|
|
64
68
|
static REMOTE_SERVER: boolean = window.location.hostname.includes('iobroker.in');
|
|
65
69
|
|
|
@@ -79,7 +83,7 @@ class Image extends Component<ImageProps, ImageState> {
|
|
|
79
83
|
this.svg = this.state.svg && this.state.src ? this.getSvgFromData(this.state.src) : null;
|
|
80
84
|
}
|
|
81
85
|
|
|
82
|
-
static getDerivedStateFromProps(props: ImageProps, state: ImageState) {
|
|
86
|
+
static getDerivedStateFromProps(props: ImageProps, state: ImageState): Partial<ImageState> | null {
|
|
83
87
|
const newState: ImageState = {};
|
|
84
88
|
let changed = false;
|
|
85
89
|
|
|
@@ -104,7 +108,7 @@ class Image extends Component<ImageProps, ImageState> {
|
|
|
104
108
|
return changed ? newState : null;
|
|
105
109
|
}
|
|
106
110
|
|
|
107
|
-
getSvgFromData(src: string):
|
|
111
|
+
getSvgFromData(src: string): JSX.Element | null {
|
|
108
112
|
const len = 'data:image/svg+xml;base64,';
|
|
109
113
|
if (!src.startsWith(len)) {
|
|
110
114
|
return null;
|
|
@@ -118,20 +122,21 @@ class Image extends Component<ImageProps, ImageState> {
|
|
|
118
122
|
|
|
119
123
|
svg.remove();
|
|
120
124
|
|
|
121
|
-
return
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
return (
|
|
126
|
+
<svg
|
|
127
|
+
className={this.props.className}
|
|
128
|
+
style={this.state.color ? { color: this.state.color } : {}}
|
|
129
|
+
{...svgProps}
|
|
130
|
+
dangerouslySetInnerHTML={{ __html: inner }}
|
|
131
|
+
/>
|
|
132
|
+
);
|
|
133
|
+
} catch {
|
|
129
134
|
// ignore
|
|
130
135
|
}
|
|
131
136
|
return null;
|
|
132
137
|
}
|
|
133
138
|
|
|
134
|
-
render() {
|
|
139
|
+
render(): JSX.Element | null {
|
|
135
140
|
if (this.state.svg) {
|
|
136
141
|
if (!this.state.created) {
|
|
137
142
|
setTimeout(() => {
|
|
@@ -146,27 +151,39 @@ class Image extends Component<ImageProps, ImageState> {
|
|
|
146
151
|
if (this.state.imgError || !this.state.src) {
|
|
147
152
|
return <IconNoIcon className={this.props.className} />;
|
|
148
153
|
}
|
|
149
|
-
if (
|
|
154
|
+
if (
|
|
155
|
+
Image.REMOTE_SERVER &&
|
|
156
|
+
!this.state.src.startsWith('http://') &&
|
|
157
|
+
!this.state.src.startsWith('https://')
|
|
158
|
+
) {
|
|
150
159
|
let src = (this.props.imagePrefix || '') + this.state.src;
|
|
151
160
|
if (src.startsWith('./')) {
|
|
152
161
|
src = Image.REMOTE_PREFIX + src.substring(2);
|
|
153
162
|
} else if (!src.startsWith('/')) {
|
|
154
163
|
src = Image.REMOTE_PREFIX + src;
|
|
155
164
|
}
|
|
156
|
-
return
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
165
|
+
return (
|
|
166
|
+
<img
|
|
167
|
+
className={this.props.className}
|
|
168
|
+
src={`https://remote-files.iobroker.in${src}`}
|
|
169
|
+
alt=""
|
|
170
|
+
onError={() =>
|
|
171
|
+
this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })
|
|
172
|
+
}
|
|
173
|
+
/>
|
|
174
|
+
);
|
|
162
175
|
}
|
|
163
176
|
|
|
164
|
-
return
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
177
|
+
return (
|
|
178
|
+
<img
|
|
179
|
+
className={this.props.className}
|
|
180
|
+
src={(this.props.imagePrefix || '') + this.state.src}
|
|
181
|
+
alt=""
|
|
182
|
+
onError={() =>
|
|
183
|
+
this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })
|
|
184
|
+
}
|
|
185
|
+
/>
|
|
186
|
+
);
|
|
170
187
|
}
|
|
171
188
|
|
|
172
189
|
return null;
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*
|
|
6
|
-
|
|
6
|
+
*/
|
|
7
7
|
import React, { useEffect } from 'react';
|
|
8
|
-
import { ThemeName, ThemeType } from '../types';
|
|
8
|
+
import type { ThemeName, ThemeType } from '../types';
|
|
9
9
|
// import './loader.css'
|
|
10
10
|
|
|
11
11
|
declare global {
|
|
@@ -256,7 +256,7 @@ interface LoaderProps {
|
|
|
256
256
|
backgroundImage?: string;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
function Loader(props: LoaderProps) {
|
|
259
|
+
function Loader(props: LoaderProps): React.JSX.Element {
|
|
260
260
|
useEffect(() => {
|
|
261
261
|
if (!window.document.getElementById('loader-iobroker-component')) {
|
|
262
262
|
const style = window.document.createElement('style');
|
|
@@ -268,37 +268,61 @@ function Loader(props: LoaderProps) {
|
|
|
268
268
|
|
|
269
269
|
const size = props.size || 234;
|
|
270
270
|
const theme = props.themeName || props.theme || props.themeType || 'light';
|
|
271
|
-
return
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
271
|
+
return (
|
|
272
|
+
<div
|
|
273
|
+
className={`logo-back logo-background-${theme}`}
|
|
274
|
+
style={{
|
|
275
|
+
backgroundImage:
|
|
276
|
+
props.backgroundImage && props.backgroundImage !== '@@loginBackgroundImage@@'
|
|
277
|
+
? props.backgroundImage
|
|
278
|
+
: window.loadingBackgroundImage && window.loadingBackgroundImage !== '@@loginBackgroundImage@@'
|
|
279
|
+
? `url(${window.loadingBackgroundImage})`
|
|
280
|
+
: undefined,
|
|
281
|
+
backgroundColor:
|
|
282
|
+
props.backgroundColor && props.backgroundColor !== '@@loginBackgroundColor@@'
|
|
283
|
+
? props.backgroundColor
|
|
284
|
+
: window.loadingBackgroundColor && window.loadingBackgroundColor !== '@@loginBackgroundColor@@'
|
|
285
|
+
? window.loadingBackgroundColor
|
|
286
|
+
: undefined,
|
|
287
|
+
backgroundSize: 'cover',
|
|
288
|
+
}}
|
|
289
|
+
>
|
|
290
|
+
{window.loadingHideLogo === 'true' ? null : (
|
|
291
|
+
<>
|
|
288
292
|
<div
|
|
289
|
-
className=
|
|
290
|
-
style={{
|
|
293
|
+
className="logo-div"
|
|
294
|
+
style={{ width: size, height: size }}
|
|
295
|
+
>
|
|
296
|
+
<div
|
|
297
|
+
className={`logo-top logo-background-${theme}`}
|
|
298
|
+
style={{ left: '37%' }}
|
|
299
|
+
/>
|
|
300
|
+
<div
|
|
301
|
+
className={`logo-top logo-background-${theme}`}
|
|
302
|
+
style={{ left: '57%' }}
|
|
303
|
+
/>
|
|
304
|
+
<div
|
|
305
|
+
className={`logo-border logo-background-${theme} logo-animate-wait`}
|
|
306
|
+
style={{ borderWidth: size * 0.132 }}
|
|
307
|
+
/>
|
|
308
|
+
<div className={`logo-i logo-animate-color-inside-${theme}`} />
|
|
309
|
+
<div
|
|
310
|
+
className={`logo-i-top logo-animate-color-inside-${theme}`}
|
|
311
|
+
style={{ top: '18%' }}
|
|
312
|
+
/>
|
|
313
|
+
<div
|
|
314
|
+
className={`logo-i-top logo-animate-color-inside-${theme}`}
|
|
315
|
+
style={{ bottom: '18%' }}
|
|
316
|
+
/>
|
|
317
|
+
</div>
|
|
318
|
+
<div
|
|
319
|
+
className={`logo-animate-grow logo-animate-grow-${theme}`}
|
|
320
|
+
style={{ width: size + 11, height: size + 11 }}
|
|
291
321
|
/>
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
<div
|
|
297
|
-
className={`logo-animate-grow logo-animate-grow-${theme}`}
|
|
298
|
-
style={{ width: size + 11, height: size + 11 }}
|
|
299
|
-
/>
|
|
300
|
-
</>}
|
|
301
|
-
</div>;
|
|
322
|
+
</>
|
|
323
|
+
)}
|
|
324
|
+
</div>
|
|
325
|
+
);
|
|
302
326
|
}
|
|
303
327
|
|
|
304
328
|
export default Loader;
|
package/src/Components/Logo.tsx
CHANGED
|
@@ -26,9 +26,12 @@ interface LogoProps {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
class Logo extends React.Component<LogoProps> {
|
|
29
|
-
static generateFile(fileName: string, obj: any) {
|
|
29
|
+
static generateFile(fileName: string, obj: any): void {
|
|
30
30
|
const el = window.document.createElement('a');
|
|
31
|
-
el.setAttribute(
|
|
31
|
+
el.setAttribute(
|
|
32
|
+
'href',
|
|
33
|
+
`data:application/json;charset=utf-8,${encodeURIComponent(JSON.stringify(obj, null, 2))}`,
|
|
34
|
+
);
|
|
32
35
|
el.setAttribute('download', fileName);
|
|
33
36
|
|
|
34
37
|
el.style.display = 'none';
|
|
@@ -39,7 +42,7 @@ class Logo extends React.Component<LogoProps> {
|
|
|
39
42
|
window.document.body.removeChild(el);
|
|
40
43
|
}
|
|
41
44
|
|
|
42
|
-
handleFileSelect = (evt: Event) => {
|
|
45
|
+
handleFileSelect = (evt: Event): void => {
|
|
43
46
|
const target = evt.target as HTMLInputElement;
|
|
44
47
|
const files = target?.files;
|
|
45
48
|
if (!files || !files.length) {
|
|
@@ -73,7 +76,7 @@ class Logo extends React.Component<LogoProps> {
|
|
|
73
76
|
}
|
|
74
77
|
};
|
|
75
78
|
|
|
76
|
-
download() {
|
|
79
|
+
download(): void {
|
|
77
80
|
const result = {
|
|
78
81
|
_id: `system.adapter.${this.props.common.name}.${this.props.instance}`,
|
|
79
82
|
common: JSON.parse(JSON.stringify(this.props.common)),
|
|
@@ -94,72 +97,79 @@ class Logo extends React.Component<LogoProps> {
|
|
|
94
97
|
Logo.generateFile(`${result._id}.json`, result);
|
|
95
98
|
}
|
|
96
99
|
|
|
97
|
-
upload() {
|
|
100
|
+
upload(): void {
|
|
98
101
|
const input = window.document.createElement('input');
|
|
99
102
|
input.setAttribute('type', 'file');
|
|
100
103
|
input.setAttribute('id', 'files');
|
|
101
104
|
input.setAttribute('opacity', '0');
|
|
102
105
|
input.addEventListener('change', this.handleFileSelect, false);
|
|
103
|
-
|
|
106
|
+
input.click();
|
|
104
107
|
}
|
|
105
108
|
|
|
106
|
-
render() {
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
render(): React.JSX.Element {
|
|
110
|
+
return (
|
|
111
|
+
<div
|
|
112
|
+
className={this.props.className}
|
|
113
|
+
style={this.props.style}
|
|
114
|
+
>
|
|
115
|
+
{this.props.common.icon ? (
|
|
116
|
+
<Icon
|
|
117
|
+
src={this.props.common.icon}
|
|
118
|
+
style={{
|
|
119
|
+
padding: 8,
|
|
120
|
+
width: 64,
|
|
121
|
+
}}
|
|
122
|
+
alt="logo"
|
|
123
|
+
/>
|
|
124
|
+
) : null}
|
|
125
|
+
{this.props.common.readme ? (
|
|
126
|
+
<Fab
|
|
127
|
+
size="small"
|
|
128
|
+
color="primary"
|
|
129
|
+
aria-label="Help"
|
|
130
|
+
style={{
|
|
131
|
+
marginRight: 5,
|
|
132
|
+
marginTop: 5,
|
|
133
|
+
float: 'right',
|
|
134
|
+
}}
|
|
135
|
+
onClick={() => {
|
|
136
|
+
const win = window.open(this.props.common.readme, '_blank');
|
|
137
|
+
win?.focus();
|
|
138
|
+
}}
|
|
139
|
+
>
|
|
140
|
+
<IconHelp />
|
|
141
|
+
</Fab>
|
|
142
|
+
) : null}
|
|
143
|
+
<Fab
|
|
144
|
+
size="small"
|
|
145
|
+
color="primary"
|
|
146
|
+
aria-label="Load config"
|
|
111
147
|
style={{
|
|
112
|
-
|
|
113
|
-
|
|
148
|
+
marginRight: 5,
|
|
149
|
+
marginTop: 5,
|
|
150
|
+
float: 'right',
|
|
114
151
|
}}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
152
|
+
title={I18n.t('ra_Load configuration from file')}
|
|
153
|
+
onClick={() => this.upload()}
|
|
154
|
+
>
|
|
155
|
+
<IconUpload />
|
|
156
|
+
</Fab>
|
|
118
157
|
<Fab
|
|
119
158
|
size="small"
|
|
120
159
|
color="primary"
|
|
121
|
-
aria-label="
|
|
160
|
+
aria-label="Save config"
|
|
122
161
|
style={{
|
|
123
162
|
marginRight: 5,
|
|
124
163
|
marginTop: 5,
|
|
125
164
|
float: 'right',
|
|
126
165
|
}}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
win?.focus();
|
|
130
|
-
}}
|
|
166
|
+
title={I18n.t('ra_Save configuration to file')}
|
|
167
|
+
onClick={() => this.download()}
|
|
131
168
|
>
|
|
132
|
-
<
|
|
133
|
-
</Fab>
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
color="primary"
|
|
137
|
-
aria-label="Load config"
|
|
138
|
-
style={{
|
|
139
|
-
marginRight: 5,
|
|
140
|
-
marginTop: 5,
|
|
141
|
-
float: 'right',
|
|
142
|
-
}}
|
|
143
|
-
title={I18n.t('ra_Load configuration from file')}
|
|
144
|
-
onClick={() => this.upload()}
|
|
145
|
-
>
|
|
146
|
-
<IconUpload />
|
|
147
|
-
</Fab>
|
|
148
|
-
<Fab
|
|
149
|
-
size="small"
|
|
150
|
-
color="primary"
|
|
151
|
-
aria-label="Save config"
|
|
152
|
-
style={{
|
|
153
|
-
marginRight: 5,
|
|
154
|
-
marginTop: 5,
|
|
155
|
-
float: 'right',
|
|
156
|
-
}}
|
|
157
|
-
title={I18n.t('ra_Save configuration to file')}
|
|
158
|
-
onClick={() => this.download()}
|
|
159
|
-
>
|
|
160
|
-
<IconDownload />
|
|
161
|
-
</Fab>
|
|
162
|
-
</div>;
|
|
169
|
+
<IconDownload />
|
|
170
|
+
</Fab>
|
|
171
|
+
</div>
|
|
172
|
+
);
|
|
163
173
|
}
|
|
164
174
|
}
|
|
165
175
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*
|
|
6
|
-
|
|
6
|
+
*/
|
|
7
7
|
import copy from './CopyToClipboard';
|
|
8
8
|
|
|
9
9
|
class MDUtils {
|
|
@@ -13,10 +13,14 @@ class MDUtils {
|
|
|
13
13
|
text = text.replace(m[0], m[0].replace(/\s/, ' '));
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
return text
|
|
16
|
+
return text
|
|
17
|
+
.replace(/[^a-zA-Zа-яА-Я0-9]/g, '')
|
|
18
|
+
.trim()
|
|
19
|
+
.replace(/\s/g, '')
|
|
20
|
+
.toLowerCase();
|
|
17
21
|
}
|
|
18
22
|
|
|
19
|
-
static openLink(url: string, target?: string) {
|
|
23
|
+
static openLink(url: string, target?: string): void {
|
|
20
24
|
// replace IPv6 Address with [ipv6]:port
|
|
21
25
|
url = url.replace(/\/\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\d+)?\//i, '//[$1]$2/');
|
|
22
26
|
|
|
@@ -27,7 +31,7 @@ class MDUtils {
|
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
static getTitle(text: string) {
|
|
34
|
+
static getTitle(text: string): string {
|
|
31
35
|
const result = MDUtils.extractHeader(text);
|
|
32
36
|
let body = result.body;
|
|
33
37
|
const header = result.header;
|
|
@@ -44,7 +48,7 @@ class MDUtils {
|
|
|
44
48
|
return '';
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
return header.title;
|
|
51
|
+
return header.title.toString();
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
static extractHeader(text: string): { header: Record<string, string | boolean | number>; body: string } {
|
|
@@ -85,7 +89,7 @@ class MDUtils {
|
|
|
85
89
|
static removeDocsify(text: string): string {
|
|
86
90
|
const m = text.match(/{docsify-[^}]*}/g);
|
|
87
91
|
if (m) {
|
|
88
|
-
m.forEach(doc => text = text.replace(doc, ''));
|
|
92
|
+
m.forEach(doc => (text = text.replace(doc, '')));
|
|
89
93
|
}
|
|
90
94
|
return text;
|
|
91
95
|
}
|