diff options
Diffstat (limited to 'src/bem/_multi.scss')
| -rw-r--r-- | src/bem/_multi.scss | 102 |
1 files changed, 53 insertions, 49 deletions
diff --git a/src/bem/_multi.scss b/src/bem/_multi.scss index 1de5cdc..c0beeeb 100644 --- a/src/bem/_multi.scss +++ b/src/bem/_multi.scss | |||
| @@ -4,6 +4,10 @@ | |||
| 4 | /// @access public | 4 | /// @access public |
| 5 | //// | 5 | //// |
| 6 | 6 | ||
| 7 | @use 'sass:list'; | ||
| 8 | @use 'sass:meta'; | ||
| 9 | @use 'sass:selector'; | ||
| 10 | @use 'sass:string'; | ||
| 7 | @use '../functions'; | 11 | @use '../functions'; |
| 8 | @use '../contexts'; | 12 | @use '../contexts'; |
| 9 | @use './block'; | 13 | @use './block'; |
| @@ -81,67 +85,67 @@ | |||
| 81 | /// } | 85 | /// } |
| 82 | /// | 86 | /// |
| 83 | @mixin multi($first, $others...) { | 87 | @mixin multi($first, $others...) { |
| 84 | @include contexts.assert-stack-count(vars.$context-id, vars.$max-depth); | 88 | @include contexts.assert-stack-count(vars.$context-id, vars.$max-depth); |
| 85 | 89 | ||
| 86 | @each $entity in functions.list-prepend($others, $first) { | 90 | @each $entity in functions.list-prepend($others, $first) { |
| 87 | $is-manual-selector: false; | 91 | $is-manual-selector: false; |
| 88 | 92 | ||
| 89 | @if type-of($entity) == string { | 93 | @if meta.type-of($entity) == string { |
| 90 | @if find-bem-function($entity) == null { | 94 | @if find-bem-function($entity) == null { |
| 91 | $is-manual-selector: true; | 95 | $is-manual-selector: true; |
| 92 | } | 96 | } |
| 93 | } | 97 | } |
| 94 | 98 | ||
| 95 | @if $is-manual-selector { | 99 | @if $is-manual-selector { |
| 96 | $sel: if(&, selector-nest(&, $entity), selector-parse($entity)); | 100 | $sel: if(&, selector.nest(&, $entity), selector.parse($entity)); |
| 97 | 101 | ||
| 98 | @at-root #{$sel} { | 102 | @at-root #{$sel} { |
| 99 | @content; | 103 | @content; |
| 100 | } | 104 | } |
| 101 | } @else { | 105 | } @else { |
| 102 | $entity-func-id: null; | 106 | $entity-func-id: null; |
| 103 | 107 | ||
| 104 | @if type-of($entity) == list { | 108 | @if meta.type-of($entity) == list { |
| 105 | $entity-func-id: nth($entity, 1); | 109 | $entity-func-id: list.nth($entity, 1); |
| 106 | $entity: functions.list-slice($entity, 2); | 110 | $entity: functions.list-slice($entity, 2); |
| 107 | } @else { | 111 | } @else { |
| 108 | $entity-func-id: $entity; | 112 | $entity-func-id: $entity; |
| 109 | $entity: (); | 113 | $entity: (); |
| 110 | } | 114 | } |
| 111 | 115 | ||
| 112 | @if str-slice($entity-func-id, str-length($entity-func-id)) == ':' { | 116 | @if string.slice($entity-func-id, string.length($entity-func-id)) == ':' { |
| 113 | $entity-func-id: unquote(str-slice($entity-func-id, 1, str-length($entity-func-id) - 1)); | 117 | $entity-func-id: string.unquote(string.slice($entity-func-id, 1, string.length($entity-func-id) - 1)); |
| 114 | } | 118 | } |
| 115 | 119 | ||
| 116 | $sel-func: find-bem-function($entity-func-id); | 120 | $sel-func: find-bem-function($entity-func-id); |
| 117 | 121 | ||
| 118 | @if $sel-func == null { | 122 | @if $sel-func == null { |
| 119 | @error 'Function "#{inspect($entity-func-id)}" was not found.'; | 123 | @error 'Function "#{inspect($entity-func-id)}" was not found.'; |
| 120 | } | 124 | } |
| 121 | 125 | ||
| 122 | $entity-result: call($sel-func, $entity...); | 126 | $entity-result: meta.call($sel-func, $entity...); |
| 123 | $entity-result-selector: nth($entity-result, 1); | 127 | $entity-result-selector: list.nth($entity-result, 1); |
| 124 | $entity-result-context: nth($entity-result, 2); | 128 | $entity-result-context: list.nth($entity-result, 2); |
| 125 | 129 | ||
| 126 | @if $entity-result-context != null { | 130 | @if $entity-result-context != null { |
| 127 | @include contexts.push(vars.$context-id, $entity-result-context...); | 131 | @include contexts.push(vars.$context-id, $entity-result-context...); |
| 128 | } | 132 | } |
| 129 | @at-root #{$entity-result-selector} { | 133 | @at-root #{$entity-result-selector} { |
| 130 | @content; | 134 | @content; |
| 131 | } | 135 | } |
| 132 | @if $entity-result-context != null { | 136 | @if $entity-result-context != null { |
| 133 | @include contexts.pop(vars.$context-id); | 137 | @include contexts.pop(vars.$context-id); |
| 134 | } | 138 | } |
| 135 | } | 139 | } |
| 136 | } | 140 | } |
| 137 | } | 141 | } |
| 138 | 142 | ||
| 139 | @function find-bem-function($name) { | 143 | @function find-bem-function($name) { |
| 140 | @each $module in (block element modifier state suffix theme) { | 144 | @each $module in (block element modifier state suffix theme) { |
| 141 | @if function-exists($name, $module) { | 145 | @if meta.function-exists($name, $module) { |
| 142 | @return get-function($name, $module: $module); | 146 | @return meta.get-function($name, $module: $module); |
| 143 | } | 147 | } |
| 144 | } | 148 | } |
| 145 | 149 | ||
| 146 | @return null; | 150 | @return null; |
| 147 | } | 151 | } |
