/* Ċ Ġ* ĠThis ĠSource ĠCode ĠForm Ġis Ġsubject Ġto Ġthe Ġterms Ġof Ġthe ĠMozilla ĠPublic Ċ Ġ* ĠLicense , Ġv . Ġ 2 . 0 . ĠIf Ġa Ġcopy Ġof Ġthe ĠM PL Ġwas Ġnot Ġdistributed Ġwith Ġthis Ċ Ġ* Ġfile , ĠYou Ġcan Ġobtain Ġone Ġat Ġhttps :// mozilla . org / MPL / 2 . 0 /. Ċ Ġ*/ Ċ Ċ package Ġcom . kot l ind is cord . k ord . extensions . utils Ċ Ċ import Ġdev . k ord . core . behavior . interaction . suggest Int Ċ import Ġdev . k ord . core . behavior . interaction . suggest Number Ċ import Ġdev . k ord . core . behavior . interaction . suggest String Ċ import Ġdev . k ord . core . entity . interaction . Auto Complete Interaction Ċ import Ġdev . k ord . core . entity . interaction . Option Value Ċ import Ġdev . k ord . core . event . interaction . Auto Complete Interaction Create Event Ċ Ċ /** ĠThe Ġmax Ġnumber Ġof Ġsuggestions Ġallowed . Ġ**/ Ċ public Ġconst Ġval ĠMAX _ SU G GEST IONS : ĠInt Ġ= Ġ 2 5 Ċ Ċ /** Ċ Ġ* ĠSe aled Ġinterface Ġrepresenting Ġmatching Ġstrategies Ġfor Ġautocomplete . Ċ Ġ* Ċ Ġ* Ġ@ property Ġtest ĠLambda Ġthat Ġshould Ġreturn Ġ` true ` Ġfor Ġacceptable Ġvalues . Ċ Ġ*/ Ċ public Ġopen Ġclass ĠFilter Strategy ( public Ġval Ġtest : Ġ( provided : ĠString , Ġcandidate : ĠString ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ Ġ/** ĠFilter Ġoptions Ġbased Ġon Ġwhether Ġthey Ġcontain Ġthe Ġprovided Ġvalue . Ġ**/ ĊĠĠĠ Ġpublic Ġobject ĠContains Ġ: ĠFilter Strategy ({ Ġprovided , Ġcandidate Ġ-> ĊĠĠĠĠĠĠĠ Ġcandidate . contains ( provided , Ġtrue ) ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġ/** ĠFilter Ġoptions Ġbased Ġon Ġwhether Ġthey Ġstart Ġwith Ġthe Ġprovided Ġvalue . Ġ**/ ĊĠĠĠ Ġpublic Ġobject ĠPrefix Ġ: ĠFilter Strategy ({ Ġprovided , Ġcandidate Ġ-> ĊĠĠĠĠĠĠĠ Ġcandidate . startsWith ( provided , Ġtrue ) ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġ/** ĠFilter Ġoptions Ġbased Ġon Ġwhether Ġthey Ġend Ġwith Ġthe Ġprovided Ġvalue . Ġ**/ ĊĠĠĠ Ġpublic Ġobject ĠS uffix Ġ: ĠFilter Strategy ({ Ġprovided , Ġcandidate Ġ-> ĊĠĠĠĠĠĠĠ Ġcandidate . endsWith ( provided , Ġtrue ) ĊĠĠĠ Ġ}) Ċ } Ċ Ċ /** ĠRetrieve Ġthe Ġoption Ġthat 's Ġcurrently Ġfocused Ġin Ġthe Ġclient . Ġ**/ Ċ public Ġval ĠAuto Complete Interaction Create Event . focused Option : ĠOption Value < *> ĊĠĠĠ Ġget () Ġ= Ġthis . interaction . command . options . values . first Ġ{ Ġit . focused Ġ} Ċ Ċ /** ĠRetrieve Ġthe Ġoption Ġthat 's Ġcurrently Ġfocused Ġin Ġthe Ġclient . Ġ**/ Ċ public Ġval ĠAuto Complete Interaction . focused Option : ĠOption Value < *> ĊĠĠĠ Ġget () Ġ= Ġthis . command . options . values . first Ġ{ Ġit . focused Ġ} Ċ Ċ /** ĠUse Ġa Ġmap Ġto Ġpopulate Ġan Ġautocomplete Ġinteraction , Ġfiltering Ġby Ġcomparing Ġthe Ġinput Ġwith Ġthe Ġstart Ġof Ġthe Ġkeys . Ġ**/ Ċ public Ġsuspend Ġinline Ġfun ĠAuto Complete Interaction . suggest String Map ( ĊĠĠĠ Ġmap : ĠMap < String , ĠString >, ĊĠĠĠ Ġstrategy : ĠFilter Strategy Ġ= ĠFilter Strategy . Prefix Ċ ) Ġ{ ĊĠĠĠ Ġval Ġoption Ġ= Ġfocused Option . value Ġas ? ĠString ĊĠĠĠ Ġvar Ġoptions Ġ= Ġmap ĊĊĠĠĠ Ġif Ġ( option Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . filter Keys Ġ{ Ġstrategy . test ( option , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( options . size Ġ> ĠMAX _ SU G GEST IONS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . entries . sorted By Ġ{ Ġit . key Ġ}. take ( MAX _ SU G GEST IONS ). associate Ġ{ Ġit . to Pair () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuggest String Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . forEach (:: choice ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠUse Ġa Ġmap Ġto Ġpopulate Ġan Ġautocomplete Ġinteraction , Ġfiltering Ġby Ġcomparing Ġthe Ġinput Ġwith Ġthe Ġstart Ġof Ġthe Ġkeys . Ġ**/ Ċ public Ġsuspend Ġinline Ġfun ĠAuto Complete Interaction . suggest Int Map ( ĊĠĠĠ Ġmap : ĠMap < String , ĠInt >, ĊĠĠĠ Ġstrategy : ĠFilter Strategy Ġ= ĠFilter Strategy . Prefix Ċ ) Ġ{ ĊĠĠĠ Ġsuggest Long Map ( map . map Values Ġ{ Ġit . value . to Long () Ġ}, Ġstrategy ) Ċ } Ċ Ċ /** ĠUse Ġa Ġmap Ġto Ġpopulate Ġan Ġautocomplete Ġinteraction , Ġfiltering Ġby Ġcomparing Ġthe Ġinput Ġwith Ġthe Ġstart Ġof Ġthe Ġkeys . Ġ**/ Ċ public Ġsuspend Ġinline Ġfun ĠAuto Complete Interaction . suggest Long Map ( ĊĠĠĠ Ġmap : ĠMap < String , ĠLong >, ĊĠĠĠ Ġstrategy : ĠFilter Strategy Ġ= ĠFilter Strategy . Prefix Ċ ) Ġ{ ĊĠĠĠ Ġval Ġoption Ġ= Ġfocused Option . value Ġas ? ĠString ĊĠĠĠ Ġvar Ġoptions Ġ= Ġmap ĊĊĠĠĠ Ġif Ġ( option Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . filter Keys Ġ{ Ġstrategy . test ( option , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( options . size Ġ> ĠMAX _ SU G GEST IONS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . entries . sorted By Ġ{ Ġit . key Ġ}. take ( MAX _ SU G GEST IONS ). associate Ġ{ Ġit . to Pair () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuggest Int Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . forEach (:: choice ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠUse Ġa Ġmap Ġto Ġpopulate Ġan Ġautocomplete Ġinteraction , Ġfiltering Ġby Ġcomparing Ġthe Ġinput Ġwith Ġthe Ġstart Ġof Ġthe Ġkeys . Ġ**/ Ċ public Ġsuspend Ġinline Ġfun ĠAuto Complete Interaction . suggest Double Map ( ĊĠĠĠ Ġmap : ĠMap < String , ĠDouble >, ĊĠĠĠ Ġstrategy : ĠFilter Strategy Ġ= ĠFilter Strategy . Prefix Ċ ) Ġ{ ĊĠĠĠ Ġsuggest Number Map ( map , Ġstrategy ) Ċ } Ċ Ċ /** ĠUse Ġa Ġmap Ġto Ġpopulate Ġan Ġautocomplete Ġinteraction , Ġfiltering Ġby Ġcomparing Ġthe Ġinput Ġwith Ġthe Ġstart Ġof Ġthe Ġkeys . Ġ**/ Ċ public Ġsuspend Ġinline Ġfun ĠAuto Complete Interaction . suggest Number Map ( ĊĠĠĠ Ġmap : ĠMap < String , ĠDouble >, ĊĠĠĠ Ġstrategy : ĠFilter Strategy Ġ= ĠFilter Strategy . Prefix Ċ ) Ġ{ ĊĠĠĠ Ġval Ġoption Ġ= Ġfocused Option . value Ġas ? ĠString ĊĠĠĠ Ġvar Ġoptions Ġ= Ġmap ĊĊĠĠĠ Ġif Ġ( option Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . filter Keys Ġ{ Ġstrategy . test ( option , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( options . size Ġ> ĠMAX _ SU G GEST IONS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . entries . sorted By Ġ{ Ġit . key Ġ}. take ( MAX _ SU G GEST IONS ). associate Ġ{ Ġit . to Pair () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuggest Number Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . forEach (:: choice ) ĊĠĠĠ Ġ} Ċ } Ċ