nadesiko3 3.4.21 → 3.4.23

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.
Files changed (49) hide show
  1. package/README.md +3 -2
  2. package/batch/command.txt +93 -17
  3. package/batch/command_nakopad.txt +75 -3
  4. package/batch/pickup_command.nako3 +2 -0
  5. package/core/deno/snako.ts +1 -1
  6. package/core/package-lock.json +586 -628
  7. package/core/package.json +1 -1
  8. package/core/src/nako3.mjs +29 -1
  9. package/core/src/nako3.mts +27 -1
  10. package/core/src/nako_core_version.mjs +2 -2
  11. package/core/src/nako_core_version.mts +2 -2
  12. package/core/src/nako_lex_rules.mts +1 -1
  13. package/core/src/nako_parser3.mjs +33 -34
  14. package/core/src/nako_parser3.mts +45 -53
  15. package/core/src/plugin_system.mts +2 -2
  16. package/demo/index.html +3 -6
  17. package/package.json +2 -2
  18. package/release/_hash.txt +24 -24
  19. package/release/_script-tags.txt +14 -14
  20. package/release/command.json +1 -1
  21. package/release/command.json.js +1 -1
  22. package/release/command_cnako3.json +1 -1
  23. package/release/command_list.json +1 -1
  24. package/release/editor.js +1 -1
  25. package/release/editor.js.map +1 -1
  26. package/release/nako_gen_async.js +1 -1
  27. package/release/nako_gen_async.js.map +1 -1
  28. package/release/stats.json +1 -1
  29. package/release/version.js +1 -1
  30. package/release/version.js.map +1 -1
  31. package/release/wnako3.js +1 -1
  32. package/release/wnako3.js.map +1 -1
  33. package/release/wnako3webworker.js +1 -1
  34. package/release/wnako3webworker.js.map +1 -1
  35. package/src/browsers.json +1 -1
  36. package/src/nako_version.mjs +2 -2
  37. package/src/nako_version.mts +2 -2
  38. package/src/plugin_browser.mjs +15 -2
  39. package/src/plugin_browser.mts +15 -2
  40. package/src/plugin_browser_chart.mjs +29 -23
  41. package/src/plugin_browser_chart.mts +29 -23
  42. package/src/plugin_browser_dialog.mjs +3 -2
  43. package/src/plugin_browser_dialog.mts +4 -3
  44. package/src/plugin_browser_dom_parts.mjs +20 -0
  45. package/src/plugin_browser_dom_parts.mts +20 -0
  46. package/test/common/plugin_browser_ut_dialog_test.mjs +2 -2
  47. package/test/node/plugin_node_test.mjs +8 -0
  48. package/test/selenium/requirements.txt +1 -1
  49. package/test/selenium/test_chrome.py +1 -1
package/src/browsers.json CHANGED
@@ -1 +1 @@
1
- {"and_chr":["97"],"and_ff":["96"],"and_qq":["10.4"],"and_uc":["12.12"],"android":["97"],"baidu":["7.12"],"chrome":["98","97","96","93"],"edge":["98","97","96"],"firefox":["96","95","91","78"],"ie":["11"],"ios_saf":["15.2-15.3","15.0-15.1","14.5-14.8","14.0-14.4","12.2-12.5"],"kaios":["2.5"],"node":["17.0.0","16.12.0","14.18.0","12.22.0"],"op_mini":["all"],"op_mob":["64"],"opera":["83","82"],"safari":["15.2-15.3","15.1","14.1"],"samsung":["16.0","15.0"]}
1
+ {"and_chr":["97"],"and_ff":["96"],"and_qq":["10.4"],"and_uc":["12.12"],"android":["97"],"baidu":["7.12"],"chrome":["98","97","96","93"],"edge":["98","97","96"],"firefox":["96","95","91","78"],"ie":["11"],"ios_saf":["15.2-15.3","15.0-15.1","14.5-14.8","14.0-14.4","12.2-12.5"],"kaios":["2.5"],"node":["17.0.0","16.12.0","14.18.0","12.22.0"],"op_mini":["all"],"op_mob":["64"],"opera":["83","82"],"safari":["15.2-15.3","15.1","14.1"],"samsung":["16.0","15.0"]}
@@ -1,8 +1,8 @@
1
1
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
2
2
  const nakoVersion = {
3
- version: '3.4.21',
3
+ version: '3.4.23',
4
4
  major: 3,
5
5
  minor: 4,
6
- patch: 21
6
+ patch: 23
7
7
  };
