/* This file is part of GNU Taler (C) 2022 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see */ import { Fragment, VNode, h } from "preact"; import { useState } from "preact/hooks"; export function ExchangeXmlTos({ doc }: { doc: Document }): VNode { if (typeof window === "undefined") { // in nodejs env we don't have xml api return
; } const termsNode = doc.querySelector("[ids=terms-of-service]"); if (!termsNode) { return (

The exchange send us an xml but there is no node with 'ids=terms-of-service'. This is the content:

{new XMLSerializer().serializeToString(doc)}
); } return {Array.from(termsNode.children).map(renderChild)}; } /** * Map XML elements into HTML * @param child * @returns */ function renderChild(child: Element): VNode { const children = Array.from(child.children); switch (child.nodeName) { case "title": return
{child.textContent}
; case "#text": return ; case "paragraph": return

{child.textContent}

; case "section": { return ( {children.map(renderChild)} ); } case "bullet_list": { return
    {children.map(renderChild)}
; } case "enumerated_list": { return
    {children.map(renderChild)}
; } case "list_item": { return
  • {children.map(renderChild)}
  • ; } case "block_quote": { return
    {children.map(renderChild)}
    ; } default: return (
    unknown tag {child.nodeName}
    ); } } /** * Simple anchor with a state persisted into 'data-open' prop * @returns */ function AnchorWithOpenState( props: h.JSX.HTMLAttributes, ): VNode { const [open, setOpen] = useState(false); function doClick(e: h.JSX.TargetedMouseEvent): void { setOpen(!open); e.preventDefault(); } return ; }