0 | module Text.CSS.Selector
4 | import Text.CSS.Property
10 | data Combinator : Type where
11 | Descendant : Combinator
13 | GeneralSibling : Combinator
14 | AdjacentSibling : Combinator
17 | Interpolation Combinator where
18 | interpolate Descendant = ""
19 | interpolate Child = ">"
20 | interpolate GeneralSibling = "~"
21 | interpolate AdjacentSibling = "+"
24 | data Selector : Type where
26 | Id : String -> Selector
27 | Class : String -> Selector
28 | Elem : {str : _} -> (0 tpe : ElementType str t) -> Selector
29 | Complex : Selector -> Combinator -> Selector -> Selector
31 | (::) : Selector -> Selector -> Selector
46 | Dir : Direction -> Selector
56 | FirstChild : Selector
58 | FirstOfType : Selector
62 | FocusVisible : Selector
64 | FocusWithin : Selector
70 | Indeterminate : Selector
76 | Lang : String -> Selector
78 | LastChild : Selector
80 | LastOfType : Selector
86 | LocalLink : Selector
88 | NthChild : String -> Selector
90 | NthOfType : String -> Selector
92 | NthLastChild : String -> Selector
94 | NthLastOfType : String -> Selector
96 | OnlyChild : Selector
98 | OnlyOfType : Selector
100 | Optional : Selector
102 | OutOfRange : Selector
106 | PlaceholderShown : Selector
112 | ReadOnly : Selector
114 | ReadWrite : Selector
116 | Required : Selector
131 | Backdrop : Selector
134 | CueRegion : Selector
135 | FirstLetter : Selector
136 | FirstLine : Selector
137 | FileSelectorButton : Selector
139 | Placeholder : Selector
140 | Selection : Selector
144 | Interpolation Selector where
145 | interpolate Star = "*"
146 | interpolate (Id s) = "#\{s}"
147 | interpolate (Class s) = ".\{s}"
148 | interpolate (Elem {str} _) = str
149 | interpolate [] = ""
150 | interpolate (h::t) = interpolate h ++ interpolate t
151 | interpolate (Complex s1 Descendant s2) = "\{s1} \{s2}"
152 | interpolate (Complex s1 c s2) = "\{s1} \{c} \{s2}"
153 | interpolate Active = ":active"
154 | interpolate AnyLink = ":any-link"
155 | interpolate Blank = ":blank"
156 | interpolate Checked = ":checked"
157 | interpolate Current = ":current"
158 | interpolate Default = ":default"
159 | interpolate (Dir x) = ":dir(\{x})"
160 | interpolate Disabled = ":disabled"
161 | interpolate Empty = ":empty"
162 | interpolate Enabled = ":enabled"
163 | interpolate First = ":first"
164 | interpolate FirstChild = ":first-child"
165 | interpolate FirstOfType = ":first-of-type"
166 | interpolate Focus = ":focus"
167 | interpolate FocusVisible = ":focus-visible"
168 | interpolate FocusWithin = ":focus-within"
169 | interpolate Future = ":future"
170 | interpolate Hover = ":hover"
171 | interpolate Indeterminate = ":indeterminate"
172 | interpolate InRange = ":in-range"
173 | interpolate Invalid = ":invalid"
174 | interpolate (Lang x) = ":lang(\{x})"
175 | interpolate LastChild = ":last-child"
176 | interpolate LastOfType = ":last-of-type"
177 | interpolate Left = ":left"
178 | interpolate Link = ":link"
179 | interpolate LocalLink = ":local-link"
180 | interpolate (NthChild x) = ":nth-child(\{x})"
181 | interpolate (NthOfType x) = ":nth-of-type(\#{x})"
182 | interpolate (NthLastChild x) = ":nth-last-child(\#{x})"
183 | interpolate (NthLastOfType x) = ":nth-last-of-type(\#{x})"
184 | interpolate OnlyChild = ":only-child"
185 | interpolate OnlyOfType = ":only-of-type"
186 | interpolate Optional = ":optional"
187 | interpolate OutOfRange = ":out-of-range"
188 | interpolate Past = ":past"
189 | interpolate PlaceholderShown = ":placeholder-shown"
190 | interpolate Playing = ":playing"
191 | interpolate Paused = ":paused"
192 | interpolate ReadOnly = ":read-only"
193 | interpolate ReadWrite = ":read-write"
194 | interpolate Required = ":required"
195 | interpolate Right = ":right"
196 | interpolate Root = ":root"
197 | interpolate Scope = ":scope"
198 | interpolate Valid = ":valid"
199 | interpolate Target = ":target"
200 | interpolate Visited = ":visited"
201 | interpolate After = "::after"
202 | interpolate Backdrop = "::backdrop"
203 | interpolate Before = "::before"
204 | interpolate Cue = "::cue"
205 | interpolate CueRegion = "::cue-region"
206 | interpolate FirstLetter = "::first-letter"
207 | interpolate FirstLine = "::first-line"
208 | interpolate FileSelectorButton = "::file-selector-button"
209 | interpolate Marker = "::marker"
210 | interpolate Placeholder = "::placeholder"
211 | interpolate Selection = "::selection"
214 | class : String -> Selector
218 | classes : List String -> Selector
220 | classes (x :: xs) = class x :: classes xs
223 | elem : {str : _} -> (0 tpe : ElementType str t) -> Selector
227 | id : String -> Selector