customlogin.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. // Licensed Materials - Property of IBM
  2. //
  3. // IBM Cognos Products: ps
  4. //
  5. // (C) Copyright IBM Corp. 2005, 2011
  6. //
  7. // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. // Copyright (C) 2008 Cognos Incorporated. All rights reserved.
  9. // Cognos and the Cognos logo are trademarks of Cognos Incorporated.
  10. function getLocale() {
  11. return cl_locale;
  12. }
  13. function executeOKCommand() {
  14. processCommand('ok');
  15. }
  16. function executeCancelCommand() {
  17. processCommand('cancel');
  18. }
  19. function executeCloseCommand() {
  20. processCommand('close');
  21. }
  22. function executeHelpCommand() {
  23. processCommand('help');
  24. }
  25. var USE_RUNTIME_LOCALE = 0;
  26. var USE_DEFAULT = 1;
  27. var deleteArray = null;
  28. function doCustomization() {
  29. deleteArray = new Array();
  30. var templateContent = readTemplate(USE_RUNTIME_LOCALE);
  31. if (templateContent != null) {
  32. insertTemplateContent(templateContent);
  33. //Perform customization
  34. doLayoutCustomization();
  35. doMessageReplacement();
  36. cleanup();
  37. //Finally, invoke customer-supplied javascript function, if specified
  38. if (typeof customize == 'function') {
  39. customize();
  40. }
  41. } else {
  42. // template could not be located and/or read - just degrade gracefully
  43. doRenderDefault();
  44. }
  45. }
  46. function doLayoutCustomization() {
  47. // Layout
  48. for (i = 0; i < clLayoutArray.length; i++) {
  49. doReplace("%" + clLayoutArray[i] + "%", clLayoutArray[i], true);
  50. }
  51. }
  52. function doMessageReplacement() {
  53. // Content replacement
  54. for (i = 0; i < clMessageReplaceArray.length; i++) {
  55. doReplace(clMessageReplaceArray[i], "%" + clMessageReplaceArray[i] + "%");
  56. }
  57. }
  58. function doReplace(tgt_id, src_id, replaceId) {
  59. var tgt = document.getElementById(tgt_id);
  60. var src = document.getElementById(src_id);
  61. if (tgt && src) {
  62. tgt.innerHTML = '';
  63. while (src.firstChild) {
  64. tgt.appendChild(src.removeChild(src.firstChild));
  65. }
  66. if (replaceId) {
  67. tgt.id = src.id;
  68. }
  69. }
  70. if (src) {
  71. src.deleted = false;
  72. deleteArray[deleteArray.length] = src;
  73. }
  74. }
  75. function cleanup() {
  76. for(i = 0; i < deleteArray.length; i++) {
  77. var e = deleteArray[i];
  78. if (e != null && e.parentNode != null && !e.deleted) {
  79. e.parentNode.removeChild(e);
  80. e.deleted = true;
  81. }
  82. }
  83. }
  84. function insertTemplateContent(templateContent) {
  85. function addScripts(scriptsText) {
  86. try {
  87. var head = document.getElementsByTagName('HEAD').item(0);
  88. var script = document.createElement("script");
  89. script.type = 'text/javascript';
  90. script.text = scriptsText;
  91. head.appendChild(script);
  92. } catch (e) {}
  93. }
  94. function addStyles(stylesText) {
  95. try {
  96. var head = document.getElementsByTagName('HEAD').item(0);
  97. var style = document.createElement("style");
  98. style.type = 'text/css';
  99. if (style.styleSheet) {
  100. style.styleSheet.cssText = stylesText;
  101. }
  102. else {
  103. var domText = document.createTextNode(stylesText);
  104. style.appendChild(domText);
  105. }
  106. head.appendChild(style);
  107. } catch (e) {}
  108. }
  109. function addLinks(href) {
  110. try {
  111. var head = document.getElementsByTagName('HEAD').item(0);
  112. var node = document.createElement("link");
  113. node.type = 'text/css';
  114. node.rel = "stylesheet";
  115. node.href = href;
  116. head.appendChild(node);
  117. } catch (e) {
  118. }
  119. }
  120. var customDiv = document.createElement("div");
  121. var clInsertTarget = document.getElementById(clLayoutArray[0]);
  122. clInsertTarget.parentNode.insertBefore(customDiv, clInsertTarget);
  123. var templateNode = document.createElement("div");
  124. templateNode.innerHTML = "<span style='display:none'>&nbsp;</span>" + templateContent;
  125. templateNode.removeChild(templateNode.firstChild);
  126. // extract and insert style text
  127. var stylesText = "";
  128. var styleElements = templateNode.getElementsByTagName("style");
  129. var length = styleElements.length;
  130. for (var i = length - 1; i >= 0; i--) {
  131. stylesText += styleElements[i].innerHTML;
  132. if (styleElements[i].parentNode) {
  133. styleElements[i].parentNode.removeChild(styleElements[i]);
  134. }
  135. }
  136. addStyles(stylesText);
  137. // extract and insert script text
  138. var scriptsText = "";
  139. var scriptElements = templateNode.getElementsByTagName("SCRIPT");
  140. var length = scriptElements.length;
  141. for (var i = length - 1; i >= 0; i--) {
  142. scriptsText += scriptElements[i].text;
  143. if (scriptElements[i].parentNode) {
  144. scriptElements[i].parentNode.removeChild(scriptElements[i]);
  145. }
  146. }
  147. addScripts(scriptsText);
  148. // add links
  149. if (templateNode.getElementsByTagName("link") != null) {
  150. var nodes = templateNode.getElementsByTagName("link");
  151. var l = nodes.length;
  152. for (var i = 0; i < l; i++) {
  153. var attrs = nodes[i].attributes;
  154. for (var j = 0; j < attrs.length; j++) {
  155. if (attrs[j].nodeName == "href") {
  156. addLinks(attrs[j].nodeValue);
  157. break;
  158. }
  159. }
  160. }
  161. }
  162. // add rest of the template contents
  163. if (templateNode.childNodes) {
  164. var bHasHtml = false;
  165. var nodesLength = templateNode.childNodes.length;
  166. for (var i = nodesLength - 1 ; i >= 0; i--) {
  167. if ((templateNode.childNodes[i].nodeType != 3) ||
  168. (templateNode.childNodes[i].nodeType == 3 && templateNode.childNodes[i].nodeValue.replace(/^\s*|\s*$/g,"") != "")){
  169. if (!bHasHtml) {
  170. customDiv.innerHTML = "";
  171. customDiv.appendChild(templateNode.childNodes[i]);
  172. bHasHtml = true;
  173. } else {
  174. customDiv.insertBefore(templateNode.childNodes[i], customDiv.firstChild);
  175. }
  176. }
  177. }
  178. }
  179. }
  180. function readTemplate(useLocale) {
  181. var asynch = false;
  182. var request = getXMLHttpRequest();
  183. if (request) {
  184. var template = getTemplateURL(useLocale);
  185. request.open("GET", template, asynch);
  186. request.send(null);
  187. if (request.status >= 200 && request.status < 300) {
  188. return request.responseText;
  189. } else if (useLocale != USE_DEFAULT) {
  190. return readTemplate(USE_DEFAULT);
  191. }
  192. }
  193. return null;
  194. }
  195. function getTemplateURL(useLocale) {
  196. var fullTemplatePath = cl_templatePath + "/" + cl_baseTemplateName;
  197. if (useLocale != USE_DEFAULT) {
  198. fullTemplatePath += "_" + getLocale();
  199. }
  200. fullTemplatePath += cl_templateDefaultExtension;
  201. return fullTemplatePath;
  202. }
  203. function doRenderDefault() {
  204. for (i = 0; i < clLayoutArray.length; i++) {
  205. var div = document.getElementById(clLayoutArray[i]);
  206. if (div) {
  207. div.style.display = "";
  208. }
  209. }
  210. }