// ĠCopyright Ġ( c ) Ġ 2 0 1 5 - 2 0 2 0 ĠV lad im ir ĠSch ne ider Ġ< vl ad im ir . sch ne ider @ gmail . com > ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . vl ad sch . md . nav . editor . java fx Ċ Ċ import Ġcom . intellij . ide . Ide EventQueue Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . diagnostic . debug Ċ import Ġcom . intellij . openapi . progress . Perform In Background Option Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . progress . Progress Manager Ċ import Ġcom . intellij . openapi . progress . Task Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . ui . JB Color Ċ import Ġcom . intellij . util . Array Util Ċ import Ġcom . sun . java fx . application . Platform Impl Ċ import Ġcom . vl ad sch . boxed . json . Boxed Js Object Ċ import Ġcom . vl ad sch . boxed . json . Boxed Js Value Ċ import Ġcom . vl ad sch . boxed . json . Boxed Json Ċ import Ġcom . vl ad sch . flex mark . util . sequence . Range Ċ import Ġcom . vl ad sch . flex mark . util . sequence . Tag Range Ċ import Ġcom . vl ad sch . java fx . webview . debugger . Dev Tools Debugger Js Bridge Ċ import Ġcom . vl ad sch . java fx . webview . debugger . J fx Debug Proxy Js Bridge Ċ import Ġcom . vl ad sch . java fx . webview . debugger . J fx Script State Provider Ċ import Ġcom . vl ad sch . java fx . webview . debugger . Log Handler Ċ import Ġcom . vl ad sch . md . nav . Md Bundle Ċ import Ġcom . vl ad sch . md . nav . Md Plugin Ċ import Ġcom . vl ad sch . md . nav . Md Project Component Ċ import Ġcom . vl ad sch . md . nav . editor . Html Panel Host Ċ import Ġcom . vl ad sch . md . nav . editor . Preview Editor State Ċ import Ġcom . vl ad sch . md . nav . editor . api . Md Preview Custom ization Provider Ċ import Ġcom . vl ad sch . md . nav . editor . util . Html Panel Ċ import Ġcom . vl ad sch . md . nav . editor . util . Html Resource Ċ import Ġcom . vl ad sch . md . nav . parser . flex mark . Md Navigator Extension Ċ import Ġcom . vl ad sch . md . nav . settings .* Ċ import Ġcom . vl ad sch . md . nav . util . Path Info Ċ import Ġcom . vl ad sch . plugin . util .* Ċ import Ġcom . vl ad sch . plugin . util . image . Image Utils Ċ import Ġjavafx . application . Platform Ċ import Ġjavafx . embed . swing . J FX Panel Ċ import Ġjavafx . print . Printer Job Ċ import Ġjavafx . scene . Scene Ċ import Ġjavafx . scene . text . Font Sm oothing Type Ċ import Ġjavafx . scene . web . WebView Ċ import Ġnet scape . javascript . JS Exception Ċ import Ġnet scape . javascript . JS Object Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġorg . j dom . Text Ċ import Ġorg . w 3 c . dom . Element Ċ import Ġorg . w 3 c . dom . Node Ċ import Ġorg . w 3 c . dom . events . EventListener Ċ import Ġorg . w 3 c . dom . events . EventTarget Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . URI Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JPanel Ċ Ċ // ĠInstanti ated Ġby Ġreflection Ċ @ SuppressWarnings (" unused ") Ċ class ĠJava Fx Html Panel ( project : ĠProject , Ġhtml Panel Host : ĠHtml Panel Host ) Ġ: ĠHtml Panel ( project , Ġhtml Panel Host ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ my Panel : ĠJ FX Panel ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ my WebView : ĠWebView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ my JS Bridge : ĠJ SB ridge ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmy Inline Css : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmy Css U ris Ġ= ĠArray Util . EMPTY _ STRING _ ARRAY ĊĠĠĠ Ġprivate Ġvar Ġmy Last Raw Html Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmy Last Page Url Ġ= Ġ"" ĊĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġvar Ġmy Html Panel Host : ĠHtml Panel Host ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġmy Instance : ĠInt Ġ= ĠgetInstance ( my Html Panel Host . get Virtual File ()) ĊĠĠĠ Ġprivate Ġvar Ġmy Scroll Tag : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmy Scroll Attribute : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmy Scroll Reference : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġval Ġmy WebView Fx Runner Ġ= ĠWebView Fx Runner () ĊĠĠĠ Ġprivate Ġvar Ġmy On Typing Update Ġ= ĠAtomic Boolean ( false ) ĊĠĠĠ Ġprivate Ġvar Ġmy State Ġ= ĠPreview Editor State () ĊĠĠĠ Ġprivate Ġvar Ġmy Vertical Location : ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmy Debug File Serial Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmy Allow ContextMenu Ġ= ĠAtomic Boolean ( true ) ĊĠĠĠ Ġprivate Ġvar Ġmy Html File Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmy Page Reload Triggered Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġmy Script State Ġ= ĠBox ed Json . of () ĊĊĠĠĠ Ġ// ĠĠĠ Ġinternal Ġval Ġmy Init Actions Ġ= ĠArrayList < Runnable >() ĊĠĠĠ Ġprivate Ġval Ġmy Panel Wrapper : ĠJPanel ĊĠĠĠ Ġprivate Ġvar Ġmy Initial Html : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġval Ġmy Panel : ĠJ FX Panel ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ my Panel !! ĊĊĠĠĠ Ġprivate Ġval Ġmy JS Bridge : ĠJ SB ridge ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ my JS Bridge !! ĊĊĠĠĠ Ġprivate Ġval Ġmy WebView : ĠWebView ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ my WebView !! ĊĊĠĠĠ Ġprivate Ġval Ġis WebView Initialized : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ my Panel Ġ!= Ġnull Ġ&& Ġ_ my WebView Ġ!= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( use New API Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscheme Manager Class Ġ= ĠClass . forName (" com . intellij . ide . Ide EventQueue ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse New API Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheme Manager Class . getMethod (" unsafe Non blocking Execute ", ĠRunnable :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( use New API !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper Ġ= ĠJPanel ( Border Layout ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper . background Ġ= ĠJ B Color . background () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Handler . LOG _ HANDLER Ġ= Ġobject Ġ: ĠLog Handler () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtrace ( message : ĠString ) Ġ= ĠLOG _ J FX _ DEBUG GER . debug ( message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtrace ( message : ĠString , Ġt : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . debug ( message , Ġt Ġas ĠThrowable ?) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtrace ( t : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . debug ( t ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Trace Enabled (): ĠBoolean Ġ= ĠLOG _ J FX _ DEBUG GER . is Trace Enabled ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdebug ( message : ĠString ) Ġ= ĠLOG _ J FX _ DEBUG GER . debug ( message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdebug ( message : ĠString , Ġt : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . debug ( message , Ġt Ġas ĠThrowable ?) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdebug ( t : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . debug ( t ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror ( message : ĠString ) Ġ= ĠLOG _ J FX _ DEBUG GER . error ( message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror ( message : ĠString , Ġt : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . error ( message , Ġt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror ( t : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . error ( t ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinfo ( message : ĠString ) Ġ= ĠLOG _ J FX _ DEBUG GER . info ( message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinfo ( message : ĠString , Ġt : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . info ( message , Ġt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinfo ( t : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . info ( t ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Debug Enabled (): ĠBoolean Ġ= ĠLOG _ J FX _ DEBUG GER . isDebugEnabled () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwarn ( message : ĠString ) Ġ= ĠLOG _ J FX _ DEBUG GER . warn ( message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwarn ( message : ĠString , Ġt : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . warn ( message , Ġt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwarn ( t : ĠThrowable ) Ġ= ĠLOG _ J FX _ DEBUG GER . warn ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun FX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform Impl . startup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= ĠWebView () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdiagnostic / 2 8 5 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Dis poser . is Disposed ( this )) Ġreturn @ startup ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View Options ( web View , ĠMd Project Settings . getInstance ( my Project ). preview Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . is ContextMenu Enabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . set Worker ( web View . engine . load Worker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my WebView Ġ= ĠwebView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my JS Bridge Ġ= ĠJ SB ridge ( this , ĠwebView , Ġmy Instance , Ġobject Ġ: ĠJ fx Script State Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetState (): ĠBox ed Js Object Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Script State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetState ( state : ĠBox ed Js Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing Ġto Ġdo , Ġstate Ġalready Ġmutable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// return Ġmy Script State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene Ġ= ĠScene ( web View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun FX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj fx Panel Ġ= ĠJ FX Panel Wrapper () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my Panel Ġ= Ġj fx Panel ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Dis poser . is Disposed ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ Ġj fx Panel . scene Ġ= Ġscene Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe Setting Changes ( web View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . panel Initialized () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my Initial Html . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Html ( my Initial Html ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Initial Html Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper . add ( j fx Panel , ĠBorderLayout . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper . rep aint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 0 1 6 . 3 Ġcompatible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper Ġ= ĠJPanel ( Border Layout ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper . background Ġ= ĠJ B Color . background () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj fx Panel Ġ= ĠJ FX Panel Wrapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my Panel Ġ= Ġj fx Panel ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform Impl . startup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= ĠWebView () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimplied Ġby Ġdiagnostic / 2 8 5 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Dis poser . is Disposed ( this )) Ġreturn @ startup ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View Options ( web View , ĠMd Project Settings . getInstance ( my Project ). preview Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . is ContextMenu Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . set Worker ( web View . engine . load Worker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my WebView Ġ= ĠwebView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my JS Bridge Ġ= ĠJ SB ridge ( this , ĠwebView , Ġmy Instance , Ġobject Ġ: ĠJ fx Script State Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetState (): ĠBox ed Js Object Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Script State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetState ( state : ĠBox ed Js Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing Ġto Ġdo , Ġstate Ġalready Ġmutable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// return Ġmy Script State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene Ġ= ĠScene ( web View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj fx Panel . scene Ġ= Ġscene ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Dis poser . is Disposed ( this )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe Setting Changes ( web View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . panel Initialized () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my Initial Html . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Html ( my Initial Html ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Initial Html Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper . add ( j fx Panel , ĠBorderLayout . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Panel Wrapper . rep aint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Setting Changes ( web View : ĠWebView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsubscribe Ġto Ġapplication Ġlevel Ġsettings Ġchanges , ĊĠĠĠĠĠĠĠ Ġ// Ġsubscribe Ġto Ġproject Ġsettings Ġnotifications ĊĠĠĠĠĠĠĠ Ġval Ġmessage Bus Connection Ġ= ĠApplication Manager . getApplication (). message Bus . connect ( this ) ĊĠĠĠĠĠĠĠ Ġmessage Bus Connection . subscribe ( Settings Changed Listener . TOPIC , ĠSettings Changed Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View Options ( web View , ĠMd Project Settings . getInstance ( my Project ). preview Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Message Bus Connection Ġ= Ġmy Project . message Bus . connect ( this ) Ċ // ĠĠĠĠĠĠĠ Ġproject Message Bus Connection . subscribe ( Project Settings Changed Listener . TOPIC , ĠProject Settings Changed Listener Ġ{ Ġ_, Ġsettings Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View Options ( web View , Ġsettings . preview Settings ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġprofiles Changed Listener Ġ= Ġobject Ġ: ĠProfile Manager ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Settings Loaded ( manager : ĠRendering Profile Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Settings Change ( manager : ĠRendering Profile Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View Options ( web View , Ġmy Html Panel Host . get Rendering Profile (). preview Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject Message Bus Connection . subscribe ( Profile Manager ChangeListener . TOPIC , Ġprofiles Changed Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate View Options ( view : ĠWebView , Ġpreview Settings : ĠMd Preview Settings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġtype To Set : ĠFont Sm oothing Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preview Settings . use Gray scale Rendering ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFont Sm oothing Type . GRAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFont Sm oothing Type . LCD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfont Sm oothing Type Property Ġ= Ġview . font Sm oothing Type Property () ĊĠĠĠĠĠĠĠ Ġif Ġ( font Sm oothing Type Property . value Ġ!= Ġtype To Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Sm oothing Type Property . value Ġ= Ġtype To Set ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġzoom Ġ= Ġpreview Settings . zoom Factor Ġ* ĠMd Application Settings . instance . document Settings . zoom Factor ĊĠĠĠĠĠĠĠ Ġif Ġ( view . zoom Ġ!= Ġzoom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . zoom Ġ= Ġzoom ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetState ( state : ĠPreview Editor State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġstate . preview State Element . getAttribute (" version ") ?. value Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Semantic Version ( version ). is E ar lier Than (" 2 . 4 . 0 . 5 0 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . preview State Element . children . clear () Ġ// Ġstate Ġis Ġnot Ġcompatible , Ġdump Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmy State Ġ= Ġstate ĊĊĠĠĠĠĠĠĠ Ġval Ġscript State Ġ= Ġmy State . preview State Element . getChild ( SCRIPT _ STATE _ NAME ) Ġ?: Ġorg . j dom . Element ( SCRIPT _ STATE _ NAME ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġscript State . content ĊĠĠĠĠĠĠĠ Ġval Ġjs State : ĠBox ed Js Object ĊĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ!= Ġnull Ġ&& Ġcontent . size Ġ> Ġ 0 Ġ&& Ġcontent [ 0 ] Ġis ĠText ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs State Ġ= ĠBox ed Json . boxed From ( content [ 0 ]. value ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs State Ġ= ĠBox ed Js Value . H AD _ MISSING _ OBJECT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmy Script State Ġ= Ġjs State . isValid . if Else ( js State , ĠBox ed Json . of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetState (): ĠPreview Editor State Ġ{ ĊĠĠĠĠĠĠĠ Ġmy State . preview State Element . setAttribute (" version ", ĠMd Plugin . full Product Version ) ĊĠĠĠĠĠĠĠ Ġmy State . preview State Element . removeChild ( SCRIPT _ STATE _ NAME ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( my Script State Ġ!= Ġnull Ġ&& Ġ! my Script State . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript State Ġ= Ġorg . j dom . Element ( SCRIPT _ STATE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy State . preview State Element . add Content ( script State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript State . add Content ( my Script State . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmy State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġcomponent : ĠJ Component ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Panel Wrapper ĊĊĠĠĠ Ġoverride Ġfun Ġset CSS ( inline Css : ĠString ?, Ġfile U ris : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Inline Css Ġ= Ġinline Css ĊĠĠĠĠĠĠĠ Ġmy Css U ris Ġ= Ġfile U ris ĊĠĠĠĠĠĠĠ Ġset Html ( my Last Raw Html ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Html ( html : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ(_ my Panel Ġ== Ġnull Ġ|| Ġ_ my WebView Ġ== Ġnull Ġ|| Ġ_ my JS Bridge Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġinitialized Ġyet , Ġsave Ġfor Ġlater ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Initial Html Ġ= Ġhtml ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" NAME _ SH ADO WING ") ĊĠĠĠĠĠĠĠ Ġvar Ġhtml Ġ= Ġhtml ĊĠĠĠĠĠĠĠ Ġval Ġdocument Path Ġ= Ġmy Html Panel Host . get Virtual File (). parent ?. path ?. suffix With ('/') ĊĠĠĠĠĠĠĠ Ġval Ġsystem Path Ġ= Ġif Ġ( document Path Ġ!= Ġnull ) ĠFile Util . to System Dependent Name ( document Path ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġfile Uri Prefix Ġ= ĠPath Info . file UR IP refix ( document Path ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġadjust Ġrelative Ġscripts Ġto Ġabsolute Ġrelative Ġto Ġdocument Ġpath ĊĠĠĠĠĠĠĠ Ġhtml Ġ= ĠS CRIPT _ REPLACE _ PATTERN . replace ( html ) Ġ{ Ġmatch Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġmatch Result . group Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Path Info . is URI ( values [ 2 ]) Ġ&& ĠPath Info . is Relative ( values [ 2 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchange Ġit Ġto Ġabsolute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ 1 ] Ġ+ Ġfile Uri Prefix Ġ+ Ġsystem Path Ġ+ Ġvalues [ 2 ] Ġ+ Ġvalues [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Result . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġthat Ġlinks Ġare Ġnot Ġresolved Ġbefore Ġrendering , Ġneed Ġto Ġleave Ġthem Ġun modified Ġfor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresolving Ġwhen Ġclicked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Ġ= ĠLINK _ REPLACE _ PATTERN . replace ( html ) Ġ{ Ġmatch Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġmatch Result . group Values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Path Info . is URI ( values [ 2 ]) Ġ&& ĠPath Info . is Relative ( values [ 2 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchange Ġit Ġto Ġabsolute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values [ 2 ]. startsWith ('# ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlocal , Ġno Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ 1 ] Ġ+ Ġvalues [ 2 ] Ġ+ Ġvalues [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ 1 ] Ġ+ Ġfile Uri Prefix Ġ+ Ġsystem Path Ġ+ Ġvalues [ 2 ] Ġ+ Ġvalues [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Result . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġpreview Settings Ġ= Ġmy Html Panel Host . get Rendering Profile (). preview Settings ĊĠĠĠĠĠĠĠ Ġval Ġsynchronize Preview Ġ= Ġpreview Settings . synchron ize Preview Position ĊĠĠĠĠĠĠĠ Ġval Ġresource Path Ġ= Ġsynchronize Preview . if Else ("/ com / vl ad sch / md / nav / synchron ize - preview . js ", Ġ"/ com / vl ad sch / md / nav / scroll - preview . js ") ĊĊĠĠĠĠĠĠĠ Ġval Ġscroll Script Url Ġ= Ġ"< script Ġsrc =\" ${ get Inject ed Script Url ( resource Path )}\ "></ script >\ n " ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġdebugger Ġis Ġconnected Ġwe Ġuse Ġinjected Ġscripts Ġnot Ġlinks ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( isDebug ging ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġprepare Html ( html , Ġnull , Ġnull , Ġnull , Ġscroll Script Url ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhelper Script Ġ= Ġ"< script Ġsrc =\" ${ get Js Bridge Helper Script Url () }\ "></ script >\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Script Ġ= Ġ"\ n < script >\ n ${ my JS Bridge . state String }</ script >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġprepare Html ( html , Ġnull , Ġhelper Script , Ġstate Script , Ġscroll Script Url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmy Last Raw Html Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġval Ġlast Page Url Ġ= Ġmy Last Page Url ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġurl Ġwas Ġset Ġnothing Ġwill Ġmake Ġit Ġdisplay Ġthe Ġpage Ġuntil Ġcontent Ġchanges ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġthis Ġis Ġnow Ġdone Ġby Ġcreating Ġa Ġnew Ġpreview ĊĠĠĠĠĠĠĠ Ġmy Last Page Url Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ ĠLOG . debug Ġ{ Ġ" [$ my Instance ] Ġupdating Ġcontent , Ġlast Ġpage Ġurl Ġ$ last Page Url " Ġ} ĊĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . schedule (" Java Fx Html :: set Html . load Content ", ĠWebView Fx Runner . Type . LOAD ER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my Project . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhtml Panel Host Ġ= Ġmy Html Panel Host ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View Options ( my WebView , Ġhtml Panel Host . get Rendering Profile (). preview Settings ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġalternate Page Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( handler Ġin ĠMd Preview Custom ization Provider . EXTENSION S . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage File Url Ġ= Ġhandler . getPage File URL ( my Project , Ġmy Instance , Ġmy Debug File Serial Ġ+ Ġ 1 , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page File Url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Debug File Serial ++; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Re loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Html File Ġ= Ġpage File Url . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView . engine . load ( page File Url . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug Ġ{ Ġ" [$ my Instance ] Ġupdated Ġcontent " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalternate Page Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! alternate Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Re loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView . engine . load Content ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug Ġ{ Ġ" [$ my Instance ] Ġupdated Ġcontent " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . schedule (" Java Fx Html :: set Html . prepare Page ", ĠWebView Fx Runner . Type . INITIAL IZER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Js Bridge Helper Script Url (): ĠString Ġ= Ġget Inject ed Script Url ("/ com / vl ad sch / md / nav / markdown - navigator . js ") ĊĊĠĠĠ Ġinternal Ġfun Ġget Inject ed Script Url ( init Resource Path : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠHtml Resource . get Injection Url ( my Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHtml Resource . resource File Url ( init Resource Path , Ġjava Class ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Resource Path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Html Panel Host . get Rendering Profile (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Page Url ( url : ĠString ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed Ġ|| Ġurl . isBlank ()) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġmy Last Raw Html Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġmy Last Page Url Ġ= Ġurl ĊĊĠĠĠĠĠĠĠ ĠLOG . debug Ġ{ Ġ" [$ my Instance ] Ġupdating Ġurl : Ġ$ url " Ġ} ĊĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . schedule (" Java Fx Html :: set Page Url ", ĠWebView Fx Runner . Type . LOAD ER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my Project . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View Options ( my WebView , Ġmy Html Panel Host . get Rendering Profile (). preview Settings ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Re loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView . engine . load ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug Ġ{ Ġ" [$ my Instance ] Ġupdated Ġurl : Ġ$ url " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpage Re loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy JS Bridge . page Re loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlaunch External Link ( href : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġmy Html Panel Host . launch External Link ( href ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġscroll To Reference ( on Load : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreview Settings Ġ= Ġmy Html Panel Host . get Rendering Profile (). preview Settings ĊĠĠĠĠĠĠĠ Ġif Ġ( preview Settings . synchron ize Preview Position Ġ/* && ĠMulti Markdown Plugin . is Licensed */) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . schedule (" Java Fx Html :: scrollTo Reference ", Ġif Ġ( on Load ) ĠWebView Fx Runner . Type . INITIAL IZER Ġelse ĠWebView Fx Runner . Type . PAGE _ INTER ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my Project . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Load ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . schedule (" Java Fx Html :: scrollTo Reference ĠonLoad Ġdummy ", ĠWebView Fx Runner . Type . PAGE _ INTER ACTION , Ġ{ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . set Initialized () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhighlight Enabled Ġ= Ġmy Html Panel Host . is Highlight Enabled () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Typing Update Ġ= Ġmy On Typing Update . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy On Typing Update . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhighlight On Typing Ġ= Ġpreview Settings . highlight On Typing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhighlight Fade Out Ġ= Ġpreview Settings . highlight Fade Out Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġ" scrollTo Source Position ($ my Vertical Location ,' $ my Scroll Tag ','$ my Scroll Attribute ','$ my Scroll Reference ',$ highlight Enabled ,$ on Typing Update ,$ highlight On Typing ,$ highlight Fade Out );" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug One ( logger Scroll ) Ġ{ Ġ" [$ my Instance ] Ġexecuting Ġscroll : Ġ'$ s '" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView . engine . execute Script ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠJS Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug One ( logger Scroll , Ġe Ġ= Ġex ) Ġ{ Ġ" [$ my Instance ] ĠJS Exception Ġon Ġscript " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Load ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . set Initialized () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscroll To Markdown Src Offset ( offset : ĠInt , Ġline Offsets : ĠRange , Ġvertical Location : ĠFloat ?, Ġtag Ranges : ĠList < Tag Range >, ĠonLoad Update : ĠBoolean , Ġon Typing Update : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġwe Ġhave Ġthe Ġbest Ġpossible Ġmatch Ġfrom Ġall Ġthe Ġelements , Ġwe Ġcan Ġfind Ġthe Ġtag Ġand Ġscroll Ġit Ġinto Ġview ĊĠĠĠĠĠĠĠ Ġvar Ġbest Tag Range : ĠTag Range ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġtag Prior ities Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" span " Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" img " Ġto Ġ 3 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( tag Range Ġin Ġtag Ranges ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Range . does Contain ( offset )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( best Tag Range Ġ== Ġnull Ġ|| Ġtag Range . span Ġ< Ġbest Tag Range . span Ġ|| Ġtag Range . span Ġ<= Ġbest Tag Range . span Ġ&& Ġ( tag Prior ities [ tag Range . tag ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 ) Ġ> Ġ( tag Prior ities [ best Tag Range . tag ] Ġ?: Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Tag Range Ġ= Ġtag Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( best Tag Range Ġ== Ġnull Ġ&& Ġline Offsets . does Overlap ( tag Range )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Tag Range Ġ= Ġtag Range ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLOG . debug One ( logger Scroll ) Ġ{ Ġ" scrollTo Markdown Src Offset ($ offset , Ġ$ line Offsets , Ġ$ vertical Location , Ġtag Ranges , Ġ$ on Load Update , Ġ$ on Typing Update ) Ġbest Fit : Ġ${ best Tag Range ?. tag } Ġ$ best Tag Range " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfind Best Tag Range Ġ= Ġbest Tag Range Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġmy Scroll Tag Ġ= Ġfind Best Tag Range . tag ĊĠĠĠĠĠĠĠ Ġmy Scroll Attribute Ġ= ĠMd Navigator Extension . SOURCE _ POSITION _ ATTRIBUTE _ NAME ĊĠĠĠĠĠĠĠ Ġmy Scroll Reference Ġ= Ġ"${ find Best Tag Range . start }-${ find Best Tag Range . end }" ĊĠĠĠĠĠĠĠ Ġmy On Typing Update . set ( my On Typing Update . get () Ġ|| Ġon Typing Update ) ĊĠĠĠĠĠĠĠ Ġmy Vertical Location Ġ= Ġvertical Location ĊĊĠĠĠĠĠĠĠ Ġif Ġ( on Load Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġwill Ġget Ġa Ġpage Ġupdate Ġso Ġwe Ġcancel Ġthe Ġcurrent Ġpage Ġfirst Ġand Ġthen Ġschedule Ġthe Ġscroll ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug One ( logger Scroll ) Ġ{ Ġ" scrollTo Markdown Src Offset : Ġfx Runner Ġcancel All , Ġprep Ġfor Ġload " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . cancel All (" scrollTo Markdown Src Offset Ġprep Ġfor Ġload ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Page Reload Triggered Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Reference ( on Typing Update ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ my JS Bridge Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my JS Bridge . is Debugger Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy JS Bridge . stop Debug Server Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠDis poser . dispose ( my WebView Fx Runner ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( my Html File . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( my Html File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Html File Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġ// Ġfrom : Ġhttps :// stackoverflow . com / questions / 3 8 3 9 1 5 2 2 / java fx - webview - context - menu / 3 8 4 1 3 6 6 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate ContextMenu ( web View : ĠWebView ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreload Ġ= ĠMenuItem (" reload ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreload . setOn Action ({ Ġe Ġ-> ĠwebView . engine . reload () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Menu Ġ= ĠContext Menu ( reload ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . setOn Mouse Pressed Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . button Ġ== ĠMouse Button . SECOND ARY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( web View . engine . execute Script (" document . element From Point (" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġe . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"," Ġ+ Ġe . y Ġ+ Ġ"). tagName ; ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` object ` Ġ= ĠwebView . engine . execute Script (" document . element From Point (" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġe . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"," Ġ+ Ġe . y Ġ+ Ġ"); ") Ġas ĠJS Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Menu . show ( web View , Ġe . screen X , Ġe . screen Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Menu . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// Ġconnect ĠJs Bridge ĊĠĠĠĠĠĠĠ Ġmy JS Bridge . connect Js Bridge () ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Page Url Ġ= Ġmy Last Page Url ĊĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġmy WebView . engine . document ĊĠĠĠĠĠĠĠ Ġif Ġ( doc Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Allow ContextMenu . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView . context Menu Enabled Property (). set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( doc . documentElement Ġas ĠEvent Target ). addEventListener (" context menu ", Ġ{ Ġevt Ġ-> Ġevt . preventDefault () Ġ}, Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠEvent Listener Ġ{ Ġevt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed ) Ġreturn @ EventListener ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġevt . currentTarget Ġas ĠElement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Ġ= Ġlink . getAttribute (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href [ 0 ] Ġ== Ġ'# ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! last Page Url . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe 're Ġon Ġgithub , Ġprocess Ġas Ġnormal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ EventListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevt . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevt . preventDefault () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href . length Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtries Ġto Ġgo Ġto Ġan Ġanchor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Name Ġ= Ġhref . substring ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġscroll Ġit Ġinto Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Language (" JavaScript ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunc Ġ= Ġ""" Ċ ( function Ġ( href Name ) Ġ{ ĊĠĠĠ Ġlet Ġelem Top Ġ= Ġ 0 ; ĊĠĠĠ Ġlet Ġelements Ġ= Ġ''; ĊĠĠĠ Ġlet Ġelem Ġ= Ġwindow . document . getElementById ( href Name ); ĊĠĠĠ Ġif Ġ(! elem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlet Ġelem List Ġ= Ġwindow . document . getElement s ByName ( href Name ); ĊĠĠĠĠĠĠĠ Ġfor Ġ( let Ġa Ġin Ġelem List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! elem List . hasOwnProperty ( a )) Ġcontinue ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelem Ġ= Ġelem List [ a ]; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( elem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( elem Ġ&& Ġelem . tagName Ġ!== Ġ' HTML ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements Ġ+= Ġ',' Ġ+ Ġelem . tagName Ġ+ Ġ':' Ġ+ Ġelem . offset Top ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elem . offset Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Top Ġ+= Ġelem . offset Top ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelem Ġ= Ġelem . parentNode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ{ Ġelem Top : Ġelem Top , Ġelements : Ġelements , Ġfound : Ġ!! elem Ġ}; Ċ }) Ċ """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠJS Object Ġ= Ġmy WebView . engine . execute Script ("$ func ('$ href Name '); ") Ġas ĠJS Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Top Ġ= Ġresult . get Member (" elem Top ") Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Found Ġ= Ġresult . get Member (" found ") Ġas ĠBoolean ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elem Found ) Ġmy WebView . engine . execute Script (" window . scroll ( 0 , Ġ$ elem Top )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠJS Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġex . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug One ( logger Scroll , Ġe Ġ= Ġex ) Ġ{ Ġ" [$ my Instance ] ĠJS Exception Ġon Ġscript " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġsome Ġlinks Ġcan Ġcause Ġthe ĠJava Fx Ġto Ġcrash Ġso Ġwe Ġdisable Ġthis Ġfeature Ġwith Ġbundled ĠJVM Ġon ĠMac , Ġif Ġthey Ġare Ġmissing Ġthe Ġneeded Ġlibraries ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( launch External Link ( href )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevt . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevt . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Path Ġ= Ġmy Html Panel Host . get Virtual File (). parent ?. path ?. suffix With ('/') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Uri Prefix Ġ= Ġif Ġ( document Path Ġ!= Ġnull Ġ&& Ġdocument Path . length Ġ> Ġ 1 Ġ&& Ġdocument Path [ 1 ] Ġ== Ġ': ') Ġ" file : /" Ġelse ĠMd Navigator Extension . FILE _ URI _ PREFIX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Component Ġ= Ġif Ġ( document Path Ġ!= Ġnull ) ĠMd Project Component . getInstance ( my Project ) Ġelse Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode List Ġ= Ġdoc . getElementsByTagName (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnode List . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġnode List . item ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠEvent Target ). addEventListener (" click ", Ġlistener , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Listener Ġ= ĠEvent Listener Ġ{ Ġevt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed ) Ġreturn @ EventListener ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġevt . currentTarget Ġas ĠElement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Item Ġ= Ġspan . parentNode Ġas ĠElement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Offset Ġ= Ġlist Item . getAttribute (" task - offset ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Offset Ġ!= Ġnull Ġ&& Ġtask Offset . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevt . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevt . preventDefault () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Html Panel Host . toggle Task ( task Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan List Ġ= Ġdoc . getElementsByTagName (" span ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġspan List . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġspan List . item ( i ) Ġas ĠElement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Class Ġ= Ġitem . getAttribute (" class ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span Class Ġ== Ġ" task - item - closed " Ġ|| Ġspan Class Ġ== Ġ" task - item - open ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠEvent Target ). addEventListener (" click ", Ġtask Listener , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Html Panel Host . get Rendering Profile (). preview Settings . synchron ize Source Position OnClick ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclick Listener Ġ= ĠEvent Listener Ġ{ Ġevt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Project . is Disposed ) Ġreturn @ EventListener ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my JS Bridge . js Event Handled By Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Scroll . debug One ( LOG ) Ġ{ Ġ" onClick : Ġsync Ġsource Ġto Ġpreview , Ġdefault Ġprevent ed Ġby : Ġ${ my JS Bridge . js Event Handled By }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy JS Bridge . clear J SE vent Handled By () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ EventListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Scroll . debug One ( LOG ) Ġ{ Ġ" onClick : Ġsync Ġsource Ġto Ġpreview " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġelement : ĠNode ? Ġ= Ġevt . target Ġas ĠNode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Pos Ġ= Ġelement . attributes ?. getName d Item (" md - pos ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( src Pos Ġ!== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Pos Ġ= Ġsrc Pos . node Value . split ('- ', Ġlimit Ġ= Ġ 2 )[ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Html Panel Host . synchron ize Caret Pos ( start Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ= Ġelement . parentNode Ġas ? ĠElement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( doc Ġas ĠEvent Target ). addEventListener (" click ", Ġclick Listener , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Path Ġ!= Ġnull Ġ&& Ġproject Component Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimages Ġ= Ġdoc . getElementsByTagName (" img ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġimages . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem : ĠNode Ġ= Ġimages . item ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Ġ= Ġitem . attributes ?. getName d Item (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( src Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Src Ġ= Ġsrc . node Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Path Info . is URI ( image Src ) Ġ&& ĠPath Info . is Relative ( image Src ) Ġ&& Ġ! Image Utils . is Encoded Image ( image Src )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchange Ġit Ġto Ġabsolute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Path Ġ= Ġdocument Path Ġ+ Ġimage Src ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserial Ġ= Ġproject Component . getFile Serial ( image Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserial Query Ġ= Ġif Ġ( serial Ġ> Ġ 0 ) Ġ"? $ serial " Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . node Value Ġ= Ġfile Uri Prefix Ġ+ Ġimage Path Ġ+ Ġserial Query ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( handler Ġin ĠMd Preview Custom ization Provider . EXTENSION S . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . adjust Image Item ( item , Ġserial ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdebug ( start Stop : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ my JS Bridge Ġ!= Ġnull Ġ&& Ġ! our Debugger Changing State . get AndSet ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhandled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my JS Bridge . is Debugger Enabled Ġ!= Ġstart Stop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my JS Bridge . is Debugger Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( handler Ġin ĠMd Preview Custom ization Provider . EXTENSION S . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handler . launch Debugger ( my Project , Ġmy JS Bridge , Ġour Debugger Changing State )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġneed Ġto Ġstop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy JS Bridge . stop Debug Server Ġ{ Ġshut Down : ĠBoolean ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFIX : Ġcreate Ġnotification Ġof Ġserver Ġstopped / shutdown ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġour Debugger Changing State . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sh ut Down Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġserver Ġshut Ġdown ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( sh ut Down Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġjust Ġdisconnected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhave Ġnot Ġidea , Ġdebugger Ġwas Ġnot Ġenabled . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġour Debugger Changing State . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Debugging (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ my JS Bridge ?. isDebug ging Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Debugger Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ(_ my JS Bridge ?. is Debugger Enabled Ġ?: Ġfalse ) Ġ|| Ġour Debugger Changing State . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Debug Break OnLoad (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdebug Break OnLoad ( break OnLoad : ĠBoolean , Ġdebug Break Injection OnLoad : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ my JS Bridge ?. reload Page ( break OnLoad , Ġdebug Break Injection OnLoad ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcan Debug : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( handler Ġin ĠMd Preview Custom ization Provider . EXTENSION S . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handler . can Debug Preview ( my Project )) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Debug (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ(_ my JS Bridge ?. is Debugger Enabled Ġ?: Ġfalse ) Ġ|| Ġcan Debug ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprint () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is WebView Initialized ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . schedule (" Java Fx Html :: print ", ĠWebView Fx Runner . Type . PAGE _ INTER ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= Ġmy WebView ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprinter Job Ġ= ĠPrinter Job . create Printer Job () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( printer Job Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( printer Job . show Print Dialog ( my Panel . scene . window )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgress Manager . getInstance (). run ( object Ġ: ĠTask . Background able ( my Project , ĠMd Bundle . message (" print . progress "), Ġtrue , ĠPerform In Background Option . DE AF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun ( indicator : ĠProgress Indicator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . isIn determinate Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . text Ġ= Ġmy Html Panel Host . get Virtual File (). name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . engine . print ( printer Job ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprinter Job . end Job () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( printer Job . job Status Ġin Ġarray ListOf ( Printer Job . JobStatus . DONE , ĠPrinter Job . JobStatus . ERROR , ĠPrinter Job . JobStatus . C ANCE LED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( indicator . is Canceled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprinter Job . cancel Job () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep (( 2 0 0 Ġ- Ġcount Ġ* Ġ 1 0 ). min Limit ( 1 0 0 ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . fraction Ġ= Ġ( count Ġ- Ġ 1 . 0 ) Ġ/ Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcannot Ġuse Ġprogress Ġexcept Ġfrom ĠJava FX Ġthread , Ġwhich Ġmakes Ġit Ġquite Ġuseless ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . fraction Ġ= Ġload Worker . progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . fraction Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Print (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġpage Reload Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Page Reload Triggered Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . page Reload Triggered () Ġ// Ġreset Ġstate ĊĠĠĠĠĠĠĠ Ġif Ġ(! my Project . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy WebView Fx Runner . schedule (" JS Bridge :: page Reload Started . prepare Page ", ĠWebView Fx Runner . Type . INITIAL IZER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Page () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġcall Ġback s Ġfrom ĠJavaScript Ġwill Ġbe Ġhandled Ġby Ġthe Ġbridge ĊĠĠĠ Ġclass ĠJ SB ridge ( java Html Panel : ĠJava Fx Html Panel , ĠwebView : ĠWebView , Ġinstance : ĠInt , Ġstate Provider : ĠJ fx Script State Provider ) Ġ: ĠDev Tools Debugger Js Bridge ( web View , ĠwebView . engine , Ġinstance , Ġstate Provider , Ġtrue ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpanel : ĠJava Fx Html Panel Ġ= Ġjava Html Panel ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmd Navigator JS Bridge : ĠMd Navigator Js Bridge ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmd Navigator JS Bridge Ġ= ĠMd Navigator Js Bridge Delegate ( Md Navigator JS Bridge Impl ( panel , Ġsuper . get J fx Debug Proxy Js Bridge ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpage Reload Started () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( panel . my Project . is Disposed ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpanel . page Reload Started () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpage Load Complete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( panel . my Project . is Disposed ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug Ġ{ Ġ"[ ${ panel . my Instance }] Ġon Document Loaded " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġscroll Ġto Ġsource Ġit Ġwill Ġset Ġinitialized ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpanel . scrollTo Reference ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Application Manager . getApplication (). message Bus . sync Publisher ( WebView Document Loaded . TOPIC ) Ġas ĠWebView Document Loaded ). on Document Loaded ( panel . my Html Panel Host . get Virtual File ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Js Bridge Helper AsStream (): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinit Resource Ġ= Ġpanel . get Js Bridge Helper Script Url () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġinit Resource . lastIndexOf (' ?') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Resource Ġ= Ġinit Resource . substring ( 0 , Ġpos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFileInputStream ( File ( URI ( init Resource ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġour Ġcustomized Ġversion ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget J fx Debug Proxy Js Bridge (): ĠJ fx Debug Proxy Js Bridge Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmd Navigator JS Bridge ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġclass ĠMd Navigator JS Bridge Impl ( private Ġval Ġpanel : ĠJava Fx Html Panel , Ġdelegate : ĠJ fx Debug Proxy Js Bridge ) Ġ: ĠMd Navigator Js Bridge , ĠJ fx Debug Proxy Js Bridge Ġby Ġdelegate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtoggle Task ( pos : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( panel . my Project . is Disposed ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpanel . my Html Panel Host . toggle Task ( pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġour Debugger Changing State Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLogger . getInstance (" com . vl ad sch . md . nav . editor . java fx ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG _ J FX _ DEBUG GER Ġ= ĠLogger . getInstance (" com . vl ad sch . md . nav . editor . java fx ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Scroll Ġ= ĠLogger . getInstance (" com . vl ad sch . md . nav . editor . java fx - scroll ") ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstances : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinstance Map Ġ= ĠHashMap < String , ĠInt >() ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun ĠgetInstance ( virtual File : ĠVirtual File ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Map [ virtual File . path ] Ġ?: Ġlet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Map [ virtual File . path ] Ġ= Ġ++ instances ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstances ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrun FX ( r : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIde EventQueue . unsafe Non blocking Execute ( r ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrun FX ( r : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIde EventQueue . unsafe Non blocking Execute ( r ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠPAGE _ SVG _ REPLACE _ PATTERN : ĠPattern Ġ= ĠPattern . compile (" (< img [^ > ]+ src =\" [^ \"] + \\ .) svg ([ ^\ "] * \" [^ > ]* >) ") ĊĠĠĠĠĠĠĠ Ġval ĠPAGE _ G IF _ REPLACE _ PATTERN : ĠPattern Ġ= ĠPattern . compile (" (< img [^ > ]+ src =\" [^ \"] + \\ .) gif ([ ^\ "] * \" [^ > ]* >) ") ĊĠĠĠĠĠĠĠ Ġval ĠI MG _ SVG _ REPLACE _ PATTERN : ĠPattern Ġ= ĠPattern . compile (" ([ ^\ "] + \\ .) svg ([ ^\ "] *) ") ĊĠĠĠĠĠĠĠ Ġval ĠS CRIPT _ REPLACE _ PATTERN : ĠRegex Ġ= Ġ"( < script [^ > ]+ src =\ ") ([ ^\ "] *)( \" [^ > ]* >) ". to Regex () ĊĠĠĠĠĠĠĠ Ġval ĠLINK _ REPLACE _ PATTERN : ĠRegex Ġ= Ġ"( < (?: a | link )[ ^ > ]+ href =\ ") ([ ^\ "] *)( \" [^ > ]* >) ". to Regex () ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS CRIPT _ STATE _ NAME : ĠString Ġ= Ġ" js State " ĊĠĠĠĠĠĠĠ Ġvar Ġuse New API : ĠBoolean ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġprepare Html ( html : ĠString , Ġhead Top Text : ĠString ?, Ġhead Bottom Text : ĠString ?, Ġbody Top Text : ĠString ?, Ġbody Bottom Text : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġhtml ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Md Application Settings . instance . document Settings . disable Gif Images ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠPAGE _ G IF _ REPLACE _ PATTERN . matcher ( result ). replaceAll ("$ 1 _ gif _$ 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( head Top Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . replace ("</ head >", Ġ"$ head Top Text </ head >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( head Bottom Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . replace ("</ head >", Ġ"$ head Bottom Text </ head >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Top Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . replace ("< body >", Ġ"< body >$ body Top Text ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Bottom Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . replace ("</ body >", Ġ"$ body Bottom Text </ body >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