Diffstat (limited to 'frontend/gamma/js/Clipperz/Visual.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/Visual.js | 368 |
1 files changed, 368 insertions, 0 deletions
diff --git a/frontend/gamma/js/Clipperz/Visual.js b/frontend/gamma/js/Clipperz/Visual.js new file mode 100644 index 0000000..b907d5c --- a/dev/null +++ b/frontend/gamma/js/Clipperz/Visual.js | |||
@@ -0,0 +1,368 @@ | |||
1 | /* | ||
2 | |||
3 | Copyright 2008-2011 Clipperz Srl | ||
4 | |||
5 | This file is part of Clipperz's Javascript Crypto Library. | ||
6 | Javascript Crypto Library provides web developers with an extensive | ||
7 | and efficient set of cryptographic functions. The library aims to | ||
8 | obtain maximum execution speed while preserving modularity and | ||
9 | reusability. | ||
10 | For further information about its features and functionalities please | ||
11 | refer to http://www.clipperz.com | ||
12 | |||
13 | * Javascript Crypto Library is free software: you can redistribute | ||
14 | it and/or modify it under the terms of the GNU Affero General Public | ||
15 | License as published by the Free Software Foundation, either version | ||
16 | 3 of the License, or (at your option) any later version. | ||
17 | |||
18 | * Javascript Crypto Library is distributed in the hope that it will | ||
19 | be useful, but WITHOUT ANY WARRANTY; without even the implied | ||
20 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
21 | See the GNU Affero General Public License for more details. | ||
22 | |||
23 | * You should have received a copy of the GNU Affero General Public | ||
24 | License along with Javascript Crypto Library. If not, see | ||
25 | <http://www.gnu.org/licenses/>. | ||
26 | |||
27 | */ | ||
28 | |||
29 | if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } | ||
30 | if (typeof(Clipperz.Visual) == 'undefined') { Clipperz.Visual = {}; } | ||
31 | |||
32 | Clipperz.Visual.VERSION = "0.1"; | ||
33 | Clipperz.Visual.NAME = "Clipperz.Visual"; | ||
34 | |||
35 | MochiKit.Base.update(Clipperz.Visual, { | ||
36 | |||
37 | //------------------------------------------------------------------------- | ||
38 | |||
39 | '__repr__': function () { | ||
40 | return "[" + this.NAME + " " + this.VERSION + "]"; | ||
41 | }, | ||
42 | |||
43 | //------------------------------------------------------------------------- | ||
44 | |||
45 | 'toString': function () { | ||
46 | return this.__repr__(); | ||
47 | }, | ||
48 | |||
49 | //------------------------------------------------------------------------- | ||
50 | |||
51 | 'deferredResize': function (anElement, someOptions) { | ||
52 | var deferredResult; | ||
53 | var moveTransition; | ||
54 | var scaleTransition; | ||
55 | var duration; | ||
56 | |||
57 | duration = someOptions.duration || 0.5; | ||
58 | |||
59 | deferredResult = new Clipperz.Async.Deferred("Visual.deferredResize", {trace:false}); | ||
60 | deferredResult.addCallback(MochiKit.Async.succeed, arguments[arguments.length - 1]); | ||
61 | |||
62 | moveTransition = MochiKit.Visual.Transitions.linear;//MochiKit.Visual.Transitions.sinoidal; | ||
63 | scaleTransition = MochiKit.Visual.Transitions.linear;//MochiKit.Visual.Transitions.sinoidal; | ||
64 | |||
65 | MochiKit.Style.setElementPosition(anElement, {x:someOptions.from.position.x, y:someOptions.from.position.y }, 'px'); | ||
66 | |||
67 | new MochiKit.Visual.Parallel([ | ||
68 | new MochiKit.Visual.Move(anElement, {x:someOptions.to.position.x, y:someOptions.to.position.y, mode:'absolute', transition:moveTransition, sync:true}), | ||
69 | new Clipperz.Visual.Resize(anElement, {fromSize:{h:someOptions.from.dimensions.h, w:someOptions.from.dimensions.w}, toSize:{h:someOptions.to.dimensions.h, w:someOptions.to.dimensions.w}, transition:scaleTransition, scaleContent:false, scaleFromCenter:false, restoreAfterFinish:true, sync:true}) | ||
70 | ], {duration:duration, afterFinish:MochiKit.Base.method(deferredResult, 'callback')}) | ||
71 | |||
72 | return deferredResult; | ||
73 | }, | ||
74 | |||
75 | //------------------------------------------------------------------------- | ||
76 | |||
77 | 'deferredAnimation': function (anAnimation, someParameters, someOptions) { | ||
78 | vardeferredResult; | ||
79 | var afterFinishCallback; | ||
80 | var options; | ||
81 | |||
82 | deferredResult = new Clipperz.Async.Deferred("Clipperz.Visual.deferredAnimation", {trace:false}); | ||
83 | deferredResult.addCallback(MochiKit.Async.succeed, arguments[arguments.length - 1]); | ||
84 | |||
85 | if (MochiKit.Base.isUndefinedOrNull(someOptions)) { | ||
86 | options = {} | ||
87 | } else { | ||
88 | options = someOptions; | ||
89 | } | ||
90 | |||
91 | if (MochiKit.Base.isUndefinedOrNull(someOptions['afterFinish'])) { | ||
92 | options['afterFinish'] = MochiKit.Base.noop; | ||
93 | } | ||
94 | |||
95 | MochiKit.Base.update(options, { | ||
96 | 'afterFinish': MochiKit.Base.compose(options['afterFinish'], MochiKit.Base.method(deferredResult, 'callback')) | ||
97 | }); | ||
98 | |||
99 | new anAnimation(someParameters, options); | ||
100 | |||
101 | return deferredResult; | ||
102 | }, | ||
103 | |||
104 | //------------------------------------------------------------------------- | ||
105 | |||
106 | 'deferredAnimations': function (aSinchronizationType, someAnimations, someOptions) { | ||
107 | var deferredResult; | ||
108 | varoptions; | ||
109 | |||
110 | deferredResult = new Clipperz.Async.Deferred("Visual.deferredParallelAnimations", {trace:false}); | ||
111 | deferredResult.addCallback(MochiKit.Async.succeed, arguments[arguments.length - 1]); | ||
112 | |||
113 | options = someOptions; | ||
114 | if (MochiKit.Base.isUndefinedOrNull(someOptions['afterFinish'])) { | ||
115 | options['afterFinish'] = MochiKit.Base.noop; | ||
116 | } | ||
117 | MochiKit.Base.update(options, { | ||
118 | 'afterFinish': MochiKit.Base.compose(options['afterFinish'], MochiKit.Base.method(deferredResult, 'callback')) | ||
119 | }); | ||
120 | |||
121 | new aSinchronizationType(someAnimations, options) | ||
122 | |||
123 | return deferredResult; | ||
124 | }, | ||
125 | |||
126 | //------------------------------------------------------------------------- | ||
127 | __syntaxFix__: "syntax fix" | ||
128 | |||
129 | }); | ||
130 | |||
131 | //############################################################################# | ||
132 | |||
133 | /** @id Clipperz.Visual.Resize */ | ||
134 | Clipperz.Visual.Resize = function (element, percent, options) { | ||
135 | var cls = arguments.callee; | ||
136 | if (!(this instanceof cls)) { | ||
137 | return new cls(element, percent, options); | ||
138 | } | ||
139 | this.__init__(element, percent, options); | ||
140 | }; | ||
141 | |||
142 | Clipperz.Visual.Resize.prototype = new MochiKit.Visual.Base(); | ||
143 | |||
144 | MochiKit.Base.update(Clipperz.Visual.Resize.prototype, { | ||
145 | __class__ : Clipperz.Visual.Resize, | ||
146 | |||
147 | __init__: function (element, options) { | ||
148 | this.element = MochiKit.DOM.getElement(element); | ||
149 | options = MochiKit.Base.update({ | ||
150 | scaleX: true, | ||
151 | scaleY: true, | ||
152 | scaleContent: true, | ||
153 | scaleFromCenter: false, | ||
154 | scaleMode: 'box', // 'box' or 'contents' or {} with provided values | ||
155 | syntax_fix: 'syntax fix' | ||
156 | }, options); | ||
157 | |||
158 | this.start(options); | ||
159 | }, | ||
160 | |||
161 | setup: function () { | ||
162 | this.restoreAfterFinish = this.options.restoreAfterFinish || false; | ||
163 | this.elementPositioning = MochiKit.Style.getStyle(this.element, 'position'); | ||
164 | |||
165 | var ma = MochiKit.Base.map; | ||
166 | var b = MochiKit.Base.bind; | ||
167 | this.originalStyle = {}; | ||
168 | ma(b(function (k) { this.originalStyle[k] = this.element.style[k]; }, this), ['top', 'left', 'width', 'height', 'fontSize']); | ||
169 | |||
170 | this.originalTop = this.element.offsetTop; | ||
171 | this.originalLeft = this.element.offsetLeft; | ||
172 | |||
173 | var fontSize = MochiKit.Style.getStyle(this.element, 'font-size') || '100%'; | ||
174 | ma(b(function (fontSizeType) { | ||
175 | if (fontSize.indexOf(fontSizeType) > 0) { | ||
176 | this.fontSize = parseFloat(fontSize); | ||
177 | this.fontSizeType = fontSizeType; | ||
178 | } | ||
179 | }, this), ['em', 'px', '%']); | ||
180 | |||
181 | this.factor = 1; | ||
182 | |||
183 | this.dims = [this.options.fromSize.h, this.options.fromSize.w]; | ||
184 | }, | ||
185 | |||
186 | update: function (position) { | ||
187 | this.setDimensions((this.options.toSize.h - this.options.fromSize.h) * position + this.options.fromSize.h, | ||
188 | (this.options.toSize.w - this.options.fromSize.w) * position + this.options.fromSize.w); | ||
189 | }, | ||
190 | |||
191 | finish: function () { | ||
192 | if (this.restoreAfterFinish) { | ||
193 | MochiKit.Style.setStyle(this.element, this.originalStyle); | ||
194 | } | ||
195 | }, | ||
196 | |||
197 | setDimensions: function (height, width) { | ||
198 | var d = {}; | ||
199 | var r = Math.round; | ||
200 | if (/MSIE/.test(navigator.userAgent)) { | ||
201 | r = Math.ceil; | ||
202 | } | ||
203 | if (this.options.scaleX) { | ||
204 | d.width = r(width) + 'px'; | ||
205 | } | ||
206 | if (this.options.scaleY) { | ||
207 | d.height = r(height) + 'px'; | ||
208 | } | ||
209 | if (this.options.scaleFromCenter) { | ||
210 | var topd = (height - this.dims[0])/2; | ||
211 | var leftd = (width - this.dims[1])/2; | ||
212 | if (this.elementPositioning == 'absolute') { | ||
213 | if (this.options.scaleY) { | ||
214 | d.top = this.originalTop - topd + 'px'; | ||
215 | } | ||
216 | if (this.options.scaleX) { | ||
217 | d.left = this.originalLeft - leftd + 'px'; | ||
218 | } | ||
219 | } else { | ||
220 | if (this.options.scaleY) { | ||
221 | d.top = -topd + 'px'; | ||
222 | } | ||
223 | if (this.options.scaleX) { | ||
224 | d.left = -leftd + 'px'; | ||
225 | } | ||
226 | } | ||
227 | } | ||
228 | MochiKit.Style.setStyle(this.element, d); | ||
229 | } | ||
230 | }); | ||
231 | |||
232 | //============================================================================= | ||
233 | |||
234 | Clipperz.Visual.squize = function (element, /* optional */ options) { | ||
235 | var d = MochiKit.DOM; | ||
236 | var v = MochiKit.Visual; | ||
237 | var s = MochiKit.Style; | ||
238 | |||
239 | element = d.getElement(element); | ||
240 | options = MochiKit.Base.update({ | ||
241 | moveTransition: v.Transitions.sinoidal, | ||
242 | scaleTransition: v.Transitions.sinoidal, | ||
243 | opacityTransition: v.Transitions.none, | ||
244 | scaleContent: true, | ||
245 | scaleFromCenter: false, | ||
246 | scaleX: true, | ||
247 | scaleY: true | ||
248 | }, options); | ||
249 | var oldStyle = { | ||
250 | top: element.style.top, | ||
251 | left: element.style.left, | ||
252 | height: element.style.height, | ||
253 | width: element.style.width, | ||
254 | opacity: s.getStyle(element, 'opacity') | ||
255 | }; | ||
256 | |||
257 | var dims = s.getElementDimensions(element, true); | ||
258 | var moveX, moveY; | ||
259 | |||
260 | moveX = options.scaleX ? dims.w/2 : 0; | ||
261 | moveY = options.scaleY ? dims.h/2 : 0; | ||
262 | |||
263 | var elemClip; | ||
264 | |||
265 | var optionsParallel = MochiKit.Base.update({ | ||
266 | beforeStartInternal: function (effect) { | ||
267 | s.makePositioned(effect.effects[0].element); | ||
268 | elemClip = s.makeClipping(effect.effects[0].element); | ||
269 | }, | ||
270 | afterFinishInternal: function (effect) { | ||
271 | s.hideElement(effect.effects[0].element); | ||
272 | s.undoClipping(effect.effects[0].element, elemClip); | ||
273 | s.undoPositioned(effect.effects[0].element); | ||
274 | s.setStyle(effect.effects[0].element, oldStyle); | ||
275 | } | ||
276 | }, options); | ||
277 | |||
278 | return new v.Parallel( | ||
279 | [new v.Opacity(element, { | ||
280 | sync: true, to: 0.0, from: 1.0, | ||
281 | transition: options.opacityTransition | ||
282 | }), | ||
283 | new v.Scale(element, /Opera/.test(navigator.userAgent) ? 1 : 0, { | ||
284 | scaleMode: {originalHeight: dims.h, originalWidth: dims.w}, | ||
285 | sync: true, transition: options.scaleTransition, | ||
286 | scaleContent: options.scaleContent, | ||
287 | scaleFromCenter: options.scaleFromCenter, | ||
288 | restoreAfterFinish: true, | ||
289 | scaleX: options.scaleX, | ||
290 | scaleY: options.scaleY | ||
291 | }), | ||
292 | new v.Move(element, { | ||
293 | x: moveX, y: moveY, sync: true, transition: options.moveTransition | ||
294 | }) | ||
295 | ], optionsParallel | ||
296 | ); | ||
297 | }; | ||
298 | |||
299 | //----------------------------------------------------------------------------- | ||
300 | |||
301 | Clipperz.Visual.expand = function (element, /* optional */ options) { | ||
302 | var d = MochiKit.DOM; | ||
303 | var v = MochiKit.Visual; | ||
304 | var s = MochiKit.Style; | ||
305 | |||
306 | element = d.getElement(element); | ||
307 | options = MochiKit.Base.update({ | ||
308 | // direction: 'center', | ||
309 | moveTransition: v.Transitions.sinoidal, | ||
310 | scaleTransition: v.Transitions.sinoidal, | ||
311 | opacityTransition: v.Transitions.none, | ||
312 | scaleContent: true, | ||
313 | scaleFromCenter: false, | ||
314 | scaleX: true, | ||
315 | scaleY: true | ||
316 | }, options); | ||
317 | var oldStyle = { | ||
318 | top: element.style.top, | ||
319 | left: element.style.left, | ||
320 | height: element.style.height, | ||
321 | width: element.style.width, | ||
322 | opacity: s.getStyle(element, 'opacity') | ||
323 | }; | ||
324 | |||
325 | var dims = s.getElementDimensions(element, true); | ||
326 | var moveX, moveY; | ||
327 | |||
328 | moveX = options.scaleX ? dims.w/2 : 0; | ||
329 | moveY = options.scaleY ? dims.h/2 : 0; | ||
330 | |||
331 | var elemClip; | ||
332 | |||
333 | var optionsParallel = MochiKit.Base.update({ | ||
334 | beforeStartInternal: function (effect) { | ||
335 | s.makePositioned(effect.effects[0].element); | ||
336 | elemClip = s.makeClipping(effect.effects[0].element); | ||
337 | }, | ||
338 | afterFinishInternal: function (effect) { | ||
339 | s.hideElement(effect.effects[0].element); | ||
340 | s.undoClipping(effect.effects[0].element, elemClip); | ||
341 | s.undoPositioned(effect.effects[0].element); | ||
342 | s.setStyle(effect.effects[0].element, oldStyle); | ||
343 | } | ||
344 | }, options); | ||
345 | |||
346 | return new v.Parallel( | ||
347 | [new v.Opacity(element, { | ||
348 | sync: true, to: 0.0, from: 1.0, | ||
349 | transition: options.opacityTransition | ||
350 | }), | ||
351 | new v.Scale(element, /Opera/.test(navigator.userAgent) ? 1 : 0, { | ||
352 | scaleMode: {originalHeight: dims.h, originalWidth: dims.w}, | ||
353 | sync: true, transition: options.scaleTransition, | ||
354 | scaleContent: options.scaleContent, | ||
355 | scaleFromCenter: options.scaleFromCenter, | ||
356 | restoreAfterFinish: true, | ||
357 | scaleX: options.scaleX, | ||
358 | scaleY: options.scaleY | ||
359 | }), | ||
360 | new v.Move(element, { | ||
361 | x: moveX, y: moveY, sync: true, transition: options.moveTransition | ||
362 | }) | ||
363 | ], optionsParallel | ||
364 | ); | ||
365 | }; | ||
366 | |||
367 | //============================================================================= | ||
368 | |||