1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.templatingkit.style;
35
36 import info.magnolia.module.templatingkit.templates.ExtrasArea;
37 import info.magnolia.module.templatingkit.templates.Floating;
38 import info.magnolia.module.templatingkit.templates.SectionMainArea;
39 import info.magnolia.module.templatingkit.templates.pages.STKPage;
40 import info.magnolia.module.templatingkit.templates.pages.STKPageModel;
41 import info.magnolia.rendering.template.AreaDefinition;
42
43 import org.apache.commons.lang3.ArrayUtils;
44 import org.apache.commons.lang3.StringUtils;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51
52
53
54 public class BodyClassResolver {
55
56 private static Logger log = LoggerFactory.getLogger(BodyClassResolver.class);
57
58 private String[] allowedBodyClasses = {
59 "col",
60 "nav-col",
61 "col-subcol",
62 "col-subcol-equal",
63 "col-float3",
64 "col-float2",
65 "nav-col-float2",
66 "col-float2-subcol",
67 "col-subcol-subcol"
68 };
69
70 public void setAllowedBodyClasses(String[] allowedBodyClasses) {
71 this.allowedBodyClasses = allowedBodyClasses;
72 }
73
74 public String[] getAllowedBodyClasses() {
75 return allowedBodyClasses;
76 }
77
78 public String resolveBodyClass(STKPageModel<? extends STKPage> model) {
79 final STKPage def = model.getDefinition();
80 if (StringUtils.isNotEmpty(def.getBodyClass())) {
81 return def.getBodyClass();
82 } else {
83 boolean nav;
84 nav = model.getNavigation().isShowVerticalNavigation();
85
86 StringBuffer bodyClass = new StringBuffer();
87 if (nav) {
88 bodyClass.append("-nav");
89 }
90
91 bodyClass.append("-col");
92
93 final AreaDefinition mainArea = def.getArea("main");
94 if (mainArea instanceof SectionMainArea) {
95 final Floating floating = ((SectionMainArea) mainArea).getFloating();
96 if (floating.isEnabled() && floating.getColumns() > 1) {
97 bodyClass.append("-float" + floating.getColumns());
98 }
99 }
100
101 AreaDefinition extrasAsSimpleArea = def.getAreas().get("extras");
102 boolean extras = extrasAsSimpleArea.getEnabled() != null && extrasAsSimpleArea.getEnabled();
103 if (extras) {
104 ExtrasArea extrasArea = (ExtrasArea) extrasAsSimpleArea;
105 int extrasColumns = extrasArea.getColumns();
106 for (int i = 1; i <= extrasColumns; i++) {
107 bodyClass.append("-subcol");
108 }
109
110 boolean extrasSmall = extrasArea.getSmall();
111 if (!extrasSmall) {
112 bodyClass.append("-equal");
113 }
114 }
115
116
117 bodyClass.deleteCharAt(0);
118 String result = bodyClass.toString();
119
120 if (result.equals("nav-col-subcol")) {
121 return "";
122 }
123
124 if (!ArrayUtils.contains(allowedBodyClasses, result)) {
125 log.debug("Is not an allowed body class: {}", result);
126 return "";
127 }
128
129 return result;
130 }
131 }
132
133 }