ts-glitter 13.6.1 → 13.6.2

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/lowcode/Entry.js CHANGED
@@ -59,7 +59,7 @@ export class Entry {
59
59
  }
60
60
  window.renderClock = (_a = window.renderClock) !== null && _a !== void 0 ? _a : clockF();
61
61
  console.log(`Entry-time:`, window.renderClock.stop());
62
- glitter.share.editerVersion = "V_13.6.1";
62
+ glitter.share.editerVersion = "V_13.6.2";
63
63
  glitter.share.start = (new Date());
64
64
  const vm = {
65
65
  appConfig: [],
package/lowcode/Entry.ts CHANGED
@@ -60,7 +60,7 @@ export class Entry {
60
60
  }
61
61
  (window as any).renderClock = (window as any).renderClock ?? clockF();
62
62
  console.log(`Entry-time:`, (window as any).renderClock.stop());
63
- glitter.share.editerVersion = "V_13.6.1";
63
+ glitter.share.editerVersion = "V_13.6.2";
64
64
  glitter.share.start = (new Date());
65
65
  const vm: {
66
66
  appConfig: any;
@@ -260,57 +260,11 @@ export const widgetComponent = {
260
260
  }
261
261
  })()};height: 100%;"
262
262
  onmousedown="${gvc.event(() => {
263
- glitter.getModule(new URL(gvc.glitter.root_path + 'editor/add-component.js').href, (AddComponent) => {
264
- glitter.share.editorViewModel.selectContainer = widget.data.setting;
265
- AddComponent.toggle(true);
266
- AddComponent.addWidget = (gvc, cf) => {
267
- window.parent.glitter.share.editorViewModel.selectContainer = widget.data.setting;
268
- window.parent.glitter.share.addComponent(cf);
269
- RenderValue.custom_style.value(gvc, widget);
270
- AddComponent.toggle(false);
271
- };
272
- AddComponent.addEvent = (gvc, tdata) => {
273
- window.parent.glitter.share.editorViewModel.selectContainer = widget.data.setting;
274
- window.parent.glitter.share.addComponent({
275
- id: gvc.glitter.getUUID(),
276
- js: './official_view_component/official.js',
277
- css: {
278
- class: {},
279
- style: {},
280
- },
281
- data: {
282
- refer_app: tdata.copyApp,
283
- tag: tdata.copy,
284
- list: [],
285
- carryData: {},
286
- _style_refer_global: {
287
- index: `0`,
288
- },
289
- },
290
- type: 'component',
291
- class: 'w-100',
292
- index: 0,
293
- label: tdata.title,
294
- style: '',
295
- bundle: {},
296
- global: [],
297
- toggle: false,
298
- stylist: [],
299
- dataType: 'static',
300
- style_from: 'code',
301
- classDataType: 'static',
302
- preloadEvenet: {},
303
- share: {},
304
- });
305
- RenderValue.custom_style.value(gvc, widget);
306
- AddComponent.toggle(false);
307
- };
308
- });
309
263
  })}"
310
264
  >
311
265
  <i class="fa-regular fa-circle-plus text-black"
312
- style="font-size: 60px;"></i>
313
- <span class="fw-500 fs-5 mt-3">添加元件</span>
266
+ style="font-size: 50px;"></i>
267
+ <span class="fw-500 fs-6 mt-3">添加元件</span>
314
268
  </div>`);
315
269
  }
316
270
  }
@@ -710,7 +664,7 @@ export const widgetComponent = {
710
664
  type="button"
711
665
  onclick="${gvc.event(() => {
712
666
  vm.type = 'editor';
713
- gvc.notifyDataChange(vm.id);
667
+ gvc.notifyDataChange([vm.id, 'item-editor-select']);
714
668
  })}">
715
669
  <span style="font-size: 14px; color: #393939; font-weight: 400;">更改命名</span>
716
670
  </button>`;
@@ -739,7 +693,7 @@ export const widgetComponent = {
739
693
  onclick="${gvc.event(() => {
740
694
  vm.type = 'preview';
741
695
  widget.label = name;
742
- gvc.notifyDataChange(vm.id);
696
+ gvc.notifyDataChange([vm.id, 'item-editor-select']);
743
697
  })}">
744
698
  <span style="font-size: 14px; color: #393939; font-weight: 400;">確認</span>
