fluffy – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /*
2 Copyright (c) 2017 Niklas Knaack
3  
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
10  
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
13  
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 THE SOFTWARE.
21 */
22  
23 ( function() {
24  
25 function SVG3DTagCloud( element, params ) {
26  
27 var settings = {
28  
29 entries: [],
30 width: 480,
31 height: 480,
32 radius: '70%',
33 radiusMin: 75,
34 bgDraw: true,
35 bgColor: '#000',
36 opacityOver: 1.00,
37 opacityOut: 0.05,
38 opacitySpeed: 6,
39 fov: 800,
40 speed: 2,
41 fontFamily: 'Arial, sans-serif',
42 fontSize: '15',
43 fontColor: '#fff',
44 fontWeight: 'normal',//bold
45 fontStyle: 'normal',//italic
46 fontStretch: 'normal',//wider, narrower, ultra-condensed, extra-condensed, condensed, semi-condensed, semi-expanded, expanded, extra-expanded, ultra-expanded
47 fontToUpperCase: false,
48 tooltipFontFamily: 'Arial, sans-serif',
49 tooltipFontSize: '15',
50 tooltipFontColor: '#fff',
51 tooltipFontWeight: 'normal',//bold
52 tooltipFontStyle: 'normal',//italic
53 tooltipFontStretch: 'normal',//wider, narrower, ultra-condensed, extra-condensed, condensed, semi-condensed, semi-expanded, expanded, extra-expanded, ultra-expanded
54 tooltipFontToUpperCase: false,
55 tooltipTextAnchor: 'left',
56 tooltipDiffX: 0,
57 tooltipDiffY: 10
58  
59 };
60  
61 //---
62  
63 if ( params !== undefined )
64 for ( var prop in params )
65 if ( params.hasOwnProperty( prop ) && settings.hasOwnProperty( prop ) )
66 settings[ prop ] = params[ prop ];
67  
68 //---
69  
70 if ( !settings.entries.length )
71 return false;
72  
73 //---
74  
75 var entryHolder = [];
76 var tooltip;
77  
78 var radius;
79 var diameter;
80  
81 var mouseReact = true;
82 var mousePos = { x: 0, y: 0 };
83  
84 var center2D;
85 var center3D = { x: 0, y: 0, z: 0 };
86  
87 var speed = { x: 0, y: 0 };
88  
89 var position = { sx: 0, cx: 0, sy: 0, cy: 0 };
90  
91 var MATHPI180 = Math.PI / 180;
92  
93 var svg;
94 var svgNS = 'http://www.w3.org/2000/svg';
95  
96 var bg;
97  
98 //---
99  
100 function init() {
101  
102 svg = document.createElementNS( svgNS, 'svg' );
103 svg.addEventListener( 'mousemove', mouseMoveHandler );
104  
105 element.appendChild( svg );
106  
107 if ( settings.bgDraw ) {
108  
109 bg = document.createElementNS( svgNS, 'rect' );
110 bg.setAttribute( 'x', 0 );
111 bg.setAttribute( 'y', 0 );
112 bg.setAttribute( 'fill', settings.bgColor );
113  
114 svg.appendChild( bg );
115  
116 }
117  
118 //---
119  
120 addEntries();
121 reInit();
122 animloop();
123  
124 //---
125  
126 window.addEventListener( 'resize', resizeHandler );
127  
128 };
129  
130 function reInit() {
131  
132 var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
133 var windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
134  
135 var svgWidth = windowWidth;
136 var svgHeight = windowHeight;
137  
138 if ( settings.width.toString().indexOf( '%' ) > 0 || settings.height.toString().indexOf( '%' ) > 0 ) {
139  
140 svgWidth = Math.round( element.offsetWidth / 100 * parseInt( settings.width ) );
141 svgHeight = Math.round( svgWidth / 100 * parseInt( settings.height ) );
142  
143 } else {
144  
145 svgWidth = parseInt( settings.width );
146 svgHeight = parseInt( settings.height );
147  
148 }
149  
150 if ( windowWidth <= svgWidth )
151 <= svgWidth ) svgWidth = windowWidth;
152  
153 <= svgWidth ) if ( windowHeight <= svgHeight )
154 <= svgWidth )<= svgHeight ) svgHeight = windowHeight;
155  
156 <= svgWidth )<= svgHeight ) //---
157  
158 <= svgWidth )<= svgHeight ) center2D = { x: svgWidth / 2, y: svgHeight / 2 };
159  
160 <= svgWidth )<= svgHeight ) speed.x = settings.speed / center2D.x;
161 <= svgWidth )<= svgHeight ) speed.y = settings.speed / center2D.y;
162  
163 <= svgWidth )<= svgHeight ) if ( svgWidth >= svgHeight )
164 <= svgWidth )<= svgHeight ) diameter = svgHeight / 100 * parseInt( settings.radius );
165 <= svgWidth )<= svgHeight ) else
166 <= svgWidth )<= svgHeight ) diameter = svgWidth / 100 * parseInt( settings.radius );
167  
168 <= svgWidth )<= svgHeight ) if ( diameter < 1 )
169 <= svgWidth )<= svgHeight )< 1 ) diameter = 1;
170  
171 <= svgWidth )<= svgHeight )< 1 ) radius = diameter / 2;
172  
173 <= svgWidth )<= svgHeight )< 1 ) if ( radius < settings.radiusMin ) {
174  
175 <= svgWidth )<= svgHeight )< 1 ) radius = settings.radiusMin;
176 <= svgWidth )<= svgHeight )< 1 ) diameter = radius * 2;
177  
178 <= svgWidth )<= svgHeight )< 1 ) }
179  
180 <= svgWidth )<= svgHeight )< 1 ) //---
181  
182 <= svgWidth )<= svgHeight )< 1 ) svg.setAttribute( 'width', svgWidth );
183 <= svgWidth )<= svgHeight )< 1 ) svg.setAttribute( 'height', svgHeight );
184  
185 <= svgWidth )<= svgHeight )< 1 ) if ( settings.bgDraw ) {
186  
187 <= svgWidth )<= svgHeight )< 1 ) bg.setAttribute( 'width', svgWidth );
188 <= svgWidth )<= svgHeight )< 1 ) bg.setAttribute( 'height', svgHeight );
189  
190 <= svgWidth )<= svgHeight )< 1 ) }
191  
192 <= svgWidth )<= svgHeight )< 1 ) //---
193  
194 <= svgWidth )<= svgHeight )< 1 ) setEntryPositions( radius );
195  
196 <= svgWidth )<= svgHeight )< 1 ) };
197  
198 <= svgWidth )<= svgHeight )< 1 ) //---
199  
200 <= svgWidth )<= svgHeight )< 1 ) function setEntryPositions( radius ) {
201  
202 <= svgWidth )<= svgHeight )< 1 ) for ( var i = 0, l = entryHolder.length; i < l; i++ ) {
203  
204 <= svgWidth )<= svgHeight )< 1 ) setEntryPosition( entryHolder[ i ], radius );
205  
206 <= svgWidth )<= svgHeight )< 1 ) }
207  
208 <= svgWidth )<= svgHeight )< 1 ) };
209  
210 <= svgWidth )<= svgHeight )< 1 ) function setEntryPosition( entry, radius ) {
211  
212 <= svgWidth )<= svgHeight )< 1 ) var dx = entry.vectorPosition.x - center3D.x;
213 <= svgWidth )<= svgHeight )< 1 ) var dy = entry.vectorPosition.y - center3D.y;
214 <= svgWidth )<= svgHeight )< 1 ) var dz = entry.vectorPosition.z - center3D.z;
215  
216 <= svgWidth )<= svgHeight )< 1 ) var length = Math.sqrt( dx * dx + dy * dy + dz * dz );
217  
218 <= svgWidth )<= svgHeight )< 1 ) entry.vectorPosition.x /= length;
219 <= svgWidth )<= svgHeight )< 1 ) entry.vectorPosition.y /= length;
220 <= svgWidth )<= svgHeight )< 1 ) entry.vectorPosition.z /= length;
221  
222 <= svgWidth )<= svgHeight )< 1 ) entry.vectorPosition.x *= radius;
223 <= svgWidth )<= svgHeight )< 1 ) entry.vectorPosition.y *= radius;
224 <= svgWidth )<= svgHeight )< 1 ) entry.vectorPosition.z *= radius;
225  
226 <= svgWidth )<= svgHeight )< 1 ) };
227  
228 <= svgWidth )<= svgHeight )< 1 ) function addEntry( index, entryObj, x, y, z ) {
229  
230 <= svgWidth )<= svgHeight )< 1 ) var entry = {};
231  
232 <= svgWidth )<= svgHeight )< 1 ) if ( typeof entryObj.label != 'undefined' ) {
233  
234 <= svgWidth )<= svgHeight )< 1 ) entry.element = document.createElementNS( svgNS, 'text' );
235 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'x', 0 );
236 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'y', 0 );
237 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'fill', settings.fontColor );
238 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'font-family', settings.fontFamily );
239 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'font-size', settings.fontSize );
240 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'font-weight', settings.fontWeight );
241 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'font-style', settings.fontStyle );
242 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'font-stretch', settings.fontStretch );
243 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'text-anchor', 'middle' );
244 <= svgWidth )<= svgHeight )< 1 ) entry.element.textContent = settings.fontToUpperCase ? entryObj.label.toUpperCase() : entryObj.label;
245  
246 <= svgWidth )<= svgHeight )< 1 ) } else if ( typeof entryObj.image != 'undefined' ) {
247  
248 <= svgWidth )<= svgHeight )< 1 ) entry.element = document.createElementNS( svgNS, 'image' );
249 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'x', 0 );
250 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'y', 0 );
251 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'width', entryObj.width );
252 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'height', entryObj.height );
253 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttribute( 'id', 'image_' + index );
254 <= svgWidth )<= svgHeight )< 1 ) entry.element.setAttributeNS( 'http://www.w3.org/1999/xlink','href', entryObj.image );
255  
256 <= svgWidth )<= svgHeight )< 1 ) entry.diffX = entryObj.width / 2;
257 <= svgWidth )<= svgHeight )< 1 ) entry.diffY = entryObj.height / 2;
258  
259 <= svgWidth )<= svgHeight )< 1 ) }
260  
261 <= svgWidth )<= svgHeight )< 1 ) entry.link = document.createElementNS( svgNS, 'a' );
262 <= svgWidth )<= svgHeight )< 1 ) entry.link.setAttributeNS( 'http://www.w3.org/1999/xlink', 'xlink:href', entryObj.url );
263 <= svgWidth )<= svgHeight )< 1 ) entry.link.setAttribute( 'target', entryObj.target );
264 <= svgWidth )<= svgHeight )< 1 ) entry.link.addEventListener( 'mouseover', mouseOverHandler, true );
265 <= svgWidth )<= svgHeight )< 1 ) entry.link.addEventListener( 'mouseout', mouseOutHandler, true );
266 <= svgWidth )<= svgHeight )< 1 ) entry.link.appendChild( entry.element );
267  
268 <= svgWidth )<= svgHeight )< 1 ) if ( typeof entryObj.tooltip != 'undefined' ) {
269  
270 <= svgWidth )<= svgHeight )< 1 ) entry.tooltip = true;
271 <= svgWidth )<= svgHeight )< 1 ) entry.tooltipLabel = settings.tooltipFontToUpperCase ? entryObj.tooltip.toUpperCase() : entryObj.tooltip;;
272  
273 <= svgWidth )<= svgHeight )< 1 ) } else {
274  
275 <= svgWidth )<= svgHeight )< 1 ) entry.tooltip = false;
276  
277 <= svgWidth )<= svgHeight )< 1 ) }
278  
279 <= svgWidth )<= svgHeight )< 1 ) entry.index = index;
280 <= svgWidth )<= svgHeight )< 1 ) entry.mouseOver = false;
281  
282 <= svgWidth )<= svgHeight )< 1 ) entry.vectorPosition = { x:x, y:y, z:z };
283 <= svgWidth )<= svgHeight )< 1 ) entry.vector2D = { x:0, y:0 };
284  
285 <= svgWidth )<= svgHeight )< 1 ) svg.appendChild( entry.link );
286  
287 <= svgWidth )<= svgHeight )< 1 ) return entry;
288  
289 <= svgWidth )<= svgHeight )< 1 ) };
290  
291 <= svgWidth )<= svgHeight )< 1 ) function addEntries() {
292  
293 <= svgWidth )<= svgHeight )< 1 ) var tooltip = false;
294  
295 <= svgWidth )<= svgHeight )< 1 ) for ( var i = 1, l = settings.entries.length + 1; i < l; i++ ) {
296  
297 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var phi = Math.acos( -1 + ( 2 * i ) / l );
298 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var theta = Math.sqrt( l * Math.PI ) * phi;
299  
300 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var x = Math.cos( theta ) * Math.sin( phi );
301 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var y = Math.sin( theta ) * Math.sin( phi );
302 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var z = Math.cos( phi );
303  
304 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var entry = addEntry( i - 1, settings.entries[ i - 1 ], x, y, z );
305  
306 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entryHolder.push( entry );
307  
308 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( typeof settings.entries[ i - 1 ].tooltip != 'undefined' ) {
309  
310 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip = true;
311  
312 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
313  
314 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
315  
316 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( tooltip ) {
317  
318 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { addTooltip();
319  
320 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
321  
322 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
323  
324 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function addTooltip() {
325  
326 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip = document.createElementNS( svgNS, 'text' );
327 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'x', 0 );
328 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'y', 0 );
329 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'fill', settings.tooltipFontColor );
330 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'font-family', settings.tooltipFontFamily );
331 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'font-size', settings.tooltipFontSize );
332 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'font-weight', settings.tooltipFontWeight );
333 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'font-style', settings.tooltipFontStyle );
334 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'font-stretch', settings.tooltipFontStretch );
335 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'text-anchor', settings.tooltipTextAnchor );
336 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.textContent = '';
337  
338 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { svg.appendChild( tooltip );
339  
340 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
341  
342 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function getEntryByElement( element ) {
343  
344 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { for ( var i = 0, l = entryHolder.length; i < l; i++ ) {
345  
346 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var entry = entryHolder[ i ];
347  
348 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( entry.element.getAttribute( 'x' ) === element.getAttribute( 'x' ) &&
349 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.element.getAttribute( 'y' ) === element.getAttribute( 'y' ) ) {
350  
351 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { return entry;
352  
353 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
354  
355 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
356  
357 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { return;
358  
359 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
360  
361 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function highlightEntry( entry ) {
362  
363 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { for ( var i = 0, l = entryHolder.length; i < l; i++ ) {
364  
365 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var e = entryHolder[ i ];
366  
367 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( e.index === entry.index ) {
368  
369 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { e.mouseOver = true;
370  
371 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } else {
372  
373 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { e.mouseOver = false;
374  
375 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
376  
377 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
378  
379 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
380  
381 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
382  
383 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function showTooltip( entry ) {
384  
385 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( entry.tooltip ) {
386  
387 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'x', entry.vector2D.x - settings.tooltipDiffX );
388 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'y', entry.vector2D.y - settings.tooltipDiffY );
389  
390 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.textContent = settings.tooltipFontToUpperCase ? entry.tooltipLabel.toUpperCase() : entry.tooltipLabel;
391  
392 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'opacity', 1.0 );
393  
394 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
395  
396 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
397  
398 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function hideTooltip( entry ) {
399  
400 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { tooltip.setAttribute( 'opacity', 0.0 );
401  
402 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
403  
404 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
405  
406 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function render() {
407  
408 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var fx = speed.x * mousePos.x - settings.speed;
409 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var fy = settings.speed - speed.y * mousePos.y;
410  
411 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var angleX = fx * MATHPI180;
412 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var angleY = fy * MATHPI180;
413  
414 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { position.sx = Math.sin( angleX );
415 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { position.cx = Math.cos( angleX );
416 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { position.sy = Math.sin( angleY );
417 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { position.cy = Math.cos( angleY );
418  
419 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
420  
421 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { for ( var i = 0, l = entryHolder.length; i < l; i++ ) {
422  
423 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var entry = entryHolder[ i ];
424  
425 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
426  
427 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( mouseReact ) {
428  
429 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var rx = entry.vectorPosition.x;
430 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var rz = entry.vectorPosition.y * position.sy + entry.vectorPosition.z * position.cy;
431  
432 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.vectorPosition.x = rx * position.cx + rz * position.sx;
433 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.vectorPosition.y = entry.vectorPosition.y * position.cy + entry.vectorPosition.z * -position.sy;
434 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.vectorPosition.z = rx * -position.sx + rz * position.cx;
435  
436 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
437  
438 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
439  
440 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var scale = settings.fov / ( settings.fov + entry.vectorPosition.z );
441  
442 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.vector2D.x = entry.vectorPosition.x * scale + center2D.x;
443 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.vector2D.y = entry.vectorPosition.y * scale + center2D.y;
444  
445 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
446  
447 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( entry.diffX && entry.diffY ) {
448  
449 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.vector2D.x -= entry.diffX;
450 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.vector2D.y -= entry.diffY;
451  
452 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
453  
454 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
455  
456 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.element.setAttribute( 'x', entry.vector2D.x );
457 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.element.setAttribute( 'y', entry.vector2D.y );
458  
459 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
460  
461 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var opacity;
462  
463 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( mouseReact ) {
464  
465 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { opacity = ( radius - entry.vectorPosition.z ) / diameter;
466  
467 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( opacity < settings.opacityOut ) {
468  
469 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { opacity = settings.opacityOut;
470  
471 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
472  
473 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } else {
474  
475 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { opacity = parseFloat( entry.element.getAttribute( 'opacity' ) );
476  
477 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( entry.mouseOver ) {
478  
479 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { opacity += ( settings.opacityOver - opacity ) / settings.opacitySpeed;
480  
481 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } else {
482  
483 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { opacity += ( settings.opacityOut - opacity ) / settings.opacitySpeed;
484  
485 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
486  
487 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
488  
489 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entry.element.setAttribute( 'opacity', opacity );
490  
491 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
492  
493 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
494  
495 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { entryHolder = entryHolder.sort( function( a, b ) {
496  
497 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { return ( b.vectorPosition.z - a.vectorPosition.z );
498  
499 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } );
500  
501 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
502  
503 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
504  
505 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { window.requestAnimFrame = ( function() {
506  
507 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { return window.requestAnimationFrame ||
508 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { window.webkitRequestAnimationFrame ||
509 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { window.mozRequestAnimationFrame ||
510 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function( callback ) {
511 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { window.setTimeout( callback, 1000 / 60 );
512 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
513  
514 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } )();
515  
516 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function animloop() {
517  
518 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { requestAnimFrame( animloop );
519  
520 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { render();
521  
522 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
523  
524 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
525  
526 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function mouseOverHandler( event ) {
527  
528 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { mouseReact = false;
529  
530 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
531  
532 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var entry = getEntryByElement( event.target );
533  
534 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { highlightEntry( entry );
535  
536 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( entry.tooltip ) {
537  
538 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { showTooltip( entry );
539  
540 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
541  
542 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
543  
544 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function mouseOutHandler( event ) {
545  
546 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { mouseReact = true;
547  
548 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
549  
550 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var entry = getEntryByElement( event.target );
551  
552 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( entry.tooltip ) {
553  
554 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { hideTooltip( entry );
555  
556 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
557  
558 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
559  
560 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
561  
562 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function mouseMoveHandler( event ) {
563  
564 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { mousePos = getMousePos( svg, event );
565  
566 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
567  
568 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function getMousePos( svg, event ) {
569  
570 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var rect = svg.getBoundingClientRect();
571  
572 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { return {
573  
574 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { x: event.clientX - rect.left,
575 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { y: event.clientY - rect.top
576  
577 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
578  
579 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
580  
581 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
582  
583 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { function resizeHandler( event ) {
584  
585 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { reInit();
586  
587 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
588  
589 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { //---
590  
591 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { init();
592  
593 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
594  
595 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { window.SVG3DTagCloud = SVG3DTagCloud;
596  
597 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) {} () );
598  
599 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) {if ( typeof jQuery !== 'undefined' ) {
600  
601 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { ( function( $ ) {
602  
603 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { $.fn.svg3DTagCloud = function( params ) {
604  
605 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var args = arguments;
606  
607 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { return this.each( function() {
608  
609 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( !$.data( this, 'plugin_SVG3DTagCloud' ) ) {
610  
611 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { $.data( this, 'plugin_SVG3DTagCloud', new SVG3DTagCloud( this, params ) );
612  
613 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } else {
614  
615 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { var plugin = $.data( this, 'plugin_SVG3DTagCloud' );
616  
617 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { if ( plugin[ params ] ) {
618  
619 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { plugin[ params ].apply( this, Array.prototype.slice.call( args, 1 ) );
620  
621 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } else {
622  
623 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { $.error( 'Method ' + params + ' does not exist on jQuery.svg3DTagCloud' );
624  
625 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
626  
627 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { }
628  
629 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } );
630  
631 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { };
632  
633 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) { } ( jQuery ) );
634  
635 <= svgWidth )<= svgHeight )< 1 )< l; i++ ) {}