Source code for gemseo.utils.show_utils

# Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 3 as published by the Free Software Foundation.
#
# This program 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
"""Copyright ONERA, taken from WhatsOpt-CLI https://github.com/OneraHub/WhatsOpt-
CLI/blob/master/whatsopt/show_utils.py.

Distributed under the Apache 2.0 license

Minor modifications by Francois Gallard : merge the two methods an comment
"""
from __future__ import annotations

from pathlib import Path
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from gemseo.utils.xdsmizer import XdsmType

from xdsmjs import bundlejs, css

HTML_TEMPLATE = """
<!doctype html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
{}
</style>
<script type="text/javascript">
{}
</script>
<script type="text/javascript">
    document.addEventListener('DOMContentLoaded', () => {{
      const mdo = {};
      const config = {{
        labelizer: {{
            ellipsis: 5,
            subSupScript: false,
            showLinkNbOnly: false,
        }},
        layout: {{
            origin: {{ x: 50, y: 20 }},
            cellsize: {{ w: 150, h: 50 }},
            padding: 10,
        }},
        withDefaultDriver: true,
        withTitleTooltip: true,
      }};
      xdsmjs.XDSMjs(config).createXdsm(mdo);
    }});
</script>
</head>
<body>
    <div class="xdsm-toolbar"></div>
    <div class="xdsm2"></div>
</body>
</html>
"""


[docs]def generate_xdsm_html( xdsm: XdsmType, file_path: str | Path = "xdsm.html", ) -> None: """Generate a HTML file to visualize a dynamic and interactive XDSM. Args: xdsm: The XDSM structure. file_path: The name of the path to the output HTML file. """ with open(str(file_path), "w") as stream: stream.write(HTML_TEMPLATE.format(css(), bundlejs(), xdsm))