<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lukas Karsch</title>
    <description>The latest articles on DEV Community by Lukas Karsch (@builtbylukas).</description>
    <link>https://dev.to/builtbylukas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2488574%2F48c2a80e-a662-49c8-a627-0ffd77d98774.png</url>
      <title>DEV Community: Lukas Karsch</title>
      <link>https://dev.to/builtbylukas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/builtbylukas"/>
    <language>en</language>
    <item>
      <title>A small deep dive on MutationObservers</title>
      <dc:creator>Lukas Karsch</dc:creator>
      <pubDate>Mon, 02 Dec 2024 19:22:06 +0000</pubDate>
      <link>https://dev.to/builtbylukas/a-small-deep-dive-on-mutationobservers-4b7b</link>
      <guid>https://dev.to/builtbylukas/a-small-deep-dive-on-mutationobservers-4b7b</guid>
      <description>&lt;p&gt;When Google removed the dedicated Maps tab from search results, I decided to take matters into my own hands by creating &lt;a href="https://chromewebstore.google.com/detail/bringbackmaps/dhfofnchclaidhjihbikjjemdodddlji" rel="noopener noreferrer"&gt;a Chrome extension that restores&lt;/a&gt; this beloved feature. Sometimes the best solutions can come from solving your own pain points!&lt;/p&gt;

&lt;p&gt;The extension is a testament to the power of web technologies and how developers can quickly adapt to changes in user experience. Thanks to Chrome's extension architecture - specifically content scripts - we can dynamically modify web pages to meet user needs.&lt;/p&gt;

&lt;p&gt;A cool part of this extension is the use of a &lt;code&gt;MutationObserver&lt;/code&gt;. MutationObserver is a powerful API that allows us to watch DOM changes in real-time!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;observer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MutationObserver&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;mutations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;obs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tabsContainer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div[role="navigation"] div[role="list"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tabsContainer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;createMapsTab&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
        &lt;span class="nx"&gt;obs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
        &lt;span class="nf"&gt;makeImageClickable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;childList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;subtree&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What's going on here?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MutationObserver watches for changes in the DOM&lt;/li&gt;
&lt;li&gt;We're looking specifically for the navigation tabs container&lt;/li&gt;
&lt;li&gt;Once found, we create our custom "Maps" tab&lt;/li&gt;
&lt;li&gt;obs.disconnect() stops observing to prevent unnecessary processing&lt;/li&gt;
&lt;li&gt;This approach ensures we inject our tab dynamically, regardless of how the page loads&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>extensions</category>
    </item>
    <item>
      <title>I Built a Chrome Extension to Bring Back the Google Maps Tab</title>
      <dc:creator>Lukas Karsch</dc:creator>
      <pubDate>Tue, 26 Nov 2024 21:46:29 +0000</pubDate>
      <link>https://dev.to/builtbylukas/i-built-a-chrome-extension-to-bring-back-the-google-maps-tab-3d4h</link>
      <guid>https://dev.to/builtbylukas/i-built-a-chrome-extension-to-bring-back-the-google-maps-tab-3d4h</guid>
      <description>&lt;p&gt;Remember when Google search results had that sweet, sweet Maps tab that made finding locations so easy? Yeah, me too.&lt;/p&gt;

&lt;p&gt;The removal of that tab genuinely made my life a lot worse! So one day, I just decided to fix it. &lt;/p&gt;

&lt;p&gt;Here we go: Bring Back Maps – a tiny Chrome extension that does exactly what it says in its name.&lt;/p&gt;

&lt;p&gt;What does it do? Simple. When you do a location-related search, it magically restores the Maps tab to your search results. No fancy UI, no complicated settings. Just pure convenience and obviously 100% privacy.&lt;br&gt;
🔗 &lt;a href="https://chromewebstore.google.com/detail/bringbackmaps/dhfofnchclaidhjihbikjjemdodddlji" rel="noopener noreferrer"&gt;Download the Extension&lt;/a&gt;&lt;br&gt;
🌐 &lt;a href="https://builtbylukas.dev/blog/chrome-extension-for-maps/" rel="noopener noreferrer"&gt;Read the detailed blog post at builtbylukas.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Took me an afternoon to build, and it solves this very specific (and honestly small) pain point I've been having for ages. Sometimes the best projects are the ones that solve a personal annoyance, right?&lt;/p&gt;

&lt;p&gt;And developers, obviously: PRs welcome, feedback appreciated. Lmk in the comments if this saves you even a single click or if you find any problems! 👊&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>extensions</category>
    </item>
  </channel>
</rss>
