<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Error Handling on Alex Jacobs</title>
    <link>https://alex-jacobs.com/tags/error-handling/</link>
    <description>Recent content in Error Handling on Alex Jacobs</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 14 Dec 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://alex-jacobs.com/tags/error-handling/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Effective Error Handling</title>
      <link>https://alex-jacobs.com/posts/errorhandling/</link>
      <pubDate>Wed, 14 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://alex-jacobs.com/posts/errorhandling/</guid>
      <description>A simple an effective approach for handling end users who struggle with errors</description>
      <content:encoded><![CDATA[<p>All too frequently, we, as developers, are faced with the task of handling errors. By developing effective messaging
for our users, we can make their experience with our software much more pleasant. While the task of crafting these
messages can seem mundane, it&rsquo;s a necessary step in making our software more user-friendly and intuitive.</p>
<p>And yet, all too frequently, end users will go out of their way to completely avoid even attempting to read the error message.</p>
<p>And after a long hard day writing bug free code and solving customer problems, there is nothing less satisfying than a
story that contains a screenshot of an error message that explains exactly the action the user needs to take the resolve the mistake
they have made.</p>
<p>Below we present a simple and effective approach to handling errors in client-side fleshware.</p>
<h1 id="an-error-message-that-requires-interaction">An error message that requires interaction</h1>
<p>If it&rsquo;s not yet clear, I&rsquo;ll take this opportunity to say that this is (mostly) a joke.</p>
<p><style>
    .modal {
        display: none;
        position: fixed;
        z-index: 1;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        overflow: auto;
        background-color: rgb(0, 0, 0);
        background-color: rgba(0, 0, 0, 0.5);

    }

    .modal-content {
        display: block;
        background-color: #fefefe;
        margin: 25% auto;
        padding: 20px;
        border: 3px solid #dc3545;
        width: 60%;
        height: auto;
        opacity: 1;
        border-radius: 25px;
        text-align: center;
    }

    .modal input {
        background-color: #ffffff;
        border: 1px solid #dc3545;
        border-radius: 5px;
        width: 50%;

    }

    .error-button {
        background-color: #dc3545;
        border: 1px solid #dc3545;
        border-radius: 5px;
        width: 40%;
        color: #ffffff;
        font-weight: bold;
        display: grid;
        margin: 0 auto;
    }

</style>
<div id="errorModal" class="modal">

    <div class="modal-content">
        <div style="color: #dc3545;" id='errorMessage'></div>
        <br>
        <p style="color: gray; opacity: 65%">
            type the error message to confirm you've seen it and disable the error modal
        </p>
        <input type="text" id="textinput" name="fname">
    </div>

</div>
<div class="error-button">
    <button type="submit" onclick="errorMessage('There is an error due to the way you did it')">
        Click here to display error
    </button>
</div>
<script>
    function errorMessage(displayErrorMessage) {
        let errorModal = document.getElementById("errorModal");
        let errorMessage = document.getElementById('errorMessage')
        errorMessage.textContent = displayErrorMessage
        errorMessage.style.fontWeight = 'bold';
        errorModal.style.display = "block";

        let inputBox = document.getElementById('textinput');

        inputBox.onkeyup = function () {
            var text = inputBox.value
            if (displayErrorMessage.startsWith(text)) {
                errorMessage.innerHTML = "<span style='color: " + 'black' + ";'>" + text + "</span>" +
                    "<span style='color: " + '#dc3545' + ";'>" +
                    displayErrorMessage.replace(text, '') + "</span>"
            }

            if (text === displayErrorMessage) {
                errorModal.style.display = "none";
                inputBox.value = '';
            }
        }
        console.log(errorMessage)
    }
</script>
<br>
<br>
And simple as that, we reduce the number of bug reports we receive by 100%!</p>
<p>I&rsquo;m certainly no UI designer, but with a little love, I expect this to be a core product feature in all modern softwares
going forward.</p>
<p>Checkout the fiddle below to make your own improvements!
<a href="https://jsfiddle.net/eg142dkp/2/">https://jsfiddle.net/eg142dkp/2/</a></p>
<h3 id="wondering-how-i-made-this">Wondering how I made this?</h3>
<p>First I had to learn javascript.  Then I had to learn CSS and HTML.  After all that,
I had to learn about Hugo and <a href="https://gohugo.io/content-management/shortcodes/">Shortcodes</a></p>
<p>By that point, I was a certified full-stack developer, and I was able to create the following shortcode to render the modal</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">&lt;</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">    <span class="p">.</span><span class="nc">modal</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">        <span class="k">display</span><span class="p">:</span> <span class="kc">none</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">        <span class="k">position</span><span class="p">:</span> <span class="kc">fixed</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">        <span class="k">z-index</span><span class="p">:</span> <span class="mi">1</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">        <span class="k">left</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">        <span class="k">top</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">        <span class="k">width</span><span class="p">:</span> <span class="mi">100</span><span class="kt">%</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">        <span class="k">height</span><span class="p">:</span> <span class="mi">100</span><span class="kt">%</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln">10</span><span class="cl">        <span class="k">overflow</span><span class="p">:</span> <span class="kc">auto</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln">11</span><span class="cl">        <span class="k">background-color</span><span class="p">:</span> <span class="nb">rgb</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> 
</span></span><span class="line"><span class="ln">12</span><span class="cl">        <span class="k">background-color</span><span class="p">:</span> <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">);</span> 
</span></span><span class="line"><span class="ln">13</span><span class="cl">
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="p">.</span><span class="nc">modal-content</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">        <span class="k">display</span><span class="p">:</span> <span class="kc">block</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">        <span class="k">background-color</span><span class="p">:</span> <span class="mh">#fefefe</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">        <span class="k">margin</span><span class="p">:</span> <span class="mi">25</span><span class="kt">%</span> <span class="kc">auto</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln">20</span><span class="cl">        <span class="k">padding</span><span class="p">:</span> <span class="mi">20</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">        <span class="k">border</span><span class="p">:</span> <span class="mi">3</span><span class="kt">px</span> <span class="kc">solid</span> <span class="mh">#dc3545</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">        <span class="k">width</span><span class="p">:</span> <span class="mi">60</span><span class="kt">%</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln">23</span><span class="cl">        <span class="k">height</span><span class="p">:</span> <span class="kc">auto</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">        <span class="k">opacity</span><span class="p">:</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">        <span class="k">border-radius</span><span class="p">:</span> <span class="mi">25</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">        <span class="k">text-align</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">
</span></span><span class="line"><span class="ln">29</span><span class="cl">    <span class="p">.</span><span class="nc">modal</span> <span class="nt">input</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">        <span class="k">background-color</span><span class="p">:</span> <span class="mh">#ffffff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">        <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="mh">#dc3545</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">        <span class="k">border-radius</span><span class="p">:</span> <span class="mi">5</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">        <span class="k">width</span><span class="p">:</span> <span class="mi">50</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">
</span></span><span class="line"><span class="ln">35</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">
</span></span><span class="line"><span class="ln">37</span><span class="cl">    <span class="p">.</span><span class="nc">error-button</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">        <span class="k">background-color</span><span class="p">:</span> <span class="mh">#dc3545</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">39</span><span class="cl">        <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="mh">#dc3545</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl">        <span class="k">border-radius</span><span class="p">:</span> <span class="mi">5</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl">        <span class="k">width</span><span class="p">:</span> <span class="mi">40</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl">        <span class="k">color</span><span class="p">:</span> <span class="mh">#ffffff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">43</span><span class="cl">        <span class="k">font-weight</span><span class="p">:</span> <span class="kc">bold</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">44</span><span class="cl">        <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">45</span><span class="cl">        <span class="k">margin</span><span class="p">:</span> <span class="mi">0</span> <span class="kc">auto</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl">
</span></span><span class="line"><span class="ln">48</span><span class="cl"><span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;errorModal&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;modal&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">50</span><span class="cl">
</span></span><span class="line"><span class="ln">51</span><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;modal-content&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">52</span><span class="cl">        <span class="p">&lt;</span><span class="nt">div</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;color: #dc3545;&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">&#39;errorMessage&#39;</span><span class="p">&gt;&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">53</span><span class="cl">        <span class="p">&lt;</span><span class="nt">br</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">54</span><span class="cl">        <span class="p">&lt;</span><span class="nt">p</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;color: gray; opacity: 65%&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">55</span><span class="cl">            type the error message to confirm you&#39;ve seen it and disable the error modal
</span></span><span class="line"><span class="ln">56</span><span class="cl">        <span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">57</span><span class="cl">        <span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;text&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;textinput&#34;</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;fname&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">58</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">59</span><span class="cl">
</span></span><span class="line"><span class="ln">60</span><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">61</span><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;error-button&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">62</span><span class="cl">    <span class="p">&lt;</span><span class="nt">button</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;submit&#34;</span> <span class="na">onclick</span><span class="o">=</span><span class="s">&#34;errorMessage(&#39;There is an error due to the way you did it&#39;)&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">63</span><span class="cl">        Click here to display error
</span></span><span class="line"><span class="ln">64</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">65</span><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">66</span><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">67</span><span class="cl">    <span class="kd">function</span> <span class="nx">errorMessage</span><span class="p">(</span><span class="nx">displayErrorMessage</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">68</span><span class="cl">        <span class="kd">let</span> <span class="nx">errorModal</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;errorModal&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">69</span><span class="cl">        <span class="kd">let</span> <span class="nx">errorMessage</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;errorMessage&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">70</span><span class="cl">        <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">textContent</span> <span class="o">=</span> <span class="nx">displayErrorMessage</span>
</span></span><span class="line"><span class="ln">71</span><span class="cl">        <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">fontWeight</span> <span class="o">=</span> <span class="s1">&#39;bold&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">72</span><span class="cl">        <span class="nx">errorModal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&#34;block&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">73</span><span class="cl">
</span></span><span class="line"><span class="ln">74</span><span class="cl">        <span class="kd">let</span> <span class="nx">inputBox</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;textinput&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">75</span><span class="cl">
</span></span><span class="line"><span class="ln">76</span><span class="cl">        <span class="nx">inputBox</span><span class="p">.</span><span class="nx">onkeyup</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">77</span><span class="cl">            <span class="kd">var</span> <span class="nx">text</span> <span class="o">=</span> <span class="nx">inputBox</span><span class="p">.</span><span class="nx">value</span>
</span></span><span class="line"><span class="ln">78</span><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="nx">displayErrorMessage</span><span class="p">.</span><span class="nx">startsWith</span><span class="p">(</span><span class="nx">text</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">79</span><span class="cl">                <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&#34;&lt;span style=&#39;color: &#34;</span> <span class="o">+</span> <span class="s1">&#39;black&#39;</span> <span class="o">+</span> <span class="s2">&#34;;&#39;&gt;&#34;</span> <span class="o">+</span> <span class="nx">text</span> <span class="o">+</span> <span class="s2">&#34;&lt;/span&gt;&#34;</span> <span class="o">+</span>
</span></span><span class="line"><span class="ln">80</span><span class="cl">                    <span class="s2">&#34;&lt;span style=&#39;color: &#34;</span> <span class="o">+</span> <span class="s1">&#39;#dc3545&#39;</span> <span class="o">+</span> <span class="s2">&#34;;&#39;&gt;&#34;</span> <span class="o">+</span>
</span></span><span class="line"><span class="ln">81</span><span class="cl">                    <span class="nx">displayErrorMessage</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">text</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&#34;&lt;/span&gt;&#34;</span>
</span></span><span class="line"><span class="ln">82</span><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="ln">83</span><span class="cl">
</span></span><span class="line"><span class="ln">84</span><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="nx">text</span> <span class="o">===</span> <span class="nx">displayErrorMessage</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">85</span><span class="cl">                <span class="nx">errorModal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&#34;none&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">86</span><span class="cl">                <span class="nx">inputBox</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">87</span><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="ln">88</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">89</span><span class="cl">        <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">errorMessage</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">90</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">91</span><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>and it goes right here in my <code>layouts/shortcodes</code> directory</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="ln">1</span><span class="cl">.
</span></span><span class="line"><span class="ln">2</span><span class="cl">└── layouts
</span></span><span class="line"><span class="ln">3</span><span class="cl">    └── shortcodes
</span></span><span class="line"><span class="ln">4</span><span class="cl">        └── error-modal.html
</span></span></code></pre></div><p>and then in my markdown file, I can just call it like this</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="ln">1</span><span class="cl">{{&lt; error-model &gt;}}
</span></span></code></pre></div><p><br>
Hugo is neat</p>
<h1 id="update-12-27-22----openai">Update 12-27-22 &ndash; OpenAI</h1>
<p>It is worth updating this post to say that I gave this prompt to the openai <code>code-davinci-002</code> model</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln">1</span><span class="cl"><span class="cm">/* create a button that says &#39;click to display error message&#39;. 
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="cm">when the button is clicked, a modal should pop up that has an error message and a text box. 
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="cm">the modal should not have an x to close it. the only way to close the model is to type the error message into the text box */</span>
</span></span></code></pre></div><p>and within seconds had a fully working implementation</p>
<p>Checkout openAI&rsquo;s fiddle for comparison.  Maybe we&rsquo;re all wasting our time</p>
<p><a href="https://jsfiddle.net/Lkyxuc0v/">https://jsfiddle.net/Lkyxuc0v/</a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kd">var</span> <span class="nx">button</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">&#39;button&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nx">button</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s1">&#39;click to display error message&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nb">document</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">button</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nx">button</span><span class="p">.</span><span class="nx">onclick</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="kd">var</span> <span class="nx">modal</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">&#39;div&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">position</span> <span class="o">=</span> <span class="s1">&#39;fixed&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">top</span> <span class="o">=</span> <span class="s1">&#39;0&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">left</span> <span class="o">=</span> <span class="s1">&#39;0&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">width</span> <span class="o">=</span> <span class="s1">&#39;100%&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">height</span> <span class="o">=</span> <span class="s1">&#39;100%&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">backgroundColor</span> <span class="o">=</span> <span class="s1">&#39;rgba(0,0,0,0.5)&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">zIndex</span> <span class="o">=</span> <span class="s1">&#39;9999&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">    <span class="nb">document</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">modal</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="kd">var</span> <span class="nx">errorMessage</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">&#39;div&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s1">&#39;Error: You must type the error message into the text box to close this modal.&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">position</span> <span class="o">=</span> <span class="s1">&#39;absolute&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">top</span> <span class="o">=</span> <span class="s1">&#39;50%&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">left</span> <span class="o">=</span> <span class="s1">&#39;50%&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">transform</span> <span class="o">=</span> <span class="s1">&#39;translate(-50%, -50%)&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">backgroundColor</span> <span class="o">=</span> <span class="s1">&#39;white&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">padding</span> <span class="o">=</span> <span class="s1">&#39;20px&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">    <span class="nx">errorMessage</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">border</span> <span class="o">=</span> <span class="s1">&#39;1px solid black&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">errorMessage</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">    <span class="kd">var</span> <span class="nx">textBox</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">&#39;input&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s1">&#39;text&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">position</span> <span class="o">=</span> <span class="s1">&#39;absolute&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">top</span> <span class="o">=</span> <span class="s1">&#39;60%&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">left</span> <span class="o">=</span> <span class="s1">&#39;50%&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">transform</span> <span class="o">=</span> <span class="s1">&#39;translate(-50%, -50%)&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">width</span> <span class="o">=</span> <span class="s1">&#39;200px&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">height</span> <span class="o">=</span> <span class="s1">&#39;20px&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">border</span> <span class="o">=</span> <span class="s1">&#39;1px solid black&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">    <span class="nx">modal</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">textBox</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">    <span class="nx">textBox</span><span class="p">.</span><span class="nx">onkeyup</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">textBox</span><span class="p">.</span><span class="nx">value</span> <span class="o">===</span> <span class="s1">&#39;Error: You must type the error message into the text box to close this modal.&#39;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">            <span class="nb">document</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">removeChild</span><span class="p">(</span><span class="nx">modal</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">39</span><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
  </channel>
</rss>
