{"id":17312,"date":"2015-09-22T05:01:41","date_gmt":"2015-09-21T19:01:41","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=17312"},"modified":"2015-09-22T10:23:13","modified_gmt":"2015-09-22T00:23:13","slug":"client-pre-emptive-iframe-crontab-curl-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/client-pre-emptive-iframe-crontab-curl-tutorial\/","title":{"rendered":"Client Pre-emptive Iframe Crontab Curl Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/continuous_report.html\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Client Pre-emptive Iframe Crontab Curl Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cpireport.jpg\" title=\"Client Pre-emptive Iframe Crontab Curl Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Client Pre-emptive Iframe Crontab Curl Tutorial<\/p><\/div>\n<p>Recap to yesterday &#8230;<\/p>\n<blockquote>\n<p>We don&#8217;t know if <i>&#8220;Client Pre-emptive Iframe&#8221;<\/i> is a concept, but even if it isn&#8217;t, we&#8217;d like to say something about it today.<\/p>\n<p>To us, it&#8217;s the idea that in the web application world, at the client end of things, with Javascript, though there is no file manipulation as such, there is what we&#8217;d like to term <i>&#8220;Client Pre-emptive Iframe&#8221;<\/i>, as an idea that Javascript functionality teamed with an HTML <a target=_blank title='HTML iframe tag information from w3schools' href='http:\/\/www.w3schools.com\/tags\/tag_iframe.asp'>iframe<\/a> (and its <i>onload<\/i> event logic) can achieve a bit of what a serverside language like PHP or ASP.Net can achieve, in terms of using server files, by guessing about their existence as the src= parameter of an HTML iframe element, and sort of &#8220;sucking it, and seeing&#8221; whether the operation succeeds &#8230; ie. pre-emptive guessing, we guess.  The point is, even if the guess is wrong, no huge harm is done, and in Javascript, it can be checked for, so why stress out, <strike>man<\/strike> person?<\/p>\n<\/blockquote>\n<p> &#8230; as you can see, also, at <a target=_blank title='Client Pre-emptive Iframe Primer Tutorial' href='#cpipt'>Client Pre-emptive Iframe Primer Tutorial<\/a>.<\/p>\n<p>Today&#8217;s HTML\/Javascript work of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/continuous_report.html_GETME\" title='continuous_report.html'>continuous_report.html<\/a> teams this concept with a <a target=_blank title='Linux operating system information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Linux'>Linux<\/a> web server&#8217;s &#8230;<\/p>\n<ul>\n<li><a target=_blank title='crontab information from computerhope ... thanks' href='http:\/\/www.computerhope.com\/jargon\/c\/cron.htm'>crontab<\/a><\/li>\n<li><a target=_blank title='crontab information from computerhope ... thanks' href='http:\/\/www.computerhope.com\/jargon\/c\/curl.htm'>curl<\/a><\/li>\n<\/ul>\n<p> &#8230; (what a duo!) &#8230; where we set up a &#8220;Continuous Report&#8221; on our web server, where an HTML report is placed via the crontab job &#8230;<\/p>\n<p><code><br \/>\n*\/1 * * * * curl http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/continuous_report.php<br \/>\n<\/code> <\/p>\n<p> &#8230; repeated every minute using the PHP <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/continuous_report.php_GETME\" title='continuous_report.php'>continuous_report.php<\/a> (source code) to report on the number of web server processes are running at this snapshot of time at the www.rjmprogramming.com.au web server, which happens to be Linux &#8230; otherwise for a Windows web server we&#8217;d probably have used a Windows Schedular Batch File setup.<\/p>\n<p>Here, we are very close to the territory of feeds, or shared reporting.<\/p>\n<p><a target=_blank title='useful link ... thanks' href='http:\/\/stackoverflow.com\/questions\/18536726\/javascript-to-display-the-current-date-and-time'>Dates and times<\/a> fly around everywhere with the code for such reporting, as do <a target=_blank title='useful link ... thanks' href='http:\/\/stackoverflow.com\/questions\/11124322\/get-date-time-for-a-specific-time-zone-using-javascript'>timezones<\/a> relevant to your web server, up at the continuous_report.html Javascript client code.<\/p>\n<p>So try a <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/continuous_report.html\" title='Click picture'>live run<\/a> to see what we mean.<\/p>\n<hr>\n<p id='cpipt'>Previous relevant <a target=_blank title='Client Pre-emptive Iframe Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/client-pre-emptive-iframe-primer-tutorial\/'>Client Pre-emptive Iframe 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\/xml_to_html.html\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Client Pre-emptive Iframe Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html-html.jpg\" title=\"Client Pre-emptive Iframe Primer Tutorial\"  style=\"float:left;\"   \/><\/a><p class=\"wp-caption-text\">Client Pre-emptive Iframe Primer Tutorial<\/p><\/div>\n<p>We don&#8217;t know if <i>&#8220;Client Pre-emptive Iframe&#8221;<\/i> is a concept, but even if it isn&#8217;t, we&#8217;d like to say something about it today.<\/p>\n<p>To us, it&#8217;s the idea that in the web application world, at the client end of things, with Javascript, though there is no file manipulation as such, there is what we&#8217;d like to term <i>&#8220;Client Pre-emptive Iframe&#8221;<\/i>, as an idea that Javascript functionality teamed with an HTML <a target=_blank title='HTML iframe tag information from w3schools' href='http:\/\/www.w3schools.com\/tags\/tag_iframe.asp'>iframe<\/a> (and its <i>onload<\/i> event logic) can achieve a bit of what a serverside language like PHP or ASP.Net can achieve, in terms of using server files, by guessing about their existence as the src= parameter of an HTML iframe element, and sort of &#8220;sucking it, and seeing&#8221; whether the operation succeeds &#8230; ie. pre-emptive guessing, we guess.  The point is, even if the guess is wrong, no huge harm is done, and in Javascript, it can be checked for, so why stress out, <strike>man<\/strike> person?<\/p>\n<p>So, today, we add client-side <i>&#8220;Client Pre-emptive Iframe&#8221;<\/i> business logic functionality, to yesterday&#8217;s <a target=_blank title='XML to HTML PHP Three Ways Translation Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/xml-to-html-php-three-ways-translation-tutorial\/'>XML to HTML PHP Three Ways Translation Tutorial<\/a>, by only adding additional Emailing functionality should an address book HTML file exist at the server.  That extra functionality adds an <i>&#8220;Email&#8221;<\/i> button.<\/p>\n<p>So that is conditional functionality &#8230; unconditionally we add functionality to be able to send &#8220;client&#8221; &#8220;mailto:&#8221; email messages should the XML contain id= parameters and &lt;to&gt; &#8230; &lt;\/to&gt; or its ilk defined via the HTML textarea populated and its associated HTML input submit button pressed.<\/p>\n<p>This is a clunky equivalent to PHP&#8217;s file_exists method for Javascript client usage, and an aid to determinations of whether specific business logic comes into play.<\/p>\n<p>The HTML code you can call <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.html-GETME\" title='xml_to_html.html'>xml_to_html.html<\/a> and it changed from previously <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.html-GETME\" title='xml_to_html.html'>in this way<\/a>, or you can try a <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.html\" title='click picture'>live run<\/a>, or you can try a <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.html?addressbook=n\" title='click picture'>live run<\/a> without the email onload event functionailty.<\/p>\n<p>The PHP code you can call <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.php---GETME\" title='xml_to_html.php'>xml_to_html.php<\/a> and it changed from yesterday <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.php---GETME\" title='xml_to_html.php'>in this way<\/a>, but we&#8217;d like to emphasise the client side today, and want you to see that this PHP server-side functionality is optional to the whole process, or you can try a <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.php\" title='click yesterday picture'>live run<\/a>, or you can try a <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/xml_to_html.php?addressbook=n\" title='click yesterday picture'>live run<\/a> without the email onload event functionality.<\/p>\n<p>Below we&#8217;ll leave you with some quite specific <b>email business logic<\/b> code &#8230;<\/p>\n<p><code><br \/>\n&lt;script type='text\/javascript'&gt;<br \/>\n\/\/ ... Some Javascript global variables regarding Client Pre-emptive Iframe addressbook usage<br \/>\n<b><br \/>\nvar preqs=location.search.split('addressbook=')[1] ? location.search.split('addressbook=')[1].split('&')[0] : \"y\";<br \/>\nvar qs=\"?addressbook=\" + (location.search.split('noaddressbook=')[1] ? location.search.split('noaddressbook=')[1].split('&')[0].toLowerCase().replace(\"y\",\"n\") : preqs);<br \/>\n<\/b><br \/>\n\/\/ ... more Javascript<br \/>\n<b><br \/>\n\/\/ A business logic idea ... messages\/note XML with defined id= are user interactively emailable<br \/>\nfunction checkforemail() {<br \/>\n  var ee, eo, preiu, iu, predivs,divs=[],cdivs;<br \/>\n  var ecnt=0;<br \/>\n  var oto='', ofrom='', osubject='', obody='';<br \/>\n  predivs=document.body.innerHTML.toLowerCase().split(' id=');<br \/>\n  for (preiu=1; preiu&lt;predivs.length; preiu++) {<br \/>\n    cdivs=predivs[preiu].substring(1).split(predivs[preiu].substring(0,1));<br \/>\n    iu=0;<br \/>\n    divs[iu]=document.getElementById(cdivs[0]);<br \/>\n    try {<br \/>\n     oto='';<br \/>\n     ofrom='';<br \/>\n     oheading='';<br \/>\n     obody='';<br \/>\n     try {<br \/>\n       oto=divs[iu].getAttribute('data-to');<br \/>\n       if (oto == null) oto='';<br \/>\n     } catch (ee) {<br \/>\n       oto='';<br \/>\n     }<br \/>\n     try {<br \/>\n       ofrom=divs[iu].getAttribute('data-from');<br \/>\n       if (ofrom == null) ofrom='';<br \/>\n     } catch (ee) {<br \/>\n       ofrom='';<br \/>\n     }<br \/>\n     try {<br \/>\n       obody=divs[iu].getAttribute('data-body');<br \/>\n       if (obody == null) obody='';<br \/>\n     } catch (ee) {<br \/>\n       obody='';<br \/>\n     }<br \/>\n     try {<br \/>\n       osubject=divs[iu].getAttribute('data-heading');<br \/>\n       if (osubject == null) {<br \/>\n         osubject='';<br \/>\n         osubject=divs[iu].getAttribute('data-subject');<br \/>\n         if (osubject == null) osubject='';<br \/>\n       }<br \/>\n     } catch (ee) {<br \/>\n       osubject='';<br \/>\n       try {<br \/>\n         osubject=divs[iu].getAttribute('data-subject');<br \/>\n         if (osubject == null) osubject='';<br \/>\n       } catch (ee) {<br \/>\n         osubject='';<br \/>\n       }<br \/>\n     }<br \/>\n    } catch (ee) {<br \/>\n    }<br \/>\n    if (oto != '' || obody != '' || osubject != '') {<br \/>\n      if (document.getElementById('elinksplace').innerHTML.replace(\/&amp;amp;\/g,\"&\").indexOf(('mailto:' + oto + '?subject=' + encodeURIComponent(osubject) + '&body=' + encodeURIComponent(obody)).replace(\/&amp;amp;\/g,\"&\")) == -1) {<br \/>\n       document.getElementById('elinksplace').innerHTML+='&lt;a href=\"mailto:' + oto + '?subject=' + encodeURIComponent(osubject) + '&body=' + encodeURIComponent(obody) + '\" id=\"email' + ecnt + '\" style=\"display:none;\"&gt;From ' + ofrom + \"&lt;\/a&gt;\";<br \/>\n       ecnt++;<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n  if (ecnt &gt; 0) {<br \/>\n    for (var iuc=0; iuc&lt;ecnt; iuc++) {<br \/>\n      eo=document.getElementById('email' + iuc);<br \/>\n      eo.click();<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n\/\/ A business logic idea ... client pre-emptive iframe ... address book<br \/>\nfunction getaddressbook(iois) {<br \/>\n  var qbits, ie, je, edelim='\"', bdone=false;<br \/>\n  var idx=['&amp;lt;to&amp;gt;','&lt;to&gt;','&lt;TO&gt;','&lt;To&gt;','data-to=\"','&amp;lt;from&amp;gt;','&lt;from&gt;','&lt;FROM&gt;','&lt;From&gt;','data-from=\"','&amp;lt;cc&amp;gt;','&lt;cc&gt;','&lt;CC&gt;','&lt;Cc&gt;','data-cc=\"','&amp;lt;bcc&amp;gt;','&lt;bcc&gt;','&lt;BCC&gt;','&lt;Bcc&gt;','data-bcc=\"'];<br \/>\n  if (iois != null) {<br \/>\n    var aconto = (iois.contentWindow || iois.contentDocument);<br \/>\n    if (aconto != null) {<br \/>\n     if (aconto.document) { aconto = aconto.document; }<br \/>\n     if (aconto.body != null) {<br \/>\n      addresscont=aconto.body.innerHTML.replace(\/\\n\/g, ',');<br \/>\n      var emailinfo=addresscont.split(',');<br \/>\n      for (ie=1; ie&lt;eval(-1 + emailinfo.length); ie+=2) {<br \/>\n       if (emailinfo[eval(ie - 1)] != \"\" && emailinfo[ie].indexOf('@') != -1) {<br \/>\n       for (je=0; je&lt;idx.length; je++) {<br \/>\n        edelim='&amp;lt;';<br \/>\n        if (idx[je].indexOf(edelim) == -1) edelim='\"';<br \/>\n        if (idx[je].indexOf(edelim) == -1) edelim='&lt;';<br \/>\n        if (document.body.innerHTML.toLowerCase().indexOf(idx[je] + emailinfo[eval(ie - 1)].toLowerCase() + edelim) != -1) {<br \/>\n         if (document.body.innerHTML.indexOf(idx[je] + emailinfo[eval(ie - 1)] + edelim) != -1) {<br \/>\n         if (je &lt; 4 && bdone == false) {<br \/>\n           bdone=true;<br \/>\n           document.getElementById('bemail').style.display='block';<br \/>\n         }<br \/>\n          while (document.body.innerHTML.indexOf(idx[je] + emailinfo[eval(ie - 1)] + edelim) != -1) {<br \/>\n           document.body.innerHTML=document.body.innerHTML.replace(idx[je] + emailinfo[eval(ie - 1)] + edelim,idx[je] + emailinfo[eval(ie - 1)] + \" [\" + emailinfo[ie] + \"]\" + edelim);<br \/>\n          }<br \/>\n         }<br \/>\n         if (document.body.innerHTML.indexOf(idx[je] + emailinfo[eval(ie - 1)].toLowerCase() + edelim) != -1) {<br \/>\n         if (je &lt; 4 && bdone == false) {<br \/>\n           bdone=true;<br \/>\n           document.getElementById('bemail').style.display='block';<br \/>\n         }<br \/>\n          while (document.body.innerHTML.indexOf(idx[je] + emailinfo[eval(ie - 1)].toLowerCase() + edelim) != -1) {<br \/>\n           document.body.innerHTML=document.body.innerHTML.replace(idx[je] + emailinfo[eval(ie - 1)].toLowerCase() + edelim,idx[je] + emailinfo[eval(ie - 1)].toLowerCase() + \" [\" + emailinfo[ie] + \"]\" + edelim);<br \/>\n          }<br \/>\n         }<br \/>\n         if (document.body.innerHTML.indexOf(idx[je] + emailinfo[eval(ie - 1)].toUpperCase() + edelim) != -1) {<br \/>\n         if (je &lt; 4 && bdone == false) {<br \/>\n           bdone=true;<br \/>\n           document.getElementById('bemail').style.display='block';<br \/>\n         }<br \/>\n          while (document.body.innerHTML.indexOf(idx[je] + emailinfo[eval(ie - 1)].toUpperCase() + edelim) != -1) {<br \/>\n           document.body.innerHTML=document.body.innerHTML.replace(idx[je] + emailinfo[eval(ie - 1)].toUpperCase() + edelim,idx[je] + emailinfo[eval(ie - 1)] + \" [\" + emailinfo[ie].toUpperCase() + \"]\" + edelim);<br \/>\n          }<br \/>\n         }<br \/>\n        }<br \/>\n       }<br \/>\n      }<br \/>\n      }<br \/>\n     }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n\/\/ A business logic idea ... email via XML instructions<br \/>\nfunction emailit() {<br \/>\n  var fs=document.getElementsByTagName('form');<br \/>\n  var tas=document.getElementsByTagName('textarea');<br \/>\n  if (tas.length &gt;= 3) {<br \/>\n    tas[2].innerHTML=tas[0].innerHTML;<br \/>\n    fs[0].submit();<br \/>\n  }<br \/>\n}<br \/>\n<\/b><br \/>\n&lt;\/script&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body onload=\"translate(inxml);<b> if (inxml != preinxml) { checkforemail(); } <\/b>\" style='background-color:orange;'&gt;<br \/>\n&lt;h1 align='center'&gt;XML to HTML - HTML Homegrown - RJM Programming - September, 2015&lt;\/h1&gt;<br \/>\n<b>&lt;div id='elinksplace'&gt;&lt;iframe src=\"<a target=_blank title='Even though HTML extension you can have other data like that CSV file address book as of today' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/addressbook.html'>addressbook.html<\/a>\" id=\"eabook\" onload=\" if (qs.indexOf('=n') == -1) { getaddressbook(this); } \" style=\"display:none;\"&gt;&lt;\/iframe&gt;&lt;input onclick=\" emailit();\" type=\"button\" value=\"Email\" style=\"display:none;position:absolute;top:280px;left:30px;z-index:7;\" id=\"bemail\"&gt;&lt;\/input&gt;&lt;\/div&gt;<\/b><br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\n<\/code><\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d17276' onclick='var dv=document.getElementById(\"d17276\"); 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='d17276' 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='#d17312' onclick='var dv=document.getElementById(\"d17312\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/?tag=crontab\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d17312' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Recap to yesterday &#8230; We don&#8217;t know if &#8220;Client Pre-emptive Iframe&#8221; is a concept, but even if it isn&#8217;t, we&#8217;d like to say something about it today. To us, it&#8217;s the idea that in the web application world, at the &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/client-pre-emptive-iframe-crontab-curl-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,29,37],"tags":[137,213,272,274,284,412,576,652,707,932,997,1319,1411],"class_list":["post-17312","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-operating-system","category-tutorials","tag-batch-processing","tag-clientserver","tag-cron","tag-crontab","tag-curl","tag-feed","tag-html","tag-javascript","tag-linux","tag-php","tag-programming","tag-tutorial","tag-web-server"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/17312"}],"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=17312"}],"version-history":[{"count":5,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/17312\/revisions"}],"predecessor-version":[{"id":17322,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/17312\/revisions\/17322"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=17312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=17312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=17312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}