@kangsicj/dcinsideenhancer 1.2.0 → 1.2.1
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.en.md +1 -1
- package/README.md +1 -1
- package/dist/DCInsideEnhancer.meta.js +1 -1
- package/dist/DCInsideEnhancer.user.js +360 -230
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<br><br>
|
|
6
6
|
|
|
7
|
-
<a href="https://cdn.jsdelivr.net/npm/@kangsicj/dcinsideenhancer@latest/dist/DCInsideEnhancer.user.js"><img src="https://img.shields.io/
|
|
7
|
+
<a href="https://cdn.jsdelivr.net/npm/@kangsicj/dcinsideenhancer@latest/dist/DCInsideEnhancer.user.js"><img src="https://img.shields.io/npm/v/%40kangsicj%2Fdcinsideenhancer?label=Install&color=3b4890&style=for-the-badge&logo=tampermonkey&logoColor=white&cacheSeconds=1800" alt="Install"></a>
|
|
8
8
|
<img src="https://img.shields.io/badge/iPhone%20%C2%B7%20Android%20%C2%B7%20PC-supported-5865c7?style=for-the-badge" alt="iPhone · Android · PC">
|
|
9
9
|
<img src="https://img.shields.io/badge/ads%20%26%20tracking-none-2e7d5b?style=for-the-badge" alt="No ads or tracking">
|
|
10
10
|
<a href="https://fairy.hada.io/@jinny#support"><img src="https://img.shields.io/badge/Fairy-Support-ff6fb5?style=for-the-badge&logo=githubsponsors&logoColor=white" alt="Support on Fairy"></a>
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<br><br>
|
|
6
6
|
|
|
7
|
-
<a href="https://cdn.jsdelivr.net/npm/@kangsicj/dcinsideenhancer@latest/dist/DCInsideEnhancer.user.js"><img src="https://img.shields.io/
|
|
7
|
+
<a href="https://cdn.jsdelivr.net/npm/@kangsicj/dcinsideenhancer@latest/dist/DCInsideEnhancer.user.js"><img src="https://img.shields.io/npm/v/%40kangsicj%2Fdcinsideenhancer?label=%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&color=3b4890&style=for-the-badge&logo=tampermonkey&logoColor=white&cacheSeconds=1800" alt="설치하기"></a>
|
|
8
8
|
<img src="https://img.shields.io/badge/iPhone%20%C2%B7%20Android%20%C2%B7%20PC-%EC%A7%80%EC%9B%90-5865c7?style=for-the-badge" alt="iPhone · Android · PC 지원">
|
|
9
9
|
<img src="https://img.shields.io/badge/%EA%B4%91%EA%B3%A0%C2%B7%EC%B6%94%EC%A0%81-%EC%97%86%EC%9D%8C-2e7d5b?style=for-the-badge" alt="광고·추적 없음">
|
|
10
10
|
<a href="https://fairy.hada.io/@jinny#support"><img src="https://img.shields.io/badge/Fairy-%ED%9B%84%EC%9B%90%ED%95%98%EA%B8%B0-ff6fb5?style=for-the-badge&logo=githubsponsors&logoColor=white" alt="Fairy로 후원하기"></a>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// @name DCInside Enhancer
|
|
3
3
|
// @name:ko 디시 인핸서
|
|
4
4
|
// @namespace https://github.com/kangsicj/DCInsideEnhancer
|
|
5
|
-
// @version 1.2.
|
|
5
|
+
// @version 1.2.1
|
|
6
6
|
// @description DCInside filter & enhancer — mobile & PC. Block users/words/heads/notices/images & GIFs across posts, infinite list, zoom viewer, theme sync, encrypted multi-device sync.
|
|
7
7
|
// @description:ko 디시인사이드 차단·편의 기능 (모바일·PC) - 유저·단어(제목/본문)·말머리·공지 차단, 같은/비슷한 이미지·움짤 모든 글 차단, 디시콘 제거, 차단 미디어 데이터 절약, 목록 자동 보충·무한 스크롤·뒤로 가기 위치 복원, 스크랩, 이미지 확대뷰 개선, 야간모드 자동 연동, 암호화 기기 간 동기화
|
|
8
8
|
// @author kangsicj
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// @name DCInside Enhancer
|
|
3
3
|
// @name:ko 디시 인핸서
|
|
4
4
|
// @namespace https://github.com/kangsicj/DCInsideEnhancer
|
|
5
|
-
// @version 1.2.
|
|
5
|
+
// @version 1.2.1
|
|
6
6
|
// @description DCInside filter & enhancer — mobile & PC. Block users/words/heads/notices/images & GIFs across posts, infinite list, zoom viewer, theme sync, encrypted multi-device sync.
|
|
7
7
|
// @description:ko 디시인사이드 차단·편의 기능 (모바일·PC) - 유저·단어(제목/본문)·말머리·공지 차단, 같은/비슷한 이미지·움짤 모든 글 차단, 디시콘 제거, 차단 미디어 데이터 절약, 목록 자동 보충·무한 스크롤·뒤로 가기 위치 복원, 스크랩, 이미지 확대뷰 개선, 야간모드 자동 연동, 암호화 기기 간 동기화
|
|
8
8
|
// @author kangsicj
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
// 0. 설정·상수
|
|
76
76
|
// =========================================================
|
|
77
77
|
|
|
78
|
-
const SCRIPT_VERSION = '1.2.
|
|
78
|
+
const SCRIPT_VERSION = '1.2.1';
|
|
79
79
|
const PROJECT_URL = 'https://github.com/kangsicj/DCInsideEnhancer';
|
|
80
80
|
const DONATE_URL = 'https://fairy.hada.io/@jinny#support';
|
|
81
81
|
|
|
@@ -412,67 +412,76 @@
|
|
|
412
412
|
html.dc-home-media-off .main-wrapping section.grid.media-group { display: none !important; }
|
|
413
413
|
html.dc-footer-info-off footer.footer > .ft-btm { display: none !important; }
|
|
414
414
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
width: auto !important;
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
html.dc-pc-fit .dcwrap
|
|
415
|
+
@media (max-width: 1519.98px) {
|
|
416
|
+
html.dc-pc-fit { --dc-fit-gap: clamp(10px, 1.6vw, 24px); }
|
|
417
|
+
html.dc-pc-fit body,
|
|
418
|
+
html.dc-pc-fit .dcwrap { min-width: 0 !important; }
|
|
419
|
+
html.dc-pc-fit body { overflow-x: hidden; }
|
|
420
|
+
html.dc-pc-fit .dcwrap .dchead,
|
|
421
|
+
html.dc-pc-fit .dcwrap .gnb,
|
|
422
|
+
html.dc-pc-fit .dcwrap .gnb_depth2_list,
|
|
423
|
+
html.dc-pc-fit .dcwrap .info_policy,
|
|
424
|
+
html.dc-pc-fit .dcwrap .copyright,
|
|
425
|
+
html.dc-pc-fit .dcwrap .visit_bookmark {
|
|
426
|
+
width: auto !important;
|
|
427
|
+
max-width: none !important;
|
|
428
|
+
margin-left: var(--dc-fit-gap) !important;
|
|
429
|
+
margin-right: var(--dc-fit-gap) !important;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
html.dc-pc-fit .dcwrap .gnb_bar { min-width: 0 !important; width: auto !important; margin: 0 !important; }
|
|
433
|
+
html.dc-pc-fit .dcwrap .gnb_list,
|
|
434
|
+
html.dc-pc-fit .dcwrap .dc_all,
|
|
435
|
+
html.dc-pc-fit .dcwrap .wrap_inner { width: auto !important; }
|
|
436
|
+
html.dc-pc-fit .dcwrap #container {
|
|
437
|
+
width: auto !important;
|
|
438
|
+
margin-left: var(--dc-fit-gap) !important;
|
|
439
|
+
margin-right: var(--dc-fit-gap) !important;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
html.dc-pc-fit .dcwrap :is(#container, .main_content, #bottom_listwrap) > .right_content { display: none !important; }
|
|
443
|
+
html.dc-pc-fit .dcwrap :is(#container, .main_content, #bottom_listwrap) > .left_content {
|
|
444
|
+
float: none !important;
|
|
445
|
+
width: auto !important;
|
|
446
|
+
max-width: none !important;
|
|
447
|
+
min-width: 0;
|
|
448
|
+
}
|
|
449
|
+
html.dc-pc-fit .dcwrap .main_content { width: auto !important; }
|
|
450
|
+
|
|
451
|
+
html.dc-pc-fit .dcwrap :is(.view_content_wrap, .gallview_head, .writing_view_box, .view_comment, .comment_wrap,
|
|
452
|
+
.comment_box, .cmt_write_box, #bottom_listwrap, .listwrap, .gall_listwrap, .page_head, .issuebox,
|
|
453
|
+
.newvisit_history, .trendalign, .bottom_paging_wrap, .bottom_paging_box, .bottom_search, .btn_recommend_box) {
|
|
454
|
+
width: auto !important;
|
|
455
|
+
max-width: 100% !important;
|
|
456
|
+
box-sizing: border-box;
|
|
457
|
+
}
|
|
458
|
+
html.dc-pc-fit .dcwrap .write_div { max-width: 100% !important; }
|
|
459
|
+
html.dc-pc-fit .dcwrap .write_div img,
|
|
460
|
+
html.dc-pc-fit .dcwrap .write_div video,
|
|
461
|
+
html.dc-pc-fit .dcwrap .write_div iframe { max-width: 100% !important; }
|
|
462
|
+
html.dc-pc-fit .dcwrap .list_array_option { width: 100% !important; }
|
|
463
|
+
html.dc-pc-fit .dcwrap .stickyunit { display: none !important; }
|
|
464
|
+
html.dc-pc-fit .dcwrap .darkmodebox .pop_tipbox { left: auto !important; right: 0 !important; }
|
|
465
|
+
|
|
466
|
+
html.dc-pc-fit .dcwrap .cmt_info { display: flex !important; align-items: flex-start; }
|
|
467
|
+
html.dc-pc-fit .dcwrap .cmt_info::before,
|
|
468
|
+
html.dc-pc-fit .dcwrap .cmt_info::after { display: none !important; }
|
|
469
|
+
html.dc-pc-fit .dcwrap .cmt_info > .addbox { display: flex; flex: 1 1 auto; min-width: 0; width: auto !important; }
|
|
470
|
+
html.dc-pc-fit .dcwrap .cmt_info > .addbox > .cmt_nickbox { flex: 0 0 auto; float: none !important; }
|
|
471
|
+
html.dc-pc-fit .dcwrap .cmt_info > .addbox > .cmt_txtbox { flex: 1 1 auto; min-width: 0; float: none !important; width: auto !important; }
|
|
472
|
+
html.dc-pc-fit .dcwrap .cmt_info .cmt_txtbox .usertxt { float: none !important; width: auto !important; max-width: 100% !important; }
|
|
473
|
+
html.dc-pc-fit .dcwrap .cmt_info > .fr { flex: 0 0 auto; float: none !important; margin-left: 10px; }
|
|
474
|
+
|
|
475
|
+
html.dc-pc-fit .dcwrap .cmt_write_box > .fl { width: 142px; }
|
|
476
|
+
html.dc-pc-fit .dcwrap .cmt_write_box > .cmt_txt_cont {
|
|
477
|
+
float: right !important;
|
|
478
|
+
width: calc(100% - 158px) !important;
|
|
479
|
+
}
|
|
480
|
+
html.dc-pc-fit .dcwrap .cmt_write_box > .cmt_txt_cont .cmt_write,
|
|
481
|
+
html.dc-pc-fit .dcwrap .cmt_write_box > .cmt_txt_cont textarea,
|
|
482
|
+
html.dc-pc-fit .dcwrap .cmt_write_box > .cmt_txt_cont .cmt_cont_bottm { width: 100% !important; box-sizing: border-box; }
|
|
483
|
+
|
|
484
|
+
html.dc-pc-fit .dcwrap .cmt_write_box:not(:has(> .fl)) > .cmt_txt_cont { width: 100% !important; }
|
|
476
485
|
}
|
|
477
486
|
|
|
478
487
|
html.dc-footer-info-off .dcwrap footer.dcfoot,
|
|
@@ -1856,40 +1865,52 @@
|
|
|
1856
1865
|
|
|
1857
1866
|
#dc-preview {
|
|
1858
1867
|
position: fixed;
|
|
1868
|
+
top: 50%;
|
|
1869
|
+
left: 50%;
|
|
1859
1870
|
z-index: 99997;
|
|
1860
1871
|
display: flex;
|
|
1861
1872
|
flex-direction: column;
|
|
1862
1873
|
box-sizing: border-box;
|
|
1874
|
+
width: clamp(520px, 52vw, 980px);
|
|
1875
|
+
height: clamp(420px, 84vh, 1100px);
|
|
1876
|
+
max-width: calc(100vw - 32px);
|
|
1877
|
+
max-height: calc(100vh - 32px);
|
|
1863
1878
|
border: 1px solid var(--dc-border);
|
|
1864
|
-
border-radius:
|
|
1879
|
+
border-radius: 16px;
|
|
1880
|
+
overflow: hidden;
|
|
1865
1881
|
background: var(--dc-surface);
|
|
1866
1882
|
color: var(--dc-text);
|
|
1867
|
-
box-shadow: var(--dc-shadow);
|
|
1883
|
+
box-shadow: 0 18px 60px rgba(0,0,0,.28), var(--dc-shadow);
|
|
1868
1884
|
font-size: 14px;
|
|
1869
|
-
line-height: 1.
|
|
1885
|
+
line-height: 1.6;
|
|
1870
1886
|
opacity: 0;
|
|
1871
1887
|
visibility: hidden;
|
|
1872
1888
|
pointer-events: none;
|
|
1873
|
-
transform:
|
|
1874
|
-
transition: opacity .
|
|
1889
|
+
transform: translate(-50%, -50%) scale(.97);
|
|
1890
|
+
transition: opacity .16s ease, transform .16s ease, visibility 0s linear .16s;
|
|
1875
1891
|
}
|
|
1876
1892
|
|
|
1877
1893
|
#dc-preview.show {
|
|
1878
1894
|
opacity: 1;
|
|
1879
1895
|
visibility: visible;
|
|
1880
1896
|
pointer-events: auto;
|
|
1881
|
-
transform:
|
|
1882
|
-
transition: opacity .
|
|
1897
|
+
transform: translate(-50%, -50%);
|
|
1898
|
+
transition: opacity .16s ease, transform .16s ease, visibility 0s;
|
|
1883
1899
|
}
|
|
1884
1900
|
|
|
1885
1901
|
#dc-preview .dc-pv-head {
|
|
1886
1902
|
flex: 0 0 auto;
|
|
1887
|
-
padding: 14px
|
|
1903
|
+
padding: 14px 18px 10px;
|
|
1888
1904
|
border-bottom: 1px solid var(--dc-border);
|
|
1905
|
+
background: var(--dc-surface);
|
|
1889
1906
|
}
|
|
1890
1907
|
|
|
1891
1908
|
#dc-preview .dc-pv-title {
|
|
1892
|
-
|
|
1909
|
+
display: -webkit-box;
|
|
1910
|
+
overflow: hidden;
|
|
1911
|
+
-webkit-line-clamp: 2;
|
|
1912
|
+
-webkit-box-orient: vertical;
|
|
1913
|
+
font-size: 16px;
|
|
1893
1914
|
font-weight: 800;
|
|
1894
1915
|
line-height: 1.4;
|
|
1895
1916
|
word-break: break-all;
|
|
@@ -1906,21 +1927,25 @@
|
|
|
1906
1927
|
flex-wrap: wrap;
|
|
1907
1928
|
align-items: center;
|
|
1908
1929
|
gap: 6px;
|
|
1909
|
-
margin-top:
|
|
1930
|
+
margin-top: 9px;
|
|
1910
1931
|
}
|
|
1911
1932
|
|
|
1933
|
+
#dc-preview .dc-pv-hint { margin-left: auto; color: var(--dc-text-dim); font-size: 11.5px; }
|
|
1934
|
+
#dc-preview .dc-pv-notes:empty { display: none; }
|
|
1935
|
+
#dc-preview .dc-pv-notes { margin-top: 6px; }
|
|
1936
|
+
|
|
1912
1937
|
#dc-preview .dc-btn {
|
|
1913
1938
|
display: inline-flex;
|
|
1914
1939
|
align-items: center;
|
|
1915
1940
|
justify-content: center;
|
|
1916
1941
|
box-sizing: border-box;
|
|
1917
|
-
height:
|
|
1918
|
-
padding: 0
|
|
1942
|
+
height: 30px;
|
|
1943
|
+
padding: 0 12px;
|
|
1919
1944
|
border: 1px solid var(--dc-border);
|
|
1920
1945
|
border-radius: 999px;
|
|
1921
1946
|
background: var(--dc-surface-2);
|
|
1922
1947
|
color: var(--dc-text);
|
|
1923
|
-
font-size:
|
|
1948
|
+
font-size: 12.5px;
|
|
1924
1949
|
font-weight: 700;
|
|
1925
1950
|
line-height: 1;
|
|
1926
1951
|
text-decoration: none;
|
|
@@ -1928,43 +1953,37 @@
|
|
|
1928
1953
|
}
|
|
1929
1954
|
|
|
1930
1955
|
#dc-preview .dc-btn:hover { border-color: var(--dc-accent-ink); color: var(--dc-accent-ink); }
|
|
1956
|
+
#dc-preview .dc-btn.primary { border-color: var(--dc-accent); background: var(--dc-accent); color: var(--dc-on-accent); }
|
|
1957
|
+
#dc-preview .dc-btn.primary:hover { color: var(--dc-on-accent); filter: brightness(1.08); }
|
|
1931
1958
|
#dc-preview .dc-btn.danger-ghost { color: var(--dc-danger-ink); }
|
|
1932
|
-
#dc-preview .dc-btn.dc-pv-close {
|
|
1959
|
+
#dc-preview .dc-btn.dc-pv-close { width: 30px; padding: 0; font-size: 14px; }
|
|
1933
1960
|
|
|
1934
1961
|
#dc-preview .dc-pv-body {
|
|
1962
|
+
position: relative;
|
|
1963
|
+
display: flex;
|
|
1964
|
+
flex-direction: column;
|
|
1935
1965
|
flex: 1 1 auto;
|
|
1936
|
-
min-height:
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
#dc-preview .dc-pv-body .write_div,
|
|
1948
|
-
#dc-preview .dc-pv-body [style*="width"] { width: auto !important; max-width: 100% !important; }
|
|
1949
|
-
#dc-preview .dc-pv-body * { white-space: normal !important; }
|
|
1950
|
-
#dc-preview .dc-pv-body pre, #dc-preview .dc-pv-body pre * { white-space: pre-wrap !important; }
|
|
1951
|
-
#dc-preview .dc-pv-body a { color: var(--dc-accent-ink); }
|
|
1952
|
-
#dc-preview .dc-pv-body table { max-width: 100%; }
|
|
1953
|
-
|
|
1954
|
-
html.dc-dark #dc-preview .dc-pv-body [style*="background"] { background: transparent !important; }
|
|
1955
|
-
html.dc-dark #dc-preview .dc-pv-body [style*="color: rgb(0, 0, 0)"],
|
|
1956
|
-
html.dc-dark #dc-preview .dc-pv-body [style*="color:#000"],
|
|
1957
|
-
html.dc-dark #dc-preview .dc-pv-body [style*="color: #000"],
|
|
1958
|
-
html.dc-dark #dc-preview .dc-pv-body [style*="color:black"],
|
|
1959
|
-
html.dc-dark #dc-preview .dc-pv-body font[color="#000000"] { color: inherit !important; }
|
|
1966
|
+
min-height: 0;
|
|
1967
|
+
background: var(--dc-surface);
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
#dc-preview .dc-pv-frame {
|
|
1971
|
+
flex: 1 1 auto;
|
|
1972
|
+
width: 100%;
|
|
1973
|
+
min-height: 0;
|
|
1974
|
+
border: 0;
|
|
1975
|
+
background: var(--dc-surface);
|
|
1976
|
+
}
|
|
1960
1977
|
|
|
1961
1978
|
#dc-preview .dc-pv-loading,
|
|
1962
1979
|
#dc-preview .dc-pv-note {
|
|
1963
|
-
padding:
|
|
1980
|
+
padding: 12px 18px;
|
|
1964
1981
|
color: var(--dc-text-dim);
|
|
1965
1982
|
font-size: 13px;
|
|
1966
1983
|
}
|
|
1967
1984
|
|
|
1985
|
+
#dc-preview .dc-pv-notes .dc-pv-note { padding: 0; font-size: 12px; }
|
|
1986
|
+
|
|
1968
1987
|
#dc-preview .dc-pv-loading::before {
|
|
1969
1988
|
content: '';
|
|
1970
1989
|
display: inline-block;
|
|
@@ -1985,6 +2004,7 @@
|
|
|
1985
2004
|
flex-wrap: wrap;
|
|
1986
2005
|
align-items: center;
|
|
1987
2006
|
gap: 8px;
|
|
2007
|
+
margin: 14px 18px;
|
|
1988
2008
|
padding: 10px 12px;
|
|
1989
2009
|
border-radius: 10px;
|
|
1990
2010
|
background: var(--dc-danger-soft);
|
|
@@ -1993,18 +2013,6 @@
|
|
|
1993
2013
|
font-weight: 700;
|
|
1994
2014
|
}
|
|
1995
2015
|
|
|
1996
|
-
#dc-preview .dc-pv-blocked {
|
|
1997
|
-
margin: 6px 0;
|
|
1998
|
-
padding: 14px;
|
|
1999
|
-
border: 1px dashed var(--dc-border);
|
|
2000
|
-
border-radius: 8px;
|
|
2001
|
-
color: var(--dc-text-dim);
|
|
2002
|
-
font-size: 12px;
|
|
2003
|
-
text-align: center;
|
|
2004
|
-
}
|
|
2005
|
-
|
|
2006
|
-
#dc-preview .dc-pv-embed { display: inline-block; margin: 6px 0; font-weight: 700; }
|
|
2007
|
-
|
|
2008
2016
|
.dc-pv-anchor { text-decoration: underline !important; text-decoration-color: var(--dc-accent-ink) !important; }
|
|
2009
2017
|
|
|
2010
2018
|
.dc-key-cursor { outline: 2px solid var(--dc-accent-ink) !important; outline-offset: -2px; background: var(--dc-accent-soft) !important; }
|
|
@@ -14296,6 +14304,10 @@
|
|
|
14296
14304
|
let keyCursor = null;
|
|
14297
14305
|
|
|
14298
14306
|
const moveKeyCursor = step => {
|
|
14307
|
+
if (previewOpen()) {
|
|
14308
|
+
closePreview();
|
|
14309
|
+
}
|
|
14310
|
+
|
|
14299
14311
|
const rows = visibleListRows();
|
|
14300
14312
|
|
|
14301
14313
|
if (!rows.length) {
|
|
@@ -14696,18 +14708,23 @@
|
|
|
14696
14708
|
// =========================================================
|
|
14697
14709
|
|
|
14698
14710
|
const PREVIEW_DELAY = 450;
|
|
14711
|
+
const PREVIEW_CLOSE_DELAY = 380;
|
|
14699
14712
|
const PREVIEW_CACHE_MS = 5 * 60 * 1000;
|
|
14700
14713
|
const PREVIEW_CACHE_MAX = 30;
|
|
14701
14714
|
const PREVIEW_TITLE_SELECTOR = 'table.gall_list td.gall_tit > a:not(.reply_numbox)';
|
|
14715
|
+
const PREVIEW_MOVIE_RE = /^https:\/\/gall\.dcinside\.com\/board\/movie\//i;
|
|
14702
14716
|
|
|
14703
14717
|
const previewCache = new Map();
|
|
14704
14718
|
let previewEl = null;
|
|
14705
14719
|
let previewKey = '';
|
|
14720
|
+
let previewHref = '';
|
|
14706
14721
|
let previewAnchor = null;
|
|
14707
14722
|
let previewHoverTimer = null;
|
|
14708
14723
|
let previewCloseTimer = null;
|
|
14724
|
+
let previewThemeObserver = null;
|
|
14709
14725
|
|
|
14710
14726
|
const previewEnabled = () => IS_PC_SITE && settings.hoverPreview !== false;
|
|
14727
|
+
const previewOpen = () => !!previewEl && previewEl.classList.contains('show');
|
|
14711
14728
|
|
|
14712
14729
|
const ensurePreviewEl = () => {
|
|
14713
14730
|
if (previewEl && previewEl.isConnected) {
|
|
@@ -14723,6 +14740,7 @@
|
|
|
14723
14740
|
'<div class="dc-pv-title"></div>' +
|
|
14724
14741
|
'<div class="dc-pv-meta"></div>' +
|
|
14725
14742
|
'<div class="dc-pv-actions"></div>' +
|
|
14743
|
+
'<div class="dc-pv-notes"></div>' +
|
|
14726
14744
|
'</div>' +
|
|
14727
14745
|
'<div class="dc-pv-body"></div>';
|
|
14728
14746
|
previewEl.addEventListener('mouseenter', () => clearTimeout(previewCloseTimer));
|
|
@@ -14732,40 +14750,21 @@
|
|
|
14732
14750
|
return previewEl;
|
|
14733
14751
|
};
|
|
14734
14752
|
|
|
14735
|
-
const
|
|
14736
|
-
|
|
14737
|
-
|
|
14738
|
-
const vw = window.innerWidth;
|
|
14739
|
-
const vh = window.innerHeight;
|
|
14740
|
-
const width = Math.min(640, Math.max(360, Math.round(vw * 0.42)));
|
|
14741
|
-
const height = Math.min(Math.round(vh * 0.78), 860);
|
|
14742
|
-
|
|
14743
|
-
el.style.width = `${width}px`;
|
|
14744
|
-
el.style.maxHeight = `${height}px`;
|
|
14745
|
-
|
|
14746
|
-
let left = rect.right + 16;
|
|
14747
|
-
|
|
14748
|
-
if (left + width > vw - 12) {
|
|
14749
|
-
left = Math.max(12, rect.left - width - 16);
|
|
14750
|
-
}
|
|
14751
|
-
|
|
14752
|
-
if (left + width > vw - 12) {
|
|
14753
|
-
left = Math.max(12, vw - width - 12);
|
|
14754
|
-
}
|
|
14755
|
-
|
|
14756
|
-
const top = Math.min(Math.max(12, rect.top - 60), Math.max(12, vh - height - 12));
|
|
14757
|
-
|
|
14758
|
-
el.style.left = `${Math.round(left)}px`;
|
|
14759
|
-
el.style.top = `${Math.round(top)}px`;
|
|
14753
|
+
const stopPreviewTheme = () => {
|
|
14754
|
+
previewThemeObserver?.disconnect();
|
|
14755
|
+
previewThemeObserver = null;
|
|
14760
14756
|
};
|
|
14761
14757
|
|
|
14762
14758
|
const closePreview = () => {
|
|
14763
14759
|
clearTimeout(previewHoverTimer);
|
|
14764
14760
|
clearTimeout(previewCloseTimer);
|
|
14761
|
+
stopPreviewTheme();
|
|
14765
14762
|
|
|
14766
14763
|
if (previewEl) {
|
|
14767
14764
|
previewEl.classList.remove('show');
|
|
14765
|
+
|
|
14768
14766
|
previewEl.querySelector('.dc-pv-body').textContent = '';
|
|
14767
|
+
previewEl.querySelector('.dc-pv-notes').textContent = '';
|
|
14769
14768
|
}
|
|
14770
14769
|
|
|
14771
14770
|
previewAnchor?.classList.remove('dc-pv-anchor');
|
|
@@ -14775,57 +14774,53 @@
|
|
|
14775
14774
|
|
|
14776
14775
|
const schedulePreviewClose = () => {
|
|
14777
14776
|
clearTimeout(previewCloseTimer);
|
|
14778
|
-
previewCloseTimer = setTimeout(closePreview,
|
|
14777
|
+
previewCloseTimer = setTimeout(closePreview, PREVIEW_CLOSE_DELAY);
|
|
14779
14778
|
};
|
|
14780
14779
|
|
|
14781
|
-
|
|
14782
|
-
|
|
14783
|
-
const withPostReferrer = (href, fn) => {
|
|
14784
|
-
const back = location.href;
|
|
14785
|
-
let swapped = false;
|
|
14780
|
+
const goToPreviewPost = () => {
|
|
14781
|
+
const href = previewHref;
|
|
14786
14782
|
|
|
14787
|
-
|
|
14788
|
-
const target = new URL(href, location.href);
|
|
14783
|
+
closePreview();
|
|
14789
14784
|
|
|
14790
|
-
|
|
14791
|
-
|
|
14792
|
-
swapped = true;
|
|
14793
|
-
}
|
|
14794
|
-
} catch {
|
|
14795
|
-
}
|
|
14796
|
-
|
|
14797
|
-
try {
|
|
14798
|
-
return fn();
|
|
14799
|
-
} finally {
|
|
14800
|
-
if (swapped) {
|
|
14801
|
-
setTimeout(() => {
|
|
14802
|
-
try {
|
|
14803
|
-
history.replaceState(history.state, '', back);
|
|
14804
|
-
} catch {
|
|
14805
|
-
}
|
|
14806
|
-
}, 60);
|
|
14807
|
-
}
|
|
14785
|
+
if (href) {
|
|
14786
|
+
location.href = href;
|
|
14808
14787
|
}
|
|
14809
14788
|
};
|
|
14810
14789
|
|
|
14811
|
-
const cleanPreviewBody = source =>
|
|
14812
|
-
|
|
14813
|
-
const cleanPreviewBodyRaw = source => {
|
|
14814
|
-
const body = document.importNode(source, true);
|
|
14790
|
+
const cleanPreviewBody = source => {
|
|
14791
|
+
const body = source.cloneNode(true);
|
|
14815
14792
|
let hiddenMedia = 0;
|
|
14816
14793
|
|
|
14817
|
-
body.
|
|
14818
|
-
if (node.tagName === 'IFRAME') {
|
|
14819
|
-
const src = node.getAttribute('src') || '';
|
|
14820
|
-
const link = document.createElement('a');
|
|
14794
|
+
body.removeAttribute('style');
|
|
14821
14795
|
|
|
14822
|
-
|
|
14823
|
-
|
|
14824
|
-
|
|
14825
|
-
|
|
14826
|
-
|
|
14827
|
-
|
|
14796
|
+
body.querySelectorAll('script, style, link, object, embed, form, noscript, .dc-ui, #zzbang_div').forEach(node => node.remove());
|
|
14797
|
+
|
|
14798
|
+
body.querySelectorAll('iframe').forEach(node => {
|
|
14799
|
+
let src = node.getAttribute('src') || '';
|
|
14800
|
+
|
|
14801
|
+
try {
|
|
14802
|
+
src = new URL(src, 'https://gall.dcinside.com/').href;
|
|
14803
|
+
} catch {
|
|
14804
|
+
src = '';
|
|
14805
|
+
}
|
|
14806
|
+
|
|
14807
|
+
if (PREVIEW_MOVIE_RE.test(src)) {
|
|
14808
|
+
node.setAttribute('src', src);
|
|
14809
|
+
node.removeAttribute('style');
|
|
14810
|
+
node.removeAttribute('width');
|
|
14811
|
+
node.removeAttribute('height');
|
|
14812
|
+
node.setAttribute('allowfullscreen', '');
|
|
14813
|
+
node.setAttribute('allow', 'autoplay; fullscreen; picture-in-picture');
|
|
14814
|
+
node.className = 'dc-pv-movie';
|
|
14815
|
+
return;
|
|
14828
14816
|
}
|
|
14817
|
+
|
|
14818
|
+
const link = body.ownerDocument.createElement('a');
|
|
14819
|
+
|
|
14820
|
+
link.href = src;
|
|
14821
|
+
link.textContent = '🎬 삽입된 동영상 열기';
|
|
14822
|
+
link.className = 'dc-pv-embed';
|
|
14823
|
+
node.replaceWith(link);
|
|
14829
14824
|
});
|
|
14830
14825
|
|
|
14831
14826
|
body.querySelectorAll('*').forEach(node => {
|
|
@@ -14837,9 +14832,9 @@
|
|
|
14837
14832
|
});
|
|
14838
14833
|
|
|
14839
14834
|
body.querySelectorAll('img, video').forEach(media => {
|
|
14840
|
-
const lazy = media.getAttribute('data-original') || media.getAttribute('data-src');
|
|
14835
|
+
const lazy = media.getAttribute('data-original') || media.getAttribute('data-src') || media.getAttribute('data-lazy-src');
|
|
14841
14836
|
|
|
14842
|
-
if (lazy &&
|
|
14837
|
+
if (media.tagName === 'IMG' && lazy && /^https?:\/\//.test(lazy)) {
|
|
14843
14838
|
media.setAttribute('src', lazy);
|
|
14844
14839
|
}
|
|
14845
14840
|
|
|
@@ -14853,10 +14848,8 @@
|
|
|
14853
14848
|
return;
|
|
14854
14849
|
}
|
|
14855
14850
|
|
|
14856
|
-
|
|
14857
|
-
|
|
14858
|
-
if (blocked) {
|
|
14859
|
-
const stub = document.createElement('div');
|
|
14851
|
+
if (findBlockedMediaKey(resolveMediaIds(media, candidates))) {
|
|
14852
|
+
const stub = body.ownerDocument.createElement('div');
|
|
14860
14853
|
|
|
14861
14854
|
stub.className = 'dc-pv-blocked';
|
|
14862
14855
|
stub.textContent = '🚫 차단한 이미지';
|
|
@@ -14870,18 +14863,134 @@
|
|
|
14870
14863
|
media.removeAttribute('height');
|
|
14871
14864
|
|
|
14872
14865
|
if (media.tagName === 'VIDEO') {
|
|
14873
|
-
media.setAttribute('
|
|
14874
|
-
|
|
14875
|
-
media.
|
|
14866
|
+
media.setAttribute('playsinline', '');
|
|
14867
|
+
|
|
14868
|
+
if (media.hasAttribute('loop') && media.hasAttribute('muted')) {
|
|
14869
|
+
media.setAttribute('autoplay', '');
|
|
14870
|
+
media.muted = true;
|
|
14871
|
+
} else {
|
|
14872
|
+
media.removeAttribute('autoplay');
|
|
14873
|
+
media.setAttribute('controls', '');
|
|
14874
|
+
media.setAttribute('preload', 'metadata');
|
|
14875
|
+
}
|
|
14876
14876
|
}
|
|
14877
14877
|
});
|
|
14878
14878
|
|
|
14879
|
-
body
|
|
14880
|
-
|
|
14881
|
-
|
|
14879
|
+
return { body, hiddenMedia };
|
|
14880
|
+
};
|
|
14881
|
+
|
|
14882
|
+
const previewFrameCss = () => {
|
|
14883
|
+
const root = getComputedStyle(document.documentElement);
|
|
14884
|
+
const token = name => root.getPropertyValue(name).trim();
|
|
14885
|
+
const font = getComputedStyle(document.body).fontFamily || 'sans-serif';
|
|
14886
|
+
const dark = document.documentElement.classList.contains('dc-dark');
|
|
14887
|
+
|
|
14888
|
+
return `
|
|
14889
|
+
html { color-scheme: ${dark ? 'dark' : 'light'}; }
|
|
14890
|
+
html, body { margin: 0; padding: 0; background: ${token('--dc-surface')}; color: ${token('--dc-text')}; }
|
|
14891
|
+
body { padding: 14px 18px 28px; font: 14px/1.7 ${font}; word-break: break-word; overflow-wrap: anywhere; cursor: pointer; }
|
|
14892
|
+
::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-thumb { background: ${token('--dc-border')}; border-radius: 4px; }
|
|
14893
|
+
* { max-width: 100% !important; box-sizing: border-box; white-space: normal !important; }
|
|
14894
|
+
pre, pre * { white-space: pre-wrap !important; }
|
|
14895
|
+
[style*="width"] { width: auto !important; }
|
|
14896
|
+
p { margin: 0 0 4px; }
|
|
14897
|
+
img, video { display: block; height: auto !important; margin: 6px 0; border-radius: 6px; }
|
|
14898
|
+
a { color: ${token('--dc-accent-ink')}; cursor: pointer; }
|
|
14899
|
+
video, iframe, a, button { cursor: auto; }
|
|
14900
|
+
a { cursor: pointer; }
|
|
14901
|
+
.dc-pv-movie { display: block; width: 100% !important; aspect-ratio: 16 / 9; height: auto; border: 0; border-radius: 8px; background: #000; }
|
|
14902
|
+
.dc-pv-embed { display: inline-block; margin: 6px 0; font-weight: 700; }
|
|
14903
|
+
.dc-pv-blocked { margin: 6px 0; padding: 14px; border: 1px dashed ${token('--dc-border')}; border-radius: 8px; color: ${token('--dc-text-dim')}; font-size: 12px; text-align: center; }
|
|
14904
|
+
${dark ? `[style*="background"] { background: transparent !important; }
|
|
14905
|
+
[style*="color: rgb(0, 0, 0)"], [style*="color:#000"], [style*="color: #000"], [style*="color:black"], font[color="#000000"] { color: inherit !important; }` : ''}
|
|
14906
|
+
`;
|
|
14907
|
+
};
|
|
14908
|
+
|
|
14909
|
+
const mountPreviewFrame = (container, data, href) => {
|
|
14910
|
+
const { body, hiddenMedia } = cleanPreviewBody(data.source);
|
|
14911
|
+
const frame = document.createElement('iframe');
|
|
14912
|
+
|
|
14913
|
+
frame.className = 'dc-pv-frame';
|
|
14914
|
+
frame.setAttribute('title', '글 본문');
|
|
14915
|
+
container.appendChild(frame);
|
|
14916
|
+
|
|
14917
|
+
const win = frame.contentWindow;
|
|
14918
|
+
const doc = frame.contentDocument;
|
|
14919
|
+
|
|
14920
|
+
if (!win || !doc) {
|
|
14921
|
+
return hiddenMedia;
|
|
14922
|
+
}
|
|
14923
|
+
|
|
14924
|
+
doc.open();
|
|
14925
|
+
doc.write('<!doctype html><html><head><meta charset="utf-8"><base target="_blank"><style id="dc-pv-css"></style></head><body></body></html>');
|
|
14926
|
+
doc.close();
|
|
14927
|
+
|
|
14928
|
+
try {
|
|
14929
|
+
const target = new URL(href, location.href);
|
|
14930
|
+
|
|
14931
|
+
win.history.replaceState(null, '', target.pathname + target.search);
|
|
14932
|
+
} catch {
|
|
14933
|
+
}
|
|
14934
|
+
|
|
14935
|
+
doc.getElementById('dc-pv-css').textContent = previewFrameCss();
|
|
14936
|
+
doc.body.appendChild(doc.importNode(body, true));
|
|
14937
|
+
|
|
14938
|
+
doc.querySelectorAll('video[data-src]').forEach(video => {
|
|
14939
|
+
const gif = video.getAttribute('data-src');
|
|
14940
|
+
let swapped = false;
|
|
14941
|
+
const toGif = () => {
|
|
14942
|
+
if (swapped || !video.isConnected) {
|
|
14943
|
+
return;
|
|
14944
|
+
}
|
|
14945
|
+
|
|
14946
|
+
swapped = true;
|
|
14947
|
+
|
|
14948
|
+
const img = doc.createElement('img');
|
|
14949
|
+
|
|
14950
|
+
img.src = gif;
|
|
14951
|
+
img.alt = '움짤';
|
|
14952
|
+
video.replaceWith(img);
|
|
14953
|
+
};
|
|
14954
|
+
|
|
14955
|
+
if (!video.canPlayType('video/mp4')) {
|
|
14956
|
+
toGif();
|
|
14957
|
+
return;
|
|
14958
|
+
}
|
|
14959
|
+
|
|
14960
|
+
video.addEventListener('error', toGif, true);
|
|
14961
|
+
video.querySelectorAll('source').forEach(source => source.addEventListener('error', toGif));
|
|
14882
14962
|
});
|
|
14883
14963
|
|
|
14884
|
-
|
|
14964
|
+
doc.addEventListener('click', event => {
|
|
14965
|
+
const target = event.target;
|
|
14966
|
+
|
|
14967
|
+
if (target && target.closest && target.closest('a[href], video, iframe, button, input, textarea, select, summary')) {
|
|
14968
|
+
return;
|
|
14969
|
+
}
|
|
14970
|
+
|
|
14971
|
+
event.preventDefault();
|
|
14972
|
+
goToPreviewPost();
|
|
14973
|
+
});
|
|
14974
|
+
|
|
14975
|
+
doc.addEventListener('keydown', event => {
|
|
14976
|
+
if (event.key === 'Escape') {
|
|
14977
|
+
closePreview();
|
|
14978
|
+
}
|
|
14979
|
+
});
|
|
14980
|
+
|
|
14981
|
+
doc.documentElement.style.overscrollBehavior = 'contain';
|
|
14982
|
+
|
|
14983
|
+
stopPreviewTheme();
|
|
14984
|
+
previewThemeObserver = new MutationObserver(() => {
|
|
14985
|
+
const css = doc.getElementById('dc-pv-css');
|
|
14986
|
+
|
|
14987
|
+
if (css) {
|
|
14988
|
+
css.textContent = previewFrameCss();
|
|
14989
|
+
}
|
|
14990
|
+
});
|
|
14991
|
+
previewThemeObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
|
|
14992
|
+
|
|
14993
|
+
return hiddenMedia;
|
|
14885
14994
|
};
|
|
14886
14995
|
|
|
14887
14996
|
const readPreviewDoc = (html, key) => {
|
|
@@ -14917,17 +15026,17 @@
|
|
|
14917
15026
|
|
|
14918
15027
|
const renderPreview = (data, href, key) => {
|
|
14919
15028
|
const el = ensurePreviewEl();
|
|
14920
|
-
|
|
14921
|
-
previewHref = href;
|
|
14922
15029
|
const titleEl = el.querySelector('.dc-pv-title');
|
|
14923
15030
|
const metaEl = el.querySelector('.dc-pv-meta');
|
|
14924
15031
|
const actions = el.querySelector('.dc-pv-actions');
|
|
15032
|
+
const notes = el.querySelector('.dc-pv-notes');
|
|
14925
15033
|
const bodyEl = el.querySelector('.dc-pv-body');
|
|
14926
15034
|
|
|
15035
|
+
previewHref = href;
|
|
14927
15036
|
actions.textContent = '';
|
|
15037
|
+
notes.textContent = '';
|
|
14928
15038
|
bodyEl.textContent = '';
|
|
14929
|
-
|
|
14930
|
-
el.scrollTop = 0;
|
|
15039
|
+
stopPreviewTheme();
|
|
14931
15040
|
|
|
14932
15041
|
if (data.missing) {
|
|
14933
15042
|
titleEl.textContent = '본문을 불러올 수 없습니다';
|
|
@@ -14936,29 +15045,36 @@
|
|
|
14936
15045
|
titleEl.textContent = `${data.head ? `[${data.head}] ` : ''}${data.title || '(제목 없음)'}`;
|
|
14937
15046
|
metaEl.textContent = [data.nick && `${data.nick}${data.ip ? `(${data.ip})` : ''}`, data.date, data.stats].filter(Boolean).join(' · ');
|
|
14938
15047
|
|
|
14939
|
-
|
|
14940
|
-
const
|
|
14941
|
-
const reveal = makeButton('그래도 보기', 'mini', () => {
|
|
14942
|
-
note.remove();
|
|
14943
|
-
bodyEl.appendChild(cleanPreviewBody(data.source).body);
|
|
14944
|
-
});
|
|
14945
|
-
|
|
14946
|
-
note.appendChild(reveal);
|
|
14947
|
-
bodyEl.appendChild(note);
|
|
14948
|
-
} else {
|
|
14949
|
-
const { body, hiddenMedia } = cleanPreviewBody(data.source);
|
|
15048
|
+
const showBody = () => {
|
|
15049
|
+
const hidden = mountPreviewFrame(bodyEl, data, href);
|
|
14950
15050
|
|
|
14951
|
-
if (
|
|
14952
|
-
|
|
15051
|
+
if (hidden) {
|
|
15052
|
+
notes.appendChild(h('div', 'dc-pv-note', `차단한 이미지 ${hidden}개를 뺐습니다`));
|
|
14953
15053
|
}
|
|
15054
|
+
};
|
|
15055
|
+
|
|
15056
|
+
if (data.word) {
|
|
15057
|
+
const warn = h('div', 'dc-pv-warn', `🚫 본문에 차단 단어 "${data.word}" 가 있어 가렸습니다${settings.prefetchBodies !== false ? ' · 목록에서도 가려집니다' : ''}`);
|
|
14954
15058
|
|
|
14955
|
-
|
|
15059
|
+
warn.appendChild(makeButton('그래도 보기', 'mini', () => {
|
|
15060
|
+
warn.remove();
|
|
15061
|
+
showBody();
|
|
15062
|
+
}));
|
|
15063
|
+
bodyEl.appendChild(warn);
|
|
15064
|
+
} else {
|
|
15065
|
+
showBody();
|
|
14956
15066
|
}
|
|
14957
15067
|
}
|
|
14958
15068
|
|
|
14959
|
-
const open = h('a', 'dc-btn mini', '글 열기');
|
|
15069
|
+
const open = h('a', 'dc-btn mini primary', '글 열기');
|
|
14960
15070
|
|
|
14961
15071
|
open.href = href;
|
|
15072
|
+
open.addEventListener('click', event => {
|
|
15073
|
+
if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button === 0) {
|
|
15074
|
+
event.preventDefault();
|
|
15075
|
+
goToPreviewPost();
|
|
15076
|
+
}
|
|
15077
|
+
});
|
|
14962
15078
|
actions.appendChild(open);
|
|
14963
15079
|
|
|
14964
15080
|
if (!data.missing && key) {
|
|
@@ -14992,6 +15108,8 @@
|
|
|
14992
15108
|
}
|
|
14993
15109
|
}
|
|
14994
15110
|
|
|
15111
|
+
actions.appendChild(h('span', 'dc-pv-hint', '본문을 누르면 글로 이동'));
|
|
15112
|
+
|
|
14995
15113
|
const close = makeButton('✕', 'mini dc-pv-close', closePreview);
|
|
14996
15114
|
|
|
14997
15115
|
close.setAttribute('aria-label', '미리보기 닫기');
|
|
@@ -15005,7 +15123,7 @@
|
|
|
15005
15123
|
|
|
15006
15124
|
const row = anchor.closest('tr');
|
|
15007
15125
|
|
|
15008
|
-
if (row && (row.classList.contains('dc-user-blocked') && !row.classList.contains('dc-user-revealed') || row.classList.contains('dc-head-hidden'))) {
|
|
15126
|
+
if (row && ((row.classList.contains('dc-user-blocked') && !row.classList.contains('dc-user-revealed')) || row.classList.contains('dc-head-hidden'))) {
|
|
15009
15127
|
return;
|
|
15010
15128
|
}
|
|
15011
15129
|
|
|
@@ -15019,11 +15137,11 @@
|
|
|
15019
15137
|
previewAnchor?.classList.remove('dc-pv-anchor');
|
|
15020
15138
|
previewAnchor = anchor;
|
|
15021
15139
|
previewKey = key;
|
|
15140
|
+
previewHref = href;
|
|
15022
15141
|
anchor.classList.add('dc-pv-anchor');
|
|
15023
15142
|
|
|
15024
15143
|
const el = ensurePreviewEl();
|
|
15025
15144
|
|
|
15026
|
-
placePreview(anchor);
|
|
15027
15145
|
el.classList.add('show');
|
|
15028
15146
|
|
|
15029
15147
|
const cached = previewCache.get(key);
|
|
@@ -15033,19 +15151,23 @@
|
|
|
15033
15151
|
return;
|
|
15034
15152
|
}
|
|
15035
15153
|
|
|
15036
|
-
|
|
15037
|
-
|
|
15154
|
+
stopPreviewTheme();
|
|
15038
15155
|
el.querySelector('.dc-pv-title').textContent = cleanText(anchor.textContent);
|
|
15039
15156
|
el.querySelector('.dc-pv-meta').textContent = '';
|
|
15040
15157
|
el.querySelector('.dc-pv-actions').textContent = '';
|
|
15041
|
-
el.querySelector('.dc-pv-
|
|
15158
|
+
el.querySelector('.dc-pv-notes').textContent = '';
|
|
15159
|
+
|
|
15160
|
+
const body = el.querySelector('.dc-pv-body');
|
|
15161
|
+
const paused = netPausedUntil();
|
|
15162
|
+
|
|
15163
|
+
body.textContent = '';
|
|
15042
15164
|
|
|
15043
15165
|
if (paused) {
|
|
15044
|
-
|
|
15166
|
+
body.appendChild(h('div', 'dc-pv-note', `⏸ 디시 요청 제한 중이라 ${Math.max(1, Math.ceil((paused - Date.now()) / 60000))}분 뒤에 미리볼 수 있습니다`));
|
|
15045
15167
|
return;
|
|
15046
15168
|
}
|
|
15047
15169
|
|
|
15048
|
-
|
|
15170
|
+
body.appendChild(h('div', 'dc-pv-loading', '불러오는 중…'));
|
|
15049
15171
|
|
|
15050
15172
|
try {
|
|
15051
15173
|
const html = await siteFetchText(href, { credentials: 'same-origin', cache: 'no-cache' });
|
|
@@ -15069,8 +15191,6 @@
|
|
|
15069
15191
|
return;
|
|
15070
15192
|
}
|
|
15071
15193
|
|
|
15072
|
-
const body = el.querySelector('.dc-pv-body');
|
|
15073
|
-
|
|
15074
15194
|
body.textContent = '';
|
|
15075
15195
|
body.appendChild(h('div', 'dc-pv-note', error instanceof NetPausedError
|
|
15076
15196
|
? '⏸ 디시 요청 제한 중이라 잠시 뒤에 미리볼 수 있습니다'
|
|
@@ -15084,7 +15204,7 @@
|
|
|
15084
15204
|
}
|
|
15085
15205
|
|
|
15086
15206
|
document.addEventListener('mouseover', event => {
|
|
15087
|
-
if (!previewEnabled()
|
|
15207
|
+
if (!previewEnabled()) {
|
|
15088
15208
|
return;
|
|
15089
15209
|
}
|
|
15090
15210
|
|
|
@@ -15094,14 +15214,16 @@
|
|
|
15094
15214
|
return;
|
|
15095
15215
|
}
|
|
15096
15216
|
|
|
15097
|
-
clearTimeout(previewCloseTimer);
|
|
15098
|
-
|
|
15099
15217
|
if (anchor === previewAnchor) {
|
|
15218
|
+
clearTimeout(previewCloseTimer);
|
|
15100
15219
|
return;
|
|
15101
15220
|
}
|
|
15102
15221
|
|
|
15103
15222
|
clearTimeout(previewHoverTimer);
|
|
15104
|
-
previewHoverTimer = setTimeout(() =>
|
|
15223
|
+
previewHoverTimer = setTimeout(() => {
|
|
15224
|
+
clearTimeout(previewCloseTimer);
|
|
15225
|
+
showPreviewFor(anchor);
|
|
15226
|
+
}, PREVIEW_DELAY);
|
|
15105
15227
|
});
|
|
15106
15228
|
|
|
15107
15229
|
document.addEventListener('mouseout', event => {
|
|
@@ -15113,28 +15235,36 @@
|
|
|
15113
15235
|
|
|
15114
15236
|
clearTimeout(previewHoverTimer);
|
|
15115
15237
|
|
|
15116
|
-
if (
|
|
15238
|
+
if (previewOpen() && !(event.relatedTarget instanceof Node && previewEl.contains(event.relatedTarget))) {
|
|
15117
15239
|
schedulePreviewClose();
|
|
15118
15240
|
}
|
|
15119
15241
|
});
|
|
15120
15242
|
|
|
15121
15243
|
document.addEventListener('mousedown', event => {
|
|
15122
|
-
if (
|
|
15244
|
+
if (previewOpen() && !(event.target instanceof Node && previewEl.contains(event.target))) {
|
|
15123
15245
|
closePreview();
|
|
15124
15246
|
}
|
|
15125
15247
|
}, true);
|
|
15126
15248
|
|
|
15127
15249
|
window.addEventListener('scroll', () => {
|
|
15128
|
-
if (
|
|
15250
|
+
if (previewOpen() && !previewEl.matches(':hover')) {
|
|
15129
15251
|
closePreview();
|
|
15130
15252
|
}
|
|
15131
15253
|
}, { passive: true });
|
|
15132
15254
|
|
|
15255
|
+
window.addEventListener('resize', () => {
|
|
15256
|
+
if (previewOpen()) {
|
|
15257
|
+
closePreview();
|
|
15258
|
+
}
|
|
15259
|
+
});
|
|
15260
|
+
|
|
15133
15261
|
document.addEventListener('keydown', event => {
|
|
15134
|
-
if (event.key === 'Escape' &&
|
|
15262
|
+
if (event.key === 'Escape' && previewOpen()) {
|
|
15135
15263
|
closePreview();
|
|
15136
15264
|
}
|
|
15137
15265
|
});
|
|
15266
|
+
|
|
15267
|
+
window.addEventListener('pagehide', closePreview);
|
|
15138
15268
|
};
|
|
15139
15269
|
|
|
15140
15270
|
const togglePreviewForCursor = () => {
|
|
@@ -15142,12 +15272,12 @@
|
|
|
15142
15272
|
return false;
|
|
15143
15273
|
}
|
|
15144
15274
|
|
|
15145
|
-
if (
|
|
15275
|
+
if (previewOpen()) {
|
|
15146
15276
|
closePreview();
|
|
15147
15277
|
return true;
|
|
15148
15278
|
}
|
|
15149
15279
|
|
|
15150
|
-
const anchor = keyCursor && keyCursor.isConnected ? keyCursor.querySelector(
|
|
15280
|
+
const anchor = keyCursor && keyCursor.isConnected ? keyCursor.querySelector('td.gall_tit > a:not(.reply_numbox)') : null;
|
|
15151
15281
|
|
|
15152
15282
|
if (!anchor) {
|
|
15153
15283
|
return false;
|