{"id":45479,"date":"2019-06-30T03:01:45","date_gmt":"2019-06-29T17:01:45","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=45479"},"modified":"2019-06-30T07:31:18","modified_gmt":"2019-06-29T21:31:18","slug":"gmail-url-linker-simulation-intersessional-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/gmail-url-linker-simulation-intersessional-tutorial\/","title":{"rendered":"Gmail URL Linker Simulation Intersessional Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gmail URL Linker Simulation Intersessional Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation_localstorage.jpg\" title=\"Gmail URL Linker Simulation Intersessional Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Gmail URL Linker Simulation Intersessional Tutorial<\/p><\/div>\n<p>&#8220;Intersessional&#8221; <font size=1>&#8230; is that even a word &#8230;<\/font>?  Well, yes it is.  But what we like to call &#8220;intersessional&#8221; is what many of you might just call &#8220;cookies&#8221;, because these &#8220;cookies&#8221; have become so synonymous with &#8220;remembering what the customer likes&#8221; or &#8220;customer settings&#8221; or &#8220;user information&#8221; generally, on so many websites these days, that there the use of &#8220;cookies&#8221; is often optional.  But for some years now, there is every likelihood that what might be described in messages or notifications as &#8220;cookies&#8221; could, in actuality, involve the use of Window (web) <a target=_blank title='localStorage information from w3schools' href='https:\/\/www.w3schools.com\/jsref\/prop_win_localstorage.asp'>localStorage<\/a>.  This is especially the case if the amounts of data needed to be stored (there on the web browser of interest) is likely to mount up.<\/p>\n<p>Being then &#8220;that cookies aint necessarily cookies&#8221; we don&#8217;t feel so bad about using the posh sounding &#8220;intersessional&#8221; word.  Today, we even use it on a dropdown element wording for the first time <font size=1>&#8230; hiding in a cupboard as we did so<\/font>.<\/p>\n<p>What&#8217;s the difference between &#8220;intersessional&#8221; and &#8220;intrasessional&#8221; then?  <font size=1>Glad we asked on your behalf?!<\/font>  Well, we classify &#8230;<\/p>\n<ul>\n<li>&#8220;intersessional&#8221; memory functionality uses cookies and\/or localStorage and\/or databases and\/or web server flat files to recall data on entry to a new web browser session with no ? and &amp; argument nuances (ie. no GET parameters, but still &#8220;intelligence&#8221; (using tailored to the user of that web browser) from those data source types) &#8230; whereas &#8230;<\/li>\n<li>&#8220;intrasessional&#8221; memory functionality, for us, is data derived from web browser address bar ? and &amp; argument nuances (ie. GET parameters) or, if using a serverside language like PHP, perhaps POST arguments or FILE arguments (for uploading), or pre-existing layers of iframe which is what we have been raving about as an idea recently via the term &#8220;Overlay Iframe Remembering&#8221;<\/li>\n<\/ul>\n<p>We&#8217;ve got two small improvements, on top of our progress up to the recent <a title='Gmail URL Linker Simulation Wikipedia Tutorial' href='#gurllswt'>Gmail URL Linker Simulation Wikipedia Tutorial<\/a>, in both types above, involving the &lt;body onload=&#8217;conl();&#8217;&gt; Javascript document.body onload function &#8220;conl()&#8221;, those being <font color=blue>&#8220;intersessional&#8221;<\/font> and <font color=purple>&#8220;intrasessional&#8221;<\/font> &#8230;<\/p>\n<p><code><br \/>\nfunction conl() {<br \/>\n  <font color=blue>var lsisv=\"\";<\/font><br \/>\n  <font color=purple>if (starttext == \"\") {<br \/>\n  starttext=(location.search.split('text=')[1] ? (decodeURIComponent(location.search.split('text=')[1]).split('&')[0]) : '');<br \/>\n  if (starttext == \"\") {<br \/>\n   starttext=(location.search.split('textandgo=')[1] ? (decodeURIComponent(location.search.split('textandgo=')[1]).split('&')[0]) : '');<br \/>\n   if (starttext != \"\") {<br \/>\n    interim=starttext.replace(\/\\_\/g,' ') + '@!@';<br \/>\n    document.getElementById('leftta').value=interim.replace('@!@','');<br \/>\n    if (interim != interim.replace('@!@','')) {<br \/>\n     document.getElementById('jbut').click();<br \/>\n    }<br \/>\n   }<br \/>\n  } else {<br \/>\n   interim=starttext.replace(\/\\_\/g,' ');<br \/>\n   document.getElementById('leftta').value=interim.replace('@!@','');<br \/>\n  }<br \/>\n  starttext=\" \";<br \/>\n  }<\/font><br \/>\n  elem=document.getElementById('canvasid');<br \/>\n  context=elem.getContext('2d');<br \/>\n  <font color=blue>try {<br \/>\n   lsisv=localStorage.getItem(\"lhcells\");<br \/>\n   var lsis=lsisv.split('@!@');<br \/>\n   for (var iuyt=0;iuyt&lt;lsis.length; iuyt++) {<br \/>\n    if (lsis[iuyt] != '' && ('' + lsis[iuyt]) != 'null') {<br \/>\n     if (document.getElementById('locals').innerHTML.indexOf(decodeURIComponent(lsis[iuyt]).replace(\/\\ \/g,'_')) == -1) {<br \/>\n       document.getElementById('locals').innerHTML+='&lt;option value=\"' + decodeURIComponent(lsis[iuyt]).replace(\/\\ \/g,'_') + '\"&gt;' + decodeURIComponent(lsis[iuyt]) + '&lt;\/option&gt;';<br \/>\n       document.getElementById('locals').innerHTML+='&lt;option value=\"' + decodeURIComponent(lsis[iuyt]).replace(\/\\ \/g,'_') + '@!@' + '\"&gt;' + decodeURIComponent(lsis[iuyt]) + ' ... and go&lt;\/option&gt;';<br \/>\n     }<br \/>\n    }<br \/>\n   }<br \/>\n  } catch (eew) {<br \/>\n  }<br \/>\n  if (lsisv != '') { lsisv+='@!@'; }<br \/>\n  return lsisv;<\/font><br \/>\n}<br \/>\n<\/code><\/p>\n<p> &#8230; to result in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html--GETME\" title=\"gmail_linker_simulation.htm\">the changed<\/a> HTML and Javascript <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html--GETME\" title=\"gmail_linker_simulation.htm\">gmail_linker_simulation.htm<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.htm\">live run<\/a> link.<\/p>\n<hr>\n<p id='gurllswt'>Previous relevant <a target=_blank title='Gmail URL Linker Simulation Wikipedia Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gmail-url-linker-simulation-wikipedia-tutorial\/'>Gmail URL Linker Simulation Wikipedia Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gmail URL Linker Simulation Wikipedia Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation_image.jpg\" title=\"Gmail URL Linker Simulation Wikipedia Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Gmail URL Linker Simulation Wikipedia Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Gmail URL Linker Simulation Primer Tutorial' href='#gurllspt'>Gmail URL Linker Simulation Primer Tutorial<\/a> linker was useful in terms of text, but what if we could add some image context.<\/p>\n<p>To add that image context we add code to optionally process &#8230;<\/p>\n<ul>\n<li><a target=_blank title='Wikipedia' href='http:\/\/wikipedia.org'>Wikipedia<\/a> &#8230;\n<ol>\n<li>URL links &#8230;or &#8230;<\/li>\n<li>text delimited by ` `s<\/li>\n<\/ol>\n<p> &#8230; URLs &#8230; via the wonderfully powerful combination of &#8230;<\/li>\n<li>\n<ul>\n<li>Ajax <a target=_blank title='XMLHttpRequest information' href='https:\/\/developer.mozilla.org\/en\/docs\/Web\/API\/XMLHttpRequest'>XMLHttpRequest<\/a> object &#8230; as the conduit for &#8230;<\/li>\n<li><a target=_blank title='FormData object information' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/FormData'>FormData<\/a> object<\/li>\n<\/ul>\n<p> &#8230; as per &#8230;<br \/>\n<code><br \/>\nvar lastlinks=[], lastcontents=[], lasturls=[], urlstotry=[], iurls=0;<br \/>\nvar zhr=null, am_sending=false;<br \/>\nvar elem=null, context;<br \/>\n<br \/>\nfunction showStuff(evt) {<br \/>\n  var huhs=[];<br \/>\n  if (zhr.readyState == 4) {<br \/>\n    if (zhr.status == 200) {<br \/>\n      if (document.getElementById('wikiopt').value.indexOf('5') != -1) {<br \/>\n      if (('~' + zhr.responseText + '~').indexOf('~&lt;img ') != -1 && ('~' + zhr.responseText + '~').indexOf('&lt;\/img&gt;~') != -1) {<br \/>\n      lastcontents[iurls]=zhr.responseText;<br \/>\n      document.getElementById('rightp').innerHTML=document.getElementById('rightp').innerHTML.replace(lasturls[iurls] + '&lt;\/a&gt;', zhr.responseText + lasturls[iurls] + '&lt;\/a&gt;');<br \/>\n      }<br \/>\n      }<br \/>\n      huhs=sofar.split('~' + lasturls[iurls] + ';');<br \/>\n      if (huhs.length &gt; 1) {<br \/>\n        document.getElementById('rightp').innerHTML=document.getElementById('rightp').innerHTML.replace(lasturls[iurls] + '&lt;\/a&gt;', huhs[1].split('~')[0] + '&lt;\/a&gt;');<br \/>\n      }<br \/>\n      am_sending=false;<br \/>\n      zhr=null;<br \/>\n      if (urlstotry.length &gt; iurls) {<br \/>\n        ajaxit(urlstotry[iurls]);<br \/>\n        iurls++;<br \/>\n      } else {<br \/>\n        urlstotry=[];<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n<br \/>\nfunction ajaxit(urltosend) {<br \/>\n  if (urltosend.indexOf('wikipedia.org') != -1) {<br \/>\n  if (!am_sending) {<br \/>\n  am_sending=true;<br \/>\n  zhr = new XMLHttpRequest();<br \/>\n  var form=new FormData();<br \/>\n  form.append('inurl', urltosend);<br \/>\n  lasturls.push(urltosend);<br \/>\n  lastcontents.push(\"\");<br \/>\n  zhr.open('post', '\/\/www.rjmprogramming.com.au\/PHP\/fgc\/', true);<br \/>\n  zhr.onreadystatechange = showStuff;<br \/>\n  zhr.send(form);<br \/>\n  } else {<br \/>\n  urlstotry.push(urltosend);<br \/>\n  }<br \/>\n  }<br \/>\n}<br \/>\n<\/code>\n<\/li>\n<\/ul>\n<p> &#8230; with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html-GETME\" title=\"gmail_linker_simulation.htm\">the changed<\/a> HTML and Javascript <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html-GETME\" title=\"gmail_linker_simulation.htm\">gmail_linker_simulation.htm<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.htm\">live run<\/a> (new window) link, or in an HTML iframe as below &#8230;<\/p>\n<p><iframe style=\"width:100%;height:600px;\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.htm\"><\/iframe><\/p>\n<hr>\n<p id='gurllspt'>Previous relevant <a target=_blank title='Gmail URL Linker Simulation Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gmail-url-linker-simulation-primer-tutorial\/'>Gmail URL Linker Simulation Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gmail URL Linker Simulation Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.jpg\" title=\"Gmail URL Linker Simulation Primer Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Gmail URL Linker Simulation Primer Tutorial<\/p><\/div>\n<p>We take a small sidestep away from yesterday&#8217;s <a target=_blank href='https:\/\/www.rjmprogramming.com.au\/ITblog\/overlay-iframe-remembering-textarea-client-sharing-tutorial\/' title='Overlay Iframe Remembering Textarea Client Sharing Tutorial '>Overlay Iframe Remembering Textarea Client Sharing Tutorial <\/a> today, though today&#8217;s content becomes relevant to it, and <a target=_blank title='?' href='https:\/\/forums.theregister.co.uk\/forum\/all\/2007\/11\/08\/top_movie_quotes\/#c_93333'>&#8220;we will return&#8221;<\/a>.<\/p>\n<p>So, can we say we are admirers of the webmail product <a target=_blank title='Gmail' href='https:\/\/gmail.com'>Gmail<\/a> (by Google), in the way you can write in the body of your email some text that includes an absolute URL (not in any HTML, just as text), and the email recipient sees that URL text linked?  Of course, in a serverside language like PHP we&#8217;d simulate that via a function like <a target=_blank title='PHP preg_replace' href='https:\/\/www.php.net\/manual\/en\/function.preg-replace.php'>preg_replace<\/a> <font size=1>(the &#8220;pregs&#8221;, in PHP, all involving such &#8220;regex&#8221; fun!)<\/font>, but we want to do something similar in &#8220;clientland&#8221; Javascript <font size=1>(and we promise we are not masochists &#8230; <a target=_blank title='?' href='https:\/\/www.roalddahl.com\/roald-dahl\/characters\/beasts\/the-enormous-crocodile'>honest?!?<\/a>)<\/font>.  Can we separate <i>textual use of HTTP prefixed &#8220;words&#8221;<\/i> as distinct from <i>HTML usage of HTTP prefixed references<\/i>?  We think so, as we think we can say the &#8220;regex&#8221;y [hH][tT][tT][pP] would be prefaced by one of &gt; or &#8216; or &#8221; if it was a <i>HTML usage of HTTP prefixed references<\/i> scenario.  Obversely <font size=1>(in &#8220;obverse land&#8221;)<\/font> the &#8220;regex&#8221;y [hH][tT][tT][pP] would be prefaced by one of ^ (ie. start of line) or \\n (ie. line feed) or \\s (ie. a space) if you are in a <i>textual use of HTTP prefixed &#8220;words&#8221;<\/i> scenario.  Given that, what is the Javascript for this idea?<\/p>\n<p><code><br \/>\n&lt;script type='text\/javascript'&gt;<br \/>\n\/\/ Thanks to <a target=_blank title='https:\/\/stackoverflow.com\/questions\/41306338\/match-any-group-of-characters-before-a-line-break-sign' href='https:\/\/stackoverflow.com\/questions\/41306338\/match-any-group-of-characters-before-a-line-break-sign'>https:\/\/stackoverflow.com\/questions\/41306338\/match-any-group-of-characters-before-a-line-break-sign<\/a><br \/>\n\/\/ Thanks to <a target=_blank title='https:\/\/stackoverflow.com\/questions\/494035\/how-do-you-use-a-variable-in-a-regular-expression' href='https:\/\/stackoverflow.com\/questions\/494035\/how-do-you-use-a-variable-in-a-regular-expression'>https:\/\/stackoverflow.com\/questions\/494035\/how-do-you-use-a-variable-in-a-regular-expression<\/a><br \/>\n<br \/>\nvar gmail_linker_prefix=\" &lt;a target=_blank class='gmail_style_link' title='Gmail style link' href='\";<br \/>\nvar gmail_linker_middle=\"'&gt;\";<br \/>\nvar gmail_linker_suffix=\"&lt;\/a&gt; \";<br \/>\nvar lastlinks=[];<br \/>\n<br \/>\n\/\/ RegExp.quote = function(str) {<br \/>\n\/\/     return str.replace(\/([.?*+^$[\\]\\\\(){}|-])\/g, \"\\\\$1\");<br \/>\n\/\/ };<br \/>\n<br \/>\nfunction futuremore(inw) {<br \/>\n  var parts=inw.split(gmail_linker_prefix), lastlink='';<br \/>\n  lastlinks=[];<br \/>\n  for (var ij=1; ij&lt;parts.length; ij++) {<br \/>\n    if (parts[ij].indexOf(gmail_linker_middle) != -1 && parts[ij].indexOf(gmail_linker_suffix) != -1) {<br \/>\n      if (lastlink != parts[ij].split(gmail_linker_middle)[0]) {<br \/>\n        lastlink=parts[ij].split(gmail_linker_middle)[0];<br \/>\n        lastlinks.push(lastlink);<br \/>\n        \/\/alert(lastlink);<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n  return inw;<br \/>\n}<br \/>\n<br \/>\nfunction tostr(what) {<br \/>\n  return gmail_linker_prefix + what + gmail_linker_middle + what + gmail_linker_suffix;<br \/>\n}<br \/>\n<br \/>\nfunction preg_replace_http(ions) {<br \/>\n  return futuremore(ions.replace(\/\\ [hH][tT][tT][pP]([^\\s]+)\/g, tostr(\"\\$&\")).replace(\/^[hH][tT][tT][pP]([^\\n]+)\/g, tostr(\"\\$&\") + String.fromCharCode(10)).replace(\/\\n[hH][tT][tT][pP]([^\\n]+)\/g, String.fromCharCode(10) + tostr(\"\\$&\") + \"\").replace(\/\\'\\n[hH][tT][tT][pP]\/g, \"'http\").replace(\/\\\"\\n[hH][tT][tT][pP]\/g, '\"http').replace(\/\\&gt;\\n[hH][tT][tT][pP]\/g, '&gt;http').replace(\/\\ [hH][tT][tT][pP]\/g, \"http\"));<br \/>\n}<br \/>\n<br \/>\n&lt;\/script&gt;<br \/>\n<\/code> <\/p>\n<p> &#8230; where <i>preg_replace_http([yourGmailBodySimulatedTextGoesHere])<\/i> is the Javascript call we use in the HTML and Javascript <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html_GETME\">gmail_linker_simulation.html<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html\">live run<\/a> (new window) link, or in an HTML iframe as below &#8230;<\/p>\n<p><iframe style=\"width:100%;height:600px;\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/gmail_linker_simulation.html\"><\/iframe><\/p>\n<p>See those links (thanks heaps) above for advice regarding Javascript <a target=_blank title='Javascript string replace function information from w3schools' href='http:\/\/www.w3schools.com\/jsref\/jsref_replace.asp'><i>replace<\/i><\/a> function&#8217;s special &#8220;place&#8221; for &#8220;$&#038;&#8221; and &#8220;$1&#8221; (type syntax) in &#8220;the pantheon of replacement&#8221; and &#8220;temple of <a target=_blank title='?' href='https:\/\/www.google.com\/search?q=reg+the+bill&#038;rlz=1C5CHFA_enAU832AU832&#038;source=lnms&#038;sa=X&#038;ved=0ahUKEwiYt-noi4bjAhXEb30KHakPBbkQ_AUICSgA&#038;biw=1440&#038;bih=746&#038;dpr=2'>reg<\/a><a target=_blank title='?' href='https:\/\/www.google.com\/search?rlz=1C5CHFA_enAU832AU832&#038;q=The+Bill&#038;stick=H4sIAAAAAAAAAONgFuLUz9U3MLcoSC9WAjMNc8qycrSEHJNL8otC8kPCHPNSfPPLMlOLF7FyhGSkKjhl5uTsYGUEAG3pYNU6AAAA&#038;sa=X&#038;ved=2ahUKEwjcs5Pmi4bjAhVNWysKHdLLDhwQxA0wIHoECBAQBQ&#038;cshid=1561515852594497&#038;biw=1440&#038;bih=746'>ex<\/a>&#8220;.<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d45443' onclick='var dv=document.getElementById(\"d45443\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/gmail\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d45443' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d45448' onclick='var dv=document.getElementById(\"d45448\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/ajax\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d45448' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d45479' onclick='var dv=document.getElementById(\"d45479\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/localstorage\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d45479' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;Intersessional&#8221; &#8230; is that even a word &#8230;? Well, yes it is. But what we like to call &#8220;intersessional&#8221; is what many of you might just call &#8220;cookies&#8221;, because these &#8220;cookies&#8221; have become so synonymous with &#8220;remembering what the customer &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/gmail-url-linker-simulation-intersessional-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,14,37],"tags":[52,69,155,264,367,380,2730,503,576,2828,652,1807,2415,997,2994,2589,1254,1262,1319,1345,1417,1431],"class_list":["post-45479","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-tutorials","tag-absolute-url","tag-ajax","tag-body","tag-cookies","tag-dropdown","tag-email","tag-formdata","tag-gmail","tag-html","tag-hyperlink","tag-javascript","tag-link","tag-localstorage","tag-programming","tag-simulate","tag-simulation","tag-text","tag-textarea","tag-tutorial","tag-url","tag-webmail","tag-wikipedia"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/45479"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=45479"}],"version-history":[{"count":6,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/45479\/revisions"}],"predecessor-version":[{"id":45485,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/45479\/revisions\/45485"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=45479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=45479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=45479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}