8
8
  export default nakoVersion;
@@ -11,9 +11,9 @@ export interface NakoVersion {
11
11
  }
12
12
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
13
13
  const nakoVersion: NakoVersion = {
14
- version: '3.4.21',
14
+ version: '3.4.23',
15
15
  major: 3,
16
16
  minor: 4,
17
- patch: 21
17
+ patch: 23
18
18
  }
19
19
  export default nakoVersion
@@ -43,9 +43,9 @@ const PluginBrowser = {
43
43
  type: 'const',
44
44
  value: {
45
45
  pluginName: 'plugin_browser',
46
- pluginVersion: '3.2.24',
46
+ pluginVersion: '3.4.22',
47
47
  nakoRuntime: ['wnako'],
48
- nakoVersion: '^3.2.24' // 要求なでしこバージョン
48
+ nakoVersion: '^3.4.22' // 要求なでしこバージョン
49
49
  }
50
50
  },
51
51
  '初期化': {
@@ -200,6 +200,19 @@ const PluginBrowser = {
200
200
  }
201
201
  return elm;
202
202
  };
203
+ // 動的にJSライブラリを取り込む
204
+ sys.__loadScript = (url) => {
205
+ return new Promise((resolve, reject) => {
206
+ const script = document.createElement('script');
207
+ script.type = 'text/javascript';
208
+ script.src = url;
209
+ script.onload = resolve;
210
+ script.onerror = () => {
211
+ reject(new Error(`Failed to load script at url: ${url}`));
212
+ };
213
+ document.getElementsByTagName('head')[0].appendChild(script);
214
+ });
215
+ };
203
216
  }
204
217
  },
205
218
  '!クリア': {
@@ -45,9 +45,9 @@ const PluginBrowser = {
45
45
  type: 'const',
46
46
  value: {
47
47
  pluginName: 'plugin_browser', // プラグインの名前
48
- pluginVersion: '3.2.24', // プラグインのバージョン
48
+ pluginVersion: '3.4.22', // プラグインのバージョン
49
49
  nakoRuntime: ['wnako'], // 対象ランタイム
50
- nakoVersion: '^3.2.24' // 要求なでしこバージョン
50
+ nakoVersion: '^3.4.22' // 要求なでしこバージョン
51
51
  }
52
52
  },
53
53
  '初期化': {
@@ -190,6 +190,19 @@ const PluginBrowser = {
190
190
  }
191
191
  return elm
192
192
  }
193
+ // 動的にJSライブラリを取り込む
194
+ sys.__loadScript = (url) => {
195
+ return new Promise((resolve, reject) => {
196
+ const script = document.createElement('script')
197
+ script.type = 'text/javascript'
198
+ script.src = url
199
+ script.onload = resolve
200
+ script.onerror = () => {
201
+ reject(new Error(`Failed to load script at url: ${url}`))
202
+ }
203
+ document.getElementsByTagName('head')[0].appendChild(script)
204
+ })
205
+ }
193
206
  }
194
207
  },