745
699
  </button>`;
@@ -261,57 +261,11 @@ export const widgetComponent = {
261
261
  }
262
262
  })()};height: 100%;"
263
263
  onmousedown="${gvc.event(() => {
264
- glitter.getModule(new URL(gvc.glitter.root_path + 'editor/add-component.js').href, (AddComponent: any) => {
265
- glitter.share.editorViewModel.selectContainer = widget.data.setting;
266
- AddComponent.toggle(true);
267
- AddComponent.addWidget = (gvc: GVC, cf: any) => {
268
- (window.parent as any).glitter.share.editorViewModel.selectContainer = widget.data.setting;
269
- (window.parent as any).glitter.share.addComponent(cf);
270
- RenderValue.custom_style.value(gvc, widget)
271
- AddComponent.toggle(false);
272
- };
273
- AddComponent.addEvent = (gvc: GVC, tdata: any) => {
274
- (window.parent as any).glitter.share.editorViewModel.selectContainer = widget.data.setting;
275
- (window.parent as any).glitter.share.addComponent({
276
- id: gvc.glitter.getUUID(),
277
- js: './official_view_component/official.js',
278
- css: {
279
- class: {},
280
- style: {},
281
- },
282
- data: {
283
- refer_app: tdata.copyApp,
284
- tag: tdata.copy,
285
- list: [],
286
- carryData: {},
287
- _style_refer_global: {
288
- index: `0`,
289
- },
290
- },
291
- type: 'component',
292
- class: 'w-100',
293
- index: 0,
294
- label: tdata.title,
295
- style: '',
296
- bundle: {},
297
- global: [],
298
- toggle: false,
299
- stylist: [],
300
- dataType: 'static',
301
- style_from: 'code',
302
- classDataType: 'static',
303
- preloadEvenet: {},
304
- share: {},
305
- });
306
- RenderValue.custom_style.value(gvc, widget)
307
- AddComponent.toggle(false);
308
- };
309
- });
310
264
  })}"
311
265
  >
312
266
  <i class="fa-regular fa-circle-plus text-black"
313
- style="font-size: 60px;"></i>
314
- <span class="fw-500 fs-5 mt-3">添加元件</span>
267
+ style="font-size: 50px;"></i>
268
+ <span class="fw-500 fs-6 mt-3">添加元件</span>
315
269
  </div>`
316
270
  );
317
271
 
@@ -744,7 +698,7 @@ export const widgetComponent = {
744
698
  type="button"
745
699
  onclick="${gvc.event(() => {
746
700
  vm.type = 'editor'
747
- gvc.notifyDataChange(vm.id)
701
+ gvc.notifyDataChange([vm.id,'item-editor-select'])
748
702
  })}">
749
703
  <span style="font-size: 14px; color: #393939; font-weight: 400;">更改命名</span>
750
704
  </button>`
@@ -774,7 +728,7 @@ export const widgetComponent = {
774
728
  onclick="${gvc.event(() => {
775
729
  vm.type = 'preview';
776
730
  widget.label = name;
777
- gvc.notifyDataChange(vm.id)
731
+ gvc.notifyDataChange([vm.id,'item-editor-select'])
778
732
  })}">
779
733
  <span style="font-size: 14px; color: #393939; font-weight: 400;">確認</span>
780
734
  </button>`
