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
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.
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