Skip to content

Commit a32c9df

Browse files
authored
Update css_grid.py
1 parent d3d6603 commit a32c9df

File tree

1 file changed

+98
-2
lines changed

1 file changed

+98
-2
lines changed

css_grid/templatetags/css_grid.py

Lines changed: 98 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,103 @@
11
from django import template
2-
2+
from django.utils.safestring import mark_safe
33
register = template.Library()
44

5+
56
@register.simple_tag(takes_context=True)
67
def grid(context):
7-
return context['_prefix']
8+
g = context.get('css-grid', None)
9+
wrapper = g.get('grid_wrapper', None)
10+
gap = g.get('grid-gap', None)
11+
template_columns = get_columns(g)
12+
areas = g.get('grid-template-areas', [])
13+
template_area = make_template_area(areas)
14+
15+
css = f'''
16+
.{wrapper} {{
17+
display: grid;
18+
grid-gap: {gap};
19+
grid-template-columns: {template_columns};
20+
grid-template-areas: {template_area};
21+
}}
22+
'''
23+
24+
for area in flatten_areas(areas):
25+
css += f'''
26+
.{area} {{
27+
grid-area: {area};
28+
}}
29+
30+
'''
31+
32+
return mark_safe(css)
33+
34+
35+
def make_template_area(areas):
36+
if any(isinstance(i, list) for i in areas):
37+
try:
38+
l =[make_template_area(sublist) for sublist in areas]
39+
return '\n'.join(l)
40+
except ValueError:
41+
pass
42+
43+
return format_to_css(areas)
44+
45+
46+
def flatten_areas(areas):
47+
if any(isinstance(i, list) for i in areas):
48+
try:
49+
return set([item for sublist in areas for item in sublist])
50+
except ValueError:
51+
pass
52+
return set(areas)
53+
54+
55+
def format_to_css(l):
56+
return '\"' + ' '.join(l) + '\"'
57+
58+
59+
def get_columns(g):
60+
columns = g.get('grid-template-columns', [])
61+
return format_to_css(columns)
62+
63+
64+
@register.simple_tag(takes_context=True)
65+
def grid_wrapper(context):
66+
grid_wrapper = context['css-grid'].get('grid_wrapper', None)
67+
return f'class={grid_wrapper}'
68+
69+
@register.simple_tag(takes_context=True)
70+
def grid_area(context, area_name):
71+
return f'class={area_name}'
72+
73+
'''
74+
75+
.sidebar {
76+
grid-area: sidebar;
77+
}
78+
79+
.content {
80+
grid-area: content;
81+
}
82+
83+
.header {
84+
grid-area: header;
85+
}
86+
87+
88+
.wrapper {
89+
display: grid;
90+
grid-gap: 10px;
91+
grid-template-columns: 120px 120px 120px;
92+
grid-template-areas:
93+
"....... header header"
94+
"sidebar content content";
95+
background-color: #fff;
96+
color: #444;
97+
}
98+
99+
100+
101+
102+
103+
'''

0 commit comments

Comments
 (0)