Text Background Clip Animation Emoji Overlay SVG Sharing Tutorial

Text Background Clip Animation Emoji Overlay SVG Sharing Tutorial

Text Background Clip Animation Emoji Overlay SVG Sharing Tutorial

Further to yesterday’s Text Background Clip Animation Emoji Overlay SVG Tutorial you start getting web browser support for context (ie. right click) menu options such as …

  • Copy image
  • Copy image address
  • Save image as

the latter effectively your “download option” when we can reach the HTML scenario whereby where the user right clicks is over (an element such as) …


<img type="image/svg" src="//www.rjmprogramming.com.au/tmp/svg_e_a_o_17_09_2025_13_32_14.svg"></img>

… which today’s work is all about trying to achieve in adding more practical “export aid tools” into the “sharing mix”.

As with our last Media Galley project, with our changed PHP helper signature_signature.php‘s

<?php

if (isset($_POST['an_i_thingo'])) {
$ds=DIRECTORY_SEPARATOR;
if (isset($_POST['svg_filename'])) {
foreach (glob($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'svg_e_a_o_' . '*.*') as $dfilename) {
$filemtime = filemtime($dfilename);
if (time() - $filemtime >= 172800) { // 86400 seconds in a day
unlink($dfilename);
}
}
file_put_contents($_SERVER['DOCUMENT_ROOT'] . $ds . 'tmp' . $ds . '' . basename(str_replace('+',' ',urldecode($_POST['svg_filename']))), str_replace('+',' ',urldecode($_POST['an_i_thingo'])));
exit;
}

// rest of the usual if block
}

?>

… called into play via some Ajax Javascript calling …


var outfile='', wootoo=null;
var czhr=null, czform=null;

function ourprompt(svgoh) {
var oursvgoh=svgoh;
var tag=null;
var recipient='';
var dt=new Date();
var dsuff=('' + dt.toLocaleDateString() + ' ' + dt.toLocaleTimeString()).replace(/\:/g,'_').replace(/\ /g,'_').replace(/\//g,'_').replace(/\-/g,'_');
outfile='http://www.rjmprogramming.com.au/tmp/svg_e_a_o_' + dsuff + '.svg';
var xc=prompt('Optionally copy SVG below and save to a SVG file ( eg. text.svg ) that will open via a web browser Open File option ( eg. file:///Applications/MAMP/htdocs/test.svg ) or on a macOS MAMP local web server environment ( or http://localhost:8888/test.svg could also work here ). Or leave as is and use OK answer to save to URL ' + outfile + ' and display and/or share. To just email enter email address or to SMS enter a mobile number. An alternative filename suffix to ' + dsuff + ' is another OK answer option. Any other OK answers do nothing more.', svgoh);
if (xc == null) {
outfile='';
} else if (xc == svgoh) {
outfile=outfile;
} else if (xc.indexOf(' ') == -1 && xc.indexOf('@') != -1) {
recipient=xc;
tag = document.createElement('a');
tag.id='aem';
tag.target='_top';
tag.href='mailto:' + recipient + '?subject=Emoji%20Animated%20Overlay%20SVG%20image&body=' + encodeURIComponent(document.URL.split('?')[0].split('#')[0] + '#' + encodeURIComponent(svgoh.replace(' onclick="top.ourprompt(this.outerHTML);"', ' title="' + outfile + '"')));
tag.style.display='none';
document.body.appendChild(tag);
tag.click();
} else if (xc.trim() != '' && xc.indexOf(' ') == -1 && xc.replace(/0/g,'').replace(/1/g,'').replace(/2/g,'').replace(/3/g,'').replace(/4/g,'').replace(/5/g,'').replace(/6/g,'').replace(/7/g,'').replace(/8/g,'').replace(/9/g,'') == '') {
recipient=xc;
tag = document.createElement('a');
tag.id='aem';
tag.target='_top';
tag.href='sms:' + recipient + '&body=' + encodeURIComponent(document.URL.split('?')[0].split('#')[0] + '#' + encodeURIComponent(svgoh.replace(' onclick="top.ourprompt(this.outerHTML);"', ' title="' + outfile + '"')));
tag.style.display='none';
document.body.appendChild(tag);
tag.click();
} else if (xc.trim() != '' && xc.indexOf('<') == -1 && xc.indexOf(' ') == -1) {
outfile='http://www.rjmprogramming.com.au/tmp/svg_e_a_o_' + xc + '.svg';
} else if (xc.trim() != '' && xc.indexOf('<svg') == 0 && xc.indexOf('</svg>') != -1) {
oursvgoh='' + xc.split('</svg>')[0] + '</svg>';
} else {
outfile='';
}

if (outfile != '') {

czhr = new XMLHttpRequest();
czform = new FormData();
czform.append('an_i_thingo', oursvgoh);
czform.append('svg_filename', outfile);
czhr.onreadystatechange = showStuff;
czhr.open('post', '/HTMLCSS/signature_signature.php', true);
czhr.send(czform);



}
}

function showStuff() {
if (czhr != null) {
if (czhr.readyState == 4) {
if (czhr.status == 200) {
setTimeout(function(){
wootoo=window.open('','_blank','top=50,left=50,width=800,height=800');
wootoo.document.write('<html><body onload="document.title=document.body.title;" title="' + outfile + '"><img type="image/svg" src="//' + outfile.split('//')[1] + '"></img><scri' + 'pt type=text/javascript> setTimeout(function(){ document.title=document.body.title; }, 5000); </scr' + 'ipt></body></html>');
}, 1000);
}
}
}
}

… and where we set up an arrangement so that …

  • for a couple of days …
  • we arrange for the creation of SVG files in a public URL place …
  • should the user make use of our new functionality

    var xc=prompt(‘Optionally copy SVG below and save to a SVG file ( eg. text.svg ) that will open via a web browser Open File option ( eg. file:///Applications/MAMP/htdocs/test.svg ) or on a macOS MAMP local web server environment ( or http://localhost:8888/test.svg could also work here ). Or leave as is and use OK answer to save to URL ‘ + outfile + ‘ and display and/or share. To just email enter email address or to SMS enter a mobile number. An alternative filename suffix to ‘ + dsuff + ‘ is another OK answer option. Any other OK answers do nothing more.‘, svgoh);

    … off that amended Javascript prompt window added yesterday

And if the two days is up (possible for an email or SMS link, again depending on hashtag methodologies, click after the initial action)? Well, we construct some SVG within a webpage for that scenario, but, as we say, that is not as cute, as far as web browser native functionality smarts go (though you can still View Page Source and work from there, for masochists out there), as when an actual SVG image file sits there on the web server, regarding the SVG sharably changed fifth draft version of a “Text Background Clip” client web application.


Previous relevant Text Background Clip Animation Emoji Overlay SVG Tutorial is shown below.

Text Background Clip Animation Emoji Overlay SVG Tutorial

Text Background Clip Animation Emoji Overlay SVG Tutorial

As far as “heading towards creating a tool” from yesterday’s Text Background Clip Animation Emoji Overlay Tutorial‘s …

  1. emoji
  2. overlay
  3. animation

… work beginnings we’re harnessing SVG’s foreignObject subelement to start up that avenue (as some relief from the roads heading down lately).

SVG has it’s own animation abilities, but thinking we could simulate the keyframes and transitions CSS animations over the last couple of days sounded daunting. As were HTML5 canvas usage ideas. So we went down the foreignObject avenue and have been pleased we did, really. Those keyframes and transitions animations worked but we think the background text clipping may need more research or will pan out not to be translatable to the …


Standalone SVG image creator

within our “reveal” details/summary hosting tool we hope to improve upon, from our start, today, in the SVG saveably changed fourth draft version of a “Text Background Clip” client web application.


Previous relevant Text Background Clip Animation Emoji Overlay Tutorial is shown below.

Text Background Clip Animation Emoji Overlay Tutorial

Text Background Clip Animation Emoji Overlay Tutorial

It’s “overlay day” onto yesterday’s Text Background Clip Animation Tutorial, and we like “overlay days” much better than any “underlay days” it’s got to be said … although?!

So what constitutes a good “overlay day” to us? It’s one that includes some/all of (the CSS concepts) …

  • position: absolute;
  • left: [position in X]px; top: [position in Y]px;
  • opacity: [from 0 to 1];
  • z-index: [the larger the more prominent];

… though the last we did not need so far, and the use of the great Javascript method [element].getBoundingClientRect() as exemplified by


var rectis=document.getElementById('box').getBoundingClientRect();
document.getElementById('bbox').style.position='absolute';
document.getElementById('bbox').style.left='' + rectis.left + 'px';
document.getElementById('bbox').style.top='' + rectis.top + 'px';
document.getElementById('bbox').style.display='inline-block';
document.getElementById('box').className='box';
document.getElementById('bbox').className='box';

… where you will also see us better synchronizing the animation start by dynamically allocating element class (via Javascript DOM means) as close to the same time as possible in the “overlay” changed third draft version of a “Text Background Clip” client web application.


Previous relevant Text Background Clip Animation Tutorial is shown below.

Text Background Clip Animation Tutorial

Text Background Clip Animation Tutorial

Today we’re returning to the work of Text Background Clip Primer Tutorial and adding a layer of …

Do It Yourself animation

… possibilities for the user. We grant you, the Text Background Clip aspects are, and remain, at least in our mind, the main talking point here, but it represents to us “a way in” (perhaps to a dead-end, but we are hoping not) regarding the concepts of …

  1. emoji
  2. overlay
  3. animation

… and this project had the first, and now we’re easing our way into the third today, with the reason we chose it as “a guinea pig” project being that textarea way the user has control. We want the user to explore possibilities themselves, and making it easier for us to see what’s possible regarding combinations of the three concepts above, we’re hoping, regarding the changed second draft version of a “Text Background Clip” client web application?!


Previous relevant Text Background Clip Primer Tutorial is shown below.

Text Background Clip Primer Tutorial

Text Background Clip Primer Tutorial

Again, today, we’re cloning and modifying a new “proof of concept” version of a “Text Background Clip” server web application

And, again, it’s that “interactive input duo” of …

… forming that shareable dataset (helped out by diff and ed command line commands via PHP exec and shell_exec) whereby you can email or SMS your “creations” to other interested parties.

And, again, there is a “proof of concept” version of a “Text Background Clip” client web application choice of usage here, for you to try for yourself!


Previous relevant Emoji Animation Primer Tutorial is shown below.

Emoji Animation Primer Tutorial

Emoji Animation Primer Tutorial

Today we’re cloning and modifying a new “proof of concept” version of an “Emoji Animation” server web application (or “proof of concept” client web application) …

We generally corral commonalities today when we think about cloning, and its here in spades regarding …

We break the “user controllable” components of the card into …

  1. wording of the card
  2. emoji (maybe) border of card CSS styling

… but just substitute “animation” for “border of card” or just “card” above. With help regarding the CSS above we’d like to thank How to Animate an Emoji with CSS.

We hope you try it out, creating your own webpages!


Previous relevant Simple Emoji Border Card Primer Tutorial is shown below.

Simple Emoji Border Card Primer Tutorial

Simple Emoji Border Card Primer Tutorial

We were really happy to stumble upon StackOverflow‘s excellent Use Emoji as CSS Border webpage (of dreams and ideas) the other day, and immediately want to …

We break the “user controllable” components of the card into …

  1. wording of the card
  2. emoji (maybe) border of card CSS styling

… used by the user via some HTML textarea content they could edit to click a “Post” button creating their tailored (left hand table cell containing) HTML div element, that if double clicked (or just clicked within the surrounding table cell below the HTML “card” div) opens the user’s created card, alone, in a new window.


Previous relevant Emoji Animation CSS Block Tutorial is shown below.

Emoji Animation CSS Block Tutorial

Emoji Animation CSS Block Tutorial

Do you recall a few days back, with Simple Emoji Border Card Sharing Tutorial how we avoided “too long” mailto: and/or sms: “a” link href arrangements, before we harnessed the command line combination of …

  • diff
  • ed

… the latter of which worked fine on this macOS system where we are writing this blog, but, sadly, not on our RJM Programming Linux web server? Well, we could install “ed”, but decided, instead, to “act like mister ed” with a new PHP function, which, today, caters for “ed asks” that might involve more than one line of change, with some “comma usages” can be seen explained, here, at ed – Use ed line oriented text editor – IBM Documentation. Here is the PHP function for your perusal …

<?php

function viacolon($instuff) {

//21c
// background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='30' width='30'><text x='50%' y='50%' dominant-baseline='middle' text-anchor='middle'></text></svg>");
//.
//13,14c
//.box:after {
// content: "Well I never";
//.
//w

$sprevln="";
$ldm=";";
$prevln='';
$inlns=explode("\n", $instuff);
$lns=file('/tmp/emoji_animation.diff');
foreach ($lns as $line_num => $ln) {
$lastinteresting=false;
if (($ln == 'w' || $ln == "w\n") && strpos($prevln, "d") !== false && strlen($prevln) <= 10 && strpos(trim($prevln), ' ') === false && strpos($prevln, ",") !== false) {
if (1 == 2) { $lastinteresting=true; }
$fromi=explode(",", explode("d", $prevln)[0])[0];
$toi=explode(",", explode("d", $prevln)[0])[1];
for ($fromtoi=$fromi; $fromtoi<=$toi; $fromtoi++) {
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $fromtoi]), " ", $instuff);
}
}
if (!$lastinteresting && $ln != '.' && $ln != 'w' && $ln != ".\n" && $ln != "w\n") {
if (strpos($ln, ':') !== false && (strpos($ln, ';') !== false || strpos($ln, '{') !== false)) {
if (strpos($ln, 'background:') === false) {
$bg=explode(':', $ln);
if (strpos($instuff, $bg[0] . ':') !== false) {
$ldm=";";
if (strpos($bg[1], ";") === false && strpos($bg[1], "{") !== false) { $ldm="{"; }
//if (strpos($bg[0], ".box") !== false) { file_put_contents('ax.ax', $instuff . "\n\n\n" . $bg[0] . ':' . explode($ldm, explode($bg[0] . ':', $instuff)[1])[0] . ':' . "\n\n\n" . $bg[0] . ':' . explode($ldm, explode($bg[0] . ':', file_get_contents('/tmp/emoji_animation.diff'))[1])[0] . "\n\n\n" . str_replace($bg[0] . ':' . explode($ldm, explode($bg[0] . ':', $instuff)[1])[0],$bg[0] . ':' . explode($ldm, explode($bg[0] . ':', file_get_contents('/tmp/emoji_animation.diff'))[1])[0],$instuff)); }
$instuff=str_replace_once($bg[0] . ':' . explode($ldm, explode($bg[0] . ':', $instuff)[1])[0],$bg[0] . ':' . explode($ldm, explode($bg[0] . ':', file_get_contents('/tmp/emoji_animation.diff'))[1])[0],$instuff);
} else if (strpos($prevln, "a") !== false) {
$fromi=explode(",", explode("a", $prevln)[0])[0];
$toi=$fromi;
$prefx=explode($inlns[-1 + explode("a", $prevln)[0]], $instuff)[0];
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + explode("a", $prevln)[0]]), str_replace("\n", "", $inlns[-1 + explode("a", $prevln)[0]]) . " " . $bg[0] . ':' . explode(';', explode($bg[0] . ':', file_get_contents('/tmp/emoji_animation.diff'))[1])[0] . '; ', $instuff);
$inlns[-1 + explode("a", $prevln)[0]]=$inlns[-1 + explode("a", $prevln)[0]] . " " . $bg[0] . ':' . explode(';', explode($bg[0] . ':', file_get_contents('/tmp/emoji_animation.diff'))[1])[0] . '; ';
if (('' . $toi) == '1') {
//$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $toi + $fromi]), " ", $instuff);
$sprevln="";
} else {
$toi--;
//$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $toi + $fromi]), " ", $instuff);
$sprevln="" . $fromi . "a";
}
}
}
}
if (strlen($ln) <= 10 && str_replace("\n","", str_replace("d","", str_replace("c","", str_replace("a","", str_replace(",","", str_replace("0","", str_replace("1","", str_replace("2","", str_replace("3","", str_replace("4","", str_replace("5","", str_replace("6","", str_replace("7","", str_replace("8","", str_replace("9","",$ln))))))))))))))) == "") {
if (str_replace("\n","", str_replace("c","", str_replace("a","", str_replace(",","", str_replace("0","", str_replace("1","", str_replace("2","", str_replace("3","", str_replace("4","", str_replace("5","", str_replace("6","", str_replace("7","", str_replace("8","", str_replace("9","",$ln)))))))))))))) != "") {
$prevln=$ln;
}
}
//if (strlen($ln) <= 10 && str_replace("\n","", str_replace("c","", str_replace("a","", str_replace(",","", str_replace("0","", str_replace("1","", str_replace("2","", str_replace("3","", str_replace("4","", str_replace("5","", str_replace("6","", str_replace("7","", str_replace("8","", str_replace("9","",$ln)))))))))))))) == "") {
if (strlen($ln) <= 10 && str_replace("\n","", str_replace("d","", str_replace("c","", str_replace("A","", str_replace(",","", str_replace("0","", str_replace("1","", str_replace("2","", str_replace("3","", str_replace("4","", str_replace("5","", str_replace("6","", str_replace("7","", str_replace("8","", str_replace("9","",$ln))))))))))))))) == "") {
$instuff=$instuff;
} else if (strpos($prevln, "d") !== false && strlen($prevln) <= 10 && strpos(trim($prevln), ' ') === false && strpos($prevln, ",") === false) {
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + explode("d", $prevln)[0]]), " ", $instuff);
} else if (strpos($prevln, "a") !== false && strlen($prevln) <= 10 && strpos(trim($prevln), ' ') === false && strpos($prevln, ",") === false) {
$fromi=explode(",", explode("a", $prevln)[0])[0];
$lnbig="";
$lni=(-1 + explode("a", $prevln)[0]);
$toi=$fromi;
$isok=true;
while (('' . $toi) != '0' && $isok) {
//$prefx=explode($inlns[-1 + explode("a", $prevln)[0]], $instuff)[0];
if ($ln == '.' || $ln == 'w' || $ln == ".\n" || $ln == "w\n") {
$isok=false;
$sprevln=$ln; //"";
} else if ($ln != '.' && $ln != 'w' && $ln != ".\n" && $ln != "w\n") {
//file_put_contents('/tmp/emoji_animation.zzz', $ln);
//file_put_contents('/tmp/emoji_animation.yyy', $prevln);
//$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + explode("a", $prevln)[0]]), str_replace("\n", "", $inlns[-1 + explode("a", $prevln)[0]]) . " " . $ln, $instuff);
//if (!file_exists('/tmp/emoji_animation.www')) { file_put_contents('/tmp/emoji_animation.www', $instuff); }
$lnbig.=' ' . str_replace("\n", "", $ln) . ' '; //$inlns[-1 + explode("a", $prevln)[0]]=$inlns[-1 + explode("a", $prevln)[0]] . " " . $ln;
}
if (('' . $toi) == '1') {
//$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $toi + $fromi]), " ", $instuff);
//$instuff=str_replace_once(str_replace("\n", "", $ln), " ", $instuff);
$sprevln=$ln; //"";
$toi--;
$ln=$lns[($fromi - $toi) + $line_num];
} else {
$toi--;
//$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $toi + $fromi]), " ", $instuff);
//$instuff=str_replace_once(str_replace("\n", "", $ln), " ", $instuff);
$sprevln="" . $fromi . "a";
$ln=$lns[($fromi - $toi) + $line_num];
}
}
$instuff=str_replace_once(str_replace("\n", "", $inlns[$lni]), str_replace("\n", "", $inlns[$lni]) . " " . $lnbig, $instuff);
//$inlns[$lni]=$inlns[$lni] . " " . $lnbig;
$sprevln=' ';
} else if (strpos($prevln, "c") !== false && strlen($prevln) <= 10 && strpos(trim($prevln), ' ') === false && strpos($prevln, ",") === false) {
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + explode("c", $prevln)[0]]), str_replace("\n", "", $ln), $instuff);
} else if (strpos($prevln, "d") !== false && strlen($prevln) <= 10 && strpos(trim($prevln), ' ') === false && strpos($prevln, ",") !== false) {
$fromi=explode(",", explode("d", $prevln)[0])[0];
$toi=explode(",", explode("d", $prevln)[0])[1];
for ($fromtoi=$fromi; $fromtoi<=$toi; $fromtoi++) {
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $fromtoi]), " ", $instuff);
}
//$instuff=str_replace(str_replace("\n", "", $inlns[-1 + $fromi]), " ", $instuff);
//if ($fromi != $toi) {
// $fromi++;
// $sprevln="" . $fromi . "," . $toi . "d";
//} else {
$sprevln=$ln;
//}
} else if (strpos($prevln, "c") !== false && strlen($prevln) <= 10 && strpos(trim($prevln), ' ') === false && strpos($prevln, ",") !== false) {
$origln=$ln;
$lnbig='';
$isokay=true;
$fromi=explode(",", explode("c", $prevln)[0])[0];
$toi=explode(",", explode("c", $prevln)[0])[1];
$one=1;
$ln=$lns[$one + $line_num];
while ($ln != '.' && $ln != 'w' && $ln != ".\n" && $ln != "w\n") {
$lnbig.=' ' . str_replace("\n", "", $ln) . ' ';
$one++;
$ln=$lns[$one + $line_num];
}
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $fromi]), str_replace("\n", "", $origln) . $lnbig, $instuff);
if ($fromi != $toi) {
$fromi++;
$sprevln="" . $fromi . "," . $toi . "c";
for ($fromtoi=$fromi; $fromtoi<=$toi; $fromtoi++) {
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + $fromtoi]), " ", $instuff);
}
} else {
$sprevln=$ln;
}
}
if ($sprevln != "") {
$prevln=$sprevln;
$sprevln="";
} else {
$prevln=$ln;
}
if (strpos($prevln, "d") !== false && strlen($prevln) <= 10 && strpos(trim($prevln), ' ') === false && strpos($prevln, ",") === false) {
$instuff=str_replace_once(str_replace("\n", "", $inlns[-1 + explode("d", $prevln)[0]]), " ", $instuff);
}
}
}
return $instuff;
}

function str_replace_once($needle, $replace, $haystack) { // thanks to https://stackoverflow.com/questions/1252693/using-str-replace-so-that-it-only-acts-on-the-first-match
$newstring=$haystack;
$pos = strpos($haystack, $needle);
if ($pos !== false) {
$newstring = substr_replace($haystack, $replace, $pos, strlen($needle));
}
return $newstring;
}

?>

… improving on yesterday’s Emoji Animation Primer Tutorial.

That work not only helped out with the changed “proof of concept” Emoji Animation server web application, but also with (its “clone partner”) the changed “proof of concept” Card with Emoji Border Design client web application.


Previous relevant Emoji Animation Primer Tutorial is shown below.

Emoji Animation Primer Tutorial

Emoji Animation Primer Tutorial

Today we’re cloning and modifying a new “proof of concept” version of an “Emoji Animation” server web application (or “proof of concept” client web application) …

We generally corral commonalities today when we think about cloning, and its here in spades regarding …

We break the “user controllable” components of the card into …

  1. wording of the card
  2. emoji (maybe) border of card CSS styling

… but just substitute “animation” for “border of card” or just “card” above. With help regarding the CSS above we’d like to thank How to Animate an Emoji with CSS.

We hope you try it out, creating your own webpages!


Previous relevant Simple Emoji Border Card Primer Tutorial is shown below.

Simple Emoji Border Card Primer Tutorial

Simple Emoji Border Card Primer Tutorial

We were really happy to stumble upon StackOverflow‘s excellent Use Emoji as CSS Border webpage (of dreams and ideas) the other day, and immediately want to …

We break the “user controllable” components of the card into …

  1. wording of the card
  2. emoji (maybe) border of card CSS styling

… used by the user via some HTML textarea content they could edit to click a “Post” button creating their tailored (left hand table cell containing) HTML div element, that if double clicked (or just clicked within the surrounding table cell below the HTML “card” div) opens the user’s created card, alone, in a new window.

If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.

This entry was posted in Ajax, Animation, eLearning, Event-Driven Programming, Tutorials and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *