{"id":44839,"date":"2019-04-30T03:01:04","date_gmt":"2019-04-29T17:01:04","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=44839"},"modified":"2019-04-29T22:25:34","modified_gmt":"2019-04-29T12:25:34","slug":"fairy-story-phrases-helper-sms-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/fairy-story-phrases-helper-sms-tutorial\/","title":{"rendered":"Fairy Story Phrases Helper SMS Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Fairy Story Phrases Helper SMS Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fairy_story_sms.jpg\" title=\"Fairy Story Phrases Helper SMS Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Fairy Story Phrases Helper SMS Tutorial<\/p><\/div>\n<p>SMS (or &#8220;texting&#8221; or &#8220;messaging&#8221;) in the <a target=_blank title='Apple' href='https:\/\/apple.com'>Apple<\/a> world from Yosemite and up is not just an iOS thing, but given the correct settings (on iOS go to Settings -&gt; Messages -&gt; Text Message Forwarding &#8230; and mention your macOS (or Mac OS X) device), can be a macOS (or more recent Mac OS X) thing as well.<\/p>\n<p>So, as a web application really suited to share functionality either with &#8230;<\/p>\n<ul>\n<li>SMS &#8230; or &#8230;<\/li>\n<li>Email<\/li>\n<\/ul>\n<p> &#8230; because we are dealing with text only, we add either or both as &#8220;Fairy Story Snapshot&#8221; sharing mechanisms today, that we add to the functionality of yesterday&#8217;s <a title='Fairy Story Phrases Helper Datalist Tutorial' href='#fsphdt'>Fairy Story Phrases Helper Datalist Tutorial<\/a>.<\/p>\n<p>We use very simple HTML &#8220;a&#8221; link elements with &#8220;href&#8221; attributes of the form &#8230;<\/p>\n<table>\n<tr>\n<th colspan=2>Href Attribute<\/th>\n<\/tr>\n<tr>\n<th>SMS<\/th>\n<th>Email<\/th>\n<\/tr>\n<tr>\n<td>sms:\/* phone number goes here *\/&#038;body=\/* body text goes here *\/<\/td>\n<td>mailto:\/* email address goes here *\/?subject=\/* subject goes here *\/&#038;body=\/* body text goes here *\/<\/td>\n<\/tr>\n<\/table>\n<p> &#8230; that is clicked programmatically to open client sharing application programs, and where, in Javascript, good ol&#8217; <a target=_blank title='Javascript encodeURIComponent() method information from w3schools' href='http:\/\/www.w3schools.com\/jsref\/jsref_encodeuricomponent.asp'>encodeURIComponent<\/a> will be required for those &#8220;\/* *\/&#8221; (here) parts.<\/p>\n<p>For us, sending on an iPhone allowed you to leave out &#8220;\/* phone number goes here *\/&#8221; for you to fill in at the Messages app, but no such luck with this on macOS Mojave 10.14.<\/p>\n<p>SMS or email away with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.html--GETME\" title=\"fphrases.htm\">the changed<\/a> HTML <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.html--GETME\" title=\"fphrases.htm\">fphrases.htm<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.htm\" title=\"Click picture\">live run<\/a> link.<\/p>\n<hr>\n<p id='fsphdt'>Previous relevant <a target=_blank title='Fairy Story Phrases Helper Datalist Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/fairy-story-phrases-helper-datalist-tutorial\/'>Fairy Story Phrases Helper Datalist 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\/fphrases.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Fairy Story Phrases Helper Datalist Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fairy_story_datalist.jpg\" title=\"Fairy Story Phrases Helper Datalist Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Fairy Story Phrases Helper Datalist Tutorial<\/p><\/div>\n<p>Do you remember yesterday?  <font size=1>So far so good.<\/font><\/p>\n<p>Do you remember yesterday&#8217;s <a title='Fairy Story Phrases Helper Primer Tutorial' href='#fsphpt'>Fairy Story Phrases Helper Primer Tutorial<\/a> relying on the  <a target=_blank title='Events information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_eventattributes.asp'>onkeypress<\/a> keyboard event to facilitate the &#8220;pasting&#8221; of fairy story phrases from an HTML input textbox into a (HTML textarea) &#8220;compiled fairy story&#8221; of these snippets you enter? <font size=2>Excellent.<\/font><\/p>\n<p>Do you remember 16\/04\/2019?  Like the back of your hand.  <font size=3>We&#8217;ll accept 1 out of 2.<\/font><\/p>\n<p>Do you remember the 16\/04\/2019&#8217;s <a title='HTML Datalist Tag Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/html-datalist-tag-primer-tutorial\/'>HTML Datalist Tag Primer Tutorial<\/a> introducing to this blog&#8217;s discussions the <a target=_blank title='Windows Forms comboBox information from Microsoft' href='https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.windows.forms.combobox'>ComboBox<\/a> like HTML5 (input list=dropdownId) textbox\/dropdown <a target=_blank title='HTML datalist tag information from W3Schools' href='https:\/\/www.w3schools.com\/tags\/tag_datalist.asp'>datalist<\/a> element combined functionality?  <font size=4>Well, read on anyway.<\/font><\/p>\n<p>Today, we&#8217;re combining the two <font size=1>(alright, 4)<\/font> ideas, the difference being that on this occasion we have to dynamically collapse and rebuild the dropdown (specifically &#8220;datalist&#8221;) parts to the input list=dropdownId &#8220;linkages&#8221; for the &#8220;Fairy Story Snippet&#8221; user controlled part of the web application, as the user starts each new word of their Fairy Story snippet &#8230;<\/p>\n<p><code><br \/>\n      \/\/ oko is HTML input (list=dropdownId) element object<br \/>\n      \/\/ lsuff is an incrementing global integer<br \/>\n      \/\/ \"sideas\" + luff represents \"dropdownId\" above<br \/>\n      if (lsuff &gt; 0 && sword == 'datalist') {  \/\/ thanks to https:\/\/stackoverflow.com\/questions\/24925336\/set-html5-input-list-value-with-javascript<br \/>\n          <b>oko.setAttribute(\"list\",\"sideas\" + lsuff);<br \/>\n          oko.datalist_id=\"sideas\" + lsuff;<\/b><br \/>\n      }<br \/>\n      okd.innerHTML=selbit;<br \/>\n      document.getElementById(\"sideas\" + lsuff).setAttribute('open',true);<br \/>\n      lsuff++;<br \/>\n<\/code><\/p>\n<p>So, again, feel free to try <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.html-GETME\" title=\"fphrases.htm\">the changed<\/a> HTML <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.html-GETME\" title=\"fphrases.htm\">fphrases.htm<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.htm\" title=\"Click picture\">live run<\/a> link, bearing in mind web browsers like Safari do not support &#8220;datalist&#8221;, in case your experience does not match the <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fairy_story_datalist.jpg\" title=\"Tutorial picture\">tutorial picture<\/a> experience, above.  Otherwise, perhaps you feel it is a bit like autocompletion, as it does for us too.<\/p>\n<hr>\n<p id='fsphpt'>Previous relevant <a target=_blank title='Fairy Story Phrases Helper Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/fairy-story-phrases-helper-primer-tutorial\/'>Fairy Story Phrases Helper 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\/fphrases.html\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Fairy Story Phrases Helper Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.gif\" title=\"Fairy Story Phrases Helper Primer Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Fairy Story Phrases Helper Primer Tutorial<\/p><\/div>\n<p>Just like with yesterday&#8217;s <a title='Parsing Relative Url Tutorial' href='#prut'>Parsing Relative Url Tutorial<\/a> use of the HTML &#8230;<\/p>\n<ul>\n<li>keyboard <a target=_blank title='Events information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_eventattributes.asp'>onkeypress<\/a> event Javascript logic to check on keyboard entries ahead of the <a target=_blank title='Events information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_eventattributes.asp'>onblur<\/a> event &#8220;final say&#8221; &#8230; and the &#8230;<\/li>\n<li>keyboard related <a target=_blank title='Events information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_eventattributes.asp'>oninput<\/a> event to check for pasted characters<\/li>\n<\/ul>\n<p> &#8230; today we use a similar structure of event logic to help the user piece together a fairy story, and when the opportunity arises to use a stock standard phrase here, we allow a dropdown to appear for the user to speed the process up, as well as any saved knowledge suggestions the web application develops over time, where that oninput pasting might come into play.<\/p>\n<p>Feel free to try the HTML <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.html_GETME\" title=\"fphrases.html\">fphrases.html<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/fphrases.html\" title=\"Click picture\">live run<\/a> link.<\/p>\n<hr>\n<p id='prut'>Previous relevant <a target=_blank title='Parsing Relative Url Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/parsing-relative-url-tutorial\/'>Parsing Relative Url 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\/parse_url.html\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Parsing Relative Url Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url_relative.gif\" title=\"Parsing Relative Url Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Parsing Relative Url Tutorial<\/p><\/div>\n<p>Recently, the idea of &#8230;<\/p>\n<ul>\n<li><a target=_blank title='Relative vs absolute URLs' href='http:\/\/stackoverflow.com\/questions\/2005079\/absolute-vs-relative-urls'>relative URLs<\/a> &#8230; versus &#8230;<\/li>\n<li>absolute URLs<\/li>\n<\/ul>\n<p> &#8230; has been of interest to us because PHP&#8217;s <a target=_blank title='PHP glob() method information' href='http:\/\/php.net\/manual\/en\/function.glob.php'>glob<\/a> function is so useful for those savvy users out there satisfied with relative URL definitions for their input web application file names (or wildcard based file specifications).<\/p>\n<p>How best to illustrate this nuance in a web application?  Some time back we wrote a URL parsing web application when we presented the <a title='Parsing Url Primer Tutorial' href='#pupt'>Parsing Url Primer Tutorial<\/a>.<\/p>\n<p>There we used the HTML <a target=_blank title='HTML input element information from w3schools' href='https:\/\/www.w3schools.com\/jsref\/dom_obj_url.asp'>input<\/a> tag type=URL object, new to HTML5.   The element validates URLs, but it assumes an absolute URL.  So how about we check the keyboard <a target=_blank title='Events information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_eventattributes.asp'>onkeypress<\/a> event to allow for a mapping of user entered relative URLs to an absolute URL before the <a target=_blank title='Events information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_eventattributes.asp'>onblur<\/a> event &#8220;final say&#8221;, and validation, and parsing?<\/p>\n<p><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.html-GETME\" title=\"parse_url.html\">Today&#8217;s changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.html-GETME\" title=\"parse_url.html\">parse_url.html<\/a> HTML and Javascript web application can be tried at today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.html\">live run<\/a> link.<\/p>\n<hr>\n<p id='pupt'>Previous relevant <a target=_blank title='Parsing Url Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/parsing-url-primer-tutorial\/'>Parsing Url 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\/parse_url.html\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Parsing Url Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.jpg\" title=\"Parsing Url Primer Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Parsing Url Primer Tutorial<\/p><\/div>\n<p>Today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.html_GETME\" title=\"parse_url.html\">parse_url.html<\/a> HTML and Javascript web application is intended to show the power, and simplicity of use, of the Javascript function <a target=_blank title='Javascript split information from w3schools' href='http:\/\/www.w3schools.com\/jsref\/jsref_split.asp'><i>split<\/i><\/a> to parse strings that have many component elements.  The example used in the web application is to parse web address URLs but this Javascript <i>split<\/i> usage can be applied to many different and varied ways to make things happen with web client Javascript code.<\/p>\n<p>In the spirit of <a target=_blank title='Linux or Unix piping information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Pipeline_(Unix)'><i>piping<\/i><\/a> with Linux or Unix (or Windows via piping in Windows Batch file scripting scenarios) we&#8217;ve talked about here a bit at this <a target=_blank title='Piping blog postings here' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/piping'>blog<\/a>, we like to think of <i>split<\/i> as Javascript&#8217;s &#8220;relay racer&#8221; for &#8220;horizontal coding&#8221;.  To us, &#8220;horizontal coding&#8221; is a style of coding where we don&#8217;t worry that a piece of code disappears off to the right of the screen, to us as much as anything, because it is far more important to us to use those &#8220;relay racer&#8221; mechanisms to have a few lines of greatly impactive codelines, rather than trying to make it all fit into a screenwidth of reading.  In any case, in our increasingly mobile age, what does a &#8220;screenwidth&#8221; amount to anymore?<\/p>\n<p>We&#8217;d also argue that Javascript <i>split<\/i> &#8220;relay racing&#8221; style code <b>such as<\/b> used (to make the action property of an HTML form send the resultant GET method navigation, back to where it came from) in &#8230;<\/p>\n<p><code><br \/>\nvar formstr=\"&lt;br&gt;&lt;div style='width:100%;text-align:center;background-color:yellow;'&gt;&lt;form action='\" + <b>document.URL.split('?')[0].split('#')[0]<\/b> + \"' method='GET'&gt;&lt;br&gt;&lt;br&gt;&lt;\/form&gt;&lt;\/div&gt;&lt;br&gt;\";<br \/>\n<\/code><\/p>\n<p> &#8230; to us, is probably more self explanatory than &#8230;<\/p>\n<p><code><br \/>\n<b>var durlarr=document.URL.split('?');<br \/>\nvar durltwoarr=durlarr[0].split('#');<br \/>\nvar durlstr=durltwoarr[0];<\/b><br \/>\nvar formstr=\"&lt;br&gt;&lt;div style='width:100%;text-align:center;background-color:yellow;'&gt;&lt;form action='\";<br \/>\nformstr += <b>durlstr<\/b>;<br \/>\nformstr += \"' method='GET'&gt;&lt;br&gt;&lt;br&gt;&lt;\/form&gt;&lt;\/div&gt;&lt;br&gt;\";<br \/>\n<\/code><\/p>\n<p> &#8230; because we are used to reading, and looking for more across the screen, and &#8220;relay racing&#8221; style code prepares the reader for a related more complex bit of code on which the emphasis of their concentration should fall anyway.  It is for this same reasoning we love fairly complex Linux and Unix piping scenarios in (Korn) Shell code as well.  Of course, this is just one opinion, and there are contrary arguments as well.<\/p>\n<p>So what is being &#8220;relay raced&#8221; when Javascript <i>split<\/i> works this way?  A Javascript <i>string<\/i> is being passed in memory.  In contrast it is input and output <i>streams<\/i> normally being passed during Linux and Unix piping operations.  <i>Stream<\/i> is such an apt word for this <i>flowing<\/i> (or &#8220;relay racing&#8221;) software coding style.  It feels co-operative to work this way with tried and tested software coding components.<\/p>\n<p>Anyway, why don&#8217;t you try parsing some URLs with today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.html_GETME\" title=\"parse_url.html\">parse_url.html<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.html\" title=\"Click picture\">live run<\/a>?   Or peruse this quite complex example from a recent blog posting mentioned in <a target=_blank title='Spliced Audio Number Genericization Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/spliced-audio-number-genericization-tutorial\/\/'>Spliced Audio Number Genericization Tutorial<\/a> <a target=_blank title='Complex parsing' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/parse_url.html?url=http%3A%2F%2Fwww.rjmprogramming.com.au%2FHTMLCSS%2Faudio_1_59.htm%3FnotAudio_Numbers%3DCounting%2BNumbers%2Bto%2B100%26notHear_this____%3DHear%2Byour%2Bnumber%26notHour%3Dtens%26notMinute%3Ddigits%26notContext%3D%26soundpath%3D%26notmidnight%3D%26noth1%3D1%26noth11%3D9%26notmidday%3D%26noto_clock%3D0%26notm1%3D1%26notm59%3D9%26not%3D%26notam%3D%26notpm%3D%26notsoundfile1%3Done_to_fiftynine.m4a%26notsoundfile2%3Dpast_quarterto.m4a%26notsoundfile3%3Dam_pm.m4a%26notsoundfile4%3Dmidnight_midday.m4a%26showform%3Don%23top'>yesterday<\/a>.<\/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='#d25077' onclick='var dv=document.getElementById(\"d25077\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/javascript\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d25077' 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='#d44805' onclick='var dv=document.getElementById(\"d44805\"); 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='d44805' 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='#d44821' onclick='var dv=document.getElementById(\"d44821\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/input\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d44821' 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='#d44826' onclick='var dv=document.getElementById(\"d44826\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/datalist\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d44826' 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='#d44839' onclick='var dv=document.getElementById(\"d44839\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/share\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d44839' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>SMS (or &#8220;texting&#8221; or &#8220;messaging&#8221;) in the Apple world from Yosemite and up is not just an iOS thing, but given the correct settings (on iOS go to Settings -&gt; Messages -&gt; Text Message Forwarding &#8230; and mention your macOS &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/fairy-story-phrases-helper-sms-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,20,29,37],"tags":[1695,2928,2946,367,380,2634,1605,2488,576,609,626,631,673,725,2178,860,2911,2337,907,2947,939,997,1133,1159,1262,1319],"class_list":["post-44839","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-ios","category-operating-system","category-tutorials","tag-autocompletion","tag-combobox","tag-datalit","tag-dropdown","tag-email","tag-email-address","tag-encodeuricomponent","tag-fairy-story","tag-html","tag-input","tag-ios","tag-iphone","tag-keyboard","tag-mac-os-x","tag-macos","tag-onblur","tag-oninput","tag-onkeypress","tag-paste","tag-phone-number","tag-phrase","tag-programming","tag-share","tag-sms","tag-textarea","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/44839"}],"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=44839"}],"version-history":[{"count":2,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/44839\/revisions"}],"predecessor-version":[{"id":44841,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/44839\/revisions\/44841"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=44839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=44839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=44839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}