find.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. // Licensed Materials - Property of IBM
  2. //
  3. // IBM Cognos Products: pps
  4. //
  5. // (C) Copyright IBM Corp. 2005, 2017
  6. //
  7. // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. // This forms the javascript functions used for the Find pane of
  9. // PowerPlay Studio.
  10. // The functions handle any minor browser differences.
  11. var gFindResults;
  12. var selectedControlIdx = -1;
  13. var displayLimit = 5;
  14. var currentPosition = 0;
  15. var rowsDisplayed = 0;
  16. var blockInvalidate = false;
  17. var navprev = "";
  18. var navnext = "";
  19. function invalidateResults() {
  20. if (document.searchForm.searchTarget.value == "R" && !blockInvalidate)
  21. {
  22. submitSearch();
  23. poll();
  24. }
  25. }
  26. function init() {
  27. topparent.openActionPane();
  28. ContextMenu.initialize(true,false);
  29. topparent.getXtabFrame().fh.FIND.value = "1";
  30. topparent.ResultUnload();
  31. changeTarget(document.searchForm.searchTarget.value);
  32. }
  33. function displayActions() {
  34. var actions = document.getElementById("navigationDisplayBottom");
  35. var buttons = "";
  36. actions.style.visibility = "visible";
  37. if (gFindResults) {
  38. if (document.searchForm.searchTarget.value == "R") { //find in report
  39. buttons += '<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td><img src="../ppwb/Graphics/space.gif" height="7"/></td></tr><tr>';
  40. buttons += '<td width="33%" align="left"><A align="left" class="FindResultsLink" onmouseover="this.className=\'FindResultsLinkOver\';" onmouseout="this.className=\'FindResultsLink\';" name="goToLink" onclick="GoToCategory();">' + CEncodingUtil.HtmlEncode(strCmdGoTo) + '</A>&nbsp;&nbsp;&nbsp;&nbsp;<A id="filterLink" class="FindResultsLink" onmouseover="this.className=\'FindResultsLinkOver\';" onmouseout="this.className=\'FindResultsLink\';" name="filterLink" align="left" onclick="filterOnFindResult();">' + CEncodingUtil.HtmlEncode(strCmdFilter) + '</A></td>';
  41. buttons += '</tr></table>';
  42. } else { // find in cube
  43. buttons += '<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td><img src="../ppwb/Graphics/space.gif" height="7"/></td></tr><tr>';
  44. buttons += '<td width="33%" align="left"><A class="FindResultsLink" onmouseover="this.className=\'FindResultsLinkOver\';" onmouseout="this.className=\'FindResultsLink\';" name="filterLink" align="left" onclick="filterOnFindResult();">' + CEncodingUtil.HtmlEncode(strCmdFilter) + '</A>&nbsp;&nbsp;&nbsp;&nbsp;<A id="filterLink" class="FindResultsLink" onmouseover="this.className=\'FindResultsLinkOver\';" onmouseout="this.className=\'FindResultsLink\';" name="replaceRowLink" align="left" onclick="replaceRows();">' + CEncodingUtil.HtmlEncode(strCmdRows) + '</A>&nbsp;&nbsp;&nbsp;&nbsp;<A name="replaceColLink" class="FindResultsLink" onmouseover="this.className=\'FindResultsLinkOver\';" onmouseout="this.className=\'FindResultsLink\';" align="left" onclick="replaceColumns();">' + CEncodingUtil.HtmlEncode(strCmdColumns) + '</A></td>';
  45. buttons += '</tr></table>';
  46. }
  47. }
  48. actions.innerHTML = buttons;
  49. }
  50. function displayNavigationLinks(target) {
  51. navprev = '<td class="FindResultsLink" width="33%">&nbsp;</td>';
  52. if (currentPosition > displayLimit) {
  53. var sPrev = CMsgUtil.SubstituteMessage(strCmdPrev, 5);
  54. sPrev = CEncodingUtil.HtmlEncode(sPrev);
  55. navprev = '<td width="33%"><a class="FindResultsLink" onmouseover="this.className=\'FindResultsLinkOver\';" onmouseout="this.className=\'FindResultsLink\';" href="javascript:void 0;" onClick="currentPosition -= rowsDisplayed+displayLimit; displayResults();">' + sPrev + '</a></td>';
  56. }
  57. navnext = '<td class="FindResultsLink" width="33%">&nbsp;</td>';
  58. if (currentPosition < gFindResults.length) {
  59. var sNext = CMsgUtil.SubstituteMessage(strCmdNext, 5);
  60. sNext = CEncodingUtil.HtmlEncode(sNext);
  61. navnext = '<td width="33%" align="right"><a class="FindResultsLink" onmouseover="this.className=\'FindResultsLinkOver\';" onmouseout="this.className=\'FindResultsLink\';" href="javascript:void 0;" onClick="displayResults();">' + sNext + '</a></td>';
  62. }
  63. }
  64. function select(event, control) {
  65. var name = control.id;
  66. var idx = name.replace(/\D/g, "");
  67. unselect();
  68. if (selectedControlIdx == idx) {
  69. selectedControlIdx = -1;
  70. return;
  71. }
  72. control.className = "findRowSelected";
  73. selectedControlIdx = idx;
  74. var category = gFindResults[selectedControlIdx];
  75. var link = document.getElementById('filterLink');
  76. if(category._tempInfo != "")
  77. {
  78. link.className = 'FindResultsLinkDisabled';
  79. link.onclick = '';
  80. }
  81. else
  82. {
  83. link.className = 'FindResultsLink';
  84. link.onclick = filterOnFindResult;
  85. }
  86. var eventM = new eventManager(event);
  87. eventM.cancelBubble();
  88. return false;
  89. }
  90. function unselect() {
  91. if (selectedControlIdx == -1)
  92. return;
  93. var control = document.getElementById("FindResult" + selectedControlIdx);
  94. control.className = "findRow";
  95. }
  96. function submitSearch() {
  97. //hide results so actions don't get fired while we're processing a new result set
  98. var navBottom = document.getElementById("navigationDisplayBottom");
  99. if (navBottom && navBottom.style.visibility) navBottom.style.visibility = "hidden";
  100. var resultDisplay = document.getElementById("resultsDisplay");
  101. if (resultDisplay && resultDisplay.style.visibility) resultDisplay.style.visibility = "hidden";
  102. disableButton(document.getElementById("findButton"));
  103. topparent.ResultUnload();
  104. currentPosition = 0;
  105. rowsDisplayed = 0;
  106. var cmd = document.searchForm.searchTarget.value;
  107. var pattern = document.searchForm.searchPattern.value;
  108. var restrict = document.searchForm.searchRestriction.value;
  109. var hf = topparent.getXtabFrame().document.getElementById("fhidden");
  110. var target = hf.target;
  111. hf.CNCT.value = 12;
  112. var appendUrl = 'F' + cmd + ':"' + CEncodingUtil.EncodeStrOperand(pattern) + '"' + '\t' + restrict;
  113. if (cmd == "C") {
  114. appendUrl += '\t' + document.getElementById("searchDimension").value;
  115. } else {
  116. appendUrl += '\t' + document.getElementById("searchAxis").value;
  117. }
  118. hf.CO.value = appendUrl;
  119. hf.target = findResultFrame.name;
  120. hf.RA.value = "999";
  121. hf.submit();
  122. hf.target = target;
  123. }
  124. function poll() {
  125. if (topparent.isResultStillLoading())
  126. {
  127. setTimeout("poll()", 50);
  128. return;
  129. }
  130. gFindResults = findResultFrame.FindResults;
  131. displayFindResults();
  132. }
  133. function filterOnFindResult(){
  134. if (topparent.isXtabStillLoading())
  135. {
  136. setTimeout("filterOnFindResult()", 50);
  137. return;
  138. }
  139. if(gFindResults.length == 1 && selectedControlIdx == -1)
  140. selectedControlIdx = 0;
  141. if (isError(selectedControlIdx == -1, errNoSelection))
  142. return;
  143. var command = '';
  144. var category = gFindResults[selectedControlIdx];
  145. if (document.searchForm.searchTarget.value == "R")
  146. {
  147. if(category._tempInfo == "")
  148. command = 'DG' + ':' + category._axis + category._group + '\t' + category._id + "," + category._dim + ';' + category._code;
  149. }
  150. else
  151. {
  152. command = 'DC' + ':' + category._id + "," + category._dim + ';' + category._code;
  153. }
  154. if (command != '')
  155. {
  156. topparent.getXtabFrame().document.fhidden.target = "_self";
  157. topparent.getXtabFrame().doit(command);
  158. }
  159. }
  160. function GoToCategory(){
  161. if(gFindResults.length == 1 && selectedControlIdx == -1)
  162. selectedControlIdx = 0;
  163. if (isError(selectedControlIdx == -1, errNoSelection))
  164. return;
  165. var category = gFindResults[selectedControlIdx];
  166. var rowPage = 0;
  167. var colPage = 0;
  168. var isOnCurrentPage = true;
  169. var hasPagination = topparent.getXtabFrame().document.fhidden.J && topparent.getXtabFrame().document.fhidden.K;
  170. if (hasPagination) {
  171. rowPage = topparent.getXtabFrame().document.fhidden.J.value;
  172. colPage = topparent.getXtabFrame().document.fhidden.K.value;
  173. }
  174. if(category._axis == 'R')
  175. isOnCurrentPage = rowPage == category._pageNo;
  176. else
  177. isOnCurrentPage = colPage == category._pageNo;
  178. if (isError(isOnCurrentPage, currSelection))
  179. return;
  180. if(category._axis == 'R')
  181. command = 'PG' + ':' + category._pageNo + '\t' + colPage;
  182. else if(category._axis == 'C')
  183. command = 'PG' + ':' + rowPage + '\t' + category._pageNo;
  184. blockInvalidate = true;
  185. topparent.getXtabFrame().doit(command);
  186. blockInvalidate = false;
  187. }
  188. function replaceRows(){
  189. if(gFindResults.length == 1 && selectedControlIdx == -1)
  190. selectedControlIdx = 0;
  191. if (isError(selectedControlIdx == -1, errNoSelection))
  192. return;
  193. var Results = findResultFrame.FindResults;
  194. var category = Results[selectedControlIdx];
  195. var command = 'ER' + ':' + 'R-1' + '\t' + 'D' + category._dim + '\t' + category._id + "," + category._dim + ';' + category._code;
  196. topparent.getXtabFrame().doit(command);
  197. }
  198. function replaceColumns(){
  199. if(gFindResults.length == 1 && selectedControlIdx == -1)
  200. selectedControlIdx = 0;
  201. if (isError(selectedControlIdx == -1, errNoSelection))
  202. return;
  203. var Results = findResultFrame.FindResults;
  204. var category = Results[selectedControlIdx];
  205. var command = 'ER' + ':' + 'C-1' + '\t' + 'D' + category._dim + '\t' + category._id + "," + category._dim + ';' + category._code;
  206. topparent.getXtabFrame().doit(command);
  207. }
  208. function isError (condition, msg) {
  209. if (condition)
  210. writeErrorMessage(msg);
  211. return condition;
  212. }
  213. function changeTarget (value) {
  214. if (value == "R") { //find in report
  215. document.getElementById("limitLabel").innerHTML = CEncodingUtil.HtmlEncode(strReportAxis);
  216. document.getElementById("limitElement").innerHTML = document.getElementById("reportAxisHTML").innerHTML;
  217. } else {
  218. document.getElementById("limitLabel").innerHTML = CEncodingUtil.HtmlEncode(strDimensionList);
  219. document.getElementById("limitElement").innerHTML = document.getElementById("DimensionListHTML").innerHTML;
  220. }
  221. }
  222. function clearResults() {
  223. var results = document.getElementById("searchResults");
  224. var navUp = document.getElementById("navigationDisplayTop");
  225. var navDown = document.getElementById("navigationDisplayBottom");
  226. var sResult = "";
  227. var sNoResultMsg = strNoResults;
  228. navUp.innerHTML = "";
  229. navDown.innerHTML = "";
  230. sResult += '<table cellspacing="0" cellpadding="0" border="0"><tr><td class="FindText">';
  231. sResult += CEncodingUtil.HtmlEncode(sNoResultMsg) + '</td>';
  232. sResult += '</tr></table>';
  233. results.innerHTML = sResult;
  234. }
  235. function FindRecord (ppds_id, dim_index, code, label, path, axis, group, tempInfo, pageNo) {
  236. this._id = ppds_id;
  237. this._dim = dim_index;
  238. this._code = code;
  239. this._label = label;
  240. this._path = path;
  241. this._axis = axis;
  242. this._group = group;
  243. this._tempInfo = tempInfo;
  244. this._pageNo = pageNo;
  245. }
  246. function renderHTML(record,index) {
  247. var label = record._label;
  248. var path = record._path;
  249. if (path == "") {
  250. path = " ";
  251. }
  252. var pageNo = record._pageNo;
  253. pageNo++; //pageNo is zero based, so increase it just for display purposes
  254. var sResult = "";
  255. sResult += '<tr id="FindResult' + index + '" onclick="select(event, this);" class="findRow"><td onmouseover="return true;"><a class="FindResultCategory">';
  256. sResult += CEncodingUtil.HtmlEncode(label) + '</a></td><td onmouseover="return true;"><a class="FindResultCategory">';
  257. sResult += CEncodingUtil.HtmlEncode(path) + ' </a></td>';
  258. sResult += '</tr>';
  259. return sResult;
  260. }
  261. // the results of the find query are written to a separate frame in the following manner...
  262. // var FindResults = new Array();
  263. // FindResults[0] = new FindRecord(PPDS_ID, 'Label', 'Report/Cube Path');
  264. // FindResults[1] = ...
  265. // only matching results are returned to the pane
  266. // if no results match the query, the array size will be set to 0.
  267. function displayFindResults() {
  268. enableButton(document.getElementById("findButton"));
  269. displayResults();
  270. document.getElementById("resultsDisplay").style.visibility = "visible";
  271. }
  272. function displayResults() {
  273. selectedControlIdx = -1;
  274. var table = document.getElementById("searchResults");
  275. if (gFindResults) {
  276. displayTitles(false);
  277. var sTable = '<table border="0" cellpadding="0" cellspacing="0" width="100%">';
  278. sTable += '<tr><td><img src="../ppwb/Graphics/space.gif" height="7"/></td></tr>';
  279. sTable += '<tr class="findHeaderRow"><td width="150"><b>' + CEncodingUtil.HtmlEncode(strResultCat) + '</b></td><td><b>' + CEncodingUtil.HtmlEncode(strResultPath) + '</b></td></tr>';
  280. sTable += '<tr><table border="0" cellpadding="0" cellspacing="0" class="findTable" width="100%">';
  281. var startPos = currentPosition;
  282. var maxPos = Math.min(startPos + displayLimit, gFindResults.length);
  283. rowsDisplayed = 0;
  284. for ( ; currentPosition < maxPos; currentPosition++) {
  285. sTable += renderHTML(gFindResults[currentPosition],currentPosition);
  286. rowsDisplayed++;
  287. }
  288. sTable += "</table></tr>";
  289. sTable += "</table>";
  290. table.innerHTML = sTable;
  291. displayNavigationLinks();
  292. displayTitles(false);
  293. displayActions();
  294. selectedControlIdx = startPos;
  295. var control = document.getElementById("FindResult" + selectedControlIdx);
  296. control.className = "findRowSelected";
  297. } else {
  298. clearResults();
  299. }
  300. }
  301. function displayTitles(doDefault) {
  302. var titles = document.getElementById("navigationDisplayTop");
  303. var contents = "";
  304. var displayStart;
  305. if (gFindResults || doDefault)
  306. {
  307. contents += '<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr width="100%">' + navprev + '<td height="15" class="FindText" align="center" width="40%">' + CEncodingUtil.HtmlEncode(catTitle);
  308. if (!doDefault)
  309. {
  310. if (gFindResults.length > 0)
  311. {
  312. if (gFindResults.length > displayLimit) {
  313. displayStart = displayLimit * parseInt((currentPosition-1)/displayLimit) + 1;
  314. } else {
  315. displayStart = 1;
  316. }
  317. contents += ' (' + displayStart + '-' + Math.min(displayStart-1 + displayLimit, gFindResults.length) + ' ' + CEncodingUtil.HtmlEncode(strResultOf) + ' ' + gFindResults.length + ')';
  318. }
  319. }
  320. contents += '</td>' + navnext + '</tr></table>';
  321. }
  322. titles.innerHTML = contents;
  323. }
  324. function writeErrorMessage(msg) {
  325. displayCommonMessage(msg, MESSAGE_TYPE_INFO, [message_ok_button_text], [function() {removeMessage();}]);
  326. }