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.lang.ArrayUtils;
44 import org.apache.commons.lang.StringUtils;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51
52
53
54
55
56
57 public class BodyClassResolver {
58
59 private static Logger log = LoggerFactory.getLogger(BodyClassResolver.class);
60
61 private String[] allowedBodyClasses = {
62 "col",
63 "nav-col",
64 "col-subcol",
65 "col-subcol-equal",
66 "col-float3",
67 "col-float2",
68 "nav-col-float2",
69 "col-float2-subcol",
70 "col-subcol-subcol"
71 };
72
73 public void setAllowedBodyClasses(String[] allowedBodyClasses){
74 this.allowedBodyClasses = allowedBodyClasses;
75 }
76
77 public String[] getAllowedBodyClasses() {
78 return allowedBodyClasses;
79 }
80
81 public String resolveBodyClass(STKPageModel<? extends STKPage> model) {
82 final STKPage def = model.getDefinition();
83 if(StringUtils.isNotEmpty(def.getBodyClass())){
84 return def.getBodyClass();
85 }
86 else{
87 boolean nav;
88 nav = model.getNavigation().isShowVerticalNavigation();
89
90 StringBuffer bodyClass = new StringBuffer();
91 if(nav) {
92 bodyClass.append("-nav");
93 }
94
95 bodyClass.append("-col");
96
97 final AreaDefinition mainArea = def.getArea("main");
98 if (mainArea instanceof SectionMainArea) {
99 final Floating floating = ((SectionMainArea)mainArea).getFloating();
100 if(floating.isEnabled() && floating.getColumns() > 1) {
101 bodyClass.append("-float" + floating.getColumns());
102 }
103 }
104
105 AreaDefinition extrasAsSimpleArea = def.getAreas().get("extras");
106 boolean extras = extrasAsSimpleArea.isEnabled() != null && extrasAsSimpleArea.isEnabled();
107 if(extras){
108 ExtrasArea extrasArea = (ExtrasArea) extrasAsSimpleArea;
109 int extrasColumns = extrasArea.getColumns();
110 for(int i=1; i<= extrasColumns; i++) {
111 bodyClass.append("-subcol");
112 }
113
114 boolean extrasSmall = extrasArea.getSmall();
115 if(!extrasSmall){
116 bodyClass.append("-equal");
117 }
118 }
119
120
121 bodyClass.deleteCharAt(0);
122 String result = bodyClass.toString();
123
124 if(result.equals("nav-col-subcol")){
125 return "";
126 }
127
128 if(!ArrayUtils.contains(allowedBodyClasses, result)){
129 log.error("Is not an allowed body class: " + result);
130 return "";
131 }
132
133 return result;
134 }
135 }
136
137 }