clickgo 3.1.3-dev12 → 3.1.4-dev13

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/README.md CHANGED
@@ -19,7 +19,7 @@ Load the module loader first, and then load it using the module loader.
19
19
  **index.html**
20
20
 
21
21
  ```html
22
- <script src="https://cdn.jsdelivr.net/npm/@litert/loader@3.4.1/dist/loader.min.js?path=index&npm={'clickgo':'3.0.7-dev8'}"></script>
22
+ <script src="https://cdn.jsdelivr.net/npm/@litert/loader@3.4.3/dist/loader.min.js?path=index&npm={'clickgo':'3.1.4-dev13'}"></script>
23
23
  ```
24
24
 
25
25
  **index.js**
@@ -60,12 +60,16 @@
60
60
  "/form/event/form/form.css",
61
61
  "/form/event/form/form.js",
62
62
  "/form/event/form/form.xml",
63
+ "/form/event/other/other.js",
64
+ "/form/event/other/other.xml",
63
65
  "/form/event/screen/screen.js",
64
66
  "/form/event/screen/screen.xml",
65
67
  "/form/event/task/task.js",
66
68
  "/form/event/task/task.xml",
67
69
  "/form/method/aform/aform.js",
68
70
  "/form/method/aform/aform.xml",
71
+ "/form/method/aform/sd.js",
72
+ "/form/method/aform/sd.xml",
69
73
  "/form/method/aform/test.xml",
70
74
  "/form/method/core/core.js",
71
75
  "/form/method/core/core.xml",
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const clickgo = require("clickgo");
4
+ class default_1 extends clickgo.form.AbstractForm {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.list = [];
8
+ }
9
+ onLauncherFolderNameChanged(id, name) {
10
+ const date = new Date();
11
+ this.list.unshift({
12
+ 'time': date.getHours().toString() + ':' + date.getMinutes().toString() + ':' + date.getSeconds().toString(),
13
+ 'name': 'launcherFolderNameChanged',
14
+ 'content': JSON.stringify({
15
+ 'id': id,
16
+ 'name': name
17
+ })
18
+ });
19
+ }
20
+ onHashChanged(hash) {
21
+ const date = new Date();
22
+ this.list.unshift({
23
+ 'time': date.getHours().toString() + ':' + date.getMinutes().toString() + ':' + date.getSeconds().toString(),
24
+ 'name': 'hashChanged',
25
+ 'content': hash
26
+ });
27
+ }
28
+ }
29
+ exports.default = default_1;
@@ -0,0 +1,5 @@
1
+ <form width="500" height="550" title="About other" padding="10">
2
+ <vflow v-slot="data" :data="list" direction="v" style="color: #FFF; background: hsl(0, 0%, 20%); line-height: 1.5; padding: 10px; flex: 1;">
3
+ <label>[{{data.row.time}}] {{data.row.name}}, {{data.row.content}}.</label>
4
+ </vflow>
5
+ </form>
@@ -28,6 +28,7 @@ const tab_1 = require("./control/tab/tab");
28
28
  const text_1 = require("./control/text/text");
29
29
  const vflow_1 = require("./control/vflow/vflow");
30
30
  const form_2 = require("./event/form/form");
31
+ const other_1 = require("./event/other/other");
31
32
  const screen_1 = require("./event/screen/screen");
32
33
  const task_1 = require("./event/task/task");
33
34
  const aform_1 = require("./method/aform/aform");
@@ -147,6 +148,10 @@ class default_1 extends clickgo.form.AbstractForm {
147
148
  frm = yield form_2.default.create();
148
149
  break;
149
150
  }
151
+ case 'eother': {
152
+ frm = yield other_1.default.create();
153
+ break;
154
+ }
150
155
  case 'escreen': {
151
156
  frm = yield screen_1.default.create();
152
157
  break;
@@ -45,6 +45,7 @@
45
45
  <button @click="openForm('escreen')">About screen</button>
46
46
  <button @click="openForm('eform')">About form</button>
47
47
  <button @click="openForm('etask')">About task</button>
48
+ <button @click="openForm('eother')">About other</button>
48
49
  </layout>
49
50
  </flow>
50
51
  </tab>
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const clickgo = require("clickgo");
13
+ const sd_1 = require("./sd");
13
14
  class default_1 extends clickgo.form.AbstractForm {
14
15
  constructor() {
15
16
  super(...arguments);
@@ -41,7 +42,7 @@ class default_1 extends clickgo.form.AbstractForm {
41
42
  }
42
43
  sshowDialog() {
43
44
  return __awaiter(this, void 0, void 0, function* () {
44
- const frm = yield this.createForm('test');
45
+ const frm = yield sd_1.default.create();
45
46
  if (typeof frm === 'number') {
46
47
  return;
47
48
  }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const clickgo = require("clickgo");
13
+ class Sd extends clickgo.form.AbstractForm {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.dr = '';
17
+ }
18
+ newDialog() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const frm = yield Sd.create();
21
+ if (typeof frm === 'number') {
22
+ return;
23
+ }
24
+ this.dr = yield frm.showDialog();
25
+ });
26
+ }
27
+ }
28
+ exports.default = Sd;
@@ -0,0 +1,7 @@
1
+ <form width="200" height="200" title="dialog">
2
+ <layout align-v="center" align-h="center" direction="v" gutter="10" style="flex: 1; width: 0;">
3
+ <label>Haha! Result: {{dr}}</label>
4
+ <button @click="dialogResult = dialogResult ? '' : 'Done'" style="padding: 10px;">{{dialogResult ? 'Remove' : 'Set'}} dialogResult</button>
5
+ <button @click="newDialog"style="padding: 10px;">showDialog()</button>
6
+ </layout>
7
+ </form>
@@ -1,6 +1,5 @@
1
- <form width="200" height="200" title="From path">
2
- <layout align-v="center" align-h="center" direction="v" gutter="10" style="flex: 1; width: 0;">
3
- <label>Haha!</label>
4
- <button @click="dialogResult = dialogResult ? '' : 'Done'" style="padding: 10px;">{{dialogResult ? 'Remove' : 'Set'}} dialogResult</button>
5
- </layout>
1
+ <form width="200" height="200" title="From path">
2
+ <layout align-v="center" align-h="center" style="flex: 1; width: 0;">
3
+ <label>Create form path</label>
4
+ </layout>
6
5
  </form>
@@ -11,6 +11,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const clickgo = require("clickgo");
13
13
  class default_1 extends clickgo.form.AbstractForm {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.hash = 'test';
17
+ }
14
18
  get config() {
15
19
  return JSON.stringify(clickgo.core.config, null, 4).replace(/"icon": "([\s\S]+?)"/g, '"icon": "data:image/..."');
16
20
  }
@@ -24,5 +28,13 @@ class default_1 extends clickgo.form.AbstractForm {
24
28
  yield clickgo.form.dialog(JSON.stringify(clickgo.core.getAvailArea()));
25
29
  });
26
30
  }
