package Ġcom . first time info re ver . intellij . pdf . viewer . ui . editor . panel . j cef . events Ċ Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . ui . j cef . J BC ef Browser Ċ import Ġcom . intellij . ui . j cef . J BC ef JS Query Ċ Ċ class ĠMessage Event Receiver Ġprivate Ġconstructor ( private Ġval Ġbrowser : ĠJ BC ef Browser ): ĠDis posable Ġ{ ĊĠĠĠ Ġval Ġsubscriptions Ġ= Ġmutable Map Of < Sub scri b able EventType , ĠJ BC ef JS Query >() ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġlogger < Message Event Receiver >() ĊĊĠĠĠ Ġfun Ġadd Handler With Response ( event : ĠSub scri b able EventType , Ġhandler : Ġ( String ) Ġ-> ĠJ BC ef JS Query . Response ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( subscriptions . contains ( event )) ĊĠĠĠĠĠĠĠ Ġsubscriptions [ event ] !!. add Handler ( handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Handler ( event : ĠSub scri b able EventType , Ġhandler : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Handler With Response ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Received Ġevent : Ġ$ event Ġwith Ġdata : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinject Subscriptions () Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug (" Inject ing Ġsubscriptions Ġfor Ġevents : Ġ${ subscriptions . values }") ĊĠĠĠĠĠĠĠ Ġsubscriptions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe To Event ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe To Event ( event : ĠSub scri b able EventType , Ġquery : ĠJ BC ef JS Query ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbrowser . cef Browser . execute JavaScript (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe To Message Event (' ${ event . displayName }', Ġ( data ) Ġ=> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ query . inject (" JSON . stringify ( data )") } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġnull , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom List ( browser : ĠJ BC ef Browser , Ġevents : ĠList < Sub scri b able EventType >): ĠMessage Event Receiver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠMessage Event Receiver ( browser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . subscriptions . put ( it , ĠJ BC ef JS Query . create ( browser )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscriptions . values . forEach Ġ{ Ġit . dispose () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