HTML всплывающее окно с JS в R Leaflet - PullRequest
0 голосов
/ 19 октября 2019

У меня довольно сложный файл .kml, который я пытаюсь построить, используя пакет leaflet в R (без Shiny). По большей части это работает из коробки;тем не менее, я пытаюсь воспроизвести некоторые функции, которые работают в Google Планета Земля, где пользователь нажимает на значок, и появляется довольно симпатичный HTML-код с интерактивными таблицами. Я действительно не знаю html / css / js, поэтому я немного над головой.

Похоже, что все эти функции в .kml встроены в тег description . Тем не менее, когда я пытаюсь: ...addKML(kmlfile, group= 'mygroupname', popupProperty = 'description', labelProperty = 'name' ) %>%

, я вижу заголовки таблицы, но функция нажатия не работает. Когда я устраняю неполадки в браузере, я получаю сообщение об ошибке («openPage» не определено), поэтому функции не видят компиляцию.

Вот тег описания, который я пытаюсь построить:

<description><![CDATA[<!DOCTYPE html>
            <html>
            <head>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <style>
            table {
                border-top:none;
                padding:0;
                width:100%;
                border-collapse:collapse;
                table-layout: auto;
            }
            tr:hover {
                background-color: #f5f5f5;
            }
            th {
                background:#d7e9ed;
                padding:5px;
                text-align: left;
                border-left:solid #D9D9D9 1.0pt;
                border-bottom:1px solid #ddd;
                border-right:solid #D9D9D9 1.0pt;
            }
            td {
                border-top:none;
                border-left:solid #D9D9D9 1.0pt;
                border-bottom:1px solid #ddd;
                border-right:solid #D9D9D9 1.0pt;
                padding:2px;
            }
        p {
            margin:0;
            font-size:9.0pt;
            font-family:"Arial",sans-serif;
            color:#4d4947;
        }
        p.head1 {
            font-weight:bold;
            font-size:12.0pt;
            color:white;
        }
        p.key {
            font-weight:bold;
        }
        p.keyindent {
            font-weight:bold;
            margin-left:20px;
        }
        p.negative {
            color:red;
        }
        p.positive {
            color:green;
        }
        a:link {
            text-decoration:none;
        }
        a:visited {
            text-decoration:none;
        }
        a:hover {
            text-decoration:underline;
        }
        a:active {
            text-decoration:underline;
        }
        body, html {
            width: 2000px;
            height: 1000px;
            padding: 0;
            margin: 0;
            font-size:9.0pt;
            font-family:"Segoe UI",sans-serif;
        }
        .tablink {
            float: left;
            background-color: #d3d3d3;
            border: none;
            outline: none;
            cursor: pointer;
            padding: 8px 15px;
            margin: 0;
            font-weight:normal;
            color: #615d5c;
            margin: 0px 2px 0px 2px;
        }
        .tablinkActive {
            color: white;
            background-color: #20b6db;
            font-weight: bold;
        }
        .tablink:hover {
            color: white;
            background-color: #2196c4;
        }
        .tabcontent {
            display: none;
            padding: 0;
        }
        .showTabContent {
            display: block;
        }
        .btnCollapsible {
            height: 100%;
            width: 100%;
            color: #20b6db;
            cursor: pointer;
            float: left;
            text-align: left;
            border: none;
            outline: none;
            padding: 0in 5.4pt 0in 5.4pt;
            margin: 0;
            font-weight:bold;
            background-color: #f0f0ef;
        }
        td.tdCollapsible {
            padding: 0;
        }
        .btnActive, .btnCollapsible:hover {
            background-color: #f0f0ef;
        }
        .hiderows {
            display: none;
        }
        .showrows {
            display: table-row-group;
            margin-left: 15px;
            background-color: #f0f0ef;
        }
        i.arrow {
            border: solid #20b6db;
            border-width: 0 2px 2px 0;
            display: inline-block;
            padding: 2px;
            margin: 0px 5px 2px 0px;
        }
        .right {
            transform: rotate(-45deg);
            -webkit-transform: rotate(-45deg);
        }
        .left {
            transform: rotate(135deg);
            -webkit-transform: rotate(135deg);
        }

        .up {
            transform: rotate(-135deg);
            -webkit-transform: rotate(-135deg);
        }
        .down {
            transform: rotate(45deg);
            -webkit-transform: rotate(45deg);
        }
        </style>
        </head><body>

            <button class="tablink" onclick="openPage('AAA', this)" id="defaultOpen">AAA </button>
            <button class="tablink" onclick="openPage('BBB', this)">BBB </button>
            <button class="tablink" onclick="openPage('CCC', this)">CC </button><button class="tablink" onclick="openPage('CCC', this)">CCC </button>

            <div id="AAA" class="tabcontent">
            <table>
           **LOTS OF TABLE CONTENT**
            </table>
            </div>

        <script>
            function openPage(pageName,thisElement) {
                var i, tabcontent, tablinks;
                tabcontent = document.getElementsByClassName("tabcontent");
                for (i = 0; i < tabcontent.length; i++)
                {
                    tabcontent[i].classList.remove("showTabContent");
                }
                tablinks = document.getElementsByClassName("tablink");
                for (i = 0; i < tablinks.length; i++)
                {
                    tablinks[i].classList.remove("tablinkActive");
                }
                document.getElementById(pageName).classList.toggle("showTabContent");
                thisElement.classList.toggle("tablinkActive");
            }
            function toggleRows(thisElement)
            {
                var iconElement = thisElement.getElementsByTagName("i")[0];
                thisElement.classList.toggle("btnActive");

                if (iconElement.classList.contains("right"))
                {
                    iconElement.classList.remove("right");
                    iconElement.classList.add("down");
                }
                else
                {
                    iconElement.classList.remove("down");
                    iconElement.classList.add("right");
                }
                document.getElementById("tb" + thisElement.id).classList.toggle("showrows");
            }
            document.getElementById("defaultOpen").click();
        </script></body></html>]]></description>
...