package Ġcom . har ley o conn or . git desk . ui . repository . issues Ċ Ċ import Ġcom . har ley o conn or . git desk . data . remote . Issue Ċ import Ġcom . har ley o conn or . git desk . data . remote . Remote Repository Ċ import Ġcom . har ley o conn or . git desk . ui . node . Radio ContextMenu Ċ import Ġcom . har ley o conn or . git desk . ui . node . SVG Icon Ċ import Ġcom . har ley o conn or . git desk . ui . node . Selection Cell List Ċ import Ġcom . har ley o conn or . git desk . ui . repository . Remote Context Ċ import Ġcom . har ley o conn or . git desk . ui . translation . TRANSL ATIONS _ B UNDLE Ċ import Ġcom . har ley o conn or . git desk . ui . util . flip Ċ import Ġcom . har ley o conn or . git desk . ui . util . when Sc rolled To Bottom Ċ import Ġcom . har ley o conn or . git desk . ui . view . ViewController Ċ import Ġjavafx . event . ActionEvent Ċ import Ġjavafx . f xml . FXML Ċ import Ġjavafx . geometry . Side Ċ import Ġjavafx . scene . control . ScrollPane Ċ import Ġjavafx . scene . control . TextField Ċ import Ġjavafx . scene . input . KeyCode Ċ import Ġjavafx . scene . layout . H Box Ċ import Ġorg . fx misc . well be hav ed . event . Event Pattern Ċ import Ġorg . fx misc . well be hav ed . event . Input Map Ċ import Ġorg . fx misc . well be hav ed . event . Nodes Ċ Ċ /** Ċ Ġ* ĠAbstract Ġimplementation Ġof Ġan Ġissue Ġcell Ġlist Ġview Ġcontroller , Ġused Ġby Ġboth Ġissue Ġand ĠPR Ġcell Ġlists . Ċ Ġ* Ċ Ġ* Ġ@ author ĠHar ley ĠO ' Conn or Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Issues List Controller < I Ġ: ĠIssue , ĠC Ġ: ĠAbstract Issues List Controller . Context < I >> Ġ: ĠView Controller < C > Ġ{ ĊĊĠĠĠ Ġopen Ġclass ĠContext < I Ġ: ĠIssue >( ĊĠĠĠĠĠĠĠ Ġval Ġselect Callback : Ġ( I ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġval Ġremote : ĠRemote Context ĊĠĠĠ Ġ) Ġ: ĠView Controller . Context ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġselect Callback : Ġ( I ) Ġ-> ĠUnit ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġremote Context : ĠRemote Context ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Bar : ĠTextField ĊĊĠĠĠ Ġprotected Ġvar Ġsearch Query Ġ= Ġ"" ĊĊĠĠĠ Ġprotected Ġvar Ġsort : ĠIssue . Sort Ġ= ĠIssue . Sort . BEST _ MATCH ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ; Ġupdate SearchResults () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġvar Ġsort Order : ĠRemote Repository . SortOrder Ġ= ĠRemote Repository . SortOrder . DESC ENDING ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ; Ġupdate SearchResults () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Options Box : ĠH Box ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsort Order Icon : ĠSVG Icon ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent ScrollPane : ĠScroll Pane ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent : ĠSelection Cell List < I > ĊĊĠĠĠ Ġprivate Ġvar Ġnext Page : ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġval Ġsort ContextMenu Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠRadio ContextMenu ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIssue . Sort . values (). associate By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTRAN SL ATIONS _ B UNDLE . getString (" sort .${ it . name . lowercase () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIssue . Sort . BEST _ MATCH ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent ScrollPane . when Sc rolled To Bottom Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Next Page () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup ( context : ĠC ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Callback Ġ= Ġcontext . select Callback ĊĠĠĠĠĠĠĠ Ġremote Context Ġ= Ġcontext . remote ĊĊĠĠĠĠĠĠĠ Ġcontent . setOn Element Selected Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Callback ( it . element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġregister Search Bar Inputs () ĊĠĠĠĠĠĠĠ Ġupdate SearchResults ( search Bar . text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Search Bar Inputs () Ġ{ ĊĠĠĠĠĠĠĠ ĠNodes . add Input Map ( search Bar , ĠInput Map . sequence ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInput Map . consume ( Event Pattern . key Pressed ( KeyCode . ENTER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! update SearchResults ( search Bar . text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInput Map . consume ( Event Pattern . key Pressed ( KeyCode . UP )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . move Selection Up () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInput Map . consume ( Event Pattern . key Pressed ( KeyCode . DOWN )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . move Selection Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġfun Ġopen Sort Menu ( event : ĠAction Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsort ContextMenu . show ( search Options Box , ĠSide . BOTTOM , Ġ 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġprivate Ġfun Ġtoggle SortOrder ( event : ĠAction Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsort Order Ġ= Ġsort Order . other () ĊĠĠĠĠĠĠĠ Ġsort Order Icon . flip () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġa Ġsearch Ġwill Ġbe Ġcompleted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate SearchResults ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query Ġ== Ġthis . search Query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . search Query Ġ= Ġquery ĊĠĠĠĠĠĠĠ Ġupdate SearchResults () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate SearchResults () Ġ{ ĊĠĠĠĠĠĠĠ Ġnext Page Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcontent . clear () ĊĠĠĠĠĠĠĠ Ġload Next Page () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Next Page () Ġ= ĊĠĠĠĠĠĠĠ Ġload Page ( next Page ++) ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġload Page ( page : ĠInt ) ĊĊĠĠĠ Ġprotected Ġfun Ġdisplay Cells ( cells : ĠMap < I , ĠH Box >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcells . forEach Ġ{ Ġcell Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . addElement ( cell . key , Ġcell . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect ( issue : ĠI ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent . select ( issue ) ĊĠĠĠ Ġ} Ċ Ċ }