mixins-guards-default-func.less 4.3 KB

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