]> git.sur5r.net Git - contagged/blob - scripts/interface/ifxtransfer.js
new version
[contagged] / scripts / interface / ifxtransfer.js
1 /**\r
2  * Interface Elements for jQuery\r
3  * FX - transfer\r
4  * \r
5  * http://interface.eyecon.ro\r
6  * \r
7  * Copyright (c) 2006 Stefan Petre\r
8  * Dual licensed under the MIT (MIT-LICENSE.txt) \r
9  * and GPL (GPL-LICENSE.txt) licenses.\r
10  *   \r
11  *\r
12  */\r
13 \r
14 jQuery.transferHelper = null;\r
15 /**\r
16  * \r
17  * @name TransferTo\r
18  * @description Animates an new build element to simulate a transfer action from one element to other\r
19  * @param Hash hash A hash of parameters\r
20  * @option Mixed to DOMElement or element ID to transfer to\r
21  * @option String className CSS class to apply to transfer element\r
22  * @option String duration animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']\r
23  * @option Function callback (optional) A function to be executed whenever the animation completes.\r
24  *\r
25  * @type jQuery\r
26  * @cat Plugins/Interface\r
27  * @author Stefan Petre\r
28  */\r
29 jQuery.fn.TransferTo = function(o)\r
30 {\r
31         return this.queue('interfaceFX', function(){\r
32                 new jQuery.fx.itransferTo(this, o);\r
33         });\r
34 };\r
35 jQuery.fx.itransferTo = function(e, o)\r
36 {\r
37         \r
38         if(jQuery.transferHelper == null)\r
39         {\r
40                 jQuery('body', document).append('<div id="transferHelper"></div>');\r
41                 jQuery.transferHelper = jQuery('#transferHelper');\r
42         }\r
43         jQuery.transferHelper.css('display', 'block').css('position', 'absolute');\r
44         \r
45         var z = this;\r
46         z.el = jQuery(e);\r
47         if(!o || !o.to) {\r
48                 return;\r
49         }\r
50         \r
51         if (o.to.constructor == String && document.getElementById(o.to)) {\r
52                 o.to = document.getElementById(o.to);\r
53         } else if ( !o.to.childNodes ) {\r
54                 return;\r
55         }\r
56         \r
57         if (!o.duration) {\r
58                 o.duration = 500;\r
59         }\r
60         z.duration = o.duration;\r
61         z.to = o.to;\r
62         z.classname = o.className;\r
63         z.complete = o.complete;\r
64         if (z.classname) {\r
65                 jQuery.transferHelper.addClass(z.classname);\r
66         }\r
67         z.diffWidth = 0;\r
68         z.diffHeight = 0;\r
69         \r
70         if(jQuery.boxModel) {\r
71                 z.diffWidth = (parseInt(jQuery.transferHelper.css('borderLeftWidth')) || 0 )\r
72                                         + (parseInt(jQuery.transferHelper.css('borderRightWidth')) || 0)\r
73                                         + (parseInt(jQuery.transferHelper.css('paddingLeft')) || 0)\r
74                                         + (parseInt(jQuery.transferHelper.css('paddingRight')) || 0);\r
75                 z.diffHeight = (parseInt(jQuery.transferHelper.css('borderTopWidth')) || 0 )\r
76                                         + (parseInt(jQuery.transferHelper.css('borderBottomWidth')) || 0)\r
77                                         + (parseInt(jQuery.transferHelper.css('paddingTop')) || 0)\r
78                                         + (parseInt(jQuery.transferHelper.css('paddingBottom')) || 0);\r
79         }\r
80         z.start = jQuery.extend(\r
81                 jQuery.iUtil.getPosition(z.el.get(0)),\r
82                 jQuery.iUtil.getSize(z.el.get(0))\r
83         );\r
84         z.end = jQuery.extend(\r
85                 jQuery.iUtil.getPosition(z.to),\r
86                 jQuery.iUtil.getSize(z.to)\r
87         );\r
88         z.start.wb -= z.diffWidth;\r
89         z.start.hb -= z.diffHeight;\r
90         z.end.wb -= z.diffWidth;\r
91         z.end.hb -= z.diffHeight;\r
92         z.callback = o.complete;\r
93 \r
94         // Execute the transfer\r
95         jQuery.transferHelper\r
96                 .css('width', z.start.wb + 'px')\r
97                 .css('height', z.start.hb + 'px')\r
98                 .css('top', z.start.y + 'px')\r
99                 .css('left', z.start.x + 'px')\r
100                 .animate(\r
101                         {\r
102                                 top: z.end.y,\r
103                                 left: z.end.x,\r
104                                 width: z.end.wb,\r
105                                 height: z.end.hb\r
106                         },\r
107                         z.duration,\r
108                         function()\r
109                         {\r
110                                 // Set correct classname\r
111                                 if(z.classname)\r
112                                         jQuery.transferHelper.removeClass(z.classname);\r
113                                 jQuery.transferHelper.css('display', 'none');\r
114         \r
115                                 // Callback\r
116                                 if (z.complete && z.complete.constructor == Function) {\r
117                                         z.complete.apply(z.el.get(0), [z.to]);\r
118                                 }\r
119                                 // Done\r
120                                 jQuery.dequeue(z.el.get(0), 'interfaceFX');\r
121                         }\r
122                 );\r
123 };