condStylesDlg.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. /****************************************************************
  2. ** Licensed Materials - Property of IBM
  3. **
  4. ** BI and PM: qs
  5. **
  6. ** (C) Copyright IBM Corp. 2001, 2015
  7. **
  8. ** US Government Users Restricted Rights - Use, duplication or
  9. ** disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  10. *****************************************************************/
  11. // Copyright (C) 2008 Cognos ULC, an IBM Company. All Rights Reserved.
  12. // Cognos and the Cognos logo are trademarks of Cognos ULC (formerly Cognos Incorporated) in the United States and/or other countries. IBM and the IBM logo are trademarks of International Business Machines Corporation in the United States, or other countries, or both. Other company, product, or service names may be trademarks or service marks of others.
  13. var gbDIALOG_IS_DIRTY = false;
  14. var greCLS_FILTERSELECTED = /\bclsFilterSelected\b/g;
  15. var gsRowPrefix = 'csrow-';
  16. var gSelRows = new Array();
  17. var _lastSelection = null;
  18. var gsDataType = '';
  19. var gsSearchAllowed = '';
  20. function refreshCFR() {
  21. if (getCSR() != null) {
  22. getCSR().render(document.getElementById('rangeList'), this);
  23. }
  24. for (var i = 0; i < gSelRows.length; i++) {
  25. CS_selectObj(gSelRows[i], true);
  26. }
  27. };
  28. function insertTS() {
  29. if(textBoxnewRange && textBoxnewRange.isValid()) {
  30. getCSR().addThreshold(textBoxnewRange.sGetValue());
  31. setWindowDirty();
  32. refreshCFR();
  33. }
  34. };
  35. function changeCSSClass(id) {
  36. var s = document.getElementById(gsSELECTCLASS + id);
  37. var p = document.getElementById(gsPREVIEW + id);
  38. var r = getCSR().getRangeById(id);
  39. if (r != null) {
  40. for (var i = 0; i < s.options.length; i++) {
  41. if (s.options[i].selected) {
  42. r.setClass(s.options[i].value);
  43. r.setStyleInfo(getStyleFromClass(r.getClass()));
  44. refreshCFR();
  45. setWindowDirty();
  46. break;
  47. }
  48. }
  49. }
  50. };
  51. function delTS(id) {
  52. getCSR().removeRange(id);
  53. refreshCFR();
  54. setWindowDirty();
  55. };
  56. function updTS(id) {
  57. var t = document.getElementById(gsTHRESHOLD + id).value;
  58. t = sParseByDataType(t, 'number', true);
  59. if (t) {
  60. getCSR().updateThreshold(id, t);
  61. setWindowDirty();
  62. }
  63. refreshCFR();
  64. };
  65. function moveTSDown(id) {
  66. var idx = getCSR().indexOf(id);
  67. var ts1 = getCSR().getRangeAt(idx);
  68. var ts2 = getCSR().getRangeAt(idx-1);
  69. ts1.m_fromInclusive = false;
  70. ts2.m_toInclusive = true;
  71. ts2.setTo(ts1.getFrom());
  72. refreshCFR();
  73. setWindowDirty();
  74. };
  75. function moveTSUp(id) {
  76. var idx = getCSR().indexOf(id);
  77. var ts1 = getCSR().getRangeAt(idx);
  78. var ts2 = getCSR().getRangeAt(idx+1);
  79. ts1.m_toInclusive = false;
  80. ts2.m_fromInclusive = true;
  81. refreshCFR();
  82. setWindowDirty();
  83. };
  84. function getCSR() {
  85. return _oCSR;
  86. };
  87. function initCondStyles(column) {
  88. var oCSR = getCSR();
  89. var cs = column.findChildByName('CStyle',false);
  90. if (column != null && cs != null && cf.determineDataType(parseInt(column.getAttribute("type"),10)) == cf.determineDataType(parseInt(cs.getAttribute("colType"),10)))
  91. {
  92. initDefaults(column);
  93. initRanges(column);
  94. initSelectValues(column);
  95. }
  96. };
  97. function initDefaults(column) {
  98. var oCSR = getCSR();
  99. var cs = column.findChildByName('CStyle',false);
  100. if (cs) {
  101. var def = cs.findChildWithAttribute('default','true');
  102. if (def) {
  103. oCSR.setClass(def.getAttribute("className"));
  104. oCSR.setStyleInfo(def.getAttribute("style").replace(/&apos;/gi, "'"));
  105. oCSR.setType(cs.getAttribute('type'));
  106. }
  107. }
  108. };
  109. function initRanges(column) {
  110. var oCSR = getCSR();
  111. var cs = column.findChildByName('CStyle',false);
  112. var FEs = column.getElementsByTagName("FE");
  113. if (FEs) {
  114. var decimalSeparator = goDialogManager.getMiniQueryManager().getDecimalSeparator();
  115. var reDecimalSeparator = new RegExp('\\' + decimalSeparator, 'gi');
  116. var iFECount = 0;
  117. for (var i = 0; i < FEs.length; i++) {
  118. if (FEs[i].getAttribute("default") == "true" || FEs[i].getAttribute("type") == "selectValue") {
  119. continue;
  120. }
  121. iFECount++;
  122. var to = FEs[i].findChildByName("To", false);
  123. if (to !== null) {
  124. var sTO = to.getAttribute('use');
  125. sTO = sTO.replace(reDecimalSeparator, '.');
  126. oCSR.addThreshold(sTO);
  127. }
  128. }
  129. if (oCSR.m_ranges.length >= iFECount) {
  130. for (var i = 0; i < iFECount; i++) {
  131. var fe = FEs[i];
  132. if (fe && oCSR.m_ranges[i])
  133. {
  134. if (fe.getAttribute("type") == "selectValue") {
  135. continue;
  136. }
  137. oCSR.m_ranges[i].setClass(fe.getAttribute("className"));
  138. oCSR.m_ranges[i].setStyleInfo(fe.getAttribute("style").replace(/&apos;/gi, "'"));
  139. var from = fe.findChildByName("From", false);
  140. if (from !== null) {
  141. oCSR.m_ranges[i].setFromInclusive(fe.getName() == "FE" ? (from.getAttribute("exclusive") != "true") : from.getAttribute("inclusive"));
  142. }
  143. var to = fe.findChildByName("To", false);
  144. if (to !== null) {
  145. oCSR.m_ranges[i].setToInclusive(fe.getName() == "FE" ? (to.getAttribute("exclusive") != "true") : to.getAttribute("inclusive"));
  146. }
  147. }
  148. }
  149. }
  150. }
  151. };
  152. function initSelectValues(column) {
  153. var oCSR = getCSR();
  154. var cs = column.findChildByName('CStyle',false);
  155. if (cs === null || cs.getAttribute('type') != 'selectValue') {
  156. return;
  157. }
  158. var FEs = cs.getElementsByTagName("FE");
  159. for (var i = 0; i < FEs.length; i++) {
  160. var fe = FEs[i];
  161. if (fe.getAttribute('default')=='true') {
  162. continue;
  163. }
  164. var values = fe.getElementsByTagName("Value");
  165. var from = fe.findChildByName("From", false);
  166. var to = fe.findChildByName("To", false);
  167. if (from !== null || to !== null) {
  168. from = (from !== null ? cf.sXmlDecode(from.getAttribute('use')) : null);
  169. to = (to !== null ? cf.sXmlDecode(to.getAttribute('use')) : null);
  170. var r = oCSR.addRange(from, to);
  171. r.setClass(cf.sXmlDecode(fe.getAttribute("className")));
  172. r.setStyleInfo(cf.sXmlDecode(fe.getAttribute("style")));
  173. }
  174. else {
  175. var aValues = new Array();
  176. if (values && values.length) {
  177. for (var j = 0; j < values.length; j++) {
  178. aValues[aValues.length] = new cf.CFilterValue(cf.sXmlDecode(values[j].getAttribute("use")), cf.sXmlDecode(values[j].getAttribute("display")), values[j].getAttribute("exclusive"));
  179. }
  180. }
  181. var sv = oCSR.addSVList(aValues);
  182. sv.setClass(cf.sXmlDecode(fe.getAttribute("className")));
  183. sv.setStyleInfo(cf.sXmlDecode(fe.getAttribute("style")));
  184. sv.setMissingValues(cf.sXmlDecode(fe.getAttribute("nullOption")));
  185. }
  186. }
  187. };
  188. function pickStyles(id) {
  189. var cf = getConfigFrame();
  190. cf.dlgReset();
  191. cf.dlgGlobalReset();
  192. cf.dlgGlobalSetParm("csID", id);
  193. cf.dlgGlobalSetParm("csCALLBACK", pickStyles_callback);
  194. var o = getCSR().getRangeById(id);
  195. if (o) {
  196. cf.dlgGlobalSetParm("xxStyle", o.getStyleInfo());
  197. }
  198. cf.dlgSetParm("m", "/" + cf.qs_dir + "/styleText.xts");
  199. cf.dlgSetParm("modal", true);
  200. cf.showModal(gsEDIT_STYLE_TITLE, gsCLOSE_CAPTION, 550, 460);
  201. };
  202. function pickStyles_callback(str) {
  203. var cf = getConfigFrame();
  204. var id = cf.dlgGlobalGetParm("csID");
  205. setWindowDirty();
  206. if (id) {
  207. var o = getCSR().getRangeById(id);
  208. if (o && o.getStyleInfo() != str) {
  209. o.setStyleInfo(str);
  210. o.setClass(gsCSSCLASS_CUSTOM);
  211. }
  212. }
  213. refreshCFR();
  214. };
  215. function pickValues(id) {
  216. var cf = getConfigFrame();
  217. var oMQMgr = goDialogManager.getMiniQueryManager();
  218. var modalDlg_height = null;
  219. var modalDlg_width = null;
  220. cf.dlgReset();
  221. cf.dlgGlobalReset();
  222. cf.dlgGlobalSetParm("csID", id);
  223. cf.dlgGlobalSetParm("csCALLBACK", pickValues_callback);
  224. for (var i = 0; i < cf.cfgSize("filter_promptValuesXML"); i++)
  225. {
  226. cf.dlgGlobalSetParmAt("xxPromptValues", cf.dlgGlobalSize("xxPromptValues"), cf.cfgGetAt("filter_promptValuesXML", i));
  227. }
  228. try
  229. {
  230. if (goDialogManager.getApplicationManager().getReportManager().getParameterManager().getExecutionParameters())
  231. {
  232. cf.dlgGlobalSetParm("xxExecutionParameters", goDialogManager.getApplicationManager().getReportManager().getParameterManager().getExecutionParameters());
  233. }
  234. }
  235. catch (e)
  236. {
  237. }
  238. var o = getCSR().getRangeById(id);
  239. var title = gsPICKLIST_TITLE;
  240. if (xxType == 1) {
  241. modalDlg_height = 300;
  242. modalDlg_width = 275;
  243. if (o != null && typeof o.getTo == "function") {
  244. cf.dlgSetParm("xxDate", o.getTo());
  245. }
  246. title = gsPICKDATE_TITLE;
  247. }
  248. else if (xxType == 2) {
  249. modalDlg_height = 200;
  250. modalDlg_width = 275;
  251. if (o != null && typeof o.getTo == "function") {
  252. cf.dlgSetParm("xxTime", o.getTo());
  253. }
  254. title = gsPICKTIME_TITLE;
  255. }
  256. else if (xxType == 3) {
  257. modalDlg_height = 425;
  258. modalDlg_width = 275;
  259. if (o != null && typeof o.getTo == "function") {
  260. var s = o.getTo();
  261. if (typeof s == "string" && s.match(/(\d\d\d\d.\d\d.\d\d)\s*(.*)/gi) ) {
  262. cf.dlgSetParm("xxDate", RegExp.$1);
  263. cf.dlgSetParm("xxTime", RegExp.$2);
  264. }
  265. }
  266. title = gsPICKDATETIME_TITLE;
  267. }
  268. else if (xxType == 4) {
  269. modalDlg_height = 170;
  270. modalDlg_width = 275;
  271. if (o != null && typeof o.getTo == "function") {
  272. cf.dlgSetParm("xxInterval", o.getTo());
  273. }
  274. title = gsPICKINTERVAL_TITLE;
  275. }
  276. else if (xxType == 5) {
  277. modalDlg_width = 300;
  278. modalDlg_height = 350;
  279. if (o != null && typeof o.getValues == "function") {
  280. var values = o.getValues();
  281. if (values) {
  282. for (var i = 0; i < values.length; i++) {
  283. cf.dlgGlobalSetParmAt("xxPickList", cf.dlgGlobalSize("xxPickList"), values[i]);
  284. }
  285. }
  286. }
  287. cf.dlgGlobalSetParm("xxFullColExpression", xxColExp);
  288. cf.dlgGlobalSetParm("xxColName", xxColId);
  289. cf.dlgGlobalSetParm("xxModelName", cf.cfgGet("cmLastModel"));
  290. cf.dlgSetParm("xxModelName", cf.cEscape(cf.cfgGet("cmLastModel")));
  291. cf.dlgGlobalSetParm("xxIsNullAllowed", false);
  292. if (o != null && typeof o.getMissingValues == "function") {
  293. cf.dlgGlobalSetParm("xxNullOption", o.getMissingValues());
  294. }
  295. cf.dlgGlobalSetParm("xxColid", cf.getUniqColumnName(xxColId));
  296. cf.dlgSetParm("xxColid", cf.cEscape(cf.getUniqColumnName(xxColId)));
  297. cf.retrieveCreds();
  298. }
  299. cf.dlgSetParm("xxType", "" + xxType);
  300. cf.dlgGlobalSetParm("xxType", "" + xxType);
  301. cf.dlgSetParm("xxLevelNumber", xxLevelNumber);
  302. cf.dlgGlobalSetParm("xxLevelNumber", xxLevelNumber);
  303. cf.dlgGlobalSetParm("xxExprLocale", xxExprLocale);
  304. cf.dlgSetParm("xxDataType", gsDataType);
  305. cf.dlgSetParm("xxIsSearchAllowed", gsSearchAllowed);
  306. var oColumnExpression = oMQMgr.getExpression(xxColExp);
  307. var sCalcOp = oMQMgr.getCalcOp(oColumnExpression);
  308. if ((sCalcOp !== cf.MINI_QUERY_NO_COLUMN_FOUND && sCalcOp !== cf.MINI_QUERY_ATTRIBUTE_NOT_FOUND) && ((sCalcOp.substring(0, 5) == "range") || (sCalcOp.substring(0, 5) == "group")))
  309. {
  310. for (var i = 0; i < oMQMgr.getAllColumns().length; i++)
  311. {
  312. if((oMQMgr.getColumnId(i) != oMQMgr.getColumnId(oColumnExpression))&&(oMQMgr.isMeasure(i) === false)&&(oMQMgr.isReportExpression(i)))
  313. {
  314. cf.dlgGlobalSetParmAt("xxOtherColIds", cf.dlgGlobalSize('xxOtherColIds'), oMQMgr.getColumnId(i));
  315. cf.dlgGlobalSetParmAt("xxOtherColExps", cf.dlgGlobalSize('xxOtherColExps'), oMQMgr.getExpression(i).replace(/</g,"&lt;"));
  316. }
  317. }
  318. }
  319. cf.dlgSetParm("m", "/" + cf.qs_dir + "/condStylesPickList.xts");
  320. title = title.replace(/^\s*</,'').replace(/>\s*$/,'');
  321. cf.showModal(title, gsCLOSE_CAPTION, modalDlg_width, modalDlg_height);
  322. };
  323. function pickValues_callback(values, bMissingValues) {
  324. var cf = getConfigFrame();
  325. var id = cf.dlgGlobalGetParm("csID");
  326. setWindowDirty();
  327. if (values == null && !bMissingValues) {
  328. getCSR().removeRange(id);
  329. }
  330. else if (xxType == 1 || xxType == 2 || xxType == 3 || xxType == 4 ) {
  331. if (id) { getCSR().updateThreshold(id, values); }
  332. else { getCSR().addThreshold(values); }
  333. }
  334. else {
  335. if (id) {
  336. getCSR().updateSVList(id, values);
  337. var obj = getCSR().getRangeById(id);
  338. if (obj) {
  339. obj.setMissingValues(bMissingValues);
  340. }
  341. }
  342. else {
  343. var obj = getCSR().addSVList(values);
  344. if (obj && bMissingValues) {
  345. obj.setMissingValues(bMissingValues);
  346. }
  347. }
  348. }
  349. refreshCFR();
  350. };
  351. function CS_SelectRow(e, id)
  352. {
  353. var oSrc = document.getElementById(gsRowPrefix + id);
  354. var bSelected = true;
  355. if (oSrc != null) {
  356. bSelected = !oSrc.className.match(greCLS_FILTERSELECTED);
  357. }
  358. if (e.shiftKey && _lastSelection != null) {
  359. var rangeList = document.getElementById('rangeList');
  360. var rows = rangeList.getElementsByTagName('tr');
  361. var bInRange = false;
  362. for (var r = 0; r < rows.length; r++) {
  363. if ( (/^csrow-/).test(rows[r].id) ) {
  364. var rid = rows[r].id.replace(/^csrow-/, '');
  365. if (rid == id || rid == _lastSelection) {
  366. bInRange = !bInRange;
  367. CS_selectObj(rid, true);
  368. if (id == _lastSelection) {
  369. bInRange = false;
  370. }
  371. }
  372. else {
  373. CS_selectObj(rid, bInRange);
  374. }
  375. }
  376. }
  377. }
  378. else {
  379. if (!e.ctrlKey) {
  380. CS_clearAll();
  381. }
  382. CS_selectObj( id, (e.ctrlKey ? bSelected : true) );
  383. _lastSelection = id;
  384. if (e.ctrlKey && !bSelected) {
  385. _lastSelection = null;
  386. }
  387. }
  388. e.cancelBubble = true;
  389. e.returnValue = true;
  390. return true;
  391. };
  392. function CS_selectObj(id, bSelected)
  393. {
  394. var obj = document.getElementById(gsRowPrefix + id);
  395. if (obj != null) {
  396. if (bSelected == null) {
  397. bSelected = !( obj.className.match(greCLS_FILTERSELECTED) );
  398. }
  399. if (bSelected) {
  400. obj.className += " clsFilterSelected";
  401. addToArray(gSelRows, id);
  402. }
  403. else {
  404. obj.className = obj.className.replace(greCLS_FILTERSELECTED, "").replace(/^\s+|\s+$/g, "");
  405. var newArray = new Array();
  406. for (var i = 0; i < gSelRows.length; i++) {
  407. if (gSelRows[i] != id) { newArray[newArray.length] = gSelRows[i]; }
  408. }
  409. gSelRows = newArray;
  410. }
  411. }
  412. };
  413. function CS_clearAll() {
  414. for (var i = 0; i < gSelRows.length; i++) {
  415. CS_selectObj(gSelRows[i], false);
  416. }
  417. gSelRows = new Array();
  418. _lastSelection = null;
  419. };
  420. function CS_removeSel(id) {
  421. var newArray = new Array();
  422. for (var i = 0; i < gSelRows.length; i++) {
  423. if (gSelRows[i] == id) {
  424. CS_selectObj(id, false);
  425. }
  426. else {
  427. newArray[newArray.length] = gSelRows[i];
  428. }
  429. }
  430. gSelRows = newArray;
  431. };
  432. function CS_move(delta, e) {
  433. if (_lastSelection != null) {
  434. setWindowDirty(false);
  435. var last = _lastSelection;
  436. CS_clearAll();
  437. _lastSelection = last;
  438. CS_selectObj(_lastSelection, true);
  439. getCSR().moveRange(_lastSelection, delta);
  440. refreshCFR();
  441. setTimeout(setWindowDirty, 100);
  442. }
  443. if (e.returnValue) { e.returnValue = false; }
  444. else if (e.preventDefault) { e.preventDefault(); }
  445. else { return false; }
  446. };
  447. function CS_delete(e) {
  448. setWindowDirty(false);
  449. for (var i = 0; i < gSelRows.length; i++) {
  450. getCSR().removeRange(gSelRows[i]);
  451. }
  452. CS_clearAll();
  453. refreshCFR();
  454. setTimeout(setWindowDirty, 100);
  455. if (e.returnValue) { e.returnValue = false; }
  456. else if (e.preventDefault) { e.preventDefault(); }
  457. else { return false; }
  458. };
  459. function pickTextRange(id) {
  460. var cf = getConfigFrame();
  461. var modalDlg_height = null;
  462. var modalDlg_width = null;
  463. cf.dlgReset();
  464. cf.dlgGlobalReset();
  465. cf.dlgGlobalSetParm("csID", id);
  466. cf.dlgGlobalSetParm("csCALLBACK", pickTextRange_callback);
  467. var o = getCSR().getRangeById(id);
  468. if (o != null && typeof o.getFrom == "function") {
  469. cf.dlgSetParm("xxFrom", o.getFrom());
  470. }
  471. if (o != null && typeof o.getTo == "function") {
  472. cf.dlgSetParm("xxTo", o.getTo());
  473. }
  474. cf.dlgGlobalSetParm("xxFullColExpression", xxColExp);
  475. cf.dlgGlobalSetParm("xxColName", xxColId);
  476. cf.dlgGlobalSetParm("xxModelName", cf.cfgGet("cmLastModel"));
  477. cf.dlgSetParm("xxModelName", cf.cEscape(cf.cfgGet("cmLastModel")));
  478. cf.dlgGlobalSetParm("xxColid", cf.getUniqColumnName(xxColId));
  479. cf.dlgSetParm("xxColid", cf.cEscape(cf.getUniqColumnName(xxColId)));
  480. cf.retrieveCreds();
  481. cf.dlgSetParm("xxType", "" + xxType);
  482. cf.dlgGlobalSetParm("xxType", "" + xxType);
  483. cf.dlgSetParm("m", "/" + cf.qs_dir + "/condStylesPickTextRange.xts");
  484. cf.showModal(gsTEXT_RANGE_TITLE, gsCLOSE_CAPTION, 200, 200);
  485. };
  486. function pickTextRange_callback(values) {
  487. var cf = getConfigFrame();
  488. var id = cf.dlgGlobalGetParm("csID");
  489. setWindowDirty();
  490. if (values == null || (typeof values == "object" && values.join("") === "")) {
  491. getCSR().removeRange(id);
  492. }
  493. else {
  494. if (id) {
  495. var o = getCSR().getRangeById(id);
  496. if (o != null && typeof o.setFrom == "function") {
  497. o.setFrom(values[0]);
  498. }
  499. if (o != null && typeof o.setTo == "function") {
  500. o.setTo(values[1]);
  501. }
  502. }
  503. else { getCSR().addRange(values[0], values[1]); }
  504. }
  505. refreshCFR();
  506. };
  507. function getStyleFromClass(c)
  508. {
  509. var s = "";
  510. for (var i = 0; i < document.styleSheets.length; i++)
  511. {
  512. var ss = document.styleSheets[i];
  513. var _rules = (ss.cssRules ? ss.cssRules : ss.rules);
  514. for (var j = 0; j < _rules.length; j++)
  515. {
  516. var cr = _rules[j];
  517. var reClass = new RegExp('\\b' + c + '\\b', 'g');
  518. if (cr.selectorText && cr.selectorText.match(reClass))
  519. {
  520. s += extractCustomStyles(cr.style);
  521. }
  522. }
  523. }
  524. return s;
  525. };
  526. function extractCustomStyles(oStyle)
  527. {
  528. var s = "";
  529. for (var i = 0; i < STYLE_JS_ATTRIBUTES.length; i++)
  530. {
  531. var js_attr = STYLE_JS_ATTRIBUTES[i];
  532. if (oStyle[js_attr])
  533. {
  534. s += STYLE_CSS_ATTRIBUTES[i] + ":" + oStyle[js_attr] + ";";
  535. }
  536. }
  537. return s;
  538. };
  539. var STYLE_CSS_ATTRIBUTES = ['border','color','background-color','font-family','font-size','font-weight','font-style','text-decoration','text-align','vertical-align'];
  540. var STYLE_JS_ATTRIBUTES = ['border','color','backgroundColor','fontFamily','fontSize','fontWeight','fontStyle','textDecoration','textAlign','verticalAlign'];