create-fesd-app 1.0.30 → 1.0.32

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fesd-app",
3
- "version": "1.0.30",
3
+ "version": "1.0.32",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "vite",
@@ -24,7 +24,7 @@
24
24
  "dependencies": {
25
25
  "@tailwindcss/postcss": "^4.1.10",
26
26
  "@tailwindcss/vite": "^4.1.10",
27
- "@xwadex/fesd": "0.0.53",
27
+ "@xwadex/fesd": "0.0.54",
28
28
  "ansi-colors": "^4.1.3",
29
29
  "chalk": "^5.3.0",
30
30
  "clsx": "^2.1.1",
@@ -336,6 +336,7 @@ $quote-TB-gap: 20px
336
336
  // @extend %table_solid_striped
337
337
  // @extend %table_border_rows
338
338
  // @extend %table_border_full
339
+ // @extend %table_border_full_column
339
340
  @extend %table_solidSingle_borderColumn
340
341
 
341
342
  &[data-table-markdown="on"]
@@ -423,9 +424,15 @@ $quote-TB-gap: 20px
423
424
  color: #fff
424
425
  background-color: #6AA8FF
425
426
  tbody
427
+ tr
428
+ td
429
+ &.lefthead
430
+ color: #fff
431
+ background-color: #6AA8FF
426
432
  tr:nth-child(even)
427
433
  td
428
- background-color: #F2F2F2
434
+ &:not(.lefthead)
435
+ background-color: #F2F2F2
429
436
  %table_solid_striped
430
437
  ._table
431
438
  border-bottom: 5px solid #6AA8FF
@@ -439,14 +446,22 @@ $quote-TB-gap: 20px
439
446
  th:nth-child(even)
440
447
  background-color: #3287FF
441
448
  tbody
442
- tr:nth-child(even)
449
+ tr
443
450
  td
451
+ &.lefthead
452
+ color: #fff
453
+ &:nth-child(even)
454
+ background-color: #3287FF
455
+ &:nth-child(odd)
456
+ background-color: #6AA8FF
457
+ tr:nth-child(even)
458
+ td:not(.lefthead)
444
459
  background-color: #F2F2F2
445
460
  %table_border_rows
446
461
  ._table
462
+ border-top: 2px solid #000
447
463
  border-bottom: 2px solid #000
448
- &:not(:has(thead))
449
- border-top: 2px solid #000
464
+ // &:not(:has(thead))
450
465
  table
451
466
  thead
452
467
  th
@@ -458,7 +473,7 @@ $quote-TB-gap: 20px
458
473
  width: 100%
459
474
  height: 2px
460
475
  left: 0
461
- top: 0
476
+ bottom: 0
462
477
  background: #000
463
478
  tr:last-child
464
479
  th::after
@@ -470,6 +485,10 @@ $quote-TB-gap: 20px
470
485
  left: 0
471
486
  background: #000
472
487
  tbody
488
+ tr
489
+ td
490
+ &.lefthead
491
+ color: #00C5B1
473
492
  tr:not(:first-child)
474
493
  td
475
494
  position: relative
@@ -480,7 +499,62 @@ $quote-TB-gap: 20px
480
499
  height: 1px
481
500
  top: 0
482
501
  left: 0
502
+ transform: translate3d(0, -50%, 0)
483
503
  background-color: rgba(#000, .2)
504
+ &.lefthead
505
+ &::after
506
+ background-color: #000
507
+ height: 2px
508
+ %table_border_full_column
509
+ ._table
510
+ border-bottom: 2px solid #000
511
+ &:not(:has(thead))
512
+ border-top: 2px solid #000
513
+ table
514
+ thead
515
+ th
516
+ position: relative
517
+ &::before
518
+ content: ''
519
+ position: absolute
520
+ width: 100%
521
+ height: 2px
522
+ bottom: 0
523
+ left: 0
524
+ background-color: #000
525
+ z-index: 5
526
+ tbody
527
+ tr:not(:first-child)
528
+ td
529
+ &::after
530
+ content: ''
531
+ position: absolute
532
+ width: 100%
533
+ height: 1px
534
+ top: 0
535
+ left: 0
536
+ transform: translate3d(0, -50%, 0)
537
+ background-color: rgba(#000, .2)
538
+ tr
539
+ td
540
+ position: relative
541
+ &.lefthead
542
+ font-weight: 600
543
+ &::after
544
+ height: 2px
545
+ background-color: #000
546
+ &:not(:last-child)
547
+ &::before
548
+ content: ''
549
+ position: absolute
550
+ width: 1px
551
+ height: 100%
552
+ top: 0
553
+ right: 0
554
+ background-color: rgba(#000, .2)
555
+ &.lefthead
556
+ &::before
557
+ content: unset
484
558
  %table_border_full
485
559
  ._table
486
560
  border-bottom: 2px solid #000
@@ -503,15 +577,12 @@ $quote-TB-gap: 20px
503
577
  &:after
504
578
  content: ''
505
579
  position: absolute
506
- top: 50%
580
+ top: 25%
507
581
  right: 0
508
582
  width: 1px
509
- height: 20px
510
- transform: translate3d(50%, -50%, 0)
583
+ height: 50%
511
584
  background-color: #000
512
585
  tbody
513
- td
514
- position: relative
515
586
  tr:not(:first-child)
516
587
  td
517
588
  &::after
@@ -521,9 +592,16 @@ $quote-TB-gap: 20px
521
592
  height: 1px
522
593
  top: 0
523
594
  left: 0
595
+ transform: translate3d(0, -50%, 0)
524
596
  background-color: rgba(#000, .2)
525
597
  tr
526
598
  td
599
+ position: relative
600
+ &.lefthead
601
+ font-weight: 600
602
+ &::after
603
+ height: 2px
604
+ background-color: #000
527
605
  &:not(:last-child)
528
606
  &::before
529
607
  content: ''
@@ -533,11 +611,25 @@ $quote-TB-gap: 20px
533
611
  top: 0
534
612
  right: 0
535
613
  background-color: rgba(#000, .2)
614
+ &.lefthead
615
+ &::before
616
+ background-color: #000
617
+ top: 25%
618
+ height: 50%
536
619
  %table_solidSingle_borderColumn
537
620
  @extend %table_solid_single
538
621
  table
539
622
  thead
540
623
  th
624
+ &::before
625
+ content: ''
626
+ position: absolute
627
+ bottom: 0
628
+ right: 0
629
+ width: 100%
630
+ height: 1px
631
+ z-index: 3
632
+ background-color: #fff
541
633
  &:not(:last-child)
542
634
  position: relative
543
635
  &:after
@@ -561,6 +653,21 @@ $quote-TB-gap: 20px
561
653
  width: 1px
562
654
  height: 100%
563
655
  background-color: rgba(#000, .2)
656
+ tr
657
+ td.lefthead
658
+ &::after
659
+ background-color: #fff
660
+ &:not(:last-child)
661
+ td.lefthead
662
+ &::before
663
+ content: ''
664
+ position: absolute
665
+ bottom: 0
666
+ right: 0
667
+ width: 100%
668
+ height: 1px
669
+ z-index: 3
670
+ background-color: #fff
564
671
 
565
672
  // markdown文字樣式
566
673
  %table_markdown_style
@@ -96,6 +96,7 @@
96
96
  display: flex
97
97
  flex-wrap: wrap
98
98
  gap: 0 20px
99
+ margin-top: 20px
99
100
  +rwdmax(575)
100
101
  gap: 15px
101
102
  .grid
@@ -282,3 +283,13 @@
282
283
  .textarea-scrollbar
283
284
  width: calc(100% - 30px)
284
285
  margin: 0 auto 10px
286
+ .circle
287
+ width: 50px
288
+ height: 50px
289
+ background: rgba(0,0,0,.3)
290
+ display: flex
291
+ justify-content: center
292
+ align-items: center
293
+ cursor: pointer
294
+ [video-cover="off"]
295
+ padding: 0 !important
@@ -180,7 +180,7 @@ $(async () => {
180
180
  },
181
181
  },
182
182
  });
183
- new Video4('[video-target]');
183
+ // new Video4('[video-target]');
184
184
  new Share4('[web-share]');
185
185
  new Anchor4('[data-anchor-target]');
186
186
  // await
@@ -283,16 +283,12 @@ cookieAdvanced.switchState = () => {
283
283
 
284
284
  // 存 cookie
285
285
  cookieAdvanced.cookieSaveFn = () => {
286
- const nonRequiredValues = Object.entries(cookieNewObj)
287
- .filter(
288
- ([key]) => key !== 'required' && key !== 'close'
289
- )
290
- .map(
291
- ([, value]) => value
292
- )
286
+ const noRequiredValue = Object.entries(cookieNewObj)
287
+ .filter(([key]) => key !== 'required' && key !== 'close')
288
+ .map(([, value]) => value)
293
289
 
294
- const allNonRequiredAreClosed = nonRequiredValues.every(opt => opt.close === 1)
295
- const globalCloseValue = allNonRequiredAreClosed ? 1 : 0
290
+ const closeValue = noRequiredValue.every(opt => opt.close === 1)
291
+ const globalCloseValue = closeValue ? 1 : 0
296
292
 
297
293
  // 判斷設定第一層的 close 值
298
294
  cookieNewObj.close = globalCloseValue
@@ -307,95 +303,61 @@ cookieAdvanced.cookieSaveFn = () => {
307
303
 
308
304
  // 點擊方法
309
305
  cookieAdvanced.clickEvent = (el) => {
310
- const $settingBlock = $(".cookie-setting")
311
- const $cookiePolicy = $(".cookie-check")
312
-
313
- let scrollInstance = null
306
+ const $settingBlock = $(".cookie-setting");
307
+ const $cookiePolicy = $(".cookie-check");
314
308
 
315
309
  $(document)
316
- .off("click.cookie", "[data-cookie]")
317
- .on("click.cookie", "[data-cookie]", function (e) {
318
- const $this = $(this)
319
-
320
- // 打開 cookie 介面
321
- if ($this.is("[data-cookie-open]")) {
322
- const mode = $this.attr("data-cookie-open")
323
- const targets = new Set(mode === "all" ? ["advance", "basic"] : [mode])
324
-
325
- // 打開進階版 cookie 時跑的方法
326
- const openAdvance = () => {
327
- cookieSetting.openEvent($settingBlock, () => {
328
- const scrollerEl = $settingBlock.find(".scroller")[0]
329
-
330
- if (scrollerEl) {
331
- scrollInstance = OverlayScrollbars(scrollerEl, {})
332
- const scrollers = document.querySelector(".cookie-setting")?.querySelectorAll("[data-overlayscrollbars-viewport]")
333
- scrollLock([...scrollers]);
334
- }
335
- })
336
- }
337
-
338
- // 打開基本版 cookie 時跑的方法
339
- const openBasic = () => {
340
- $cookiePolicy.addClass("first-enter").removeClass("agree hidden")
341
- clearTimeout(cookieAdvanced.timer)
342
-
343
- cookieAdvanced.timer = setTimeout(() => {
344
- $cookiePolicy.addClass("show")
345
- }, 800)
346
- }
347
-
348
- if (targets.has("advance")) openAdvance()
349
- if (targets.has("basic")) openBasic()
350
- }
351
-
352
- // 啟用進階版 cookie 所有選項
353
- if ($this.is("[data-cookie-all]")) {
354
- cookieSetting.enableAll()
355
- }
356
-
357
- // 關閉進階版 cookie 所有選項
358
- if ($this.is("[data-cookie-reject]")) {
359
- cookieSetting.rejectAll()
360
- cookieAdvanced.cookieSaveFn()
361
- }
362
-
363
- // 關閉進階版 cookie 視窗
364
- if ($this.is("[data-cookie-close]")) {
365
- const mode = $this.attr("data-cookie-close")
366
- const targets = new Set(mode === "all" ? ["basic", "advance"] : [mode])
367
-
368
- const closeAdvance = () => {
369
- const viewport = $settingBlock.find("[data-overlayscrollbars-viewport]")[0];
370
- if (viewport) {
371
- viewport.scrollTo({ top: 0, behavior: 'smooth' });
310
+ .off("click.cookie")
311
+ .on("click.cookie", "[data-cookie]", function() {
312
+ const $this = $(this);
313
+ const data = this.dataset;
314
+
315
+ const actions = {
316
+ open: () => {
317
+ const mode = data.cookieOpen;
318
+ if (mode === "advance" || mode === "all") {
319
+ cookieSetting.openEvent($settingBlock, () => {
320
+ const scrollerEl = $settingBlock.find(".scroller")[0];
321
+ if (scrollerEl) {
322
+ const scrollInstance = OverlayScrollbars(scrollerEl, {});
323
+ scrollLock([...$settingBlock.find("[data-overlayscrollbars-viewport]")]);
324
+ }
325
+ });
372
326
  }
373
- cookieSetting.closeEvent($settingBlock)
374
- scrollUnlock()
375
- }
376
-
377
- const closeBasic = () => {
378
- $cookiePolicy.addClass("hidden")
379
- sessionStorage.setItem(el, "true")
380
- }
381
-
382
- if (targets.has("advance")) closeAdvance()
383
- if (targets.has("basic")) closeBasic()
384
- }
385
-
386
- // 儲存, 放在預存當前選項的按鈕上(功能:將目前選項紀錄預存至 cookie 中, 尚未真正啟用)
387
- if ($this.is("[data-cookie-save]")) {
388
- cookieAdvanced.cookieSaveFn()
389
- }
390
-
391
- // 放在真正要啟動 cookie 功能的儲存按鈕上(功能:依照目前 save 的 cookie 選項, 執行後端程式)
392
- if ($this.is("[data-cookie-run]")) {
393
- if (typeof window._wdSetting === "function") {
394
- window._wdSetting()
395
- }
396
- }
397
- })
398
- }
327
+ if (mode === "basic" || mode === "all") {
328
+ $cookiePolicy.addClass("first-enter").removeClass("agree hidden");
329
+ setTimeout(() => $cookiePolicy.addClass("show"), 800);
330
+ }
331
+ },
332
+ close: () => {
333
+ const mode = data.cookieClose;
334
+ if (mode === "advance" || mode === "all") {
335
+ cookieSetting.closeEvent($settingBlock);
336
+ scrollUnlock();
337
+ }
338
+ if (mode === "basic" || mode === "all") {
339
+ $cookiePolicy.addClass("hidden");
340
+ sessionStorage.setItem(el, "true");
341
+ }
342
+ },
343
+ all: () => cookieSetting.enableAll(),
344
+ reject: () => {
345
+ cookieSetting.rejectAll();
346
+ cookieAdvanced.cookieSaveFn();
347
+ },
348
+ save: () => cookieAdvanced.cookieSaveFn(),
349
+ run: () => typeof window._wdSetting === "function" && window._wdSetting()
350
+ };
351
+
352
+ // 根據 dataset 鍵名執行對應 action
353
+ if (data.cookieOpen) actions.open();
354
+ if (data.cookieClose) actions.close();
355
+ if (data.cookieAll !== undefined) actions.all();
356
+ if (data.cookieReject !== undefined) actions.reject();
357
+ if (data.cookieSave !== undefined) actions.save();
358
+ if (data.cookieRun !== undefined) actions.run();
359
+ });
360
+ };
399
361
 
400
362
  // ** --- 工具們 --- **
401
363
  // cookie 開啟方法
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  Aost4,
3
+ Video4,
3
4
  ImageValidate,
4
5
  Detect4
5
6
  } from '@xwadex/fesd';
@@ -52,6 +53,8 @@ export const inits = () => {
52
53
  // pluginInit
53
54
  lazyLoadImg();
54
55
  new ImageValidate();
56
+ new Video4('[video-target]');
57
+ new Video4('[video-target]');
55
58
  // uiInit
56
59
  navbar.init();
57
60
  // 預設為 false -> 基礎版, true -> 進階版, 各專案 key 名要記得更改
@@ -9,6 +9,8 @@ html(lang="zh-Hant-TW" data-overlayscrollbars-initialize)
9
9
  meta(name="viewport" content="width=device-width, initial-scale=1.0")
10
10
  // Safari 電話號碼判斷
11
11
  meta(content="telephone=no" name="format-detection")
12
+ meta(name="robots" content="noindex")
13
+ meta(name="googlebot" content="noindex")
12
14
  title WDD F2E Framework
13
15
  link(rel="shortcut icon" href="./assets/img/favicon.ico" type="image/x-icon")
14
16
  // Google font
@@ -29,9 +31,8 @@ html(lang="zh-Hant-TW" data-overlayscrollbars-initialize)
29
31
  // 若 video4 有開 Ig reels, 引入以下網址
30
32
  script(src="https://www.instagram.com/embed.js")
31
33
 
32
-
33
34
  body(class=`${css}-page` data-overlayscrollbars-initialize)
34
- h1.visuallyhidden WDD F2E Framework!
35
+ block headingTag
35
36
  .main-wrapper
36
37
  // 導覽列
37
38
  block navbar
@@ -51,9 +52,9 @@ html(lang="zh-Hant-TW" data-overlayscrollbars-initialize)
51
52
 
52
53
  modern-modal(data-modal-id="my-modal" data-modal-animate="clip-right")
53
54
  .close-btn(data-modal-close)
54
- .title Modal4
55
- .photo-box(video-target video-id="5bMdjkfvONE" video-type="youtube" video-mode="onPage")
56
- picture
57
- source(srcset="https://cdn.wdd.idv.tw/image/video-cover02.webp" type="image/webp")
58
- source(srcset="https://cdn.wdd.idv.tw/image/video-cover02.jpg" type="image/jpeg")
59
- img(src="https://cdn.wdd.idv.tw/image/video-cover02.jpg" alt="")
55
+ .title(data-modal-target="other-modal") Modal4
56
+
57
+ modern-modal(data-modal-id="other-modal" data-modal-animate="clip-right")
58
+ .close-btn(data-modal-close)
59
+ .title other Modal
60
+
@@ -14,9 +14,8 @@
14
14
  p.title Cookie
15
15
  p.text 關於本網站使用瀏覽器紀錄 Cookie 來提供您最好的使用體驗,我們使用的 Cookie 也包括了第三方 Cookie 。<br>相關資訊請訪問我們的隱私權與 Cookie 政策。如果您選擇繼續瀏覽或關閉這個提示,便表示您已接受我們的網站使用條款。
16
16
  .button-group
17
- // [data-cookie-reject] -> 全部關閉; [data-cookie-save] -> 儲存 cookie
18
- .cookie-btn.close(data-cookie data-cookie-reject) Reject 我拒絕
19
- .cookie-btn.agree(data-cookie data-cookie-save) OK 我接受
17
+ .cookie-btn.close(data-cookie data-cookie-reject data-cookie-save) Reject 我拒絕
18
+ .cookie-btn.agree(data-cookie data-cookie-all data-cookie-save) OK 我接受
20
19
  // 若此專案無開進階版 cookie, 請移除以下結構!
21
20
  .cookie-setting-btn(data-cookie data-cookie-open="advance")
22
21
  span Cookie 偏好設定
@@ -39,7 +38,7 @@
39
38
  // JS append 結構 (cookieStep1El)
40
39
  .button-group
41
40
  .cookie-btn.open(data-cookie data-cookie-all) 啟用所有 Cookie
42
- .cookie-btn.save(data-cookie data-cookie-close="advance") SAVE 儲存本次變更
41
+ .cookie-btn.save(data-cookie data-cookie-save data-cookie-close="all") SAVE 儲存本次變更
43
42
  // 步驟 2
44
43
  .setting-container(t4-role="tabPanel" t4-id='step2')
45
44
  .back(onClick=`document.body.fesd.cookieGoToNext(false)`)
@@ -821,37 +821,38 @@ block content
821
821
 
822
822
  .titleBox(data-anchor=`tableFreezeDemo`)
823
823
  .title Table freeze Demo
824
- .dep 此範例搭配屬性<span class='code'>freeze-table</span>之特殊表格<br>此功能僅特殊案例開啟 請至<span class='lightHigh'>段落編輯器需求表</span>確認各專案要開啟什麼功能!
824
+ .dep 此範例搭配屬性<span class='code'>freeze-table</span>之特殊表格<br>此功能僅特殊案例開啟 請至<span class='lightHigh'>段落編輯器需求表</span>確認各專案要開啟什麼功能!只有表頭才可以選擇凍結!側邊表頭<span class='code'>class="lefthead"</span>
825
825
  +article(tableData.tableFreezeDemo)
826
826
  table
827
- tbody
827
+ thead
828
828
  tr(data-row='0')
829
- td(data-column="A" rowspan="3" style='width:200px; min-width:200px;')
829
+ th(data-column="A" rowspan="3" style='width:200px; min-width:200px;')
830
830
  span aaa
831
- td(data-column="B" colspan="3" style='width:200px; min-width:200px;')
831
+ th(data-column="B" colspan="3" style='width:200px; min-width:200px;')
832
832
  span bbb
833
- td(data-column="E" style='width:300px; min-width:300px;')
833
+ th(data-column="E" style='width:300px; min-width:300px;')
834
834
  span eee
835
- td(data-column="F" style='width:300px; min-width:300px;')
835
+ th(data-column="F" style='width:300px; min-width:300px;')
836
836
  span fff
837
837
  tr(data-row='1')
838
- td(data-column="B" rowspan="2" style='width:200px; min-width:200px;')
838
+ th(data-column="B" rowspan="2" style='width:200px; min-width:200px;')
839
839
  span bbb
840
- td(data-column="C" colspan="3" style='width:200px; min-width:200px;')
840
+ th(data-column="C" colspan="3" style='width:200px; min-width:200px;')
841
841
  span ccc
842
- td(data-column="F" style='width:300px; min-width:300px;')
842
+ th(data-column="F" style='width:300px; min-width:300px;')
843
843
  span fff
844
844
  tr(data-row='2')
845
- td(data-column="C" style='width:300px; min-width:300px;')
845
+ th(data-column="C" style='width:300px; min-width:300px;')
846
846
  span ccc
847
- td(data-column="D" style='width:300px; min-width:300px;')
847
+ th(data-column="D" style='width:300px; min-width:300px;')
848
848
  span ddd
849
- td(data-column="E" style='width:300px; min-width:300px;')
849
+ th(data-column="E" style='width:300px; min-width:300px;')
850
850
  span eee
851
- td(data-column="F" style='width:300px; min-width:300px;')
851
+ th(data-column="F" style='width:300px; min-width:300px;')
852
852
  span fff
853
+ tbody
853
854
  tr(data-row='3')
854
- td(data-column="A" rowspan="2" style='width:200px; min-width:200px;')
855
+ td.lefthead(data-column="A" rowspan="2" style='width:200px; min-width:200px;')
855
856
  span aaa
856
857
  td(data-column="B" style='width:200px; min-width:200px;')
857
858
  span bbb
@@ -876,7 +877,7 @@ block content
876
877
  span fff
877
878
  for i in [1,2,3,4,5,6,7]
878
879
  tr(data-row=`${i+3}`)
879
- td(data-column="A" style='width:200px; min-width:200px;')
880
+ td.lefthead(data-column="A" style='width:200px; min-width:200px;')
880
881
  span aaa
881
882
  td(data-column="B" style='width:200px; min-width:200px;')
882
883
  span bbb
@@ -4,6 +4,10 @@ block page
4
4
  - const page = 'index';
5
5
  - const css = 'index';
6
6
 
7
+ block headingTag
8
+ //- 僅首頁為隱藏 h1 標籤
9
+ h1.visuallyhidden WDD F2E Framework!
10
+
7
11
  block content
8
12
  .banner
9
13
  // Swiper
@@ -93,29 +97,97 @@ block content
93
97
  h3 Video4 👇
94
98
  .row
95
99
  .grid
96
- .photo-box(video-target="video-ig-template" video-button="playing" video-target-route="./ajax/ajax_igDemo.html" video-id="../../public/assets/img/banner.jpg" video-type="instagram")
100
+ p onPage youtube
101
+ .photo-box(video-target video-mode="onPage" video-id="5bMdjkfvONE" video-type="youtube")
97
102
  picture
98
- source(srcset="https://cdn.wdd.idv.tw/image/video-cover01.webp" type="image/webp")
99
- source(srcset="https://cdn.wdd.idv.tw/image/video-cover01.jpg" type="image/jpeg")
100
- img(src="https://cdn.wdd.idv.tw/image/video-cover01.jpg" alt="")
103
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.webp" type="image/webp")
104
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.jpg" type="image/jpeg")
105
+ img(src="https://cdn.wdd.idv.tw/image/video-cover04.jpg" alt="")
101
106
  .grid
107
+ p onBox youtube
102
108
  .photo-box(video-target video-id="5bMdjkfvONE" video-type="youtube")
103
109
  picture
104
110
  source(srcset="https://cdn.wdd.idv.tw/image/video-cover02.webp" type="image/webp")
105
111
  source(srcset="https://cdn.wdd.idv.tw/image/video-cover02.jpg" type="image/jpeg")
106
112
  img(src="https://cdn.wdd.idv.tw/image/video-cover02.jpg" alt="")
107
113
  .grid
114
+ p onBox youku
108
115
  .photo-box(video-target video-id="XNDk5NzkwNzY3Mg" video-type="youku")
109
116
  picture
110
117
  source(srcset="https://cdn.wdd.idv.tw/image/video-cover03.webp" type="image/webp")
111
118
  source(srcset="https://cdn.wdd.idv.tw/image/video-cover03.jpg" type="image/jpeg")
112
119
  img(src="https://cdn.wdd.idv.tw/image/video-cover03.jpg" alt="")
113
120
  .grid
121
+ p onBox vimeo
114
122
  .photo-box(video-target video-id="777062285" video-type="vimeo")
115
123
  picture
116
124
  source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.webp" type="image/webp")
117
125
  source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.jpg" type="image/jpeg")
118
126
  img(src="https://cdn.wdd.idv.tw/image/video-cover04.jpg" alt="")
127
+ .row
128
+ .grid
129
+ p instagram
130
+ .photo-box(video-target="video-ig-template" video-button="playing" video-target-route="./ajax/ajax_igDemo.html" video-id="../../public/assets/img/banner.jpg" video-type="instagram")
131
+ picture
132
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover01.webp" type="image/webp")
133
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover01.jpg" type="image/jpeg")
134
+ img(src="https://cdn.wdd.idv.tw/image/video-cover01.jpg" alt="")
135
+ .grid
136
+ p video
137
+ .photo-box(video-target video-id="https://cdn.wdd.idv.tw/video/chappie_Video1.mp4" video-type="video")
138
+ picture
139
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.webp" type="image/webp")
140
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.jpg" type="image/jpeg")
141
+ img(src="https://cdn.wdd.idv.tw/image/video-cover04.jpg" alt="")
142
+ .grid
143
+ p inBox youtube
144
+ .photo-box(
145
+ video-target="video-inBox"
146
+ video-mode="inBox"
147
+ video-target-route="https://cdn.wdd.idv.tw/fesd/video4_inbox_lightbox.html"
148
+ video-id="5bMdjkfvONE"
149
+ video-type="youtube"
150
+ )
151
+ picture
152
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.webp" type="image/webp")
153
+ source(srcset="https://cdn.wdd.idv.tw/image/video-cover04.jpg" type="image/jpeg")
154
+ img(src="https://cdn.wdd.idv.tw/image/video-cover04.jpg" alt="")
155
+ .grid
156
+ p inBox video
157
+ .photo-box(
158
+ video-target="video-inBox"
159
+ video-mode="inBox"
160
+ video-target-route="https://cdn.wdd.idv.tw/fesd/video4_inbox_lightbox.html"
161
+ video-id="https://cdn.wdd.idv.tw/video/chappie_Video1.mp4"
162
+ video-type="video"
163
+ )
164
+ .row
165
+ .grid
166
+ p video onBox 燈箱
167
+ .photo-box(video-cover="off" video-target video-id="https://cdn.wdd.idv.tw/video/chappie_Video1.mp4" video-type="video")
168
+ .circle :)
169
+ .grid
170
+ p yt inBox 燈箱
171
+ .photo-box(
172
+ video-cover="off"
173
+ video-target="video-inBox"
174
+ video-mode="inBox"
175
+ video-target-route="https://cdn.wdd.idv.tw/fesd/video4_inbox_lightbox.html"
176
+ video-id="5bMdjkfvONE"
177
+ video-type="youtube"
178
+ video-inbox-img="https://cdn.wdd.idv.tw/image/video-cover04.jpg"
179
+ )
180
+ .circle :)
181
+ .grid
182
+ p yt onBox 燈箱
183
+ .photo-box(
184
+ video-target
185
+ video-cover="off"
186
+ video-id="5bMdjkfvONE"
187
+ video-type="youtube"
188
+ )
189
+ .circle :)
190
+
119
191
  section.section4
120
192
  .container
121
193
  h3 Tab4 👇