package Ġtech . k zen . auto . client . objects . document . feature Ċ Ċ import Ġkotlinx . css .* Ċ import Ġreact .* Ċ import Ġreact . dom . attrs Ċ import Ġreact . dom . br Ċ import Ġreact . dom . hr Ċ import Ġreact . dom . img Ċ import Ġstyled . css Ċ import Ġstyled . styled Div Ċ import Ġstyled . styled Span Ċ import Ġtech . k zen . auto . client . objects . document . Document Controller Ċ import Ġtech . k zen . auto . client . service . ClientContext Ċ import Ġtech . k zen . auto . client . service . global . Navigation Global Ċ import Ġtech . k zen . auto . client . util . async Ċ import Ġtech . k zen . auto . client . wrap . crop per . Crop per Detail Ċ import Ġtech . k zen . auto . client . wrap . crop per . Crop per Wrapper Ċ import Ġtech . k zen . auto . client . wrap . material . Camera Alt Icon Ċ import Ġtech . k zen . auto . client . wrap . material . Delete Icon Ċ import Ġtech . k zen . auto . client . wrap . material . Material Button Ċ import Ġtech . k zen . auto . client . wrap . material . Refresh Icon Ċ import Ġtech . k zen . auto . client . wrap . react Style Ċ import Ġtech . k zen . auto . common . objects . document . feature . Feature Document Ċ import Ġtech . k zen . auto . common . par adig m . common . model . Binary Execution Value Ċ import Ġtech . k zen . auto . common . par adig m . common . model . Execution Success Ċ import Ġtech . k zen . auto . common . util . Request Params Ċ import Ġtech . k zen . lib . common . model . definition . Graph Definition Attempt Ċ import Ġtech . k zen . lib . common . model . document . Document Path Ċ import Ġtech . k zen . lib . common . model . locate . Object Location Ċ import Ġtech . k zen . lib . common . model . locate . Resource Location Ċ import Ġtech . k zen . lib . common . model . structure . Graph Structure Ċ import Ġtech . k zen . lib . common . model . structure . notation . cq rs .* Ċ import Ġtech . k zen . lib . common . model . structure . resource . ResourceName Ċ import Ġtech . k zen . lib . common . model . structure . resource . Resource N esting Ċ import Ġtech . k zen . lib . common . model . structure . resource . Resource Path Ċ import Ġtech . k zen . lib . common . reflect . Reflect Ċ import Ġtech . k zen . lib . common . service . store . Local Graph Store Ċ import Ġtech . k zen . lib . common . util . Immutable ByteArray Ċ import Ġtech . k zen . lib . platform . DateTime Utils Ċ import Ġtech . k zen . lib . platform . Io Utils ĊĊ Ċ @ Suppress (" unused ") Ċ class ĠFeature Controller ( ĊĠĠĠĠĠĠĠ Ġprops : ĠProps Ċ ): ĊĠĠĠĠĠĠĠ ĠRP ure Component < Feature Controller . Props , ĠFeature Controller . State >( props ), ĊĠĠĠĠĠĠĠ ĠNavigation Global . Observer , ĊĠĠĠĠĠĠĠ ĠLocal Graph Store . Observer Ċ { ĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġclass ĠProps : Ġreact . Props ĊĊĊĠĠĠ Ġclass ĠState ( ĊĠĠĠĠĠĠĠ Ġvar Ġdocument Path : ĠDocument Path ?, ĊĠĠĠĠĠĠĠ Ġvar Ġgraph Structure : ĠGraph Structure ?, ĊĊĠĠĠĠĠĠĠ Ġvar Ġdetail : ĠC rop per Detail ?, ĊĠĠĠĠĠĠĠ Ġvar Ġscreenshot Data Url : ĠString ?, ĊĠĠĠĠĠĠĠ Ġvar Ġcaptured Data Url : ĠString ?, ĊĠĠĠĠĠĠĠ Ġvar Ġrequesting Screenshot : ĠBoolean ? ĊĠĠĠ Ġ): Ġreact . State ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġ@ Reflect ĊĠĠĠ Ġclass ĠWrapper ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġar che type : ĠObject Location ĊĠĠĠ Ġ): ĊĠĠĠĠĠĠĠ ĠDocument Controller ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġar che type Location (): ĠObject Location Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġar che type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild ( input : ĠR Builder , Ġhandler : ĠR Handler < react . Props >) /* : ĠReact Element */ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . child ( Feature Controller :: class ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . attribute Controller Ġ= Ġthis @ Wrapper . attribute Controller Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġprivate Ġvar Ġcrop per Wrapper : ĠRef Object < Crop per Wrapper > Ġ= Ġcreate Ref () ĊĠĠĠ Ġprivate Ġvar Ġscreenshot Bytes : ĠByteArray ? Ġ= Ġnull ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġoverride Ġfun ĠState . init ( props : ĠProps ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdocument Path Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġgraph Structure Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġdetail Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġscreenshot Data Url Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcaptured Data Url Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrequesting Screenshot Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠcomponentDidMount () Ġ{ ĊĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Context . mir rored Graph Store . observe ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Context . navigation Global . observe ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state . screenshot Data Url Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Screenshot Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠcomponentWill Unmount () Ġ{ ĊĠĠĠĠĠĠĠ ĠClient Context . mir rored Graph Store . un observe ( this ) ĊĠĠĠĠĠĠĠ ĠClient Context . navigation Global . un observe ( this ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠcomponentDid Update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Props : ĠProps , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev State : ĠState , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsnapshot : ĠAny ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . screenshot Data Url Ġ== Ġnull Ġ&& Ġstate . request ing Screenshot Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Screenshot Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state . request ing Screenshot Ġ== Ġtrue Ġ&& Ġprev State . request ing Screenshot Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Request Screenshot () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġoverride Ġfun Ġhandle Navigation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Path : ĠDocument Path ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters : ĠRequest Params ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . document Path Ġ= Ġdocument Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Command Success ( event : ĠNot ation Event , Ġgraph Definition : ĠGraph Definition Attempt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( event Ġis ĠDeleted Document Event Ġ|| Ġevent Ġis ĠRename d Document Ref actor Event ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . document Path Ġ== Ġstate . document Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . graph Structure Ġ= Ġgraph Definition . graph Structure ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Command Failure ( command : ĠNot ation Command , Ġcause : ĠThrowable ) Ġ{} ĊĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Store Refresh ( graph Definition : ĠGraph Definition Attempt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . graph Structure Ġ= Ġgraph Definition . graph Structure ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġprivate Ġfun Ġdo Request Screenshot () Ġ{ ĊĠĠĠĠĠĠĠ Ġasync Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" do Request Screenshot ", Ġscreenshot T aker Location . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠClient Context . rest Client . perform Detached ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Document . screenshot T aker Location ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠExecution Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshot P ng Ġ= Ġresult . value Ġas ĠBinary Execution Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase 6 4 Ġ= ĠIo Utils . base 6 4 Encode ( screenshot P ng . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshot P ng Url Ġ= Ġ" data : png / png ; base 6 4 ,$ base 6 4 " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Bytes Ġ= Ġscreenshot P ng . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Data Url Ġ= Ġscreenshot P ng Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Screenshot Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdo Crop And Save ( detail : ĠC rop per Detail ) Ġ{ ĊĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠClient Context . rest Client . perform Detached ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Document . screenshot Crop per Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Bytes !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Document . crop Top Param Ġto Ġdetail . y . toInt (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Document . crop Left Param Ġto Ġdetail . x . toInt (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Document . crop Width Param Ġto Ġdetail . width . toInt (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Document . crop Height Param Ġto Ġdetail . height . toInt (). toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ! is ĠExecution Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcrop P ng Ġ= Ġresult . value Ġas ĠBinary Execution Value ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Context . mir rored Graph Store . apply ( Add Resource Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . document Path !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Name ( DateTime Utils . filename Timestamp () Ġ+ Ġ". png "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource N esting . empty )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImmutable ByteArray . wrap ( crop P ng . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh () Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshot P ng Ġ= Ġresult . value Ġas ĠBinary Execution Value Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase 6 4 Ġ= ĠIo Utils . base 6 4 Encode ( screenshot P ng . value ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshot P ng Url Ġ= Ġ" data : png / png ; base 6 4 ,$ base 6 4 " Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Bytes Ġ= Ġscreenshot P ng . value Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Data Url Ġ= Ġscreenshot P ng Url Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Screenshot Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠĠĠĠĠ Ġcanvas . to Blob ({ Ġblob : ĠBlob ? Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Reader Ġ= ĠFileReader () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfile Reader . onload Ġ= Ġ{ Ġevent Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ Ġ= Ġevent . target Ġas ĠFileReader Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Buffer = Ġtarget . result Ġas ĠArray Buffer Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuint 8 Array Ġ= ĠUint 8 Array ( array Buffer ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= ĠByteArray ( uint 8 Array . length ) Ġ{ Ġi Ġ-> Ġuint 8 Array [ i ] Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClient Context . mir rored Graph Store . apply ( Add Resource Command ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Location ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . document Path !! , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Path ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Name ( DateTime Utils . filename Timestamp () Ġ+ Ġ". png "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource N esting . empty Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImmutable ByteArray . wrap ( byteArray ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfile Reader . read As ArrayBuffer ( blob !! ) Ċ // ĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġprivate Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġscreenshot Bytes Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Data Url Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Data Url Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġprivate Ġfun Ġon Remove ( resource Path : ĠResource Path ) Ġ{ ĊĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Context . mir rored Graph Store . apply ( Remove Resource Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . document Path !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġprivate Ġfun Ġon Crop ( detail : ĠC rop per Detail ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . detail Ġ= Ġdetail ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġon Save () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdetail Ġ= Ġstate . detail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ċ Ċ // ĠĠĠĠĠĠĠ Ġconsole . log (" detail ", Ġdetail ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= Ġcrop per Wrapper . current !!. getC ropped Canvas () Ċ Ċ // ĠĠĠĠĠĠĠ Ġconsole . log (" canvas ", Ġcanvas ) ĊĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Data Url Ġ= Ġcanvas . to Data URL () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Screenshot Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdo Crop And Save ( detail ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġon Capture () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Data Url Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġoverride Ġfun ĠR Builder . render () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Path Ġ= Ġstate . document Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġgraph Structure Ġ= Ġstate . graph Structure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Not ation Ġ= Ġgraph Structure . graph Not ation . documents [ document Path ] !! ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġdocument Not ation . resources !! ĊĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding ( 1 . em ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( resource Ġin Ġresources . digest s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Location Ġ= ĠResource Location ( document Path , Ġresource . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Uri Ġ= ĠClient Context . rest Client . resource Uri ( resource Location ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= Ġresource Uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Span Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmarginLeft Ġ= Ġ 1 . em ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Delete ( resource . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhr Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding ( 1 . em , Ġ 1 . em , Ġ 0 . px , Ġ 1 . em ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcaptured Data Url Ġ= Ġstate . captured Data Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshot Data Url Ġ= Ġstate . screenshot Data Url Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" screenshot . png " Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ+" request ing Screenshot : Ġ${ state . request ing Screenshot }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Data Url Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Capture () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbr Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Data Url ( captured Data Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Data Url Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmarginBottom Ġ= Ġ 0 . 5 . em ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Crop per ( screenshot Data Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ "< t aking Ġscreenshot >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . render Data Url ( data Url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimg Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= Ġdata Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . render Capture () Ġ{ ĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Material Button :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Ġ= Ġ" outlined " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ" small " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ:: on Capture ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . white ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Camera Alt Icon :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmarginRight Ġ= Ġ 0 . 2 5 . em ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" Capture " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . render Save () Ġ{ ĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Ġ= ĠDisplay . inline Block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Material Button :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Ġ= Ġ" outlined " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ" small " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ:: on Save ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . white ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Camera Alt Icon :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmarginRight Ġ= Ġ 0 . 2 5 . em ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" Save " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . render Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Ġ= ĠDisplay . inline Block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Material Button :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Ġ= Ġ" outlined " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ" small " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ:: on Refresh ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . white ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Refresh Icon :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmarginRight Ġ= Ġ 0 . 2 5 . em ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" Refresh ĠScreen shot " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . render Delete ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource Path : ĠResource Path ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Ġ= ĠDisplay . inline Block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Material Button :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Ġ= Ġ" outlined " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ" small " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Remove ( resource Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . white ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Delete " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Delete Icon :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġreact Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmarginRight Ġ= Ġ 0 . 2 5 . em ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠR Builder . render Crop per ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Data Url : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 1 0 0 . pct ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 1 0 0 . vh . minus ( 1 0 . em ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġ 2 0 0 . px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Ġ= Ġ 1 0 2 4 . px ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild ( Crop per Wrapper :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= Ġscreenshot Data Url ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcrop Ġ= Ġ{ event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST _ TO _ EXTERNAL _ INTERFACE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetail Ġ= Ġevent . detail Ġas ĠC rop per Detail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Crop ( detail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Ġ= Ġcrop per Wrapper Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcrop per Wrapper Ġ= Ġit Ġas ? ĠC rop per Wrapper Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }