1- function extractKeywords ( ) {
2- return document . querySelector ( 'h1' ) . textContent ;
1+ function injectButton ( ) {
2+ const banner = document . querySelector ( '.bg-premium-10' ) ;
3+ if ( ! banner ) return ;
4+ if ( banner . querySelector ( '.ophirofox-europresse' ) ) return ;
5+ const premiumBanner = [ ...banner . querySelectorAll ( 'p' ) ]
6+ . find ( p => p . textContent === 'Ce contenu est réservé aux abonnés' ) ;
7+ if ( ! premiumBanner ) return ;
8+ ophirofoxEuropresseLink ( document . querySelector ( 'h1' ) ?. textContent )
9+ . then ( a => premiumBanner . after ( a ) ) ;
310}
411
5- async function createLink ( ) {
6- const a = await ophirofoxEuropresseLink ( extractKeywords ( ) ) ;
7- a . classList . add ( ) ;
8- return a ;
9- }
12+ function watchPage ( callback ) {
13+ // Navigation SPA via History API
14+ const origPush = history . pushState . bind ( history ) ;
15+ const origReplace = history . replaceState . bind ( history ) ;
16+ history . pushState = ( ...args ) => { origPush ( ...args ) ; callback ( ) ; } ;
17+ history . replaceState = ( ...args ) => { origReplace ( ...args ) ; callback ( ) ; } ;
18+ window . addEventListener ( 'popstate' , callback ) ;
1019
11- function findPremiumBanner ( ) {
12- const title = document . querySelector ( '.rev-premium-tag-article-lt__container' ) ;
13- if ( ! title ) return null ;
14- const elems = title . querySelectorAll ( 'p' ) ;
15- return [ ...elems ] . find ( ( d ) => d . textContent === 'Ce contenu est réservé aux abonnés' ) ;
16- }
17-
18- async function onLoad ( ) {
19- const premiumBanner = findPremiumBanner ( ) ;
20- if ( ! premiumBanner ) return ;
21- premiumBanner . after ( await createLink ( ) ) ;
20+ // MutationObserver pour le rendu dynamique
21+ const observer = new MutationObserver ( callback ) ;
22+ observer . observe ( document . body , { childList : true , subtree : true } ) ;
2223}
2324
24- onLoad ( ) . catch ( console . error ) ;
25+ watchPage ( ( ) => injectButton ( ) ) ;
26+ injectButton ( ) ;
0 commit comments