summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/Clipperz/Visual.js
Unidiff
Diffstat (limited to 'frontend/gamma/js/Clipperz/Visual.js') (more/less context) (show whitespace changes)
-rw-r--r--frontend/gamma/js/Clipperz/Visual.js368
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
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz's Javascript Crypto Library.
6Javascript Crypto Library provides web developers with an extensive
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please
11refer 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
29if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
30if (typeof(Clipperz.Visual) == 'undefined') { Clipperz.Visual = {}; }
31
32Clipperz.Visual.VERSION = "0.1";
33Clipperz.Visual.NAME = "Clipperz.Visual";
34
35MochiKit.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 */
134Clipperz.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
142Clipperz.Visual.Resize.prototype = new MochiKit.Visual.Base();
143
144MochiKit.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
234Clipperz.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
301Clipperz.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