288 HtmlTree script = new HtmlTree(HtmlTag.SCRIPT); |
288 HtmlTree script = new HtmlTree(HtmlTag.SCRIPT); |
289 if(winTitle != null && winTitle.length() > 0) { |
289 if(winTitle != null && winTitle.length() > 0) { |
290 script.addAttr(HtmlAttr.TYPE, "text/javascript"); |
290 script.addAttr(HtmlAttr.TYPE, "text/javascript"); |
291 String scriptCode = "<!--" + DocletConstants.NL + |
291 String scriptCode = "<!--" + DocletConstants.NL + |
292 " if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL + |
292 " if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL + |
293 " parent.document.title=\"" + winTitle + "\";" + DocletConstants.NL + |
293 " parent.document.title=\"" + escapeJavaScriptChars(winTitle) + "\";" + DocletConstants.NL + |
294 " }" + DocletConstants.NL + |
294 " }" + DocletConstants.NL + |
295 "//-->" + DocletConstants.NL; |
295 "//-->" + DocletConstants.NL; |
296 RawHtml scriptContent = new RawHtml(scriptCode); |
296 RawHtml scriptContent = new RawHtml(scriptCode); |
297 script.addContent(scriptContent); |
297 script.addContent(scriptContent); |
298 } |
298 } |
299 return script; |
299 return script; |
|
300 } |
|
301 |
|
302 /** |
|
303 * Returns a String with escaped special JavaScript characters. |
|
304 * |
|
305 * @param s String that needs to be escaped |
|
306 * @return a valid escaped JavaScript string |
|
307 */ |
|
308 private static String escapeJavaScriptChars(String s) { |
|
309 StringBuilder sb = new StringBuilder(); |
|
310 for (int i = 0; i < s.length(); i++) { |
|
311 char ch = s.charAt(i); |
|
312 switch (ch) { |
|
313 case '\b': |
|
314 sb.append("\\b"); |
|
315 break; |
|
316 case '\t': |
|
317 sb.append("\\t"); |
|
318 break; |
|
319 case '\n': |
|
320 sb.append("\\n"); |
|
321 break; |
|
322 case '\f': |
|
323 sb.append("\\f"); |
|
324 break; |
|
325 case '\r': |
|
326 sb.append("\\r"); |
|
327 break; |
|
328 case '"': |
|
329 sb.append("\\\""); |
|
330 break; |
|
331 case '\'': |
|
332 sb.append("\\\'"); |
|
333 break; |
|
334 case '\\': |
|
335 sb.append("\\\\"); |
|
336 break; |
|
337 default: |
|
338 if (ch < 32 || ch >= 127) { |
|
339 sb.append(String.format("\\u%04X", (int)ch)); |
|
340 } else { |
|
341 sb.append(ch); |
|
342 } |
|
343 break; |
|
344 } |
|
345 } |
|
346 return sb.toString(); |
300 } |
347 } |
301 |
348 |
302 /** |
349 /** |
303 * Returns a content tree for the SCRIPT tag for the main page(index.html). |
350 * Returns a content tree for the SCRIPT tag for the main page(index.html). |
304 * |
351 * |