render_recent_versions_titan.xslt 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  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, 2014
  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:pf="http://developer.cognos.com/schemas/xts/pf"
  15. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  16. xmlns:lyt="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/layout/"
  17. xmlns:dp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/presentation/"
  18. xmlns:df="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/framework/"
  19. xmlns:cp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/presentation/"
  20. xmlns:utml="http://developer.cognos.com/schemas/xts/logicsheet/xslt/formlogic/"
  21. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  22. xmlns:op="http://developer.cognos.com/schemas/xts/op"
  23. xmlns:dv="http://developer.cognos.com/schemas/xts/dv"
  24. xmlns:xts="http://developer.cognos.com/schemas/xts/" exclude-result-prefixes="xsl pf xts xtsext lyt dp df cp utml op dv">
  25. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
  26. <pf:variables/>
  27. <dv:variables/>
  28. <xsl:variable name="lang-filter" select="key('env-param', 'cur_lang')"/>
  29. <xsl:variable name="mname" select="'outputs.xts'"/>
  30. <!-- Need to honour reportVersionPath if outputs is called from view/view_details, and m_obj is not correct when viewing a 'save report as reportView' -->
  31. <xsl:variable name="isReportVersionPath" select="string(/root/env/param[@name= 'reportVersionPath']) != ''"/>
  32. <xsl:variable name="objectName">
  33. <xsl:choose>
  34. <xsl:when test="$isReportVersionPath"><xsl:value-of select="/root/cm:queryResponse/cm:queryReply/*/cm:parent/*/cm:defaultName"/></xsl:when>
  35. <xsl:otherwise><xsl:value-of select="/root/cm:queryResponse/cm:queryReply/*/cm:defaultName"/></xsl:otherwise>
  36. </xsl:choose>
  37. </xsl:variable>
  38. <xsl:variable name="dialogDescription">
  39. <xsl:choose>
  40. <xsl:when test="/root/cm:queryResponse/cm:queryReply/*/cm:objectClass = 'document'">
  41. <xts:string id="IDS_DOCUMENT_PREVIOUS_VERSION_INTRO"/>
  42. </xsl:when>
  43. <xsl:otherwise>
  44. <xts:string id="IDS_PREVIOUS_VERSION_INTRO"/>
  45. </xsl:otherwise>
  46. </xsl:choose>
  47. </xsl:variable>
  48. <xsl:variable name="browserTitle">
  49. <xsl:choose>
  50. <xsl:when test="/root/cm:queryResponse/cm:queryReply/*/cm:objectClass = 'document'">
  51. <xts:string id="IDS_DOCUMENT_PREVIOUS_VERSION_TITLE">
  52. <xts:param name="objectName">
  53. <span lang="{$contentLocale}"><xsl:value-of select="xtsext:enforceBTD($objectName, $baseTextDirection, $productLocale, boolean($isBidiEnabled='true'))"/></span>
  54. </xts:param>
  55. </xts:string>
  56. </xsl:when>
  57. <xsl:otherwise>
  58. <xts:string id="IDS_PREVIOUS_VERSION_TITLE">
  59. <xts:param name="objectName">
  60. <span lang="{$contentLocale}"><xsl:value-of select="xtsext:enforceBTD($objectName, $baseTextDirection, $productLocale, boolean($isBidiEnabled='true'))"/></span>
  61. </xts:param>
  62. </xts:string>
  63. </xsl:otherwise>
  64. </xsl:choose>
  65. </xsl:variable>
  66. <xsl:variable name="objectID">
  67. <xsl:choose>
  68. <xsl:when test="$isReportVersionPath"><xsl:value-of select="/root/cm:queryResponse/cm:queryReply/*/cm:parent/*/cm:storeID"/></xsl:when>
  69. <xsl:otherwise><xsl:value-of select="/root/cm:queryResponse/cm:queryReply/*/cm:storeID"/></xsl:otherwise>
  70. </xsl:choose>
  71. </xsl:variable>
  72. <xsl:variable name="portal.render.outputpage.asoftime" select="/root/configuration/property[@name='portal.render.outputpage.asoftime'] = 'true'"/>
  73. <xsl:template match="/root">
  74. <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text><dp:page longTitle="$browserTitle" dp:kbA11y="true" >
  75. <dp:meta>
  76. <pf:meta/>
  77. <link rel="stylesheet" type="text/css" href="{$webRoot}/dojo16/dijit/themes/tundra/pstundra.css" />
  78. <link rel="stylesheet" type="text/css" href="{$webRoot}/dojo16/dojox/grid/resources/pstundraGrid.css" />
  79. <link rel="stylesheet" type="text/css" href="{$webRoot}/skins/{$user_skin}/portal/pager.css" />
  80. </dp:meta>
  81. <dp:script>
  82. <pf:help context="HID_VIEW_REPORT_VERSION"/>
  83. <xsl:variable name="startingVersionsPagerURL">
  84. <xsl:value-of select="$gateway"/>
  85. <xsl:text>/atom/cm/id/</xsl:text>
  86. <xsl:value-of select="$objectID"/>
  87. <xsl:text>?filter=content-version</xsl:text>
  88. <xsl:text>&amp;containingClass=</xsl:text>
  89. <xsl:value-of select="key('env-param', 'm_class')"/>
  90. <xsl:text>&amp;json</xsl:text>
  91. </xsl:variable>
  92. <script type="text/javascript">
  93. <xsl:value-of select="xtsext:cafaction( 'get_jsconfig','' )"/>
  94. var versionsPager, outputsPager;
  95. var versionsPagerURL = '<xsl:value-of select="xtsext:javascriptencode($startingVersionsPagerURL)"/>';
  96. var productLocale = '<xsl:value-of select="xtsext:javascriptencode($productLocale)"/>';
  97. var contentLocale = '<xsl:value-of select="xtsext:javascriptencode($contentLocale)"/>';
  98. var pagerWebcontent = '<xsl:value-of select="xtsext:javascriptencode($webRoot)"/>';
  99. var pagerGateway = '<xsl:value-of select="xtsext:javascriptencode($gateway)"/>';
  100. var pagerSkin = '<xsl:value-of select="xtsext:javascriptencode($user_skin)"/>';
  101. var delFormSubmit = "<xsl:value-of select="concat($app, '/submit.xts')"/>";
  102. var sDelNoSel = '<xts:string id="IDS_ERR_DELETE_NO_SELECTION" encode="javascript"/>';
  103. var sDelAllObj = '<xts:string id="IDS_PREVIOUS_VERSION_DOCUMENT_DELETE_ERROR" encode="javascript"/>';
  104. var sDelConfirm = '<xts:string id="IDS_CONF_DELETE_MULTI" encode="javascript"/>';
  105. var sVersionsPagerName = '<xts:string id="IDS_PREVIOUS_VERSION_VERSIONS" encode="javascript"/>';
  106. var sVersionsReportFormat = '<xts:string id="IDS_PERS_TAB_GENERAL_FORMAT" encode="javascript"/>';
  107. var sAsOfTime = '<xts:string id="IDS_PREVIOUS_VERSION_ASOFTIME" encode="javascript"/>';
  108. var sAllLangs = '<xts:string id="IDS_PREVIOUS_VERSION_ALL_LANGUAGES" encode="javascript"/>';
  109. var sHeadingFormats = '<xts:string id="IDS_PREVIOUS_VERSION_FORMATS" encode="javascript"/>';
  110. var sHeadingLangs = '<xts:string id="IDS_PREVIOUS_VERSION_LANGUAGES" encode="javascript"/>';
  111. var sHeadingActions = '<xts:string id="IDS_HEADING_ACTIONS" encode="javascript"/>';
  112. var sActionDelete = '<xts:string id="IDS_ACT_DELETE" encode="javascript"/>';
  113. var renderAsOfTime = '<xsl:value-of select="$portal.render.outputpage.asoftime"/>';
  114. //need to setup a javascript object to map locale translated names to locale shortforms
  115. var locales = {
  116. '': sAllLangs
  117. <xsl:for-each select="/root/config/param[@name='locale']/locale[@type='contentLocale']">
  118. ,'<xsl:value-of select="id"/>': '<xsl:value-of select="xtsext:javascriptencode(displayName)"/>'
  119. </xsl:for-each>
  120. };
  121. var djConfig = {
  122. locale: productLocale
  123. };
  124. </script>
  125. <script type="text/javascript" src="{$webRoot}/dojo16/dojo/dojo.js"></script>
  126. <script type="text/javascript" src="{$webRoot}/dojo16/dojo/psdojo.js"></script>
  127. <script type="text/javascript">
  128. var reportsOutputPagerLabel = "<xts:string id="IDS_PROP_A11Y_REPORT_OUTPUT_LABEL" encode="javascript"/>";
  129. var reportsVersionsPagerLabel = "<xts:string id="IDS_PROP_A11Y_REPORT_VERSION_LABEL" encode="javascript"/>";
  130. <![CDATA[
  131. dojo.registerModulePath('ps', '../../ps/portal/js/dojo/ps');
  132. dojo.require('ps.i18n');
  133. dojo.require('ps.pager');
  134. dojo.addOnLoad(function() {
  135. ps.i18n.setLocale(productLocale);
  136. var isDropdownSelected = false;
  137. var versionsPagerLayout = [];
  138. versionsPagerLayout[0] =
  139. {
  140. field: 'title',
  141. name: sVersionsPagerName,
  142. width: '50%',
  143. sortable: true,
  144. sortField: 'name',
  145. formatter: function(data) {
  146. return (isBidiEnabled ? bidi.btdInjectUCCIntoStr(data._text, "auto") : data._text);
  147. }
  148. };
  149. if (renderAsOfTime == 'true') {
  150. versionsPagerLayout[1] =
  151. {
  152. field: 'cm$asOfDate',
  153. name: sAsOfTime,
  154. width: '50%',
  155. formatter: function(data) {
  156. return (isBidiEnabled ? bidi.btdInjectUCCIntoStr(data, "auto") : data);
  157. }
  158. };
  159. }
  160. var outputsPagerLayout = [
  161. {
  162. field: 'title',
  163. name: sHeadingFormats,
  164. width: '45%',
  165. formatter: function(data, index) {
  166. var entry = outputsPager.getEntry(index);
  167. var downloadLink = outputsPager.getEntryLink(entry, 'alternate').href;
  168. var iconLink = outputsPager.getEntryLink(entry, 'icon').href;
  169. var tooltip = data._text;
  170. if (tooltip == 'XHTML') {
  171. var storeIDPath = entry.cm$storeID;
  172. var storeIDAsString = ''+storeIDPath;
  173. var outputID = storeIDAsString.substring(9,42);
  174. downloadLink = pagerGateway + '/repository/sid/cm/oid/'+outputID+'/content/mht/content';
  175. }
  176. var burstKey = entry.cm$burstKeyDisplayString[0];
  177. var alignStyle;
  178. if(document.body.dir=="rtl"){
  179. alignStyle= "float:right";
  180. } else {
  181. alignStyle= "float:left";
  182. }
  183. var markup = '<div style="'+ alignStyle +';white-space:nowrap;';
  184. if (burstKey !== ""){
  185. markup += 'width: 40%';
  186. }
  187. markup += '">'
  188. markup += '<a href="#" onclick="retrieveOutputFor(event, ';
  189. markup += "'" + downloadLink + "'";
  190. markup += ')" onkeypress="javascript:if (event.keyCode==13 || event.keyCode==32 || event.charCode==32){retrieveOutputFor(event, ';
  191. markup += "'" + downloadLink + "'";
  192. markup += ');return false;} return true;">';
  193. markup += '<img height="16" width="16" src="' + iconLink + '" title="' + tooltip + '" alt="' + sVersionsReportFormat + ' ' + tooltip +'" style="vertical-align:middle;margin-right: 4px;" />';
  194. markup += '</a>';
  195. markup += '<a href="#" onclick="retrieveOutputFor(event, ';
  196. markup += "'" + downloadLink + "'";
  197. markup += ')" onkeypress="javascript:if (event.keyCode==13 || event.keyCode==32 || event.charCode==32){retrieveOutputFor(event, ';
  198. markup += "'" + downloadLink + "'";
  199. markup += ');return false;} return true;">' + tooltip + '</a></div>';
  200. if (burstKey !== ""){
  201. markup += "<div style='float: left;width: 60%'>" + burstKey + "</div>";
  202. }
  203. return markup;
  204. }
  205. },
  206. {
  207. field: 'cm$locale',
  208. name: sHeadingLangs,
  209. width: '35%',
  210. filterRel: 'localeselection',
  211. filterSet: locales,
  212. filterTokens: ['locale'],
  213. filterUIHook: function(value) {
  214. contentLocale = value;
  215. isDropdownSelected = true;
  216. },
  217. formatter: function(data, index) {
  218. return locales[data];
  219. }
  220. },
  221. {
  222. field: 'id',
  223. name: sHeadingActions,
  224. width: '20%',
  225. formatter: function(data, index) {
  226. var entry = outputsPager.getEntry(index);
  227. var link = outputsPager.getEntryLink(entry, 'action.download');
  228. var markup = '';
  229. if (link) {
  230. var downloadLink = link.href;
  231. var iconLink = link.ps$link.href;
  232. var tooltip = link.ps$tooltip._text;
  233. markup = '<a href="' + downloadLink + '"';
  234. markup += ' onkeypress="javascript:if (event.keyCode==13 || event.keyCode==32 || event.charCode==32){window.location = ';
  235. markup += "'" + downloadLink + "'";
  236. markup += ';return false;} return true;">';
  237. markup += '<img height="16" width="16" src="' + iconLink + '" title="' + tooltip + '" alt="' + tooltip + '" style="margin-right: 4px;float:left;" />'
  238. markup += '</a>';
  239. }
  240. return markup;
  241. }
  242. }
  243. ];
  244. var actions = [
  245. {
  246. text: sActionDelete,
  247. onclick: function(entries) {
  248. // ask user to select an entry first before clicking delete
  249. if (entries.length === 0) {
  250. alert(sDelNoSel);
  251. return;
  252. }
  253. // for document versions: disallow deletion of every single version
  254. // otherwise the document object becomes useless
  255. if (entries[0].cm$objectClass && entries[0].cm$objectClass[0] === 'documentVersion') {
  256. if (versionsPager.isOnlyPage() && versionsPager.getRowCount() === entries.length) {
  257. alert(sDelAllObj);
  258. return;
  259. }
  260. }
  261. if (confirm(sDelConfirm) === true) {
  262. var inputs = [];
  263. // create input elements for each checked entry with the appropriate value
  264. for (var i = 0, len = entries.length; i < len; i++) {
  265. inputs[i] = dojo.create('input', {
  266. id: 'checkbox_' + i,
  267. name: 'checkbox_' + i,
  268. value: encodeURIComponent(entries[i].cm$searchPath),
  269. type: 'hidden'
  270. });
  271. dojo.place(inputs[i], document.pform, 'last');
  272. }
  273. document.pform.ifrmcmd.value = 'delete';
  274. document.pform.vrsn_del.value = 'true';
  275. document.pform.m.value = delFormSubmit;
  276. dojo.xhrPost({
  277. form: document.pform,
  278. load: function(data) {
  279. var errorMatch = data.match(/\<ERROR_MSG\>([^>]*)\<\/ERROR_MSG\>/);
  280. if (errorMatch) {
  281. //If multi-byte language js alert displays in utf-8 so grab innerHTML
  282. var d = document.createElement('div');
  283. d.innerHTML=errorMatch[1];
  284. alert(d.innerHTML);
  285. } else {
  286. versionsPager.getData(versionsPager.currentURL);
  287. }
  288. },
  289. handle: function() {
  290. // delete the inputs and restore the form
  291. for (var i = 0, len = inputs.length; i < len; i++) {
  292. dojo.destroy(inputs[i]);
  293. }
  294. document.pform.ifrmcmd.value = '';
  295. document.pform.vrsn_del.value = '';
  296. }
  297. });
  298. }
  299. }
  300. }
  301. ];
  302. versionsPager = new ps.pager({
  303. pagerLabel: reportsVersionsPagerLabel,
  304. id: 'versionsPager',
  305. webcontent: pagerWebcontent,
  306. gateway: pagerGateway,
  307. skin: pagerSkin,
  308. url: versionsPagerURL,
  309. layoutSpec: versionsPagerLayout,
  310. initialRowSelect: true,
  311. checkable: true,
  312. actions: actions,
  313. rowAction: function(entry) {
  314. if (entry) {
  315. var outputLink = this.getEntryLink(entry, 'alternate').href + '&locale=' + contentLocale;
  316. outputsPager.getData(outputLink);
  317. }
  318. },
  319. postLoad: function(totalResults) {
  320. if (totalResults === 0) {
  321. outputsPager.clearData();
  322. }
  323. }
  324. }, 'versionsPager');
  325. outputsPager = new ps.pager({
  326. pagerLabel: reportsOutputPagerLabel,
  327. menuLabel: 'languagesLabel',
  328. id: 'outputsPager',
  329. webcontent: pagerWebcontent,
  330. gateway: pagerGateway,
  331. skin: pagerSkin,
  332. layoutSpec: outputsPagerLayout,
  333. rowSelectable: false,
  334. rowHighlightable: false,
  335. focusFirstCell: true,
  336. postLoad: function(totalResults) {
  337. var locale = this.getFilter('cm$locale')[0];
  338. if (totalResults === 0 && locale !== '' && isDropdownSelected === false) {
  339. this.filter('cm$locale', '');
  340. }
  341. }
  342. }, 'outputsPager');
  343. });
  344. ]]>
  345. </script>
  346. <script type="text/javascript">
  347. function changeTab(tab) {
  348. var form = document.pform;
  349. form.m.value = '<xsl:value-of select="$app"/>/outputs.xts';
  350. if (tab === 'recentVersions') {
  351. form.output_tab.value = '';
  352. form.submit();
  353. } else if (tab === 'oldVersions') {
  354. form.cur_lang.value = 'all';
  355. form.ps_nav_op.value = 'maintain';
  356. form.output_tab.value = 'arch';
  357. form.submit();
  358. }
  359. }
  360. function retrieveOutputFor(event, url) {
  361. var outputWindow = window.open(url, 'outputWindow', 'toolbar=no,location=yes,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=750,height=600');
  362. event.cancelBubble = 'true';
  363. if (event.stopPropagation) {
  364. event.stopPropagation();
  365. event.preventDefault();
  366. }
  367. return false;
  368. }
  369. </script>
  370. </dp:script>
  371. <utml:form name="pform" method="post" action="{$gateway}">
  372. <utml:input name="output_tab" type="hidden" value=""/>
  373. <utml:input name="cur_lang" type="hidden" value=""/>
  374. <xsl:if test="key('system-param', 'useReportLocaleInRVUI') = 'true'">
  375. <input name="lang" type="hidden" value=""/>
  376. </xsl:if>
  377. <utml:input name="ifrmcmd" type="hidden" value=""/>
  378. <utml:input name="ui.hide" type="hidden" value=""/>
  379. <utml:input name="ui.format" type="hidden" value=""/>
  380. <utml:input name="ui.action" type="hidden" value=""/>
  381. <utml:input name="ui.postBack" type="hidden" value=""/>
  382. <utml:input name="ui.object" type="hidden" value=""/>
  383. <utml:input name="ui.backURL" type="hidden" value=""/>
  384. <utml:input name="ui.name" type="hidden" value=""/>
  385. <utml:input name="run.outputLocale" type="hidden" value=""/>
  386. <utml:input name="s_recentversion" type="hidden" value=""/>
  387. <utml:input name="m_return" type="hidden" value=""/>
  388. <utml:input name="vrsn_del" type="hidden" value=""/>
  389. <utml:input name="recentvrsn_sel" type="hidden" value=""/>
  390. <utml:input name="method" type="hidden" value=""/>
  391. <utml:input name="reportVersionPath" type="hidden">
  392. <xsl:attribute name="value">
  393. <xsl:value-of select="string(key('env-param','reportVersionPath'))"/>
  394. </xsl:attribute>
  395. </utml:input>
  396. <utml:input name="recentActiveRow" type="hidden">
  397. <xsl:attribute name="value">
  398. <xsl:value-of select="string(key('env-param','recentActiveRow'))"/>
  399. </xsl:attribute>
  400. </utml:input>
  401. <dp:header dp:kbA11y="true">
  402. <dp:title>
  403. <xsl:copy-of select="$browserTitle"/>
  404. </dp:title>
  405. </dp:header>
  406. <dp:tabs>
  407. <cp:tabset>
  408. <cp:select>recentVersions</cp:select>
  409. <cp:tab name="recentVersions" position="start">
  410. <a href="#" onclick="javascript:changeTab('recentVersions');">
  411. <xsl:attribute name="onkeypress">javascript:if (event.keyCode==13 || event.keyCode==32 || event.charCode==32){this.onclick(); return false;}return true;</xsl:attribute>
  412. <xsl:text/><cp:label><xts:string id="IDS_PREVIOUS_VERSION_CURRENT_TAB"/></cp:label><xsl:text/>
  413. </a>
  414. </cp:tab>
  415. </cp:tabset>
  416. </dp:tabs>
  417. <dp:description>
  418. <xsl:value-of select="$dialogDescription"/>
  419. </dp:description>
  420. <lyt:layout style="2" lyt:kbA11y="true">
  421. <lyt:section>
  422. <xsl:variable name="verGroupLab"><xts:string id="IDS_PROP_A11Y_REPORT_VERSION_LABEL" encode="html"/></xsl:variable>
  423. <div style="padding: 3px" role="group" aria-label="{$verGroupLab}">
  424. <div role="application">
  425. <xsl:attribute name="aria-label"><xts:string id="IDS_PREVIOUS_VERSION_CURRENT_TAB_VERSIONS_GRID" encode="html"/></xsl:attribute>
  426. <div id="versionsPager"/>
  427. </div>
  428. </div>
  429. </lyt:section>
  430. <lyt:section>
  431. <xsl:variable name="outGroupLab"><xts:string id="IDS_PROP_A11Y_REPORT_OUTPUT_LABEL" encode="html"/></xsl:variable>
  432. <div style="padding: 3px" role="group" aria-label="{$outGroupLab}">
  433. <div role="application">
  434. <xsl:attribute name="aria-label"><xts:string id="IDS_PREVIOUS_VERSION_CURRENT_TAB_OUTPUTS_GRID" encode="html"/></xsl:attribute>
  435. <div id="outputsPager"/>
  436. </div>
  437. </div>
  438. </lyt:section>
  439. </lyt:layout>
  440. <dp:footer>
  441. <df:button df:id="IDS_CLOSE" df:style="back-url" df:kbA11y="true"/>
  442. </dp:footer>
  443. </utml:form>
  444. </dp:page>
  445. </xsl:template>
  446. </xsl:stylesheet>