Add a couple more dependencies to /lib. Remove unneeded code from 2D.js and unminify it.

This commit is contained in:
Juriy Zaytsev 2010-06-09 23:30:25 -04:00
parent c519c147aa
commit 770e47b115
6 changed files with 2162 additions and 1334 deletions

1763
lib/ape-ep-dom.js Normal file

File diff suppressed because it is too large Load diff

13
lib/ape-extensions.js Normal file
View file

@ -0,0 +1,13 @@
(function(){
var doc = this.document;
APE.EventPublisher.remove = function(src, sEvent, fp, thisArg) {
return APE.EventPublisher.get(src, sEvent).remove(fp, thisArg);
};
APE.getElement = function(id) {
return typeof id === 'string' ? doc.getElementById(id) : id;
};
})();

87
lib/prototype-extensions.js vendored Normal file
View file

@ -0,0 +1,87 @@
Prototype.falseFunction = function () { return false; };
Element.addMethods({
makeUnselectable: (function () {
var style = document.documentElement.style;
var selectProp = 'userSelect' in style
? 'userSelect'
: 'MozUserSelect' in style
? 'MozUserSelect'
: 'WebkitUserSelect' in style
? 'WebkitUserSelect'
: 'KhtmlUserSelect' in style
? 'KhtmlUserSelect'
: '';
function makeUnselectable(element) {
if (typeof element.onselectstart !== 'undefined') {
element.onselectstart = Prototype.falseFunction;
}
if (selectProp) {
element.style[selectProp] = 'none';
}
else if (typeof element.unselectable == 'string') {
element.unselectable = 'on';
}
// TODO (kangax): test return value
return element;
}
return makeUnselectable;
})()
});
Element.addMethods('button', {
enable: Field.enable,
disable: Field.disable
});
/* speed up toJSON on arrays by not using `each` */
Array.prototype.toJSON = function() {
var results = [];
for (var i = 0, len = this.length; i < len; i++) {
var value = Object.toJSON(this[i]);
if (typeof value !== 'undefined') {
results.push(value);
}
}
return "[" + results.join(", ") + "]";
};
(function(){
function getScript(url, callback) {
var headEl = document.getElementsByTagName("head")[0],
scriptEl = document.createElement('script'),
loading = true;
scriptEl.type = 'text/javascript';
scriptEl.setAttribute('runat', 'server');
scriptEl.onload = scriptEl.onreadystatechange = function(e) {
if (loading) {
if (typeof this.readyState == 'string' &&
this.readyState !== 'loaded' &&
this.readyState !== 'complete') return;
loading = false;
callback(e || window.event);
scriptEl = scriptEl.onload = scriptEl.onreadystatechange = null;
}
};
scriptEl.src = url;
headEl.appendChild(scriptEl);
// causes issue in Opera
// headEl.removeChild(scriptEl);
}
function getScriptJaxer(url, callback) {
Jaxer.load(url);
callback();
}
Prototype.getScript = getScript;
var Jaxer = this.Jaxer;
if (Jaxer && Jaxer.load) {
Prototype.getScript = getScriptJaxer;
}
})();

273
src/2D.js

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

95
test/benchmark.html Normal file
View file

@ -0,0 +1,95 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Unit test file :: Canvas.Text</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="lib/unittest.css" type="text/css">
<!--[if IE]>
<script type="text/javascript" src="../lib/excanvas.js"></script>
<![endif]-->
<script src="../lib/prototype.js" type="text/javascript"></script>
<script src="../lib/ape-ep-dom.js" type="text/javascript"></script>
<script src="../lib/ape-extensions.js" type="text/javascript"></script>
<script src="../lib/prototype-extensions.js" type="text/javascript"></script>
<script src="../src/2D.js" type="text/javascript"></script>
<script src="../src/canvas_element.class.js" type="text/javascript"></script>
<script src="../src/canvas_parser.js" type="text/javascript"></script>
<script src="../src/canvas_istub.mixin.js" type="text/javascript"></script>
<script src="../src/canvas_object.class.js" type="text/javascript"></script>
<script src="../src/canvas_circle.class.js" type="text/javascript"></script>
<script src="../src/canvas_rect.class.js" type="text/javascript"></script>
<script src="../src/canvas_polygon.class.js" type="text/javascript"></script>
<script src="../src/canvas_polyline.class.js" type="text/javascript"></script>
<script src="../src/canvas_ellipse.class.js" type="text/javascript"></script>
<script src="../src/canvas_image.class.js" type="text/javascript"></script>
<script src="../src/canvas_path.class.js" type="text/javascript"></script>
<script src="../src/canvas_path_group.class.js" type="text/javascript"></script>
<script src="../src/canvas_group.class.js" type="text/javascript"></script>
<style type="text/css" media="screen">
.canvas_container { position: relative; }
</style>
</head>
<body>
<h2>Canvas benchmark</h2>
<div id="results"></div>
<canvas id="test" width="600" height="600"></canvas>
<script type="text/javascript">
(function(){
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getRandomColor() {
return getRandomInt(0, 255).toString(16)
+ getRandomInt(0, 255).toString(16)
+ getRandomInt(0, 255).toString(16);
}
function addResult(title, result) {
$('results').insert('<h3>' + title + '</h3><p>' + result + '</p>');
}
this.c = new Canvas.Element('test');
var t1, t2;
var t = new Date();
for (var i=50; i--; ) {
c.add(new Canvas.Rect({
width: getRandomInt(10, 50),
height: getRandomInt(10, 50),
fill: '#' + getRandomColor(),
opacity: Math.random(),
angle: getRandomInt(0, 180),
top: getRandomInt(0, c._oConfig.height),
left: getRandomInt(0, c._oConfig.width)
}));
}
addResult('Text initialization: ', (t1 = new Date() - t));
t = new Date();
for (var i=50; i--; ) {
c.renderAll();
}
addResult('Text rendering: ', (t2 = new Date() - t));
addResult('Total time: ', t1 + t2);
c.calcOffset();
})();
</script>
</body>
</html>