Libsass: Les couleurs nommées ne fonctionnent pas comme clés de carte

Créé le 17 nov. 2014  ·  8Commentaires  ·  Source: sass/libsass

Salut tout le monde,

J'essaie d'implémenter une fonction de palette de couleurs vue dans cet article ici.

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

Voici le code résultant

// 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);
    }
}

Tous les signes semblent indiquer que cela fonctionne, mais j'obtiens cette erreur.

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

J'utilise la version Grunt Sass - 0.16.1

Des idées?

Merci beaucoup

Bug - Confirmed Dev - Test Written

Commentaire le plus utile

Il semble que mes premières pensées étaient fausses. Le problème est dû au fait que la clé de la carte est un nom de couleur. Libsass a quelques problèmes lorsqu'il s'agit d'analyser des chaînes qui sont des noms de couleur, c'est-à-dire https://github.com/sass/libsass/issues/558

Cas réduit : http://sassmeister.com/gist/d2be1def3619bd6c3a54

Tous les 8 commentaires

Confirmé! J'obtiens l'erreur (JSON) suivante de libsass, avec la nouvelle API implémentée dans node-sass (non publié):

{
        "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 , séparément ; dans message de JSON, le nom de fichier et le numéro de ligne ne doivent pas être répétés. :)

J'ai creusé cela et cela semblait être parce que map-get($palettes, $palette) renvoie null.

Une solution encore ?

J'ai ajouté ceci au jalon 3.0.3, cela devrait être intégré à la prochaine version.

Il semble que mes premières pensées étaient fausses. Le problème est dû au fait que la clé de la carte est un nom de couleur. Libsass a quelques problèmes lorsqu'il s'agit d'analyser des chaînes qui sont des noms de couleur, c'est-à-dire https://github.com/sass/libsass/issues/558

Cas réduit : http://sassmeister.com/gist/d2be1def3619bd6c3a54

En guise d'avertissement, il semble que l'utilisateur rencontre le problème lié à sass/sass#363 dans ces couleurs, car les clés de la carte ne sont pas des chaînes, mais des couleurs.

Je crois que c'est un peu vrai. Je pense que la clé de la carte est traitée comme une couleur plutôt que comme une chaîne, bien que je ne sache pas pourquoi c'est un problème.

Il convient de noter que le cas de test réduit fonctionne bien sur Ruby sass.

Le problème est que nous traitons purple dans la clé de carte comme une chaîne et purple dans l'appel de fonction comme un color . Lorsque nous appelons map-get nous demandons la valeur associée à la couleur violet, mais elle est stockée sous la chaîne violet. Ces deux choses ne sont pas équivalentes - http://sassmeister.com/gist/77ae29d46ebecd0823ed

J'ai un correctif que je vous enverrai dans quelques heures.

Cette page vous a été utile?
0 / 5 - 0 notes