31
+ hashe() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ if (clickgo.core.hash(this.hash)) {
34
+ return;
35
+ }
36
+ yield clickgo.form.dialog('No permission.');
37
+ });
38
+ }
27
39
  }
28
40
  exports.default = default_1;
@@ -4,5 +4,9 @@
4
4
  <text v-model="config" readonly multi style="flex: 1;"></text>
5
5
  <button @click="getCdn" style="height: 30px;">getCdn()</button>
6
6
  <button @click="getAvailArea" style="height: 30px;">getAvailArea()</button>
7
+ <layout gutter="10" align-v="center">
8
+ <text v-model="hash" style="flex: 1;" />
9
+ <button @click="hashe" style="height: 30px; padding: 0 10px;">hash('{{hash}}')</button>
10
+ </layout>
7
11
  </layout>
8
12
  </form>
@@ -91,7 +91,9 @@ class default_1 extends clickgo.form.AbstractForm {
91
91
  clickgo.form.dialog(r ? JSON.stringify(r) : 'null').catch((e) => { throw e; });
92
92
  }
93
93
  getList() {
94
- clickgo.form.dialog(JSON.stringify(clickgo.task.getList())).catch((e) => { throw e; });
94
+ let msg = JSON.stringify(clickgo.task.getList());
95
+ msg = msg.replace(/(data:image\/).+?"/g, '$1..."');
96
+ clickgo.form.dialog(msg).catch((e) => { throw e; });
95
97
  }
96
98
  run() {
97
99
  return __awaiter(this, void 0, void 0, function* () {
@@ -99,6 +101,12 @@ class default_1 extends clickgo.form.AbstractForm {
99
101
  yield clickgo.form.dialog('Task ID: ' + tid.toString());
100
102
  });
101
103
  }
104
+ checkPermission() {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ const rtn = yield clickgo.task.checkPermission('hash', true);
107
+ yield clickgo.form.dialog(rtn[0] ? 'Succeed' : 'Failed');
108
+ });
109
+ }
102
110
  end() {
103
111
  return __awaiter(this, void 0, void 0, function* () {
104
112
  yield clickgo.form.dialog('Result: ' + (clickgo.task.end(parseInt(this.tid)) ? 'true' : 'false'));
@@ -30,6 +30,7 @@
30
30
  </layout>
31
31
  <button @click="getList" style="height: 30px;">getList()</button>
32
32
  <button @click="run" style="height: 30px;">run('/clickgo/app/demo/')</button>
33
+ <button @click="checkPermission" style="height: 30px;">checkPermission('hash')</button>
33
34
  <button @click="end" style="height: 30px;">end('{{tid}}')</button>
34
35
  <label>Now locale: {{locale}}, Global locale: {{globalLocale}}</label>
35
36
  <label>l('File name'): {{l('File name')}}</label>
Binary file
Binary file
Binary file
Binary file
Binary file
package/dist/global.css CHANGED
@@ -1 +1 @@
1
- #cg-wrap{position:fixed;left:0;top:0;--cg:hsl(20, 100%, 65%);--success:hsl(150, 100%, 40%);--success-hover:hsl(150, 100%, 45%);--success-active:hsl(150, 100%, 30%);--success-focus:hsl(150, 100%, 35%);--success-disabled:hsl(150, 0%, 40%);--info:hsl(210, 100%, 50%);--info-hover:hsl(210, 100%, 60%);--info-active:hsl(210, 100%, 40%);--info-focus:hsl(210, 100%, 45%);--info-disabled:hsl(210, 0%, 50%);--warning:hsl(20, 100%, 70%);--warning-hover:hsl(20, 100%, 80%);--warning-active:hsl(20, 100%, 60%);--warning-focus:hsl(20, 100%, 65%);--warning-disabled:hsl(20, 0%, 70%);--danger:hsl(350, 100%, 50%);--danger-hover:hsl(350, 100%, 70%);--danger-active:hsl(350, 100%, 40%);--danger-focus:hsl(350, 100%, 45%);--danger-disabled:hsl(350, 0%, 50%);--system-color:hsl(0, 0%, 95%);--system-background:hsla(0, 0%, 0%, .5);--system-border-color:hsla(0, 0%, 100%, .2);--face:hsl(0, 0%, 95%);--g-color:hsl(0, 0%, 20%);--g-color-hover:hsl(0, 0%, 30%);--g-color-active:hsl(0, 0%, 10%);--g-color-focus:hsl(0, 0%, 15%);--g-color-disabled:hsl(0, 0%, 60%);--g-background:hsl(0, 0%, 95%);--g-background-hover:hsl(0, 0%, 100%);--g-background-active:hsl(0, 0%, 85%);--g-background-kp:hsl(0, 0%, 80%);--g-background-opacity:hsl(0, 0%, 50%, .2);--g-background-focus:hsl(0, 0%, 97.5%);--g-background-disabled:hsl(0, 0%, 75%);--g-border-color:hsl(0, 0%, 40%);--g-border-color-hover:hsl(0, 0%, 50%);--g-border-color-active:hsl(0, 0%, 30%);--g-border-color-focus:hsl(0, 0%, 35%);--g-border-color-disabled:hsl(0, 0%, 60%);--g-plain-color:var(--g-color);--g-plain-color-hover:var(--g-color-hover);--g-plain-color-active:var(--g-color-active);--g-plain-color-focus:var(--g-color-focus);--g-plain-color-disabled:var(--g-color-disabled);--g-plain-background:hsl(0, 0%, 100%);--g-plain-background-hover:hsl(0, 0%, 98%);--g-plain-background-active:hsl(0, 0%, 95%);--g-plain-background-focus:var(--g-plain-background);--g-plain-background-disabled:hsl(0, 0%, 95%);--g-plain-border-color:hsl(0, 0%, 70%);--g-plain-border-color-hover:hsl(0, 0%, 80%);--g-plain-border-color-active:hsl(0, 0%, 60%);--g-plain-border-color-focus:hsl(0, 0%, 65%);--g-plain-border-color-disabled:hsl(0, 0%, 60%)}#cg-form-list{z-index:20020000}#cg-pop-list{z-index:20020001}#cg-simpletask{z-index:20020002}#cg-rectangle{z-index:20020003;box-sizing:border-box;position:absolute;border-radius:3px;box-shadow:0 0 10px rgba(0,0,0,.25);background:rgba(255,255,255,.05);pointer-events:none;opacity:0}#cg-circular{z-index:20020003;box-sizing:border-box;position:absolute;border:solid 3px var(--cg);border-radius:50%;filter:drop-shadow(0 0 3px var(--cg));pointer-events:none;opacity:0}#cg-gesture{z-index:20020003;box-sizing:border-box;position:absolute;border-radius:50%;pointer-events:none;opacity:0;background:var(--system-background);box-shadow:0 5px 20px rgba(0,0,0,.25);transform:scale(0);width:20px;height:20px}#cg-gesture.done{background:rgba(255,255,255,.3);border:solid 3px rgba(0,0,0,.3)}#cg-gesture.ani{transition:all .1s ease-out;transition-property:left,top,transform}#cg-drag{z-index:20020003;box-sizing:border-box;position:absolute;border-radius:3px;pointer-events:none;background:var(--system-background);box-shadow:0 5px 20px rgba(0,0,0,.25);opacity:0;display:flex;justify-content:center;align-items:center}#cg-launcher{z-index:20020004;box-sizing:border-box;position:fixed;background:var(--system-background);-webkit-backdrop-filter:blur(30px) brightness(1.2);backdrop-filter:blur(30px) brightness(1.2);width:100%;height:100%;left:0;top:0;color:var(--system-color);display:none;flex-direction:column;transition:all .1s linear;transform:scale(1.2);opacity:0}#cg-launcher:not(.cg-show){pointer-events:none}#cg-launcher.cg-show{transform:scale(1);opacity:1}.cg-launcher-search{text-align:center;padding:50px}.cg-launcher-sinput{-webkit-appearance:none;appearance:none;padding:10px;height:38px;border:solid 1px var(--system-border-color);background:rgba(0,0,0,0);width:50%;border-radius:3px;color:var(--system-color)}.cg-launcher-sinput::placeholder{color:var(--system-border-color)}.cg-launcher-sinput::selection{background-color:var(--system-color);color:var(--g-color)}.cg-launcher-sinput:focus{outline:none;border-color:var(--system-color)}.cg-launcher-foldername{-webkit-appearance:none;appearance:none;height:38px;font-size:28px !important;border:none;background:rgba(0,0,0,0);width:50%;color:var(--system-color);text-align:center}.cg-launcher-foldername::selection{background-color:var(--system-color);color:var(--g-color)}.cg-launcher-foldername:focus{outline:none}.cg-launcher-item{width:190px;display:inline-flex;vertical-align:middle;margin-bottom:50px}.cg-launcher-inner{flex:1;width:0}.cg-launcher-icon{background-position:center;background-size:80px;height:80px;background-repeat:no-repeat}.cg-launcher-icon:active{filter:brightness(0.6)}.cg-launcher-name{font-size:13px;font-weight:bold;text-shadow:0 0 3px rgba(0,0,0,.6);text-align:center;margin-top:20px}.cg-launcher-icon,.cg-launcher-name{transition:all .1s linear;transition-property:opacity}.cg-launcher-space{width:50px}.cg-launcher-folder{display:flex;justify-content:center;height:80px}.cg-launcher-folder>div{height:80px;width:80px;background:rgba(255,255,255,.3);border-radius:20px;padding:10px 4px 4px 10px;transition:all .1s linear;transition-property:left,top,width,height,opacity;overflow-y:auto}.cg-launcher-folder>div::-webkit-scrollbar{display:none}.cg-launcher-folder>div .cg-launcher-item,.cg-launcher-folder>div .cg-launcher-space{transition:all .1s linear}.cg-launcher-folder>div.cg-show{padding:50px 0 0 50px}.cg-launcher-folder>div:not(.cg-show):active{filter:brightness(0.6)}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-item{width:22px;margin-bottom:6px}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-icon{background-size:16px;height:16px;pointer-events:none}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-name{display:none}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-space{width:6px}.cg-launcher-list{flex:1;height:0;overflow-y:auto;padding:0 0 0 50px}.cg-launcher-list::-webkit-scrollbar{display:none}.cg-launcher-list.cg-folder-open>.cg-launcher-item>.cg-launcher-inner>.cg-launcher-icon,.cg-launcher-list.cg-folder-open>.cg-launcher-item>.cg-launcher-inner>.cg-launcher-name{opacity:0}.cg-launcher-list.cg-folder-open>.cg-launcher-item>.cg-launcher-inner>.cg-launcher-folder>div:not(.cg-show){opacity:0}[data-cg-pop]{position:absolute;box-shadow:0px 5px 20px rgba(0,0,0,.25);transition:.1s ease-out;transition-property:transform,opacity;transform:translateY(-10px);opacity:0}[data-cg-pop]:not([data-cg-open]){pointer-events:none}[data-cg-pop][data-cg-open]{transform:translateY(0px);opacity:1}#cg-system{z-index:20020005}.cg-system-notify{background:var(--system-background);position:fixed;padding:15px;border-radius:3px;right:0;top:0;width:280px;font-size:14px;display:flex;transition:.1s ease-out;transition-property:transform,opacity;overflow:hidden;color:var(--system-color);box-shadow:0 5px 20px rgba(0,0,0,.25);-webkit-backdrop-filter:blur(30px) brightness(1.2);backdrop-filter:blur(30px) brightness(1.2)}.cg-system-icon{margin-right:10px;width:16px;height:16px;border-radius:50%}.cg-system-icon.cg-primary{background:var(--success)}.cg-system-icon.cg-info{background:var(--info)}.cg-system-icon.cg-warning{background:var(--warning)}.cg-system-icon.cg-danger{background:var(--danger)}.cg-system-icon.cg-progress{background:var(--cg)}.cg-system-notify-title{font-size:16px;font-weight:bold;padding-bottom:10px}.cg-system-notify-content{line-height:1.5;word-break:break-word}.cg-system-notify-progress{position:absolute;bottom:0;left:0;border-radius:1px;background:var(--cg);transition:width 1s ease-out;width:0%;height:2px}#cg-simpletask{left:0;bottom:-46px;width:100%;height:46px;top:initial;background:var(--system-background);-webkit-backdrop-filter:blur(30px) brightness(1.2);backdrop-filter:blur(30px) brightness(1.2);padding:5px 0 5px 5px;display:flex;color:var(--system-color);transition:bottom .1s ease-out;overflow-x:auto;position:fixed}#cg-simpletask::-webkit-scrollbar{display:none}.cg-simpletask-item{background:rgba(0,0,0,.05);border-radius:3px;padding:10px;display:flex;align-items:center;margin-right:5px}.cg-simpletask-item:hover{background:rgba(0,0,0,.1)}.cg-simpletask-item:active{background:rgba(0,0,0,.2)}.cg-simpletask-icon{margin-right:5px;background-size:cover;width:16px;height:16px}
1
+ #cg-wrap{position:fixed;left:0;top:0;--cg:hsl(20, 100%, 65%);--success:hsl(150, 100%, 40%);--success-hover:hsl(150, 100%, 45%);--success-active:hsl(150, 100%, 30%);--success-focus:hsl(150, 100%, 35%);--success-disabled:hsl(150, 0%, 40%);--info:hsl(210, 100%, 50%);--info-hover:hsl(210, 100%, 60%);--info-active:hsl(210, 100%, 40%);--info-focus:hsl(210, 100%, 45%);--info-disabled:hsl(210, 0%, 50%);--warning:hsl(20, 100%, 70%);--warning-hover:hsl(20, 100%, 80%);--warning-active:hsl(20, 100%, 60%);--warning-focus:hsl(20, 100%, 65%);--warning-disabled:hsl(20, 0%, 70%);--danger:hsl(350, 100%, 50%);--danger-hover:hsl(350, 100%, 70%);--danger-active:hsl(350, 100%, 40%);--danger-focus:hsl(350, 100%, 45%);--danger-disabled:hsl(350, 0%, 50%);--system-color:hsl(0, 0%, 95%);--system-background:hsla(0, 0%, 0%, .5);--system-background-hover:hsla(0, 0%, 100%, .05);--system-background-active:hsla(0, 0%, 0%, .2);--system-border-color:hsla(0, 0%, 100%, .2);--face:hsl(0, 0%, 95%);--g-color:hsl(0, 0%, 20%);--g-color-hover:hsl(0, 0%, 30%);--g-color-active:hsl(0, 0%, 10%);--g-color-focus:hsl(0, 0%, 15%);--g-color-disabled:hsl(0, 0%, 60%);--g-background:hsl(0, 0%, 95%);--g-background-hover:hsl(0, 0%, 100%);--g-background-active:hsl(0, 0%, 85%);--g-background-kp:hsl(0, 0%, 80%);--g-background-opacity:hsl(0, 0%, 50%, .2);--g-background-focus:hsl(0, 0%, 97.5%);--g-background-disabled:hsl(0, 0%, 75%);--g-border-color:hsl(0, 0%, 40%);--g-border-color-hover:hsl(0, 0%, 50%);--g-border-color-active:hsl(0, 0%, 30%);--g-border-color-focus:hsl(0, 0%, 35%);--g-border-color-disabled:hsl(0, 0%, 60%);--g-plain-color:var(--g-color);--g-plain-color-hover:var(--g-color-hover);--g-plain-color-active:var(--g-color-active);--g-plain-color-focus:var(--g-color-focus);--g-plain-color-disabled:var(--g-color-disabled);--g-plain-background:hsl(0, 0%, 100%);--g-plain-background-hover:hsl(0, 0%, 98%);--g-plain-background-active:hsl(0, 0%, 95%);--g-plain-background-focus:var(--g-plain-background);--g-plain-background-disabled:hsl(0, 0%, 95%);--g-plain-border-color:hsl(0, 0%, 70%);--g-plain-border-color-hover:hsl(0, 0%, 80%);--g-plain-border-color-active:hsl(0, 0%, 60%);--g-plain-border-color-focus:hsl(0, 0%, 65%);--g-plain-border-color-disabled:hsl(0, 0%, 60%)}#cg-form-list{z-index:20020000}#cg-pop-list{z-index:20020001}#cg-simpletask{z-index:20020002}#cg-rectangle{z-index:20020003;box-sizing:border-box;position:absolute;border-radius:3px;box-shadow:0 0 10px rgba(0,0,0,.25);background:rgba(255,255,255,.05);pointer-events:none;opacity:0}#cg-circular{z-index:20020003;box-sizing:border-box;position:absolute;border:solid 3px var(--cg);border-radius:50%;filter:drop-shadow(0 0 3px var(--cg));pointer-events:none;opacity:0}#cg-gesture{z-index:20020003;box-sizing:border-box;position:absolute;border-radius:50%;pointer-events:none;opacity:0;background:var(--system-background);box-shadow:0 5px 20px rgba(0,0,0,.25);transform:scale(0);width:20px;height:20px}#cg-gesture.done{background:rgba(255,255,255,.3);border:solid 3px rgba(0,0,0,.3)}#cg-gesture.ani{transition:all .1s ease-out;transition-property:left,top,transform}#cg-drag{z-index:20020003;box-sizing:border-box;position:absolute;border-radius:3px;pointer-events:none;background:var(--system-background);box-shadow:0 5px 20px rgba(0,0,0,.25);opacity:0;display:flex;justify-content:center;align-items:center}#cg-launcher{z-index:20020004;box-sizing:border-box;position:fixed;background:var(--system-background);-webkit-backdrop-filter:blur(30px) brightness(1.2);backdrop-filter:blur(30px) brightness(1.2);width:100%;height:100%;left:0;top:0;color:var(--system-color);display:none;flex-direction:column;transition:all .1s linear;transform:scale(1.2);opacity:0}#cg-launcher:not(.cg-show){pointer-events:none}#cg-launcher.cg-show{transform:scale(1);opacity:1}.cg-launcher-search{text-align:center;padding:50px}.cg-launcher-sinput{-webkit-appearance:none;appearance:none;padding:10px;height:38px;border:solid 1px var(--system-border-color);background:rgba(0,0,0,0);width:50%;border-radius:3px;color:var(--system-color)}.cg-launcher-sinput::placeholder{color:var(--system-border-color)}.cg-launcher-sinput::selection{background-color:var(--system-color);color:var(--g-color)}.cg-launcher-sinput:focus{outline:none;border-color:var(--system-color)}.cg-launcher-foldername{-webkit-appearance:none;appearance:none;height:38px;font-size:28px !important;border:none;background:rgba(0,0,0,0);width:50%;color:var(--system-color);text-align:center}.cg-launcher-foldername::selection{background-color:var(--system-color);color:var(--g-color)}.cg-launcher-foldername:focus{outline:none}.cg-launcher-item{width:190px;display:inline-flex;vertical-align:middle;margin-bottom:50px}.cg-launcher-inner{flex:1;width:0}.cg-launcher-icon{background-position:center;background-size:80px;height:80px;background-repeat:no-repeat}.cg-launcher-icon:active{filter:brightness(0.6)}.cg-launcher-name{font-size:13px;font-weight:bold;text-shadow:0 0 3px rgba(0,0,0,.6);text-align:center;margin-top:20px}.cg-launcher-icon,.cg-launcher-name{transition:all .1s linear;transition-property:opacity}.cg-launcher-space{width:50px}.cg-launcher-folder{display:flex;justify-content:center;height:80px}.cg-launcher-folder>div{height:80px;width:80px;background:rgba(255,255,255,.3);border-radius:20px;padding:10px 4px 4px 10px;transition:all .1s linear;transition-property:left,top,width,height,opacity;overflow-y:auto}.cg-launcher-folder>div::-webkit-scrollbar{display:none}.cg-launcher-folder>div .cg-launcher-item,.cg-launcher-folder>div .cg-launcher-space{transition:all .1s linear}.cg-launcher-folder>div.cg-show{padding:50px 0 0 50px}.cg-launcher-folder>div:not(.cg-show):active{filter:brightness(0.6)}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-item{width:22px;margin-bottom:6px}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-icon{background-size:16px;height:16px;pointer-events:none}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-name{display:none}.cg-launcher-folder>div:not(.cg-show) .cg-launcher-space{width:6px}.cg-launcher-list{flex:1;height:0;overflow-y:auto;padding:0 0 0 50px}.cg-launcher-list::-webkit-scrollbar{display:none}.cg-launcher-list.cg-folder-open>.cg-launcher-item>.cg-launcher-inner>.cg-launcher-icon,.cg-launcher-list.cg-folder-open>.cg-launcher-item>.cg-launcher-inner>.cg-launcher-name{opacity:0}.cg-launcher-list.cg-folder-open>.cg-launcher-item>.cg-launcher-inner>.cg-launcher-folder>div:not(.cg-show){opacity:0}[data-cg-pop]{position:absolute;box-shadow:0px 5px 20px rgba(0,0,0,.25);transition:.1s ease-out;transition-property:transform,opacity;transform:translateY(-10px);opacity:0}[data-cg-pop]:not([data-cg-open]){pointer-events:none}[data-cg-pop][data-cg-open]{transform:translateY(0px);opacity:1}#cg-notify{z-index:20020005}.cg-notify-wrap{background:var(--system-background);position:fixed;padding:15px;border-radius:3px;right:0;top:0;width:280px;font-size:14px;display:flex;transition:.1s ease-out;transition-property:transform,opacity;overflow:hidden;color:var(--system-color);box-shadow:0 5px 20px rgba(0,0,0,.25);-webkit-backdrop-filter:blur(30px) brightness(1.2);backdrop-filter:blur(30px) brightness(1.2)}.cg-notify-icon{margin-right:10px;width:16px;height:16px;border-radius:50%}.cg-notify-icon.cg-primary{background:var(--success)}.cg-notify-icon.cg-info{background:var(--info)}.cg-notify-icon.cg-warning{background:var(--warning)}.cg-notify-icon.cg-danger{background:var(--danger)}.cg-notify-icon.cg-progress{background:var(--cg)}.cg-notify-title{font-size:16px;font-weight:bold;padding-bottom:10px}.cg-notify-content{line-height:1.5;word-break:break-word}.cg-notify-progress{position:absolute;bottom:0;left:0;border-radius:1px;background:var(--cg);transition:width 1s ease-out;width:0%;height:2px}#cg-simpletask{left:0;bottom:-46px;width:100%;height:46px;top:initial;background:var(--system-background);-webkit-backdrop-filter:blur(30px) brightness(1.2);backdrop-filter:blur(30px) brightness(1.2);padding:5px 0 5px 5px;display:flex;color:var(--system-color);transition:bottom .1s ease-out;overflow-x:auto;position:fixed}#cg-simpletask::-webkit-scrollbar{display:none}.cg-simpletask-item{background:rgba(0,0,0,.05);border-radius:3px;padding:10px;display:flex;align-items:center;margin-right:5px}.cg-simpletask-item:hover{background:rgba(0,0,0,.1)}.cg-simpletask-item:active{background:rgba(0,0,0,.2)}.cg-simpletask-icon{margin-right:5px;background-size:cover;width:16px;height:16px}#cg-confirm{z-index:20020006;position:fixed;left:0;top:0;width:100%;height:100%;background:var(--system-background);-webkit-backdrop-filter:blur(30px) brightness(1.2);backdrop-filter:blur(30px) brightness(1.2);justify-content:center;align-items:center}#cg-confirm .cg-confirm-box{background:var(--system-background);width:60%;box-shadow:0 5px 20px rgba(0,0,0,.25);font-size:14px;border-radius:3px;overflow:hidden;color:var(--system-color)}#cg-confirm .cg-confirm-box #cg-confirm-content{padding:25px}#cg-confirm .cg-confirm-box .cg-confirm-controls{border-top:solid .5px var(--system-border-color);display:flex}#cg-confirm .cg-confirm-box .cg-confirm-controls>div{padding:20px;flex:1;text-align:center}#cg-confirm .cg-confirm-box .cg-confirm-controls>div:last-child{border-left:solid .5px var(--system-border-color)}#cg-confirm .cg-confirm-box .cg-confirm-controls>div:hover{background:var(--system-background-hover)}#cg-confirm .cg-confirm-box .cg-confirm-controls>div:active{background:var(--system-background-active)}
package/dist/index.js CHANGED
@@ -79,6 +79,9 @@ class AbstractBoot {
79
79
  onLauncherFolderNameChanged() {
80
80
  return;
81
81
  }
82
+ onHashChanged() {
83
+ return;
84
+ }
82
85
  onRuntimeFileLoad() {
83
86
  return;
84
87
  }
package/dist/index.ts CHANGED
@@ -137,6 +137,12 @@ export abstract class AbstractBoot {
137
137
  return;
138
138
  }
139
139
 
140
+ /** --- location hash 改变事件 --- */
141
+ public onHashChanged(hash: string): void | Promise<void>;
142
+ public onHashChanged(): void {
143
+ return;
144
+ }
145
+
140
146
  /** --- 环境文件准备加载时的事件 --- */
141
147
  public onRuntimeFileLoad(url: string): void | Promise<void>;
142
148
  public onRuntimeFileLoad(): void {
package/dist/lib/core.js CHANGED
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.getAvailArea = exports.fetchApp = exports.readApp = exports.trigger = exports.getModule = exports.regModule = exports.boot = exports.getCdn = exports.AbstractApp = exports.config = void 0;
12
+ exports.hash = exports.getAvailArea = exports.fetchApp = exports.readApp = exports.trigger = exports.getModule = exports.regModule = exports.boot = exports.getCdn = exports.AbstractApp = exports.config = void 0;
13
13
  const clickgo = require("../clickgo");
14
14
  const fs = require("./fs");
15
15
  const form = require("./form");
@@ -106,6 +106,9 @@ class AbstractApp {
106
106
  onLauncherFolderNameChanged() {
107
107
  return;
108
108
  }
109
+ onHashChanged() {
110
+ return;
111
+ }
109
112
  }
110
113
  exports.AbstractApp = AbstractApp;
111
114
  function getCdn() {
@@ -282,7 +285,7 @@ const globalEvents = {
282
285
  }
283
286
  };
284
287
  function trigger(name, taskId = 0, formId = 0, param1 = '', param2 = '') {
285
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12;
288
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;
286
289
  const eventName = 'on' + name[0].toUpperCase() + name.slice(1);
287
290
  switch (name) {
288
291
  case 'error': {
@@ -396,7 +399,7 @@ function trigger(name, taskId = 0, formId = 0, param1 = '', param2 = '') {
396
399
  if (typeof formId !== 'string') {
397
400
  break;
398
401
  }
399
- if (typeof taskId === 'number') {
402
+ if (typeof taskId !== 'string') {
400
403
  taskId = taskId.toString();
401
404
  }
402
405
  exports.boot[eventName](taskId, formId);
@@ -409,6 +412,20 @@ function trigger(name, taskId = 0, formId = 0, param1 = '', param2 = '') {
409
412
  }
410
413
  break;
411
414
  }
415
+ case 'hashChanged': {
416
+ if (typeof taskId !== 'string') {
417
+ break;
418
+ }
419
+ exports.boot[eventName](taskId);
420
+ for (const tid in task.list) {
421
+ const t = task.list[tid];
422
+ (_13 = t.class) === null || _13 === void 0 ? void 0 : _13[eventName](taskId);
423
+ for (const fid in t.forms) {
424
+ (_15 = (_14 = t.forms[fid].vroot)[eventName]) === null || _15 === void 0 ? void 0 : _15.call(_14, taskId);
425
+ }
426
+ }
427
+ break;
428
+ }
412
429
  }
413
430
  }
414
431
  exports.trigger = trigger;
@@ -525,6 +542,9 @@ function fetchApp(url, opt = {}) {
525
542
  }
526
543
  const total = config.files.length;
527
544
  let loaded = 0;
545
+ if (opt.progress) {
546
+ opt.progress(loaded + 1, total + 1);
547
+ }
528
548
  for (const file of config.files) {
529
549
  fs.getContent(url + file.slice(1), {
530
550
  'current': current
@@ -549,6 +569,9 @@ function fetchApp(url, opt = {}) {
549
569
  if (opt.notifyId) {
550
570
  form.notifyProgress(opt.notifyId, loaded / total);
551
571
  }
572
+ if (opt.progress) {
573
+ opt.progress(loaded + 1, total + 1);
574
+ }
552
575
  if (loaded < total) {
553
576
  return;
554
577
  }
@@ -559,6 +582,9 @@ function fetchApp(url, opt = {}) {
559
582
  if (opt.notifyId) {
560
583
  form.notifyProgress(opt.notifyId, loaded / total);
561
584
  }
585
+ if (opt.progress) {
586
+ opt.progress(loaded + 1, total + 1);
587
+ }
562
588
  if (loaded < total) {
563
589
  return;
564
590
  }
@@ -567,13 +593,23 @@ function fetchApp(url, opt = {}) {
567
593
  }
568
594
  });
569
595
  }
570
- catch (_b) {
596
+ catch (e) {
597
+ console.log('core.fetchApp', e);
598
+ trigger('error', 0, 0, e, e.message);
571
599
  return null;
572
600
  }
573
- let icon = '/clickgo/icon.png';
601
+ let icon = '';
574
602
  if (config.icon && (files[config.icon] instanceof Blob)) {
575
603
  icon = yield tool.blob2DataUrl(files[config.icon]);
576
604
  }
605
+ if (icon === '') {
606
+ const iconBlob = yield fs.getContent('/clickgo/icon.png', {
607
+ 'current': current
608
+ });
609
+ if (iconBlob instanceof Blob) {
610
+ icon = yield tool.blob2DataUrl(iconBlob);
611
+ }
612
+ }
577
613
  return {
578
614
  'type': 'app',
579
615
  'config': config,
@@ -635,3 +671,21 @@ function getAvailArea() {
635
671
  }
636
672
  }
637
673
  exports.getAvailArea = getAvailArea;
674
+ function hash(hash, taskId) {
675
+ if (!taskId) {
676
+ return false;
677
+ }
678
+ const t = task.list[taskId];
679
+ if (!t) {
680
+ return false;
681
+ }
682
+ if (!t.runtime.permissions.includes('root') && !t.runtime.permissions.includes('hash')) {
683
+ return false;
684
+ }
685
+ window.location.hash = hash;
686
+ return true;
687
+ }
688
+ exports.hash = hash;
689
+ window.addEventListener('hashchange', function () {
690
+ trigger('hashChanged', window.location.hash ? window.location.hash.slice(1) : '');
691
+ });
package/dist/lib/core.ts CHANGED
@@ -179,6 +179,12 @@ export abstract class AbstractApp {
179
179
  return;
180
180
  }
181
181
 
182
+ /** --- location hash 改变事件 --- */
183
+ public onHashChanged(hash: string): void | Promise<void>;
184
+ public onHashChanged(): void {
185
+ return;
186
+ }
187
+
182
188
  }
183
189
 
184
190
  /** --- CDN 地址 --- */
@@ -498,7 +504,7 @@ export function trigger(name: types.TGlobalEvent, taskId: number | string | bool
498
504
  if (typeof formId !== 'string') {
499
505
  break;
500
506
  }
501
- if (typeof taskId === 'number') {
507
+ if (typeof taskId !== 'string') {
502
508
  taskId = taskId.toString();
503
509
  }
504
510
  (boot as any)[eventName](taskId, formId);
@@ -511,6 +517,20 @@ export function trigger(name: types.TGlobalEvent, taskId: number | string | bool
511
517
  }
512
518
  break;
513
519
  }
520
+ case 'hashChanged': {
521
+ if (typeof taskId !== 'string') {
522
+ break;
523
+ }
524
+ (boot as any)[eventName](taskId);
525
+ for (const tid in task.list) {
526
+ const t = task.list[tid];
527
+ (t.class as any)?.[eventName](taskId);
528
+ for (const fid in t.forms) {
529
+ t.forms[fid].vroot[eventName]?.(taskId);
530
+ }
531
+ }
532
+ break;
533
+ }
514
534
  }
515
535
  }
516
536
 
@@ -645,6 +665,9 @@ export async function fetchApp(
645
665
  }
646
666
  const total = config.files.length;
647
667
  let loaded = 0;
668
+ if (opt.progress) {
669
+ opt.progress(loaded + 1, total + 1) as unknown;
670
+ }
648
671
  for (const file of config.files) {
649
672
  fs.getContent(url + file.slice(1), {
650
673
  'current': current
@@ -668,6 +691,9 @@ export async function fetchApp(
668
691
  if (opt.notifyId) {
669
692
  form.notifyProgress(opt.notifyId, loaded / total);
670
693
  }
694
+ if (opt.progress) {
695
+ opt.progress(loaded + 1, total + 1) as unknown;
696
+ }
671
697
  if (loaded < total) {
672
698
  return;
673
699
  }
@@ -677,6 +703,9 @@ export async function fetchApp(
677
703
  if (opt.notifyId) {
678
704
  form.notifyProgress(opt.notifyId, loaded / total);
679
705
  }
706
+ if (opt.progress) {
707
+ opt.progress(loaded + 1, total + 1) as unknown;
708
+ }
680
709
  if (loaded < total) {
681
710
  return;
682
711
  }
@@ -685,14 +714,24 @@ export async function fetchApp(
685
714
  }
686
715
  });
687
716
  }
688
- catch {
717
+ catch (e: any) {
718
+ console.log('core.fetchApp', e);
719
+ trigger('error', 0, 0, e, e.message);
689
720
  return null;
690
721
  }
691
722
 
692
- let icon = '/clickgo/icon.png';
723
+ let icon = '';
693
724
  if (config.icon && (files[config.icon] instanceof Blob)) {
694
725
  icon = await tool.blob2DataUrl(files[config.icon] as Blob);
695
726
  }
727
+ if (icon === '') {
728
+ const iconBlob = await fs.getContent('/clickgo/icon.png', {
729
+ 'current': current
730
+ });
731
+ if (iconBlob instanceof Blob) {
732
+ icon = await tool.blob2DataUrl(iconBlob);
733
+ }
734
+ }
696
735
 
697
736
  return {
698
737
  'type': 'app',
@@ -756,3 +795,27 @@ export function getAvailArea(): types.IAvailArea {
756
795
  };
757
796
  }
758
797
  }
798
+
799
+ /**
800
+ * --- 修改浏览器 hash ---
801
+ * @param hash 修改的值,不含 #
802
+ * @param taskId 基任务,App 模式下无效
803
+ */
804
+ export function hash(hash: string, taskId?: number): boolean {
805
+ if (!taskId) {
806
+ return false;
807
+ }
808
+ const t = task.list[taskId];
809
+ if (!t) {
810
+ return false;
811
+ }
812
+ if (!t.runtime.permissions.includes('root') && !t.runtime.permissions.includes('hash')) {
813
+ return false;
814
+ }
815
+ window.location.hash = hash;
816
+ return true;
817
+ }
818
+
819
+ window.addEventListener('hashchange', function() {
820
+ trigger('hashChanged', window.location.hash ? window.location.hash.slice(1) : '');
821
+ });
package/dist/lib/dom.js CHANGED
@@ -14,7 +14,7 @@ const clickgo = require("../clickgo");
14
14
  const form = require("./form");
15
15
  const core = require("./core");
16
16
  const tool = require("./tool");
17
- const topClass = ['#cg-form-list', '#cg-pop-list', '#cg-system', '#cg-simpletask', '#cg-launcher'];
17
+ const topClass = ['#cg-form-list', '#cg-pop-list', '#cg-notify', '#cg-simpletask', '#cg-launcher'];
18
18
  function classUnfold(after, out = []) {
19
19
  const arr = [];
20
20
  for (const name of topClass) {
@@ -784,7 +784,7 @@ function bindGesture(oe, before, handler) {
784
784
  if (offset < 90) {
785
785
  return;
786
786
  }
787
- handler(dir);
787
+ handler === null || handler === void 0 ? void 0 : handler(dir);
788
788
  }
789
789
  });
790
790
  }
@@ -911,7 +911,7 @@ function bindGesture(oe, before, handler) {
911
911
  return;
912
912
  }
913
913
  gestureWheel.done = true;
914
- handler(gestureWheel.dir);
914
+ handler === null || handler === void 0 ? void 0 : handler(gestureWheel.dir);
915
915
  yield tool.sleep(500);
916
916
  form.elements.gesture.style.opacity = '0';
917
917
  form.elements.gesture.classList.remove('ani');
package/dist/lib/dom.ts CHANGED
@@ -20,7 +20,7 @@ import * as core from './core';
20
20
  import * as tool from './tool';
21
21
 
22
22
  /** --- style list 的 div --- */
23
- const topClass: string[] = ['#cg-form-list', '#cg-pop-list', '#cg-system', '#cg-simpletask', '#cg-launcher'];
23
+ const topClass: string[] = ['#cg-form-list', '#cg-pop-list', '#cg-notify', '#cg-simpletask', '#cg-launcher'];
24
24
  function classUnfold(after?: string, out: string[] = []): string {
25
25
  const arr: string[] = [];
26
26
  for (const name of topClass) {
@@ -902,7 +902,7 @@ const gestureWheel = {
902
902
  * @param before before 事件,返回 true 则显示 gesture
903
903
  * @param handler 执行完毕的话才会回调
904
904
  */
905
- export function bindGesture(oe: MouseEvent | TouchEvent | WheelEvent, before: (e: MouseEvent | TouchEvent | WheelEvent, dir: 'top' | 'right' | 'bottom' | 'left') => boolean, handler: (dir: 'top' | 'right' | 'bottom' | 'left') => void | Promise<void>): void {
905
+ export function bindGesture(oe: MouseEvent | TouchEvent | WheelEvent, before: (e: MouseEvent | TouchEvent | WheelEvent, dir: 'top' | 'right' | 'bottom' | 'left') => boolean, handler?: (dir: 'top' | 'right' | 'bottom' | 'left') => void | Promise<void>): void {
906
906
  const el = oe.currentTarget as HTMLElement | null;
907
907
  if (!el) {
908
908
  return;
@@ -1034,7 +1034,7 @@ export function bindGesture(oe: MouseEvent | TouchEvent | WheelEvent, before: (e
1034
1034
  if (offset < 90) {
1035
1035
  return;
1036
1036
  }
1037
- handler(dir) as any;
1037
+ handler?.(dir) as any;
1038
1038
  }
1039
1039
  });
1040
1040
  }
@@ -1182,7 +1182,7 @@ export function bindGesture(oe: MouseEvent | TouchEvent | WheelEvent, before: (e
1182
1182
  return;
1183
1183
  }
1184
1184
  gestureWheel.done = true;
1185
- handler(gestureWheel.dir as any) as any;
1185
+ handler?.(gestureWheel.dir as any) as any;
1186
1186
  await tool.sleep(500);
1187
1187
  form.elements.gesture.style.opacity = '0';
1188
1188
  form.elements.gesture.classList.remove('ani');