@@ -22,6 +22,10 @@ function isText(node: Node | undefined): node is Text {
2222 return node != null && node . nodeType === Node . TEXT_NODE ;
2323}
2424
25+ const skipNodeName = new Set < string > ( [ 'TITLE' , 'LINK' , 'META' , 'HEAD' , 'SCRIPT' , 'BR' , 'HR' , 'STYLE' , 'MARK' ] ) ;
26+ const ignoreClassName = `eh-syringe-ignore` ;
27+ const skipElementMatcher = `.${ ignoreClassName } , .${ ignoreClassName } *` ;
28+
2529declare global {
2630 interface Window {
2731 toggle_advsearch_pane : ( b : HTMLElement ) => void ;
@@ -157,7 +161,6 @@ export class Syringe {
157161 tags . forEach ( ( t ) => t . translate ( tagMap ) ) ;
158162 }
159163 documentEnd = false ;
160- readonly skipNode = new Set < string > ( [ 'TITLE' , 'LINK' , 'META' , 'HEAD' , 'SCRIPT' , 'BR' , 'HR' , 'STYLE' , 'MARK' ] ) ;
161164 config = this . getAndInitConfig ( ) ;
162165 observer ?: MutationObserver ;
163166
@@ -307,12 +310,10 @@ export class Syringe {
307310 }
308311
309312 translateNode ( node : Node ) : void {
310- if (
311- ! node . nodeName ||
312- this . skipNode . has ( node . nodeName ) ||
313- ( node . parentNode != null && this . skipNode . has ( node . parentNode . nodeName ) ) ||
314- ( isElement ( node ) && node . matches ( '.eh-syringe-ignore, .eh-syringe-ignore *' ) )
315- ) {
313+ const { nodeName } = node ;
314+ if ( ! nodeName || skipNodeName . has ( nodeName ) ) return ;
315+ if ( node . parentNode && skipNodeName . has ( node . parentNode . nodeName ) ) return ;
316+ if ( isElement ( node ) ? node . matches ( skipElementMatcher ) : node . parentElement ?. matches ( skipElementMatcher ) ) {
316317 return ;
317318 }
318319
@@ -485,18 +486,13 @@ export class Syringe {
485486
486487 if ( isElement ( node , 'div' ) && node . id === 'gdd' ) {
487488 /* E-Hentai-Downloader 兼容处理 */
488- this . cloneAndPrependElement ( node ) ;
489- this . cloneAndPrependElement ( node . firstElementChild ! , ( el ) => {
490- const clone = document . createElement ( 'div' ) ;
491- clone . textContent = el . textContent ;
492- return clone ;
493- } ) ;
489+ this . cloneAndPrependElement ( node . firstElementChild ! ) ;
494490 }
495491 }
496492
497493 private cloneAndPrependElement < E extends Element , C extends Element = E > ( el : E , cloneNode ?: ( el : E ) => C ) : C {
498494 const clone = cloneNode ? cloneNode ( el ) : ( el . cloneNode ( true ) as C ) ;
499- clone . classList . add ( 'eh-syringe-ignore' ) ;
495+ clone . classList . add ( ignoreClassName ) ;
500496 clone . setAttribute ( 'hidden' , '' ) ;
501497 if ( clone . id ) clone . id = `ehs-clone-${ clone . id } ` ;
502498 clone . querySelectorAll ( '[id]' ) . forEach ( ( node ) => {
0 commit comments