mixins-guards-default-func.less 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. // basics:
  2. guard-default-basic-1 {
  3. .m(1) {case: 1}
  4. .m(@x) when (default()) {default: @x}
  5. &-1 {.m(1)}
  6. &-2 {.m(2)}
  7. }
  8. guard-default-basic-2 {
  9. .m(1) {case: 1}
  10. .m(2) {case: 2}
  11. .m(3) {case: 3}
  12. .m(@x) when (default()) {default: @x}
  13. &-0 {.m(0)}
  14. &-2 {.m(2)}
  15. }
  16. guard-default-basic-3 {
  17. .m(@x) when (@x = 1) {case: 1}
  18. .m(2) {case: 2}
  19. .m(@x) when (@x = 3) {case: 3}
  20. .m(@x) when (default()) {default: @x}
  21. &-0 {.m(0)}
  22. &-2 {.m(2)}
  23. &-3 {.m(3)}
  24. }
  25. guard-default-definition-order {
  26. .m(@x) when (default()) {default: @x}
  27. .m(@x) when (@x = 1) {case: 1}
  28. .m(2) {case: 2}
  29. .m(@x) when (@x = 3) {case: 3}
  30. &-0 {.m(0)}
  31. &-2 {.m(2)}
  32. &-2 {.m(3)}
  33. }
  34. // out of guard:
  35. guard-default-out-of-guard {
  36. .m(1) {case-1: 1}
  37. .m(@x: default()) when (default()) {default: @x}
  38. &-0 {
  39. case-0: default();
  40. .m(1);
  41. .m(2);
  42. case-2: default();
  43. }
  44. &-1 {.m(default())}
  45. &-2 {.m()}
  46. }
  47. // expressions:
  48. guard-default-expr-not {
  49. .m(1) {case: 1}
  50. .m(@x) when not(default()) {default: @x}
  51. &-1 {.m(1)}
  52. &-2 {.m(2)}
  53. }
  54. guard-default-expr-eq {
  55. .m(@x) when (@x = true) {case: @x}
  56. .m(@x) when (@x = false) {case: @x}
  57. .m(@x) when (@x = default()) {default: @x}
  58. &-true {.m(true)}
  59. &-false {.m(false)}
  60. }
  61. guard-default-expr-or {
  62. .m(1) {case: 1}
  63. .m(2) {case: 2}
  64. .m(@x) when (default()), (@x = 2) {default: @x}
  65. &-1 {.m(1)}
  66. &-2 {.m(2)}
  67. &-3 {.m(3)}
  68. }
  69. guard-default-expr-and {
  70. .m(1) {case: 1}
  71. .m(2) {case: 2}
  72. .m(@x) when (default()) and (@x = 3) {default: @x}
  73. &-1 {.m(1)}
  74. &-2 {.m(2)}
  75. &-3 {.m(3)}
  76. &-4 {.m(4)}
  77. }
  78. guard-default-expr-always {
  79. .m(1) {case: 1}
  80. .m(@x) when (default()), not(default()) {default: @x} // always match
  81. &-1 {.m(1)}
  82. &-2 {.m(2)}
  83. }
  84. guard-default-expr-never {
  85. .m(1) {case: 1}
  86. .m(@x) when (default()) and not(default()) {default: @x} // never match
  87. &-1 {.m(1)}
  88. &-2 {.m(2)}
  89. }
  90. // not conflicting multiple default() uses:
  91. guard-default-multi-1 {
  92. .m(0) {case: 0}
  93. .m(@x) when (default()) {default-1: @x}
  94. .m(2) when (default()) {default-2: @x}
  95. &-0 {.m(0)}
  96. &-1 {.m(1)}
  97. }
  98. guard-default-multi-2 {
  99. .m(1, @x) when (default()) {default-1: @x}
  100. .m(2, @x) when (default()) {default-2: @x}
  101. .m(@x, yes) when (default()) {default-3: @x}
  102. &-1 {.m(1, no)}
  103. &-2 {.m(2, no)}
  104. &-3 {.m(3, yes)}
  105. }
  106. guard-default-multi-3 {
  107. .m(red) {case-1: darkred}
  108. .m(blue) {case-2: darkblue}
  109. .m(@x) when (iscolor(@x)) and (default()) {default-color: @x}
  110. .m('foo') {case-1: I am 'foo'}
  111. .m('bar') {case-2: I am 'bar'}
  112. .m(@x) when (isstring(@x)) and (default()) {default-string: I am @x}
  113. &-blue {.m(blue)}
  114. &-green {.m(green)}
  115. &-foo {.m('foo')}
  116. &-baz {.m('baz')}
  117. }
  118. guard-default-multi-4 {
  119. .m(@x) when (default()), not(default()) {always: @x}
  120. .m(@x) when (default()) and not(default()) {never: @x}
  121. .m(2) {case: 2}
  122. .m(1);
  123. .m(2);
  124. }
  125. guard-default-not-ambiguos-2 {
  126. .m(@x) {case: 1}
  127. .m(@x) when (default()) {default: @x}
  128. .m(@x) when not(default()) {not-default: @x}
  129. .m(2);
  130. }
  131. guard-default-not-ambiguos-3 {
  132. .m(@x) {case: 1}
  133. .m(@x) when not(default()) {not-default-1: @x}
  134. .m(@x) when not(default()) {not-default-2: @x}
  135. .m(2);
  136. }
  137. // default & scope
  138. guard-default-scopes {
  139. .s1() {.m(@v) {1: no condition}}
  140. .s2() {.m(@v) when (@v) {2: when true}}
  141. .s3() {.m(@v) when (default()) {3: when default}}
  142. &-3 {
  143. .s2();
  144. .s3();
  145. .m(false);
  146. }
  147. &-1 {
  148. .s1();
  149. .s3();
  150. .m(false);
  151. }
  152. }