{"id":35361,"date":"2018-01-06T03:01:42","date_gmt":"2018-01-05T17:01:42","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=35361"},"modified":"2018-01-06T08:56:36","modified_gmt":"2018-01-05T22:56:36","slug":"textarea-pointing-local-font-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-local-font-tutorial\/","title":{"rendered":"Textarea Pointing Local Font Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Textarea Pointing Local Font Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing_email_pdf_canvas_ls_rasterise_font.jpg\" title=\"Textarea Pointing Local Font Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Textarea Pointing Local Font Tutorial<\/p><\/div>\n<p>A large part of the design of a web application relates to the agreed message formats.  Yesterday&#8217;s <a title='Textarea Pointing Rasterise Tutorial' href='#tprt'>Textarea Pointing Rasterise Tutorial<\/a> started us down the road of a new message format whose delimitation highlights goes like an <a target=_blank title='Javascript encodeURIComponent method information from w3schools' href='http:\/\/www.w3schools.com\/jsref\/jsref_encodeURIComponent.asp'>encodeURIComponent<\/a>() version of &#8230;<\/p>\n<p><code><br \/>\n{header}:[{startIntegerCoord}.{Red3Digits}{Green3Digits}{Blue3Digits}{Another3Digits}[,{nonStartIntegerCoords}*][;{startIntegerCoord}.{Red3Digits}{Green3Digits}{Blue3Digits}{Another3Digits}[,{nonStartIntegerCoords}*]*]*]<br \/>\n<\/code><\/p>\n<p> &#8230; where in general terms &#8220;,&#8221; is &#8220;pen down&#8221; and &#8220;;&#8221; is &#8220;pen up&#8221; (and &#8220;:&#8221; separates a {header} from &#8220;the rest&#8221;), and in yesterday&#8217;s thoughts &#8230;<\/p>\n<p><code><br \/>\n{header} consists of {dataLength}.{numberOfPixelsInOneRowWidth}<br \/>\n<\/code><\/p>\n<p> &#8230; and because of this, these message types stand alone (important when designing a message format) in that any one {startIntegerCoord} or any of {nonStartIntegerCoords} could get an (x,y) co-ordinate set be defined via (for the case of {startIntegerCoord}) &#8230;<\/p>\n<p><code><br \/>\nx = ({startIntegerCoord} % {numberOfPixelsInOneRowWidth})<br \/>\ny = (({startIntegerCoord} - x) \/ {numberOfPixelsInOneRowWidth})<br \/>\n<\/code><\/p>\n<p>But we&#8217;ve digressed a little from today&#8217;s &#8220;Textarea Pointing Local Font Tutorial&#8221; topic haven&#8217;t we?  Well, not entirely, because the messages used to define our &#8220;local fonts&#8221; (yes, we are setting about a system of defining fonts local to other web applications on the same domain using [canvasContext].strokeText() or [canvasContext].fillText() (if we are interested), the storage means being as a few tutorials ago &#8230;<\/p>\n<blockquote>\n<ul>\n<li>a fully blown <a target=_blank title='Database information from Wikipedia' href='https:\/\/en.wikipedia.org\/wiki\/Database'>database<\/a> solution &#8230; too much &#8230;<\/li>\n<li>HTTP <a target=_blank title='Cookie information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/HTTP_cookie'>Cookies<\/a> &#8230; too little &#8230;<\/li>\n<li>HTML5 <a target=_blank title='Web Storage information from w3schools' href='https:\/\/www.w3schools.com\/html\/html5_webstorage.asp'>Web Storage<\/a> localStorage &#8230; just right<\/li>\n<\/ul>\n<\/blockquote>\n<p> &#8230; hence the encodeURIComponent() bit to the blurb above) &#8230; will base themselves on the same delimitation rules, but it&#8217;s just that, with &#8220;local font&#8221; messaging &#8230;<\/p>\n<p><code><br \/>\n{header} is {nameOfYourLocalFont}<br \/>\n<\/code><\/p>\n<p> &#8230; and that will not start with a number <font size=1>&#8230; now will it, &#8220;compliant user&#8221;? &#8230;<\/font> so the logic should be able to categorize logic for those via &#8230;<\/p>\n<p><code><br \/>\n{header}:[{startIntegerXCoord}.{Red3DigitsIsZero}{Green3DigitsIsZero}{Blue3DigitsIsZero}{asciiCharacterCodeIn3Digits}[,{startYCoord}]][{,{nonStartIntegerXCoord},{nonStartYCoord}}*][{;{penUpIntegerXCoord},{penUpYCoord}}*][{,{nonStartIntegerXCoord},{nonStartYCoord}}*]*]*]<br \/>\n<\/code><\/p>\n<p>It&#8217;s in our thinking to capture these co-ordinates via any\/both of &#8230;<\/p>\n<ol>\n<li><a target=_blank title='HTML textarea tag information from w3schools' href='http:\/\/www.w3schools.com\/tags\/tag_textarea.asp'>textarea<\/a><\/li>\n<li><b><a target=_blank title='HTML Canvas element information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_canvas.asp'>canvas<\/a><\/b><\/li>\n<\/ol>\n<p> &#8230; but for today&#8217;s progress, <b>just canvas<\/b> work in an HTML iframe channeling our <a target=_blank title='Signature Signature Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/signature-signature-primer-tutorial\/'>Signature Signature Primer Tutorial<\/a>&#8216;s &#8220;Signature of Signature&#8221; (hard working &#8220;duck&#8221; web application) examined <font size=1>&#8230; you guessed it &#8230;<\/font> via a <a target=_blank title='Client pre-emptive iframe' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/?s=pre-emptive'>&#8220;client pre-emptive iframe&#8221;<\/a> determination of its existence.  We limit the height and width of that HTML iframe to reflect the height and width of a font character, but bear with us if the size of this changes a bit over time.  We&#8217;ll see.  The iframe starts in &#8220;scribble&#8221; data capture mode, reflecting you creating your own unique font character versions, hence the &#8220;local font&#8221; concept. <\/p>\n<p>In summary, codewise &#8230;<\/p>\n<ul>\n<li>Today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.htm\" title=\"Click picture\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html------GETME\" title=\"textarea_pointing.htm\">textarea_pointing.htm<\/a> HTML and Javascript (DOM) and CSS <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html-----GETME\" title=\"textarea_pointing.htm\">changed this way<\/a> to allow for these new local &#8220;Font Creation&#8221; (initially via canvas) logics available as (non default) options off an HTML select element dropdown (hived off the web application H1 title) &#8230; supervising, newly &#8230;<\/li>\n<li>Called HTML and Javascript and CSS (with the canvas element) <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/signature_signature.html-------GETME' title='signature_signature.html'>signature_signature.html<\/a> <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/signature_signature.html-------GETME' title='signature_signature.html'>changed this way<\/a> sharing canvas co-ordinates when a parent web application is interested in &#8220;rasterizations&#8221; &#8230; and calling &#8230;<\/li>\n<li>External Javascript called <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/signature_signature.js------------------------------GETME' title='signature_signature.js'>signature_signature.js<\/a> <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/signature_signature.js------------------------------GETME' title='signature_signature.js'>changed this way<\/a> regarding stopping localStorage and HTTP Cookie logic within its usual logic (collecting people&#8217;s signatures, that is)<\/li>\n<\/ul>\n<hr>\n<p id='tprt'>Previous relevant <a target=_blank title='Textarea Pointing Rasterise Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-rasterise-tutorial\/'>Textarea Pointing Rasterise 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\/textarea_pointing.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Textarea Pointing Rasterise Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing_email_pdf_canvas_ls_rasterise.jpg\" title=\"Textarea Pointing Rasterise Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Textarea Pointing Rasterise Tutorial<\/p><\/div>\n<p>Following up on yesterday&#8217;s <a title='Textarea Pointing Web Storage Tutorial' href='#tpwst'>Textarea Pointing Web Storage Tutorial<\/a> and <a title='Textarea Pointing Canvas Tutorial' href='#tpct'>Textarea Pointing Canvas Tutorial<\/a> preceeding it, we have the means now to embellish the reporting functionalities surrounding the use of HTML5 <a target=_blank title='HTML Canvas element information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_canvas.asp'>canvas<\/a> element, and two extremely useful (and fundamental) &#8230;<\/p>\n<ul>\n<li>[canvasContext].<a target=_blank title='Canvas methods information from W3schools' href='https:\/\/www.w3schools.com\/tags\/ref_canvas.asp'>getImageData<\/a>() &#8230; to derive pixel information via canvas &#8230; and (it&#8217;s what you do in the middle here that is the most impactive &#8230; we do <i>inversing colours<\/i> and <i>grayscale<\/i> manipulations via pixel changes here, in between) &#8230;<\/li>\n<li>[canvasContext].putImageData() &#8230; to place pixel information into canvas<\/li>\n<\/ul>\n<p> &#8230; and you&#8217;ve also got the more geometrically based &#8230;<\/p>\n<ul>\n<li>[canvasContext].<a target=_blank title='Canvas methods information from W3schools' href='https:\/\/www.w3schools.com\/tags\/ref_canvas.asp'>translate<\/a>()<\/li>\n<li>[canvasContext].scale()<\/li>\n<li>[canvasContext].rotate()<\/li>\n<\/ul>\n<p> &#8230; do what they say, to create new image conversions for our (central) canvas element.<\/p>\n<p>But of more interest, today, at least for us, is us starting down that &#8220;reverse route&#8221; of scanning (post &#8220;blobbing&#8221;).  Even though two days ago we said &#8230;<\/p>\n<blockquote><p>\nThis is all great, but that&#8217;s it, unless you want to run that image data back through an intelligent scanning process to try to regain the &#8220;character data&#8221;?  Some scanners do this, but do you really think you are going to continue getting a good result that way forever?  We say, hang on to data in rawer forms and resolutions until the very last minute, and only go to these very well programmed for &#8220;graphical&#8221; forms (of final reporting) for your final reporting, or if you know that only that &#8220;blobby&#8221; &#8220;graphical&#8221; form is all that&#8217;s required anyway.   If so, think about using HTML canvas from the start.  It&#8217;s data capture capabilities, as we at this blog <a target=_blank title='Canvas bog posts at this blog' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/canvas'>have been at pains<\/a> to point out for a long time now, are also excellent.\n<\/p><\/blockquote>\n<p> &#8230; we couldn&#8217;t resist while we had the opportunity in code in between &#8230;<\/p>\n<ul>\n<li>[canvasContext].getImageData() &#8230; to derive pixel information via canvas &#8230; and &#8230;<\/li>\n<li>[canvasContext].putImageData() &#8230; to place pixel information into canvas<\/li>\n<\/ul>\n<p> &#8230; to read canvas pixels and we &#8220;Re-stringify&#8221; or (we label it) &#8220;Rasterise&#8221; the data to create the slightly shaky (but we may be able to improve it) first goes at re-scanning already &#8220;blobbed&#8221; out &#8220;graphics&#8221; data &#8230; just to see how far all this is feasible?!  We need more work retaining non black and white colours, and we&#8217;ll let you know more about that as time goes on, but in the meantime &#8230;<\/p>\n<p>Today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.htm\" title=\"Click picture\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html------GETME\" title=\"textarea_pointing.htm\">textarea_pointing.htm<\/a> HTML and Javascript (DOM) and CSS <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html-----GETME\" title=\"textarea_pointing.htm\">canvas manipulation changes<\/a> and <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html------GETME\" title=\"textarea_pointing.htm\">rasterisation changes<\/a> helped out with these canvas based manipulations, and called into play <a target=_blank title='Client pre-emptive iframe' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/?s=pre-emptive'>&#8220;client pre-emptive iframe&#8221;<\/a> determinations of whether <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/pixellate.php------------GETME\" title=\"pixellate.php\">the changes needed to integrate<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/pixellate.php------------GETME\" title=\"pixellate.php\">pixellate.php<\/a>&#8216;s GD Image Manipulations at the Pixel Level we last talked about with <a target=_blank title='PHP GD Image at Pixel Level Animation Rotation Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/php-gd-image-at-pixel-level-animation-rotation-tutorial\/'>PHP GD Image at Pixel Level Animation Rotation Tutorial<\/a> can take us further down the &#8220;pixellated&#8221; road of discovery <font size=1>swear, &#8216;guv, it was only lemonade in that there flask<\/font>.<\/p>\n<hr>\n<p id='tpwst'>Previous relevant <a target=_blank title='Textarea Pointing Web Storage Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-web-storage-tutorial\/'>Textarea Pointing Web Storage 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\/textarea_pointing.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Textarea Pointing Web Storage Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing_email_pdf_canvas_ls.jpg\" title=\"Textarea Pointing Web Storage Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Textarea Pointing Web Storage Tutorial<\/p><\/div>\n<p>We add some &#8220;accountability&#8221; to where we stopped off at yesterday with <a title='Textarea Pointing Canvas Tutorial' href='#tpct'>Textarea Pointing Canvas Tutorial<\/a> today.  We define &#8220;accountability&#8221; in this context, and with our rules, short of bothering with &#8230;<\/p>\n<ul>\n<li>a fully blown <a target=_blank title='Database information from Wikipedia' href='https:\/\/en.wikipedia.org\/wiki\/Database'>database<\/a> solution &#8230; too much &#8230;<\/li>\n<li>HTTP <a target=_blank title='Cookie information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/HTTP_cookie'>Cookies<\/a> &#8230; too little &#8230;<\/li>\n<li>HTML5 <a target=_blank title='Web Storage information from w3schools' href='https:\/\/www.w3schools.com\/html\/html5_webstorage.asp'>Web Storage<\/a> localStorage &#8230; just right<\/li>\n<\/ul>\n<p>Porridge is served!  How to make this decision?  To us, it goes by &#8220;permanence factor&#8221; (database really good) and &#8220;data size requirements&#8221; (and today we store the whole <i>innerHTML<\/i> of the HTML form that encompasses all our &#8220;textarea posse&#8221; and this is far too much for HTTP Cookies &#8230; so HTML5 localStorage is <a target=_blank title='?' href='https:\/\/www.youtube.com\/watch?v=RCldiADPDEM'>our decision<\/a>).<\/p>\n<p>There are these aspects to doing this &#8230;<\/p>\n<ul>\n<li>in the menu section of the webpage have one select element id=ssaveas (dropdown) (with an initial option element labelled &#8220;Fill in Save As or choose&#8221;) and one input type=text element<\/li>\n<li>at document.body onload event look through localStorage &#8230; as per the Javascript &#8230;<br \/>\n<code><br \/>\n    if (window.localStorage) {<br \/>\n     for (var iq in window.localStorage) {<br \/>\n      val = localStorage.getItem(iq);<br \/>\n      if (val) {<br \/>\n       if (iq.substring(0,3) == 'tp_') {<br \/>\n        document.getElementById('ssaveas').innerHTML+='&lt;option value=\"' + iq.substring(3) + '\"&gt;Recall \"' + iq.substring(3) + '\"&lt;\/option&gt;';<br \/>\n       }<br \/>\n      }<br \/>\n     }<br \/>\n    }<br \/>\n<\/code><br \/>\n &#8230; to further populate, as necessary, the dropdown, that has &#8230;\n<\/li>\n<li>onchange event for select element dropdown reads localStorage &#8230; as per Javascript (for var<font size=1>iable<\/font> <i>newo<\/i> being that webpage snapshot&#8217;s name) &#8230; as entered by user &#8230;<br \/>\n<code><br \/>\n    if (localStorage) {<br \/>\n     if (localStorage.getItem('tp_' + newo)) {<br \/>\n       var bih=decodeURIComponent(localStorage.getItem('tp_' + newo));<br \/>\n       document.getElementById('myform').innerHTML=bih;<br \/>\n     }<br \/>\n    }<br \/>\n<\/code>\n<\/li>\n<li>at onblur event of the input type=text element &#8230; Javascript (for var<font size=1>iable<\/font> <i>newo<\/i> being that webpage snapshot&#8217;s name and  var<font size=1>iable<\/font> <i>hcont<\/i> is the HTML code for a &#8220;New Window&#8221; scenario) as per &#8230;<br \/>\n<code><br \/>\n if (newo != '') {<br \/>\n    if (localStorage) {<br \/>\n     if (localStorage.getItem('tp_' + newo)) {<br \/>\n       localStorage.removeItem('tp_' + newo);<br \/>\n     }<br \/>\n     var bbit='m' + hcont.split('&lt;f' + 'orm')[1].split('&gt;')[0] + '&gt;';<br \/>\n     localStorage.setItem('tp_' + newo, encodeURIComponent(hcont.split('&lt;fo' + 'r')[1].replace(bbit,'').split('&lt;\/f' + 'orm&gt;')[0]));<br \/>\n     document.getElementById('ssaveas').innerHTML+='&lt;option value=\"' + newo + '\"&gt;Recall \"' + newo + '\"&lt;\/option&gt;';<br \/>\n    }<br \/>\n }<br \/>\n<\/code>\n<\/li>\n<\/ul>\n<p>Today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.htm\" title=\"Click picture\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html----GETME\" title=\"textarea_pointing.htm\">textarea_pointing.htm<\/a> HTML and Javascript (DOM) and CSS <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html----GETME\" title=\"textarea_pointing.htm\">code changes<\/a> were all clientside, like yesterday&#8217;s work.<\/p>\n<p>Accountability food for thought, we hope?!<\/p>\n<hr>\n<p id='tpct'>Previous relevant <a target=_blank title='Textarea Pointing Canvas Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-canvas-tutorial\/'>Textarea Pointing Canvas 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\/textarea_pointing.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Textarea Pointing Canvas Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing_email_pdf_canvas.jpg\" title=\"Textarea Pointing Canvas Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Textarea Pointing Canvas Tutorial<\/p><\/div>\n<p>With our blog posting thread last left off with yesterday&#8217;s <a title='Textarea Pointing PDF Tutorial' href='#tppdft'>Textarea Pointing PDF Tutorial<\/a>, I know we&#8217;ve been holding out on involving &#8230;<\/p>\n<ul>\n<li>graphical data forms<\/li>\n<li><a target=_blank title='HTML img element information from w3schools' href='https:\/\/www.w3schools.com\/tags\/tag_img.asp'>image<\/a> data<\/li>\n<li>HTML5 <a target=_blank title='HTML Canvas element information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_canvas.asp'>canvas<\/a> element<\/li>\n<li><a target=_blank title='Data URL (or Data URI) information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Data_URI_scheme'>data URI<\/a><\/li>\n<\/ul>\n<p> &#8230; not for &#8220;nga, nga, nga nga, nga&#8221; reasons, but because we want to show that the starting out with &#8220;textarea character data&#8221; sets is a useful layer of information that can sit on top and easily pass onto these (last two above in particular) functionalities above in optional reporting modes of use, but still keep that &#8220;textual context&#8221; in place as well.  Win, win, we&#8217;d say.<\/p>\n<p>However, on non-mobile web browsers in particular, you&#8217;ve got to appreciate how the modern browsers interface to <i>canvas<\/i> elements and <i>image<\/i> data (which can be derived from that <i>canvas<\/i> element by the oft mentioned [canvasElement].<a target=_blank title='HTML5 canvas element toDataURL method information' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/HTMLCanvasElement\/toDataURL'>toDataURL<\/a>() method) with a myriad of right click (Windows or two finger gesture on Mac OS X) options, our favourites of which are &#8230;<\/p>\n<ul>\n<li>image &#8211; Open Image in New Tab (or Window)<\/li>\n<li>image &#8211; Save Image to Desktop<\/li>\n<li>image &#8211; Save Image As&#8230;<\/li>\n<li>image &#8211; Copy Image<\/li>\n<li>image &#8211; Share Mail (to client email (ie. your own email address is &#8220;From&#8221; email address) as image attachment)<\/li>\n<li>image &#8211; Share Message<\/li>\n<li>canvas &#8211; Save Page as Web Archive<\/li>\n<li>canvas &#8211; Print Page&#8230; Open PDF in PDF Reader<\/li>\n<li>canvas &#8211; Print Page&#8230; Save As PDF<\/li>\n<li>canvas &#8211; Print Page&#8230; Save As PostScript<\/li>\n<li>canvas &#8211; Print Page&#8230; Mail PDF (to client email (ie. your own email address is &#8220;From&#8221; email address) with a PDF attachment)<\/li>\n<\/ul>\n<p> &#8230; so much so that we just want all this clientside (no PHP serverside &#8220;anything&#8221; today) to wash over you with your mind &#8220;swimming&#8221; with possibilities, perhaps?!<\/p>\n<p>Take a look at today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.htm\" title=\"Click picture\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html---GETME\" title=\"textarea_pointing.htm\">textarea_pointing.htm<\/a> HTML and Javascript (DOM) and CSS code changed <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html---GETME\" title=\"textarea_pointing.htm\">this way<\/a> as all that needed to change to involve canvas and image data and data URIs in our Textarea Pointing project.<\/p>\n<p>If there is no serverside &#8220;anything&#8221; going on, what is the &#8220;glue&#8221; that holds all this clientside interfacing together?  These days, more and more, it is the use of <a target=_blank title='Data URL (or Data URI) information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Data_URI_scheme'>data URI<\/a> portable data that can be used in, just with today&#8217;s work &#8230;<\/p>\n<ul>\n<li>HTML img element src attribute<\/li>\n<li>HTML img element style attribute background URL(data URI)<\/li>\n<\/ul>\n<p>This is all great, but that&#8217;s it, unless you want to run that image data back through an intelligent scanning process to try to regain the &#8220;character data&#8221;?  Some scanners do this, but do you really think you are going to continue getting a good result that way forever?  We say, hang on to data in rawer forms and resolutions until the very last minute, and only go to these very well programmed for &#8220;graphical&#8221; forms (of final reporting) for your final reporting, or if you know that only that &#8220;blobby&#8221; &#8220;graphical&#8221; form is all that&#8217;s required anyway.   If so, think about using HTML canvas from the start.  It&#8217;s data capture capabilities, as we at this blog <a target=_blank title='Canvas bog posts at this blog' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/canvas'>have been at pains<\/a> to point out for a long time now, are also excellent.<\/p>\n<p>Another Paul Kelly song <a target=_blank title='?' href='https:\/\/www.youtube.com\/watch?v=6_ndC07C2qw'>seems apt<\/a>!<\/p>\n<hr>\n<p id='tppdft'>Previous relevant <a target=_blank title='Textarea Pointing PDF Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-pdf-tutorial\/'>Textarea Pointing PDF 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\/textarea_pointing.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Textarea Pointing PDF Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing_email_pdf.jpg\" title=\"Textarea Pointing PDF Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Textarea Pointing PDF Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Textarea Pointing Email Tutorial' href='#tpet'>Textarea Pointing Email Tutorial<\/a> was a start to our &#8220;sharing&#8221; functionality &#8220;push&#8221; with our new Textarea Pointing project.  That work involved &#8230;<\/p>\n<ul>\n<li>(new window) with menu<\/li>\n<li>(new window) without menu<\/li>\n<li>email with HTML attachment &#8230; and today we add to that &#8230;<\/li>\n<li><b>email with <a target=_blank title='Portable document format (PDF) information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Portable_Document_Format'>PDF<\/a> attachment &#8230; as well as &#8230;<\/b><\/li>\n<li><b>PDF download to client device<\/b><\/li>\n<li><b>PDF display via default client PDF viewer<\/b><\/li>\n<\/ul>\n<p> &#8230; that required, again, <a target=_blank title='Linux diff PDF Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/linux-diff-pdf-tutorial\/'>Linux diff PDF Tutorial<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/prediff.php\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/prediff.php---GETME\">prediff.php<\/a> PHP code integration <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/prediff.php---GETME\">in this changed way<\/a>.  This time, though, rather than <i>$outputpdf-&gt;Cell($x, $y, $line_of_text);<\/i> being the best <a target=_blank title='Fpdf PHP class' href='http:\/\/www.fpdf.org\/'>Fpdf<\/a> means of displaying of the PDF text, we found &#8230;<\/p>\n<p><code><br \/>\n$outputpdf-&gt;Text($x, $y, $line_of_text);<br \/>\n<\/code><\/p>\n<p> &#8230; to be more applicable to programming like for the way vinyl records work with their stylus, in other words, at a given &#8230;<\/p>\n<ul>\n<li><font size=1>HTML textarea element (x,y)<\/font> <b>position<\/b> &#8230; we gather &#8230;<\/li>\n<li><font size=1>HTML textarea element<\/font> <b>font information<\/b> <font size=1>stored in the <i>alt<\/i> attribute<\/font> &#8230; to place text &#8230;<\/li>\n<li><font size=1>to be able to<\/font> &#8230;<br \/>\n<b>$outputpdf-&gt;SetFont($fontFamily, $fontStyle, $fontSize);<br \/>\n$outputpdf-&gt;SetTextColor($fontColR, $fontColG, $fontColB);<br \/>\n$outputpdf-&gt;Text($x, $y, $line_of_text);<\/b>\n<\/li>\n<\/ul>\n<p> &#8230; as the &#8220;work of the code&#8221; needed to transition from our &#8220;user capture with character data&#8221; (in the &#8220;textarea&#8221;s) to a graphical system (or <a target=_blank title='Widget information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Software_widget'>&#8220;widget&#8221;<\/a>, you might like to think of this as).  It just so happens that the first (graphical) &#8220;widget&#8221; design of interest is the creation of PDF, as it is a good conduit between &#8220;character data&#8221; and a &#8220;graphical look&#8221;.  A &#8220;widget&#8221; feeling thing being what it is though, expect more integrations to come, as time goes on!<\/p>\n<p>Today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.htm\" title=\"Click picture\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html--GETME\" title=\"textarea_pointing.htm\">textarea_pointing.htm<\/a> code changed <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html--GETME\" title=\"textarea_pointing.htm\">this way<\/a>.<\/p>\n<hr>\n<p id='tpet'>Previous relevant <a target=_blank title='Textarea Pointing Email Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-email-tutorial\/'>Textarea Pointing Email 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\/textarea_pointing.htm\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Textarea Pointing Email Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/textarea_pointing_email.jpg\" title=\"Textarea Pointing Email Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Textarea Pointing Email Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Textarea Pointing Primer Tutorial' href='#tppt'>Textarea Pointing Primer Tutorial<\/a> was a little too localised in its application in our books.  Not if a web application is not of generic use, but this one could be of generic use, in our <strike>pamphlettes<\/strike> books.<\/p>\n<p>Our favourite &#8220;sharing&#8221; idea is email, by far, as today, as far as that goes, we are going to offer email &#8220;services&#8221; via a <a target=_blank title='Client pre-emptive iframe' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/?s=pre-emptive'>&#8220;client pre-emptive iframe&#8221;<\/a> determination of whether where you have placed today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.htm\" title=\"Click picture\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html-GETME\" title=\"textarea_pointing.htm\">textarea_pointing.htm<\/a> code (changed <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html-GETME\" title=\"textarea_pointing.htm\">this way<\/a>) has, relative to it, an existant <i>..\/PHP\/Geographicals\/prediff.php<\/i> PHP code source (that we left to go on our Textarea Pointing project) of <a target=_blank title='Linux diff PDF Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/linux-diff-pdf-tutorial\/'>Linux diff PDF Tutorial<\/a> (<a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/prediff.php\">live run<\/a>&#8216;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/prediff.php--GETME\">prediff.php<\/a> PHP code&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/prediff.php--GETME\">last changes<\/a> were used to cater for the Textarea Pointing HTML email attachment requirement).<\/p>\n<p>We like to use a &#8220;client pre-emptive iframe&#8221; technique initial check for whether the HTML finds <i>prediff.php<\/i> because the email functionality is optional after all.  If <i>prediff.php<\/i> is not found, then the Email button is never shown, simple as that.  But the other two displays of the HTML in new popup windows &#8230;<\/p>\n<ul>\n<li>with menu<\/li>\n<li>without menu &#8230; as well as &#8230;<\/li>\n<li>email with HTML attachment<\/li>\n<\/ul>\n<p> &#8230; complete the scope of the new &#8220;Sharing&#8221; functionalities today, and this year, on this!<\/p>\n<p>So &#8230; <font size=9>Happy New Year!<\/font><\/p>\n<hr>\n<p id='tppt'>Previous relevant <a target=_blank title='Textarea Pointing Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-primer-tutorial\/'>Textarea Pointing 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\/textarea_pointing.html\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Textarea Pointing Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/\/HTMLCSS\/textarea_pointing.jpg\" title=\"Textarea Pointing Primer Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Textarea Pointing Primer Tutorial<\/p><\/div>\n<p>Completely new idea today, so hoping this does not put some of you &#8220;episodic&#8221; users off.  <font size=1>We&#8217;ll get back to incomplete recent &#8220;threads&#8221; at a later date.<\/font>  This is because we had pause for thought, due to yesterday&#8217;s <a target=_blank title='Linux diff PDF Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/linux-diff-pdf-tutorial\/'>PDF textual data positioning work<\/a>, regarding <b>one<\/b> of our favourite HTML fundamental element types of interest (that we are always comparing) &#8230;<\/p>\n<ul>\n<li><a target=_blank title='HTML div information from w3schools' href='http:\/\/www.w3schools.com\/tags\/tag_div.asp'>div<\/a><\/li>\n<li><a target=_blank title='HTML textarea information from w3schools' href='http:\/\/www.w3schools.com\/tags\/tag_textarea.asp'><b>textarea<\/b><\/a><\/li>\n<\/ul>\n<p>To quote <a target=_blank title='HTML Textarea and Div Talents Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/html-textarea-and-div-talents-primer-tutorial\/'>HTML Textarea and Div Talents Primer Tutorial<\/a> (as it was addressing the <b>textarea<\/b> HTML element) &#8230;<\/p>\n<blockquote cite='https:\/\/www.rjmprogramming.com.au\/ITblog\/html-textarea-and-div-talents-primer-tutorial\/'>\n<p>It&#8217;s crucial for getting HTML or non-caretted Text (that is internally turned into HTML behind the scenes) &#8230; via those <a target=_blank title='Excel Online Spreadsheet Monthly Planner Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/excel-online-spreadsheet-monthly-planner-primer-tutorial\/'>wonderful<\/a> <a target=_blank title='Tab navigation button or panel information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Tab_(GUI)'>tabs<\/a> &#8230; off the user and onto the MySql database, and then out to the client user as part of a webpage.  Out at that webpage, though, we&#8217;ve no doubt this content is embedded in an HTML <a target=_blank title='HTML div tag information from w3schools' href='http:\/\/www.w3schools.com\/tags\/tag_div.asp'>div<\/a> element, the other &#8220;talent&#8221; here.<\/p>\n<p><\/p>\n<p>But their strengths and weaknesses go like this, at least to us, in the limited HTML text view of things &#8230;<\/p>\n<p><\/p>\n<table border=\"100\">\n<tbody>\n<tr>\n<th>Text Functionality Issue<\/th>\n<th>HTML Element Type<\/th>\n<th>Strength<\/th>\n<th>Weakness (where a \u201cYes\u201d is like \u2026 \u201cOh No!\u201d)\n<\/th>\n<\/tr>\n<tr>\n<td rowspan=\"2\">Display Monocolour Text<\/td>\n<td>Textarea\n<\/td>\n<td>Yes<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Div\n<\/td>\n<td>Yes<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\">Display Editable Text<\/td>\n<td>Textarea\n<\/td>\n<td>Yes<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Div\n<\/td>\n<td><\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<\/tr>\n<tr>\n<td rowspan=\"2\">Display Multicolour Text<\/td>\n<td>Textarea\n<\/td>\n<td><\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>Div\n<\/td>\n<td>Yes<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/blockquote>\n<p>Nothing there above gives much encouragement about the HTML <b>textarea<\/b>&#8216;s &#8220;positioning&#8221; talents.  But what if we were to create a <a target=_blank title='?' href='https:\/\/www.youtube.com\/watch?v=-kbTbg00AJU'>&#8220;posse&#8221;<\/a>, or perhaps a <a target=_blank title='?' href='https:\/\/www.youtube.com\/watch?v=zgywD3XJaWU'>&#8220;phalanx&#8221;<\/a>, of <a target=_blank title='?' href='https:\/\/www.youtube.com\/watch?v=wIrHAa0WljQ'>&#8220;textarea&#8221;<\/a>s to bank up with &#8220;bits and pieces&#8221; of the positioning <i>&#8220;issue&#8221;<\/i> (under the auspices of an HTML <a target=_blank title='HTML form information from w3schools' href='http:\/\/www.w3schools.com\/tags\/tag_form.asp'>form<\/a> element, for later accountability)?<\/p>\n<p>What do we mean by <i>&#8220;issue&#8221;<\/i> here?  Well, something like a letter, as with the end product of a scanning process involving a hardcopy letter, is that much more useful if what we end up with is the &#8220;characters&#8221; that go to make up that letter (or report, or essay), not some graphic (or totally visual) encapsulation of it, which can be what happens when you involve as your HTML &#8220;capture&#8221; element the <a target=_blank title='HTML Canvas element information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_canvas.asp'>&#8220;canvas&#8221;<\/a> element.  No, we want that &#8220;posse&#8221; of &#8220;textarea&#8221;s be that &#8220;character&#8221; source, which later, we can present as an overall graphic at a later date, for sharing purposes for instance, and maintain the &#8220;letter&#8221; (or report or essay) data continuously as the user edits.<\/p>\n<p>How to do?  We click\/touch with a base &#8220;textarea&#8221; and that is enough to arrange for an <a target=_blank title='Overlay blog postings here' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/overlay'>&#8220;overlay&#8221;<\/a> &#8220;textarea&#8221; (via CSS <a target=_blank title='CSS position:absolute information from w3schools' href='http:\/\/www.w3schools.com\/cssref\/pr_class_position.asp'>position:absolute<\/a> and <a target=_blank title='CSS z-index information from w3schools' href='http:\/\/www.w3schools.com\/cssref\/pr_pos_z-index.asp'>z-index<\/a> properties, some <a target=_blank title='CSS3 background-color information from w3schools' href='https:\/\/www.w3schools.com\/cssref\/pr_background-color.asp'>background-color:transparent<\/a> styling, along with <i>div id=dscript<\/i> (innerHTML) appended dynamic CSS styling making use of CSS <a target=_blank title='CSS3 calc information' href='https:\/\/www.htmlgoodies.com\/html5\/css\/using-the-css3-calc-function.html'>calc<\/a>&#8216;ing <i>&lt;style&gt; .mboard2 { width: calc(85% &#8211; 56px); } &lt;\/style&gt;<\/i> type syntax (where the <i>56px<\/i> would have been derived via the onclick event logic, the <i>85%<\/i> is to allow for a 15% width menu at the right, and the <i>2<\/i> in <i>mboard2<\/i> refers to the second <i>textarea<\/i> in question)) to follow (ironically an HTML div element is by far the best &#8220;container&#8221; in a (Javascript DOM controlled) <a target=_blank title='Linked list information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Linked_list'>linked list<\/a> fashion for this, rather than appending to the HTML form element&#8217;s innerHTML (which seems to wipe out previous textarea values)), like a linked list of &#8220;textarea&#8221;s.  Along the way we allow for font information to be collected and kept as well (for now, via the <i>textarea<\/i>&#8216;s <a target=_blank title='HTML alt attribute information from w3schools' href='https:\/\/www.w3schools.com\/tags\/att_alt.asp'><i>alt<\/i><\/a> attribute), to add to the chances for variety with our overall &#8220;letter&#8221; (or report or essay) reporting end product.<\/p>\n<p>Which leaves us to talk about the &#8220;textarea pointing&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html\" title=\"Click picture\">live run<\/a>&#8216;s underlying HTML and Javascript and CSS <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/textarea_pointing.html_GETME\" title=\"textarea_pointing.html\">textarea_pointing.html<\/a> code for your perusal.<\/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='#d35213' onclick='var dv=document.getElementById(\"d35213\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/textarea\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d35213' 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='#d35258' onclick='var dv=document.getElementById(\"d35258\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/email\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d35258' 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='#d35275' onclick='var dv=document.getElementById(\"d35275\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/pdf\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d35275' 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='#d35305' onclick='var dv=document.getElementById(\"d35305\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/canvas\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d35305' 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='#d35327' onclick='var dv=document.getElementById(\"d35327\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/web-storage\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d35327' 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='#d35347' onclick='var dv=document.getElementById(\"d35347\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/rotate\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d35347' 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='#d35361' onclick='var dv=document.getElementById(\"d35361\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/font\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d35361' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>A large part of the design of a web application relates to the agreed message formats. Yesterday&#8217;s Textarea Pointing Rasterise Tutorial started us down the road of a new message format whose delimitation highlights goes like an encodeURIComponent() version of &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/textarea-pointing-local-font-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":[2432,184,211,1654,2276,342,354,360,380,1605,2339,400,2223,2224,451,452,2430,541,2440,564,576,587,590,1525,2439,652,2431,703,2415,1817,861,1861,894,913,1918,967,997,2438,1054,1071,1094,1841,1262,1319,2409,1418,1496],"class_list":["post-35361","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-tutorials","tag-alt","tag-canvas","tag-click","tag-data-uri","tag-delimitation","tag-div","tag-dom","tag-download","tag-email","tag-encodeuricomponent","tag-essay","tag-event","tag-flip","tag-flop","tag-font","tag-form","tag-fpdf","tag-graphics","tag-grayscale","tag-hierarchy","tag-html","tag-iframe","tag-image","tag-innerhtml","tag-inverse","tag-javascript","tag-letter","tag-linked-list","tag-localstorage","tag-message","tag-onclick","tag-outerhtml","tag-overlay","tag-pdf","tag-pixel","tag-popup","tag-programming","tag-rasterise","tag-report","tag-rotate","tag-scale","tag-scribble","tag-textarea","tag-tutorial","tag-web-storage","tag-webpage","tag-z-index"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/35361"}],"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=35361"}],"version-history":[{"count":16,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/35361\/revisions"}],"predecessor-version":[{"id":35387,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/35361\/revisions\/35387"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=35361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=35361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=35361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}