@@ -1829,11 +1829,11 @@ ${obj.gvc.bindView({
1829
1829
  }
1830
1830
  function active() {
1831
1831
  try {
1832
+ glitter.share.editorViewModel.selectItem = dd;
1832
1833
  Storage.page_setting_item = 'layout';
1833
- glitter.pageConfig[gvc.glitter.pageConfig.length - 1].gvc.notifyDataChange(['top_sm_bar', 'left_sm_bar']);
1834
+ glitter.pageConfig[gvc.glitter.pageConfig.length - 1].gvc.notifyDataChange(['top_sm_bar', 'left_sm_bar', 'item-editor-select']);
1834
1835
  gvc.glitter.$('.editorItemActive').removeClass('editorItemActive');
1835
1836
  gvc.glitter.$(`.editor_it_${widgetComponentID}`).addClass('editorItemActive');
1836
- glitter.share.editorViewModel.selectItem = dd;
1837
1837
  Storage.lastSelect = dd.id;
1838
1838
  glitter.share.selectEditorItem();
1839
1839
  if (cf.scroll_to_hover) {
@@ -1841,9 +1841,6 @@ ${obj.gvc.bindView({
1841
1841
  scrollToHover(gvc.glitter.$(`.editor_it_${widgetComponentID}`).get(0));
1842
1842
  });
1843
1843
  }
1844
- if (document.body.clientWidth < 768) {
1845
- glitter.openDrawer();
1846
- }
1847
1844
  event && event.stopPropagation && event.stopPropagation();
1848
1845
  }
1849
1846
  catch (e) {
@@ -1955,6 +1952,9 @@ background: white;
1955
1952
  }
1956
1953
  else {
1957
1954
  function getPlusAndPasteView(dir) {
1955
+ if (window.parent.document.body.clientWidth < 800) {
1956
+ return ``;
1957
+ }
1958
1958
  const detID = cf.gvc.glitter.getUUID();
1959
1959
  const plusID = cf.gvc.glitter.getUUID();
1960
1960
  let block_close = false;
@@ -2146,7 +2146,7 @@ transform: translateY(5px);
2146
2146
  container_items.rerenderReplaceElem();
2147
2147
  }
2148
2148
  glitter.share.editorViewModel.selectItem = undefined;
2149
- gvc.notifyDataChange(['right_NAV', 'MainEditorLeft']);
2149
+ gvc.notifyDataChange(['right_NAV', 'MainEditorLeft', 'item-editor-select']);
2150
2150
  callback();
2151
2151
  }
2152
2152
  },
@@ -2341,11 +2341,11 @@ ${e.line}
2341
2341
 
2342
2342
  function active() {
2343
2343
  try {
2344
+ glitter.share.editorViewModel.selectItem = dd;
2344
2345
  Storage.page_setting_item = 'layout';
2345
- (glitter.pageConfig[gvc.glitter.pageConfig.length - 1] as any).gvc.notifyDataChange(['top_sm_bar','left_sm_bar']);
2346
+ (glitter.pageConfig[gvc.glitter.pageConfig.length - 1] as any).gvc.notifyDataChange(['top_sm_bar','left_sm_bar','item-editor-select']);
2346
2347
  gvc.glitter.$('.editorItemActive').removeClass('editorItemActive');
2347
2348
  gvc.glitter.$(`.editor_it_${widgetComponentID}`).addClass('editorItemActive');
2348
- glitter.share.editorViewModel.selectItem = dd;
2349
2349
  Storage.lastSelect = dd.id;
2350
2350
  glitter.share.selectEditorItem();
2351
2351
  if (cf.scroll_to_hover) {
@@ -2353,9 +2353,6 @@ ${e.line}
2353
2353
  scrollToHover(gvc.glitter.$(`.editor_it_${widgetComponentID}`).get(0));
2354
2354
  });
2355
2355
  }
2356
- if (document.body.clientWidth < 768) {
2357
- glitter.openDrawer();
2358
- }
2359
2356
  event && event.stopPropagation && event.stopPropagation();
2360
2357
  } catch (e) {
2361
2358
  console.log(e);
@@ -2474,6 +2471,9 @@ background: white;
2474
2471
  `
2475
2472
  } else {
2476
2473
  function getPlusAndPasteView(dir: number) {
2474
+ if((window.parent as any).document.body.clientWidth<800){
2475
+ return ``
2476
+ }
2477
2477
  const detID = cf.gvc.glitter.getUUID()
2478
2478
  const plusID = cf.gvc.glitter.getUUID()
2479
2479
  let block_close = false
@@ -2686,7 +2686,7 @@ transform: translateY(5px);
2686
2686
  container_items.rerenderReplaceElem()
2687
2687
  }
2688
2688
  glitter.share.editorViewModel.selectItem = undefined;
2689
- gvc.notifyDataChange(['right_NAV', 'MainEditorLeft']);
2689
+ gvc.notifyDataChange(['right_NAV', 'MainEditorLeft','item-editor-select']);
2690
2690
  callback();
2691
2691
  }
2692
2692
  },
@@ -1,3 +1,12 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import { Swal } from '../../modules/sweetAlert.js';
2
11
  import { EditorElem } from '../../glitterBundle/plugins/editor-elem.js';
3
12
  import { PageEditor } from '../../editor/page-editor.js';
@@ -1014,7 +1023,22 @@ export class Main_editor {
1014
1023
  return (document.body.clientWidth < 800) ? document.body.clientWidth : document.body.clientWidth - 365;
1015
1024
  }
1016
1025
  })();
1017
- const container_height = document.body.clientHeight - 56;
1026
+ const tool_box = (() => {
1027
+ if (document.body.clientWidth < 800) {
1028
+ return 40;
1029
+ }
1030
+ else {
1031
+ return 0;
1032
+ }
1033
+ })();
1034
+ const container_height = (() => {
1035
+ if (gvc.glitter.share.top_inset) {
1036
+ return document.body.clientHeight - 56 - (parseInt(gvc.glitter.share.top_inset, 10) + 10);
1037
+ }
1038
+ else {
1039
+ return document.body.clientHeight - 56;
1040
+ }
1041
+ })() - tool_box;
1018
1042
  const frame_width = (() => {
1019
1043
  if (Storage.view_type === ViewType.mobile) {
1020
1044
  return (container_width < 800) ? container_width : 414;
@@ -1035,8 +1059,10 @@ export class Main_editor {
1035
1059
  frame.style.left = `0`;
1036
1060
  }
1037
1061
  if (gvc.glitter.share.top_inset) {
1038
- frame.style.top = `${parseInt(gvc.glitter.share.top_inset, 10) + 10}px`;
1039
- frame.style.height = `${frame_height - (parseInt(gvc.glitter.share.top_inset, 10) + 10)}px`;
1062
+ frame.style.top = `${parseInt(gvc.glitter.share.top_inset, 10) + 10 + tool_box}px`;
1063
+ }
1064
+ else {
1065
+ frame.style.top = `${tool_box}px`;
1040
1066
  }
1041
1067
  };
1042
1068
  return gvc.bindView(() => {
@@ -1058,6 +1084,157 @@ export class Main_editor {
1058
1084
  <div class="position-relative w-100 h-100"
1059
1085
  style="${(parseInt(gvc.glitter.share.top_inset, 10)) ? `padding-top:${parseInt(gvc.glitter.share.top_inset, 10)}px;` : ``}"
1060
1086
  id="editerCenter">
1087
+ ${(document.body.clientWidth < 800) ? gvc.bindView(() => {
1088
+ return {
1089
+ bind: `item-editor-select`,
1090
+ view: () => {
1091
+ if (gvc.glitter.share.editorViewModel.selectItem) {
1092
+ function addWidgetEvent(direction, component) {
1093
+ const cf = gvc.glitter.share.editorViewModel.selectItem;
1094
+ let glitter = window.glitter;
1095
+ while (!glitter.share.editorViewModel) {
1096
+ glitter = window.parent.glitter;
1097
+ }
1098
+ if (component) {
1099
+ component = JSON.parse(JSON.stringify(component));
1100
+ component.id = gvc.glitter.getUUID();
1101
+ glitter.share.addWithIndex({
1102
+ data: component,
1103
+ index: cf.id,
1104
+ direction: direction,
1105
+ });
1106
+ }
1107
+ else {
1108
+ glitter.getModule(new URL('../.././editor/add-component.js', import.meta.url).href, (AddComponent) => {
1109
+ AddComponent.toggle(true);
1110
+ AddComponent.addWidget = (gvc, tdata) => {
1111
+ glitter.share.addWithIndex({
1112
+ data: tdata,
1113
+ index: cf.id,
1114
+ direction: direction,
1115
+ });
1116
+ };
1117
+ AddComponent.addEvent = (gvc, tdata) => {
1118
+ glitter.share.addWithIndex({
1119
+ data: {
1120
+ id: gvc.glitter.getUUID(),
1121
+ js: './official_view_component/official.js',
1122
+ css: {
1123
+ class: {},
1124
+ style: {},
1125
+ },
1126
+ data: {
1127
+ refer_app: tdata.copyApp,
1128
+ tag: tdata.copy,
1129
+ list: [],
1130
+ carryData: {},
1131
+ _style_refer_global: {
1132
+ index: `0`,
1133
+ },
1134
+ },
1135
+ type: 'component',
1136
+ class: 'w-100',
1137
+ index: 0,
1138
+ label: tdata.title,
1139
+ style: '',
1140
+ bundle: {},
1141
+ global: [],
1142
+ toggle: false,
1143
+ stylist: [],
1144
+ dataType: 'static',
1145
+ style_from: 'code',
1146
+ classDataType: 'static',
1147
+ preloadEvenet: {},
1148
+ share: {},
1149
+ },
1150
+ index: cf.id,
1151
+ direction: direction,
1152
+ });
1153
+ };
1154
+ });
1155
+ }
1156
+ }
1157
+ function readAndPasteClipboardContent(index) {
1158
+ return __awaiter(this, void 0, void 0, function* () {
1159
+ const dialog = new ShareDialog(gvc.glitter);
1160
+ try {
1161
+ const json = JSON.parse(yield navigator.clipboard.readText());
1162
+ if (!json.id) {
1163
+ dialog.errorMessage({ text: '請選擇要複製的元件,並按下複製元件後再執行貼上。' });
1164
+ }
1165
+ else {
1166
+ addWidgetEvent(index, json);
1167
+ }
1168
+ }
1169
+ catch (error) {
1170
+ dialog.errorMessage({ text: '請選擇要複製的元件,並按下複製元件。' });
1171
+ }
1172
+ });
1173
+ }
1174
+ return html `
1175
+ <div class="border-bottom d-flex align-items-center px-2 shadow"
1176
+ style="height:40px;gap:7px;background: linear-gradient(143deg, #FFB400 -22.7%, #FF6C02 114.57%);color:white;">
1177
+ <div class="fw-500 fs-6"
1178
+ style="text-overflow: ellipsis;overflow: hidden !important;">
1179
+ ${gvc.glitter.share.editorViewModel.selectItem.label}
1180
+ </div>
1181
+ <div class="flex-fill"></div>
1182
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1183
+ style="font-size: 14px;color:black;"
1184
+ onclick="${gvc.event(() => {
1185
+ gvc.glitter.openDrawer();
1186
+ })}">編輯</div>
1187
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1188
+ style="font-size: 14px;color:black;"
1189
+ onclick="${gvc.event(() => {
1190
+ const dialog = new ShareDialog(gvc.glitter);
1191
+ navigator.clipboard.writeText(JSON.stringify(gvc.glitter.share.editorViewModel.selectItem));
1192
+ dialog.successMessage({ text: '複製成功,滑動至要插入的區塊,並點擊貼上。' });
1193
+ })}">複製
1194
+ </div>
1195
+ <div class="btn-group dropdown">
1196
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1197
+ style="font-size: 14px;color:black;"
1198
+ data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">貼上
1199
+ </div>
1200
+ <div class="dropdown-menu my-1">
1201
+ <a class="dropdown-item" onclick="${gvc.event(() => {
1202
+ gvc.glitter.htmlGenerate.block_timer = new Date().getTime();
1203
+ readAndPasteClipboardContent(-1);
1204
+ })}">向上貼上元件</a>
1205
+ <a class="dropdown-item" onclick="${gvc.event(() => {
1206
+ gvc.glitter.htmlGenerate.block_timer = new Date().getTime();
1207
+ readAndPasteClipboardContent(1);
1208
+ })}">向下貼上元件</a>
1209
+ </div>
1210
+ </div>
1211
+ <div class="btn-group dropdown">
1212
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1213
+ style="font-size: 14px;color:black;"
1214
+ data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">新增
1215
+ </div>
1216
+ <div class="dropdown-menu my-1">
1217
+ <a class="dropdown-item" onclick="${gvc.event(() => {
1218
+ addWidgetEvent(-1);
1219
+ })}">向上添加元件</a>
1220
+ <a class="dropdown-item" onclick="${gvc.event(() => {
1221
+ addWidgetEvent(1);
1222
+ })}">向下添加元件</a>
1223
+ </div>
1224
+ </div>
1225
+ </div>`;
1226
+ }
1227
+ else {
1228
+ return `<div class="border-bottom d-flex align-items-center px-2 shadow" style="height:40px;gap:10px;background: linear-gradient(143deg, #FFB400 -22.7%, #FF6C02 114.57%);color:white;">
1229
+ <div class="flex-fill"></div>
1230
+ <div class="fw-500 fs-6" style="text-overflow: ellipsis;overflow: hidden !important;">點擊區段來編輯內容</div>
1231
+ <div class="flex-fill"></div>
1232
+ </div>`;
1233
+ }
1234
+ },
1235
+ divCreate: {}
1236
+ };
1237
+ }) : ``}
1061
1238
  <iframe class="bg-white iframe_view"
1062
1239
  style="transform-origin: top left; /* 從左上角縮放 */
1063
1240
  position: absolute;
@@ -1065,8 +1242,7 @@ export class Main_editor {
1065
1242
  left: 0;"
1066
1243
  sandbox="allow-same-origin allow-scripts"
1067
1244
  src="${gvc.glitter.root_path}${gvc.glitter.getUrlParameter('page')}?type=htmlEditor&appName=${gvc.glitter.getUrlParameter('appName')}&device=${gvc.glitter.getUrlParameter('device')}"></iframe>
1068
- </div>
1069
- `;
1245
+ </div>`;
1070
1246
  }
1071
1247
  },
1072
1248
  divCreate: () => {
@@ -1102,7 +1102,20 @@ export class Main_editor {
1102
1102
  return (document.body.clientWidth < 800) ? document.body.clientWidth : document.body.clientWidth - 365;
1103
1103
  }
1104
1104
  })()
1105
- const container_height = document.body.clientHeight - 56;
1105
+ const tool_box = (() => {
1106
+ if (document.body.clientWidth < 800) {
1107
+ return 40
1108
+ } else {
1109
+ return 0
1110
+ }
1111
+ })()
1112
+ const container_height = (() => {
1113
+ if (gvc.glitter.share.top_inset) {
1114
+ return document.body.clientHeight - 56 - (parseInt(gvc.glitter.share.top_inset, 10) + 10);
1115
+ } else {
1116
+ return document.body.clientHeight - 56;
1117
+ }
1118
+ })() - tool_box
1106
1119
  const frame_width = (() => {
1107
1120
  if (Storage.view_type === ViewType.mobile) {
1108
1121
  return (container_width < 800) ? container_width : 414
@@ -1110,10 +1123,11 @@ export class Main_editor {
1110
1123
  return (container_width > 1300) ? container_width : 1300
1111
1124
  }
1112
1125
  })()
1126
+
1113
1127
  const frame_height = container_height * (frame_width / container_width);
1114
1128
  const frame: any = document.querySelector('.iframe_view')!
1115
1129
  frame.style.width = `${frame_width}px`;
1116
- frame.style.height = `${frame_height }px`;
1130
+ frame.style.height = `${frame_height}px`;
1117
1131
  frame.style.transform = `scale(${(container_width / frame_width).toFixed(2)})`
1118
1132
  if (document.body.clientWidth > 800 && Storage.view_type === ViewType.mobile) {
1119
1133
  frame.style.left = `25%`;
@@ -1121,8 +1135,9 @@ export class Main_editor {
1121
1135
  frame.style.left = `0`;
1122
1136
  }
1123
1137
  if (gvc.glitter.share.top_inset) {
1124
- frame.style.top = `${parseInt(gvc.glitter.share.top_inset, 10) + 10}px`;
1125
- frame.style.height = `${frame_height - (parseInt(gvc.glitter.share.top_inset, 10) + 10)}px`;
1138
+ frame.style.top = `${parseInt(gvc.glitter.share.top_inset, 10) + 10 + tool_box}px`;
1139
+ } else {
1140
+ frame.style.top = `${tool_box}px`;
1126
1141
  }
1127
1142
 
1128
1143
  }
@@ -1144,6 +1159,153 @@ export class Main_editor {
1144
1159
  <div class="position-relative w-100 h-100"
1145
1160
  style="${(parseInt(gvc.glitter.share.top_inset, 10)) ? `padding-top:${parseInt(gvc.glitter.share.top_inset, 10)}px;` : ``}"
1146
1161
  id="editerCenter">
1162
+ ${(document.body.clientWidth < 800) ? gvc.bindView(() => {
1163
+ return {
1164
+ bind: `item-editor-select`,
1165
+ view: () => {
1166
+ if (gvc.glitter.share.editorViewModel.selectItem) {
1167
+ function addWidgetEvent(direction: number, component?: any) {
1168
+ const cf=gvc.glitter.share.editorViewModel.selectItem
1169
+ let glitter = (window as any).glitter;
1170
+ while (!glitter.share.editorViewModel) {
1171
+ glitter = (window.parent as any).glitter;
1172
+ }
1173
+ if (component) {
1174
+ component=JSON.parse(JSON.stringify(component))
1175
+ component.id=gvc.glitter.getUUID()
1176
+ glitter.share.addWithIndex({
1177
+ data: component,
1178
+ index: cf.id,
1179
+ direction: direction,
1180
+ });
1181
+ } else {
1182
+ glitter.getModule(new URL('../.././editor/add-component.js', import.meta.url).href, (AddComponent: any) => {
1183
+ AddComponent.toggle(true)
1184
+ AddComponent.addWidget = (gvc: GVC, tdata: any) => {
1185
+ glitter.share.addWithIndex({
1186
+ data: tdata,
1187
+ index: cf.id,
1188
+ direction: direction,
1189
+ });
1190
+ };
1191
+ AddComponent.addEvent = (gvc: GVC, tdata: any) => {
1192
+ glitter.share.addWithIndex({
1193
+ data: {
1194
+ id: gvc.glitter.getUUID(),
1195
+ js: './official_view_component/official.js',
1196
+ css: {
1197
+ class: {},
1198
+ style: {},
1199
+ },
1200
+ data: {
1201
+ refer_app: tdata.copyApp,
1202
+ tag: tdata.copy,
1203
+ list: [],
1204
+ carryData: {},
1205
+ _style_refer_global: {
1206
+ index: `0`,
1207
+ },
1208
+ },
1209
+ type: 'component',
1210
+ class: 'w-100',
1211
+ index: 0,
1212
+ label: tdata.title,
1213
+ style: '',
1214
+ bundle: {},
1215
+ global: [],
1216
+ toggle: false,
1217
+ stylist: [],
1218
+ dataType: 'static',
1219
+ style_from: 'code',
1220
+ classDataType: 'static',
1221
+ preloadEvenet: {},
1222
+ share: {},
1223
+ },
1224
+ index: cf.id,
1225
+ direction: direction,
1226
+ });
1227
+ };
1228
+ });
1229
+ }
1230
+
1231
+ }
1232
+ async function readAndPasteClipboardContent(index:number) {
1233
+ const dialog=new ShareDialog(gvc.glitter)
1234
+ try {
1235
+ // 使用 navigator.clipboard.readText() 方法取得剪貼簿的文字內容
1236
+ const json: any = JSON.parse(await navigator.clipboard.readText());
1237
+ if (!json.id) {
1238
+ dialog.errorMessage({text: '請選擇要複製的元件,並按下複製元件後再執行貼上。'})
1239
+ } else {
1240
+ addWidgetEvent(index, json);
1241
+ }
1242
+ } catch (error) {
1243
+ dialog.errorMessage({text: '請選擇要複製的元件,並按下複製元件。'})
1244
+ }
1245
+ }
1246
+ return html`
1247
+ <div class="border-bottom d-flex align-items-center px-2 shadow"
1248
+ style="height:40px;gap:7px;background: linear-gradient(143deg, #FFB400 -22.7%, #FF6C02 114.57%);color:white;">
1249
+ <div class="fw-500 fs-6"
1250
+ style="text-overflow: ellipsis;overflow: hidden !important;">
1251
+ ${gvc.glitter.share.editorViewModel.selectItem.label}
1252
+ </div>
1253
+ <div class="flex-fill"></div>
1254
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1255
+ style="font-size: 14px;color:black;"
1256
+ onclick="${gvc.event(() => {
1257
+ gvc.glitter.openDrawer();
1258
+ })}">編輯</div>
1259
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1260
+ style="font-size: 14px;color:black;"
1261
+ onclick="${gvc.event(()=>{
1262
+ const dialog = new ShareDialog(gvc.glitter)
1263
+ navigator.clipboard.writeText(JSON.stringify(gvc.glitter.share.editorViewModel.selectItem));
1264
+ dialog.successMessage({text: '複製成功,滑動至要插入的區塊,並點擊貼上。'})
1265
+ })}">複製
1266
+ </div>
1267
+ <div class="btn-group dropdown">
1268
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1269
+ style="font-size: 14px;color:black;"
1270
+ data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">貼上
1271
+ </div>
1272
+ <div class="dropdown-menu my-1">
1273
+ <a class="dropdown-item" onclick="${gvc.event(()=>{
1274
+ gvc.glitter.htmlGenerate.block_timer = new Date().getTime();
1275
+ readAndPasteClipboardContent(-1)
1276
+ })}">向上貼上元件</a>
1277
+ <a class="dropdown-item" onclick="${gvc.event(()=>{
1278
+ gvc.glitter.htmlGenerate.block_timer = new Date().getTime();
1279
+ readAndPasteClipboardContent(1)
1280
+ })}">向下貼上元件</a>
1281
+ </div>
1282
+ </div>
1283
+ <div class="btn-group dropdown">
1284
+ <div class="rounded-1 border bg-white p-1 px-2 fw-500"
1285
+ style="font-size: 14px;color:black;"
1286
+ data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">新增
1287
+ </div>
1288
+ <div class="dropdown-menu my-1">
1289
+ <a class="dropdown-item" onclick="${gvc.event(()=>{
1290
+ addWidgetEvent(-1)
1291
+ })}">向上添加元件</a>
1292
+ <a class="dropdown-item" onclick="${gvc.event(()=>{
1293
+ addWidgetEvent(1)
1294
+ })}">向下添加元件</a>
1295
+ </div>
1296
+ </div>
1297
+ </div>`
1298
+ } else {
1299
+ return `<div class="border-bottom d-flex align-items-center px-2 shadow" style="height:40px;gap:10px;background: linear-gradient(143deg, #FFB400 -22.7%, #FF6C02 114.57%);color:white;">
1300
+ <div class="flex-fill"></div>
1301
+ <div class="fw-500 fs-6" style="text-overflow: ellipsis;overflow: hidden !important;">點擊區段來編輯內容</div>
1302
+ <div class="flex-fill"></div>
1303
+ </div>`
1304
+ }
1305
+ },
1306
+ divCreate: {}
1307
+ }
1308
+ }) : ``}
1147
1309
  <iframe class="bg-white iframe_view"
1148
1310
  style="transform-origin: top left; /* 從左上角縮放 */
1149
1311
  position: absolute;
@@ -1151,8 +1313,7 @@ export class Main_editor {
1151
1313
  left: 0;"
1152
1314
  sandbox="allow-same-origin allow-scripts"
1153
1315
  src="${gvc.glitter.root_path}${gvc.glitter.getUrlParameter('page')}?type=htmlEditor&appName=${gvc.glitter.getUrlParameter('appName')}&device=${gvc.glitter.getUrlParameter('device')}"></iframe>
1154
- </div>
1155
- `
1316
+ </div>`
1156
1317
  }
1157
1318
  },
1158
1319
  divCreate: () => {
@@ -1140,17 +1140,22 @@ function initialEditor(gvc, viewModel) {
1140
1140
  root: arrayData.container.container_config.root,
1141
1141
  }))[cf.direction === 1 ? 'insertAfter' : 'insertBefore']($(`.editor_it_${cf.index}`).parent());
1142
1142
  setTimeout(() => {
1143
+ console.log(`cf.data.id==>`, cf.data.id);
1143
1144
  Storage.lastSelect = cf.data.id;
1144
- glitter.htmlGenerate.selectWidget({
1145
- widget: cf.data,
1146
- widgetComponentID: cf.data.id,
1147
- gvc: arrayData.container.container_config.gvc,
1148
- scroll_to_hover: true,
1149
- glitter: glitter,
1150
- });
1145
+ function pasteEvent() {
1146
+ glitter.htmlGenerate.selectWidget({
1147
+ widget: cf.data,
1148
+ widgetComponentID: cf.data.id,
1149
+ gvc: arrayData.container.container_config.gvc,
1150
+ scroll_to_hover: true,
1151
+ glitter: glitter,
1152
+ });
1153
+ }
1154
+ pasteEvent();
1151
1155
  setTimeout(() => {
1152
1156
  glitter.share.left_block_hover = false;
1153
1157
  glitter.share.loading_dialog.dataLoading({ visible: false });
1158
+ pasteEvent();
1154
1159
  }, 1000);
1155
1160
  }, 100);
1156
1161
  AddComponent.toggle(false);
@@ -1263,17 +1263,22 @@ function initialEditor(gvc: GVC, viewModel: any) {
1263
1263
  )[cf.direction === 1 ? 'insertAfter' : 'insertBefore']($(`.editor_it_${cf.index}`).parent());
1264
1264
  //
1265
1265
  setTimeout(() => {
1266
+ console.log(`cf.data.id==>`,cf.data.id)
1266
1267
  Storage.lastSelect = cf.data.id
1267
- glitter.htmlGenerate.selectWidget({
1268
- widget: cf.data,
1269
- widgetComponentID: cf.data.id,
1270
- gvc: arrayData.container.container_config.gvc,
1271
- scroll_to_hover: true,
1272
- glitter: glitter,
1273
- });
1268
+ function pasteEvent(){
1269
+ glitter.htmlGenerate.selectWidget({
1270
+ widget: cf.data,
1271
+ widgetComponentID: cf.data.id,
1272
+ gvc: arrayData.container.container_config.gvc,
1273
+ scroll_to_hover: true,
1274
+ glitter: glitter,
1275
+ });
1276
+ }
1277
+ pasteEvent()
1274
1278
  setTimeout(() => {
1275
1279
  glitter.share.left_block_hover = false
1276
1280
  glitter.share.loading_dialog.dataLoading({visible: false})
1281
+ pasteEvent()
1277
1282
  }, 1000)
1278
1283
  }, 100)
1279
1284
  AddComponent.toggle(false);
@@ -686,7 +686,7 @@ export const component = Plugin.createComponent(import.meta.url, (glitter, editM
686
686
  onclick="${gvc.event((e, event) => {
687
687
  event.stopPropagation();
688
688
  vm.type = 'editor';
689
- gvc.notifyDataChange(vm.id);
689
+ gvc.notifyDataChange([vm.id]);
690
690
  })}">
691
691
  <span style="font-size: 14px; color: #393939; font-weight: 400;">更改命名</span>
692
692
  </button>`;