195
208
  '!クリア': {
@@ -3,15 +3,21 @@ export default {
3
3
  'グラフ描画': {
4
4
  type: 'func',
5
5
  josi: [['を', 'で', 'の']],
6
- pure: true,
7
- fn: function (data, sys) {
6
+ asyncFn: true,
7
+ fn: async function (data, sys) {
8
8
  // Chart.jsが使えるかチェック
9
9
  const win = sys.__v0.WINDOW;
10
10
  if (typeof win === 'undefined') {
11
11
  throw new Error('『グラフ描画』のエラー。ブラウザで実行してください。');
12
12
  }
13
+ // Chart.jsがないので自動的に取り込む
14
+ if (typeof win.Chart === 'undefined') {
15
+ console.log('try to load chart.js');
16
+ await sys.__loadScript('https://cdn.jsdelivr.net/npm/chart.js@4.4.0');
17
+ console.log('loaded chart.js');
18
+ }
13
19
  if (typeof win.Chart === 'undefined') {
14
- throw new Error('『グラフ描画』のエラー。Chart.jsを取り込んでください。');
20
+ throw new Error('『グラフ描画』のエラー。Chart.jsを取り込みに失敗しました。');
15
21
  }
16
22
  const Chart = win.Chart;
17
23
  // Canvasが有効?
@@ -41,8 +47,8 @@ export default {
41
47
  '線グラフ描画': {
42
48
  type: 'func',
43
49
  josi: [['を', 'で', 'の']],
44
- pure: true,
45
- fn: function (data, sys) {
50
+ asyncFn: true,
51
+ fn: async function (data, sys) {
46
52
  data = sys.__exec('二次元グラフデータ変形', ['line', data, sys]);
47
53
  const d = {
48
54
  type: 'line',
@@ -55,8 +61,8 @@ export default {
55
61
  '棒グラフ描画': {
56
62
  type: 'func',
57
63
  josi: [['を', 'で', 'の']],
58
- pure: true,
59
- fn: function (data, sys) {
64
+ asyncFn: true,
65
+ fn: async function (data, sys) {
60
66
  // グラフオプションの差分作成
61
67
  const gopt = Object.assign({}, sys.__v0['グラフオプション'], { 'indexAxis': 'x' });
62
68
  data = sys.__exec('二次元グラフデータ変形', ['bar', data, sys]);
@@ -72,7 +78,8 @@ export default {
72
78
  type: 'func',
73
79
  josi: [['を', 'で', 'の']],
74
80
  pure: true,
75
- fn: function (data, sys) {
81
+ asyncFn: true,
82
+ fn: async function (data, sys) {
76
83
  // グラフオプションの差分作成
77
84
  const gopt = Object.assign({}, sys.__v0['グラフオプション'], { 'indexAxis': 'y' });
78
85
  data = sys.__exec('二次元グラフデータ変形', ['bar', data, sys]);
@@ -87,8 +94,8 @@ export default {
87
94
  '積上棒グラフ描画': {
88
95
  type: 'func',
89
96
  josi: [['を', 'で', 'の']],
90
- pure: true,
91
- fn: function (data, sys) {
97
+ asyncFn: true,
98
+ fn: async function (data, sys) {
92
99
  // グラフオプションの差分作成
93
100
  const gopt = Object.assign({}, sys.__v0['グラフオプション'], {
94
101
  'indexAxis': 'x',
@@ -109,8 +116,8 @@ export default {
109
116
  '積上横棒グラフ描画': {
110
117
  type: 'func',
111
118
  josi: [['を', 'で', 'の']],
112
- pure: true,
113
- fn: function (data, sys) {
119
+ asyncFn: true,
120
+ fn: async function (data, sys) {
114
121
  // グラフオプションの差分作成
115
122
  const gopt = Object.assign({}, sys.__v0['グラフオプション'], {
116
123
  'indexAxis': 'y',
@@ -131,8 +138,8 @@ export default {
131
138
  '散布図描画': {
132
139
  type: 'func',
133
140
  josi: [['を', 'で', 'の']],
134
- pure: true,
135
- fn: function (data, sys) {
141
+ asyncFn: true,
142
+ fn: async function (data, sys) {
136
143
  // グラフオプションの差分作成
137
144
  const gopt = Object.assign({}, sys.__v0['グラフオプション'], {});
138
145
  data = sys.__exec('二次元グラフデータ変形', ['scatter', data, sys]);
@@ -147,8 +154,8 @@ export default {
147
154
  '円グラフ描画': {
148
155
  type: 'func',
149
156
  josi: [['を', 'で', 'の']],
150
- pure: true,
151
- fn: function (data, sys) {
157
+ asyncFn: true,
158
+ fn: async function (data, sys) {
152
159
  data = sys.__exec('二次元グラフデータ変形', ['pie', data, sys]);
153
160
  const d = {
154
161
  type: 'pie',
@@ -161,8 +168,8 @@ export default {
161
168
  'ドーナツグラフ描画': {
162
169
  type: 'func',
163
170
  josi: [['を', 'で', 'の']],
164
- pure: true,
165
- fn: function (data, sys) {
171
+ asyncFn: true,
172
+ fn: async function (data, sys) {
166
173
  data = sys.__exec('二次元グラフデータ変形', ['pie', data, sys]);
167
174
  const d = {
168
175
  type: 'doughnut',
@@ -175,8 +182,8 @@ export default {
175
182
  'ポーラーグラフ描画': {
176
183
  type: 'func',
177
184
  josi: [['を', 'で', 'の']],
178
- pure: true,
179
- fn: function (data, sys) {
185
+ asyncFn: true,
186
+ fn: async function (data, sys) {
180
187
  data = sys.__exec('二次元グラフデータ変形', ['pie', data, sys]);
181
188
  const d = {
182
189
  type: 'polarArea',
@@ -189,8 +196,8 @@ export default {
189
196
  'レーダーグラフ描画': {
190
197
  type: 'func',
191
198
  josi: [['を', 'で', 'の']],
192
- pure: true,
193
- fn: function (data, sys) {
199
+ asyncFn: true,
200
+ fn: async function (data, sys) {
194
201
  data = sys.__exec('二次元グラフデータ変形', ['bar', data, sys]);
195
202
  const d = {
196
203
  type: 'radar',
@@ -203,7 +210,6 @@ export default {
203
210
  '二次元グラフデータ変形': {
204
211
  type: 'func',
205
212
  josi: [['の'], ['を']],
206
- pure: true,
207
213
  fn: function (t, dataOrg, sys) {
208
214
  // データを破壊的に変更してしまうので最初にデータをコピー (#1416)
209
215
  const data = JSON.parse(JSON.stringify(dataOrg));
@@ -3,15 +3,21 @@ export default {
3
3
  'グラフ描画': { // @ Chart.jsを利用して、DATAのグラフを描画 // @ぐらふびょうが
4
4
  type: 'func',
5
5
  josi: [['を', 'で', 'の']],
6
- pure: true,
7
- fn: function (data: any, sys: any) {
6
+ asyncFn: true,
7
+ fn: async function (data: any, sys: any) {
8
8
  // Chart.jsが使えるかチェック
9
9
  const win: any = sys.__v0.WINDOW
10
10
  if (typeof win === 'undefined') {
11
11
  throw new Error('『グラフ描画』のエラー。ブラウザで実行してください。')
12
12
  }
13
+ // Chart.jsがないので自動的に取り込む
14
+ if (typeof win.Chart === 'undefined') {
15
+ console.log('try to load chart.js')
16
+ await sys.__loadScript('https://cdn.jsdelivr.net/npm/chart.js@4.4.0')
17
+ console.log('loaded chart.js')
18
+ }
13
19
  if (typeof win.Chart === 'undefined') {
14
- throw new Error('『グラフ描画』のエラー。Chart.jsを取り込んでください。')
20
+ throw new Error('『グラフ描画』のエラー。Chart.jsを取り込みに失敗しました。')
15
21
  }
16
22
  const Chart = win.Chart
17
23
  // Canvasが有効?
@@ -35,8 +41,8 @@ export default {
35
41
  '線グラフ描画': { // @ 線グラフを描画 // @せんぐらふびょうが
36
42
  type: 'func',
37
43
  josi: [['を', 'で', 'の']],
38
- pure: true,
39
- fn: function (data: any, sys: any) {
44
+ asyncFn: true,
45
+ fn: async function (data: any, sys: any) {
40
46
  data = sys.__exec('二次元グラフデータ変形', ['line', data, sys])
41
47
  const d = {
42
48
  type: 'line',
@@ -49,8 +55,8 @@ export default {
49
55
  '棒グラフ描画': { // @ 棒グラフを描画 // @ぼうぐらふびょうが
50
56
  type: 'func',
51
57
  josi: [['を', 'で', 'の']],
52
- pure: true,
53
- fn: function (data: any, sys: any) {
58
+ asyncFn: true,
59
+ fn: async function (data: any, sys: any) {
54
60
  // グラフオプションの差分作成
55
61
  const gopt = Object.assign({},
56
62
  sys.__v0['グラフオプション'],
@@ -68,7 +74,8 @@ export default {
68
74
  type: 'func',
69
75
  josi: [['を', 'で', 'の']],
70
76
  pure: true,
71
- fn: function (data: any, sys: any) {
77
+ asyncFn: true,
78
+ fn: async function (data: any, sys: any) {
72
79
  // グラフオプションの差分作成
73
80
  const gopt = Object.assign({},
74
81
  sys.__v0['グラフオプション'],
@@ -85,8 +92,8 @@ export default {
85
92
  '積上棒グラフ描画': { // @ 複数列のデータがある場合積み上げ棒グラフを描画 // @つみあげぼうぐらふびょうが
86
93
  type: 'func',
87
94
  josi: [['を', 'で', 'の']],
88
- pure: true,
89
- fn: function (data: any, sys: any) {
95
+ asyncFn: true,
96
+ fn: async function (data: any, sys: any) {
90
97
  // グラフオプションの差分作成
91
98
  const gopt = Object.assign({},
92
99
  sys.__v0['グラフオプション'],
@@ -109,8 +116,8 @@ export default {
109
116
  '積上横棒グラフ描画': { // @ 複数列のデータがある場合積み上げ棒グラフを描画 // @つみあげよこぼうぐらふびょうが
110
117
  type: 'func',
111
118
  josi: [['を', 'で', 'の']],
112
- pure: true,
113
- fn: function (data: any, sys: any) {
119
+ asyncFn: true,
120
+ fn: async function (data: any, sys: any) {
114
121
  // グラフオプションの差分作成
115
122
  const gopt = Object.assign({},
116
123
  sys.__v0['グラフオプション'],
@@ -133,8 +140,8 @@ export default {
133
140
  '散布図描画': { // @ 散布図を描画 // @さんぷず
134
141
  type: 'func',
135
142
  josi: [['を', 'で', 'の']],
136
- pure: true,
137
- fn: function (data: any, sys: any) {
143
+ asyncFn: true,
144
+ fn: async function (data: any, sys: any) {
138
145
  // グラフオプションの差分作成
139
146
  const gopt = Object.assign({},
140
147
  sys.__v0['グラフオプション'],
@@ -151,8 +158,8 @@ export default {
151
158
  '円グラフ描画': { // @ 円グラフを描画 // @えんぐらふびょうが
152
159
  type: 'func',
153
160
  josi: [['を', 'で', 'の']],
154
- pure: true,
155
- fn: function (data: any, sys: any) {
161
+ asyncFn: true,
162
+ fn: async function (data: any, sys: any) {
156
163
  data = sys.__exec('二次元グラフデータ変形', ['pie', data, sys])
157
164
  const d = {
158
165
  type: 'pie',
@@ -165,8 +172,8 @@ export default {
165
172
  'ドーナツグラフ描画': { // @ 円グラフ(ドーナツ)を描画 // @ドーナツぐらふびょうが
166
173
  type: 'func',
167
174
  josi: [['を', 'で', 'の']],
168
- pure: true,
169
- fn: function (data: any, sys: any) {
175
+ asyncFn: true,
176
+ fn: async function (data: any, sys: any) {
170
177
  data = sys.__exec('二次元グラフデータ変形', ['pie', data, sys])
171
178
  const d = {
172
179
  type: 'doughnut',
@@ -179,8 +186,8 @@ export default {
179
186
  'ポーラーグラフ描画': { // @ 円グラフ(鶏頭グラフ/ポーラーエリアチャート)を描画 // @ぽーらーぐらふびょうが
180
187
  type: 'func',
181
188
  josi: [['を', 'で', 'の']],
182
- pure: true,
183
- fn: function (data: any, sys: any) {
189
+ asyncFn: true,
190
+ fn: async function (data: any, sys: any) {
184
191
  data = sys.__exec('二次元グラフデータ変形', ['pie', data, sys])
185
192
  const d = {
186
193
  type: 'polarArea',
@@ -193,8 +200,8 @@ export default {
193
200
  'レーダーグラフ描画': { // @ レーダーチャートを描画 // @れーだーぐらふびょうが
194
201
  type: 'func',
195
202
  josi: [['を', 'で', 'の']],
196
- pure: true,
197
- fn: function (data: any, sys: any) {
203
+ asyncFn: true,
204
+ fn: async function (data: any, sys: any) {
198
205
  data = sys.__exec('二次元グラフデータ変形', ['bar', data, sys])
199
206
  const d = {
200
207
  type: 'radar',
@@ -207,7 +214,6 @@ export default {
207
214
  '二次元グラフデータ変形': { // @ 二次元配列をXXグラフ描画の形式に整形する。種類TとDATAを指定。 // @にじげんぐらふでーたへんけい
208
215
  type: 'func',
209
216
  josi: [['の'], ['を']],
210
- pure: true,
211
217
  fn: function (t: any, dataOrg: any, sys: any) {
212
218
  // データを破壊的に変更してしまうので最初にデータをコピー (#1416)
213
219
  const data = JSON.parse(JSON.stringify(dataOrg))
@@ -10,6 +10,7 @@ export default {
10
10
  },
11
11
  return_none: true
12
12
  },
13
+ 'ダイアログキャンセル値': { type: 'var', value: '' },
13
14
  '尋': {
14
15
  type: 'func',
15
16
  josi: [['と', 'を']],
@@ -17,7 +18,7 @@ export default {
17
18
  fn: function (s, sys) {
18
19
  const r = window.prompt(s);
19
20
  if (!r) {
20
- return sys.__v0[''];
21
+ return sys.__v0['ダイアログキャンセル値'];
21
22
  }
22
23
  if (/^[-+]?[0-9]+(\.[0-9]+)?$/.test(r)) {
23
24
  return parseFloat(r);
@@ -37,7 +38,7 @@ export default {
37
38
  fn: function (s, sys) {
38
39
  const r = window.prompt(s);
39
40
  if (!r) {
40
- return sys.__v0[''];
41
+ return sys.__v0['ダイアログキャンセル値'];
41
42
  }
42
43
  return r;
43
44
  }
@@ -10,6 +10,7 @@ export default {
10
10
  },
11
11
  return_none: true
12
12
  },
13
+ 'ダイアログキャンセル値': { type: 'var', value: '' }, // @だいあろぐきゃんせるち
13
14
  '尋': { // @メッセージSと入力ボックスを出して尋ねる // @たずねる
14
15
  type: 'func',
15
16
  josi: [['と', 'を']],
@@ -17,7 +18,7 @@ export default {
17
18
  fn: function (s: any, sys: any) {
18
19
  const r = window.prompt(s)
19
20
  if (!r) {
20
- return sys.__v0['']
21
+ return sys.__v0['ダイアログキャンセル値']
21
22
  }
22
23
  if (/^[-+]?[0-9]+(\.[0-9]+)?$/.test(r)) {
23
24
  return parseFloat(r)
@@ -37,12 +38,12 @@ export default {
37
38
  fn: function (s: any, sys: any) {
38
39
  const r = window.prompt(s)
39
40
  if (!r) {
40
- return sys.__v0['']
41
+ return sys.__v0['ダイアログキャンセル値']
41
42
  }
42
43
  return r
43
44
  }
44
45
  },
45
- '二択': { // @メッセージSと[OK][キャンセル]のダイアログを出して尋ねる // @にたく
46
+ '二択': { // @メッセージSと[OK][キャンセル]のダイアログを出して尋ねる。戻り値はtrueかfalseのどちらかになる。 // @にたく
46
47
  type: 'func',
47
48
  josi: [['で', 'の', 'と', 'を']],
48
49
  pure: true,
@@ -424,5 +424,25 @@ export default {
424
424
  }
425
425
  return table;
426
426
  }
427
+ },
428
+ 'マーメイド作成': {
429
+ type: 'func',
430
+ josi: [['の']],
431
+ pure: true,
432
+ asyncFn: true,
433
+ fn: async function (src, sys) {
434
+ console.log('aaa');
435
+ const div = sys.__exec('DOM部品作成', ['div', sys]);
436
+ div.classList.add('mermaid');
437
+ div.innerHTML = src;
438
+ // ライブラリを読み込む
439
+ if (typeof sys.__v0.WINDOW.mermaid === 'undefined') {
440
+ console.log('try to load mermaid');
441
+ await sys.__loadScript('https://cdn.jsdelivr.net/npm/mermaid@10.5.0/dist/mermaid.min.js');
442
+ console.log('loaded mermaid');
443
+ }
444
+ await sys.__v0.WINDOW.mermaid.run();
445
+ return div;
446
+ }
427
447
  }
428
448
  };
@@ -392,5 +392,25 @@ export default {
392
392
  }
393
393
  return table
394
394
  }
395
+ },
396
+ 'マーメイド作成': { // @ Mermaid記法を使ってSRCのチャートを作成する // @ まーめいどさくせい
397
+ type: 'func',
398
+ josi: [['の']],
399
+ pure: true,
400
+ asyncFn: true,
401
+ fn: async function (src: string, sys: any) {
402
+ console.log('aaa')
403
+ const div = sys.__exec('DOM部品作成', ['div', sys])
404
+ div.classList.add('mermaid')
405
+ div.innerHTML = src
406
+ // ライブラリを読み込む
407
+ if (typeof sys.__v0.WINDOW.mermaid === 'undefined') {
408
+ console.log('try to load mermaid')
409
+ await sys.__loadScript('https://cdn.jsdelivr.net/npm/mermaid@10.5.0/dist/mermaid.min.js')
410
+ console.log('loaded mermaid')
411
+ }
412
+ await sys.__v0.WINDOW.mermaid.run()
413
+ return div
414
+ }
395
415
  }
396
416
  }
@@ -48,7 +48,7 @@ describe('plugin_browser_dialog', () => {
48
48
  chkprompt(['あいうえお'], 'あかね', 'あいうえお', 'あかね')
49
49
  })
50
50
  it('尋 - キャンセル', () => {
51
- const sys = { __v0: { 空: '' } }
51
+ const sys = { __v0: { 'ダイアログキャンセル値': '' } }
52
52
  chkprompt(['あいうえお', sys], null, 'あいうえお', '')
53
53
  })
54
54
  })
@@ -77,7 +77,7 @@ describe('plugin_browser_dialog', () => {
77
77
  chkprompt(['あいうえお'], '1.2.3', 'あいうえお', '1.2.3')
78
78
  })
79
79
  it('文字尋 - キャンセル', () => {
80
- const sys = { __v0: { 空: '' } }
80
+ const sys = { __v0: { 'ダイアログキャンセル値': '' } }
81
81
  chkprompt(['あいうえお', sys], null, 'あいうえお', '')
82
82
  })
83
83
  })
@@ -136,8 +136,12 @@ describe('plugin_node_test', () => {
136
136
  await cmp(code, 'OK', 300)
137
137
  })
138
138
  it('圧縮/解凍', async function () {
139
+ // 7zip がない環境ではテストを飛ばす
139
140
  let path7z = get7zPath()
140
141
  if (path7z === '') { return this.skip() }
142
+ // なぜかGitHubでエラーになるので飛ばす
143
+ if (process.platform !== 'darwin') { return this.skip() }
144
+ // テスト
141
145
  let tmp = '/tmp'
142
146
  if (process.platform === 'linux') {
143
147
  tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'nadesiko3zip-test'))
@@ -152,6 +156,8 @@ describe('plugin_node_test', () => {
152
156
  // 7z がない環境ではテストを飛ばす
153
157
  let path7z = get7zPath()
154
158
  if (path7z === '') { return this.skip() }
159
+ // なぜかGitHubでエラーになるので飛ばす
160
+ if (process.platform !== 'darwin') { return this.skip() }
155
161
  // 一時フォルダを作成
156
162
  let tmp = '/tmp'
157
163
  if (process.platform === 'linux') {
@@ -182,6 +188,8 @@ describe('plugin_node_test', () => {
182
188
  // 7z がない環境ではテストを飛ばす
183
189
  let path7z = get7zPath()
184
190
  if (path7z === '') { return this.skip() }
191
+ // なぜかGitHubでエラーになるので飛ばす
192
+ if (process.platform !== 'darwin') { return this.skip() }
185
193
  //
186
194
  let tmp = '/tmp'
187
195
  if (process.platform === 'linux') {
@@ -1,3 +1,3 @@
1
- selenium>=4.5
1
+ selenium>=4.6
2
2
  webdriver-manager>=3.8.4
3
3
  flask
@@ -18,7 +18,7 @@ TEST_TARGET = os.path.join(SCRIPT_DIR, 'test_target')
18
18
 
19
19
  error_log = []
20
20
  # chrome
21
- driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
21
+ driver = webdriver.Chrome()
22
22
 
23
23
  def run_test_all():
24
24
  '''test all'''