0 | module Text.CSS.Selector
4 | import Text.CSS.Class
5 | import Text.CSS.Property
11 | data Combinator : Type where
12 | Descendant : Combinator
14 | GeneralSibling : Combinator
15 | AdjacentSibling : Combinator
18 | Interpolation Combinator where
19 | interpolate Descendant = ""
20 | interpolate Child = ">"
21 | interpolate GeneralSibling = "~"
22 | interpolate AdjacentSibling = "+"
25 | data AttributeValue : Type where
26 | Set : AttributeValue
27 | Has : String -> AttributeValue
28 | Equals : String -> AttributeValue
29 | Contains : String -> AttributeValue
30 | Prefix : String -> AttributeValue
31 | Suffix : String -> AttributeValue
34 | Interpolation AttributeValue where
35 | interpolate Set = ""
36 | interpolate (Has s) = "~=\{quote s}"
37 | interpolate (Equals s) = "=\{quote s}"
38 | interpolate (Contains s) = "*=\{quote s}"
39 | interpolate (Prefix s) = "^=\{quote s}"
40 | interpolate (Suffix s) = "$=\{quote s}"
43 | data Selector : Type where
45 | Id : String -> Selector
46 | Class : Class -> Selector
47 | Elem : {str : _} -> (0 tag : HTMLTag str) -> Selector
48 | Attr : String -> AttributeValue -> Selector
49 | Complex : Selector -> Combinator -> Selector -> Selector
51 | (::) : Selector -> Selector -> Selector
66 | Dir : Direction -> Selector
76 | FirstChild : Selector
78 | FirstOfType : Selector
82 | FocusVisible : Selector
84 | FocusWithin : Selector
90 | Indeterminate : Selector
96 | Lang : String -> Selector
98 | LastChild : Selector
100 | LastOfType : Selector
106 | LocalLink : Selector
108 | NthChild : String -> Selector
110 | NthOfType : String -> Selector
112 | NthLastChild : String -> Selector
114 | NthLastOfType : String -> Selector
116 | OnlyChild : Selector
118 | OnlyOfType : Selector
120 | Optional : Selector
122 | OutOfRange : Selector
126 | PlaceholderShown : Selector
132 | ReadOnly : Selector
134 | ReadWrite : Selector
136 | Required : Selector
151 | Backdrop : Selector
154 | CueRegion : Selector
155 | FirstLetter : Selector
156 | FirstLine : Selector
157 | FileSelectorButton : Selector
159 | Placeholder : Selector
160 | Selection : Selector
164 | Interpolation Selector where
165 | interpolate Star = "*"
166 | interpolate (Id s) = "#\{s}"
167 | interpolate (Class s) = ".\{s}"
168 | interpolate (Elem {str} _) = str
169 | interpolate (Attr s v) = "[\{s}\{v}]"
170 | interpolate [] = ""
171 | interpolate (h::t) = interpolate h ++ interpolate t
172 | interpolate (Complex s1 Descendant s2) = "\{s1} \{s2}"
173 | interpolate (Complex s1 c s2) = "\{s1} \{c} \{s2}"
174 | interpolate Active = ":active"
175 | interpolate AnyLink = ":any-link"
176 | interpolate Blank = ":blank"
177 | interpolate Checked = ":checked"
178 | interpolate Current = ":current"
179 | interpolate Default = ":default"
180 | interpolate (Dir x) = ":dir(\{x})"
181 | interpolate Disabled = ":disabled"
182 | interpolate Empty = ":empty"
183 | interpolate Enabled = ":enabled"
184 | interpolate First = ":first"
185 | interpolate FirstChild = ":first-child"
186 | interpolate FirstOfType = ":first-of-type"
187 | interpolate Focus = ":focus"
188 | interpolate FocusVisible = ":focus-visible"
189 | interpolate FocusWithin = ":focus-within"
190 | interpolate Future = ":future"
191 | interpolate Hover = ":hover"
192 | interpolate Indeterminate = ":indeterminate"
193 | interpolate InRange = ":in-range"
194 | interpolate Invalid = ":invalid"
195 | interpolate (Lang x) = ":lang(\{x})"
196 | interpolate LastChild = ":last-child"
197 | interpolate LastOfType = ":last-of-type"
198 | interpolate Left = ":left"
199 | interpolate Link = ":link"
200 | interpolate LocalLink = ":local-link"
201 | interpolate (NthChild x) = ":nth-child(\{x})"
202 | interpolate (NthOfType x) = ":nth-of-type(\#{x})"
203 | interpolate (NthLastChild x) = ":nth-last-child(\#{x})"
204 | interpolate (NthLastOfType x) = ":nth-last-of-type(\#{x})"
205 | interpolate OnlyChild = ":only-child"
206 | interpolate OnlyOfType = ":only-of-type"
207 | interpolate Optional = ":optional"
208 | interpolate OutOfRange = ":out-of-range"
209 | interpolate Past = ":past"
210 | interpolate PlaceholderShown = ":placeholder-shown"
211 | interpolate Playing = ":playing"
212 | interpolate Paused = ":paused"
213 | interpolate ReadOnly = ":read-only"
214 | interpolate ReadWrite = ":read-write"
215 | interpolate Required = ":required"
216 | interpolate Right = ":right"
217 | interpolate Root = ":root"
218 | interpolate Scope = ":scope"
219 | interpolate Valid = ":valid"
220 | interpolate Target = ":target"
221 | interpolate Visited = ":visited"
222 | interpolate After = "::after"
223 | interpolate Backdrop = "::backdrop"
224 | interpolate Before = "::before"
225 | interpolate Cue = "::cue"
226 | interpolate CueRegion = "::cue-region"
227 | interpolate FirstLetter = "::first-letter"
228 | interpolate FirstLine = "::first-line"
229 | interpolate FileSelectorButton = "::file-selector-button"
230 | interpolate Marker = "::marker"
231 | interpolate Placeholder = "::placeholder"
232 | interpolate Selection = "::selection"
235 | class : Class -> Selector
239 | classes : List Class -> Selector
241 | classes (x :: xs) = class x :: classes xs
244 | elem : {str : _} -> (0 tpe : HTMLTag str) -> Selector
248 | attribute : String -> Selector
249 | attribute s = Attr s Set
252 | id : String -> Selector