Dmitry Baranovskiy 2013-10-17 18:24:07 +11:00
commit b31c4ca01c
11 changed files with 10840 additions and 28 deletions

86
NOTICE
View File

@ -129,3 +129,89 @@ respective licenses below.
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
- Backbone ./demos/animated-game/js/backbone.js
http://backbonejs.org/
(The MIT License)
Copyright (c) 2010-2013 Jeremy Ashkenas, DocumentCloud
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Underscore ./demos/animated-game/js/underscore.js
http://underscorejs.org
(The MIT License)
Copyright (c) 2010-2013 Jeremy Ashkenas, DocumentCloud
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- jQuery ./demos/animated-game/js/jquery-1.9.0.min.js
http://http://jquery.com/
(The MIT License)
Copyright 2013 jQuery Foundation and other contributors
http://jquery.com/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -28,25 +28,22 @@ _*Snap.svg uses Grunt 0.4.0. You might want to [read](http://gruntjs.com/getting
* Type `grunt` in the command line to build the files.
* The results will be built into the release folder.
* Alternatively type `grunt watch` to have the build run automatically when you make changes to source files.
*
## Contributing
Start by checking out our [Backlog](http://huboard.com/topcoat/topcoat/backlog). (Pls file issues against this repo.)
* [Fill out the CLA here](http://snapsvg.io/dev/snapsvg-cla.html)
* [fork](https://help.github.com/articles/fork-a-repo) the repo
* Create a branch
* [Fill out the CLA](http://snapsvg.io/page-contributions.html).
* [Fork](https://help.github.com/articles/fork-a-repo) the repo.
* Create a branch:
git checkout -b my_branch
* Add your changes
* Commit your changes
* Add your changes.
* Commit your changes:
git commit -am "Added some awesome stuff"
* Push your branch
* Push your branch:
git push origin my_branch
* make a [pull request](https://help.github.com/articles/using-pull-requests)
* Make a [pull request](https://help.github.com/articles/using-pull-requests).

View File

@ -3,7 +3,20 @@
<head>
<meta charset="utf-8">
<meta name="copyright" content="Copyright © 2013 Adobe Systems Incorporated. All rights reserved.
Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.">
<title>illustration</title>
<style>
body{
@ -172,24 +185,6 @@
<g id="Layer_1">
<rect x="1.103" y="-3.397" fill="#B7C077" width="498.897" height="503.397"/>
<path fill="#8FA268" d="M171.953,101.434c0,0.664-0.134,1.296-0.378,1.871c-0.243,0.575-0.595,1.093-1.03,1.528
s-0.953,0.787-1.528,1.03c-0.575,0.243-1.207,0.378-1.871,0.378c0,0-13.044,0-37.074,0S93,119.971,93,119.971
S76.523,106.24,55.926,106.24s-37.074,0-37.074,0c-0.664,0-1.296-0.134-1.871-0.378c-0.575-0.243-1.093-0.595-1.528-1.03
c-0.435-0.435-0.787-0.953-1.03-1.528c-0.243-0.575-0.378-1.207-0.378-1.871c0,0,0-5.149,0-18.365S7.182,64.704,7.182,64.704
s6.865-4.119,6.865-18.365s0-18.365,0-18.365c0-0.664,0.134-1.296,0.378-1.871c0.243-0.575,0.595-1.093,1.03-1.528
c0.435-0.435,0.953-0.787,1.528-1.03c0.575-0.243,1.207-0.378,1.871-0.378c0,0,15.791,0,37.074,0S93,9.437,93,9.437
s13.731,13.731,37.074,13.731s37.074,0,37.074,0c0.664,0,1.296,0.134,1.871,0.378c0.575,0.243,1.093,0.595,1.528,1.03
s0.787,0.953,1.03,1.528c0.243,0.575,0.378,1.207,0.378,1.871c0,0,0,3.776,0,18.365s6.865,18.365,6.865,18.365
s-6.865,5.492-6.865,18.365S171.953,101.434,171.953,101.434z"/>
<path fill="#F8F1E5" d="M164.826,98.119c0,0.604-0.122,1.179-0.344,1.702s-0.541,0.994-0.937,1.39
c-0.396,0.396-0.867,0.716-1.39,0.937c-0.523,0.221-1.098,0.344-1.702,0.344c0,0-11.867,0-33.727,0S93,114.982,93,114.982
s-14.99-12.492-33.727-12.492s-33.727,0-33.727,0c-0.604,0-1.179-0.122-1.702-0.344s-0.994-0.541-1.39-0.937
c-0.396-0.396-0.716-0.867-0.937-1.39c-0.221-0.523-0.344-1.098-0.344-1.702c0,0,0-4.684,0-16.707s-6.246-16.707-6.246-16.707
s6.246-3.747,6.246-16.707s0-16.707,0-16.707c0-0.604,0.122-1.179,0.344-1.702c0.221-0.523,0.541-0.994,0.937-1.39
c0.396-0.396,0.867-0.716,1.39-0.937c0.523-0.221,1.098-0.344,1.702-0.344c0,0,14.365,0,33.727,0S93,14.426,93,14.426
s12.492,12.491,33.727,12.491s33.727,0,33.727,0c0.604,0,1.179,0.122,1.702,0.344c0.523,0.221,0.994,0.541,1.39,0.937
c0.396,0.396,0.716,0.867,0.937,1.39s0.344,1.098,0.344,1.702c0,0,0,3.435,0,16.707s6.246,16.707,6.246,16.707
s-6.246,4.997-6.246,16.707S164.826,98.119,164.826,98.119z"/>
<polygon fill="#8FA268" points="418.781,75.171 403.456,67.284 371.524,101.763 386.849,109.65 "/>
<polygon fill="#8FA268" points="455.281,94.171 439.956,86.284 408.024,120.763 423.349,128.65 "/>
<g>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,112 @@
var WIDTH = 1024,
HEIGHT = 720;
console.log('oh');
var MainView = Backbone.View.extend({
initialize: function () {
var i,
dotGroup,
animal;
Math.seedrandom('fish');
this.state = 0;
this.dots = [];
this.animals = [];
this.trees = [];
this.treeFaces = [];
this.s = Snap(document.getElementsByTagName('svg')[0]);
//dot animals
dotGroup = this.s.select('#dots');
this.dots = dotGroup.selectAll('*');
for (i = 0; i < this.dots.length; i += 1) {
animal = new PathAnimal({s: this.s, dot: this.dots[i]});
this.animals.push(animal);
}
//sort depth
for (i = 0; i < this.animals.length; i += 1) {
if (i > 0) {
var a = this.animals[i - 1].el,
b = this.animals[i].el;
if (a.matrix.split().dy > b.matrix.split().dy) {
a.before(b);
}
}
}
//trees
this.trees = this.s.selectAll('.tree');
for (i = 0; i < this.trees.length; i += 1) {
var tree = new TreeFace({s: this.s, tree: this.trees[i]});
this.treeFaces.push(tree);
}
this.cube = document.getElementById('cube');
var $cubeHitArea = document.getElementById('cube-hitarea');
$cubeHitArea.addEventListener('click', this.handle_ROLL.bind(this));
setTimeout(this.animate.bind(this), 3000);
},
handle_ROLL: function () {
this.number = Math.ceil(Math.random() * 6);
if (this.number == 6) {
rx = 45;
ry = 180;
rz = -45;
} else if (this.number == 5) {
rx = 50;
ry = 0;
rz = 50;
} else if (this.number == 4) {
rx = -45;
ry = 50;
rz = 90;
} else if (this.number == 3) {
rx = -45;
ry = 225;
rz = -90;
} else if (this.number == 2) {
rx = -45;
ry = 50;
rz = 0;
} else if (this.number == 1) {
rx = 145;
ry = -45;
rz = 0;
} else {
rx = -90;
ry = 0;
rz = 0;
}
this.cube.style['webkitTransform'] = 'rotateX(' + rx + 'deg) rotateY(' + ry + 'deg) rotateZ(' + rz + 'deg)';
//setTimeout(this.trigger.bind(this), 1000);
},
trigger: function () {
this.state += 1;//this.number;
var animal = this.animals[this.state];
animal.handle_MOUSEOVER();
},
animate: function () {
var tree = this.treeFaces[Math.floor(Math.random() * this.treeFaces.length)];
tree.handle_MOUSEOVER();
setTimeout(function () {
tree.handle_MOUSEOUT();
}.bind(this), 3000);
setTimeout(this.animate.bind(this), 3000);
}
});
var main = new MainView();

View File

@ -0,0 +1,106 @@
var PathAnimal = Backbone.View.extend({
initialize: function () {
var _x,
_y,
PATHS = [
'M0,0c0,0,0-28.008,0-46.707S0-89,0-89',
'M0,0c0,0-9.634-22.317,10-46.707S50-69,50-69',
'M0,0c0,0,17.52-24.431,0-56.707S-50-99-50-99'
];
this.s = this.options.s;
this.dot = this.options.dot;
_x = this.dot.attr('cx');
_y = this.dot.attr('cy');
this.el = this.s.g();
this.path = this.s.path(PATHS[Math.floor(Math.random() * PATHS.length)]);
this.totalLength = this.dashOffset = this.path.getTotalLength();
this.path.attr({
fill: 'none',
stroke: this.dot.attr('fill'),
strokeWidth: 25,
strokeMiterlimit: 10,
strokeLinecap: 'round',
opacity: 1,
strokeDasharray: this.totalLength + " 200",
strokeDashoffset: this.totalLength
});
this.el.add(this.path);
this.el.transform("t" + [_x, _y]);
this.hitarea = this.s.circle(_x, _y, 30);
this.hitarea.attr({
fill: 'transparent',
'class': 'hit-area'
});
this.hitarea.mouseover(this.handle_MOUSEOVER.bind(this));
this.hitarea.mouseout(this.handle_MOUSEOUT.bind(this));
this.addFace();
},
addFace: function () {
var mouth,
eye,
ey2;
this.face = this.s.g();
this.face.attr({
'class': 'face'
});
mouth = this.s.circle(0, 5, 4);
mouth.attr({fill: 'black', 'class': 'mouth'});
this.face.add(mouth);
eye = this.s.path('M-2.75-6.75c0,0-2.537,2.5-5.667,2.5s-5.667-2.5-5.667-2.5s2.537-2.5,5.667-2.5S-2.75-6.75-2.75-6.75z');
eye.attr({fill: 'white', 'class': 'eye left'});
this.face.add(eye);
eye2 = this.s.path('M14.583-6.75c0,0-2.537,2.5-5.667,2.5S3.25-6.75,3.25-6.75s2.537-2.5,5.667-2.5S14.583-6.75,14.583-6.75z');
eye2.attr({fill: 'white', 'class': 'eye right'});
this.face.add(eye2);
this.face.transform("s.6");
this.el.add(this.face);
},
handle_MOUSEOVER: function () {
var instance = this;
this.face.attr({
'class': 'face animating'
});
Snap.animate(this.dashOffset, 0, function (val) {
instance.dashOffset = val;
instance.render();
}, 500);
},
handle_MOUSEOUT: function () {
var instance = this;
this.face.attr({
'class': 'face'
});
Snap.animate(this.dashOffset, this.totalLength, function (val) {
instance.dashOffset = val;
instance.render();
}, 500);
},
render: function () {
var point;
this.path.attr({
'stroke-dashoffset': this.dashOffset
});
point = this.path.getPointAtLength(this.totalLength - this.dashOffset);
this.face.transform("t" + [point.x, point.y] + "s.6");
}
});

View File

@ -0,0 +1,297 @@
// seedrandom.js version 2.2.
// Author: David Bau
// Date: 2013 Jun 15
//
// Defines a method Math.seedrandom() that, when called, substitutes
// an explicitly seeded RC4-based algorithm for Math.random(). Also
// supports automatic seeding from local or network sources of entropy.
//
// http://davidbau.com/encode/seedrandom.js
// http://davidbau.com/encode/seedrandom-min.js
//
// Usage:
//
// <script src=http://davidbau.com/encode/seedrandom-min.js></script>
//
// Math.seedrandom('yay.'); Sets Math.random to a function that is
// initialized using the given explicit seed.
//
// Math.seedrandom(); Sets Math.random to a function that is
// seeded using the current time, dom state,
// and other accumulated local entropy.
// The generated seed string is returned.
//
// Math.seedrandom('yowza.', true);
// Seeds using the given explicit seed mixed
// together with accumulated entropy.
//
// <script src="https://jsonlib.appspot.com/urandom?callback=Math.seedrandom">
// </script> Seeds using urandom bits from a server.
//
// More advanced examples:
//
// Math.seedrandom("hello."); // Use "hello." as the seed.
// document.write(Math.random()); // Always 0.9282578795792454
// document.write(Math.random()); // Always 0.3752569768646784
// var rng1 = Math.random; // Remember the current prng.
//
// var autoseed = Math.seedrandom(); // New prng with an automatic seed.
// document.write(Math.random()); // Pretty much unpredictable x.
//
// Math.random = rng1; // Continue "hello." prng sequence.
// document.write(Math.random()); // Always 0.7316977468919549
//
// Math.seedrandom(autoseed); // Restart at the previous seed.
// document.write(Math.random()); // Repeat the 'unpredictable' x.
//
// function reseed(event, count) { // Define a custom entropy collector.
// var t = [];
// function w(e) {
// t.push([e.pageX, e.pageY, +new Date]);
// if (t.length < count) { return; }
// document.removeEventListener(event, w);
// Math.seedrandom(t, true); // Mix in any previous entropy.
// }
// document.addEventListener(event, w);
// }
// reseed('mousemove', 100); // Reseed after 100 mouse moves.
//
// Version notes:
//
// The random number sequence is the same as version 1.0 for string seeds.
// Version 2.0 changed the sequence for non-string seeds.
// Version 2.1 speeds seeding and uses window.crypto to autoseed if present.
// Version 2.2 alters non-crypto autoseeding to sweep up entropy from plugins.
//
// The standard ARC4 key scheduler cycles short keys, which means that
// seedrandom('ab') is equivalent to seedrandom('abab') and 'ababab'.
// Therefore it is a good idea to add a terminator to avoid trivial
// equivalences on short string seeds, e.g., Math.seedrandom(str + '\0').
// Starting with version 2.0, a terminator is added automatically for
// non-string seeds, so seeding with the number 111 is the same as seeding
// with '111\0'.
//
// When seedrandom() is called with zero args, it uses a seed
// drawn from the browser crypto object if present. If there is no
// crypto support, seedrandom() uses the current time, the native rng,
// and a walk of several DOM objects to collect a few bits of entropy.
//
// Each time the one- or two-argument forms of seedrandom are called,
// entropy from the passed seed is accumulated in a pool to help generate
// future seeds for the zero- and two-argument forms of seedrandom.
//
// On speed - This javascript implementation of Math.random() is about
// 3-10x slower than the built-in Math.random() because it is not native
// code, but that is typically fast enough. Some details (timings on
// Chrome 25 on a 2010 vintage macbook):
//
// seeded Math.random() - avg less than 0.0002 milliseconds per call
// seedrandom('explicit.') - avg less than 0.2 milliseconds per call
// seedrandom('explicit.', true) - avg less than 0.2 milliseconds per call
// seedrandom() with crypto - avg less than 0.2 milliseconds per call
//
// Autoseeding without crypto is somewhat slower, about 20-30 milliseconds on
// a 2012 windows 7 1.5ghz i5 laptop, as seen on Firefox 19, IE 10, and Opera.
// Seeded rng calls themselves are fast across these browsers, with slowest
// numbers on Opera at about 0.0005 ms per seeded Math.random().
//
// LICENSE (BSD):
//
// Copyright 2013 David Bau, all rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of this module nor the names of its contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
/**
* All code is in an anonymous closure to keep the global namespace clean.
*/
(function (
global, pool, math, width, chunks, digits) {
//
// The following constants are related to IEEE 754 limits.
//
var startdenom = math.pow(width, chunks),
significance = math.pow(2, digits),
overflow = significance * 2,
mask = width - 1;
//
// seedrandom()
// This is the seedrandom function described above.
//
math['seedrandom'] = function(seed, use_entropy) {
var key = [];
// Flatten the seed string or build one from local entropy if needed.
var shortseed = mixkey(flatten(
use_entropy ? [seed, tostring(pool)] :
0 in arguments ? seed : autoseed(), 3), key);
// Use the seed to initialize an ARC4 generator.
var arc4 = new ARC4(key);
// Mix the randomness into accumulated entropy.
mixkey(tostring(arc4.S), pool);
// Override Math.random
// This function returns a random double in [0, 1) that contains
// randomness in every bit of the mantissa of the IEEE 754 value.
math['random'] = function() { // Closure to return a random double:
var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48
d = startdenom, // and denominator d = 2 ^ 48.
x = 0; // and no 'extra last byte'.
while (n < significance) { // Fill up all significant digits by
n = (n + x) * width; // shifting numerator and
d *= width; // denominator and generating a
x = arc4.g(1); // new least-significant-byte.
}
while (n >= overflow) { // To avoid rounding up, before adding
n /= 2; // last byte, shift everything
d /= 2; // right using integer math until
x >>>= 1; // we have exactly the desired bits.
}
return (n + x) / d; // Form the number within [0, 1).
};
// Return the seed that was used
return shortseed;
};
//
// ARC4
//
// An ARC4 implementation. The constructor takes a key in the form of
// an array of at most (width) integers that should be 0 <= x < (width).
//
// The g(count) method returns a pseudorandom integer that concatenates
// the next (count) outputs from ARC4. Its return value is a number x
// that is in the range 0 <= x < (width ^ count).
//
/** @constructor */
function ARC4(key) {
var t, keylen = key.length,
me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];
// The empty key [] is treated as [0].
if (!keylen) { key = [keylen++]; }
// Set up S using the standard key scheduling algorithm.
while (i < width) {
s[i] = i++;
}
for (i = 0; i < width; i++) {
s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];
s[j] = t;
}
// The "g" method returns the next (count) outputs as one number.
(me.g = function(count) {
// Using instance members instead of closure state nearly doubles speed.
var t, r = 0,
i = me.i, j = me.j, s = me.S;
while (count--) {
t = s[i = mask & (i + 1)];
r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];
}
me.i = i; me.j = j;
return r;
// For robust unpredictability discard an initial batch of values.
// See http://www.rsa.com/rsalabs/node.asp?id=2009
})(width);
}
//
// flatten()
// Converts an object tree to nested arrays of strings.
//
function flatten(obj, depth) {
var result = [], typ = (typeof obj)[0], prop;
if (depth && typ == 'o') {
for (prop in obj) {
try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}
}
}
return (result.length ? result : typ == 's' ? obj : obj + '\0');
}
//
// mixkey()
// Mixes a string seed into a key that is an array of integers, and
// returns a shortened string seed that is equivalent to the result key.
//
function mixkey(seed, key) {
var stringseed = seed + '', smear, j = 0;
while (j < stringseed.length) {
key[mask & j] =
mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));
}
return tostring(key);
}
//
// autoseed()
// Returns an object for autoseeding, using window.crypto if available.
//
/** @param {Uint8Array=} seed */
function autoseed(seed) {
try {
global.crypto.getRandomValues(seed = new Uint8Array(width));
return tostring(seed);
} catch (e) {
return [+new Date, global, global.navigator.plugins,
global.screen, tostring(pool)];
}
}
//
// tostring()
// Converts an array of charcodes to a string
//
function tostring(a) {
return String.fromCharCode.apply(0, a);
}
//
// When seedrandom.js is loaded, we immediately mix a few bits
// from the built-in RNG into the entropy pool. Because we do
// not want to intefere with determinstic PRNG state later,
// seedrandom will not call math.random on its own again after
// initialization.
//
mixkey(math.random(), pool);
// End anonymous scope, and pass initial values.
})(
this, // global window object
[], // pool: entropy pool starts empty
Math, // math: package containing random, pow, and seedrandom
256, // width: each RC4 output is 0 <= x < 256
6, // chunks: at least six RC4 outputs for each double
52 // digits: there are 52 significant digits in a double
);

7341
demos/animated-game/js/snap.svg.js Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,70 @@
var TreeFace = Backbone.View.extend({
initialize: function () {
this.s = this.options.s;
this.el = this.options.tree;
this.addFace();
/*
setTimeout(function () {
this.face.attr({
'class': 'face animating'
});
}.bind(this), Math.random() * 2000 );
*/
this.hitarea = this.s.circle(0, 0, 40);
this.hitarea.attr({
fill: 'transparent',
'class': 'hit-area'
});
this.face.add(this.hitarea);
this.hitarea.mouseover(this.handle_MOUSEOVER.bind(this));
this.hitarea.mouseout(this.handle_MOUSEOUT.bind(this));
},
handle_MOUSEOVER: function () {
this.face.attr({
'class': 'face animating'
});
},
handle_MOUSEOUT: function () {
this.face.attr({
'class': 'face'
});
},
addFace: function () {
var mouth,
eye,
ey2,
matrix;
this.face = this.s.g();
this.face.attr({
'class': 'face'
});
/*
mouth = this.s.circle(0, 5, 4);
mouth.attr({fill: 'black', 'class': 'mouth'});
this.face.add(mouth);
*/
eye = this.s.path('M-2.75-6.75c0,0-2.537,2.5-5.667,2.5s-5.667-2.5-5.667-2.5s2.537-2.5,5.667-2.5S-2.75-6.75-2.75-6.75z');
eye.attr({fill: 'white', 'class': 'eye left'});
this.face.add(eye);
eye2 = this.s.path('M14.583-6.75c0,0-2.537,2.5-5.667,2.5S3.25-6.75,3.25-6.75s2.537-2.5,5.667-2.5S14.583-6.75,14.583-6.75z');
eye2.attr({fill: 'white', 'class': 'eye right'});
this.face.add(eye2);
matrix = new Snap.Matrix();
box = this.el.getBBox();
matrix.translate(box.cx, box.cy);
matrix.scale(box.r2 / 40);
this.face.transform(matrix.toTransformString());
this.el.add(this.face);
},
});

File diff suppressed because it is too large Load Diff