|
46 | 46 | for (var i = start; i < selector.length; i++) { |
47 | 47 | var c = selector[i]; |
48 | 48 |
|
49 | | - if (c == '\'' || c == '"') { |
50 | | - insideQuotes = !insideQuotes; |
51 | | - } |
52 | | - |
53 | 49 | if (!insideQuotes && c == ']') { |
54 | 50 | return i; |
55 | 51 | } |
56 | 52 |
|
57 | | - if (obj.op.indexOf('=') == -1) { |
58 | | - if (c in {'+':0, '~': 1, '=': 2, '$': 3, '|': 4, '^': 5, '*': 6}) { |
59 | | - obj.op += c; |
| 53 | + if (c == '\'' || c == '"') { |
| 54 | + |
| 55 | + insideQuotes = !insideQuotes; |
| 56 | + } |
| 57 | + else { |
| 58 | + |
| 59 | + if (insideQuotes) { |
| 60 | + obj.right += c; |
60 | 61 | } |
61 | | - else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\\') { |
62 | | - obj.left += c; |
| 62 | + else if (obj.op.indexOf('=') == -1) { |
| 63 | + if (c in {'+':0, '~': 1, '=': 2, '$': 3, '|': 4, '^': 5, '*': 6}) { |
| 64 | + obj.op += c; |
| 65 | + } |
| 66 | + else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\\') { |
| 67 | + obj.left += c; |
| 68 | + } |
| 69 | + } |
| 70 | + else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\'' && c != '"') { |
| 71 | + obj.right += c; |
63 | 72 | } |
64 | | - } |
65 | | - else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\'' && c != '"') { |
66 | | - obj.right += c; |
67 | 73 | } |
68 | 74 | } |
69 | 75 | error('invalid attribute', start); |
|
208 | 214 | value: '', |
209 | 215 | op: 'HAS' |
210 | 216 | } |
211 | | - i = parseRecursivePseudo(i+10, selector, character); |
| 217 | + i = parseRecursivePseudo(i+5, selector, character); |
212 | 218 | character = character.value; |
213 | 219 | type = _LL.HAS; |
214 | 220 | } |
| 221 | + else if (selector.substr(i + 1, 4) == 'lang') { |
| 222 | + character = { |
| 223 | + value: '', |
| 224 | + op: 'LANG' |
| 225 | + } |
| 226 | + i = parseRecursivePseudo(i+6, selector, character, true); |
| 227 | + character = { |
| 228 | + value: ':lang', |
| 229 | + content: character.value.replace(/['"]/g, '') |
| 230 | + } |
| 231 | + type = _LL.PSCLS; |
| 232 | + } |
215 | 233 | else if (selector.substr(i +1, 3) == 'nth') { |
216 | | - character= { |
| 234 | + var nth = selector.substr(i, selector.substr(i).indexOf('(')); |
| 235 | + character = { |
217 | 236 | value: '', |
218 | 237 | op: 'NTH' |
219 | | - } |
220 | | - i = parseNth(i+11, selector, character); |
221 | | - character = character.value; |
| 238 | + }; |
| 239 | + i = parseNth(i + nth.length + 1, selector, character); |
| 240 | + character = { |
| 241 | + value: nth, |
| 242 | + content: character.value |
| 243 | + }; |
222 | 244 | type = _LL.NTH; |
223 | 245 | } |
| 246 | + else if (selector.substr(i +1, 2) == 'eq') { |
| 247 | + var eq = selector.substr(i, selector.substr(i).indexOf('(')); |
| 248 | + character = { |
| 249 | + value: '', |
| 250 | + op: 'EQ' |
| 251 | + }; |
| 252 | + i = parseNth(i + eq.length + 1, selector, character); |
| 253 | + character = { |
| 254 | + value: eq, |
| 255 | + content: character.value |
| 256 | + }; |
| 257 | + type = _LL.PSCLS; |
| 258 | + } |
| 259 | + else if (selector.substr(i +1, 2) == 'lt') { |
| 260 | + var lt = selector.substr(i, selector.substr(i).indexOf('(')); |
| 261 | + character = { |
| 262 | + value: '', |
| 263 | + op: 'LT' |
| 264 | + }; |
| 265 | + i = parseNth(i + lt.length + 1, selector, character); |
| 266 | + character = { |
| 267 | + value: lt, |
| 268 | + content: (character.value || 0) * 1 - 1 |
| 269 | + }; |
| 270 | + type = _LL.PSCLS; |
| 271 | + } |
| 272 | + else if (selector.substr(i +1, 2) == 'gt') { |
| 273 | + var gt = selector.substr(i, selector.substr(i).indexOf('(')); |
| 274 | + character = { |
| 275 | + value: '', |
| 276 | + op: 'GT' |
| 277 | + }; |
| 278 | + i = parseNth(i + gt.length + 1, selector, character); |
| 279 | + character = { |
| 280 | + value: gt, |
| 281 | + content: (character.value || 0) * 1 + 1 |
| 282 | + }; |
| 283 | + type = _LL.PSCLS; |
| 284 | + } |
224 | 285 | else { |
225 | 286 | type = _LL.PSCLS; |
226 | 287 | } |
|
247 | 308 | break; |
248 | 309 | } |
249 | 310 | } |
250 | | - if (character.content) { |
| 311 | + if (character.content != undefined) { |
251 | 312 | selectorStack.push({ |
252 | 313 | type: type, |
253 | | - value: character.value || character, |
| 314 | + value: character.value != undefined ? character.value : character, |
254 | 315 | content: character.content |
255 | 316 | }); |
256 | 317 | } |
|
0 commit comments