Browse Source

vite build

elilchen 3 years ago
parent
commit
85150127bb

+ 10 - 0
.github/workflows/build.yaml

@@ -105,6 +105,11 @@ jobs:
105 105
           scoop bucket add extras
106 106
           scoop install nsis
107 107
 
108
+      - name: Install Node.js
109
+        uses: actions/setup-node@v3
110
+        with:
111
+          node-version: 16
112
+
108 113
       - name: Sign exe files
109 114
         uses: GermanBluefox/code-sign-action@v7
110 115
         with:
@@ -114,6 +119,11 @@ jobs:
114 119
           folder: 'target\x86_64-pc-windows-msvc\release'
115 120
           recursive: false
116 121
 
122
+      - name: Build UI browser file
123
+        run: |
124
+          npm run build
125
+        working-directory: ./ui/html
126
+
117 127
       - name: Build UI setup file
118 128
         run: |
119 129
           rustup default nightly

+ 24 - 0
ui/html/.gitignore

@@ -0,0 +1,24 @@
1
+# Logs
2
+logs
3
+*.log
4
+npm-debug.log*
5
+yarn-debug.log*
6
+yarn-error.log*
7
+pnpm-debug.log*
8
+lerna-debug.log*
9
+
10
+node_modules
11
+dist
12
+dist-ssr
13
+*.local
14
+
15
+# Editor directories and files
16
+.vscode/*
17
+!.vscode/extensions.json
18
+.idea
19
+.DS_Store
20
+*.suo
21
+*.ntvs*
22
+*.njsproj
23
+*.sln
24
+*.sw?

+ 0 - 344
ui/html/editor/codemirror.css

@@ -1,344 +0,0 @@
1
-/* BASICS */
2
-
3
-.CodeMirror {
4
-  /* Set height, width, borders, and global font properties here */
5
-  font-family: monospace;
6
-  height: 300px;
7
-  color: black;
8
-  direction: ltr;
9
-}
10
-
11
-/* PADDING */
12
-
13
-.CodeMirror-lines {
14
-  padding: 4px 0; /* Vertical padding around content */
15
-}
16
-.CodeMirror pre.CodeMirror-line,
17
-.CodeMirror pre.CodeMirror-line-like {
18
-  padding: 0 4px; /* Horizontal padding of content */
19
-}
20
-
21
-.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
22
-  background-color: white; /* The little square between H and V scrollbars */
23
-}
24
-
25
-/* GUTTER */
26
-
27
-.CodeMirror-gutters {
28
-  border-right: 1px solid #ddd;
29
-  background-color: #f7f7f7;
30
-  white-space: nowrap;
31
-}
32
-.CodeMirror-linenumbers {}
33
-.CodeMirror-linenumber {
34
-  padding: 0 3px 0 5px;
35
-  min-width: 20px;
36
-  text-align: right;
37
-  color: #999;
38
-  white-space: nowrap;
39
-}
40
-
41
-.CodeMirror-guttermarker { color: black; }
42
-.CodeMirror-guttermarker-subtle { color: #999; }
43
-
44
-/* CURSOR */
45
-
46
-.CodeMirror-cursor {
47
-  border-left: 1px solid black;
48
-  border-right: none;
49
-  width: 0;
50
-}
51
-/* Shown when moving in bi-directional text */
52
-.CodeMirror div.CodeMirror-secondarycursor {
53
-  border-left: 1px solid silver;
54
-}
55
-.cm-fat-cursor .CodeMirror-cursor {
56
-  width: auto;
57
-  border: 0 !important;
58
-  background: #7e7;
59
-}
60
-.cm-fat-cursor div.CodeMirror-cursors {
61
-  z-index: 1;
62
-}
63
-.cm-fat-cursor .CodeMirror-line::selection,
64
-.cm-fat-cursor .CodeMirror-line > span::selection, 
65
-.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; }
66
-.cm-fat-cursor .CodeMirror-line::-moz-selection,
67
-.cm-fat-cursor .CodeMirror-line > span::-moz-selection,
68
-.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; }
69
-.cm-fat-cursor { caret-color: transparent; }
70
-@-moz-keyframes blink {
71
-  0% {}
72
-  50% { background-color: transparent; }
73
-  100% {}
74
-}
75
-@-webkit-keyframes blink {
76
-  0% {}
77
-  50% { background-color: transparent; }
78
-  100% {}
79
-}
80
-@keyframes blink {
81
-  0% {}
82
-  50% { background-color: transparent; }
83
-  100% {}
84
-}
85
-
86
-/* Can style cursor different in overwrite (non-insert) mode */
87
-.CodeMirror-overwrite .CodeMirror-cursor {}
88
-
89
-.cm-tab { display: inline-block; text-decoration: inherit; }
90
-
91
-.CodeMirror-rulers {
92
-  position: absolute;
93
-  left: 0; right: 0; top: -50px; bottom: 0;
94
-  overflow: hidden;
95
-}
96
-.CodeMirror-ruler {
97
-  border-left: 1px solid #ccc;
98
-  top: 0; bottom: 0;
99
-  position: absolute;
100
-}
101
-
102
-/* DEFAULT THEME */
103
-
104
-.cm-s-default .cm-header {color: blue;}
105
-.cm-s-default .cm-quote {color: #090;}
106
-.cm-negative {color: #d44;}
107
-.cm-positive {color: #292;}
108
-.cm-header, .cm-strong {font-weight: bold;}
109
-.cm-em {font-style: italic;}
110
-.cm-link {text-decoration: underline;}
111
-.cm-strikethrough {text-decoration: line-through;}
112
-
113
-.cm-s-default .cm-keyword {color: #708;}
114
-.cm-s-default .cm-atom {color: #219;}
115
-.cm-s-default .cm-number {color: #164;}
116
-.cm-s-default .cm-def {color: #00f;}
117
-.cm-s-default .cm-variable,
118
-.cm-s-default .cm-punctuation,
119
-.cm-s-default .cm-property,
120
-.cm-s-default .cm-operator {}
121
-.cm-s-default .cm-variable-2 {color: #05a;}
122
-.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
123
-.cm-s-default .cm-comment {color: #a50;}
124
-.cm-s-default .cm-string {color: #a11;}
125
-.cm-s-default .cm-string-2 {color: #f50;}
126
-.cm-s-default .cm-meta {color: #555;}
127
-.cm-s-default .cm-qualifier {color: #555;}
128
-.cm-s-default .cm-builtin {color: #30a;}
129
-.cm-s-default .cm-bracket {color: #997;}
130
-.cm-s-default .cm-tag {color: #170;}
131
-.cm-s-default .cm-attribute {color: #00c;}
132
-.cm-s-default .cm-hr {color: #999;}
133
-.cm-s-default .cm-link {color: #00c;}
134
-
135
-.cm-s-default .cm-error {color: #f00;}
136
-.cm-invalidchar {color: #f00;}
137
-
138
-.CodeMirror-composing { border-bottom: 2px solid; }
139
-
140
-/* Default styles for common addons */
141
-
142
-div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
143
-div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
144
-.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
145
-.CodeMirror-activeline-background {background: #e8f2ff;}
146
-
147
-/* STOP */
148
-
149
-/* The rest of this file contains styles related to the mechanics of
150
-   the editor. You probably shouldn't touch them. */
151
-
152
-.CodeMirror {
153
-  position: relative;
154
-  overflow: hidden;
155
-  background: white;
156
-}
157
-
158
-.CodeMirror-scroll {
159
-  overflow: scroll !important; /* Things will break if this is overridden */
160
-  /* 50px is the magic margin used to hide the element's real scrollbars */
161
-  /* See overflow: hidden in .CodeMirror */
162
-  margin-bottom: -50px; margin-right: -50px;
163
-  padding-bottom: 50px;
164
-  height: 100%;
165
-  outline: none; /* Prevent dragging from highlighting the element */
166
-  position: relative;
167
-  z-index: 0;
168
-}
169
-.CodeMirror-sizer {
170
-  position: relative;
171
-  border-right: 50px solid transparent;
172
-}
173
-
174
-/* The fake, visible scrollbars. Used to force redraw during scrolling
175
-   before actual scrolling happens, thus preventing shaking and
176
-   flickering artifacts. */
177
-.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
178
-  position: absolute;
179
-  z-index: 6;
180
-  display: none;
181
-  outline: none;
182
-}
183
-.CodeMirror-vscrollbar {
184
-  right: 0; top: 0;
185
-  overflow-x: hidden;
186
-  overflow-y: scroll;
187
-}
188
-.CodeMirror-hscrollbar {
189
-  bottom: 0; left: 0;
190
-  overflow-y: hidden;
191
-  overflow-x: scroll;
192
-}
193
-.CodeMirror-scrollbar-filler {
194
-  right: 0; bottom: 0;
195
-}
196
-.CodeMirror-gutter-filler {
197
-  left: 0; bottom: 0;
198
-}
199
-
200
-.CodeMirror-gutters {
201
-  position: absolute; left: 0; top: 0;
202
-  min-height: 100%;
203
-  z-index: 3;
204
-}
205
-.CodeMirror-gutter {
206
-  white-space: normal;
207
-  height: 100%;
208
-  display: inline-block;
209
-  vertical-align: top;
210
-  margin-bottom: -50px;
211
-}
212
-.CodeMirror-gutter-wrapper {
213
-  position: absolute;
214
-  z-index: 4;
215
-  background: none !important;
216
-  border: none !important;
217
-}
218
-.CodeMirror-gutter-background {
219
-  position: absolute;
220
-  top: 0; bottom: 0;
221
-  z-index: 4;
222
-}
223
-.CodeMirror-gutter-elt {
224
-  position: absolute;
225
-  cursor: default;
226
-  z-index: 4;
227
-}
228
-.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
229
-.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
230
-
231
-.CodeMirror-lines {
232
-  cursor: text;
233
-  min-height: 1px; /* prevents collapsing before first draw */
234
-}
235
-.CodeMirror pre.CodeMirror-line,
236
-.CodeMirror pre.CodeMirror-line-like {
237
-  /* Reset some styles that the rest of the page might have set */
238
-  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
239
-  border-width: 0;
240
-  background: transparent;
241
-  font-family: inherit;
242
-  font-size: inherit;
243
-  margin: 0;
244
-  white-space: pre;
245
-  word-wrap: normal;
246
-  line-height: inherit;
247
-  color: inherit;
248
-  z-index: 2;
249
-  position: relative;
250
-  overflow: visible;
251
-  -webkit-tap-highlight-color: transparent;
252
-  -webkit-font-variant-ligatures: contextual;
253
-  font-variant-ligatures: contextual;
254
-}
255
-.CodeMirror-wrap pre.CodeMirror-line,
256
-.CodeMirror-wrap pre.CodeMirror-line-like {
257
-  word-wrap: break-word;
258
-  white-space: pre-wrap;
259
-  word-break: normal;
260
-}
261
-
262
-.CodeMirror-linebackground {
263
-  position: absolute;
264
-  left: 0; right: 0; top: 0; bottom: 0;
265
-  z-index: 0;
266
-}
267
-
268
-.CodeMirror-linewidget {
269
-  position: relative;
270
-  z-index: 2;
271
-  padding: 0.1px; /* Force widget margins to stay inside of the container */
272
-}
273
-
274
-.CodeMirror-widget {}
275
-
276
-.CodeMirror-rtl pre { direction: rtl; }
277
-
278
-.CodeMirror-code {
279
-  outline: none;
280
-}
281
-
282
-/* Force content-box sizing for the elements where we expect it */
283
-.CodeMirror-scroll,
284
-.CodeMirror-sizer,
285
-.CodeMirror-gutter,
286
-.CodeMirror-gutters,
287
-.CodeMirror-linenumber {
288
-  -moz-box-sizing: content-box;
289
-  box-sizing: content-box;
290
-}
291
-
292
-.CodeMirror-measure {
293
-  position: absolute;
294
-  width: 100%;
295
-  height: 0;
296
-  overflow: hidden;
297
-  visibility: hidden;
298
-}
299
-
300
-.CodeMirror-cursor {
301
-  position: absolute;
302
-  pointer-events: none;
303
-}
304
-.CodeMirror-measure pre { position: static; }
305
-
306
-div.CodeMirror-cursors {
307
-  visibility: hidden;
308
-  position: relative;
309
-  z-index: 3;
310
-}
311
-div.CodeMirror-dragcursors {
312
-  visibility: visible;
313
-}
314
-
315
-.CodeMirror-focused div.CodeMirror-cursors {
316
-  visibility: visible;
317
-}
318
-
319
-.CodeMirror-selected { background: #d9d9d9; }
320
-.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
321
-.CodeMirror-crosshair { cursor: crosshair; }
322
-.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
323
-.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
324
-
325
-.cm-searching {
326
-  background-color: #ffa;
327
-  background-color: rgba(255, 255, 0, .4);
328
-}
329
-
330
-/* Used to force a border model for a node */
331
-.cm-force-border { padding-right: .1px; }
332
-
333
-@media print {
334
-  /* Hide the cursor when printing */
335
-  .CodeMirror div.CodeMirror-cursors {
336
-    visibility: hidden;
337
-  }
338
-}
339
-
340
-/* See issue #2901 */
341
-.cm-tab-wrap-hack:after { content: ''; }
342
-
343
-/* Help users use markselection to safely style text background */
344
-span.CodeMirror-selectedtext { background: none; }

File diff suppressed because it is too large
+ 0 - 9874
ui/html/editor/codemirror.js


+ 0 - 88
ui/html/editor/toml.js

@@ -1,88 +0,0 @@
1
-// CodeMirror, copyright (c) by Marijn Haverbeke and others
2
-// Distributed under an MIT license: https://codemirror.net/5/LICENSE
3
-
4
-(function(mod) {
5
-  if (typeof exports == "object" && typeof module == "object") // CommonJS
6
-    mod(require("../../lib/codemirror"));
7
-  else if (typeof define == "function" && define.amd) // AMD
8
-    define(["../../lib/codemirror"], mod);
9
-  else // Plain browser env
10
-    mod(CodeMirror);
11
-})(function(CodeMirror) {
12
-"use strict";
13
-
14
-CodeMirror.defineMode("toml", function () {
15
-  return {
16
-    startState: function () {
17
-      return {
18
-        inString: false,
19
-        stringType: "",
20
-        lhs: true,
21
-        inArray: 0
22
-      };
23
-    },
24
-    token: function (stream, state) {
25
-      //check for state changes
26
-      if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) {
27
-        state.stringType = stream.peek();
28
-        stream.next(); // Skip quote
29
-        state.inString = true; // Update state
30
-      }
31
-      if (stream.sol() && state.inArray === 0) {
32
-        state.lhs = true;
33
-      }
34
-      //return state
35
-      if (state.inString) {
36
-        while (state.inString && !stream.eol()) {
37
-          if (stream.peek() === state.stringType) {
38
-            stream.next(); // Skip quote
39
-            state.inString = false; // Clear flag
40
-          } else if (stream.peek() === '\\') {
41
-            stream.next();
42
-            stream.next();
43
-          } else {
44
-            stream.match(/^.[^\\\"\']*/);
45
-          }
46
-        }
47
-        return state.lhs ? "property string" : "string"; // Token style
48
-      } else if (state.inArray && stream.peek() === ']') {
49
-        stream.next();
50
-        state.inArray--;
51
-        return 'bracket';
52
-      } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) {
53
-        stream.next();//skip closing ]
54
-        // array of objects has an extra open & close []
55
-        if (stream.peek() === ']') stream.next();
56
-        return "atom";
57
-      } else if (stream.peek() === "#") {
58
-        stream.skipToEnd();
59
-        return "comment";
60
-      } else if (stream.eatSpace()) {
61
-        return null;
62
-      } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) {
63
-        return "property";
64
-      } else if (state.lhs && stream.peek() === "=") {
65
-        stream.next();
66
-        state.lhs = false;
67
-        return null;
68
-      } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) {
69
-        return 'atom'; //date
70
-      } else if (!state.lhs && (stream.match('true') || stream.match('false'))) {
71
-        return 'atom';
72
-      } else if (!state.lhs && stream.peek() === '[') {
73
-        state.inArray++;
74
-        stream.next();
75
-        return 'bracket';
76
-      } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) {
77
-        return 'number';
78
-      } else if (!stream.eatSpace()) {
79
-        stream.next();
80
-      }
81
-      return null;
82
-    }
83
-  };
84
-});
85
-
86
-CodeMirror.defineMIME('text/x-toml', 'toml');
87
-
88
-});

+ 2 - 6
ui/html/index.html

@@ -1,18 +1,14 @@
1 1
 <!DOCTYPE html>
2
-<html>
2
+<html lang="en">
3 3
 <head>
4 4
 <meta charset="utf-8" />
5 5
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6 6
 <title>RustDesk Server</title>
7 7
 <link rel="icon" href="data:;base64,=">
8 8
 <script>addEventListener('contextmenu', e => e.preventDefault());</script>
9
-<link rel="stylesheet" href="editor/codemirror.css">
10
-<link rel="stylesheet" href="style.css" />
11
-<script src="editor/codemirror.js"></script>
12
-<script src="editor/toml.js"></script>
13 9
 <script type="module" src="/main.js" defer></script>
14 10
 </head>
15
-<body>
11
+<body style="visibility: hidden">
16 12
 <textarea></textarea>
17 13
 <form>
18 14
 <label><input type="checkbox"> <p>Turn on auto scroll</p></label>

+ 7 - 2
ui/html/main.js

@@ -1,3 +1,8 @@
1
+import 'codemirror/lib/codemirror.css';
2
+import './style.css';
3
+import 'codemirror/mode/toml/toml.js';
4
+import CodeMirror from 'codemirror';
5
+
1 6
 const { event, fs, path, tauri } = window.__TAURI__;
2 7
 
3 8
 class View {
@@ -125,9 +130,9 @@ RUST_LOG=info
125 130
         input.checked = this.is_auto_scroll;
126 131
         if (this.is_edit_mode) {
127 132
             label[0].style.display = 'none';
128
-            label[1].style.display = 'inline';
133
+            label[1].style.display = 'block';
129 134
         } else {
130
-            label[0].style.display = 'inline';
135
+            label[0].style.display = 'block';
131 136
             label[1].style.display = 'none';
132 137
         }
133 138
         return form;

+ 17 - 0
ui/html/package.json

@@ -0,0 +1,17 @@
1
+{
2
+  "name": "rustdesk_server",
3
+  "private": true,
4
+  "version": "0.1.2",
5
+  "type": "module",
6
+  "scripts": {
7
+    "dev": "vite",
8
+    "build": "vite build",
9
+    "preview": "vite preview"
10
+  },
11
+  "devDependencies": {
12
+    "vite": "^4.1.0"
13
+  },
14
+  "dependencies": {
15
+    "codemirror": "v5"
16
+  }
17
+}

+ 1 - 0
ui/html/style.css

@@ -1,4 +1,5 @@
1 1
 body {
2
+    visibility: visible !important;
2 3
     margin: 0;
3 4
     background: #fff;
4 5
 }

+ 8 - 0
ui/html/vite.config.js

@@ -0,0 +1,8 @@
1
+import { defineConfig } from 'vite';
2
+
3
+export default defineConfig({
4
+    server: {
5
+        port: '5177',
6
+        strictPort: true
7
+    }
8
+});

+ 1 - 1
ui/src/adapter/view/desktop.rs

@@ -99,7 +99,7 @@ pub async fn run(sender: Sender<Event>, receiver: Receiver<Event>) {
99 99
             setup_sender.send(Event::ViewInit).unwrap_or_default();
100 100
             app.listen_global("__action__", move |msg| {
101 101
                 match msg.payload().unwrap_or_default() {
102
-                    r#""__init__""# => setup_sender.send(Event::BroswerInit).unwrap_or_default(),
102
+                    r#""__init__""# => setup_sender.send(Event::BrowserInit).unwrap_or_default(),
103 103
                     r#""restart""# => setup_sender
104 104
                         .send(Event::BrowserAction("restart".to_owned()))
105 105
                         .unwrap_or_default(),

+ 1 - 1
ui/src/usecase/presenter.rs

@@ -17,7 +17,7 @@ pub async fn create(sender: Sender<Event>, receiver: Receiver<Event>) {
17 17
             for _ in 1..buffer {
18 18
                 match receiver.recv_timeout(Duration::from_nanos(1)) {
19 19
                     Ok(event) => match event {
20
-                        Event::BroswerInit => {
20
+                        Event::BrowserInit => {
21 21
                             send(Event::BrowserUpdate(("file".to_owned(), file.to_owned())));
22 22
                         }
23 23
                         Event::BrowserAction(action) => match action.as_str() {

+ 1 - 1
ui/src/usecase/view.rs

@@ -9,7 +9,7 @@ pub async fn create(sender: Sender<Event>, receiver: Receiver<Event>) {
9 9
 #[derive(Debug, Clone, PartialEq)]
10 10
 pub enum Event {
11 11
     BrowserAction(String),
12
-    BroswerInit,
12
+    BrowserInit,
13 13
     BrowserUpdate((String, String)),
14 14
     BrowserRender(String),
15 15
     FileChange(String),

+ 5 - 5
ui/tauri.conf.json

@@ -1,14 +1,14 @@
1 1
 {
2 2
   "build": {
3
-    "beforeDevCommand": "",
4
-    "beforeBuildCommand": "",
5
-    "devPath": "html",
6
-    "distDir": "html",
3
+    "beforeBuildCommand": "npm run build",
4
+    "beforeDevCommand": "npm run dev",
5
+    "devPath": "http://127.0.0.1:5177/",
6
+    "distDir": "html/dist",
7 7
     "withGlobalTauri": true
8 8
   },
9 9
   "package": {
10 10
     "productName": "rustdesk_server",
11
-    "version": "0.1.1"
11
+    "version": "0.1.2"
12 12
   },
13 13
   "tauri": {
14 14
     "allowlist": {