JSFiddle - React, Tailwind, and code Playground
by Terry Young
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div id="vp"></div>
CSS
html, body, #vp {
border:0;
margin:0;
padding:0;
width:100%;
height:100%;
}
body {
background-color: #ccddee;
}
JavaScript
/**
* Simplifies something like this:
*
* this.ox = this.type == 'rect' ? this.attr('x') : this.attr('cx');
* this.oy = this.type == 'rect' ? this.attr('y') : this.attr('cy');
*
* to this:
*
* el.o(); // and better, it supports chaining
*
* @copyright Terry Young <terryyounghk [at] gmail.com>
* @license WTFPL Version 2 ( http://en.wikipedia.org/wiki/WTFPL )
*/
Raphael.el.is = function (type) { return this.type == (''+type).toLowerCase(); };
Raphael.el.isNot = function (type) { return !this.is(type) };
Raphael.el.x = function () { return this.is('circle') ? this.attr('cx') : this.attr('x'); };
Raphael.el.y = function () { return this.is('circle') ? this.attr('cy') : this.attr('y'); };
Raphael.el.o = function () { this.ox = this.x(); this.oy = this.y(); return this; };
/**
* getABox() for RaphaelJS - getBBox() On Steroids
* More routine, pre-calculated values that getBBox() doesn't provide
*
* @author Terry Young <terryyounghk [at] gmail.com>
* @license WTFPL Version 2 ( http://en.wikipedia.org/wiki/WTFPL )
*/
Raphael.el.getABox = function ()
{
var b = this.getBBox(); // thanks, I'll take it from here...
var o =
{
// we'd still return what the original getBBox() provides us with
x: b.x,
y: b.y,
width: b.width,
height: b.height,
// three different x coordinates: left edge, centered, and right edge
xLeft: b.x,
xCenter: b.x + b.width / 2,
xRight: b.x + b.width,
// three different y coordinates: top edge, middle, and bottom edge
yTop: b.y,
yMiddle: b.y + b.height / 2,
yBottom: b.y + b.height
};
// now we can produce a 3x3 combination of the above to derive 9 x,y coordinates
// center
o.center = {x: o.xCenter, y: o.yMiddle };
// corners
o.topLeft = {x: o.xLeft, y: o.yTop };
...