layout.xslt 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: ps
  5. (C) Copyright IBM Corp. 2005, 2015
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <!--
  9. Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  10. Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  11. -->
  12. <xsl:stylesheet version="1.0"
  13. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  14. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  15. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  16. xmlns:lyt="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/layout/"
  17. xmlns:dt="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/templates/"
  18. xmlns:dp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/presentation/"
  19. xmlns:df="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/framework/"
  20. xmlns:dc="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/confirm/1/"
  21. xmlns:cp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/presentation/"
  22. xmlns:cf="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/framework/"
  23. xmlns:utml="http://developer.cognos.com/schemas/xts/logicsheet/xslt/formlogic/"
  24. xmlns:out="dummy-uri"
  25. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  26. xmlns:xts="http://developer.cognos.com/schemas/xts/"
  27. xmlns:rdb="http://developer.cognos.com/schemas/xts/rdb">
  28. <xsl:output method="xml" encoding="UTF-8" indent="no"/>
  29. <xsl:namespace-alias stylesheet-prefix="out" result-prefix="xsl"/>
  30. <xsl:template match="rdb:mypages">
  31. <xsl:variable name="mode">
  32. <xsl:choose>
  33. <xsl:when test="@mode = 'properties'">properties</xsl:when>
  34. <xsl:otherwise>new</xsl:otherwise>
  35. </xsl:choose>
  36. </xsl:variable>
  37. <out:variable name="layout" select="/root/layout"/>
  38. <out:variable name="firstColumnCount" select="count($layout/column[1]/portlet)"/>
  39. <out:variable name="secondColumnCount" select="count($layout/column[2]/portlet)"/>
  40. <out:variable name="thirdColumnCount" select="count($layout/column[3]/portlet)"/>
  41. <out:variable name="mp_columns">
  42. <out:choose>
  43. <out:when test="key('env-param', 'm_mp_columns')"><out:value-of select="key('env-param', 'm_mp_columns')"/></out:when>
  44. <out:otherwise>1</out:otherwise>
  45. </out:choose>
  46. </out:variable>
  47. <!-- When in properties mode, find out if this dialog should be read-only. -->
  48. <out:variable name="permissions" select="string(/root/cm:queryResponse/cm:queryReply[1]/*/cm:permissions)"/>
  49. <out:variable name="canTraverse" select="($permissions != '' and contains(concat(' ',$permissions,' '),' traverse ')) or $permissions = ''"/>
  50. <out:variable name="readOnly" select="not($canTraverse) or ($permissions and not(contains(concat(' ',$permissions,' '),' write ')))"/>
  51. <!-- find out how many columns we are displaying -->
  52. <out:variable name="mp_first_column_width">
  53. <out:value-of select="$layout/column[1]/@width"/>
  54. </out:variable>
  55. <!-- find out the second column size -->
  56. <out:variable name="mp_second_column_width">
  57. <out:value-of select="$layout/column[2]/@width"/>
  58. </out:variable>
  59. <!-- find out the third column size -->
  60. <out:variable name="mp_third_column_width">
  61. <out:value-of select="$layout/column[3]/@width"/>
  62. </out:variable>
  63. <script language="javascript">
  64. var g_readOnly = <out:value-of select="$readOnly"/>;
  65. var g_canTraverse = <out:value-of select="$canTraverse"/>;
  66. var firstColumnOptionList = new Array();
  67. <out:for-each select="$layout/column[1]/portlet">
  68. firstColumnOptionList[<out:value-of select="(position() - 1)"/>] = new Array("<out:value-of select="$firstColumnCount - (position() - 1)"/>", "<out:value-of select="xtsext:javascriptencode(string(/root/portletNames/portlet[./searchPath = /root/env/param[@name = concat('m_mp_portlet_', current()/@id)]]/name))"/>", "<out:value-of select="@id"/>", "");
  69. </out:for-each>
  70. var secondColumnOptionList = new Array();
  71. <out:for-each select="$layout/column[2]/portlet">
  72. secondColumnOptionList[<out:value-of select="(position() - 1)"/>] = new Array("<out:value-of select="$secondColumnCount - (position() - 1)"/>", "<out:value-of select="xtsext:javascriptencode(string(/root/portletNames/portlet[./searchPath = /root/env/param[@name = concat('m_mp_portlet_', current()/@id)]]/name))"/>", "<out:value-of select="@id"/>", "");
  73. </out:for-each>
  74. var thirdColumnOptionList = new Array();
  75. <out:for-each select="$layout/column[3]/portlet">
  76. thirdColumnOptionList[<out:value-of select="(position() - 1)"/>] = new Array("<out:value-of select="$thirdColumnCount - (position() - 1)"/>", "<out:value-of select="xtsext:javascriptencode(string(/root/portletNames/portlet[./searchPath = /root/env/param[@name = concat('m_mp_portlet_', current()/@id)]]/name))"/>", "<out:value-of select="@id"/>", "");
  77. </out:for-each>
  78. var g_columns = <out:value-of select="count($layout/column)"/>;
  79. //this is the listed browser
  80. var browser = '<out:value-of select="xtsext:javascriptencode(string($browser))"/>';
  81. // Manage the column layout.
  82. // This function is call on "init" or when the user alters the column layout.
  83. function setColumns( columns, bRebalance, imageClick )
  84. {
  85. <!-- If this is a click on the column layout selector that matches the existing column count then just ignor it -->
  86. if (columns == g_columns &amp;&amp; bRebalance)
  87. {
  88. return;
  89. }
  90. var bPerformColumnAlteration = true;
  91. var bDeletingColumnWithPortlets = false;
  92. var nOriginalCols = g_columns;
  93. <!-- If the user is removing a column that contains portlet instances, then make sure to prompt first -->
  94. if (parseInt(columns, 10) &lt; g_columns)
  95. {
  96. bDeletingColumnWithPortlets = confirmRemoveColumns(parseInt(columns, 10)+1, g_columns);
  97. if(!bDeletingColumnWithPortlets)
  98. bPerformColumnAlteration = false;
  99. }
  100. if (bPerformColumnAlteration)
  101. {
  102. <!-- If this event came through the image then update the radio button control -->
  103. if (imageClick)
  104. {
  105. if (columns == "1")
  106. document.pform.m_mp_columns[0].checked = 'true';
  107. else if (columns == "2")
  108. document.pform.m_mp_columns[1].checked = 'true';
  109. else if (columns == "3")
  110. document.pform.m_mp_columns[2].checked = 'true';
  111. }
  112. document.pform.m_mp_col1sort.style.width = calcColWidth(document.pform.m_mp_firstColumnWidth[document.pform.m_mp_firstColumnWidth.selectedIndex].value);
  113. document.pform.m_mp_col2sort.style.width = calcColWidth(document.pform.m_mp_secondColumnWidth[document.pform.m_mp_secondColumnWidth.selectedIndex].value);
  114. document.pform.m_mp_col3sort.style.width = calcColWidth(document.pform.m_mp_thirdColumnWidth[document.pform.m_mp_thirdColumnWidth.selectedIndex].value);
  115. document.getElementById("arrowOne").style.display = ((columns == "1") ? "none" : "inline");
  116. document.getElementById("arrowOne").style.visibility = ((columns == "1") ? "hidden" : "visible");
  117. document.getElementById("two").style.display = ((columns == "1") ? "none" : "inline");
  118. document.getElementById("two").style.visibility = ((columns == "1") ? "hidden" : "visible");
  119. document.getElementById("arrowTwo").style.display = ((columns == "3") ? "inline" : "none");
  120. document.getElementById("arrowTwo").style.visibility = ((columns == "3") ? "visible" : "hidden");
  121. document.getElementById("three").style.display = ((columns == "3") ? "inline" : "none");
  122. document.getElementById("three").style.visibility = ((columns == "3") ? "visible" : "hidden");
  123. <!-- Update the global column count -->
  124. g_columns = parseInt(columns);
  125. <!--
  126. /*
  127. if this is an explicit event to change the column layout then make sure the
  128. new column layout is properly distributed on the page.
  129. */
  130. -->
  131. if (bRebalance)
  132. rebalance();
  133. <!--
  134. /*
  135. if we are removing a column that contains portlets then update the page environment context
  136. (causes a page refresh)
  137. */
  138. -->
  139. if(bDeletingColumnWithPortlets)
  140. removeColumns(parseInt(columns)+1, nOriginalCols);
  141. }
  142. return;
  143. }
  144. function rebalance()
  145. {
  146. if (g_columns == 1)
  147. {
  148. document.pform.m_mp_col1sort.style.width = calcColWidth("100");
  149. document.pform.m_mp_firstColumnWidth.value = "100";
  150. }
  151. else if (g_columns == 2)
  152. {
  153. document.pform.m_mp_col1sort.style.width = calcColWidth("50");
  154. document.pform.m_mp_firstColumnWidth.value = "50";
  155. document.pform.m_mp_col2sort.style.width = calcColWidth("50");
  156. document.pform.m_mp_secondColumnWidth.value = "50";
  157. }
  158. else
  159. {
  160. document.pform.m_mp_col1sort.style.width = calcColWidth("30");
  161. document.pform.m_mp_firstColumnWidth.value = "30";
  162. document.pform.m_mp_col2sort.style.width = calcColWidth("40");
  163. document.pform.m_mp_secondColumnWidth.value = "40";
  164. document.pform.m_mp_col3sort.style.width = calcColWidth("30");
  165. document.pform.m_mp_firstColumnWidth.value = "30";
  166. }
  167. }
  168. // move columns
  169. function moveColumns( whatFrom, whatTo, arrayFrom, arrayTo )
  170. {
  171. for (var i = whatFrom.options.length - 1; i >= 0; i--)
  172. {
  173. //if it is selected and the one after this isn't
  174. if (whatFrom[i].selected == true){
  175. arrayFrom[whatFrom[i].value][0] = (0 - i) - 1;
  176. arrayFrom[whatFrom[i].value][3] = "selected";
  177. arrayTo.push(arrayFrom[whatFrom[i].value]);
  178. arrayFrom.splice(i, 1);
  179. }
  180. }
  181. //call the sort the arrays
  182. sortIndex(whatFrom, arrayFrom);
  183. sortIndex(whatTo, arrayTo);
  184. //revalue the arrays
  185. revalue(arrayFrom);
  186. revalue(arrayTo);
  187. }
  188. // move all columns
  189. function moveAllColumns( whatFrom, whatTo, arrayFrom, arrayTo )
  190. {
  191. for (var i = whatFrom.options.length - 1; i >= 0; i--)
  192. {
  193. arrayFrom[whatFrom[i].value][0] = (0 - i) - 1;
  194. arrayFrom[whatFrom[i].value][3] = "selected";
  195. arrayTo.push(arrayFrom[whatFrom[i].value]);
  196. arrayFrom.splice(i, 1);
  197. }
  198. //call the sort the arrays
  199. sortIndex(whatFrom, arrayFrom);
  200. sortIndex(whatTo, arrayTo);
  201. //revalue the arrays
  202. revalue(arrayFrom);
  203. revalue(arrayTo);
  204. }
  205. // move all columns
  206. function switchColumns( whatOne, whatTwo, arrayOne, arrayTwo, widthOne, widthTwo)
  207. {
  208. //switch contents
  209. var tempArray = new Array();
  210. tempArray = tempArray.concat(arrayOne);
  211. arrayOne.splice(0, arrayOne.length)
  212. for(var i = 0; i &lt; arrayTwo.length; i++)
  213. arrayOne[i] = arrayTwo[i];
  214. arrayTwo.splice(0, arrayTwo.length)
  215. for(var i = 0; i &lt; tempArray.length; i++)
  216. arrayTwo[i] = tempArray[i];
  217. //switch the widths
  218. var tempWidth = widthOne.value;
  219. widthOne.value = widthTwo.value;
  220. widthTwo.value = tempWidth;
  221. var tempWidth2 = whatOne.style.width;
  222. whatOne.style.width = whatTwo.style.width;
  223. whatTwo.style.width = tempWidth2;
  224. //call the sort the arrays
  225. sortIndex(whatOne, arrayOne);
  226. sortIndex(whatTwo, arrayTwo);
  227. //revalue the arrays
  228. revalue(arrayOne);
  229. revalue(arrayTwo);
  230. }
  231. //unselect all options
  232. function unSelectOptions(what)
  233. {
  234. if (what)
  235. {
  236. for (var i = what.options.length - 1; i >= 0; i--)
  237. what[i].selected = false;
  238. }
  239. }
  240. //this will set the values for both selectbox
  241. function setValues()
  242. {
  243. if (!g_readOnly)
  244. {
  245. setList(document.pform.m_mp_col1sort, firstColumnOptionList);
  246. setList(document.pform.m_mp_col2sort, secondColumnOptionList);
  247. setList(document.pform.m_mp_col3sort, thirdColumnOptionList);
  248. }
  249. }
  250. function initPage()
  251. {
  252. var colCount = 1;
  253. if (document.pform.m_mp_columns)
  254. {
  255. var columns = document.pform.m_mp_columns;
  256. if (columns[1].checked)
  257. colCount = 2;
  258. else if (columns[2].checked)
  259. colCount = 3;
  260. }
  261. else
  262. {
  263. colCount = parseInt("<out:value-of select="$mp_columns"/>");
  264. }
  265. if (g_canTraverse)
  266. setColumns( colCount );
  267. }
  268. // Submit the form.
  269. function doSubmit()
  270. {
  271. document.pform.m.value = "<out:value-of select="$mname"/>";
  272. document.pform.submit();
  273. }
  274. function changeSize(sizeList, sortList)
  275. {
  276. sortList.style.width = calcColWidth(sizeList[sizeList.selectedIndex].value);
  277. }
  278. function calcColWidth(sWidth)
  279. {
  280. var clientWidth = parseInt(document.body.clientWidth, 10);
  281. if (clientWidth == 0) {
  282. if (window.frameElement &amp;&amp; window.frameElement.fragClientWidth) {
  283. clientWidth = parseInt(window.frameElement.fragClientWidth, 10);
  284. }
  285. }
  286. var colWidth = ((parseInt(sWidth, 10) / 100) * clientWidth) - 90;
  287. return (colWidth > 0) ? colWidth : 0;
  288. }
  289. function removePortlet(col)
  290. {
  291. var colPortlets = null;
  292. switch (col)
  293. {
  294. case "m_mp_col1sort":
  295. colPortlets = firstColumnOptionList;
  296. break;
  297. case "m_mp_col2sort":
  298. colPortlets = secondColumnOptionList;
  299. break;
  300. case "m_mp_col3sort":
  301. colPortlets = thirdColumnOptionList;
  302. break;
  303. }
  304. for (var i = 0; i &lt; document.pform.elements[col].options.length; i++)
  305. {
  306. if(document.pform.elements[col].options[i].selected)
  307. {
  308. var porletID = colPortlets[parseInt(document.pform.elements[col].options[i].value, 10)][2];
  309. document.pform.elements["m_mp_portlet_" + porletID].value = "";
  310. if (document.pform.elements["m_mp_saved_portlet_" + porletID])
  311. document.pform.elements["m_mp_saved_portlet_" + porletID].value = "remove";
  312. }
  313. }
  314. document.pform.m_mp_cmd.value = "remove_portlet";
  315. setValues();
  316. doSubmit();
  317. }
  318. function confirmRemoveColumns(fromColumn, toColumn)
  319. {
  320. var bConfirmed = true;
  321. for (var col = fromColumn; col &lt;= toColumn; col++) {
  322. var colPortlets = null;
  323. switch (col)
  324. {
  325. case 1:
  326. colPortlets = firstColumnOptionList;
  327. break;
  328. case 2:
  329. colPortlets = secondColumnOptionList;
  330. break;
  331. case 3:
  332. colPortlets = thirdColumnOptionList;
  333. break;
  334. }
  335. if (colPortlets != null &amp;&amp; colPortlets[0] != null) {
  336. bConfirmed = window.confirm("<xts:string id="IDS_PROP_CONFIRM_PORTLET_DELETION" encode="javascript"/>");
  337. if (!bConfirmed) {
  338. document.pform.m_mp_columns[fromColumn-1-1].checked = false;
  339. document.pform.m_mp_columns[toColumn-1].checked = true;
  340. }
  341. break;
  342. }
  343. }
  344. return bConfirmed;
  345. }
  346. function removeColumns(fromColumn, toColumn)
  347. {
  348. var bRemoved = false;
  349. for (var col = fromColumn; col &lt;= toColumn; col++) {
  350. var colPortlets = null;
  351. switch (col)
  352. {
  353. case 1:
  354. colPortlets = firstColumnOptionList;
  355. break;
  356. case 2:
  357. colPortlets = secondColumnOptionList;
  358. break;
  359. case 3:
  360. colPortlets = thirdColumnOptionList;
  361. break;
  362. }
  363. if (colPortlets != null &amp;&amp; colPortlets[0] != null) {
  364. for (var i = 0; i &lt; colPortlets[0][0]; i++)
  365. {
  366. var porletID = colPortlets[i][2];
  367. document.pform.elements["m_mp_portlet_" + porletID].value = "";
  368. if (document.pform.elements["m_mp_saved_portlet_" + porletID]) {
  369. document.pform.elements["m_mp_saved_portlet_" + porletID].value = "remove";
  370. }
  371. bRemoved = true;
  372. }
  373. }
  374. }
  375. if (bRemoved)
  376. {
  377. document.pform.m_mp_cmd.value = "remove_portlet";
  378. setValues();
  379. doSubmit();
  380. }
  381. return bRemoved;
  382. }
  383. function addPortlet(col)
  384. {
  385. document.pform.m_mp_cmd.value = "add_portlet_" + col;
  386. document.pform.controller_state.value = "addEntries|navigate";
  387. setValues();
  388. doSubmit();
  389. }
  390. </script>
  391. <div id="l">
  392. <lyt:layout style="1" title="IDS_MP_NUMBER_COLUMNS">
  393. <lyt:section>
  394. <utml:radio-group name="m_mp_columns">
  395. <utml:default-value>1</utml:default-value>
  396. <dp:choice>
  397. <dp:section1 valign="middle" wrap="nowrap">
  398. <utml:input type="radio" value="1" onclick="setColumns(this.value, true)" style="margin-right:5px;">
  399. <out:if test="$readOnly">
  400. <out:attribute name="disabled">disabled</out:attribute>
  401. </out:if>
  402. </utml:input>
  403. <img src="{'{$image_root}'}icon_1column_preview.gif" align="absmiddle" >
  404. <out:if test="not($readOnly)">
  405. <out:attribute name="style">cursor:pointer</out:attribute>
  406. <out:attribute name="onclick">setColumns(document.pform.m_mp_columns[0].value, true, true);</out:attribute>
  407. </out:if>
  408. <out:attribute name="title"><xts:string id="IDS_MP_ONE_COLUMN"/></out:attribute>
  409. </img>
  410. <utml:input type="radio" value="2" onclick="setColumns(this.value, true)" style="margin-left:10px;margin-right:5px;">
  411. <out:if test="$readOnly">
  412. <out:attribute name="disabled">disabled</out:attribute>
  413. </out:if>
  414. </utml:input>
  415. <img src="{'{$image_root}'}icon_2column_preview.gif" align="absmiddle">
  416. <out:if test="not($readOnly)">
  417. <out:attribute name="style">cursor:pointer</out:attribute>
  418. <out:attribute name="onclick">setColumns(document.pform.m_mp_columns[1].value, true, true);</out:attribute>
  419. </out:if>
  420. <out:attribute name="title"><xts:string id="IDS_MP_TWO_COLUMN"/></out:attribute>
  421. </img>
  422. <utml:input type="radio" value="3" onclick="setColumns(this.value, true)" style="margin-left:10px;margin-right:5px;">
  423. <out:if test="$readOnly">
  424. <out:attribute name="disabled">disabled</out:attribute>
  425. </out:if>
  426. </utml:input>
  427. <img src="{'{$image_root}'}icon_3column_preview.gif" align="absmiddle">
  428. <out:if test="not($readOnly)">
  429. <out:attribute name="style">cursor:pointer</out:attribute>
  430. <out:attribute name="onclick">setColumns(document.pform.m_mp_columns[2].value, true, true);</out:attribute>
  431. </out:if>
  432. <out:attribute name="title"><xts:string id="IDS_MP_THREE_COLUMN"/></out:attribute>
  433. </img>
  434. </dp:section1>
  435. </dp:choice>
  436. </utml:radio-group>
  437. </lyt:section>
  438. </lyt:layout>
  439. <out:variable name="contentLocale" select="string(/root/user/param[@name='contentLocale'])"/>
  440. <xsl:variable name="colWidthOptions">
  441. <utml:option value="20"><out:value-of select="xtsext:formatNumber(string(.2),$contentLocale,number(4))"/></utml:option>
  442. <utml:option value="30"><out:value-of select="xtsext:formatNumber(string(.3),$contentLocale,number(4))"/></utml:option>
  443. <utml:option value="40"><out:value-of select="xtsext:formatNumber(string(.4),$contentLocale,number(4))"/></utml:option>
  444. <utml:option value="50"><out:value-of select="xtsext:formatNumber(string(.5),$contentLocale,number(4))"/></utml:option>
  445. <utml:option value="60"><out:value-of select="xtsext:formatNumber(string(.6),$contentLocale,number(4))"/></utml:option>
  446. <utml:option value="70"><out:value-of select="xtsext:formatNumber(string(.7),$contentLocale,number(4))"/></utml:option>
  447. <utml:option value="80"><out:value-of select="xtsext:formatNumber(string(.8),$contentLocale,number(4))"/></utml:option>
  448. <utml:option value="90"><out:value-of select="xtsext:formatNumber(string(.9),$contentLocale,number(4))"/></utml:option>
  449. <utml:option value="100"><out:value-of select="xtsext:formatNumber(string(1.0),$contentLocale,number(4))"/></utml:option>
  450. </xsl:variable>
  451. <lyt:layout style="1" border="yes" title="IDS_MP_CONTENT_ARRANGEMENT" intro="IDS_MP_CONTENT_INTRO">
  452. <lyt:section>
  453. <dp:list>
  454. <dp:section>
  455. <!-- ========== Column 1 ============= -->
  456. <!-- ================================= -->
  457. <div id="one" style="visibility:visible; display:inline;">
  458. <table class="pageEditorPortletColumn">
  459. <tr><td>
  460. <dp:list>
  461. <dp:section>
  462. <dp:input>
  463. <dp:section1>
  464. <xts:string id="IDS_MP_COLUMN_WIDTH"/>
  465. </dp:section1>
  466. <dp:section2>
  467. <utml:select name="m_mp_firstColumnWidth" onchange="changeSize(this, document.pform.m_mp_col1sort)">
  468. <utml:default-value>
  469. <out:choose>
  470. <out:when test="$mp_first_column_width > 0">
  471. <out:value-of select="$mp_first_column_width"/>
  472. </out:when>
  473. <out:otherwise>30</out:otherwise>
  474. </out:choose>
  475. </utml:default-value>
  476. <out:if test="$readOnly">
  477. <out:attribute name="disabled">disabled</out:attribute>
  478. </out:if>
  479. <xsl:copy-of select="$colWidthOptions"/>
  480. </utml:select>
  481. </dp:section2>
  482. </dp:input>
  483. </dp:section>
  484. <dp:section>
  485. <out:choose>
  486. <out:when test="$canTraverse">
  487. <cf:sortList class="sortSelectContainer" mode="mypages" name="m_mp_col1sort" form="pform" wide="false" array="firstColumnOptionList" size="12"
  488. onClick="unSelectOptions(document.pform.m_mp_col2sort);unSelectOptions(document.pform.m_mp_col3sort);">
  489. <cf:readOnlyFlag>$readOnly</cf:readOnlyFlag>
  490. <cf:initContent>
  491. <out:for-each select="$layout/column[1]/portlet">
  492. <utml:option>
  493. <out:attribute name="value"><out:value-of select="(position() - 1)"/></out:attribute>
  494. <out:value-of select="/root/portletNames/portlet[./searchPath = /root/env/param[@name = concat('m_mp_portlet_', current()/@id)]]/name"/>
  495. </utml:option>
  496. </out:for-each>
  497. </cf:initContent>
  498. <cf:sortAction>
  499. <a href="javascript:addPortlet('1')"><xts:string id="IDS_COMMAND_ADD"/></a>
  500. &#160;&#160;
  501. <a href="javascript:removePortlet('m_mp_col1sort')"><xts:string id="IDS_REMOVE"/></a>
  502. </cf:sortAction>
  503. </cf:sortList>
  504. </out:when>
  505. <out:otherwise>
  506. <xsl:call-template name="accessDenied"/>
  507. </out:otherwise>
  508. </out:choose>
  509. </dp:section>
  510. </dp:list>
  511. </td></tr>
  512. </table>
  513. </div>
  514. <div id="arrowOne" style="visibility: visible; display: inline;">
  515. <out:if test="not($readOnly)">
  516. <table border="0" cellpadding="0" cellspacing="0" style="width:60px;text-align:center;">
  517. <tr>
  518. <td align="center">
  519. <dp:columnButtonGroup align="center" width="40">
  520. <dp:columnButton>
  521. <a href="javascript:switchColumns(document.pform.m_mp_col1sort, document.pform.m_mp_col2sort, firstColumnOptionList, secondColumnOptionList, document.pform.m_mp_firstColumnWidth, document.pform.m_mp_secondColumnWidth)">
  522. <img height="18" width="18" border="0" src="{'{$image_root}'}move_swap.gif">
  523. <out:attribute name="alt"><xts:string id="IDS_NEW_PAGE_LAYOUT_SWAP_COLUMNS"/></out:attribute>
  524. </img>
  525. </a>
  526. </dp:columnButton>
  527. </dp:columnButtonGroup>
  528. </td>
  529. </tr>
  530. <tr>
  531. <td height="50"/>
  532. </tr>
  533. <tr>
  534. <td align="center">
  535. <dp:columnButtonGroup align="center" width="40">
  536. <dp:columnButton>
  537. <a href="javascript:moveColumns(document.pform.m_mp_col1sort, document.pform.m_mp_col2sort, firstColumnOptionList, secondColumnOptionList)">
  538. <img height="18" width="18" border="0" src="{'{$image_root}'}move_right.gif">
  539. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_RIGHT"/></out:attribute>
  540. </img>
  541. </a>
  542. </dp:columnButton>
  543. <dp:columnButton>
  544. <a href="javascript:moveColumns(document.pform.m_mp_col2sort, document.pform.m_mp_col1sort, secondColumnOptionList, firstColumnOptionList)">
  545. <img height="18" width="18" border="0" src="{'{$image_root}'}move_left.gif">
  546. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_LEFT"/></out:attribute>
  547. </img>
  548. </a>
  549. </dp:columnButton>
  550. <dp:columnButton>
  551. <a href="javascript:moveAllColumns(document.pform.m_mp_col1sort, document.pform.m_mp_col2sort, firstColumnOptionList, secondColumnOptionList)">
  552. <img height="18" width="18" border="0" src="{'{$image_root}'}move_all_right.gif">
  553. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_ALL_RIGHT"/></out:attribute>
  554. </img>
  555. </a>
  556. </dp:columnButton>
  557. <dp:columnButton>
  558. <a href="javascript:moveAllColumns(document.pform.m_mp_col2sort, document.pform.m_mp_col1sort, secondColumnOptionList, firstColumnOptionList)">
  559. <img height="18" width="18" border="0" src="{'{$image_root}'}move_all_left.gif">
  560. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_ALL_LEFT"/></out:attribute>
  561. </img>
  562. </a>
  563. </dp:columnButton>
  564. </dp:columnButtonGroup>
  565. </td>
  566. </tr>
  567. <tr>
  568. <td height="50"/>
  569. </tr>
  570. </table>
  571. </out:if>
  572. </div>
  573. <!-- ========== Column 2 ============= -->
  574. <!-- ================================= -->
  575. <div id="two" style="visibility: visible; display: inline;">
  576. <table class="pageEditorPortletColumn">
  577. <tr><td>
  578. <dp:list>
  579. <dp:section>
  580. <dp:input>
  581. <dp:section1>
  582. <xts:string id="IDS_MP_COLUMN_WIDTH"/>
  583. </dp:section1>
  584. <dp:section2>
  585. <utml:select name="m_mp_secondColumnWidth" onchange="changeSize(this, document.pform.m_mp_col2sort)">
  586. <utml:default-value>
  587. <out:choose>
  588. <out:when test="$mp_second_column_width > 0">
  589. <out:value-of select="$mp_second_column_width"/>
  590. </out:when>
  591. <out:otherwise>30</out:otherwise>
  592. </out:choose>
  593. </utml:default-value>
  594. <out:if test="$readOnly">
  595. <out:attribute name="disabled">disabled</out:attribute>
  596. </out:if>
  597. <xsl:copy-of select="$colWidthOptions"/>
  598. </utml:select>
  599. </dp:section2>
  600. </dp:input>
  601. </dp:section>
  602. <dp:section>
  603. <out:choose>
  604. <out:when test="$canTraverse">
  605. <cf:sortList class="sortSelectContainer" mode="mypages" name="m_mp_col2sort" colspan="2" form="pform" wide="false" array="secondColumnOptionList" size="12"
  606. onClick="unSelectOptions(document.pform.m_mp_col1sort);unSelectOptions(document.pform.m_mp_col3sort);">
  607. <cf:readOnlyFlag>$readOnly</cf:readOnlyFlag>
  608. <cf:initContent>
  609. <out:for-each select="$layout/column[2]/portlet">
  610. <utml:option>
  611. <out:attribute name="value"><out:value-of select="(position() - 1)"/></out:attribute>
  612. <out:value-of select="/root/portletNames/portlet[./searchPath = /root/env/param[@name = concat('m_mp_portlet_', current()/@id)]]/name"/>
  613. </utml:option>
  614. </out:for-each>
  615. </cf:initContent>
  616. <cf:sortAction>
  617. <a href="javascript:addPortlet('2')"><xts:string id="IDS_COMMAND_ADD"/></a>
  618. &#160;&#160;
  619. <a href="javascript:removePortlet('m_mp_col2sort')"><xts:string id="IDS_REMOVE"/></a>
  620. </cf:sortAction>
  621. </cf:sortList>
  622. </out:when>
  623. <out:otherwise>
  624. <xsl:call-template name="accessDenied"/>
  625. </out:otherwise>
  626. </out:choose>
  627. </dp:section>
  628. </dp:list>
  629. </td></tr>
  630. </table>
  631. </div>
  632. <div id="arrowTwo" style="visibility: visible; display: inline;">
  633. <out:if test="not($readOnly)">
  634. <table border="0" cellpadding="0" cellspacing="0" style="width:60px;text-align:center;">
  635. <tr>
  636. <td align="center">
  637. <dp:columnButtonGroup align="center" width="40">
  638. <dp:columnButton>
  639. <a href="javascript:switchColumns(document.pform.m_mp_col2sort, document.pform.m_mp_col3sort, secondColumnOptionList, thirdColumnOptionList, document.pform.m_mp_secondColumnWidth, document.pform.m_mp_thirdColumnWidth)">
  640. <img height="18" width="18" border="0" src="{'{$image_root}'}move_swap.gif">
  641. <out:attribute name="alt"><xts:string id="IDS_NEW_PAGE_LAYOUT_SWAP_COLUMNS"/></out:attribute>
  642. </img>
  643. </a>
  644. </dp:columnButton>
  645. </dp:columnButtonGroup>
  646. </td>
  647. </tr>
  648. <tr>
  649. <td height="50"/>
  650. </tr>
  651. <tr>
  652. <td align="center">
  653. <dp:columnButtonGroup align="center" width="40">
  654. <dp:columnButton>
  655. <a href="javascript:moveColumns(document.pform.m_mp_col2sort, document.pform.m_mp_col3sort, secondColumnOptionList, thirdColumnOptionList)">
  656. <img height="18" width="18" border="0">
  657. <out:attribute name="src"><out:value-of select="$image_root"/>move_right.gif<out:text/></out:attribute>
  658. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_RIGHT"/></out:attribute>
  659. </img>
  660. </a>
  661. </dp:columnButton>
  662. <dp:columnButton>
  663. <a href="javascript:moveColumns(document.pform.m_mp_col3sort, document.pform.m_mp_col2sort, thirdColumnOptionList, secondColumnOptionList)">
  664. <img height="18" width="18" border="0">
  665. <out:attribute name="src"><out:value-of select="$image_root"/>move_left.gif<out:text/></out:attribute>
  666. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_LEFT"/></out:attribute>
  667. </img>
  668. </a>
  669. </dp:columnButton>
  670. <dp:columnButton>
  671. <a href="javascript:moveAllColumns(document.pform.m_mp_col2sort, document.pform.m_mp_col3sort, secondColumnOptionList, thirdColumnOptionList)">
  672. <img height="18" width="18" border="0">
  673. <out:attribute name="src"><out:value-of select="$image_root"/>move_all_right.gif<out:text/></out:attribute>
  674. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_ALL_RIGHT"/></out:attribute>
  675. </img>
  676. </a>
  677. </dp:columnButton>
  678. <dp:columnButton>
  679. <a href="javascript:moveAllColumns(document.pform.m_mp_col3sort, document.pform.m_mp_col2sort, thirdColumnOptionList, secondColumnOptionList)">
  680. <img height="18" width="18" border="0">
  681. <out:attribute name="src"><out:value-of select="$image_root"/>move_all_left.gif<out:text/></out:attribute>
  682. <out:attribute name="alt"><xts:string id="IDS_MP_MOVE_ALL_LEFT"/></out:attribute>
  683. </img>
  684. </a>
  685. </dp:columnButton>
  686. </dp:columnButtonGroup>
  687. </td>
  688. </tr>
  689. <tr>
  690. <td height="50"/>
  691. </tr>
  692. </table>
  693. </out:if>
  694. </div>
  695. <!-- ========== Column 3 ============= -->
  696. <!-- ================================= -->
  697. <div id="three" style="visibility: visible; display: inline;">
  698. <table class="pageEditorPortletColumn">
  699. <tr><td>
  700. <dp:list>
  701. <dp:section>
  702. <dp:input>
  703. <dp:section1>
  704. <xts:string id="IDS_MP_COLUMN_WIDTH"/>
  705. </dp:section1>
  706. <dp:section2>
  707. <utml:select name="m_mp_thirdColumnWidth" onchange="changeSize(this, document.pform.m_mp_col3sort)">
  708. <utml:default-value>
  709. <out:choose>
  710. <out:when test="$mp_third_column_width > 0">
  711. <out:value-of select="$mp_third_column_width"/>
  712. </out:when>
  713. <out:otherwise>30</out:otherwise>
  714. </out:choose>
  715. </utml:default-value>
  716. <out:if test="$readOnly">
  717. <out:attribute name="disabled">disabled</out:attribute>
  718. </out:if>
  719. <xsl:copy-of select="$colWidthOptions"/>
  720. </utml:select>
  721. </dp:section2>
  722. </dp:input>
  723. </dp:section>
  724. <dp:section>
  725. <out:choose>
  726. <out:when test="$canTraverse">
  727. <cf:sortList class="sortSelectContainer" mode="mypages" name="m_mp_col3sort" form="pform" array="thirdColumnOptionList" wide="false" size="12"
  728. onClick="unSelectOptions(document.pform.m_mp_col1sort);unSelectOptions(document.pform.m_mp_col2sort);">
  729. <cf:readOnlyFlag>$readOnly</cf:readOnlyFlag>
  730. <cf:initContent>
  731. <out:for-each select="$layout/column[3]/portlet">
  732. <utml:option>
  733. <out:attribute name="value"><out:value-of select="(position() - 1)"/></out:attribute>
  734. <out:value-of select="/root/portletNames/portlet[./searchPath = /root/env/param[@name = concat('m_mp_portlet_', current()/@id)]]/name"/>
  735. </utml:option>
  736. </out:for-each>
  737. </cf:initContent>
  738. <cf:sortAction>
  739. <a href="javascript:addPortlet('3')"><xts:string id="IDS_COMMAND_ADD"/></a>
  740. &#160;&#160;
  741. <a href="javascript:removePortlet('m_mp_col3sort')"><xts:string id="IDS_REMOVE"/></a>
  742. </cf:sortAction>
  743. </cf:sortList>
  744. </out:when>
  745. <out:otherwise>
  746. <xsl:call-template name="accessDenied"/>
  747. </out:otherwise>
  748. </out:choose>
  749. </dp:section>
  750. </dp:list>
  751. </td></tr>
  752. </table>
  753. </div>
  754. </dp:section>
  755. </dp:list>
  756. </lyt:section>
  757. </lyt:layout>
  758. <lyt:layout style="1" border="no" title="IDS_NEW_PAGE_LAYOUT_OPTIONS">
  759. <lyt:section>
  760. <dp:choice>
  761. <dp:section1>
  762. <utml:input type="checkbox" name="m_mp_flexibleColWidth" value="true"/>
  763. </dp:section1>
  764. <dp:section2>
  765. <xts:string id="IDS_NEW_PAGE_FLEXIBLE_COLUMN_WIDTH"/>
  766. </dp:section2>
  767. </dp:choice>
  768. </lyt:section>
  769. </lyt:layout>
  770. </div>
  771. <!-- command -->
  772. <utml:input type="hidden" name="m_mp_cmd" utml:update="false"/>
  773. <utml:input type="hidden" name="controller_state" value="" utml:update="false"/>
  774. <utml:input type="hidden" name="firstColumn"/>
  775. <utml:input type="hidden" name="secondColumn"/>
  776. <utml:input type="hidden" name="thirdColumn"/>
  777. <script language="javascript">
  778. initPage();
  779. </script>
  780. </xsl:template>
  781. <xsl:template match="rdb:newPETest">
  782. <script language="javascript">
  783. function getPageletXML()
  784. {
  785. document.pform.pagexml.value = document.getElementById('cpsPageXML').value;
  786. }
  787. </script>
  788. <p/>
  789. <textarea style="width:100%;height:300px;padding:10px;color:red;margin:20px;" id="cpsPageXML">
  790. <out:value-of select="key('env-param', 'pagexml')" disable-output-escaping="yes"/>
  791. </textarea>
  792. </xsl:template>
  793. <xsl:template match="rdb:newPE">
  794. <!-- only show the editor if creating a new page or if you are editing a page when you have at least read and traverse and execute and write privleges -->
  795. <out:variable name="pagePermissions" select="/root/cm:queryResponse/cm:queryReply[1]/cm:pagelet/cm:permissions"/>
  796. <out:choose>
  797. <out:when test="(not(/root/cm:queryResponse/cm:queryReply)) or (contains($pagePermissions,'traverse') and (contains($pagePermissions,'read')))">
  798. <script>
  799. var contextPath="<out:value-of select="$webRoot"/>";
  800. var GATEWAY_URI="<out:value-of select="$gateway"/>/myportal"; <!-- TODO: myportal is hard-coded -->
  801. var sGateway="<out:value-of select="$gateway"/>";
  802. </script>
  803. <script src="{ '{ $gateway }' }/dashboard/messages/messages/pfmessages?section=JS"/>
  804. <script src="{ '{ $webRoot }' }/dojo16/dojo/dojo.js"/>
  805. <script src="{ '{ $webRoot }' }/fragments/xdojo/core.js"/>
  806. <script src="{ '{ $webRoot }' }/fragments/fragments.js"/>
  807. <script src="{ '{ $webRoot }' }/common/framework/validator/CValidator.js"/>
  808. <script src="{ '{ $webRoot }' }/fragments/uicommon.js"/>
  809. <script src="{ '{ $webRoot }' }/fragments/layout.js"/>
  810. <script>
  811. var myfragRoot = null;
  812. var myfragTree = null;
  813. var myfragEditor = null;
  814. var divTree = null;
  815. var divEditor = null;
  816. var app_waitdlg = null;
  817. function getPageletXML()
  818. {
  819. document.pform.pagexml.value = LAYOUT_EDITOReditorpage.serialize();
  820. }
  821. function fragContentDiv(sId)
  822. {
  823. var div = document.createElement("DIV");
  824. div.id = sId;
  825. div.className = "boxBody";
  826. div.style.position = "absolute";
  827. div.style.width = "100%";
  828. div.style.height = "400px";
  829. //div.style.border = "1px solid black";
  830. div.style.overflow = "auto";
  831. document.body.appendChild(div);
  832. return div;
  833. }
  834. function fragResize()
  835. {
  836. _F_log("I", "resize");
  837. var viewArea = $("myfragdisplay");
  838. var cy = document.body.clientHeight;
  839. cy = Math.max(cy - 150, 400);
  840. xHeight(viewArea, cy);
  841. var x = xPageX(viewArea);
  842. var y = xPageY(viewArea) + 10;
  843. var w = xWidth(viewArea);
  844. var h = xHeight(viewArea) - 20;
  845. var wl = w * 30 / 100;
  846. var wr = w * 70 / 100;
  847. if (divTree != null){
  848. xMoveTo(divTree, x, y);
  849. xResizeTo(divTree, wl, h);
  850. xShow(divTree);
  851. }else{
  852. wl=0;
  853. wr=w;
  854. }
  855. xMoveTo(divEditor, x + wl, y);
  856. xResizeTo(divEditor, wr, h);
  857. xShow(divEditor);
  858. if (myfragEditor.onresize)
  859. myfragEditor.onresize();
  860. }
  861. function fragInit()
  862. {
  863. <out:variable name="hide-string"><xts:string id="IDS_FRAG_HIDE"/></out:variable>
  864. ui_wait.prototype.template = "\&lt;table cellpadding=\"0\" cellspacing=\"0\"\&gt;\&lt;tr\&gt;\&lt;td\&gt;" +
  865. "\&lt;img src=\"$WEB$/fragments/common/images/loading_timed.gif\" border=\"0\" align=\"middle\" \&gt;" +
  866. "\&lt;/td\&gt;\&lt;td nowrap\&gt;&#160;" +
  867. "<xts:string id="IDS_FRAG_WAIT_MESSAGE" encode="javascript"/>" +
  868. "&#160;&#160;<xts:string id="IDS_FRAG_HIDE_MESSAGE" encode="javascript"><xts:param name="0">\&lt;a id=\"_THIS_hide\"\&gt;<out:value-of select="$hide-string"/>\&lt;/a\&gt;</xts:param></xts:string>" +
  869. "\&lt;/td\&gt;\&lt;/tr\&gt;\&lt;/table\&gt;";
  870. app_waitdlg = new ui_wait({id:"wait"});
  871. app_waitdlg.create();
  872. ui_error.prototype.template = "\&lt;div id=\"_THIS_errormsg\"\&gt;\&lt;/div\&gt;\&lt;div\&gt;" +
  873. "\&lt;a id=\"_THIS_error_showdetails\"\&gt;<xts:string id="IDS_FRAG_ERROR_SHOW_DETAILS" encode="javascript"/>\&lt;/a\&gt; | " +
  874. "\&lt;a id=\"_THIS_error_retry\"\&gt;<xts:string id="IDS_FRAG_ERROR_RETRY" encode="javascript"/>\&lt;/a\&gt; | " +
  875. "<xts:string id="IDS_FRAG_HIDE_MESSAGE" encode="javascript"><xts:param name="0">\&lt;a id=\"_THIS_error_hide\"\&gt;<out:value-of select="$hide-string"/>\&lt;/a\&gt;</xts:param></xts:string>" +
  876. "\&lt;/div\&gt;";
  877. // dummy root
  878. myfragRoot = new fragment("/", "LAYOUT_EDITOR");
  879. myfragRoot.setOnloadHandler(ui_init);
  880. _F_init();
  881. var isReadOnly = <out:value-of select="(/root/cm:queryResponse/cm:queryReply) and not(contains($pagePermissions,'write'))"/>;
  882. divEditor = fragContentDiv("LAYOUT_EDITOReditorcontent");
  883. if (!isReadOnly)
  884. divTree = fragContentDiv("LAYOUT_EDITORtreecontent");
  885. myfragEditor = new fragment("/fragments/layout/layoutref.xml", "LAYOUT_EDITOReditor");
  886. var params = "pagexml=<out:value-of select="xtsext:urlencode(key('env-param', 'pagexml'))" disable-output-escaping="yes"/>";
  887. params += "&amp;id=<out:value-of select="xtsext:urlencode(/root/cm:queryResponse/cm:queryReply[1]/cm:pagelet/cm:storeID)"/>";
  888. if (isReadOnly)
  889. params+="&amp;readonly=true";
  890. myfragEditor.retrieve(params);
  891. if (!isReadOnly){
  892. myfragTree = new fragment("/fragments/layout/portletsref.xml", "LAYOUT_EDITORtree");
  893. myfragTree.retrieve();
  894. }
  895. fragResize();
  896. xAddEventListener(window, "resize", fragResize);
  897. }
  898. xAddEventListener(window, "load", fragInit);
  899. </script>
  900. <div id="myfragdisplay" style="width: 100%; height: 400px;"/>
  901. </out:when>
  902. <out:otherwise>
  903. <script>
  904. function getPageletXML()
  905. {
  906. //nothing need be done here as in this case there is no fragment
  907. }
  908. </script>
  909. <p class="objectNoneFound">
  910. <xts:string id="IDS_NO_TRAVERSE_PAGELET"/>
  911. </p>
  912. </out:otherwise>
  913. </out:choose>
  914. </xsl:template>
  915. <xsl:template name="accessDenied">
  916. <div style="border:1px #cccccc inset;width:200px;height:200px;text-align:center;vertical-align:middle;padding:10px;">
  917. <xts:string id="IDS_NO_TRAVERSE_CONTAINER"/>
  918. </div>
  919. </xsl:template>
  920. <xsl:template match="*">
  921. <xsl:copy>
  922. <xsl:copy-of select="@*"/>
  923. <xsl:apply-templates/>
  924. </xsl:copy>
  925. </xsl:template>
  926. </xsl:stylesheet>