Libsass: Cores nomeadas não funcionam como chaves de mapa

Criado em 17 nov. 2014  ·  8Comentários  ·  Fonte: sass/libsass

Olá a todos,

Estou tentando implementar uma função de paleta de cores vista neste artigo aqui.

http://erskinedesign.com/blog/friendlier-colour-names-sass-maps/

Este é o código resultante

// config
$_color-base-grey: rgb(229,231,234);
$palettes: (
    purple: (
        base:   rgb(42,40,80),
        light:  rgb(51,46,140),
        dark:   rgb(40,38,65)
    ),
    grey: (
        base:  $_color-base-grey,
        light: lighten($_color-base-grey, 10%),
        dark: darken($_color-base-grey, 10%)
    )
);

// Palette function,
<strong i="10">@function</strong> palette($palette, $tone: 'base') {
    <strong i="11">@return</strong> map-get(map-get($palettes, $palette), $tone);
}


// in module styles
a {
    color: palette(purple);
    &:hover {
        color: palette(purple, light);
    }
}

Todos os sinais parecem indicar que isso está funcionando, mas recebo este erro.

Warning: /Users/xxx/xxx//styles.scss:35: argument `$map` of `map-get($map, $key)` must be a map

Estou usando a versão do Grunt Sass - 0.16.1

Alguma ideia?

Muito Obrigado

Bug - Confirmed Dev - Test Written

Comentários muito úteis

Parece que meus pensamentos iniciais estavam errados. O problema é que a chave do mapa é um nome de cor. Libsass tem alguns problemas quando se trata de analisar strings que são nomes de cores, por exemplo, https://github.com/sass/libsass/issues/558

Caso reduzido: http://sassmeister.com/gist/d2be1def3619bd6c3a54

Todos 8 comentários

Confirmado! Recebo o seguinte erro (JSON) de libsass, com a nova API implementada em node-sass (não lançada):

{
        "status": 1,
        "path": "c:/temp/foo3.scss",
        "line": 18,
        "column": 13,
        "message": "argument `$map` of `map-get($map, $key)` must be a map\nBacktrace:\n\tc:/temp/foo3.scss:18, in function `map-get`\n\tc:/temp/foo3.scss:18, in function `palette`\n\tc:/temp/foo3.scss:24"
}

@mgreter , separadamente; em message de JSON, o nome do arquivo e o número da linha não devem ser repetidos. :)

Pesquisei nisso e parecia ser porque map-get($palettes, $palette) está retornando nulo.

Alguma solução ainda?

Eu adicionei isso ao marco 3.0.3, ele deve chegar à próxima versão.

Parece que meus pensamentos iniciais estavam errados. O problema é que a chave do mapa é um nome de cor. Libsass tem alguns problemas quando se trata de analisar strings que são nomes de cores, por exemplo, https://github.com/sass/libsass/issues/558

Caso reduzido: http://sassmeister.com/gist/d2be1def3619bd6c3a54

Como um alerta, parece que o usuário pode estar enfrentando o problema relacionado ao sass / sass # 363 naquelas cores, pois as chaves do mapa não são strings, mas cores.

Eu acredito que isso seja verdade. Acho que a chave do mapa está sendo tratada como uma cor em vez de uma string, embora eu não saiba por que isso é um problema.

É importante notar que o caso de teste reduzido funciona bem no Ruby ousado.

O problema é que tratamos purple na chave do mapa como uma string e purple na chamada de função como color . Quando chamamos map-get , estamos pedindo o valor associado à cor roxa, mas ele está armazenado na string roxa. Essas duas coisas não são equivalentes - http://sassmeister.com/gist/77ae29d46ebecd0823ed

Eu tenho uma solução que enviarei em algumas horas.

Esta página foi útil?
0 / 5 - 0 avaliações