U_Utils.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. /*
  2. IBM Confidential
  3. OCO Source Materials
  4. IBM Cognos Products: uipe
  5. (C) Copyright IBM Corp. 2014
  6. The source code for this program is not published or otherwise divested of its trade secrets, irrespective of what has been deposited with the U.S. Copyright Office.
  7. */
  8. var U_Utils = {};
  9. U_Utils.F_CreateQueriesComboBox = function( v_nComboIn, v_nQuerySet, v_bShowEmpty )
  10. {
  11. var v_nComboBox = v_nComboIn ? v_nComboIn : G_ResManager.F_GetResource( 'EmptyCombo' );
  12. this.F_AddQueriesToListView(v_nComboBox.selectSingleNode("listView"), v_nQuerySet, v_bShowEmpty != false);
  13. return v_nComboBox;
  14. };
  15. U_Utils.F_CreateQueryItemsComboBox = function( v_nComboIn, v_nQuery, v_bShowEmpty )
  16. {
  17. var v_nComboBox = v_nComboIn ? v_nComboIn : G_ResManager.F_GetResource( 'EmptyCombo' );
  18. this.F_AddDataItemsToListView(v_nComboBox.selectSingleNode("listView"), v_nQuery, v_bShowEmpty != false);
  19. return v_nComboBox;
  20. };
  21. U_Utils.F_AddQueriesToListView = function( v_nListView, v_nQuerySetIn, v_bShowEmpty, v_bAddDefault )
  22. {
  23. var v_doc = v_nListView.ownerDocument;
  24. var v_nListItems = v_nListView.selectSingleNode( "listItems" );
  25. if ( v_bAddDefault )
  26. {
  27. this.F_AddDefaultListItem( v_nListView );
  28. }
  29. var v_nQuerySet = v_nQuerySetIn ? v_nQuerySetIn : G_ReportSpec.F_GetReportNode().selectSingleNode( "queries" );
  30. if ( v_nQuerySet )
  31. {
  32. var nl = v_nQuerySet.selectNodes( "query/@name" );
  33. var v_iLength = nl.length;
  34. if (v_iLength > 0)
  35. {
  36. for ( var i = 0; i < v_iLength; ++i )
  37. {
  38. var v_nListItem = v_nListItems.appendChild( v_doc.createElement( "listItem" ) );
  39. var v_sName = nl.item( i ).value;
  40. v_nListItem.setAttribute( "label", v_sName );
  41. v_nListItem.setAttribute( "value", v_sName );
  42. v_nListItem.setAttribute( "smallIcon", "query.gif" );
  43. }
  44. return;
  45. }
  46. }
  47. if ( v_bShowEmpty && !v_bAddDefault )
  48. {
  49. var v_nListItem = v_nListItems.appendChild( v_doc.createElement( "listItem" ) );
  50. v_nListItem.setAttribute( "value", "" );
  51. v_nListItem.setAttribute( "idsLabel", "IDS_EMPTY_LISTVIEW" );
  52. }
  53. };
  54. U_Utils.F_AddDataItemsToListView = function( v_nListView, v_nQuery, v_bShowEmpty, v_bAddDefault, v_fnGetValue, v_oExcludeItems )
  55. {
  56. var v_doc = v_nListView.ownerDocument;
  57. var v_nListItems = v_nListView.selectSingleNode( "listItems" );
  58. if ( v_bAddDefault )
  59. {
  60. this.F_AddDefaultListItem( v_nListView );
  61. }
  62. if ( v_nQuery )
  63. {
  64. var nl = v_nQuery.selectNodes( "selection/*" );
  65. var v_iLength = nl.length;
  66. if ( v_iLength > 0 )
  67. {
  68. for ( var i = 0; i < v_iLength; i++ )
  69. {
  70. var v_nDataItem = nl.item( i );
  71. var v_sName = v_nDataItem.getAttribute( "name" );
  72. if ( v_oExcludeItems && v_oExcludeItems[v_sName] )
  73. {
  74. // exlude the item, continue
  75. continue;
  76. }
  77. var v_nListItem = v_nListItems.appendChild( v_doc.createElement( "listItem" ) );
  78. if ( v_nDataItem.getAttribute( "iid" ) )
  79. {
  80. v_nListItem.setAttribute( "roid", v_nDataItem.getAttribute( "iid" ) );
  81. }
  82. v_nListItem.setAttribute( "label", v_sName );
  83. if ( v_fnGetValue )
  84. {
  85. v_nListItem.setAttribute( "value", v_fnGetValue( v_nQuery, v_nDataItem ) );
  86. }
  87. else
  88. {
  89. v_nListItem.setAttribute( "value", v_sName );
  90. }
  91. v_nListItem.setAttribute( "smallIcon", U_DataItem.F_GetImage(v_nDataItem) );
  92. }
  93. return;
  94. }
  95. }
  96. if ( v_bShowEmpty && !v_bAddDefault )
  97. {
  98. var v_nListItem = v_nListItems.appendChild( v_doc.createElement( "listItem" ) );
  99. v_nListItem.setAttribute( "value", "" );
  100. v_nListItem.setAttribute( "idsLabel", "IDS_EMPTY_LISTVIEW" );
  101. }
  102. };
  103. /*
  104. * Set a percent attribute on a node.
  105. * @param n {Node}
  106. * @param v_sTxtID {String} id of text input which contains the value to be validated
  107. * @param v_sAttribute {String} Attribute name of to set on the node
  108. * @param v_iMax {Integer} Optional maximum value. (Defaults to 100)
  109. */
  110. U_Utils.F_CommitPercent = function( n, v_sTxtID, v_sAttribute, v_iMax )
  111. {
  112. v_iMax = v_iMax || 100;
  113. var v_sValue = document.getElementById( v_sTxtID ).value;
  114. var i = parseInt( v_sValue, 10 );
  115. if ( isNaN( i ) )
  116. {
  117. n.removeAttribute( v_sAttribute );
  118. }
  119. else if ( i > v_iMax )
  120. {
  121. if ( G_HAL.M_oLibraries["hal"]["enableAccessibility"] )
  122. {
  123. n.removeAttribute( v_sAttribute );
  124. }
  125. else
  126. {
  127. U_XML.F_SetAttribute( n, v_sAttribute, v_iMax.toString( 10 ) );
  128. }
  129. }
  130. else
  131. {
  132. U_XML.F_SetAttribute( n, v_sAttribute, i.toString( 10 ) );
  133. }
  134. };
  135. U_Utils.F_ShowLoadingMessage = function( el )
  136. {
  137. el.innerHTML = '<img src="' + G_HAL.F_GetImageURL('hal/images/tv_loading.gif') + '" class="clsImg16x16"/><span style="color:gray">' + G_ResManager.F_GetString( "IDS_HAL_TV_LOADING" ).F_HTMLEncode() + '</span>';
  138. };
  139. U_Utils.F_SetColorButtonColor = function( btn, v_sColor )
  140. {
  141. var div = btn.getElementsByTagName( "DIV" ).item( 0 );
  142. div.className = ( v_sColor == "transparent" ) ? "clsColorButtonDIV_transparent" : "clsColorButtonDIV_normal";
  143. div.style.backgroundColor = v_sColor ? v_sColor : "";
  144. if ( G_HAL.M_oLibraries["hal"]["enableAccessibility"] && v_sColor )
  145. {
  146. U_Accessibility.F_AddAriaHiddenSpan( btn, "aria-describedby", U_DOM.F_GetColorAriaLabel( v_sColor ) );
  147. }
  148. };
  149. U_Utils.F_SetFillButtonBackgroundImage = function( btn, v_sUrl )
  150. {
  151. var div = btn.getElementsByTagName( "DIV" ).item( 0 );
  152. div.className = "clsColorButtonDIV_normal";
  153. div.style.backgroundImage = v_sUrl ? ( "url(" + v_sUrl + ")" ) : "";
  154. };
  155. U_Utils.F_GetFillButtonDimension = function( btn )
  156. {
  157. var div = btn.getElementsByTagName( "DIV" ).item( 0 );
  158. div.className = "clsColorButtonDIV_normal";
  159. return new C_Dimension( div.offsetHeight, div.offsetWidth );
  160. };
  161. U_Utils.F_AddEmptyMessageIfRequired = function( v_nListView )
  162. {
  163. if ( !v_nListView.selectSingleNode( "listItems/listItem" ) )
  164. {
  165. var v_nListItem = G_ResManager.F_GetResource( 'EmptyWithMessage' ).selectSingleNode( "listItems/listItem" );
  166. var d = v_nListView.ownerDocument;
  167. v_nListView.selectSingleNode( "listItems" ).appendChild( U_XML.F_ImportNode( d, v_nListItem ) );
  168. return true;
  169. }
  170. return false;
  171. };
  172. U_Utils.F_AddDefaultListItem = function( v_nListView )
  173. {
  174. var v_nListItems = v_nListView.selectSingleNode( "listItems" );
  175. var v_nListItem = v_nListItems.insertBefore( v_nListView.ownerDocument.createElement( "listItem" ), v_nListItems.selectSingleNode( "listItem" ) );
  176. v_nListItem.setAttribute( "idsLabel", "IDS_PROPVAL_DEFAULT" );
  177. v_nListItem.setAttribute( "value", "" );
  178. };
  179. U_Utils.F_GetSourceTypeListView = function( n, v_bAddNone )
  180. {
  181. var v_nListView = G_ResManager.F_GetResource( 'SourceType' );
  182. return this.F_PopulateSourceTypeListView( v_nListView, n, v_bAddNone );
  183. };
  184. U_Utils.F_PopulateSourceTypeListView = function( v_nListView, n, v_bAddNone )
  185. {
  186. if ( !v_bAddNone )
  187. {
  188. C_ListView.F_RemoveListItemWithValue( v_nListView, "" );
  189. }
  190. var v_nQuery = U_LayoutSpec.F_GetQueryContext( n );
  191. if ( !v_nQuery )
  192. {
  193. C_ListView.F_RemoveListItemWithValue( v_nListView, "dataItemValue" );
  194. C_ListView.F_RemoveListItemWithValue( v_nListView, "dataItemLabel" );
  195. C_ListView.F_RemoveListItemWithValue( v_nListView, "memberCaption" );
  196. C_ListView.F_RemoveListItemWithValue( v_nListView, "cellValue" );
  197. }
  198. else if ( U_XML.F_GetAncestorEx( n, ["crosstabFactCell", "crosstabIntersection", "factCell"] ) )
  199. {
  200. C_ListView.F_RemoveListItemWithValue( v_nListView, "memberCaption" );
  201. if ( U_Chart.F_IsChartNode(n) )
  202. {
  203. C_ListView.F_RemoveListItemWithValue( v_nListView, "cellValue" );
  204. }
  205. }
  206. else if ( U_XML.F_GetAncestorEx( n, ["crosstabNodeMember", "crosstabSpacer", "appCrosstabSummary", "chartNodeMember"] ) )
  207. {
  208. C_ListView.F_RemoveListItemWithValue( v_nListView, "cellValue" );
  209. }
  210. else if (n.nodeName == "marker" || n.nodeName == "baseline" || n.nodeName == "pointChartBaseline" || n.nodeName == "pointChartMarker" ||
  211. n.nodeName == "threeDComboBaseline" || n.nodeName == "threeDScatterBaseline")
  212. {
  213. C_ListView.F_RemoveListItemWithValue( v_nListView, "dataItemLabel" );
  214. C_ListView.F_RemoveListItemWithValue( v_nListView, "memberCaption" );
  215. C_ListView.F_RemoveListItemWithValue( v_nListView, "cellValue" );
  216. }
  217. else
  218. {
  219. C_ListView.F_RemoveListItemWithValue( v_nListView, "memberCaption" );
  220. C_ListView.F_RemoveListItemWithValue( v_nListView, "cellValue" );
  221. }
  222. var v_nParentStaticAppControl = U_ReportApp.F_GetStaticAppControl( n );
  223. if (!v_nParentStaticAppControl)
  224. {
  225. C_ListView.F_RemoveListItemWithValue( v_nListView, "appDataItemValue" );
  226. }
  227. return v_nListView;
  228. };
  229. U_Utils.F_ParseCSV = function( v_sCSV )
  230. {
  231. var v_aRows = [];
  232. var v_aCSVRows = v_sCSV.split( /(\r\n)|\n/g );
  233. for ( var v_iRow = 0; v_iRow < v_aCSVRows.length; v_iRow++ )
  234. {
  235. var v_aColumns = [];
  236. var v_aCSVColumns = v_aCSVRows[v_iRow].split( "," );
  237. for ( var v_iCol = 0; v_iCol < v_aCSVColumns.length; v_iCol++ )
  238. {
  239. v_aColumns.push( v_aCSVColumns[v_iCol].replace( /""/g, '"' ).replace( /(^")|("$)/g, "" ) );
  240. }
  241. v_aRows.push( v_aColumns );
  242. }
  243. return v_aRows;
  244. };
  245. U_Utils.F_PopulateDimensionStructureListView = function(v_nListItems, v_nMetadata, v_sPatternStructure, v_sPatternItem, v_iIndent)
  246. {
  247. var nl = v_nMetadata.selectNodes(v_sPatternStructure);
  248. for (var i = 0; i < nl.length; ++i)
  249. {
  250. var n = nl.item(i);
  251. var v_bContainer = false;
  252. if (!n.selectSingleNode("self::" + v_sPatternItem))
  253. {
  254. if (n.selectSingleNode(".//" + v_sPatternItem))
  255. {
  256. v_bContainer = true;
  257. }
  258. else
  259. {
  260. // if object is container and does not contain items we are looking for then skip it.
  261. continue;
  262. }
  263. }
  264. var v_nListItem = U_XML.F_AppendChild(v_nListItems, "listItem");
  265. var v_sLabel = n.getAttribute("name");
  266. v_nListItem.setAttribute("label", v_sLabel);
  267. v_nListItem.setAttribute("tooltip", v_sLabel);
  268. v_nListItem.setAttribute("value", n.getAttribute("_ref"));
  269. switch (n.nodeName)
  270. {
  271. case "dimension":
  272. v_nListItem.setAttribute("smallIcon", n.getAttribute("type") == "measure" ? "dimension_measure.gif" : "dimension.gif");
  273. break;
  274. case "folder":
  275. case "hierarchyFolder":
  276. v_nListItem.setAttribute("smallIcon", n.getAttribute("isNamespace") == "1" ? "namespace.gif" : "hal/images/tv_folder.gif");
  277. break;
  278. case "hierarchy":
  279. v_nListItem.setAttribute("smallIcon", "hierarchy.gif");
  280. break;
  281. }
  282. if (v_iIndent)
  283. {
  284. v_nListItem.setAttribute("indentLevel", v_iIndent);
  285. }
  286. if (v_bContainer)
  287. {
  288. v_nListItem.setAttribute( "selectable", "false" );
  289. this.F_PopulateDimensionStructureListView(v_nListItems, n, v_sPatternStructure, v_sPatternItem, v_iIndent ? v_iIndent + 1 : 1);
  290. }
  291. }
  292. };
  293. U_Utils.F_PopulateDimensionStructureListView = function(v_nListItems, v_nMetadata, v_sPattern, v_sSelectableNodeName, v_iIndent)
  294. {
  295. var nl = v_nMetadata.selectNodes(v_sPattern);
  296. for (var i = 0; i < nl.length; ++i)
  297. {
  298. var n = nl.item(i);
  299. var v_nListItem = U_XML.F_AppendChild(v_nListItems, "listItem");
  300. var v_sLabel = n.getAttribute("name");
  301. v_nListItem.setAttribute("label", v_sLabel);
  302. v_nListItem.setAttribute("tooltip", v_sLabel);
  303. v_nListItem.setAttribute("value", n.getAttribute("_ref"));
  304. switch (n.nodeName)
  305. {
  306. case "dimension":
  307. v_nListItem.setAttribute("smallIcon", n.getAttribute("type") == "measure" ? "dimension_measure.gif" : "dimension.gif");
  308. break;
  309. case "folder":
  310. case "hierarchyFolder":
  311. v_nListItem.setAttribute("smallIcon", n.getAttribute("isNamespace") == "1" ? "namespace.gif" : "hal/images/tv_folder.gif");
  312. break;
  313. case "hierarchy":
  314. v_nListItem.setAttribute("smallIcon", "hierarchy.gif");
  315. break;
  316. }
  317. if (v_iIndent)
  318. {
  319. v_nListItem.setAttribute("indentLevel", v_iIndent);
  320. }
  321. if (n.nodeName != v_sSelectableNodeName)
  322. {
  323. v_nListItem.setAttribute( "selectable", "false" );
  324. this.F_PopulateDimensionStructureListView(v_nListItems, n, v_sPattern, v_sSelectableNodeName, v_iIndent ? v_iIndent + 1 : 1);
  325. }
  326. }
  327. };
  328. U_Utils.F_IsJavascriptURL = function( s )
  329. {
  330. return Boolean( s.match( /^\s*javascript\s*:/i ) );
  331. };
  332. U_Utils.F_ReplaceStringResources = function(v_nChart)
  333. {
  334. var v_nlStringRes = v_nChart.selectNodes(".//stringRes");
  335. var v_iLength = v_nlStringRes.length;
  336. for (var i = 0; i < v_iLength; i++)
  337. {
  338. var n = v_nlStringRes.item(i);
  339. var v_sID = n.getAttribute("id");
  340. var v_nParent = n.parentNode;
  341. v_nParent.removeChild(n);
  342. var v_nlParams = n.selectNodes("param");
  343. switch (v_nlParams.length)
  344. {
  345. case 0:
  346. v_nParent.text = G_ResManager.F_GetString(v_sID);
  347. break;
  348. case 1:
  349. v_nParent.text = G_ResManager.F_GetString(v_sID, v_nlParams.item(0).text);
  350. break;
  351. case 2:
  352. v_nParent.text = G_ResManager.F_GetString(v_sID, v_nlParams.item(0).text, v_nlParams.item(1).text);
  353. break;
  354. }
  355. }
  356. };
  357. U_Utils.F_GetPaletteGradientAriaLabel = function( v_nListItem )
  358. {
  359. var v_sFromColorLabel = U_DOM.F_GetColorAriaLabel( v_nListItem.getAttribute("FROMCOLOR") );
  360. var v_sToColorLabel = U_DOM.F_GetColorAriaLabel( v_nListItem.getAttribute("TOCOLOR") );
  361. var v_sDirection = v_nListItem.getAttribute("direction");
  362. var v_sDirectionLabel = G_ResManager.F_GetOptionalString( "IDS_PROPVAL_" + v_sDirection ) || "";
  363. return G_ResManager.F_GetString("IDS_AC_PALETTE_GRADIENT", v_sFromColorLabel, v_sToColorLabel, v_sDirectionLabel );
  364. };
  365. U_Utils.F_GetPalettePatternAriaLabel = function( v_nListItem )
  366. {
  367. var v_sForeColorLabel = U_DOM.F_GetColorAriaLabel( v_nListItem.getAttribute("FORECOLOR") );
  368. var v_sBackColorLabel = U_DOM.F_GetColorAriaLabel( v_nListItem.getAttribute("BACKCOLOR") );
  369. var v_sPatternType = v_nListItem.getAttribute("patternType");
  370. var v_sPatternTypeLabel = G_ResManager.F_GetOptionalString( "IDS_AC_PATTERN_" + v_sPatternType ) || "";
  371. return G_ResManager.F_GetString("IDS_AC_PALETTE_PATTERN", v_sForeColorLabel, v_sBackColorLabel, v_sPatternTypeLabel );
  372. };
  373. U_Utils.F_GetPalettePatternTypeString = function( v_nListItem )
  374. {
  375. var v_idsPattern;
  376. var v_sPatternType = v_nListItem.getAttribute( "patternType" );
  377. if ( v_sPatternType )
  378. {
  379. v_idsPattern = "IDS_AC_PATTERN_" + v_sPatternType;
  380. }
  381. else
  382. {
  383. v_idsPattern = v_nListItem.getAttribute( "idsAriaLabel" ) || v_nListItem.getAttribute( "idsTooltip" );
  384. }
  385. return v_idsPattern ? G_ResManager.F_GetOptionalString( v_idsPattern ) : "";
  386. };
  387. U_Utils.F_GetColorByValueAriaLabel = function( v_sColor, v_sBoundary )
  388. {
  389. return G_ResManager.F_GetString("IDS_AC_COLOR_BY_VALUE", U_DOM.F_GetColorAriaLabel( v_sColor ), v_sBoundary );
  390. };
  391. U_Utils.F_GetGradientColorAriaLabel = function( v_sColor, v_sPosition )
  392. {
  393. return G_ResManager.F_GetString("IDS_AC_GRADIENT_COLOR", U_DOM.F_GetColorAriaLabel( v_sColor ), v_sPosition );
  394. };
  395. U_Utils.F_GetElementsByROID = function( v_aElements, el, v_oROIDMap, v_bGetAll, v_bDeepSearch )
  396. {
  397. switch ( el.nodeName )
  398. {
  399. case "HTML":
  400. case "#document":
  401. case "#text":
  402. case "#comment":
  403. return;
  404. }
  405. if ( el.getAttribute( "roid" ) )
  406. {
  407. var v_iSelCount = v_oROIDMap[el.getAttribute( "roid" )];
  408. if (v_iSelCount)
  409. {
  410. if ( !v_bGetAll )
  411. {
  412. v_oROIDMap[el.getAttribute( "roid" )] = v_iSelCount - 1;
  413. }
  414. v_aElements.push( el );
  415. if ( !v_bDeepSearch )
  416. {
  417. return;
  418. }
  419. }
  420. }
  421. for ( var v_elChild = el.firstChild; v_elChild; v_elChild = v_elChild.nextSibling )
  422. {
  423. this.F_GetElementsByROID( v_aElements, v_elChild, v_oROIDMap, v_bGetAll, v_bDeepSearch );
  424. }
  425. };
  426. U_Utils.F_GetAllElementsForNode = function( n, container )
  427. {
  428. var a = [];
  429. var v_oROIDMap = {};
  430. v_oROIDMap[n.getAttribute( "iid" )] = 1;
  431. var v_bGetAll = true;
  432. U_Utils.F_GetElementsByROID( a, container, v_oROIDMap, v_bGetAll );
  433. return a;
  434. };
  435. U_Utils.F_GetCopyLabel = function(v_nFrom, v_nTo) {
  436. if (v_nFrom.getAttribute("smallIcon") != "") {
  437. U_XML.F_CopyAttribute(v_nTo, v_nFrom, "smallIcon");
  438. }
  439. if (v_nFrom.getAttribute("idsLabel") != ""
  440. && U_XML.F_CopyAttribute(v_nTo, v_nFrom, "idsLabel")) {
  441. return;
  442. }
  443. if (v_nFrom.getAttribute("label") != ""
  444. && U_XML.F_CopyAttribute(v_nTo, v_nFrom, "label")) {
  445. return;
  446. }
  447. if( v_nFrom.getAttribute("id") )
  448. {
  449. v_nTo.setAttribute("label", v_nFrom.getAttribute("id"));
  450. }
  451. else
  452. {
  453. v_nTo.setAttribute("label", v_nFrom.getAttribute("name"));
  454. }
  455. };