|
| 1 | +@def-area-name: count-from-h; |
| 2 | +@def-counter-from: 2; // Initialize Counter from h2 |
| 3 | +@max-counter-level: 6; // Only h1~h6 are considered |
| 4 | + |
| 5 | +.header-counter( |
| 6 | + @name-area: ~"@{def-area-name}@{def-counter-from}"; |
| 7 | + @counter-from: @def-counter-from; |
| 8 | +) { |
| 9 | + .@{name-area} { |
| 10 | + counter-reset: ~"h@{counter-from}counter"; |
| 11 | + .header-counter-internal(@counter-from, @counter-from); |
| 12 | + } |
| 13 | +} |
| 14 | + |
| 15 | +.header-counter-css-rule ( @property, @level ) { |
| 16 | + @{property}: ~"h@{level}counter"; |
| 17 | +} |
| 18 | + |
| 19 | +.header-counter-internal( |
| 20 | + @counter-header-level; |
| 21 | + @counter-beginning: @def-counter-from; |
| 22 | +) when (@counter-header-level =< @max-counter-level) { |
| 23 | + .make-counter-string(@index, @curr-level, @curr) when (@index =< @curr-level) { |
| 24 | + .make-counter-string((@index + 1), @curr-level, "@{curr} '.' counter(h@{index}counter)"); |
| 25 | + } |
| 26 | + .make-counter-string(@index, @curr-level, @curr) when (@index > @counter-header-level) { |
| 27 | + .make-counter-string-fin(@curr); |
| 28 | + } |
| 29 | + .make-counter-string-fin(@str) { |
| 30 | + content: ~"@{str}'.\0000a0\0000a0'"; |
| 31 | + } |
| 32 | + h@{counter-header-level} { |
| 33 | + .header-counter-css-rule(counter-reset, @counter-header-level + 1); |
| 34 | + &:before{ |
| 35 | + .header-counter-css-rule(counter-increment, @counter-header-level); |
| 36 | + .make-counter-string( |
| 37 | + @counter-beginning + 1, |
| 38 | + @counter-header-level, |
| 39 | + "counter(h@{counter-beginning}counter)"); |
| 40 | + } |
| 41 | + &.no-count:before { |
| 42 | + content: none; |
| 43 | + counter-increment: none; |
| 44 | + } |
| 45 | + } |
| 46 | + .header-counter-internal((@counter-header-level + 1), @counter-beginning); |
| 47 | +} |
| 48 | + |
| 49 | +body { |
| 50 | + .header-counter(count-from-h1, 1); |
| 51 | + .header-counter(count-from-h2, 2); |
| 52 | +} |
0 commit comments