Sha256: 8fcbf057582e19b249fa02d364a689565e161390649dcb04ad3622a5bd85a376

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

// -----------------------------------------------------------------------------
// 11. Hack constructor
// -----------------------------------------------------------------------------

/// Hack namespace prepended to the selector
$hack-namespace: '_' !default;

/// Find the last simple selector in a selector
@function _last-simple-selector($selector) {
    $parsed: selector-parse($selector);

    @if length($parsed) > 1 {
      @error '`#{$selector}` contains #{length($parsed)} selectors and the `_last-simple-selector()`function accepts only 1.';
    }
    $last-simple-selector: nth(nth($parsed, 1), -1);

    @return $last-simple-selector;
}

@function _hack() {

    // You may not hack a hack
    $recursive-check: should-not-be-called-recursively('hack');

    $selector: ();
    $namespace: if($bem-use-namespaces, $hack-namespace, '');

    // Check if we are hacking an element modified by a block modifier
    $is-hack-element: not not map-get($_bem-current-context, 'modifies-element');
    $selectors: if($is-hack-element, map-get(map-get($_bem-current-context, 'modifies-element'), 'selector'), &);

    // @todo refactor the following code to something more readab
    @each $s in $selectors {
        $selector-to-str: inspect(if($is-hack-element, _last-simple-selector($s), nth($s, 1)));
        $selector-without-dot: str-slice($selector-to-str, 2, -1);
        $new-selector: '.' + $namespace + $selector-without-dot;
        $sl: selector-replace($s, if($is-hack-element, $selector-to-str, nth($s, 1)), $new-selector);
        $selector: append($selector, $sl, 'comma');
    }

    $set-current: set-current-context('hack', 'some-hack', $selector);

    @return $selector;

}

@mixin hack() {

    @at-root #{_hack()} {
        @content;
    }

    $unset-current: unset-current-context('hack');

}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bem-constructor-0.3.0 stylesheets/_hack.scss
bem-constructor-0.2.0 stylesheets/_hack.scss