{"componentChunkName":"component---src-components-tutorials-js","path":"/tutorials/internal-links-b/","result":{"data":{"markdownRemark":{"html":"<h2>Contents</h2>\n<ol>\n<li><a href=\"#about\">Why would I need this?</a></li>\n<li>\n<p><a href=\"#work\">How does this app work?</a></p>\n<ol>\n<li><a href=\"#work-panels\">Define the tabPanels</a></li>\n<li><a href=\"#work-dataset\">Create a dataset</a></li>\n<li><a href=\"#work-map\">Build the map and create popups</a></li>\n</ol>\n</li>\n<li><a href=\"#run\">How do I run the demo?</a></li>\n<li><a href=\"#next\">What's next?</a></li>\n</ol>\n<!-- endexcerpt -->\n<blockquote>\n<p>This tutorial has been replaced by the <a href=\"../shiny-link/\">shinyLinks</a> tutorial. This post still works, but it will be archived. (03 September 2020)</p>\n</blockquote>\n<span id=\"about\" />\n<h2>Why would I need this?</h2>\n<p>In the <a href=\"../internal-links-a/\">part 1</a>, we learned about setting up <code>tabPanels</code> and building hyperlinks manually using a <code>javascript</code> function. This is great, but is there anything else we can do with these links? What about putting in a leaflet map?</p>\n<p>In this tutorial, we will learn how to create links from a leaflet popup box to a <code>tabPanel</code>. In this example, I created a mini-tourism app of NYC where each point of interest (Central Park Zoo, Guggenheim Museum, and the Natural History Museum) has it's own page.</p>\n<span id=\"work\" />\n<h2>How does the app work?</h2>\n<p>This demo was built to address this (link tbd) forum post.</p>\n<span id=\"work-panels\" />\n<h3>Define the tabPanels</h3>\n<p>First, let's create the app.R file. We will define the ui and then the server. We will create four pages (tabPanel) in our ui - a home page and page for each point of interest. We will place the leaflet map on the home page as it will serve as navigation for our app.</p>\n<div class=\"gatsby-highlight\" data-language=\"r\"><pre class=\"language-r\"><code class=\"language-r\"><span class=\"token comment\"># ui</span>\nui <span class=\"token operator\">&lt;-</span> tagList<span class=\"token punctuation\">(</span>\n        <span class=\"token comment\"># head</span>\n        tags<span class=\"token operator\">$</span>head<span class=\"token punctuation\">(</span>\n                tags<span class=\"token operator\">$</span>script<span class=\"token punctuation\">(</span>src<span class=\"token operator\">=</span><span class=\"token string\">\"js/index.js\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n        <span class=\"token comment\"># body</span>\n        navbarPage<span class=\"token punctuation\">(</span>\n                tabPanel<span class=\"token punctuation\">(</span><span class=\"token string\">\"Home\"</span><span class=\"token punctuation\">,</span> value<span class=\"token operator\">=</span><span class=\"token string\">\"home\"</span><span class=\"token punctuation\">,</span> leafletOutput<span class=\"token punctuation\">(</span><span class=\"token string\">\"map\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                tabPanel<span class=\"token punctuation\">(</span><span class=\"token string\">\"Central Park Zoo\"</span><span class=\"token punctuation\">,</span> value<span class=\"token operator\">=</span><span class=\"token string\">\"zoo\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                tabPanel<span class=\"token punctuation\">(</span><span class=\"token string\">\"Guggenheim Museum\"</span><span class=\"token punctuation\">,</span> value<span class=\"token operator\">=</span><span class=\"token string\">\"guggenheim\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                tabPanel<span class=\"token punctuation\">(</span><span class=\"token string\">\"Natural History Museum\"</span><span class=\"token punctuation\">,</span> value<span class=\"token operator\">=</span><span class=\"token string\">\"history\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># server</span>\nserver <span class=\"token operator\">&lt;-</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">,</span>output<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></code></pre></div>\n<span id=\"work-dataset\" />\n<h3>Create a dataset</h3>\n<p>Next, we will build dataset that will be used to plot points on a leaflet map. Let's pick a handful of places and pull their coordinates from google maps (straight from the url). We will also create a column hrefValue, which contains the names that will be sent to the value argument and used in the customHref function.</p>\n<div class=\"gatsby-highlight\" data-language=\"r\"><pre class=\"language-r\"><code class=\"language-r\"><span class=\"token comment\"># build data</span>\nmapDF <span class=\"token operator\">&lt;-</span> data.frame<span class=\"token punctuation\">(</span>\n        location<span class=\"token operator\">=</span>c<span class=\"token punctuation\">(</span><span class=\"token string\">\"Central Park Zoo\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Guggenheim Museum\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Natural History Museum\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        lat<span class=\"token operator\">=</span>c<span class=\"token punctuation\">(</span><span class=\"token number\">40.76780</span><span class=\"token punctuation\">,</span> <span class=\"token number\">40.78292</span><span class=\"token punctuation\">,</span> <span class=\"token number\">40.78133</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        lng<span class=\"token operator\">=</span>c<span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">73.97191</span><span class=\"token punctuation\">,</span><span class=\"token operator\">-</span><span class=\"token number\">73.95907</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">73.97413</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        hrefValue<span class=\"token operator\">=</span>c<span class=\"token punctuation\">(</span><span class=\"token string\">\"zoo\"</span><span class=\"token punctuation\">,</span><span class=\"token string\">\"guggenheim\"</span><span class=\"token punctuation\">,</span><span class=\"token string\">\"history\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        stringsAsFactors<span class=\"token operator\">=</span><span class=\"token boolean\">FALSE</span>\n<span class=\"token punctuation\">)</span></code></pre></div>\n<span id=\"work-map\" />\n<h3>Build the map and create marker popups</h3>\n<p>Let's build the leaflet map. The links to other tabs will go into a\nleaflet popup. For the popup argument in addMarkers(), you\nwill need to wrap the target value in paste0(). Leaflet will render\nthis as a url. In the server, our leaflet map would look like this:</p>\n<div class=\"gatsby-highlight\" data-language=\"r\"><pre class=\"language-r\"><code class=\"language-r\">server <span class=\"token operator\">&lt;-</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">,</span>output<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        \n        <span class=\"token comment\"># build map</span>\n        output<span class=\"token operator\">$</span>map <span class=\"token operator\">&lt;-</span> renderLeaflet<span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n                leaflet<span class=\"token punctuation\">(</span>data <span class=\"token operator\">=</span> mapDF<span class=\"token punctuation\">)</span> <span class=\"token percent-operator operator\">%>%</span>\n                        setView<span class=\"token punctuation\">(</span>lat<span class=\"token operator\">=</span> <span class=\"token number\">40.7752739</span><span class=\"token punctuation\">,</span> lng<span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">73.9688518</span><span class=\"token punctuation\">,</span> zoom<span class=\"token operator\">=</span> <span class=\"token number\">14</span><span class=\"token punctuation\">)</span> <span class=\"token percent-operator operator\">%>%</span>\n                        addTiles<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token percent-operator operator\">%>%</span>\n                        addMarkers<span class=\"token punctuation\">(</span>\n                                lng <span class=\"token operator\">=</span> <span class=\"token operator\">~</span>lng<span class=\"token punctuation\">,</span> \n                                lat <span class=\"token operator\">=</span> <span class=\"token operator\">~</span>lat<span class=\"token punctuation\">,</span> \n                                popup <span class=\"token operator\">=</span> paste0<span class=\"token punctuation\">(</span>\n                                        <span class=\"token string\">\"Learn more about the \"</span><span class=\"token punctuation\">,</span> \n                                        <span class=\"token string\">\"&lt;a onclick=\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"customHref('\"</span><span class=\"token punctuation\">,</span> mapDF<span class=\"token operator\">$</span>hrefValue<span class=\"token punctuation\">,</span><span class=\"token string\">\"')>\"</span><span class=\"token punctuation\">,</span> \n                                        mapDF<span class=\"token operator\">$</span>location<span class=\"token punctuation\">,</span> \n                                        <span class=\"token string\">\"&lt;/a>\"</span>\n                                <span class=\"token punctuation\">)</span>\n                        <span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Now our app is ready to go. Launch the app and click on the links we setup.</p>\n<span id=\"run\" />\n<h2>How can I run this app?</h2>\n<p>The source code is available on <a href=\"https://github.com/davidruvolo51/shinyAppTutorials/tree/master/Internal-Links\">github</a>. Alternatively, you can run the demo in R using the following code.</p>\n<div class=\"gatsby-highlight\" data-language=\"r\"><pre class=\"language-r\"><code class=\"language-r\"><span class=\"token comment\"># Run in R/Rstudio</span>\ninstall.packages<span class=\"token punctuation\">(</span><span class=\"token string\">\"shiny\"</span><span class=\"token punctuation\">)</span>\nshiny<span class=\"token operator\">::</span>runGitHub<span class=\"token punctuation\">(</span>repo<span class=\"token operator\">=</span><span class=\"token string\">\"shinyAppTutorials\"</span><span class=\"token punctuation\">,</span>username<span class=\"token operator\">=</span><span class=\"token string\">\"davidruvolo51\"</span><span class=\"token punctuation\">,</span>subdir<span class=\"token operator\">=</span><span class=\"token string\">\"Internal-Links\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<span id=\"next\" />\n<h2>What's next?</h2>\n<p>Checkout <a href=\"../internal-links-c/\">part 3</a> of this series. In the next tutorial, we will bring everything from <a href=\"../internal-links-a\">part 1</a> and <a href=\"../internal-links-b\">part 2</a> and build a demo shiny app that creates links to specific tabs on other shiny pages.</p>","frontmatter":{"title":"Linking Tabs - Part 2","subtitle":"Creating links to other pages within a leaflet map popup","abstract":"Now that I created custom links, what can I do with them? How about adding them in a leaflet popup?","date":"2018-08-01","updated":"2020-09-03","keywords":["javascript","leaflet"]},"fields":{"readingTime":{"minutes":2.85}}}},"pageContext":{"slug":"/tutorials/internal-links-b/"}},"staticQueryHashes":["63159454"]}