001: // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
002: // Released under the terms of the GNU General Public License version 2 or later.
003: package fitnesse.html;
004:
005: import fitnesse.responders.run.SuiteResponder;
006: import fitnesse.wiki.*;
007:
008: public class HtmlUtil {
009: public static HtmlElement BR = new RawHtml("<br/>");
010: public static HtmlElement HR = new RawHtml("<hr/>");
011: public static HtmlElement NBSP = new RawHtml(" ");
012: public static HtmlElement P = new RawHtml("<p>");
013: public static final boolean NO_NEW_WINDOW = false;
014: public static final String ENDL = System
015: .getProperty("line.separator");
016:
017: public static HtmlTag makeDivTag(String divClass) {
018: HtmlTag div = new HtmlTag("div");
019: div.addAttribute("class", divClass);
020: div.add("");
021: return div;
022: }
023:
024: public static void addTitles(HtmlPage page, String title) {
025: page.title.use(title);
026: HtmlTag span = new HtmlTag("span");
027: span.addAttribute("class", "page_title");
028: span.add(title);
029: page.header.use(span);
030: }
031:
032: public static HtmlTag makeBold(String content) {
033: HtmlTag bold = new HtmlTag("b");
034: bold.add(content);
035: return bold;
036: }
037:
038: public static HtmlTag makeItalic(String content) {
039: HtmlTag italic = new HtmlTag("i");
040: italic.add(content);
041: return italic;
042: }
043:
044: public static HtmlTag makeSpanTag(String spanClass, String content) {
045: HtmlTag span = new HtmlTag("span");
046: span.addAttribute("class", spanClass);
047: span.add(content);
048: return span;
049: }
050:
051: public static HtmlTag makeFormTag(String method, String action) {
052: HtmlTag formTag = new HtmlTag("form");
053: formTag.addAttribute("method", method);
054: formTag.addAttribute("action", action);
055: return formTag;
056: }
057:
058: public static HtmlTag makeAnchorTag(String name) {
059: HtmlTag anchorTag = new HtmlTag("a", " ");
060: anchorTag.addAttribute("name", name);
061: return anchorTag;
062: }
063:
064: public static HtmlTag makeActionLink(String action, String name,
065: String inputName, String accessKey, boolean newWindow) {
066: TagGroup group = new TagGroup();
067: String href = action;
068: if (inputName != null)
069: href = href + "?" + inputName;
070:
071: HtmlTag link = new HtmlTag("a");
072: link.addAttribute("href", href);
073: if (newWindow)
074: link.addAttribute("target", "newWindow");
075: link.addAttribute("accesskey", accessKey);
076: link.add(name);
077:
078: group.add(new HtmlComment(name + " button"));
079: group.add(link);
080: return group;
081: }
082:
083: public static HtmlTag makeInputTag(String type, String name,
084: String value) {
085: HtmlTag input = makeInputTag(type, name);
086: input.addAttribute("value", value);
087: return input;
088: }
089:
090: public static HtmlTag makeInputTag(String type, String name) {
091: HtmlTag input = new HtmlTag("input");
092: input.addAttribute("type", type);
093: input.addAttribute("name", name);
094: return input;
095: }
096:
097: public static HtmlTag makeOptionTag(String value, String text) {
098: HtmlTag option = new HtmlTag("option");
099: option.addAttribute("value", value);
100: option.add(text);
101:
102: return option;
103: }
104:
105: public static HtmlTag makeLink(String href, String text) {
106: return makeLink(href, new RawHtml(text));
107: }
108:
109: public static HtmlTag makeLink(String href, HtmlElement content) {
110: HtmlTag link = new HtmlTag("a");
111: link.addAttribute("href", href);
112: link.add(content);
113: return link;
114: }
115:
116: public static TagGroup makeBreadCrumbsWithCurrentPageLinked(
117: String path) throws Exception {
118: return makeBreadCrumbsWithCurrentPageLinked(path, ".");
119: }
120:
121: public static HtmlTag makeBreadCrumbsWithCurrentPageNotLinked(
122: String trail) throws Exception {
123: return makeBreadCrumbsWithCurrentPageNotLinked(trail, ".");
124: }
125:
126: public static TagGroup makeBreadCrumbsWithCurrentPageLinked(
127: String path, String separator) throws Exception {
128: TagGroup tagGroup = new TagGroup();
129: String[] crumbs = path.split("[" + separator + "]");
130: String trail = makeAllButLastCrumb(crumbs, separator, tagGroup);
131: tagGroup.add(getLastCrumbAsLink(crumbs, trail));
132: return tagGroup;
133: }
134:
135: public static HtmlTag makeBreadCrumbsWithCurrentPageNotLinked(
136: String path, String separator) throws Exception {
137: TagGroup tagGroup = new TagGroup();
138: String[] crumbs = path.split("[" + separator + "]");
139: makeAllButLastCrumb(crumbs, separator, tagGroup);
140: tagGroup.add(getLastCrumbAsText(crumbs));
141: return tagGroup;
142: }
143:
144: private static HtmlTag getLastCrumbAsLink(String[] crumbs,
145: String trail) throws Exception {
146: String crumb = getLastCrumb(crumbs);
147: HtmlTag link = makeLink("/" + trail + crumb, crumb);
148: link.head = HtmlUtil.BR.html();
149: link.addAttribute("class", "page_title");
150: return link;
151: }
152:
153: private static String getLastCrumb(String[] crumbs) {
154: String crumb = "";
155: if (crumbs.length > 0)
156: crumb = crumbs[crumbs.length - 1];
157: return crumb;
158: }
159:
160: private static HtmlTag getLastCrumbAsText(String[] crumbs)
161: throws Exception {
162: String crumb = getLastCrumb(crumbs);
163: HtmlTag this Page = new HtmlTag("span", crumb);
164: this Page.addAttribute("class", "page_title");
165: this Page.head = HtmlUtil.BR.html();
166: return this Page;
167: }
168:
169: public static HtmlTag makeBreadCrumbsWithPageType(String trail,
170: String type) throws Exception {
171: return makeBreadCrumbsWithPageType(trail, ".", type);
172: }
173:
174: public static HtmlTag makeBreadCrumbsWithPageType(String trail,
175: String separator, String type) throws Exception {
176: TagGroup group = makeBreadCrumbsWithCurrentPageLinked(trail,
177: separator);
178: group.add(HtmlUtil.BR);
179: group.add(HtmlUtil.makeSpanTag("page_type", type));
180: return group;
181: }
182:
183: private static String makeAllButLastCrumb(String[] crumbs,
184: String separator, TagGroup group) {
185: String trail = "";
186: for (int i = 0; i < crumbs.length - 1; i++) {
187: String crumb = crumbs[i];
188: HtmlTag link = makeLink("/" + trail + crumb, crumb);
189: link.tail = separator;
190: trail = trail + crumb + separator;
191: group.add(link);
192: }
193: return trail;
194: }
195:
196: public static HtmlTag makeActions(PageData pageData)
197: throws Exception {
198: WikiPage page = pageData.getWikiPage();
199:
200: WikiPagePath localPagePath = page.getPageCrawler().getFullPath(
201: page);
202: String localPageName = PathParser.render(localPagePath);
203: String localOrRemotePageName = localPageName;
204: boolean newWindowIfRemote = NO_NEW_WINDOW;
205: if (page instanceof ProxyPage) {
206: ProxyPage proxyPage = (ProxyPage) page;
207: localOrRemotePageName = proxyPage.getThisPageUrl();
208: newWindowIfRemote = true;
209: }
210: return makeActions(pageData, localPageName,
211: localOrRemotePageName, newWindowIfRemote);
212:
213: }
214:
215: public static HtmlTag makeActions(PageData pageData,
216: String localPageName, String localOrRemotePageName,
217: boolean newWindowIfRemote) throws Exception {
218: TagGroup actions = new TagGroup();
219: if (pageData.hasAttribute("Test"))
220: actions.add(makeActionLink(localPageName, "Test", "test",
221: "t", NO_NEW_WINDOW));
222: if (pageData.hasAttribute("Suite"))
223: actions.add(makeActionLink(localPageName, "Suite", "suite",
224: "", NO_NEW_WINDOW));
225: if (pageData.hasAttribute("Test")
226: || pageData.hasAttribute("Suite"))
227: actions.add(makeNavBreak());
228: if (pageData.hasAttribute("Edit"))
229: actions.add(makeActionLink(localOrRemotePageName, "Edit",
230: "edit", "e", newWindowIfRemote));
231: if (pageData.hasAttribute("Versions"))
232: actions.add(makeActionLink(localOrRemotePageName,
233: "Versions", "versions", "v", newWindowIfRemote));
234: if (pageData.hasAttribute("Properties"))
235: actions
236: .add(makeActionLink(localOrRemotePageName,
237: "Properties", "properties", "p",
238: newWindowIfRemote));
239: if (pageData.hasAttribute("Refactor"))
240: actions.add(makeActionLink(localOrRemotePageName,
241: "Refactor", "refactor", "r", newWindowIfRemote));
242: if (pageData.hasAttribute("WhereUsed"))
243: actions.add(makeActionLink(localOrRemotePageName,
244: "Where Used", "whereUsed", "w", NO_NEW_WINDOW));
245: actions.add(makeNavBreak());
246: if (pageData.hasAttribute("RecentChanges"))
247: actions.add(makeActionLink("/RecentChanges",
248: "RecentChanges", null, "", NO_NEW_WINDOW));
249: if (pageData.hasAttribute("Files"))
250: actions.add(makeActionLink("/files", "Files", null, "f",
251: NO_NEW_WINDOW));
252: if (pageData.hasAttribute("Search"))
253: actions.add(makeActionLink("?searchForm", "Search", null,
254: "s", NO_NEW_WINDOW));
255:
256: return actions;
257: }
258:
259: public static HtmlTag makeNavBreak() {
260: HtmlTag navBreak = new HtmlTag("div");
261: navBreak.addAttribute("class", "nav_break");
262: navBreak.add(" ");
263: return navBreak;
264: }
265:
266: public static String makeNormalWikiPageContent(PageData pageData)
267: throws Exception {
268: String content = testableHtml(pageData);
269: return addHeaderAndFooter(pageData.getWikiPage(), content);
270: }
271:
272: public static String addHeaderAndFooter(WikiPage page,
273: String content) throws Exception {
274: StringBuffer buffer = new StringBuffer();
275: buffer.append(getHtmlOfInheritedPage("PageHeader", page));
276: buffer.append(content);
277: buffer.append(getHtmlOfInheritedPage("PageFooter", page));
278: return buffer.toString();
279: }
280:
281: public static String testableHtml(PageData pageData)
282: throws Exception {
283: return testableHtml(pageData, false);
284: }
285:
286: public static String testableHtml(PageData pageData,
287: boolean includeSuiteSetup) throws Exception {
288: WikiPage wikiPage = pageData.getWikiPage();
289: StringBuffer buffer = new StringBuffer();
290: if (pageData.hasAttribute("Test")) {
291: if (includeSuiteSetup) {
292: WikiPage suiteSetup = PageCrawlerImpl.getInheritedPage(
293: SuiteResponder.SUITE_SETUP_NAME, wikiPage);
294: if (suiteSetup != null) {
295: WikiPagePath pagePath = suiteSetup.getPageCrawler()
296: .getFullPath(suiteSetup);
297: String pagePathName = PathParser.render(pagePath);
298: buffer.append("!include -setup .").append(
299: pagePathName).append("\n");
300: }
301: }
302: WikiPage setup = PageCrawlerImpl.getInheritedPage("SetUp",
303: wikiPage);
304: if (setup != null) {
305: WikiPagePath setupPath = wikiPage.getPageCrawler()
306: .getFullPath(setup);
307: String setupPathName = PathParser.render(setupPath);
308: buffer.append("!include -setup .")
309: .append(setupPathName).append("\n");
310: }
311: }
312: buffer.append(pageData.getContent());
313: if (pageData.hasAttribute("Test")) {
314: WikiPage teardown = PageCrawlerImpl.getInheritedPage(
315: "TearDown", wikiPage);
316: if (teardown != null) {
317: WikiPagePath tearDownPath = wikiPage.getPageCrawler()
318: .getFullPath(teardown);
319: String tearDownPathName = PathParser
320: .render(tearDownPath);
321: buffer.append("\n").append("!include -teardown .")
322: .append(tearDownPathName).append("\n");
323: }
324: if (includeSuiteSetup) {
325: WikiPage suiteTeardown = PageCrawlerImpl
326: .getInheritedPage(
327: SuiteResponder.SUITE_TEARDOWN_NAME,
328: wikiPage);
329: if (suiteTeardown != null) {
330: WikiPagePath pagePath = suiteTeardown
331: .getPageCrawler()
332: .getFullPath(suiteTeardown);
333: String pagePathName = PathParser.render(pagePath);
334: buffer.append("!include -teardown .").append(
335: pagePathName).append("\n");
336: }
337: }
338: }
339: pageData.setContent(buffer.toString());
340: return pageData.getHtml();
341: }
342:
343: public static String getHtmlOfInheritedPage(String pageName,
344: WikiPage context) throws Exception {
345: return getLabeledHtmlOfInheritedPage(pageName, context, "");
346: }
347:
348: public static String getLabeledHtmlOfInheritedPage(String pageName,
349: WikiPage context, String label) throws Exception {
350: WikiPage inheritedPage = PageCrawlerImpl.getInheritedPage(
351: pageName, context);
352: if (inheritedPage != null) {
353: PageData data = inheritedPage.getData();
354: if (label != null && label.length() > 1) {
355: WikiPagePath inheritedPagePath = context
356: .getPageCrawler().getFullPath(inheritedPage);
357: String inheritedPagePathName = PathParser
358: .render(inheritedPagePath);
359: String fullLabel = "!meta " + label + ": ."
360: + inheritedPagePathName + "\n";
361: String newContent = fullLabel + data.getContent();
362: data.setContent(newContent);
363: }
364: return data.getHtml(context);
365: } else
366: return "";
367: }
368:
369: public static String metaText(String text) {
370: return "<span class=\"meta\">" + text + "</span>";
371: }
372:
373: public static HtmlTag makeJavascriptLink(String jsFile) {
374: HtmlTag scriptTag = new HtmlTag("script");
375: scriptTag.addAttribute("src", jsFile);
376: scriptTag.addAttribute("type", "text/javascript");
377: scriptTag.use("");
378: return scriptTag;
379: }
380: }
|