{"id":54734,"date":"2022-01-27T03:01:11","date_gmt":"2022-01-26T17:01:11","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=54734"},"modified":"2022-01-26T12:01:02","modified_gmt":"2022-01-26T02:01:02","slug":"personalized-links-external-javascript-hotlinking-context-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/personalized-links-external-javascript-hotlinking-context-tutorial\/","title":{"rendered":"Personalized Links External Javascript Hotlinking Context Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personal_links_external_javascript_hotlinking_context.gif\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Personalized Links External Javascript Hotlinking Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/personal_links_external_javascript_hotlinking_context.gif\" title=\"Personalized Links External Javascript Hotlinking Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Personalized Links External Javascript Hotlinking Context Tutorial<\/p><\/div>\n<p>Thinking about the hosting of web applications and offering personalization into the mix of the way the user experiences that content, as far as URLs go, the most publicly accessible interfacing is through the URL GET arguments that can nuance what information is supplied to the user.  Sure, yesterday&#8217;s <a title='Personalized Links External Javascript Hotlinking Tutorial' href='#plejht'>Personalized Links External Javascript Hotlinking Tutorial<\/a> allowed for &#8230;<\/p>\n<ul>\n<li>&#8220;static&#8221; (but perhaps statically complex) &#8220;personal link&#8221; URLs to be associated with webpage content hardcodings &#8230; but what about <font size=1>(spoiler alert &#8230; today&#8217;s work)<\/font> &#8230;<\/li>\n<li>optional contextual &#8220;personal link&#8221; URLs (via <sub>&#10133;<\/sub><span>&#128279;<\/span> &#8220;emoji button&#8221; Javascript prompt &#8230;<br \/>\n<blockquote><p>\nPlease enter URL (no hashtags) (or enter ? for just personalized link information) followed by hashtag (#) then case sensitive wording to associate the URL with (when not already linked) greater than one character long (spaces encouraged).  Special URL of . gets its URL from the first matching link found on the webpage.  Enter X to clear your URLs.  URLs with arguments where last entered URL character is = will have last argument populated by innerText of words to right.\n<\/p><\/blockquote>\n<p> &#8230; popup window user interaction functionality) that if suffixed by a GET argument definition which ends with &#8220;=&#8221; populates that GET argument name&#8217;s value with (encodeURIComponent version of) hardcoding (ie. innerText) up to the next &#8220;&lt;&#8221; character in the document.body.innerHTML<\/li>\n<\/ul>\n<p>Huh?!  Well, take yesterday&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personal_links_external_javascript_hotlinking.gif\">animated GIF<\/a> &#8230;<\/p>\n<p><code><br \/>\n[URL]#[Hardcoding]<br \/>\n<\/code><\/p>\n<p> &#8230; example of &#8230;<\/p>\n<p><code><br \/>\n\/\/google.com# Google<br \/>\n<\/code><\/p>\n<p> &#8230; can, as of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/personal_links.js--GETME\">today&#8217;s changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personal_links.js--GETME\">personal_links.js<\/a> external Javascript for &#8220;Personal Links&#8221; usage &#8230; be &#8220;contextualized&#8221;, optionally, by defining <font size=1>something like<\/font> &#8230;<\/p>\n<p><code><br \/>\n\/\/google.com\/search?q=# Google<br \/>\n<\/code><\/p>\n<p> &#8230; making the external Javascript logic find a &#8221; Google &#8221; hardcoding within the webpage content, and because the URL ends in a GET argument definition ending in &#8220;=&#8221;, will look to the right of the &#8220;found place&#8221; and set that GET argument name&#8217;s value to whatever hardcoding precedes the next found &#8220;&lt;&#8221; character within the content&#8217;s underlying HTML (ie. document.body.innerHTML in Javascript DOM-speak).<\/p>\n<p>Used this way (and you can see this happening with today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personal_links_external_javascript_hotlinking_context.gif\" title=\"Click picture\">tutorial picture<\/a>), not all the (user defined &#8220;Personal Link&#8221;) orange &#8221; Google &#8221; links will all reference the same static content, and they can become contextual, and reflect their position in the content, mainly regarding the new &#8230;<br \/>\n<code><br \/>\n   function popul(inurlis, intextpart) {<br \/>\n     var prefc='', suffc='';<br \/>\n     if ((' ' + inurlis).slice(-1) == '=' && inurlis.indexOf('?') != -1 && intextpart.indexOf('&lt;') != -1 && intextpart.indexOf('&gt;') != -1 && eval('' + intextpart.indexOf('&lt;')) &gt; eval('' + intextpart.indexOf('&gt;'))) {<br \/>\n       if ((intextpart.split('&lt;')[0].split('&gt;')[eval(-1 + intextpart.split('&lt;')[0].split('&gt;').length)] + '~').indexOf(' Tutorial~') != -1) { prefc='\"'; suffc='\"'; }<br \/>\n       return (inurlis + encodeURIComponent(prefc + intextpart.split('&lt;')[0].split('&gt;')[eval(-1 + intextpart.split('&lt;')[0].split('&gt;').length)] + suffc)).replace(\/\\%3D\/g,'=').replace(\/\\%3d\/g,'=').replace(\/\\%3F\/g,'?').replace(\/\\%3f\/g,'?').replace(\/\\%26\/g,'&');<br \/>\n     } else if ((' ' + inurlis).slice(-1) == '=' && inurlis.indexOf('?') != -1 && intextpart.indexOf('&lt;') != -1 && intextpart.indexOf('&gt;') != -1 && eval('' + intextpart.indexOf('&lt;')) &lt; eval('' + intextpart.indexOf('&gt;'))) {<br \/>\n       if ((intextpart.split('&lt;')[0] + '~').indexOf(' Tutorial~') != -1) { prefc='\"'; suffc='\"'; }<br \/>\n       return (inurlis + encodeURIComponent(prefc + intextpart.split('&lt;')[0] + suffc)).replace(\/\\%3D\/g,'=').replace(\/\\%3d\/g,'=').replace(\/\\%3F\/g,'?').replace(\/\\%3f\/g,'?').replace(\/\\%26\/g,'&');<br \/>\n     } else if ((' ' + inurlis).slice(-1) == '=' && inurlis.indexOf('?') != -1 && intextpart.indexOf('&lt;') != -1) {<br \/>\n       if ((intextpart.split('&lt;')[0] + '~').indexOf(' Tutorial~') != -1) { prefc='\"'; suffc='\"'; }<br \/>\n       return (inurlis + encodeURIComponent(prefc + intextpart.split('&lt;')[0] + suffc)).replace(\/\\%3D\/g,'=').replace(\/\\%3d\/g,'=').replace(\/\\%3F\/g,'?').replace(\/\\%3f\/g,'?').replace(\/\\%26\/g,'&');<br \/>\n     } else if (('   ' + inurlis).toLowerCase().slice(-3) == '%3d' && inurlis.toLowerCase().replace('?','%3f').indexOf('%3f') != -1 && intextpart.indexOf('&lt;') != -1 && intextpart.indexOf('&gt;') != -1 && eval('' + intextpart.indexOf('&lt;')) &gt; eval('' + intextpart.indexOf('&gt;'))) {<br \/>\n       if ((intextpart.split('&lt;')[0].split('&gt;')[eval(-1 + intextpart.split('&lt;')[0].split('&gt;').length)] + '~').indexOf(' Tutorial~') != -1) { prefc='\"'; suffc='\"'; }<br \/>\n       return (inurlis + encodeURIComponent(prefc + intextpart.split('&lt;')[0].split('&gt;')[eval(-1 + intextpart.split('&lt;')[0].split('&gt;').length)] + suffc)).replace(\/\\%3D\/g,'=').replace(\/\\%3d\/g,'=').replace(\/\\%3F\/g,'?').replace(\/\\%3f\/g,'?').replace(\/\\%26\/g,'&');<br \/>\n     } else if (('   ' + inurlis).toLowerCase().slice(-3) == '%3d' && inurlis.toLowerCase().replace('?','%3f').indexOf('%3f') != -1 && intextpart.indexOf('&lt;') != -1 && intextpart.indexOf('&gt;') != -1 && eval('' + intextpart.indexOf('&lt;')) &lt; eval('' + intextpart.indexOf('&gt;'))) {<br \/>\n       if ((intextpart.split('&lt;')[0] + '~').indexOf(' Tutorial~') != -1) { prefc='\"'; suffc='\"'; }<br \/>\n       return (inurlis + encodeURIComponent(prefc + intextpart.split('&lt;')[0] + suffc)).replace(\/\\%3D\/g,'=').replace(\/\\%3d\/g,'=').replace(\/\\%3F\/g,'?').replace(\/\\%3f\/g,'?').replace(\/\\%26\/g,'&');<br \/>\n     } else if (('   ' + inurlis).toLowerCase().slice(-3) == '%3d' && inurlis.toLowerCase().replace('?','%3f').indexOf('%3f') != -1 && intextpart.indexOf('&lt;') != -1) {<br \/>\n       if ((intextpart.split('&lt;')[0] + '~').indexOf(' Tutorial~') != -1) { prefc='\"'; suffc='\"'; }<br \/>\n       return (inurlis + encodeURIComponent(prefc + intextpart.split('&lt;')[0] + suffc)).replace(\/\\%3D\/g,'=').replace(\/\\%3d\/g,'=').replace(\/\\%3F\/g,'?').replace(\/\\%3f\/g,'?').replace(\/\\%26\/g,'&');<br \/>\n     }<br \/>\n     return inurlis.replace(\/\\%3D\/g,'=').replace(\/\\%3d\/g,'=').replace(\/\\%3F\/g,'?').replace(\/\\%3f\/g,'?').replace(\/\\%26\/g,'&');<br \/>\n   }<br \/>\n<\/code><br \/>\n &#8230; Javascript function &#8220;wrapper&#8221; of output URL.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/personalized-links-external-javascript-hotlinking-context-tutorial\/'>Personalized Links External Javascript Hotlinking Context Tutorial<\/a>.<\/p-->\n<hr>\n<p id='plejht'>Previous relevant <a target=_blank title='Personalized Links External Javascript Hotlinking Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/personalized-links-external-javascript-hotlinking-tutorial\/'>Personalized Links External Javascript Hotlinking Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personal_links_external_javascript_hotlinking.gif\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Personalized Links External Javascript Hotlinking Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/personal_links_external_javascript_hotlinking.gif\" title=\"Personalized Links External Javascript Hotlinking Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Personalized Links External Javascript Hotlinking Tutorial<\/p><\/div>\n<p>Another layer of functionality onto the external Javascript arrangements of yesterday&#8217;s <a title='WordPress Blog Personalized Links Tutorial' href='#wpbplt'>WordPress Blog Personalized Links Tutorial<\/a> is to reimagine the arrangements of the user of that &#8220;Personalized Links&#8221; (pretty much standalone <font size=1>(but more independently standalone today)<\/font>) external Javascript, that being this WordPress Blog, but to decouple some of the external Javascript logic away from WordPress Blog dependence, and onto <font color=blue>&#8220;www openness&#8221; (or external Javascript hotlinking)<\/font> and <font color=purple>emoji placement flexibility<\/font> &#8230;<\/p>\n<p><code><br \/>\n&lt;script type='text\/javascript' src='<font color=blue>\/\/www.rjmprogramming.com.au<\/font>\/personal_links.js<font color=purple>?wordingis=[innerHTMLmatchEmojisAppendToVia]<\/font>'&gt;&lt;\/script&gt;<br \/>\n<\/code><\/p>\n<p>This new &#8220;wordingis&#8221; argument can also exist at the web browser address bar level too.  All this being practical, the only other dependency <font size=1>(other than an unlucky clash of Javascript variable names used)<\/font> is the existence of &#8220;window.localStorage&#8221; with enough of that storage available for the user to add their &#8230;<\/p>\n<p><code><br \/>\n[URL]#[Hardcoding]<br \/>\n<\/code><\/p>\n<p> &#8230; couplings processed by <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/personal_links.js-GETME\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personal_links.js-GETME\">personal_links.js<\/a> external Javascript.  We hope you can find a way to use this clientside logic.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/personalized-links-external-javascript-hotlinking-tutorial\/'>Personalized Links External Javascript Hotlinking Tutorial<\/a>.<\/p-->\n<hr>\n<p id='wpbplt'>Previous relevant <a target=_blank title='WordPress Blog Personalized Links Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/wordpress-blog-personalized-links-tutorial\/'>WordPress Blog Personalized Links Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personalized_links.jpg\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"WordPress Blog Personalized Links Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/personalized_links.jpg\" title=\"WordPress Blog Personalized Links Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">WordPress Blog Personalized Links Tutorial<\/p><\/div>\n<p>Writing these blog postings there are potential links we&#8217;re bound to forget to place into the blog postings.  This is fairly subjective, because one person&#8217;s link interest might trigger another person&#8217;s &#8220;ho hum&#8221; alert <font size=1>(and we all know the wooooorrrrrlllldddd needs more lerts)<\/font>.  Today, we want to offer the user the opportunity to create their own &#8230;<\/p>\n<p><code><br \/>\npersonalized links<br \/>\n<\/code><\/p>\n<p> &#8230; saved to &#8230;<\/p>\n<p><code><br \/>\nwindow.<a target=_blank title='window.localStorage information from W3schools' href='https:\/\/www.w3schools.com\/jsref\/prop_win_localstorage.asp'>localStorage<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; and, thereby, being intersessional by nature.<\/p>\n<p>The user picks &#8220;hardcodings&#8221; (probably best to include surrounding space characters) in amongst the webpage wording that can turn into a &#8220;personalized link&#8221; via a single <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/personal_links.js_GETME\">personal_links.js<\/a> external Javascript (only needing change to our TwentyTen theme&#8217;s header.php &#8230;<\/p>\n<p><code><br \/>\n&lt;script type='text\/javascript' src='\/personal_links.js?rand=&lt;?php echo rand(0,1986754); ?&gt;'&gt;&lt;\/script&gt;<br \/>\n<\/code><\/p>\n<p>) &#8230; containing &#8230;<\/p>\n<p><code><br \/>\n\/\/ personal_links.js<br \/>\n\/\/ RJM Programming<br \/>\n\/\/ January, 2022<br \/>\n<br \/>\n   var retvwpp='';<br \/>\n   var retplinks=[];<br \/>\n   var pltextstr='';<br \/>\n   if (window.localStorage) {<br \/>\n     var wp_ls=location.search.split('wpplgro=')[1] ? decodeURIComponent(location.search.split('wpplgro=')[1]).split('&')[0] : ''<br \/>\n     if (wp_ls != '') {<br \/>\n       localStorage.removeItem('wp_personal_links');<br \/>\n       retvwpp='';<br \/>\n     } else if (getwpplgro() != '') {<br \/>\n       var retvis=(retvwpp);<br \/>\n       if (retvis != '') {<br \/>\n         pltextstr='';<br \/>\n         retplinks=retvis.split('`');<br \/>\n         for (var irg=0; irg&lt;retplinks.length; irg++) {<br \/>\n           if (retplinks[irg].indexOf('#') != -1) {<br \/>\n             if (pltextstr == '') { pltextstr='`';  }<br \/>\n             pltextstr+=(retplinks[irg].split('#')[1]) + '`';<br \/>\n           }<br \/>\n         }<br \/>\n         setTimeout(andsogolooking, 5000);<br \/>\n       }<br \/>\n     }<br \/>\n<br \/> <br \/>\n     if (document.URL.toLowerCase().indexOf('rjmprogramming.com.au\/itblog') != -1) {<br \/>\n      setTimeout(preaskwpplgro, 7000);<br \/>\n     }<br \/>\n<br \/> <br \/>\n   }<br \/>\n<br \/> <br \/>\n   function reverse(s) { \/\/ thanks to https:\/\/stackoverflow.com\/questions\/958908\/how-do-you-reverse-a-string-in-place-in-javascript<br \/>\n     return s.split(\"\").reverse().join(\"\");<br \/>\n   }<br \/>\n<br \/> <br \/>\n   function preaskwpplgro() {<br \/>\n       var xasare=document.getElementsByTagName('a');<br \/>\n       for (var ixasare=0; ixasare&lt;xasare.length; ixasare++) {<br \/>\n         \/\/console.log('0:' + xasare[ixasare].innerHTML + ' ... ' + ('' + xasare[ixasare].href));<br \/>\n         if (xasare[ixasare].innerHTML.replace('Long hover help available.','Highlighting and long hover help.') == 'Highlighting and long hover help.' && ('' + xasare[ixasare].href).indexOf('#') != -1) {<br \/>\n           \/\/console.log('1:' + xasare[ixasare].innerHTML + ' ... ' + ('' + xasare[ixasare].href));<br \/>\n           xasare[ixasare].onmousedown=function() { askwpplgro(); }<br \/>\n           xasare[ixasare].ontouchdown=function() { askwpplgro(); }<br \/>\n           xasare[ixasare].innerHTML=xasare[ixasare].innerHTML.replace('.','&amp;#128279;');<br \/>\n           xasare[ixasare].title+='  Also come here for personalized blog link management functionality.  ';<br \/>\n         }<br \/>\n       }<br \/>\n   }<br \/>\n<br \/> <br \/>\n   function askwpplgro() {<br \/>\n     var prepeu='', midpeu='';<br \/>\n     if (document.URL.toLowerCase().indexOf('rjmprogramming.com.au\/itblog')) {<br \/>\n       prepeu='If contextual help is available for a feature (that you long hover over) of this webpage a new green bordered webpage part will open and on clicking in this and answering Y you can read and interact with a relevant Blog Posting regarding this.  To remove (or restore) context help access the All Posts menu Toggle Context Help Mode submenu, as required. ' + String.fromCharCode(10) + '  ';<br \/>\n       midpeu=' (or enter ? for just personalized link information)';<br \/>\n     }<br \/>\n     var peu='?';<br \/>\n     while (peu == '?') {<br \/>\n       peu=prompt(prepeu + 'Please enter URL (no hashtags)' + midpeu + ' followed by hashtag (#) then case sensitive wording to associate the URL with (when not already linked) greater than one character long (spaces encouraged).  Special URL of . gets its URL from the first matching link found on the webpage.  Enter X to clear your URLs.', '');<br \/>\n       prepeu=retvwpp + String.fromCharCode(10) + String.fromCharCode(10);<br \/>\n       midpeu='';<br \/>\n     }<br \/>\n     if (peu == null) { peu=''; }<br \/>\n     if (peu.indexOf('#') &gt; 0) {<br \/>\n       if (peu.split('#')[1].trim() != '') {<br \/>\n       if (peu.split('#')[0] == '.') {<br \/>\n       var restp=peu.split('#')[1];<br \/>\n       var asare=document.getElementsByTagName('a');<br \/>\n       for (var iasare=0; iasare&lt;asare.length; iasare++) {<br \/>\n         if (asare[iasare].innerHTML == peu.split('#')[1] && peu.split('#')[0] == '.') {<br \/>\n           if (('' + asare[iasare].href).replace(\/^null$\/g,'') != '') {<br \/>\n             if (asare[iasare].href.split('#')[0].indexOf('?') == -1) {<br \/>\n             peu=asare[iasare].href.split('#')[0] + '?#' + restp;<br \/>\n             } else {<br \/>\n             peu=asare[iasare].href.split('#')[0] + '&#' + restp;<br \/>\n             }<br \/>\n           }<br \/>\n         }<br \/>\n       }<br \/>\n       }<br \/>\n       if (eval('' + peu.split('#')[1].length) &gt; 1) {<br \/>\n       if (peu.indexOf('?') &gt; 0) {<br \/>\n       setwpplgro(peu.split('?')[0] + '?' + encodeURIComponent(peu.split('?')[1]).replace(\/\\%26\/g,'&').replace(\/\\%23\/g,'#'));<br \/>\n       } else {<br \/>\n       setwpplgro(peu.split('#')[0] + '#' + encodeURIComponent(peu.split('#')[1]));<br \/>\n       }<br \/>\n       }<br \/>\n       }<br \/>\n       retvwpp='';<br \/>\n     } else if (peu.toLowerCase() == 'x') {<br \/>\n       localStorage.removeItem('wp_personal_links');<br \/>\n     }<br \/>\n   }<br \/>\n<br \/> <br \/>\n   function setwpplgro(invlu) {<br \/>\n    if (retvwpp == '') {<br \/>\n      localStorage.setItem('wp_personal_links', (invlu));<br \/>\n      andsogolooking();<br \/>\n    } else {<br \/>\n      localStorage.removeItem('wp_personal_links');<br \/>\n      localStorage.setItem('wp_personal_links', (retvwpp) + ('`') + (invlu));<br \/>\n      andsogolooking();<br \/>\n    }<br \/>\n    retvwpp=getwpplgro();<br \/>\n   }<br \/>\n<br \/> <br \/>\n   function getwpplgro() {<br \/>\n    retvwpp=('' + localStorage.getItem('wp_personal_links')).replace(\/^null$\/g,'');<br \/>\n    if (retvwpp != '') {<br \/>\n       var retvis=(localStorage.getItem('wp_personal_links')).replace(\/^null$\/g,'');<br \/>\n       if (retvis != '') {<br \/>\n         pltextstr='';<br \/>\n         \/\/alert('retvis=' + retvis);<br \/>\n         retplinks=retvis.split('`');<br \/>\n         for (var irg=0; irg&lt;retplinks.length; irg++) {<br \/>\n           if (retplinks[irg].indexOf('#') != -1) {<br \/>\n             if (pltextstr == '') { pltextstr='`';  }<br \/>\n             pltextstr+=(retplinks[irg].split('#')[1]) + '`';<br \/>\n           }<br \/>\n         }<br \/>\n         setTimeout(andsogolooking, 5000);<br \/>\n       }<br \/>\n    }<br \/>\n    return retvwpp;<br \/>\n   }<br \/>\n<br \/> <br \/>\n   function andsogolooking() {<br \/>\n     var ttsf=[], thiswptext='', rawhwptext='', ideareps=[], jjn, kkn, allokaywpl=false, newbih='', doit=false, addone=1;<br \/>\n     if (pltextstr != '') {<br \/>\n       ttsf=pltextstr.substring(0,eval(-1 + eval('' + pltextstr.length))).substring(1).split('`');<br \/>\n       \/\/alert('two:' + ttsf.length + ' and pltextstr=' + pltextstr + ' and ttsf[0]=' + ttsf[0]);<br \/>\n     }<br \/>\n     if (ttsf.length != 0) {<br \/>\n       thiswptext=(document.body.innerText || document.body.contentWindow || document.body.contentDocument);<br \/>\n       rawhwptext=document.body.innerHTML;<br \/>\n       newbih=rawhwptext;<br \/>\n       \/\/alert('ttsf.length=' + ttsf.length + ':' + ttsf[0] + ' and retplinks.length=' + retplinks.length + ':' + retplinks[0]);<br \/>\n     }<br \/>\n     for (jjn=0; jjn&lt;ttsf.length; jjn++) {<br \/>\n      addone=1;<br \/>\n      if (ttsf[jjn].trim() != '') {<br \/>\n       if (thiswptext.indexOf(decodeURIComponent(ttsf[jjn])) != -1) {<br \/>\n         if (newbih.indexOf(decodeURIComponent(ttsf[jjn])) != -1 && ((retplinks[jjn].split('#')[0].replace(\/\\?$\/g,'').replace(\/\\&$\/g,'') != retplinks[jjn].split('#')[0] || newbih.indexOf('&gt;' + decodeURIComponent(ttsf[jjn]) + '&lt;') == -1)) && newbih.indexOf('\"' + decodeURIComponent(ttsf[jjn]) + '\"') == -1) {<br \/>\n           ideareps=newbih.split(decodeURIComponent(ttsf[jjn]));<br \/>\n           allokaywpl=true;<br \/>\n           for (kkn=0; kkn&lt;ideareps.length; kkn++) {<br \/>\n             if (eval(1 + kkn) &gt;= eval('' + ideareps.length)) { addone=0; }<br \/>\n             \/\/if (ttsf[jjn] == 'en') { alert('reverse(ideareps[kkn]=' + reverse(ideareps[kkn]));    }<br \/>\n             if (eval('' + reverse(ideareps[kkn]).indexOf('\"')) &gt; eval('' + reverse(ideareps[kkn]).replace('&gt;','&lt;').indexOf('&lt;'))) {<br \/>\n              if (ideareps[kkn].slice(-1) != '&gt;' || ideareps[eval(addone + kkn)].substring(0,1) != '&lt;') {<br \/>\n               if (retplinks[jjn].split('#')[0].replace(\/\\?$\/g,'').replace(\/\\&$\/g,'') != retplinks[jjn].split('#')[0]) {<br \/>\n               newbih=newbih.replace(ideareps[kkn] + decodeURIComponent(ttsf[jjn]), ideareps[kkn] + '&lt;a target=_blank title=\"Taking you to ' + retplinks[jjn].split('#')[0].replace(\/\\?$\/g,'').replace(\/\\&$\/g,'') + ' as requested\" style=\"color:red;text-decoration-style:dotted;\" href=\"' + retplinks[jjn].split('#')[0].replace(\/\\?$\/g,'').replace(\/\\&$\/g,'') + '\"&gt;' + decodeURIComponent(ttsf[jjn]) + '&lt;\/a&gt;');<br \/>\n               } else {<br \/>\n               newbih=newbih.replace(ideareps[kkn] + decodeURIComponent(ttsf[jjn]), ideareps[kkn] + '&lt;a target=_blank title=\"Taking you to ' + retplinks[jjn].split('#')[0].replace(\/\\?$\/g,'').replace(\/\\&$\/g,'') + ' as requested\" style=\"color:orange;text-decoration-style:dotted;\" href=\"' + retplinks[jjn].split('#')[0].replace(\/\\?$\/g,'').replace(\/\\&$\/g,'') + '\"&gt;' + decodeURIComponent(ttsf[jjn]) + '&lt;\/a&gt;');<br \/>\n               }<br \/>\n               doit=true;<br \/>\n              }<br \/>\n             }<br \/>\n           }<br \/>\n         }<br \/>\n       }<br \/>\n      }<br \/>\n     }<br \/>\n     if (doit) { document.body.innerHTML=newbih; }<br \/>\n   }<br \/>\n<\/code><\/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='#d54720' onclick='var dv=document.getElementById(\"d54720\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/link\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54720' 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='#d54725' onclick='var dv=document.getElementById(\"d54725\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/hotlink\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54725' 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='#d54734' onclick='var dv=document.getElementById(\"d54734\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/url\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54734' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Thinking about the hosting of web applications and offering personalization into the mix of the way the user experiences that content, as far as URLs go, the most publicly accessible interfacing is through the URL GET arguments that can nuance &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/personalized-links-external-javascript-hotlinking-context-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":[1885,151,257,2105,354,409,1533,3362,2761,3847,576,2828,1525,2469,652,1807,2415,919,2306,932,972,997,1319,1345,3551,1456],"class_list":["post-54734","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-tutorials","tag-argument","tag-blog","tag-content","tag-context","tag-dom","tag-external-javascript","tag-get","tag-hardcoding","tag-header-php","tag-hotlink","tag-html","tag-hyperlink","tag-innerhtml","tag-innertext","tag-javascript","tag-link","tag-localstorage","tag-personalization","tag-personalize","tag-php","tag-posting","tag-programming","tag-tutorial","tag-url","tag-window-localstorage","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/54734"}],"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=54734"}],"version-history":[{"count":11,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/54734\/revisions"}],"predecessor-version":[{"id":54745,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/54734\/revisions\/54745"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=54734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=54734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=54734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}