module Client.View.UrlSelection
( urlSelectionView
) where
import Client.State
import Client.State.Window
import Client.Image.Message
import Client.State.Focus
import Control.Lens
import Data.Text (Text)
import Graphics.Vty.Image
import Text.Read (readMaybe)
urlSelectionView ::
Focus ->
String ->
ClientState ->
[Image]
urlSelectionView focus arg st =
zipWith (draw selected) [1..] (toListOf urled st)
where
urled = clientWindows . ix focus
. winMessages . each
. wlText . folding urlMatches
selected
| all (==' ') arg = 1
| Just i <- readMaybe arg = i
| otherwise = 0
draw ::
Int ->
Int ->
Text ->
Image
draw selected i url = string attr (shows i ". ") <|>
text' attr (cleanText url)
where
attr | selected == i = withStyle defAttr reverseVideo
| otherwise = defAttr