@@ -714,7 +714,7 @@ export const component = Plugin.createComponent(import.meta.url, (glitter, editM
714
714
  event.stopPropagation();
715
715
  vm.type = 'preview';
716
716
  widget.label = name;
717
- gvc.notifyDataChange(vm.id);
717
+ gvc.notifyDataChange([vm.id, 'item-editor-select']);
718
718
  })}">
719
719
  <span style="font-size: 14px; color: #393939; font-weight: 400;">確認</span>
720
720
  </button>`;
@@ -708,7 +708,7 @@ export const component = Plugin.createComponent(import.meta.url, (glitter: Glitt
708
708
  onclick="${gvc.event((e, event) => {
709
709
  event.stopPropagation();
710
710
  vm.type = 'editor'
711
- gvc.notifyDataChange(vm.id)
711
+ gvc.notifyDataChange([vm.id])
712
712
  })}">
713
713
  <span style="font-size: 14px; color: #393939; font-weight: 400;">更改命名</span>
714
714
  </button>`
@@ -737,7 +737,7 @@ export const component = Plugin.createComponent(import.meta.url, (glitter: Glitt
737
737
  event.stopPropagation();
738
738
  vm.type = 'preview';
739
739
  widget.label = name;
740
- gvc.notifyDataChange(vm.id)
740
+ gvc.notifyDataChange([vm.id,'item-editor-select'])
741
741
  })}">
742
742
  <span style="font-size: 14px; color: #393939; font-weight: 400;">確認</span>
743
743
  </button>`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-glitter",
3
- "version": "13.6.1",
3
+ "version": "13.6.2",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {