{"id":62008,"date":"2023-12-17T03:01:34","date_gmt":"2023-12-16T17:01:34","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=62008"},"modified":"2023-12-16T13:39:08","modified_gmt":"2023-12-16T03:39:08","slug":"angled-text-tool-external-javascript-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/angled-text-tool-external-javascript-tutorial\/","title":{"rendered":"Angled Text Tool External Javascript Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Angled Text Tool External Javascript Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool_external_javascript.jpg\" title=\"Angled Text Tool External Javascript Tutorial\"   \/><\/a><p class=\"wp-caption-text\">Angled Text Tool External Javascript Tutorial<\/p><\/div>\n<p>Today, further to yesterday&#8217;s <a title='Angled Text Tool Clipboard Tutorial' href='#attct'>Angled Text Tool Clipboard Tutorial<\/a>, we have our Angled Text Helper web application &#8220;tool&#8221; calling on a &#8220;tool&#8217;s <sub>sub<\/sub>tool&#8221;, giving new meaning to our web application being &#8220;on the tools&#8221; today, for more granular text element defining purposes.  For us, coding wise, this amounts to &#8230;<\/p>\n<ul>\n<li>external Javascript &#8230;<\/li>\n<li>optional functionality &#8230;<\/li>\n<li>will not fail if not there<\/li>\n<\/ul>\n<p> &#8230; and the calling of these optional  &#8230;<\/p>\n<ul>\n<li>Font Family<\/li>\n<li>Font Style<\/li>\n<li>Font Weight<\/li>\n<li>Font Variant<\/li>\n<li>Font Stretch<\/li>\n<\/ul>\n<p> &#8230; definitions used a calling technique we can not recall ever using, exactly, before.  We often don&#8217;t involve &#8220;hashtag&#8221; navigation more than to position the reader&#8217;s position within a webpage, but today, we used &#8220;hashtag&#8221; navigation really usefully, so that the one external Javascript code file can be called in a variety of ways by the parent &#8230;<\/p>\n<p><code><br \/>\n&lt;script type='text\/javascript' src='\/font_family.js?idfamily=spanff' defer&gt;&lt;\/script&gt;<br \/>\n&lt;script type='text\/javascript' src='\/font_family.js?idstyle=spanfs' defer&gt;&lt;\/script&gt;<br \/>\n&lt;script type='text\/javascript' src='\/font_family.js?idweight=spanfw' defer&gt;&lt;\/script&gt;<br \/>\n&lt;script type='text\/javascript' src='\/font_family.js?idvariant=spanfv' defer&gt;&lt;\/script&gt;<br \/>\n&lt;script type='text\/javascript' src='\/font_family.js?idstretch=spansf' defer&gt;&lt;\/script&gt;<br \/>\n<\/code><\/p>\n<p> &#8230; and create individual working dropdowns for each of the five (additional and optional) Text definition categories, the order managed by &#8230;<\/p>\n<p><code><br \/>\n\/\/ font_family.js<br \/>\n\/\/ Place a font family\/style\/weight\/variant\/stretch dropdown into element ID called upon, or appended to document.body<br \/>\n\/\/ RJM Programming<br \/>\n\/\/ December, 2023<br \/>\n\/\/ Thanks to <a target=_blank title='https:\/\/www.w3.org\/Style\/Examples\/007\/fonts.en.html' href='https:\/\/www.w3.org\/Style\/Examples\/007\/fonts.en.html'>https:\/\/www.w3.org\/Style\/Examples\/007\/fonts.en.html<\/a><br \/>\n<br \/>\n   var conceptfont='family';<br \/>\n   var theidff='';<br \/>\n   var proposedidff='';<br \/>\n<br \/>\n   <font color=blue>var ffindex=0;<br \/>\n   if (('' + location.hash).replace('#','') != '') {<br \/>\n     ffindex=eval(('' + location.hash).replace('#',''));<br \/>\n   }<\/font><br \/>\n   <br \/>\n   if (document.head.innerHTML.indexOf('fon' + 't_fam' + 'ily.js?i' + 'd') != -1) {<br \/>\n     proposedidff=document.head.innerHTML.split('fon' + 't_fam' + 'ily.js?i' + 'd')<font color=blue>[eval(1 + ffindex)]<\/font>.split('=')[0];<br \/>\n     theidff=document.head.innerHTML.split('fon' + 't_fam' + 'ily.js?i' + 'd' + proposedidff + '=')[1].split('&')[0].split('#')[0].split('\"')[0].split(\"'\")[0].split('&gt;')[0];<br \/>\n     if (proposedidff != '') {  conceptfont=proposedidff;  }<br \/>\n   }<br \/>\n   <br \/>\n   <font color=blue>location.href='#' + eval(1 + ffindex);<\/font><br \/>\n   <br \/>\n\/\/ rest of external Javascript <sub>sub<\/sub>tool code follows ...<br \/>\n<\/code><\/p>\n<p> &#8230; <font color=blue>those &#8220;hashtag&#8221; navigation manipulations<\/font>, the content helped out by that brilliant <a target=_blank title='https:\/\/www.w3.org\/Style\/Examples\/007\/fonts.en.html' href='https:\/\/www.w3.org\/Style\/Examples\/007\/fonts.en.html'>https:\/\/www.w3.org\/Style\/Examples\/007\/fonts.en.html<\/a> resource, thanks.<\/p>\n<p>Where do we more and more these days call our external Javascript from?  We place them in our <a target=_blank title=Apache href='https:\/\/www.apache.org\/'>Apache<\/a> web server&#8217;s <a target=_blank title='Document Root' href='https:\/\/httpd.apache.org\/docs\/2.4\/urlmapping.html'>Document Root<\/a> folder, as <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/font_family.js-GETME\">&#8220;the genericized&#8221;<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/font_family.js-GETME\">font_family.js<\/a> is placed, and that way a URL as simple as &#8230;<\/p>\n<p><code><br \/>\n\/font_family.js?idfamily=spanff<br \/>\n<\/code><\/p>\n<p> &#8230; hosted on our web server <font size=1>(or from another web server <i>\/www.rjmprogramming.com.au\/font_family.js?idfamily=spanff<\/i> variant of call might do the trick)<\/font>, will, as permitted, &#8220;do it&#8217;s stuff&#8221;, without Mixed Content web browser issues.<\/p>\n<p>We&#8217;re biassed, but we think you should <sub>re-<\/sub>try <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html---GETME\">the changed<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html---GETME\">&#8220;fourth draft&#8221;<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\">Angled Text Helper Tool<\/a>, <a href='#myffif'>perhaps below<\/a>.<\/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\/angled-text-tool-external-javascript-tutorial\/'>Angled Text Tool External Javascript Tutorial<\/a>.<\/p-->\n<hr>\n<p id='attct'>Previous relevant <a target=_blank title='Angled Text Tool Clipboard Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/angled-text-tool-clipboard-tutorial\/'>Angled Text Tool Clipboard Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Angled Text Tool Clipboard Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool_clipboard.jpg\" title=\"Angled Text Tool Clipboard Tutorial\"   \/><\/a><p class=\"wp-caption-text\">Angled Text Tool Clipboard Tutorial<\/p><\/div>\n<p>We started feeling that yesterday&#8217;s <a title='Angled Text Tool Context Tutorial' href='#attct'>Angled Text Tool Context Tutorial<\/a>&#8216;s progress was starting to feel like a web application that was a &#8220;tool&#8221;.  But something was missing.  It wasn&#8217;t friendly enough to a serious user, the ones tempted to try it out and persevere, to see whether it could help them out &#8230; ie. being used as a &#8220;tool&#8221;.  And so we added some new Javascript &#8230;<\/p>\n<p><code><br \/>\nfunction fallbackCopyTextToClipboard(text) { \/\/ thanks to &lt;a target=\"_blank\" title=\"https:\/\/stackoverflow.com\/questions\/400212\/how-do-i-copy-to-the-clipboard-in-javascript\" href=\"https:\/\/stackoverflow.com\/questions\/400212\/how-do-i-copy-to-the-clipboard-in-javascript\"&gt;https:\/\/stackoverflow.com\/questions\/400212\/how-do-i-copy-to-the-clipboard-in-javascript&lt;\/a&gt;<br \/>\n  var textArea = document.createElement(\"textarea\");<br \/>\n  \/\/alert(text);<br \/>\n  textArea.value = text;<br \/>\n<br \/>\n  \/\/ Avoid scrolling to bottom<br \/>\n  textArea.style.top = \"0\";<br \/>\n  textArea.style.left = \"0\";<br \/>\n  textArea.style.position = \"fixed\";<br \/>\n<br \/>\n  document.body.appendChild(textArea);<br \/>\n  textArea.focus();<br \/>\n  textArea.select();<br \/>\n<br \/>\n  try {<br \/>\n    var successful = document.execCommand('copy');<br \/>\n    var msg = successful ? 'successful' : 'unsuccessful';<br \/>\n    console.log('Fallback: Copying text command was ' + msg);<br \/>\n  } catch (err) {<br \/>\n    console.error('Fallback: Oops, unable to copy', err);<br \/>\n  }<br \/>\n<br \/>\n  document.body.removeChild(textArea);<br \/>\n}<br \/>\n<br \/>\nfunction copyTextToClipboard(text) { \/\/ thanks to &lt;a target=\"_blank\" title=\"https:\/\/stackoverflow.com\/questions\/400212\/how-do-i-copy-to-the-clipboard-in-javascript\" href=\"https:\/\/stackoverflow.com\/questions\/400212\/how-do-i-copy-to-the-clipboard-in-javascript\"&gt;https:\/\/stackoverflow.com\/questions\/400212\/how-do-i-copy-to-the-clipboard-in-javascript&lt;\/a&gt;<br \/>\n  \/\/alert('text=' + text);<br \/>\n  if (!navigator.clipboard) {<br \/>\n    fallbackCopyTextToClipboard(text);<br \/>\n    return;<br \/>\n  }<br \/>\n  navigator.clipboard.writeText(text).then(function() {<br \/>\n    console.log('Async: Copying to clipboard was successful!');<br \/>\n  }, function(err) {<br \/>\n    console.error('Async: Could not copy text: ', err);<br \/>\n  });<br \/>\n}<br \/>\n<br \/>\nfunction nifotherthanfont(cii) {<br \/>\n  return decodeURIComponent(cii);<br \/>\n}<br \/>\n<br \/>\nfunction ifotherthanfont(cii) {<br \/>\n  var newcii=cii, allokay=true, ncs=[], incs=0;<br \/>\n  if (cii.indexOf('&lt;\/font&gt;') != -1 || cii.indexOf('&lt;\/FONT&gt;') != -1) {<br \/>\n    ncs=cii.split('&lt;\/');<br \/>\n    for (incs=1; incs&lt;ncs.length; incs++) {<br \/>\n      if (ncs[incs].toLowerCase().indexOf('font') != 0) { allokay=false;  }<br \/>\n    }<br \/>\n    if (!allokay || 1 == 1) {<br \/>\n    ncs=cii.split('&lt;font');<br \/>\n    for (incs=1; incs&lt;ncs.length; incs++) {<br \/>\n      newcii=newcii.replace('&lt;font' + ncs[incs].split('&gt;')[0] + '&gt;', '');<br \/>\n      newcii=newcii.replace('&lt;\/font&gt;', '');<br \/>\n    }<br \/>\n    ncs=cii.split('&lt;FONT');<br \/>\n    for (incs=1; incs&lt;ncs.length; incs++) {<br \/>\n      newcii=newcii.replace('&lt;FONT' + ncs[incs].split('&gt;')[0] + '&gt;', '');<br \/>\n      newcii=newcii.replace('&lt;\/FONT&gt;', '');<br \/>\n    }<br \/>\n    }<br \/>\n  }<br \/>\n  return newcii;<br \/>\n}<br \/>\n<br \/>\nfunction codecopying(mode) {<br \/>\n  var rectcos=null, icn=0, okpast=false;<br \/>\n  var eletype='td';<br \/>\n  if (mode != '') {<br \/>\n    eletype=document.getElementById(mode).outerHTML.substring(1).split(' ')[0].split('&gt;')[0];<br \/>\n  }<br \/>\n  var cos=document.getElementsByTagName(eletype); \/\/'code'<br \/>\n  for (var ico=0; ico&lt;cos.length; ico++) {<br \/>\n    if (cos[ico].id == 'is' || cos[ico].id == 'was' || (cos[ico].id == mode &amp;&amp; mode != '')) {<br \/>\n    if (mode == '') {<br \/>\n     rectcos=cos[ico].getBoundingClientRect();<br \/>\n     document.getElementById('dcode').innerHTML+='&lt;span data-fword=\"' + encodeURIComponent(ifotherthanfont(cos[ico].innerHTML.replace(\/\\&amp;lt\\;\/g,'&lt;').replace(\/\\&amp;gt\\;\/g,'&gt;')).substring(0)) + '\" onclick=\"codecopying(this.id);\" title=\"Copy unadorned HTML code to clipboard buffer\" id=scd' + ico + ' style=\"position:absolute;z-index:56;left:' + eval(-50 + eval('' + rectcos.right)) + 'px;top:' + eval(10 + eval('' + rectcos.top)) + 'px;font-size:24px;\"&gt;&lt;\/span&gt;';<br \/>\n    } else if (1 == 1) {<br \/>\n      document.getElementById(mode).style.border='1px dashed pink';<br \/>\n      copyTextToClipboard(nifotherthanfont(document.getElementById(mode).getAttribute('data-fword')).replace(\/\\&amp;amp\\;nbsp\\;\/g, '&amp;nbsp;').replace(\/\\&amp;amp\\;\\#\/g, '&amp;#').replace(\/ \\&amp;amp\\;\\;\/g, ' &amp;;').replace(\/\\&lt;br\\&gt;\/g, '').replace(\/\\&amp;amp;lt\\;\/g, '&lt;').replace(\/\\&amp;amp;gt\\;\/g, '&gt;').trim());<br \/>\n      okpast=false;<br \/>\n    }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n<\/code><\/p>\n<p>Does this code seem familiar to you?  It might be because we tried this &#8220;Being able to Copy Code to the Clipboard Here with the Blog You are Reading&#8221; when we published <a target=_blank href='https:\/\/www.rjmprogramming.com.au\/ITblog\/wordpress-blog-code-element-clipboard-copy-primer-tutorial\/' title='WordPress Blog Code Element Clipboard Copy Primer Tutorial'>WordPress Blog Code Element Clipboard Copy Primer Tutorial<\/a> back in February.  The code above is very similar, but some differences are &#8230;<\/p>\n<ul>\n<li>we make the <i>codecopying(&#8221;);<\/i> call each time the Display button is pressed, rather than once on the Blog document &#8220;onload&#8221; event<\/li>\n<li>within that <i>codecopying<\/i> function the logic can be simpler, as we store the whole HTML code snippet of relevance to the &#8220;slapped over&#8221; span element&#8217;s &#8220;data-fword&#8221; global data attribute each time, and so just regurgitate that whole global data attribute when asked to copy code to the clipboard as a user clicks an &#8220;emoji span button&#8221; near HTML code of interest<\/li>\n<li>there are no &lt;FONT&gt;&lt;\/FONT&gt; colour coding embellishments to worry about<\/li>\n<\/ul>\n<p>Copying this way from our &#8220;tool&#8221; web application and into your HTML code text editor could be a way to save heaps of coding time, we&#8217;re hoping.  <\/p>\n<p>Maybe you want to try it in <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html--GETME\">the changed<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html--GETME\">&#8220;third draft&#8221;<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\">Angled Text Helper Tool<\/a>.<\/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\/angled-text-tool-clipboard-tutorial\/'>Angled Text Tool Clipboard Tutorial<\/a>.<\/p-->\n<hr>\n<p id='attct'>Previous relevant <a target=_blank title='Angled Text Tool Context Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/angled-text-tool-context-tutorial\/'>Angled Text Tool Context Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Angled Text Tool Context Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool_context.jpg\" title=\"Angled Text Tool Context Tutorial\"   \/><\/a><p class=\"wp-caption-text\">Angled Text Tool Context Tutorial<\/p><\/div>\n<p>You only have to go about trying to solve a web application issue, often ending up at advice from the wonderful <a target=_blank href='https:\/\/stackoverflow.com' title='StackOverflow'>StackOverflow<\/a> website, to realize the &#8220;context&#8221; of a problem is often the issue.  There are so many different &#8220;takes&#8221; to how to go about the craft, it can be daunting.  As such, today, to improve on yesterday&#8217;s <a title='Angled Text Tool Primer Tutorial' href='#attpt'>Angled Text Tool Primer Tutorial<\/a>&#8216;s start to our Angled Text Helper Tool, we work at more &#8220;context&#8221; for the destination of the Angled Text, so that &#8230;<\/p>\n<ul>\n<li>yesterday&#8217;s &#8220;top left of screen&#8221; &#8230; is now joined by today&#8217;s added &#8230;<\/li>\n<li>&#8220;top right of screen&#8221; &#8230; and &#8230;<\/li>\n<li>3&#215;3 table cell nestings for top left and middle center and bottom right cells positioned to the top left without or with white spacing (of non-selected cells) &#8230; and &#8230;<\/li>\n<li>3&#215;3 table cell nestings for top left and middle center and bottom right cells positioned to the top right with cell white spacing<\/li>\n<\/ul>\n<p> &#8230; and add a text font size numerical textbox as another variable mixed in to the functionality of <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html-GETME\">the changed<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html-GETME\">&#8220;second draft&#8221;<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\">Angled Text Helper Tool<\/a> you might want to try below &#8230;<\/p>\n<p><iframe id=myffif style=\"width:100%;height:900px;\" src=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\"><\/iframe><\/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\/new-angled-text-tool-context-tutorial\/'>Angled Text Tool Context Tutorial<\/a>.<\/p-->\n<hr>\n<p id='attpt'>Previous relevant <a target=_blank title='Angled Text Tool Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/angled-text-tool-primer-tutorial\/'>Angled Text Tool Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Angled Text Tool Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.jpg\" title=\"Angled Text Tool Primer Tutorial\"   \/><\/a><p class=\"wp-caption-text\">Angled Text Tool Primer Tutorial<\/p><\/div>\n<p>Buoyed by our new found confidence in [element].<a target=_blank title='getBoundingClientRect' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Element\/getBoundingClientRect'>getBoundingClientRect<\/a>() when dealing with rotated text, in the clientside Javascript realm of proceedings, as we talked about with yesterday&#8217;s <a target=_blank href='https:\/\/www.rjmprogramming.com.au\/ITblog\/google-chart-image-chart-angled-text-annotation-tutorial\/' title='Google Chart Image Chart Angled Text Annotation Tutorial'>Google Chart Image Chart Angled Text Annotation Tutorial<\/a>, today, we&#8217;re writing a new, and so far pretty simple &#8230;<\/p>\n<p><code><br \/>\nAngled Text Helper Tool<br \/>\n<\/code><\/p>\n<p> &#8230; and we&#8217;re hoping over time, perhaps it can deserve that moniker &#8220;tool&#8221; for some readers and users out there!  We hope so.<\/p>\n<p>What&#8217;s hard about angled text, leaving aside any &#8220;trying to fit in with PHP <a target=_blank title='GD and Image Functions' href='http:\/\/php.net\/manual\/en\/ref.image.php'>GD<\/a> <a target=_blank title='PHP GD imagettftext' href='https:\/\/www.php.net\/manual\/en\/function.imagettftext.php'>imagettftext<\/a> interfacing&#8221;?  For us, it&#8217;s that rotations, by default, happen in the middle of text, but that &#8220;middle of text&#8221; is not a data point collected naturally for an HTML element ( though is derivable, <a target=_blank title=? href='https:\/\/www.youtube.com\/watch?v=e9_7GcQeiqw&#038;t=2m37s'>again<\/a>, via [element].getBoundingClientRect() ) meaning &#8230;<\/p>\n<ul>\n<li>for angled text it is hard to &#8220;sidle up&#8221; to something easily &#8230; and &#8230;<\/li>\n<li>for angled text it is hard to &#8220;snugly fit it in&#8221; within a containing something easily<\/li>\n<\/ul>\n<p>Our proof of concept <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html\">Angled Text Tool<\/a> throws it to the user to try to fit some rotated text snugly up into the top left corner of a webpage, supplying their own editable CSS, onto a raw HTML div element, where what is asked, so far, is &#8230;<\/p>\n<ul>\n<li>text itself &#8230; in a textarea element<\/li>\n<li>clockwise angle from horizontal in degrees angle &#8230; in an input type=number textbox &#8230;<\/li>\n<li>user CSS &#8230; to be applied to said HTML div &#8230; in a textbox &#8230;<\/li>\n<li>checkbox for whether to display a finishing &#8220;bounding box&#8221;<\/li>\n<\/ul>\n<p>Simple premise, but see how you go, trying our <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/angled_text_helper_tool.html_GETME\">&#8220;proof of concept&#8221; &#8220;first draft&#8221;<\/a> HTML and Javascript and CSS &#8220;would be&#8221; tool.<\/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='#d61982' onclick='var dv=document.getElementById(\"d61982\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/transform\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d61982' 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='#d61986' onclick='var dv=document.getElementById(\"d61986\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/nest\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d61986' 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='#d61990' onclick='var dv=document.getElementById(\"d61990\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/clipboard\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d61990' 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='#d62008' onclick='var dv=document.getElementById(\"d62008\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/hashtag\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62008' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Today, further to yesterday&#8217;s Angled Text Tool Clipboard Tutorial, we have our Angled Text Helper web application &#8220;tool&#8221; calling on a &#8220;tool&#8217;s subtool&#8221;, giving new meaning to our web application being &#8220;on the tools&#8221; today, for more granular text element &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/angled-text-tool-external-javascript-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,33,37],"tags":[3363,4597,85,1885,181,4377,214,4600,4599,4262,2105,265,281,3980,1750,2806,367,385,409,451,2208,3981,557,3961,2212,576,652,1643,3965,830,2521,907,997,1071,1866,4474,4598,2263,1545,1238,1581,1254,2005,1298,1300,1319,1345,1411],"class_list":["post-62008","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-software","category-tutorials","tag-angle","tag-angled-text","tag-apache","tag-argument","tag-call","tag-calling","tag-clipboard","tag-code-file","tag-codebase","tag-containing","tag-context","tag-copy","tag-css","tag-data-attribute","tag-document-root","tag-document-head","tag-dropdown","tag-emoji","tag-external-javascript","tag-font","tag-getboundingclientrect","tag-global-data-attribute","tag-hashtag","tag-hashtagging","tag-head","tag-html","tag-javascript","tag-justification","tag-justify","tag-navigation","tag-nest","tag-paste","tag-programming","tag-rotate","tag-select","tag-sidle","tag-snug","tag-span","tag-stackoverflow","tag-table","tag-table-cell","tag-text","tag-tool","tag-transform","tag-translate","tag-tutorial","tag-url","tag-web-server"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/62008"}],"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=62008"}],"version-history":[{"count":8,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/62008\/revisions"}],"predecessor-version":[{"id":62016,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/62008\/revisions\/62016"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=62008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=62008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=62008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}