JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / util / ParseHtmlBodyAndLinks.js
1 Clazz.declarePackage ("jalview.util");\r
2 Clazz.load (["java.lang.StringBuffer", "java.util.ArrayList", "java.util.regex.Pattern"], "jalview.util.ParseHtmlBodyAndLinks", ["java.util.StringTokenizer"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.orig = null;\r
5 this.htmlContent = true;\r
6 this.links = null;\r
7 this.sb = null;\r
8 Clazz.instantialize (this, arguments);\r
9 }, jalview.util, "ParseHtmlBodyAndLinks");\r
10 Clazz.prepareFields (c$, function () {\r
11 this.links =  new java.util.ArrayList ();\r
12 this.sb =  new StringBuffer ();\r
13 });\r
14 Clazz.defineMethod (c$, "getOrig", \r
15 function () {\r
16 return this.orig;\r
17 });\r
18 Clazz.defineMethod (c$, "isHtmlContent", \r
19 function () {\r
20 return this.htmlContent;\r
21 });\r
22 Clazz.defineMethod (c$, "getContent", \r
23 function () {\r
24 return this.sb.toString ();\r
25 });\r
26 Clazz.defineMethod (c$, "getLinks", \r
27 function () {\r
28 return this.links;\r
29 });\r
30 Clazz.makeConstructor (c$, \r
31 function (description, removeHTML, newline) {\r
32 if (description == null || description.length == 0) {\r
33 this.htmlContent = false;\r
34 return;\r
35 }if (description.toUpperCase ().indexOf ("<HTML>") == -1) {\r
36 this.htmlContent = false;\r
37 }this.orig = description;\r
38 var st =  new java.util.StringTokenizer (description, "<");\r
39 var token;\r
40 var link;\r
41 var startTag;\r
42 var tag = null;\r
43 while (st.hasMoreElements ()) {\r
44 token = st.nextToken ("&>");\r
45 if (token.equalsIgnoreCase ("html") || token.startsWith ("/")) {\r
46 continue;\r
47 }tag = null;\r
48 startTag = token.indexOf ("<");\r
49 if (startTag > -1) {\r
50 tag = token.substring (startTag + 1);\r
51 token = token.substring (0, startTag);\r
52 }if (tag != null && tag.toUpperCase ().startsWith ("A HREF=")) {\r
53 if (token.length > 0) {\r
54 this.sb.append (token);\r
55 }link = tag.substring (tag.indexOf ("\"") + 1, tag.length - 1);\r
56 var label = st.nextToken ("<>");\r
57 this.links.add (label + "|" + link);\r
58 this.sb.append (label + "%LINK%");\r
59 } else if (tag != null && tag.equalsIgnoreCase ("br")) {\r
60 this.sb.append (newline);\r
61 } else if (token.startsWith ("lt;")) {\r
62 this.sb.append ("<" + token.substring (3));\r
63 } else if (token.startsWith ("gt;")) {\r
64 this.sb.append (">" + token.substring (3));\r
65 } else if (token.startsWith ("amp;")) {\r
66 this.sb.append ("&" + token.substring (4));\r
67 } else {\r
68 this.sb.append (token);\r
69 }}\r
70 if (removeHTML && !this.htmlContent) {\r
71 this.sb =  new StringBuffer (jalview.util.ParseHtmlBodyAndLinks.LEFT_ANGLE_BRACKET_PATTERN.matcher (description).replaceAll ("&lt;"));\r
72 }}, "~S,~B,~S");\r
73 Clazz.defineMethod (c$, "getNonHtmlContent", \r
74 function () {\r
75 return this.isHtmlContent () ? this.sb.toString () : this.orig;\r
76 });\r
77 c$.LEFT_ANGLE_BRACKET_PATTERN = c$.prototype.LEFT_ANGLE_BRACKET_PATTERN = java.util.regex.Pattern.compile ("<");\r
78 });\r