afs formserver development menu

add the development menu to formservers

  1. // ==UserScript==
  2. // @name afs formserver development menu
  3. // @namespace com.aforms2web.ds.ujs
  4. // @description add the development menu to formservers
  5. // @include *afs_*.do*
  6. // @include *vav_*.do*
  7. // @include *formserver*.do*
  8. // @version 1.0
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. var js_forceTimeoutOverlay = "showTimeoutWarning('<h2>Timeout Warnung</h2><p>Ihre Session wird in 1 Minute ablaufen!</p>','Ok');";
  13. var elem = document.createElement("div");
  14. elem.id = 'xMy_menu';
  15. elem.innerHTML = '<strong title="my development options">µ ⚒ ⌥</strong>' //[my dev menu]
  16. + '<span class="xMy_tool" title="Add Toggler to all Blocks" style="position: relative; top: -1px; left: 1px;" onclick="xMy_add_blocktoggler();">◈</span>'
  17. + '<span class="xMy_tool" title="Toggle all BlockContent visibilities" style="transform: rotate(-90deg);" onclick="xMy_toggle_allBlocks();">➠</span>'
  18. + '<span class="xMy_tool" title="Remove Toggler from all Blocks" style="font-size: 12px; margin-top:0px;" onclick="xMy_removeAllToggler();">♻</span>'
  19. + '<span class="xMy_sep">|</span>'
  20. + '<span class="xMy_tool" title="Click \'previous\' button" onclick="document.getElementById(\'previous\').click();">⤺</span>'
  21. + '<span class="xMy_tool" title="Click \'next\' button" onclick="document.getElementById(\'next\').click();">⤳</span>'
  22. + '<span class="xMy_tool" title="Jump to Navigationbar" style="transform: rotate(180deg);" onclick="document.getElementById(\'control_bar\').scrollIntoView();">↸</span>'
  23. + '<ul>'
  24. + '<li><span onclick="xMy_add_blocktoggler()" >Add Toggler to all Blocks</span></li>'
  25. + '<li><span onclick="xMy_toggle_allBlocks()" >Toggle all BlockContent visibilities</span></li>'
  26. + '<li><span onclick="xMy_removeAllToggler()" >Remove Toggler from all Blocks</span></li>'
  27. + '<li><span onclick="document.getElementById(\'next\').click();" >Click \'next\' button</span></li>'
  28. + '<li><span onclick="document.getElementById(\'previous\').click();" >Click \'previous\' button</span></li>'
  29. + '<li><span onclick="document.getElementById(\'control_bar\').scrollIntoView();" >jump to Navigationbar</span></li>'
  30. + '<li><span onclick="' + js_forceTimeoutOverlay + '" >force timeout overlay</span></li>'
  31. + '<li><span onclick="xMy_bodyPaddingRight(80)" >body padding-right:80% / redo</span></li>'
  32. + '</ul>';
  33. document.body.appendChild(elem);
  34.  
  35. var script = document.createElement("script");
  36. script.setAttribute("type", "text/javascript");
  37. script.innerHTML = 'var xMy_bodyPaddingRightOrig = "notSet";'
  38. + 'function xMy_bodyPaddingRight(size){'
  39. + ' var bdy = document.getElementsByTagName("body")[0];'
  40. + ' if(xMy_bodyPaddingRightOrig == "notSet"){ xMy_bodyPaddingRightOrig = bdy.style.paddingRight; bdy.style.paddingRight = size + "%"; }'
  41. + ' else{ bdy.style.paddingRight = xMy_bodyPaddingRightOrig; xMy_bodyPaddingRightOrig = "notSet"; }'
  42. + '}';
  43. document.head.appendChild(script);
  44.  
  45. var style = document.createElement("style");
  46. style.setAttribute("type", "text/css");
  47. style.innerHTML = '#xMy_menu { position: fixed; top: -1px; text-align: center; width:20em; left: 50%; margin-left: -10em; font-size:66%; border: 1px dotted rgba(77,77,144,0.66); border-radius: 0 0 0.66em 0.66em; background-color: rgba(222,222,222,0.75); color: #999999; z-index: 99999; } '
  48. + '#xMy_menu:hover { background-color: rgba(222,222,222,0.90); border-color: #339933; box-shadow: 2px 2px 5px 1px #339933; color: #333333; } '
  49. + '#xMy_menu ul { display: none; margin: 0.25em 0.25em 0.25em 1em; text-align: left; border-top: 1px dashed rgba(77,77,144,0.66); padding: 0.33em; } #xMy_menu:hover ul { display: block; } '
  50. + '#xMy_menu strong { font-weight: normal; font-style: italic; color: #339933; } '
  51. + '#xMy_menu strong:after { content: " ]"; color: #999999; } '
  52. + '#xMy_menu strong:before { content: "[ "; color: #999999; } '
  53. + '#xMy_menu span { cursor: pointer; } '
  54. + '#xMy_menu span:hover { text-decoration: underline; color: #339933; } '
  55. + '#xMy_menu span.xMy_sep { float: left; margin: -3px 1px; color: #999999; font-size: 14px; cursor: default; } '
  56. + '#xMy_menu span.xMy_tool:hover { text-decoration: none; } '
  57. + '#xMy_menu span.xMy_tool { float: left; font-size: 16px; margin: -3px 1px; } ';
  58. document.head.appendChild(style);
  59.  
  60. // new part
  61.  
  62. var xMy_css = new Array();
  63.  
  64. function xMy_writeStyle(css) {
  65. var style = document.createElement('style');
  66. style.type = 'text/css';
  67. if (document.getElementsByTagName) {
  68. document.getElementsByTagName('head')[0].appendChild(style);
  69. if (style.sheet && style.sheet.insertRule) {
  70. for (var i = 0; i < xMy_css.length; i++) {
  71. style.sheet.insertRule(xMy_css[i], 0);
  72. }
  73. }
  74. }
  75. }
  76.  
  77. function xMy_addStyle(style) {
  78. xMy_css[xMy_css.length] = style;
  79. }
  80.  
  81. // Define your CSS here
  82.  
  83. xMy_addStyle(".xMy_blockListToggle{"
  84. + " margin: 0 7px 0 -7px !important;"
  85. + " color: #333333;"
  86. + " cursor: pointer;"
  87. + " position: relative;"
  88. + " top: -2px;"
  89. + " font-size: 16px;"
  90. + "}");
  91. xMy_addStyle(".xMy_blockListToggle:hover{"
  92. + " color: #339933;"
  93. + " text-shadow: 1.75px 1.25px 1px #333333;"
  94. + "}");
  95.  
  96. // Writes CSS to the document
  97. xMy_writeStyle(xMy_css);
  98.  
  99. var newScript = document.createElement("script");
  100. var typeNode = document.createAttribute("type");
  101. typeNode.nodeValue = "text/javascript";
  102. newScript.setAttributeNode(typeNode);
  103.  
  104. newScript.appendChild(document.createTextNode(""
  105. + "function xMy_toggle_blockList(elem, forceShow) {\n"
  106. + " var blockHeaderNode = elem.parentNode.parentNode.parentNode.parentNode.parentNode;\n"
  107. + " var blockContentNode = blockHeaderNode;\n"
  108. + " do {\n"
  109. + " blockContentNode = blockContentNode.nextSibling;\n"
  110. + " } while(blockContentNode.tagName == null || !(blockContentNode.tagName === 'DIV' || blockContentNode.tagName === 'div'));\n"
  111. + " if(forceShow || blockContentNode.style.display != 'block') {\n"
  112. + " blockContentNode.style.display = 'block';\n"
  113. + " elem.childNodes[0].nodeValue = '▲';\n" // ▲△
  114. + " } else {\n"
  115. + " blockContentNode.style.display = 'none';\n"
  116. + " elem.childNodes[0].nodeValue = '▼';\n" // ▼▽
  117. + " }\n"
  118. + "}\n"
  119. + "function xMy_toggle_allBlocks() {\n"
  120. + " if(!xMy_hasToggler()){\n"
  121. + " xMy_add_blocktoggler();\n"
  122. + " }\n"
  123. + " var elemList = document.getElementsByClassName('xMy_blockListToggle');\n"
  124. + " if(elemList != null && elemList.length > 0){\n"
  125. + " for(idx = elemList.length - 1; idx >= 0; idx--) {\n"
  126. + " xMy_toggle_blockList(elemList[idx]);\n"
  127. + " }\n"
  128. + " }\n"
  129. + "}\n"
  130. + "function xMy_removeAllToggler() {\n"
  131. + " var elemList = document.getElementsByClassName('xMy_blockListToggle');\n"
  132. + " if(elemList != null && elemList.length > 0){\n"
  133. + " for(idx = elemList.length - 1; idx >= 0; idx--) {\n"
  134. + " var elem = elemList[idx];\n"
  135. + " if(elem.tagName != null && (elem.tagName === 'SPAN' || elem.tagName === 'span')){\n"
  136. + " xMy_toggle_blockList(elem, true);\n"
  137. + " elem.parentNode.removeChild(elem);\n"
  138. + " }\n"
  139. + " }\n"
  140. + " }\n"
  141. + "}\n"
  142. + "function xMy_hasToggler() {\n"
  143. + " var elemList = document.getElementsByClassName('xMy_blockListToggle');\n"
  144. + " return elemList != null && elemList.length > 0;\n"
  145. + "}\n"
  146. + "function xMy_add_blocktoggler() {\n"
  147. + " if(!xMy_hasToggler()){\n"
  148. + " var blockList = document.getElementsByClassName('block'); \n"
  149. + " if(blockList != null && blockList.length > 0){\n"
  150. // ### Generate Toggle Link
  151. + " for(idx = blockList.length - 1; idx >= 0; idx--){\n"
  152. + " var block = blockList[idx];\n"
  153. + " if(block.tagName != null && (block.tagName === 'DIV' || block.tagName === 'div')){\n"
  154. + " var blockHeader = block.childNodes[1].childNodes[1].childNodes[1].childNodes[1].childNodes[1].childNodes[1];\n"
  155. + " var newSpan = document.createElement('span');\n"
  156. + " var attrNode = document.createAttribute('class');\n"
  157. + " attrNode.nodeValue = 'xMy_blockListToggle';\n"
  158. + " newSpan.setAttributeNode(attrNode);\n"
  159. + " var titleNode = document.createAttribute('title');\n"
  160. + " titleNode.nodeValue = 'Toggle BlockContent visibility';\n"
  161. + " newSpan.setAttributeNode(titleNode);\n"
  162. + " var onclickNode = document.createAttribute('onclick');\n"
  163. + " onclickNode.nodeValue = 'xMy_toggle_blockList(this);';\n"
  164. + " newSpan.setAttributeNode(onclickNode);\n"
  165. + " newSpan.appendChild(document.createTextNode('▲'));\n"
  166. + " blockHeader.insertBefore(newSpan, blockHeader.childNodes[1]);\n"
  167. + " }\n"
  168. + " }\n"
  169. + " }\n"
  170. + " }\n"
  171. + "} "));
  172. document.getElementsByTagName('head')[0].appendChild(newScript);
  173.  
  174.