commands.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  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. var rootCommands = new Array();
  9. rootCommands["DRILL"] = 'D';
  10. rootCommands["EDGE"] = 'E';
  11. rootCommands["PAGE"] = 'P';
  12. var optionCommands = new Array();
  13. optionCommands["REPLACE"] = 'R';
  14. optionCommands["CATEGORY"] = 'C';
  15. optionCommands["GROUP"] = 'G';
  16. optionCommands["NEST"] = 'N';
  17. function processDoubleClick(event)
  18. {
  19. if (!topparent.allFramesInitialized())
  20. return;
  21. var eventM = new eventManager(event);
  22. eventM.cancelBubble();
  23. var obj = bubbleToDoubleClickSensitiveObject(eventM.getSrc());
  24. if (obj == null)
  25. return;
  26. var cmd = "";
  27. var id = obj.id;
  28. var row = parseRowId(obj.id);
  29. var col = parseColId(obj.id);
  30. var rowLabel = document.getElementById(row + "-" + (parseInt(numRowLevels) - 1));
  31. var colLabel = document.getElementById((parseInt(numColLevels) - 1) + "-" + col);
  32. var bBothSummaries = false;
  33. var bDoRowLabel = false;
  34. var bDoColLabel = false;
  35. if (rowLabel && colLabel)
  36. {
  37. bBothSummaries = rowLabel.summary == "true" && colLabel.summary == "true" && (rowLabel.getAttribute("level") > 0 || colLabel.getAttribute("level") > 0);
  38. }
  39. if (rowLabel)
  40. bDoRowLabel = rowLabel.summary != "true" || bBothSummaries;
  41. if (colLabel)
  42. bDoColLabel = colLabel.summary != "true" || bBothSummaries;
  43. if (bDoRowLabel)
  44. {
  45. cmd += getDrillLinkCommand(rowLabel);
  46. }
  47. if (bDoColLabel)
  48. {
  49. cmd += getDrillLinkCommand(colLabel);
  50. }
  51. if (cmd != "")
  52. {
  53. var cmd1 = '';
  54. var cmd2 = '';
  55. var beginMarker = "DG:";
  56. var endMarker = ");";
  57. var begin = cmd.indexOf(beginMarker);
  58. if (begin >= 0)
  59. cmd = cmd.substr(begin);
  60. var end = cmd.indexOf(endMarker) - 1;
  61. if (end >= 0)
  62. {
  63. cmd1 = cmd.substr(0, end);
  64. cmd = cmd.substr(end);
  65. }
  66. begin = cmd.indexOf(beginMarker);
  67. if (begin >= 0)
  68. {
  69. cmd = cmd.substr(begin);
  70. cmd2 = cmd.substr(0, cmd.indexOf(endMarker) - 1) ;
  71. }
  72. cmd = decodeURI(cmd1);
  73. if (cmd2 != '')
  74. cmd += '\t\t' + decodeURI(cmd2);
  75. cmd = cmd.toString().replace(/\\t/g, '\t');
  76. if (cmd != '')
  77. doit(cmd);
  78. }
  79. }
  80. function bubbleToDoubleClickSensitiveObject (obj)
  81. {
  82. if (!obj)
  83. return null;
  84. var target = obj;
  85. if (!obj.getAttribute || !obj.getAttribute("type") || obj.getAttribute("type") != "d")
  86. target = bubbleToDoubleClickSensitiveObject( obj.parentElement );
  87. return target;
  88. }
  89. function getDrillLinkCommand (obj)
  90. {
  91. var drillLink;
  92. if (obj.tagName == "A" && obj.onclick != null && obj.onclick.toString().indexOf("DG:") >= 0)
  93. return obj.onclick;
  94. if ( obj.hasChildNodes() )
  95. {
  96. var children = obj.childNodes;
  97. for (var i=0; i < children.length; i++)
  98. {
  99. var child = children[i];
  100. if (child.tagName == "A" && child.onclick != null && child.onclick.toString().indexOf("DG:") >= 0)
  101. return child.onclick;
  102. if (child.hasChildNodes())
  103. drillLink = getDrillLinkCommand(child);
  104. if (drillLink)
  105. break;
  106. }
  107. }
  108. return drillLink;
  109. }
  110. function doColumnReplaceCommand (code, level) {
  111. var dndManager = topparent.getGlobal("dndManager");
  112. var catInfo = new DragInfo (dndManager.getData());
  113. var cmd = doPreUnhideCommand();
  114. cmd += rootCommands["EDGE"] + optionCommands["REPLACE"] + ':';
  115. cmd += 'C';
  116. cmd += level; //target level
  117. cmd += '\tD';
  118. cmd += catInfo['dim'];
  119. cmd += '\t';
  120. cmd += catInfo['ppds_id'];
  121. cmd += ',';
  122. cmd += catInfo['dim'];
  123. cmd += ';';
  124. cmd += catInfo['code'];
  125. doCommand(cmd);
  126. }
  127. function doColumnNestCommand (code, level, dimIdx) {
  128. var dndManager = topparent.getGlobal("dndManager");
  129. var catInfo = new DragInfo (dndManager.getData());
  130. var cmd = doPreUnhideCommand();
  131. cmd += rootCommands["EDGE"] + optionCommands["NEST"] + ':';
  132. cmd += 'C';
  133. cmd += level; //target level
  134. cmd += '\tD';
  135. cmd += catInfo['dim'];
  136. cmd += '\t';
  137. cmd += catInfo['level'];
  138. if ( catInfo['dim'] != dimIdx ) // nesting a different dimension...
  139. {
  140. cmd += '\t\t';
  141. cmd += rootCommands["DRILL"] + optionCommands["GROUP"] + ':';
  142. cmd += 'C';
  143. cmd += parseInt(level) + 1;
  144. cmd += '\t';
  145. cmd += catInfo['ppds_id'];
  146. cmd += ',';
  147. cmd += catInfo['dim'];
  148. cmd += ';';
  149. cmd += catInfo['code'];
  150. }
  151. doCommand(cmd);
  152. }
  153. function doRowReplaceCommand (code, level) {
  154. var dndManager = topparent.getGlobal("dndManager");
  155. var catInfo = new DragInfo (dndManager.getData());
  156. var cmd = doPreUnhideCommand();
  157. cmd += rootCommands["EDGE"] + optionCommands["REPLACE"] + ':';
  158. cmd += 'R';
  159. cmd += level; //target level
  160. cmd += '\tD';
  161. cmd += catInfo['dim'];
  162. cmd += '\t';
  163. cmd += catInfo['ppds_id'];
  164. cmd += ',';
  165. cmd += catInfo['dim'];
  166. cmd += ';';
  167. cmd += catInfo['code'];
  168. doCommand(cmd);
  169. }
  170. function doRowNestCommand (code, level, dimIdx) {
  171. var dndManager = topparent.getGlobal("dndManager");
  172. var catInfo = new DragInfo (dndManager.getData());
  173. var cmd = doPreUnhideCommand();
  174. cmd += rootCommands["EDGE"] + optionCommands["NEST"] + ':';
  175. cmd += 'R';
  176. cmd += level;
  177. cmd += '\tD';
  178. cmd += catInfo['dim'];
  179. cmd += '\t';
  180. cmd += catInfo['level'];
  181. if ( catInfo['dim'] != dimIdx ) // nesting a different dimension...
  182. {
  183. cmd += '\t\t';
  184. cmd += rootCommands["DRILL"] + optionCommands["GROUP"] + ':';
  185. cmd += 'R';
  186. cmd += parseInt(level) + 1;
  187. cmd += '\t';
  188. cmd += catInfo['ppds_id'];
  189. cmd += ',';
  190. cmd += catInfo['dim'];
  191. cmd += ';';
  192. cmd += catInfo['code'];
  193. }
  194. doCommand(cmd);
  195. }
  196. function doReplaceMeasureCommand (measureNo) {
  197. var dndManager = topparent.getGlobal("dndManager");
  198. var catInfo = new DragInfo (dndManager.getData());
  199. var cmd = rootCommands["DRILL"] + optionCommands["CATEGORY"] + ':';
  200. cmd += catInfo['ppds_id'];
  201. cmd += ',';
  202. cmd += catInfo['dim'];
  203. cmd += ';';
  204. cmd += catInfo['code'];
  205. if (measureNo > 1) {
  206. cmd += "\t" + (parseInt(catInfo['dim']) + measureNo - 1);
  207. }
  208. doCommand(cmd);
  209. }
  210. function doPreUnhideCommand () {
  211. var dndManager = topparent.getGlobal("dndManager");
  212. var catInfo = new DragInfo (dndManager.getData());
  213. var cmd = "";
  214. if (topparent.getGlobal("gDimensionInfo")[catInfo['dim']].isMeasureDimension) { //unhide it so we are sure it will be visible
  215. cmd = "MS:0\t" + constructOperandId(catInfo['ppds_id'],catInfo['dim'],catInfo['code']) + "\t\t";
  216. }
  217. return cmd;
  218. }
  219. function replaceApos(txt) {
  220. var res="";
  221. for (var i=0; i<txt.length; i++) {
  222. if (txt.charAt(i) == '\'')
  223. res += "\\'";
  224. else
  225. res += txt.charAt(i);
  226. }
  227. return res;
  228. }
  229. function DragInfo (info) {
  230. if (!info)
  231. return;
  232. var idx = info.indexOf(":");
  233. if (idx != -1)
  234. info = info.substring(idx+1);
  235. var idx = info.indexOf("<@>");
  236. if (idx != -1)
  237. info = info.substring(0,idx);
  238. var arr = info.split('@');
  239. for (var i = 0; i < arr.length; i+=2)
  240. {
  241. var cmd = "this.";
  242. cmd += arr[i];
  243. cmd += " = '";
  244. cmd += replaceApos(arr[i+1]);
  245. cmd += "'";
  246. eval (cmd);
  247. }
  248. }
  249. function doPageDown (event, row, col) {
  250. var cmd = buildPageCommand(row, col);
  251. doCommand(cmd);
  252. var mgr = new eventManager(event);
  253. mgr.cancelBubble();
  254. }
  255. function doPageRight (event, row, col) {
  256. var cmd = buildPageCommand(row, col);
  257. doCommand(cmd);
  258. var mgr = new eventManager(event);
  259. mgr.cancelBubble();
  260. }
  261. function doPageUp (event, row, col) {
  262. var cmd = buildPageCommand(row, col);
  263. doCommand(cmd);
  264. var mgr = new eventManager(event);
  265. mgr.cancelBubble();
  266. }
  267. function doPageLeft (event, row, col) {
  268. var cmd = buildPageCommand(row, col);
  269. doCommand(cmd);
  270. var mgr = new eventManager(event);
  271. mgr.cancelBubble();
  272. }
  273. function buildPageCommand(row, col) {
  274. var cmd = rootCommands["PAGE"] + optionCommands["GROUP"] + ':';
  275. if (parseInt(row))
  276. cmd += row;
  277. else
  278. cmd += '0';
  279. cmd += '\t';
  280. if (parseInt(col))
  281. cmd += col;
  282. else
  283. cmd += '0';
  284. return cmd;
  285. }
  286. function doCommand (cmd) {
  287. doit(cmd);
  288. }
  289. function filterDim(args) {
  290. var code = args[3];
  291. var dimIdx = args[6];
  292. var ppds_id = args[7];
  293. var codeSep = topparent.getGlobal("codeSeparator");
  294. var idx = code.lastIndexOf(codeSep);
  295. if (idx != -1)
  296. code = code.substring(idx+1,code.length);
  297. var idx = ppds_id.lastIndexOf(codeSep);
  298. if (idx != -1)
  299. ppds_id = ppds_id.substr(idx+1,ppds_id.length);
  300. var cmd = "DC:"+ppds_id+","+dimIdx+";"+code;
  301. doCommand(cmd);
  302. }