select_languages.xts 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  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. <xts:morphlet xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/portal.xml, messages/portalRL.xml" includeConfig="true">
  13. <xts:block id="formlogic_init" type="exec" mode="interpret" processor="XSLT" path="/logicsheets/formlogic_init.xslt" nodelist="env,credential,system,http"/>
  14. <!--
  15. ===============================================================================================
  16. Create some morphlet variables.
  17. Since this morphlet is used both from the New Job wizard and in many other pages, determine if we are in a wizard and save
  18. that information in the DOM for use by other blocks.
  19. ===============================================================================================
  20. -->
  21. <xts:block id="create_morphlet_vars" type="exec" mode="interpret" processor="XSLT">
  22. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  23. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  24. <xsl:template match="root">
  25. <xsl:variable name="in-wizard">
  26. <xsl:choose>
  27. <xsl:when test="/root/env/param[@name = 'm_new_class'] and (/root/env/param[@name = 'm_new_class'] != '') ">
  28. <xsl:text>true</xsl:text>
  29. </xsl:when>
  30. <xsl:otherwise>
  31. <xsl:text>false</xsl:text>
  32. </xsl:otherwise>
  33. </xsl:choose>
  34. </xsl:variable>
  35. <!-- Append these variables in the input document. -->
  36. <xts:sequence>
  37. <xts:append>
  38. <morphlet>
  39. <variable name="in-wizard">
  40. <xsl:value-of select="$in-wizard"/>
  41. </variable>
  42. </morphlet>
  43. </xts:append>
  44. </xts:sequence>
  45. </xsl:template>
  46. </xsl:stylesheet>
  47. </xts:block>
  48. <!-- HTML output ======================================================= -->
  49. <xts:block id="format" mode="output" processor="XSLT" type="exec" dependency="formlogic_init create_morphlet_vars" mimeType="text/html">
  50. <!-- portal specific information -->
  51. <xts:logicsheet path="logicsheets/portal.xsl"/>
  52. <!-- get the new theme stuff -->
  53. <xts:logicsheet path="logicsheets/presentation/layout.xsl"/>
  54. <xts:logicsheet path="logicsheets/presentation/dialog/framework.xsl"/>
  55. <xts:logicsheet path="logicsheets/presentation/dialog/presentation.xsl"/>
  56. <xts:logicsheet path="logicsheets/presentation/controls/framework.xsl"/>
  57. <xts:logicsheet path="logicsheets/presentation/controls/presentation.xsl"/>
  58. <xts:logicsheet path="logicsheets/formlogic.xslt"/>
  59. <xts:logicsheet path="logicsheets/validation.xslt"/> <xts:logicsheet path="logicsheets/presentation/touch_up.xslt"/>
  60. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  61. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  62. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  63. xmlns:lyt="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/layout/"
  64. xmlns:dp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/presentation/"
  65. xmlns:cf="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/framework/"
  66. xmlns:cp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/presentation/"
  67. xmlns:df="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/framework/"
  68. xmlns:utml="http://developer.cognos.com/schemas/xts/logicsheet/xslt/formlogic/"
  69. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  70. xmlns:fault="http://developer.cognos.com/schemas/xts/portal/iFaultHandler/1/"
  71. xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  72. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  73. xmlns:faults="http://www.w3.org/2001/09/soap-faults"
  74. xmlns:cam="http://developer.cognos.com/schemas/CAM/AAA/1/"
  75. exclude-result-prefixes="xsl cm bus fault SOAP-ENV faults cam xtsext">
  76. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
  77. <!-- Global template variables -->
  78. <pf:variables/>
  79. <!-- time varibales needed for the calendar control -->
  80. <xsl:variable name="mname" select="'select_languages.xts'"/>
  81. <!-- start the output -->
  82. <xsl:template match="/root">
  83. <xsl:variable name="newJobString">
  84. <xts:string id="IDS_ADDENTRIES_TITLE_NEW_JOB"/>
  85. </xsl:variable>
  86. <xsl:variable name="browserTitle">
  87. <xsl:choose>
  88. <xsl:when test="/root/env/param[@name='report_name'] and /root/env/param[@name='report_name'] != ''">
  89. <xts:string id="IDS_SELECT_LANG_TITLE_JOBSTEP">
  90. <xts:param name="objectName">
  91. <xsl:choose>
  92. <xsl:when test=" /root/morphlet/variable[@name = 'in-wizard'] = 'true' ">
  93. <xsl:value-of select="$newJobString"/>
  94. </xsl:when>
  95. <xsl:otherwise>
  96. <span lang="{$contentLocale}"><xsl:value-of select="key('env-param', 'm_name')"/></span>
  97. </xsl:otherwise>
  98. </xsl:choose>
  99. </xts:param>
  100. <xts:param name="step_name">
  101. <span lang="{$contentLocale}"><xsl:value-of select="/root/env/param[@name='report_name']"/></span>
  102. </xts:param>
  103. </xts:string>
  104. </xsl:when>
  105. <xsl:otherwise>
  106. <xts:string id="IDS_SELECT_LANG_TITLE">
  107. <xts:param name="objectName">
  108. <xsl:choose>
  109. <xsl:when test=" /root/morphlet/variable[@name = 'in-wizard'] = 'true' ">
  110. <xsl:value-of select="$newJobString"/>
  111. </xsl:when>
  112. <xsl:otherwise>
  113. <span lang="{$contentLocale}"><xsl:value-of select="key('env-param', 'm_name')"/></span>
  114. </xsl:otherwise>
  115. </xsl:choose>
  116. </xts:param>
  117. </xts:string>
  118. </xsl:otherwise>
  119. </xsl:choose>
  120. </xsl:variable>
  121. <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text><dp:page longTitle="$browserTitle">
  122. <dp:meta>
  123. <pf:meta/> <!-- Standard meta tags -->
  124. </dp:meta>
  125. <pf:help context="HID_SELECT_RPT_LANG"/>
  126. <script language="javascript">
  127. // save the correct sort order from CM which takes the locale into account
  128. var masterSortArray = new Array();
  129. var i = 0;
  130. <xsl:for-each select="/root/config/param[@name='locale']/locale[@type='contentLocale']">
  131. masterSortArray[i] = "<xsl:value-of select="xtsext:javascriptencode(id)"/>";
  132. i++;
  133. </xsl:for-each>
  134. var firstColumn = new Array();
  135. var i = 0;
  136. <xsl:for-each select="/root/config/param[@name='locale']/locale[@type='contentLocale' and not(id=key('env-param', 'language'))]">
  137. firstColumn[i] = new Array("<xsl:value-of select="displayName"/>", "<xsl:value-of select="xtsext:javascriptencode(id)"/>","");
  138. i++;
  139. </xsl:for-each>
  140. var secondColumn = new Array();
  141. var i = 0;
  142. <xsl:for-each select="/root/config/param[@name='locale']/locale[@type='contentLocale' and id=key('env-param', 'language')]">
  143. secondColumn[i] = new Array("<xsl:value-of select="displayName"/>", "<xsl:value-of select="xtsext:javascriptencode(id)"/>","");
  144. i++;
  145. </xsl:for-each>
  146. function validate()
  147. {
  148. if (secondColumn.length &lt; 1)
  149. {
  150. alert("<xts:string id="IDS_SELECT_LANG_NO_SELECTION" encode="javascript"/>");
  151. return false;
  152. }
  153. var encodedLanguages = "&amp;lt;languages&amp;gt;";
  154. for (var i=secondColumn.length-1; i>=0; i--)
  155. {
  156. encodedLanguages += "&amp;lt;language&amp;gt;" + secondColumn[i][1] + "&amp;lt;/language&amp;gt;";
  157. }
  158. encodedLanguages += "&amp;lt;/languages&amp;gt;";
  159. document.pform.selected_languages.value = encodedLanguages;
  160. if (document.pform.specify_language &amp;&amp; document.pform.specify_language.value == '')
  161. {
  162. document.pform.specify_language.value = 'checked';
  163. }
  164. return true;
  165. }
  166. var availableList = null;
  167. var selectedList = null;
  168. var availableListParent = null;
  169. var selectedListParent = null;
  170. function removeLists(){
  171. if (availableList == null){
  172. availableList = document.getElementsByName("all_lang")[0];
  173. selectedList = document.getElementsByName("selected_lang")[0];
  174. }
  175. if ((availableList != null) &amp;&amp; (selectedList != null)){
  176. availableListParent = availableList.parentNode;
  177. availableListParent.removeChild(availableList);
  178. selectedListParent = selectedList.parentNode;
  179. selectedListParent.removeChild(selectedList);
  180. }
  181. }
  182. function addLists(){
  183. if ((availableListParent != null) &amp;&amp; (availableList) &amp;&amp; (selectedListParent != null) &amp;&amp; (selectedList)){
  184. availableListParent.appendChild(availableList);
  185. selectedListParent.appendChild(selectedList);
  186. }
  187. }
  188. // move columns
  189. function moveColumns( whatFrom, whatTo, arrayFrom, arrayTo ) {
  190. //have to remove the list from the dom when we mess with the
  191. //list directly. If we do not then this function will hang for a very long time
  192. //when jaws screen reader is active
  193. removeLists();
  194. for (var i = whatFrom.options.length - 1; i >= 0; i--) {
  195. //if it is selected and the one after this isn't
  196. if (whatFrom[i].selected == true){
  197. arrayFrom[i][3] = "selected";
  198. arrayTo.push(arrayFrom[i]);
  199. arrayFrom.splice(i, 1);
  200. }
  201. }
  202. //call the sort the arrays
  203. sortIndex(whatFrom, arrayFrom);
  204. sortIndex(whatTo, arrayTo);
  205. //add this lists back to the dom....
  206. addLists();
  207. }
  208. // move all columns
  209. function moveAllColumns( whatFrom, whatTo, arrayFrom, arrayTo ) {
  210. //have to remove the list from the dom when we mess with the
  211. //list directly. If we do not then this function will hang for a very long time
  212. //when jaws screen reader is active
  213. removeLists();
  214. for (var i = whatFrom.options.length-1; i >= 0; i--) {
  215. arrayFrom[i][3] = "selected";
  216. arrayTo.push(arrayFrom[i]);
  217. arrayFrom.splice(i, 1);
  218. }
  219. //call the sort the arrays
  220. sortIndex(whatFrom, arrayFrom);
  221. sortIndex(whatTo, arrayTo);
  222. //add this lists back to the dom....
  223. addLists();
  224. }
  225. //sort the options by value
  226. function sortIndex(what, sortArray) {
  227. // use theMaster Sort Array to sort the given array
  228. var n = 0;
  229. var tempArray = new Array();
  230. for (var i=0; i &lt; (masterSortArray.length); i++) {
  231. for (var j=0; j &lt; (sortArray.length); j++) {
  232. if (masterSortArray[i]==sortArray[j][1]) {
  233. tempArray[n] = new Array(sortArray[j][0],sortArray[j][1],sortArray[j][2]);
  234. n++;
  235. }
  236. }
  237. }
  238. // tempArray is now correctly sorted
  239. for (var i=0; i &lt; (tempArray.length); i++) {
  240. sortArray[i] = new Array(tempArray[i][0],tempArray[i][1],tempArray[i][2]);
  241. }
  242. //create selected options array and delete options
  243. selectedOptions = new Array();
  244. for (var i=(what.options.length - 1); i > -1; i--) {
  245. selectedOptions[i] = what[i].selected;
  246. deleteOption(what,i);
  247. }
  248. //delete all the options
  249. for (var i=(what.options.length - 1); i > -1; i--) {
  250. deleteOption(what,i);
  251. }
  252. //add the options back in order
  253. var i=0;
  254. for (i=0; i &lt; sortArray.length; i++) {
  255. addOption(what, sortArray[i][0], sortArray[i][1])
  256. if (sortArray[i][2] != '')
  257. what[i].selected=true;
  258. }
  259. }
  260. //delete an option
  261. function deleteOption(what, index) {
  262. what.options[index] = null;
  263. }
  264. //add an option
  265. function addOption(what, text, value) {
  266. var defaultSelected = false;
  267. var selected = false;
  268. var optionName = new Option(text, value, defaultSelected, selected)
  269. what.options[what.length] = optionName;
  270. what.options[what.length-1].selected = false;
  271. }
  272. </script>
  273. <!-- Get date control includes -->
  274. <utml:form name="pform" method="post" action="{$gateway}">
  275. <!-- we don't want to cary over the old languages if the user hits OK -->
  276. <utml:exclusion-list>
  277. <xsl:value-of select="'m_ro_outputLocale language'"/>
  278. </utml:exclusion-list>
  279. <utml:input type="hidden" name="selected_languages"/>
  280. <utml:input type="hidden" name="select_languages_visited" value="true"/>
  281. <!-- if the specify checkbox wasn't checked then create a hidden entry which will be set to 'checked' if the user hits OK -->
  282. <utml:input type="hidden" name="specify_language">
  283. <utml:value>
  284. <xsl:if test="key('env-param', 'specify_language')"><xsl:value-of select="key('env-param', 'specify_language')"/></xsl:if>
  285. </utml:value>
  286. </utml:input>
  287. <!-- header -->
  288. <dp:header>
  289. <dp:title>
  290. <xsl:copy-of select="$browserTitle"/>
  291. </dp:title>
  292. <dp:description>
  293. <xts:string id="IDS_SELECT_LANG_INTRO"/>
  294. </dp:description>
  295. </dp:header>
  296. <!-- body -->
  297. <lyt:layout style="1">
  298. <lyt:section>
  299. <dp:list>
  300. <dp:section>
  301. <dp:list>
  302. <dp:section>
  303. <dp:label align="left" nospace="nospace" for="IDS_SELECT_LANG_AVAILABLE">
  304. <xts:string id="IDS_SELECT_LANG_AVAILABLE"/>
  305. </dp:label>
  306. </dp:section>
  307. <dp:section>
  308. <utml:select size="18" name="all_lang" multiple="true" style="width:280;" id="IDS_SELECT_LANG_AVAILABLE">
  309. <xsl:for-each select="/root/config/param[@name='locale']/locale[@type='contentLocale' and not(id=key('env-param', 'language'))]">
  310. <option value="{id}">
  311. <xsl:value-of select="displayName"/>
  312. </option>
  313. </xsl:for-each>
  314. <option value="deleteme">
  315. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  316. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  317. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  318. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  319. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  320. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  321. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  322. </option>
  323. </utml:select>
  324. </dp:section>
  325. </dp:list>
  326. <dp:list>
  327. <dp:section>
  328. <dp:text/>
  329. </dp:section>
  330. <dp:section>
  331. <dp:text/>
  332. </dp:section>
  333. <dp:section>
  334. <dp:columnButtonGroup align="center" width="40" label="IDS_SELECT_LANG_AVAILABLE">
  335. <dp:columnButton>
  336. <a href="javascript:moveColumns(document.pform.all_lang, document.pform.selected_lang, firstColumn, secondColumn)">
  337. <img height="18" width="18" border="0">
  338. <xsl:attribute name="src"><xsl:value-of select="$image_root"/>move_right.gif<xsl:text/></xsl:attribute>
  339. <xsl:attribute name="alt"><xts:string id="IDS_SELECT_LANG_ADD"/></xsl:attribute>
  340. </img>
  341. </a>
  342. </dp:columnButton>
  343. <dp:columnButton>
  344. <a href="javascript:moveColumns(document.pform.selected_lang, document.pform.all_lang, secondColumn, firstColumn)">
  345. <img height="18" width="18" border="0">
  346. <xsl:attribute name="src"><xsl:value-of select="$image_root"/>move_left.gif<xsl:text/></xsl:attribute>
  347. <xsl:attribute name="alt"><xts:string id="IDS_SELECT_LANG_REMOVE"/></xsl:attribute>
  348. </img>
  349. </a>
  350. </dp:columnButton>
  351. <dp:columnButton>
  352. <a href="javascript:moveAllColumns(document.pform.all_lang, document.pform.selected_lang, firstColumn, secondColumn)">
  353. <img height="18" width="18" border="0">
  354. <xsl:attribute name="src"><xsl:value-of select="$image_root"/>move_all_right.gif<xsl:text/></xsl:attribute>
  355. <xsl:attribute name="alt"><xts:string id="IDS_SELECT_LANG_ADD_ALL"/></xsl:attribute>
  356. </img>
  357. </a>
  358. </dp:columnButton>
  359. <dp:columnButton>
  360. <a href="javascript:moveAllColumns(document.pform.selected_lang, document.pform.all_lang, secondColumn, firstColumn)">
  361. <img height="18" width="18" border="0">
  362. <xsl:attribute name="src"><xsl:value-of select="$image_root"/>move_all_left.gif<xsl:text/></xsl:attribute>
  363. <xsl:attribute name="alt"><xts:string id="IDS_SELECT_LANG_REMOVE_ALL"/></xsl:attribute>
  364. </img>
  365. </a>
  366. </dp:columnButton>
  367. </dp:columnButtonGroup>
  368. </dp:section>
  369. </dp:list>
  370. <dp:list>
  371. <dp:section>
  372. <dp:label align="left" nospace="nospace" for="IDS_SELECT_LANG_SELECTED">
  373. <xts:string id="IDS_SELECT_LANG_SELECTED"/>
  374. </dp:label>
  375. </dp:section>
  376. <dp:section>
  377. <utml:select size="18" name="selected_lang" multiple="true" style="width:280;" id="IDS_SELECT_LANG_SELECTED">
  378. <xsl:for-each select="/root/config/param[@name='locale']/locale[@type='contentLocale' and id=key('env-param', 'language')]">
  379. <option value="{id}">
  380. <xsl:value-of select="displayName"/>
  381. </option>
  382. </xsl:for-each>
  383. <option value="deleteme">
  384. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  385. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  386. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  387. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  388. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  389. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  390. <xsl:text/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<xsl:text/>
  391. </option>
  392. </utml:select>
  393. </dp:section>
  394. </dp:list>
  395. </dp:section>
  396. </dp:list>
  397. </lyt:section>
  398. </lyt:layout>
  399. <script language="javascript">
  400. //delete the blank options
  401. if (document.pform.selected_lang[(document.pform.selected_lang.length - 1)].value == 'deleteme') {
  402. document.pform.selected_lang[(document.pform.selected_lang.length - 1)] = null;
  403. }
  404. if (document.pform.all_lang[(document.pform.all_lang.length - 1)].value == 'deleteme') {
  405. document.pform.all_lang[(document.pform.all_lang.length - 1)] = null;
  406. }
  407. </script>
  408. <!-- footer -->
  409. <dp:footer>
  410. <df:button df:id="IDS_OK" utml:validate="true" df:style="stack-down-save"/>
  411. <xsl:choose>
  412. <xsl:when test="key('env-param', 'ps_nav_stack') and not(key('env-param', 'ps_nav_stack') = '') ">
  413. <df:button df:id="IDS_CANCEL" df:style="stack-down"/>
  414. </xsl:when>
  415. <xsl:otherwise>
  416. <df:button df:id="IDS_CANCEL" df:style="back-url"/>
  417. </xsl:otherwise>
  418. </xsl:choose>
  419. </dp:footer>
  420. </utml:form>
  421. </dp:page>
  422. </xsl:template>
  423. </xsl:stylesheet>
  424. </xts:block>
  425. <!--
  426. ===============================================================================================
  427. debug - display debug information
  428. ===============================================================================================
  429. -->
  430. <xts:block id="debug" dependency="format" condition=".[/root/session/param[@name='debug']='1']" type="exec" mode="output" processor="XSLT" mandatory="false" mimeType="text/html">
  431. <!-- get the debug logic sheet -->
  432. <xts:logicsheet path="logicsheets/debuglogic.xslt"/>
  433. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dbg="http://developer.cognos.com/schemas/xts/logicsheets/xslt/debug/" exclude-result-prefixes="dbg">
  434. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
  435. <xsl:template match="/">
  436. <dbg:dumpxml select="/root"/>
  437. </xsl:template>
  438. </xsl:stylesheet>
  439. </xts:block>
  440. </xts:morphlet>