1 package org.tinyjee.maven.dim.extensions;
2
3 import org.tinyjee.maven.dim.spi.RequestParameterTransformer;
4
5 import java.util.Map;
6
7 import static org.tinyjee.maven.dim.IncludeMacroSignature.*;
8
9 /**
10 * This extension renders a tabbed panel from document sections (hierarchical headlines in Doxia).
11 * <p/>
12 * Tabbed panels are useful in improving the screen appearance of large content by creating multiple pages using tabs.
13 * When printing a document, the content renders in the same way as before (the panel is hidden and all tabs are visible).
14 *
15 * @author Juergen_Kellerer, 2011-11-06
16 */
17 public class TabbedPanelParameterTransformer extends AbstractParameterTransformer {
18
19 /**
20 * Enables this extension and sets a regular expression matching the section titles that should be transformed into a tabs.
21 * <p/>
22 * <b>Note:</b> Setting this property has no effect in case of "<code>source</code>" or "<code>source-class</code>" were
23 * specified with the macro call. This behaviour ensures that the parameter "<code>tabbed-panel</code>" can still be used
24 * with ordinary macro calls where a source or source-class was set.
25 * <p/>
26 * This parameter expects a regular expression that is used to select what sections turn into tabs and what not by matching
27 * the given titles (headlines).<br/>
28 * By default the javascript looks for the first section that follows the include position and continues with all
29 * siblings (sections of the same level). Neither parent nor child sections are processed, therefore it's mostly safe
30 * to use the <i>match all</i> expression <code>.*</code> if all sub-sequent sections of the same nesting level should
31 * turn into tabs.
32 * <p/>
33 * Examples:<ul>
34 * <li>"<code>%{include|tabbed-panel=.*}</code>" - Transforms all following sections (of the same level) to tabs.</li>
35 * <li>"<code>%{include|tabbed-panel=.*(Example).*}</code>" - Transforms all following sections to tabs that contain
36 * the word "Example".</li>
37 * </ul>
38 */
39 public static final String PARAM_TABBED_PANEL = "tabbed-panel";
40
41 /**
42 * Toggles whether section titles are hidden once they were transformed into a tab (defaults to 'true').
43 */
44 public static final String PARAM_HIDE_TITLES = "hide-titles";
45
46 /**
47 * <b>Optional Parameter:</b> Specifies a minimum tab height to improve scrolling behaviour when switching tabs.
48 */
49 public static final String PARAM_MIN_HEIGHT = "min-height";
50
51 private static final String PARAM_TABS = "tabs";
52
53 @Override
54 protected boolean doTransformParameters(Map<String, Object> requestParams) {
55 Object tabs = requestParams.get(PARAM_TABBED_PANEL);
56 if (tabs != null) {
57 requestParams.put(PARAM_SOURCE, "classpath:/templates/dim/tabbed-panel.html.vm");
58 requestParams.put(PARAM_VERBATIM, false);
59 requestParams.put(PARAM_TABS, "*".equals(tabs) ? ".*" : tabs);
60
61 if (!requestParams.containsKey(PARAM_HIDE_TITLES)) requestParams.put(PARAM_HIDE_TITLES, true);
62 return true;
63 }
64 return false;
65 }
66 }