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.templating.elements;
35
36 import info.magnolia.cms.beans.config.ServerConfiguration;
37 import info.magnolia.cms.core.Content;
38 import info.magnolia.cms.gui.i18n.I18nAuthoringSupport;
39 import info.magnolia.cms.gui.misc.Sources;
40 import info.magnolia.cms.i18n.I18nContentSupport;
41 import info.magnolia.cms.i18n.I18nContentSupportFactory;
42 import info.magnolia.context.MgnlContext;
43 import info.magnolia.link.LinkUtil;
44 import info.magnolia.rendering.context.RenderingContext;
45 import info.magnolia.rendering.engine.RenderException;
46 import info.magnolia.rendering.template.TemplateDefinition;
47 import info.magnolia.templating.freemarker.AreaDirective;
48
49 import java.io.IOException;
50 import java.util.ArrayList;
51 import java.util.List;
52 import java.util.Locale;
53
54 import javax.jcr.Node;
55
56 import org.apache.commons.lang.StringUtils;
57
58
59
60
61
62
63
64 public class InitElement extends AbstractContentTemplatingElement {
65
66 public static final String PAGE_EDITOR_JS_SOURCE = MgnlContext.getContextPath() + "/.resources/editor/info.magnolia.templating.editor.PageEditor/info.magnolia.templating.editor.PageEditor.nocache.js";
67 public static final String PAGE_EDITOR_CSS = MgnlContext.getContextPath() + "/.resources/magnolia-templating-editor/css/editor.css";
68 private static final String CMS_PAGE_TAG = "cms:page";
69
70 private I18nContentSupport i18nContentSupport = I18nContentSupportFactory.getI18nSupport();
71 private I18nAuthoringSupport i18nAuthoringSupport = I18nAuthoringSupport.Factory.getInstance();
72 private String dialog;
73
74 public InitElement(ServerConfiguration server, RenderingContext renderingContext) {
75 super(server, renderingContext);
76 }
77
78 @Override
79 public void begin(Appendable out) throws IOException, RenderException {
80 if (!isAdmin()) {
81 return;
82 }
83
84 Node content = getPassedContent();
85 if(content == null){
86 content = currentContent();
87 }
88
89 TemplateDefinition templateDefinition = getRequiredTemplateDefinition();
90
91 dialog = resolveDialog(templateDefinition);
92
93 Sources src = new Sources(MgnlContext.getContextPath());
94 MarkupHelper helper = new MarkupHelper(out);
95 helper.append("<!-- begin js and css added by @cms.init -->\n");
96 helper.append("<meta name=\"gwt:property\" content=\"locale=" + i18nContentSupport.getLocale() +"\"/>\n");
97 helper.append(src.getHtmlCss());
98 helper.append(src.getHtmlJs());
99 helper.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + PAGE_EDITOR_CSS + "\"></link>\n");
100 helper.append("<script type=\"text/javascript\" src=\"" + PAGE_EDITOR_JS_SOURCE + "\"></script>\n");
101
102 helper.openComment(CMS_PAGE_TAG);
103 if(content != null) {
104 helper.attribute(AreaDirective.CONTENT_ATTRIBUTE, getNodePath(content));
105 }
106 helper.attribute("dialog", dialog);
107 helper.attribute("preview", String.valueOf(MgnlContext.getAggregationState().isPreviewMode()));
108
109
110 if (i18nAuthoringSupport.isEnabled() && i18nContentSupport.isEnabled() && i18nContentSupport.getLocales().size()>1){
111
112 Content currentPage = MgnlContext.getAggregationState().getMainContent();
113 String currentUri = createURI(currentPage, i18nContentSupport.getLocale());
114 helper.attribute("currentURI", currentUri);
115
116 List<String> availableLocales = new ArrayList<String>();
117
118 for (Locale locale : i18nContentSupport.getLocales()) {
119 String uri = createURI(currentPage, locale);
120 String label = StringUtils.capitalize(locale.getDisplayLanguage(locale));
121 if(StringUtils.isNotEmpty(locale.getCountry())){
122 label += " (" + StringUtils.capitalize(locale.getDisplayCountry()) + ")";
123 }
124 availableLocales.add(label + ":" + uri);
125 }
126
127 helper.attribute("availableLocales", StringUtils.join(availableLocales, ","));
128 }
129
130 helper.append(" -->\n");
131 helper.closeComment(CMS_PAGE_TAG);
132
133 }
134
135 @Override
136 public void end(Appendable out) throws IOException, RenderException {
137 if (!isAdmin()) {
138 return;
139 }
140 MarkupHelper helper = new MarkupHelper(out);
141 helper.append("\n<!-- end js and css added by @cms.init -->\n");
142 }
143
144 public void setDialog(String dialog) {
145 this.dialog = dialog;
146 }
147
148 private TemplateDefinition getRequiredTemplateDefinition() {
149 return (TemplateDefinition) getRenderingContext().getRenderableDefinition();
150 }
151
152 private String resolveDialog(TemplateDefinition component) {
153 if (StringUtils.isNotEmpty(this.dialog)) {
154 return this.dialog;
155 }
156 String dialog = component.getDialog();
157 if (StringUtils.isNotEmpty(dialog)) {
158 return dialog;
159 }
160 return null;
161 }
162
163 private String createURI(Content currentPage, Locale locale) {
164
165 Locale currentLocale = i18nContentSupport.getLocale();
166 String uri=null;
167 try {
168
169 i18nContentSupport.setLocale(locale);
170 uri = LinkUtil.createAbsoluteLink(currentPage);
171 }
172
173 finally{
174 i18nContentSupport.setLocale(currentLocale);
175 }
176 return uri;
177 }
178
179 }