diff options
Diffstat (limited to 'src/bem/_validators.scss')
| -rw-r--r-- | src/bem/_validators.scss | 68 |
1 files changed, 36 insertions, 32 deletions
diff --git a/src/bem/_validators.scss b/src/bem/_validators.scss index eb09a60..042e15e 100644 --- a/src/bem/_validators.scss +++ b/src/bem/_validators.scss | |||
| @@ -16,6 +16,10 @@ | |||
| 16 | /// @access public | 16 | /// @access public |
| 17 | //// | 17 | //// |
| 18 | 18 | ||
| 19 | @use './vars'; | ||
| 20 | @use '../functions'; | ||
| 21 | @use '../contexts'; | ||
| 22 | |||
| 19 | /// | 23 | /// |
| 20 | /// A list of validator functions. | 24 | /// A list of validator functions. |
| 21 | /// | 25 | /// |
| @@ -23,7 +27,7 @@ | |||
| 23 | /// | 27 | /// |
| 24 | /// @access private | 28 | /// @access private |
| 25 | /// | 29 | /// |
| 26 | $iro-bem-validators: (); | 30 | $validators: (); |
| 27 | 31 | ||
| 28 | /// | 32 | /// |
| 29 | /// Register one or multiple validator functions. | 33 | /// Register one or multiple validator functions. |
| @@ -41,19 +45,19 @@ $iro-bem-validators: (); | |||
| 41 | /// @param {string} $func-name - First function name. | 45 | /// @param {string} $func-name - First function name. |
| 42 | /// @param {string} $func-names - Other function names. | 46 | /// @param {string} $func-names - Other function names. |
| 43 | /// | 47 | /// |
| 44 | @mixin iro-bem-add-validator($func-name, $func-names...) { | 48 | @mixin add($func-name, $func-names...) { |
| 45 | $noop: iro-bem-add-validator($func-name, $func-names...); | 49 | $noop: add($func-name, $func-names...); |
| 46 | } | 50 | } |
| 47 | 51 | ||
| 48 | /// | 52 | /// |
| 49 | /// Register one or multiple validator functions. Check the respective mixin documentation for more information. | 53 | /// Register one or multiple validator functions. Check the respective mixin documentation for more information. |
| 50 | /// | 54 | /// |
| 51 | /// @see {mixin} iro-bem-add-validator | 55 | /// @see {mixin} add |
| 52 | /// | 56 | /// |
| 53 | @function iro-bem-add-validator($func-name, $func-names...) { | 57 | @function add($func-name, $func-names...) { |
| 54 | @each $fn-name in join($func-name, $func-names) { | 58 | @each $fn-name in join($func-name, $func-names) { |
| 55 | $fn: get-function($fn-name); | 59 | $fn: get-function($fn-name); |
| 56 | $iro-bem-validators: map-merge($iro-bem-validators, ($fn-name: $fn)) !global; | 60 | $validators: map-merge($validators, ($fn-name: $fn)); |
| 57 | } | 61 | } |
| 58 | @return null; | 62 | @return null; |
| 59 | } | 63 | } |
| @@ -64,25 +68,25 @@ $iro-bem-validators: (); | |||
| 64 | /// @param {string} $func-name - First function name. | 68 | /// @param {string} $func-name - First function name. |
| 65 | /// @param {string} $func-names - Other function names. | 69 | /// @param {string} $func-names - Other function names. |
| 66 | /// | 70 | /// |
| 67 | @mixin iro-bem-remove-validator($func-name, $func-names...) { | 71 | @mixin remove($func-name, $func-names...) { |
| 68 | $noop: iro-bem-remove-validator($func-name, $func-names...); | 72 | $noop: remove($func-name, $func-names...); |
| 69 | } | 73 | } |
| 70 | 74 | ||
| 71 | /// | 75 | /// |
| 72 | /// Unregister one or multiple validator functions. Check the respective mixin documentation for more information. | 76 | /// Unregister one or multiple validator functions. Check the respective mixin documentation for more information. |
| 73 | /// | 77 | /// |
| 74 | /// @see {mixin} iro-bem-remove-validator | 78 | /// @see {mixin} remove |
| 75 | /// | 79 | /// |
| 76 | @function iro-bem-remove-validator($func-name, $func-names...) { | 80 | @function remove($func-name, $func-names...) { |
| 77 | $iro-bem-validators: map-remove($iro-bem-validators, $func-name, $func-names...) !global; | 81 | $validators: map-remove($validators, $func-name, $func-names...); |
| 78 | @return null; | 82 | @return null; |
| 79 | } | 83 | } |
| 80 | 84 | ||
| 81 | /// | 85 | /// |
| 82 | /// @access private | 86 | /// @access private |
| 83 | /// | 87 | /// |
| 84 | @mixin iro-bem-validate($type, $args, $selector, $context) { | 88 | @mixin validate($type, $args, $selector, $context) { |
| 85 | @each $id, $fn in $iro-bem-validators { | 89 | @each $id, $fn in $validators { |
| 86 | $result: call($fn, $type, $args, $selector, $context); | 90 | $result: call($fn, $type, $args, $selector, $context); |
| 87 | @if not nth($result, 1) { | 91 | @if not nth($result, 1) { |
| 88 | @error 'A BEM validator rejected this mixin usage due to the following reason: #{nth($result, 2)}'; | 92 | @error 'A BEM validator rejected this mixin usage due to the following reason: #{nth($result, 2)}'; |
| @@ -100,26 +104,26 @@ $iro-bem-validators: (); | |||
| 100 | /// A validator that makes sure blocks are declared in the right order, determined by the | 104 | /// A validator that makes sure blocks are declared in the right order, determined by the |
| 101 | /// namespace used. | 105 | /// namespace used. |
| 102 | /// | 106 | /// |
| 103 | @function iro-bem-validator--enforce-namespace-order($type, $args, $selector, $context) { | 107 | @function enforce-namespace-order($type, $args, $selector, $context) { |
| 104 | @if not global-variable-exists(iro-bem-namespace-order) { | 108 | @if not global-variable-exists(namespace-order, vars) { |
| 105 | $iro-bem-namespace-order: map-keys($iro-bem-namespaces) !global; | 109 | vars.$namespace-order: map-keys(vars.$namespaces); |
| 106 | } | 110 | } |
| 107 | @if not global-variable-exists(iro-bem-cur-namespace-index) { | 111 | @if not global-variable-exists(cur-namespace-index, vars) { |
| 108 | $iro-bem-cur-namespace-index: 1 !global; | 112 | vars.$cur-namespace-index: 1; |
| 109 | } | 113 | } |
| 110 | 114 | ||
| 111 | @if $type == 'block' { | 115 | @if $type == 'block' { |
| 112 | $block-type: map-get($args, 'type'); | 116 | $block-type: map-get($args, 'type'); |
| 113 | 117 | ||
| 114 | @if $block-type != null { | 118 | @if $block-type != null { |
| 115 | $ns-index: index($iro-bem-namespace-order, $block-type); | 119 | $ns-index: index(vars.$namespace-order, $block-type); |
| 116 | 120 | ||
| 117 | @if $ns-index != null { | 121 | @if $ns-index != null { |
| 118 | @if $ns-index < $iro-bem-cur-namespace-index { | 122 | @if $ns-index < vars.$cur-namespace-index { |
| 119 | @return false 'Namespace "#{$block-type}" comes before current namespace #{nth($iro-bem-namespace-order, $iro-bem-cur-namespace-index)}'; | 123 | @return false 'Namespace "#{$block-type}" comes before current namespace #{nth(vars.$namespace-order, vars.$cur-namespace-index)}'; |
| 120 | } | 124 | } |
| 121 | 125 | ||
| 122 | $iro-bem-cur-namespace-index: $ns-index !global; | 126 | vars.$cur-namespace-index: $ns-index; |
| 123 | } | 127 | } |
| 124 | } | 128 | } |
| 125 | } | 129 | } |
| @@ -130,9 +134,9 @@ $iro-bem-validators: (); | |||
| 130 | /// | 134 | /// |
| 131 | /// A validator that makes all BEM entities immutable. | 135 | /// A validator that makes all BEM entities immutable. |
| 132 | /// | 136 | /// |
| 133 | @function iro-bem-validator--immutable-entities($type, $args, $selector, $context) { | 137 | @function immutable-entities($type, $args, $selector, $context) { |
| 134 | @if not global-variable-exists(iro-bem-generated-selectors) { | 138 | @if not global-variable-exists(generated-selectors, vars) { |
| 135 | $iro-bem-generated-selectors: () !global; | 139 | vars.$generated-selectors: (); |
| 136 | } | 140 | } |
| 137 | 141 | ||
| 138 | $block-name: null; | 142 | $block-name: null; |
| @@ -143,7 +147,7 @@ $iro-bem-validators: (); | |||
| 143 | $block-name: map-get($args, 'name'); | 147 | $block-name: map-get($args, 'name'); |
| 144 | $block-type: map-get($args, 'type'); | 148 | $block-type: map-get($args, 'type'); |
| 145 | } @else { | 149 | } @else { |
| 146 | $block-context: iro-context-get($iro-bem-context-id, 'block'); | 150 | $block-context: contexts.get(vars.$context-id, 'block'); |
| 147 | $block-name: map-get(nth($block-context, 2), 'name'); | 151 | $block-name: map-get(nth($block-context, 2), 'name'); |
| 148 | $block-type: map-get(nth($block-context, 2), 'type'); | 152 | $block-type: map-get(nth($block-context, 2), 'type'); |
| 149 | } | 153 | } |
| @@ -155,21 +159,21 @@ $iro-bem-validators: (); | |||
| 155 | } | 159 | } |
| 156 | 160 | ||
| 157 | @if $type == 'block' { | 161 | @if $type == 'block' { |
| 158 | @if map-has-key($iro-bem-generated-selectors, $block-id) { | 162 | @if map-has-key(vars.$generated-selectors, $block-id) { |
| 159 | @return false 'Entity "#{$type}" with arguments [ #{iro-map-print($args)} ] was already defined.'; | 163 | @return false 'Entity "#{$type}" with arguments [ #{functions.map-print($args)} ] was already defined.'; |
| 160 | } | 164 | } |
| 161 | 165 | ||
| 162 | $iro-bem-generated-selectors: map-merge($iro-bem-generated-selectors, ($block-id: ())) !global; | 166 | vars.$generated-selectors: map-merge(vars.$generated-selectors, ($block-id: ())); |
| 163 | } @else { | 167 | } @else { |
| 164 | $selectors: map-get($iro-bem-generated-selectors, $block-id); | 168 | $selectors: map-get(vars.$generated-selectors, $block-id); |
| 165 | 169 | ||
| 166 | @if index($selectors, $selector) { | 170 | @if index($selectors, $selector) { |
| 167 | @return false 'Entity "#{$type}" with arguments [ #{iro-map-print($args)} ] was already defined.'; | 171 | @return false 'Entity "#{$type}" with arguments [ #{functions.map-print($args)} ] was already defined.'; |
| 168 | } | 172 | } |
| 169 | 173 | ||
| 170 | $selectors: append($selectors, $selector); | 174 | $selectors: append($selectors, $selector); |
| 171 | 175 | ||
| 172 | $iro-bem-generated-selectors: map-merge($iro-bem-generated-selectors, ($block-id: $selectors)) !global; | 176 | vars.$generated-selectors: map-merge(vars.$generated-selectors, ($block-id: $selectors)); |
| 173 | } | 177 | } |
| 174 | 178 | ||
| 175 | @return true ''; | 179 | @return true ''; |
