summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-28 18:25:58 -0700
committerEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-28 18:25:58 -0700
commit8853dfee8e9d31a598562edc723eb102157ccc81 (patch)
tree4fca8489fff92234e030d43abf7f6b0892b14dbf
parenta980ebac3f1272e453338f41f2fdffe6c3bd0bb4 (diff)
downloadpyscss-8853dfee8e9d31a598562edc723eb102157ccc81.tar.gz
Add a few doubly-experimental map functions needed for menus.
-rw-r--r--scss/functions/core.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/scss/functions/core.py b/scss/functions/core.py
index afb0afb..de638b5 100644
--- a/scss/functions/core.py
+++ b/scss/functions/core.py
@@ -614,6 +614,50 @@ def map_has_key(map, key):
return Boolean(key in map.index)
+# DEVIATIONS: these do not exist in ruby sass
+
+@register('map-get', 3)
+def map_get3(map, key, default):
+ return map.get_by_key(key, default)
+
+
+@register('map-get-nested', 2)
+def map_get_nested(map, keys):
+ for key in keys:
+ map = map.get_by_key(key)
+
+ return map
+
+
+@register('map-get-nested', 3)
+def map_get_nested3(map, keys, default):
+ for key in keys:
+ map = map.get_by_key(key, None)
+ if map is None:
+ return default
+
+ return map
+
+
+@register('map-merge-deep', 2)
+def map_merge_deep(*maps):
+ pairs = []
+ keys = set()
+ for map in maps:
+ for key, value in map.pairs:
+ keys.add(key)
+
+ for key in keys:
+ values = [map.get_by_key(key, None) for map in maps]
+ values = [v for v in values if v is not None]
+ if all(isinstance(v, Map) for v in values):
+ pairs.append((key, map_merge_deep(*values)))
+ else:
+ pairs.append((key, values[-1]))
+
+ return Map(pairs)
+
+
# ------------------------------------------------------------------------------
# Meta functions