frameset.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. // Licensed Materials - Property of IBM
  2. //
  3. // IBM Cognos Products: pps
  4. //
  5. // (C) Copyright IBM Corp. 2005, 2019
  6. //
  7. // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. var bResultStillLoading = true;
  9. var xtabHeight = "50%";
  10. var chartHeight = "50%";
  11. var loadedFrames = new Array();
  12. var initializedFrames = new Array();
  13. var NUM_FRAME_INITIALIZE_RETRIES = 3;
  14. var FRAME_INTIALIZE_RETRY_TIMEOUT = 50;
  15. var initializeFrameCtr = 0;
  16. var lastInitializeFrameCtr;
  17. var frameRows;
  18. //synchronization functions
  19. function registerFrameLoaded( name ) {
  20. loadedFrames[name] = true;
  21. initializedFrames[name] = false;
  22. initAllFrames();
  23. }
  24. function deregisterFrame( name ) {
  25. var isSplit = getGlobal("isSplitView");
  26. if (name == "DimTree") {
  27. getDimTreeFrame().cleanupDimTree();
  28. }
  29. if (!isSplit && name == "Data") {
  30. if (getGlobal("isChart"))
  31. getChartFrame().clearFlyouts();
  32. else
  33. getXtabFrame().clearFlyouts();
  34. }
  35. if (isSplit && name == "Crosstab") {
  36. getXtabFrame().clearFlyouts();
  37. }
  38. if (isSplit && name == "Chart") {
  39. getChartFrame().clearFlyouts();
  40. }
  41. loadedFrames[name] = false;
  42. initializedFrames[name] = false;
  43. }
  44. function isFrameStillLoading( name ) {return (loadedFrames[name] == null); };
  45. function isToolbarStillLoading() { return (loadedFrames["Toolbar"] == null); };
  46. function isXtabStillLoading() {
  47. if (getGlobal("isSplitView")) {
  48. if (self.Data.Crosstab)
  49. return (!loadedFrames["Crosstab"]);
  50. else
  51. return (!loadedFrames["Chart"]);
  52. } else {
  53. return (!loadedFrames["Data"]);
  54. }
  55. }
  56. function XtabUnload(name) { loadedFrames[name] = null; };
  57. function isResultStillLoading() { return bResultStillLoading; };
  58. function ResultFinished() { bResultStillLoading = false; };
  59. function ResultUnload() { bResultStillLoading = true; };
  60. function ToolbarUnload() { (loadedFrames["Toolbar"] = null); };
  61. function TopFSUnload() { globalsLoaded = false; };
  62. function initAllFrames() {
  63. // Check to make sure that all the frames that exist are loaded bfore initializing them
  64. if (getGlobal("isSplitView")) {
  65. if ( (self.Data.Crosstab || self.Data.Chart) && //Make sure that we have at least a crosstab or a chart frame.
  66. (!self.Data.Crosstab || loadedFrames["Crosstab"]) &&
  67. (!self.Data.Chart || loadedFrames["Chart"]) &&
  68. loadedFrames["DimTree"] && loadedFrames["Toolbar"] && loadedFrames["TreeToolBar"]
  69. && (!isActionPaneOpen() || loadedFrames["ActionPane"])) {
  70. performInits();
  71. }
  72. } else {
  73. if ( loadedFrames["Data"] && loadedFrames["DimTree"] && loadedFrames["Toolbar"] &&
  74. loadedFrames["TreeToolBar"] && (!isActionPaneOpen() || loadedFrames["ActionPane"])) {
  75. performInits();
  76. }
  77. }
  78. }
  79. function performInits() {
  80. //Perform each frames loading here.
  81. //We load each frame on a separate javascript thread to ensure that the content
  82. //of the frame is properly initialized by the browser for that frame.
  83. //We then return.
  84. var isSplit = getGlobal("isSplitView");
  85. if (!initializedFrames["Toolbar"]) {
  86. callInitFunction(self.Toolbar, "InitializeToolbar(" + (initializeFrameCtr == NUM_FRAME_INITIALIZE_RETRIES) + ");");
  87. } else if (!initializedFrames["TreeToolBar"]) {
  88. callInitFunction(self.TreeToolBar, "initDimToolbar();");
  89. } else if (!isSplit && self.Data && !initializedFrames["Data"]) {
  90. callInitFunction(self.Data, "initialize();");
  91. } else if (isSplit && self.Data.Chart && !initializedFrames["Chart"]) {
  92. callInitFunction(self.Data.Chart, "initialize();");
  93. } else if (isSplit && self.Data.Crosstab && !initializedFrames["Crosstab"]) {
  94. callInitFunction(self.Data.Crosstab, "initialize();");
  95. } else if (!initializedFrames["DimTree"]) {
  96. callInitFunction(self.DimTree, "initDimtree();");
  97. } else if (isActionPaneOpen() && !initializedFrames["ActionPane"]) {
  98. //call initialize if the action pane contains the error redirect, normal behaviour otherwise
  99. if (self.ActionPane.ppesRedirectPage) {
  100. callInitFunction(self.ActionPane, "initialize();");
  101. }
  102. else {
  103. callInitFunction(self.ActionPane, "commonActionPaneInit();init();topparent.tweakActionPaneSize();");
  104. }
  105. }
  106. }
  107. function allFramesInitialized() {
  108. if (getGlobal("isSplitView"))
  109. return (initializedFrames["Toolbar"] && initializedFrames["TreeToolBar"] && initializedFrames["DimTree"] &&
  110. (!self.Data.Chart || initializedFrames["Chart"]) &&
  111. (!self.Data.Crosstab || initializedFrames["Crosstab"]) &&
  112. (!isActionPaneOpen() || initializedFrames["ActionPane"]));
  113. else
  114. return (initializedFrames["Toolbar"] && initializedFrames["TreeToolBar"] && initializedFrames["DimTree"] &&
  115. (!self.Data || initializedFrames["Data"]) && (!isActionPaneOpen() || initializedFrames["ActionPane"]));
  116. }
  117. function callInitFunction(frame,func) {
  118. lastInitializeFrameCtr = initializeFrameCtr;
  119. frame.setTimeout("document.body.style.display = '';" + func + "topparent.setFrameInitialized(window.name);", 1);
  120. }
  121. function setFrameInitialized(name) {
  122. if (initializeFrameCtr == lastInitializeFrameCtr) {
  123. initializedFrames[name] = true;
  124. initializeFrameCtr = 0;
  125. //Initialize next frame
  126. performInits();
  127. } else { //Frame signaled that it had not been properly loaded yet,
  128. //so give the browser a few cycles, to properly initialize its data.
  129. setTimeout("performInits();",FRAME_INTIALIZE_RETRY_TIMEOUT);
  130. }
  131. }
  132. function notifyFrameNotYetLoaded() {
  133. initializeFrameCtr++;
  134. }
  135. //query functions
  136. function getXtabFrame()
  137. {
  138. if (getGlobal("isSplitView")) {
  139. return self.Data.Crosstab;
  140. }
  141. else
  142. return self.Data;
  143. }
  144. function getChartFrame()
  145. {
  146. if (getGlobal("isSplitView")) {
  147. return self.Data.Chart;
  148. }
  149. else if (getGlobal("isChart"))
  150. return self.Data;
  151. }
  152. function getActionFrame()
  153. {
  154. return self.ActionPane;
  155. }
  156. function getToolbarFrame()
  157. {
  158. return self.Toolbar;
  159. }
  160. function getDimTreeFrame()
  161. {
  162. return self.DimTree;
  163. }
  164. function getConfigFrame() {
  165. return self.configurationVariablesFrame;
  166. }
  167. function getDimCacheFrame()
  168. {
  169. return self.DimCacheResult;
  170. }
  171. function getMainFrameset()
  172. {
  173. return document.getElementById("main");
  174. }
  175. function getTreeMessageFrame()
  176. {
  177. return self.TreeMessagePane;
  178. }
  179. function getDimTreeToolbarFrame()
  180. {
  181. return self.TreeToolBar;
  182. }
  183. //resize event handlers
  184. function xtabResize(event)
  185. {
  186. var eventM = new eventManager(event);
  187. if (isActionPaneOpen() || isChartPaneOpen())
  188. return true;
  189. eventM.cancelBubble();
  190. }
  191. function chartResize(event)
  192. {
  193. var eventM = new eventManager(event);
  194. if (isChartPaneOpen())
  195. return true;
  196. if (getGlobal("isSplitView") && self.Data.document.getElementById("dataArea"))
  197. self.Data.document.getElementById("dataArea").rows = "0%,100%";
  198. eventM.cancelBubble();
  199. }
  200. function actPaneResize(event)
  201. {
  202. var eventM = new eventManager(event);
  203. if (isActionPaneOpen())
  204. return true;
  205. maintainToolBarSize();
  206. eventM.cancelBubble();
  207. }
  208. function dimtreetoolBarResize(event)
  209. {
  210. var eventM = new eventManager(event);
  211. eventM.cancelBubble();
  212. }
  213. function toolBarResize(event)
  214. {
  215. var eventM = new eventManager(event);
  216. maintainToolBarSize();
  217. eventM.cancelBubble();
  218. }
  219. function maintainToolBarSize() {
  220. if (!getGlobal("displayDataOnly")) {
  221. var rightFrameset = document.getElementById("rightFrameset");
  222. rightFrameset.rows = rightFrameset.rows.substr(0,rightFrameset.rows.lastIndexOf(",")) + ",27";
  223. }
  224. }
  225. //frame resizing/closing
  226. function closeActionPane() {
  227. if (isXtabStillLoading()) {
  228. setTimeout("closeActionPane()", 50);
  229. return;
  230. }
  231. if (getActionFrame().cleanup)
  232. getActionFrame().cleanup();
  233. clearActionPane();
  234. }
  235. function clearActionPane() {
  236. var xtabFrame = getXtabFrame().document;
  237. if ( typeof xtabFrame.fhidden != "undefined" &&
  238. typeof xtabFrame.fhidden.ACTPANE != "undefined" &&
  239. typeof xtabFrame.fhidden.ACTPANE.value != "undefined" )
  240. {
  241. xtabFrame.fhidden.ACTPANE.value = 0;
  242. }
  243. if (isChartPaneOpen())
  244. {
  245. var chartFrame = getChartFrame().document;
  246. if ( typeof chartFrame.fhidden != "undefined" &&
  247. typeof chartFrame.fhidden.ACTPANE != "undefined" &&
  248. typeof chartFrame.fhidden.ACTPANE.value != "undefined" )
  249. {
  250. chartFrame.fhidden.ACTPANE.value = 0;
  251. }
  252. }
  253. closeActionFrame();
  254. }
  255. function closeActionFrame() {
  256. if (nn7) {
  257. if (getGlobal("displayDataOnly")) {
  258. document.getElementById("rightFrameset").rows = "*,1,0";
  259. setTimeout('document.getElementById("rightFrameset").rows = "*,0,0"', 5);
  260. }
  261. else {
  262. document.getElementById("rightFrameset").rows = "*,1,27";
  263. setTimeout('document.getElementById("rightFrameset").rows = "*,0,27"', 5);
  264. }
  265. if (getGlobal("isSplitView") && isChartPaneOpen()) {
  266. frameRows = self.Data.document.getElementById("dataArea").rows;
  267. self.Data.document.getElementById("dataArea").rows="49%,51%";
  268. setTimeout('self.Data.document.getElementById("dataArea").rows=frameRows', 5);
  269. }
  270. } else {
  271. if (getGlobal("displayDataOnly"))
  272. document.getElementById("rightFrameset").rows = "*,0,0";
  273. else
  274. document.getElementById("rightFrameset").rows = "*,0,27";
  275. }
  276. getToolbarFrame().clearToggleButton();
  277. }
  278. function openActionPane()
  279. {
  280. var xtabFrame = getXtabFrame().document;
  281. if (actionPaneHasValue(xtabFrame))
  282. {
  283. if (getGlobal("displayDataOnly"))
  284. document.getElementById("rightFrameset").rows = "*,225,0";
  285. else
  286. document.getElementById("rightFrameset").rows = "*,225,27";
  287. //Netscape 7 sometimes doesent refresh its presentational information
  288. //The Action Pane is there, but it is invisible, so we simply add and a last node
  289. //And therefore force the browser to handle the presentation.
  290. getActionFrame().scrollTo(0,0);
  291. }
  292. }
  293. function actionPaneHasValue(xtabFrame) {
  294. return ((typeof xtabFrame.fhidden != "undefined") &&
  295. (typeof xtabFrame.fhidden.ACTPANE != "undefined") &&
  296. (typeof xtabFrame.fhidden.ACTPANE.value != "undefined"));
  297. }
  298. function setActionPaneHeight(actionPaneHeight) {
  299. if (getGlobal("displayDataOnly"))
  300. document.getElementById("rightFrameset").rows = "*," + actionPaneHeight + ",0";
  301. else
  302. document.getElementById("rightFrameset").rows = "*," + actionPaneHeight + ",27";
  303. }
  304. function tweakActionPaneSize() {
  305. if (nn7) {
  306. var rightFrameSet = document.getElementById("rightFrameset");
  307. var oldRows = rightFrameSet.rows;
  308. var rows = rightFrameSet.rows.split(",");
  309. rows[1] = parseInt(rows[1]) + 1;
  310. var newRows = rows[0];
  311. for (var i = 1; i < rows.length; i++)
  312. newRows += "," + rows[i];
  313. document.getElementById("rightFrameset").rows = newRows;
  314. window.setTimeout("document.getElementById('rightFrameset').rows = \"" + oldRows + "\"", 10);
  315. }
  316. }
  317. function openTreeMessageFrame()
  318. {
  319. document.getElementById("leftFrameset").rows = "*,185,27";
  320. getTreeMessageFrame().document.body.appendChild(getTreeMessageFrame().document.createTextNode(" "));
  321. }
  322. function closeTreeMessageFrame()
  323. {
  324. document.getElementById("leftFrameset").rows = "*,0,27";
  325. }
  326. function openTreeToolbarFrame()
  327. {
  328. document.getElementById("leftFrameset").rows = "*,0,27";
  329. setCookie("DimTreeToolbarVisible","True",(10*365),getGlobal("cookieSecure"));
  330. dimTreeToolbarOpen = true;
  331. }
  332. function closeTreeToolbarFrame()
  333. {
  334. //Do not allow for Netscape 7
  335. if (!nn7) {
  336. document.getElementById("leftFrameset").rows = "*,0,0";
  337. if (getCookie("DimTreeToolbarVisible"))
  338. deleteCookie("DimTreeToolbarVisible");
  339. dimTreeToolbarOpen = false;
  340. }
  341. }
  342. function openTreeFrame()
  343. {
  344. getMainFrameset().cols = parentTopframeCols;
  345. treeVisible = true;
  346. if (getCookie("DimTreeVisible"))
  347. deleteCookie("DimTreeVisible");
  348. if (getXtabFrame().isSplitDisplay() )
  349. getChartFrame().setToggleTreeIconOpen();
  350. else
  351. getXtabFrame().setToggleTreeIconOpen();
  352. //Netscape 7 sometimes doesent refresh its presentational information
  353. //The tree frame is there, but the browser doesen't show it.
  354. //So we use a trick.
  355. if (nn7) {
  356. var dimtree = getDimTreeFrame().document;
  357. var textNode = dimtree.createTextNode(" ");
  358. dimtree.body.appendChild(textNode);
  359. dimtree.body.removeChild(textNode);
  360. }
  361. }
  362. function closeTreeFrame()
  363. {
  364. parentTopframeCols = getMainFrameset().cols;
  365. getMainFrameset().cols = "0,*";
  366. treeVisible = false;
  367. setCookie("DimTreeVisible","False",(10*365),getGlobal("cookieSecure"));
  368. if (getXtabFrame().isSplitDisplay() )
  369. getChartFrame().setToggleTreeIconClosed();
  370. else
  371. getXtabFrame().setToggleTreeIconClosed();
  372. }
  373. function isActionPaneOpen() {
  374. if (!getXtabFrame())
  375. return false;
  376. var xtab = getXtabFrame().document;
  377. if (xtab.fhidden && xtab.fhidden.ACTPANE && xtab.fhidden.ACTPANE.value != 0)
  378. return true;
  379. return false;
  380. }
  381. function closeChartPane() {
  382. if (getGlobal("isSplitView") && self.Data.document.getElementById("dataArea")) {
  383. self.Data.document.getElementById("dataArea").rows = "0%,100%";
  384. var bod = Chart.document.body;
  385. bod.innerHTML = "";
  386. }
  387. }
  388. function openChartPane() {
  389. if (getGlobal("isSplitView") && self.Data.document.getElementById("dataArea"))
  390. if (chartHeight.toString().indexOf("%") >= 0)
  391. self.Data.document.getElementById("dataArea").rows = chartHeight + ',' + xtabHeight;
  392. else
  393. self.Data.document.getElementById("dataArea").rows = chartHeight + 'px,' + xtabHeight + 'px';
  394. }
  395. function isChartPaneOpen() {
  396. if (!self.Data.document.getElementById("dataArea"))
  397. return false;
  398. var rows = self.Data.document.getElementById("dataArea").rows;
  399. if (rows.indexOf(",") >= 0)
  400. return true;
  401. return false;
  402. }
  403. function getXtabFrameOffsetLeft() {
  404. var cols = getMainFrameset().cols;
  405. var offsetLeft = 0;
  406. var offset = 0;
  407. do {
  408. offset = parseInt(cols);
  409. if (offset)
  410. offsetLeft += offset;
  411. cols = cols.substr(cols.indexOf(',') + 1);
  412. } while (cols.indexOf(',') >= 0);
  413. return offsetLeft;
  414. }
  415. function executeCrossFrameFunction( funcname, excludeFrame, passDocument)
  416. {
  417. var targetFrames = new Array();
  418. if (getGlobal("isSplitView")) {
  419. if (excludeFrame != "Crosstab" && getXtabFrame())
  420. targetFrames[targetFrames.length++] = getXtabFrame();
  421. if (excludeFrame != "Chart" && isChartPaneOpen())
  422. targetFrames[targetFrames.length++] = getChartFrame();
  423. }
  424. else {
  425. if (excludeFrame != "Data" && getXtabFrame())
  426. targetFrames[targetFrames.length++] = getXtabFrame();
  427. }
  428. if (excludeFrame != "Toolbar" && getToolbarFrame())
  429. targetFrames[targetFrames.length++] = getToolbarFrame();
  430. if (excludeFrame != "ActionPane" && getActionFrame())
  431. targetFrames[targetFrames.length++] = getActionFrame();
  432. if (excludeFrame != "DimTree" && getDimTreeFrame())
  433. targetFrames[targetFrames.length++] = getDimTreeFrame();
  434. for (var i = 0; i < targetFrames.length; i++)
  435. {
  436. var f = targetFrames[i];
  437. if (f[funcname])
  438. {
  439. var funcref = f[funcname];
  440. if (passDocument)
  441. funcref.call(null, f.document);
  442. else
  443. funcref.call();
  444. }
  445. }
  446. }
  447. if (typeof document.createDocumentFragment == "undefined")
  448. {
  449. document._createDocumentFragment = function() {
  450. var ele = document.createElement("html");
  451. return ele;
  452. }
  453. }
  454. else
  455. document._createDocumentFragment = document.createDocumentFragment;
  456. function getDocumentFragmentDocument(docFrag)
  457. {
  458. if (!docFrag.document)
  459. return docFrag;
  460. else
  461. return docFrag.document;
  462. }
  463. function getGlobal(name)
  464. {
  465. if( !globalsLoaded )
  466. {
  467. setTimeout("getGlobal(" + name + ")", 20);
  468. return;
  469. }
  470. return eval("self." + name);
  471. }
  472. function setGlobal(name, value)
  473. {
  474. if(!globalsLoaded)
  475. {
  476. setTimeout("setGlobal(" + name + "," + value + ")", 20);
  477. return;
  478. }
  479. eval("self." + name + "= value");
  480. }
  481. function gotoLocation(loc, isRTS) {
  482. var doc = getXtabFrame().document;
  483. var form = doc.createElement("FORM");
  484. form.method = "POST";
  485. form.target = getGlobal("PPESTopTarget");
  486. if (loc.indexOf("?") != -1) {
  487. form.action = loc.substr(0,loc.indexOf("?"));
  488. loc = loc.substr(loc.indexOf("?") + 1);
  489. //split on & and create a hidden element for each entry
  490. var parms = loc.split('&');
  491. for (var i = 0; i < parms.length; i++) {
  492. var input = doc.createElement("INPUT");
  493. input.type = "hidden";
  494. input.name = parms[i].substr(0,parms[i].indexOf('='));
  495. input.value = unescape(parms[i].substr(parms[i].indexOf('=') + 1));
  496. form.appendChild(input);
  497. }
  498. if (isRTS) {
  499. // pass the current state to the "ppcancel" form
  500. var lkgs = doc.createElement("INPUT");
  501. lkgs.type = "hidden";
  502. lkgs.name = "LKGS";
  503. lkgs.value = doc.fhidden.LKGS.value;
  504. form.appendChild(lkgs);
  505. }
  506. }
  507. else if (loc == "javascript:window.close()") {
  508. window.close();
  509. }
  510. else if (loc.search("/cps4/portlets/common/close.html") != -1) {
  511. window.close();
  512. }
  513. else {
  514. form.action = location.pathname;
  515. }
  516. //Submit the form
  517. doc.body.appendChild(form);
  518. form.submit();
  519. }
  520. function setWasRedirected(wasRedirected) {
  521. self.configurationVariablesFrame.document.configform.wasredirected.value = wasRedirected;
  522. }
  523. function wasRedirected() {
  524. return (self.configurationVariablesFrame.document.configform.wasredirected.value == "1");
  525. }