PowerPlayIWidget.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. // Licensed Materials - Property of IBM
  2. //
  3. // IBM Cognos Products: pps
  4. //
  5. // (C) Copyright IBM Corp. 2009, 2017
  6. //
  7. // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. dojo.provide("bux.powerplay");
  9. dojo.declare("bux.powerplay", null, {
  10. // ********************************************
  11. // ************ iWidget Support *************
  12. // ********************************************
  13. fireEvent: function( eventName, arg, payload) {
  14. this.iContext.iEvents.fireEvent( eventName, arg, payload );
  15. },
  16. getDisplayName: function() {
  17. return this.getAttributeValue("widgetTitle");
  18. },
  19. getAttributeValue: function(name) {
  20. return this.iContext.getiWidgetAttributes().getItemValue(name);
  21. },
  22. setAttributeValue: function(name, value) {
  23. this.iContext.getiWidgetAttributes().setItemValue(name, value);
  24. },
  25. getPowerPlayDiv: function() {
  26. return dojo.byId("_" + this.iContext.widgetId + "_pps");
  27. },
  28. getPowerPlayIFrame: function() {
  29. return dojo.byId("_" + this.iContext.widgetId + "_pps_iframe");
  30. },
  31. onLoad: function() {
  32. var iframe = this.getPowerPlayIFrame();
  33. var doc = iframe.contentWindow.document;
  34. var form = doc.createElement("FORM");
  35. form.method = "POST";
  36. form.target = iframe.name;
  37. form.action = this.getAttributeValue("gateway");
  38. this.appendToForm(doc, form, "b_action", "xts.run");
  39. this.appendToForm(doc, form, "m", "portal/launch.xts");
  40. this.appendToForm(doc, form, "ui.gateway", this.getAttributeValue("gateway"));
  41. this.appendToForm(doc, form, "ui.tool", "PowerplayStudio");
  42. this.appendToForm(doc, form, "ui.object", this.getReportSearchPath());
  43. this.appendToForm(doc, form, "ui.crnp", "false");
  44. this.appendToForm(doc, form, "ui.crnfrm", "HTML");
  45. this.appendToForm(doc, form, "ui.action", "edit");
  46. this.appendToForm(doc, form, "ui.crngnd", "false");
  47. this.appendToForm(doc, form, "launch.openJSStudioInFrame", "true");
  48. this.appendToForm(doc, form, "ddo", "true");
  49. if (this.isSavedReport()) {
  50. this.appendToForm(doc, form, "NOAUTORESIZE", "true"); // Don't autoresize after opening a saved dashboard
  51. }
  52. if (!doc.body) // IE6 - <body> is null by default.
  53. doc.appendChild(doc.createElement("body"));
  54. //Submit the form
  55. doc.body.appendChild(form);
  56. form.submit();
  57. },
  58. appendToForm: function( doc, form, fname, fvalue ) {
  59. var input = doc.createElement("INPUT");
  60. input.setAttribute("type", "hidden");
  61. input.setAttribute("name", fname);
  62. input.setAttribute("value", fvalue);
  63. form.appendChild(input);
  64. },
  65. isSavedReport: function() {
  66. var saved = this.getAttributeValue("savedReport");
  67. var orig = this.getAttributeValue("originalReport");
  68. return (saved != null && typeof saved != "undefined" && saved.length > 0 && orig != saved);
  69. },
  70. getReportSearchPath: function() {
  71. if (this.isSavedReport()) {
  72. return this.getAttributeValue("savedReport");
  73. } else {
  74. return this.getAttributeValue("originalReport");
  75. }
  76. },
  77. // ********************************************
  78. // ************ Toolbar Support *************
  79. // ********************************************
  80. onToolbarAction: function(evt) {
  81. switch (evt.payload.name) {
  82. case "crosstab":
  83. this.doToolbarCommand("doit('OY:0');");
  84. break;
  85. case "icrosstab":
  86. this.doToolbarCommand("doit('OY:9');");
  87. break;
  88. case "pie":
  89. if (evt.payload.payload == 'enabled')
  90. this.doToolbarCommand("doit('OY:1');");
  91. break;
  92. case "simple_bar":
  93. if (evt.payload.payload == 'enabled')
  94. this.doToolbarCommand("doit('OY:2');");
  95. break;
  96. case "clustered_bar":
  97. if (evt.payload.payload == 'enabled')
  98. this.doToolbarCommand("doit('OY:3');");
  99. break;
  100. case "stacked_bar":
  101. if (evt.payload.payload == 'enabled')
  102. this.doToolbarCommand("doit('OY:5');");
  103. break;
  104. case "3dbar":
  105. if (evt.payload.payload == 'enabled')
  106. this.doToolbarCommand("doit('OY:6');");
  107. break;
  108. case "multi_line":
  109. if (evt.payload.payload == 'enabled')
  110. this.doToolbarCommand("doit('OY:4');");
  111. break;
  112. case "simple_line":
  113. if (evt.payload.payload == 'enabled')
  114. this.doToolbarCommand("doit('OY:10');");
  115. break;
  116. case "scatter":
  117. if (evt.payload.payload == 'enabled')
  118. this.doToolbarCommand("doit('OY:11');");
  119. break;
  120. case "correlation":
  121. if (evt.payload.payload == 'enabled')
  122. this.doToolbarCommand("doit('OY:12');");
  123. break;
  124. case "chart_options":
  125. if (evt.payload.payload == 'enabled')
  126. this.doToolbarCommand("doit('MY');");
  127. break;
  128. case "display_options":
  129. this.doToolbarCommand("doit('MT');");
  130. break;
  131. case "edit_title":
  132. this.doToolbarCommand("doit('MI');");
  133. break;
  134. case "split":
  135. if (evt.payload.payload == 'enabled')
  136. this.doToolbarCommand("doit('OSD');");
  137. break;
  138. case "get_data_later":
  139. this.doToolbarCommand("doit('OGD');");
  140. break;
  141. case "get_data":
  142. this.doToolbarCommand("doit('OGD');");
  143. break;
  144. case "reset":
  145. this.doToolbarCommand("doReset();");
  146. break;
  147. case "zs":
  148. this.doToolbarCommand("doit('UX:1');");
  149. break;
  150. case "zs_rows":
  151. this.doToolbarCommand("doit('UX:2');");
  152. break;
  153. case "zs_cols":
  154. this.doToolbarCommand("doit('UX:3');");
  155. break;
  156. case "zs_options":
  157. this.doToolbarCommand("doit('MD');");
  158. break;
  159. case "pdf":
  160. this.doToolbarCommand("ra(12);");
  161. break;
  162. case "csv":
  163. this.doToolbarCommand("ra(1);");
  164. break;
  165. case "xls":
  166. this.doToolbarCommand("ra(11);");
  167. break;
  168. case "xlsx":
  169. this.doToolbarCommand("ra(13);");
  170. break;
  171. case "swap":
  172. this.doToolbarCommand("doit('EX');");
  173. break;
  174. case "hide_show":
  175. this.doToolbarCommand("doit('MQ');");
  176. break;
  177. case "calculation":
  178. this.doToolbarCommand("doit('MC');");
  179. break;
  180. case "rank":
  181. this.doToolbarCommand("doit('MO');");
  182. break;
  183. case "eighty_twenty":
  184. if (evt.payload.payload == 'enabled')
  185. this.doToolbarCommand("doit('OETS:1');");
  186. break;
  187. case "auto_exception":
  188. this.doToolbarCommand("doit('OEX');");
  189. break;
  190. case "custom_exception":
  191. this.doToolbarCommand("doit('MX');");
  192. break;
  193. case "custom_subset":
  194. if (evt.payload.payload == 'enabled')
  195. this.doToolbarCommand("doit('MZI');");
  196. break;
  197. case "drill":
  198. if (evt.payload.payload == 'enabled')
  199. this.doToolbarCommand("ra(4);");
  200. break;
  201. case "save":
  202. this.doToolbarCommand("doit('RU:1');");
  203. break;
  204. case "save_as":
  205. this.doToolbarCommand("doParent('RU:0');");
  206. break;
  207. case "custom1":
  208. this.doToolbarCommand("custom1();");
  209. break;
  210. case "custom2":
  211. this.doToolbarCommand("custom2();");
  212. break;
  213. case "custom3":
  214. this.doToolbarCommand("custom3();");
  215. break;
  216. case "custom4":
  217. this.doToolbarCommand("custom4();");
  218. break;
  219. case "custom5":
  220. this.doToolbarCommand("custom5();");
  221. break;
  222. case "custom6":
  223. this.doToolbarCommand("custom6();");
  224. break;
  225. case "custom7":
  226. this.doToolbarCommand("custom7();");
  227. break;
  228. case "custom8":
  229. this.doToolbarCommand("custom8();");
  230. break;
  231. case "Refresh":
  232. this.doToolbarCommand("doit('');");
  233. break;
  234. case "DimTree":
  235. this.toggleDimTree();
  236. break;
  237. default:
  238. break;
  239. }
  240. },
  241. doToolbarCommand : function ( command ) {
  242. var action = "this.getPowerPlayIFrame().contentWindow.getToolbarFrame().";
  243. action += command;
  244. eval(action);
  245. },
  246. toggleDimTree : function () {
  247. this.getPowerPlayIFrame().contentWindow.getXtabFrame().toggleTree();
  248. },
  249. updateToolbar: function(toolbarPayload) {
  250. this.getPowerPlayIFrame().contentWindow.setGlobal("BUXToolbar", JSON.stringify(toolbarPayload));
  251. this.fireEvent('com.ibm.bux.widget.toolbar.init', null, toolbarPayload);
  252. },
  253. getToolbarPayload: function () {
  254. var ppiframe = this.getPowerPlayIFrame().contentWindow;
  255. // Enhanced UI
  256. if ( ppiframe && ppiframe.getGlobal ) {
  257. var toolbarPayload = eval(ppiframe.getGlobal('BUXToolbar'));
  258. // Detect whether or not the 'dimension tree' is visible and set the 'checked' icon if it is
  259. if (toolbarPayload != null) {
  260. for ( var item in toolbarPayload ) {
  261. var button = toolbarPayload[item];
  262. if (button._root) {
  263. var rootItems = button._root;
  264. for ( var rootItem in rootItems ) {
  265. var rootButton = rootItems[rootItem];
  266. if (rootButton.name == 'DimTree') {
  267. if (ppiframe.getGlobal('treeVisible'))
  268. rootButton.iconClass = 'bux_check';
  269. else
  270. rootButton.iconClass = '';
  271. }
  272. }
  273. }
  274. }
  275. }
  276. return toolbarPayload;
  277. }
  278. // Generic UI
  279. if (ppiframe && ppiframe.BUXToolbar) {
  280. return eval(JSON.stringify(ppiframe.BUXToolbar));
  281. }
  282. },
  283. initOnDemandToolbar : function () {
  284. this.fireEvent('com.ibm.bux.widget.toolbar.init', null, this.getToolbarPayload());
  285. },
  286. enableDrill: function () {
  287. var toolbarPayload = this.getToolbarPayload();
  288. if (toolbarPayload != null) {
  289. for ( var item in toolbarPayload ) {
  290. var button = toolbarPayload[item];
  291. if (button.name == 'drill' && button.iconClass != 'drill_enabled') {
  292. button.iconClass = 'drill_enabled';
  293. button.action.payload = 'enabled';
  294. this.updateToolbar(toolbarPayload);
  295. break;
  296. }
  297. }
  298. }
  299. },
  300. disableDrill: function () {
  301. var toolbarPayload = this.getToolbarPayload();
  302. if (toolbarPayload != null) {
  303. for ( var item in toolbarPayload ) {
  304. var button = toolbarPayload[item];
  305. if (button.name == 'drill' && button.iconClass != 'drill_disabled') {
  306. button.iconClass = 'drill_disabled';
  307. button.action.payload = 'disabled';
  308. this.updateToolbar(toolbarPayload);
  309. break;
  310. }
  311. }
  312. }
  313. },
  314. // ********************************************
  315. // ************ Save Event Support **********
  316. // ********************************************
  317. onWidgetSave: function(evt) {
  318. var dshbrdID = '$$dbid$$' + evt.payload.cm$storeID;
  319. var buxloaded = false;
  320. var ppiframe = this.getPowerPlayIFrame().contentWindow;
  321. // Enhanced UI
  322. if ( ppiframe && ppiframe.getGlobal ) {
  323. var toolbarPayload = eval(ppiframe.getGlobal('BUXToolbar'));
  324. if (toolbarPayload != null) {
  325. buxloaded = true;
  326. }
  327. } else if (ppiframe && ppiframe.BUXToolbar) {
  328. // Generic UI
  329. buxloaded = true;
  330. }
  331. if (buxloaded) {
  332. if (this.isSaveAsEvent(dshbrdID) && !evt.payload.isCopy) { // Save the report to a new dashboard.
  333. this.setAttributeValue("dashboardID", dshbrdID );
  334. ppiframe.getXtabFrame().saveAsToDashboard(evt);
  335. }
  336. else { // update the saved report where it is.
  337. ppiframe.getXtabFrame().saveToDashboard(evt);
  338. }
  339. }
  340. this.fireEvent( "com.ibm.bux.widget.save.done", null, {'status':buxloaded});
  341. },
  342. /**
  343. * Determines if the widget has or has not been saved to the current dashboard.
  344. *
  345. * @param dshbrdID - StoreID of the dashboard currently being saved
  346. * @return true if this widget has NOT been saved to the dashboard "dshbrdID". Otherwise: false
  347. */
  348. isSaveAsEvent: function ( dshbrdID ) {
  349. var orig = this.getAttributeValue("originalReport");
  350. var saved = this.getAttributeValue("savedReport");
  351. var dashboard = this.getAttributeValue("dashboardID");
  352. if ( dashboard != dshbrdID || saved == null || typeof saved == "undefined" || saved.length == 0 || orig == saved) {
  353. return true;
  354. } else {
  355. return false;
  356. }
  357. },
  358. // ********************************************
  359. // ************ Refresh Event Support *******
  360. // ********************************************
  361. onWidgetRefresh: function ( evt ){
  362. this.fireEvent( "com.ibm.bux.widget.refresh.done", null, {} );
  363. this.doToolbarCommand("doit('');");
  364. },
  365. // ********************************************
  366. // ************ Resize Event Support ********
  367. // ********************************************
  368. onWidgetResize: function(evt) {
  369. var iframe = this.getPowerPlayIFrame();
  370. var width = evt.payload.resize.w;
  371. var height = evt.payload.resize.h;
  372. iframe.style.width = eval(width - 5) + "px";
  373. iframe.style.height = eval(height - 5) + "px";
  374. }
  375. });