/testing/selenium-core/domviewer/selenium-domviewer.js

http://datanucleus-appengine.googlecode.com/ · JavaScript · 205 lines · 174 code · 21 blank · 10 comment · 66 complexity · 0b49e62baaaecc0a937781fe37ca2dc9 MD5 · raw file

  1. var HIDDEN="hidden";
  2. var LEVEL = "level";
  3. var PLUS_SRC="butplus.gif";
  4. var MIN_SRC="butmin.gif";
  5. var newRoot;
  6. var maxColumns=1;
  7. function loadDomViewer() {
  8. // See if the rootDocument variable has been set on this window.
  9. var rootDocument = window.rootDocument;
  10. // If not look to the opener for an explicity rootDocument variable, otherwise, use the opener document
  11. if (!rootDocument && window.opener) {
  12. rootDocument = window.opener.rootDocument || window.opener.document;
  13. }
  14. if (rootDocument) {
  15. document.body.innerHTML = displayDOM(rootDocument);
  16. }
  17. else {
  18. document.body.innerHTML = "<b>Must specify rootDocument for window. This can be done by setting the rootDocument variable on this window, or on the opener window for a popup window.</b>";
  19. }
  20. }
  21. function displayDOM(root){
  22. var str = "";
  23. str+="<table>";
  24. str += treeTraversal(root,0);
  25. // to make table columns work well.
  26. str += "<tr>";
  27. for (var i=0; i < maxColumns; i++) {
  28. str+= "<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
  29. }
  30. str += "</tr>";
  31. str += "</table>";
  32. return str;
  33. }
  34. function checkForChildren(element){
  35. if(!element.hasChildNodes())
  36. return false;
  37. var nodes = element.childNodes;
  38. var size = nodes.length;
  39. var count=0;
  40. for(var i=0; i< size; i++){
  41. var node = nodes.item(i);
  42. //if(node.toString()=="[object Text]"){
  43. //this is equalent to the above
  44. //but will work with more browsers
  45. if(node.nodeType!=1){
  46. count++;
  47. }
  48. }
  49. if(count == size)
  50. return false;
  51. else
  52. return true;
  53. }
  54. function treeTraversal(root, level){
  55. var str = "";
  56. var nodes= null;
  57. var size = null;
  58. //it is supposed to show the last node,
  59. //but the last node is always nodeText type
  60. //and we don't show it
  61. if(!root.hasChildNodes())
  62. return "";//displayNode(root,level,false);
  63. nodes = root.childNodes;
  64. size = nodes.length;
  65. for(var i=0; i< size; i++){
  66. var element = nodes.item(i);
  67. //if the node is textNode, don't display
  68. if(element.nodeType==1){
  69. str+= displayNode(element,level,checkForChildren(element));
  70. str+=treeTraversal(element, level+1);
  71. }
  72. }
  73. return str;
  74. }
  75. function displayNode(element, level, isLink){
  76. nodeContent = getNodeContent(element);
  77. columns = Math.round((nodeContent.length / 12) + 0.5);
  78. if (columns + level > maxColumns) {
  79. maxColumns = columns + level;
  80. }
  81. var str ="<tr class='"+LEVEL+level+"'>";
  82. for (var i=0; i < level; i++)
  83. str+= "<td> </td>";
  84. str+="<td colspan='"+ columns +"' class='box"+" boxlevel"+level+"' >";
  85. if(isLink){
  86. str+='<a onclick="hide(this);return false;" href="javascript:void();">';
  87. str+='<img src="'+MIN_SRC+'" />';
  88. }
  89. str += nodeContent;
  90. if(isLink)
  91. str+="</a></td></tr>";
  92. return str;
  93. }
  94. function getNodeContent(element) {
  95. str = "";
  96. id ="";
  97. if (element.id != null && element.id != "") {
  98. id = " ID(" + element.id +")";
  99. }
  100. name ="";
  101. if (element.name != null && element.name != "") {
  102. name = " NAME(" + element.name + ")";
  103. }
  104. value ="";
  105. if (element.value != null && element.value != "") {
  106. value = " VALUE(" + element.value + ")";
  107. }
  108. href ="";
  109. if (element.href != null && element.href != "") {
  110. href = " HREF(" + element.href + ")";
  111. }
  112. clazz = "";
  113. if (element.className != null && element.className != "") {
  114. clazz = " CLASS(" + element.className + ")";
  115. }
  116. src = "";
  117. if (element.src != null && element.src != "") {
  118. src = " SRC(" + element.src + ")";
  119. }
  120. alt = "";
  121. if (element.alt != null && element.alt != "") {
  122. alt = " ALT(" + element.alt + ")";
  123. }
  124. type = "";
  125. if (element.type != null && element.type != "") {
  126. type = " TYPE(" + element.type + ")";
  127. }
  128. text ="";
  129. if (element.text != null && element.text != "" && element.text != "undefined") {
  130. text = " #TEXT(" + trim(element.text) +")";
  131. }
  132. str+=" <b>"+ element.nodeName + id + alt + type + clazz + name + value + href + src + text + "</b>";
  133. return str;
  134. }
  135. function trim(val) {
  136. val2 = val.substring(0,40) + " ";
  137. var spaceChr = String.fromCharCode(32);
  138. var length = val2.length;
  139. var retVal = "";
  140. var ix = length -1;
  141. while(ix > -1){
  142. if(val2.charAt(ix) == spaceChr) {
  143. } else {
  144. retVal = val2.substring(0, ix +1);
  145. break;
  146. }
  147. ix = ix-1;
  148. }
  149. if (val.length > 40) {
  150. retVal += "...";
  151. }
  152. return retVal;
  153. }
  154. function hide(hlink){
  155. var isHidden = false;
  156. var image = hlink.firstChild;
  157. if(image.src.toString().indexOf(MIN_SRC)!=-1){
  158. image.src=PLUS_SRC;
  159. isHidden=true;
  160. }else{
  161. image.src=MIN_SRC;
  162. }
  163. var rowObj= hlink.parentNode.parentNode;
  164. var rowLevel = parseInt(rowObj.className.substring(LEVEL.length));
  165. var sibling = rowObj.nextSibling;
  166. var siblingLevel = sibling.className.substring(LEVEL.length);
  167. if(siblingLevel.indexOf(HIDDEN)!=-1){
  168. siblingLevel = siblingLevel.substring(0,siblingLevel.length - HIDDEN.length-1);
  169. }
  170. siblingLevel=parseInt(siblingLevel);
  171. while(sibling!=null && rowLevel<siblingLevel){
  172. if(isHidden){
  173. sibling.className += " "+ HIDDEN;
  174. }else if(!isHidden && sibling.className.indexOf(HIDDEN)!=-1){
  175. var str = sibling.className;
  176. sibling.className=str.substring(0, str.length - HIDDEN.length-1);
  177. }
  178. sibling = sibling.nextSibling;
  179. siblingLevel = parseInt(sibling.className.substring(LEVEL.length));
  180. }
  181. }
  182. function LOG(message) {
  183. window.opener.LOG.warn(message);
  184. }