Added: incubator/jspwiki/trunk/src/WebContent/scripts/mootools-more.js
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/WebContent/scripts/mootools-more.js?rev=819135&view=auto
==============================================================================
--- incubator/jspwiki/trunk/src/WebContent/scripts/mootools-more.js (added)
+++ incubator/jspwiki/trunk/src/WebContent/scripts/mootools-more.js Sat Sep 26 
13:23:58 2009
@@ -0,0 +1,782 @@
+//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron 
Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the 
MooTools team <http://mootools.net/developers>, MIT Style License.
+
+MooTools.More = {
+       'version': '1.2.3.1'
+};
+
+/*
+Script: Fx.Elements.js
+       Effect to change any number of CSS properties of any number of Elements.
+
+       License:
+               MIT-style license.
+
+       Authors:
+               Valerio Proietti
+*/
+
+Fx.Elements = new Class({
+
+       Extends: Fx.CSS,
+
+       initialize: function(elements, options){
+               this.elements = this.subject = $$(elements);
+               this.parent(options);
+       },
+
+       compute: function(from, to, delta){
+               var now = {};
+               for (var i in from){
+                       var iFrom = from[i], iTo = to[i], iNow = now[i] = {};
+                       for (var p in iFrom) iNow[p] = this.parent(iFrom[p], 
iTo[p], delta);
+               }
+               return now;
+       },
+
+       set: function(now){
+               for (var i in now){
+                       var iNow = now[i];
+                       for (var p in iNow) this.render(this.elements[i], p, 
iNow[p], this.options.unit);
+               }
+               return this;
+       },
+
+       start: function(obj){
+               if (!this.check(obj)) return this;
+               var from = {}, to = {};
+               for (var i in obj){
+                       var iProps = obj[i], iFrom = from[i] = {}, iTo = to[i] 
= {};
+                       for (var p in iProps){
+                               var parsed = this.prepare(this.elements[i], p, 
iProps[p]);
+                               iFrom[p] = parsed.from;
+                               iTo[p] = parsed.to;
+                       }
+               }
+               return this.parent(from, to);
+       }
+
+});
+
+/*
+Script: Fx.Accordion.js
+       An Fx.Elements extension which allows you to easily create accordion 
type controls.
+
+       License:
+               MIT-style license.
+
+       Authors:
+               Valerio Proietti
+*/
+
+var Accordion = Fx.Accordion = new Class({
+
+       Extends: Fx.Elements,
+
+       options: {/*
+               onActive: $empty(toggler, section),
+               onBackground: $empty(toggler, section),*/
+               display: 0,
+               show: false,
+               height: true,
+               width: false,
+               opacity: true,
+               fixedHeight: false,
+               fixedWidth: false,
+               wait: false,
+               alwaysHide: false,
+               trigger: 'click',
+               initialDisplayFx: true
+       },
+
+       initialize: function(){
+               var params = Array.link(arguments, {'container': Element.type, 
'options': Object.type, 'togglers': $defined, 'elements': $defined});
+               this.parent(params.elements, params.options);
+               this.togglers = $$(params.togglers);
+               this.container = document.id(params.container);
+               this.previous = -1;
+               if (this.options.alwaysHide) this.options.wait = true;
+               if ($chk(this.options.show)){
+                       this.options.display = false;
+                       this.previous = this.options.show;
+               }
+               if (this.options.start){
+                       this.options.display = false;
+                       this.options.show = false;
+               }
+               this.effects = {};
+               if (this.options.opacity) this.effects.opacity = 'fullOpacity';
+               if (this.options.width) this.effects.width = 
this.options.fixedWidth ? 'fullWidth' : 'offsetWidth';
+               if (this.options.height) this.effects.height = 
this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';
+               for (var i = 0, l = this.togglers.length; i < l; i++) 
this.addSection(this.togglers[i], this.elements[i]);
+               this.elements.each(function(el, i){
+                       if (this.options.show === i){
+                               this.fireEvent('active', [this.togglers[i], 
el]);
+                       } else {
+                               for (var fx in this.effects) el.setStyle(fx, 0);
+                       }
+               }, this);
+               if ($chk(this.options.display)) 
this.display(this.options.display, this.options.initialDisplayFx);
+       },
+
+       addSection: function(toggler, element){
+               toggler = document.id(toggler);
+               element = document.id(element);
+               var test = this.togglers.contains(toggler);
+               this.togglers.include(toggler);
+               this.elements.include(element);
+               var idx = this.togglers.indexOf(toggler);
+               toggler.addEvent(this.options.trigger, this.display.bind(this, 
idx));
+               if (this.options.height) element.setStyles({'padding-top': 0, 
'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
+               if (this.options.width) element.setStyles({'padding-left': 0, 
'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
+               element.fullOpacity = 1;
+               if (this.options.fixedWidth) element.fullWidth = 
this.options.fixedWidth;
+               if (this.options.fixedHeight) element.fullHeight = 
this.options.fixedHeight;
+               element.setStyle('overflow', 'hidden');
+               if (!test){
+                       for (var fx in this.effects) element.setStyle(fx, 0);
+               }
+               return this;
+       },
+
+       display: function(index, useFx){
+               useFx = $pick(useFx, true);
+               index = ($type(index) == 'element') ? 
this.elements.indexOf(index) : index;
+               if ((this.timer && this.options.wait) || (index === 
this.previous && !this.options.alwaysHide)) return this;
+               this.previous = index;
+               var obj = {};
+               this.elements.each(function(el, i){
+                       obj[i] = {};
+                       var hide = (i != index) || (this.options.alwaysHide && 
(el.offsetHeight > 0));
+                       this.fireEvent(hide ? 'background' : 'active', 
[this.togglers[i], el]);
+                       for (var fx in this.effects) obj[i][fx] = hide ? 0 : 
el[this.effects[fx]];
+               }, this);
+               return useFx ? this.start(obj) : this.set(obj);
+       }
+
+});
+
+/*
+Script: Drag.js
+       The base Drag Class. Can be used to drag and resize Elements using 
mouse events.
+
+       License:
+               MIT-style license.
+
+       Authors:
+               Valerio Proietti
+               Tom Occhinno
+               Jan Kassens
+*/
+
+var Drag = new Class({
+
+       Implements: [Events, Options],
+
+       options: {/*
+               onBeforeStart: $empty(thisElement),
+               onStart: $empty(thisElement, event),
+               onSnap: $empty(thisElement)
+               onDrag: $empty(thisElement, event),
+               onCancel: $empty(thisElement),
+               onComplete: $empty(thisElement, event),*/
+               snap: 6,
+               unit: 'px',
+               grid: false,
+               style: true,
+               limit: false,
+               handle: false,
+               invert: false,
+               preventDefault: false,
+               modifiers: {x: 'left', y: 'top'}
+       },
+
+       initialize: function(){
+               var params = Array.link(arguments, {'options': Object.type, 
'element': $defined});
+               this.element = document.id(params.element);
+               this.document = this.element.getDocument();
+               this.setOptions(params.options || {});
+               var htype = $type(this.options.handle);
+               this.handles = ((htype == 'array' || htype == 'collection') ? 
$$(this.options.handle) : document.id(this.options.handle)) || this.element;
+               this.mouse = {'now': {}, 'pos': {}};
+               this.value = {'start': {}, 'now': {}};
+
+               this.selection = (Browser.Engine.trident) ? 'selectstart' : 
'mousedown';
+
+               this.bound = {
+                       start: this.start.bind(this),
+                       check: this.check.bind(this),
+                       drag: this.drag.bind(this),
+                       stop: this.stop.bind(this),
+                       cancel: this.cancel.bind(this),
+                       eventStop: $lambda(false)
+               };
+               this.attach();
+       },
+
+       attach: function(){
+               this.handles.addEvent('mousedown', this.bound.start);
+               return this;
+       },
+
+       detach: function(){
+               this.handles.removeEvent('mousedown', this.bound.start);
+               return this;
+       },
+
+       start: function(event){
+               if (this.options.preventDefault) event.preventDefault();
+               this.mouse.start = event.page;
+               this.fireEvent('beforeStart', this.element);
+               var limit = this.options.limit;
+               this.limit = {x: [], y: []};
+               for (var z in this.options.modifiers){
+                       if (!this.options.modifiers[z]) continue;
+                       if (this.options.style) this.value.now[z] = 
this.element.getStyle(this.options.modifiers[z]).toInt();
+                       else this.value.now[z] = 
this.element[this.options.modifiers[z]];
+                       if (this.options.invert) this.value.now[z] *= -1;
+                       this.mouse.pos[z] = event.page[z] - this.value.now[z];
+                       if (limit && limit[z]){
+                               for (var i = 2; i--; i){
+                                       if ($chk(limit[z][i])) this.limit[z][i] 
= $lambda(limit[z][i])();
+                               }
+                       }
+               }
+               if ($type(this.options.grid) == 'number') this.options.grid = 
{x: this.options.grid, y: this.options.grid};
+               this.document.addEvents({mousemove: this.bound.check, mouseup: 
this.bound.cancel});
+               this.document.addEvent(this.selection, this.bound.eventStop);
+       },
+
+       check: function(event){
+               if (this.options.preventDefault) event.preventDefault();
+               var distance = Math.round(Math.sqrt(Math.pow(event.page.x - 
this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2)));
+               if (distance > this.options.snap){
+                       this.cancel();
+                       this.document.addEvents({
+                               mousemove: this.bound.drag,
+                               mouseup: this.bound.stop
+                       });
+                       this.fireEvent('start', [this.element, 
event]).fireEvent('snap', this.element);
+               }
+       },
+
+       drag: function(event){
+               if (this.options.preventDefault) event.preventDefault();
+               this.mouse.now = event.page;
+               for (var z in this.options.modifiers){
+                       if (!this.options.modifiers[z]) continue;
+                       this.value.now[z] = this.mouse.now[z] - 
this.mouse.pos[z];
+                       if (this.options.invert) this.value.now[z] *= -1;
+                       if (this.options.limit && this.limit[z]){
+                               if ($chk(this.limit[z][1]) && 
(this.value.now[z] > this.limit[z][1])){
+                                       this.value.now[z] = this.limit[z][1];
+                               } else if ($chk(this.limit[z][0]) && 
(this.value.now[z] < this.limit[z][0])){
+                                       this.value.now[z] = this.limit[z][0];
+                               }
+                       }
+                       if (this.options.grid[z]) this.value.now[z] -= 
((this.value.now[z] - (this.limit[z][0]||0)) % this.options.grid[z]);
+                       if (this.options.style) 
this.element.setStyle(this.options.modifiers[z], this.value.now[z] + 
this.options.unit);
+                       else this.element[this.options.modifiers[z]] = 
this.value.now[z];
+               }
+               this.fireEvent('drag', [this.element, event]);
+       },
+
+       cancel: function(event){
+               this.document.removeEvent('mousemove', this.bound.check);
+               this.document.removeEvent('mouseup', this.bound.cancel);
+               if (event){
+                       this.document.removeEvent(this.selection, 
this.bound.eventStop);
+                       this.fireEvent('cancel', this.element);
+               }
+       },
+
+       stop: function(event){
+               this.document.removeEvent(this.selection, this.bound.eventStop);
+               this.document.removeEvent('mousemove', this.bound.drag);
+               this.document.removeEvent('mouseup', this.bound.stop);
+               if (event) this.fireEvent('complete', [this.element, event]);
+       }
+
+});
+
+Element.implement({
+
+       makeResizable: function(options){
+               var drag = new Drag(this, $merge({modifiers: {x: 'width', y: 
'height'}}, options));
+               this.store('resizer', drag);
+               return drag.addEvent('drag', function(){
+                       this.fireEvent('resize', drag);
+               }.bind(this));
+       }
+
+});
+
+
+/*
+Script: Drag.Move.js
+       A Drag extension that provides support for the constraining of 
draggables to containers and droppables.
+
+       License:
+               MIT-style license.
+
+       Authors:
+               Valerio Proietti
+               Tom Occhinno
+               Jan Kassens*/
+
+Drag.Move = new Class({
+
+       Extends: Drag,
+
+       options: {/*
+               onEnter: $empty(thisElement, overed),
+               onLeave: $empty(thisElement, overed),
+               onDrop: $empty(thisElement, overed, event),*/
+               droppables: [],
+               container: false,
+               precalculate: false,
+               includeMargins: true,
+               checkDroppables: true
+       },
+
+       initialize: function(element, options){
+               this.parent(element, options);
+               this.droppables = $$(this.options.droppables);
+               this.container = document.id(this.options.container);
+               if (this.container && $type(this.container) != 'element') 
this.container = document.id(this.container.getDocument().body);
+
+               var position = this.element.getStyle('position');
+               if (position=='static') position = 'absolute';
+               if ([this.element.getStyle('left'), 
this.element.getStyle('top')].contains('auto')) 
this.element.position(this.element.getPosition(this.element.offsetParent));
+               this.element.setStyle('position', position);
+
+               this.addEvent('start', this.checkDroppables, true);
+
+               this.overed = null;
+       },
+
+       start: function(event){
+               if (this.container){
+                       var ccoo = 
this.container.getCoordinates(this.element.getOffsetParent()), cbs = {}, ems = 
{};
+
+                       ['top', 'right', 'bottom', 'left'].each(function(pad){
+                               cbs[pad] = this.container.getStyle('border-' + 
pad).toInt();
+                               ems[pad] = this.element.getStyle('margin-' + 
pad).toInt();
+                       }, this);
+
+                       var width = this.element.offsetWidth + ems.left + 
ems.right;
+                       var height = this.element.offsetHeight + ems.top + 
ems.bottom;
+
+                       if (this.options.includeMargins) {
+                               $each(ems, function(value, key) {
+                                       ems[key] = 0;
+                               });
+                       }
+                       if (this.container == this.element.getOffsetParent()) {
+                               this.options.limit = {
+                                       x: [0 - ems.left, ccoo.right - cbs.left 
- cbs.right - width + ems.right],
+                                       y: [0 - ems.top, ccoo.bottom - cbs.top 
- cbs.bottom - height + ems.bottom]
+                               };
+                       } else {
+                               this.options.limit = {
+                                       x: [ccoo.left + cbs.left - ems.left, 
ccoo.right - cbs.right - width + ems.right],
+                                       y: [ccoo.top + cbs.top - ems.top, 
ccoo.bottom - cbs.bottom - height + ems.bottom]
+                               };
+                       }
+
+               }
+               if (this.options.precalculate){
+                       this.positions = this.droppables.map(function(el) {
+                               return el.getCoordinates();
+                       });
+               }
+               this.parent(event);
+       },
+
+       checkAgainst: function(el, i){
+               el = (this.positions) ? this.positions[i] : el.getCoordinates();
+               var now = this.mouse.now;
+               return (now.x > el.left && now.x < el.right && now.y < 
el.bottom && now.y > el.top);
+       },
+
+       checkDroppables: function(){
+               var overed = this.droppables.filter(this.checkAgainst, 
this).getLast();
+               if (this.overed != overed){
+                       if (this.overed) this.fireEvent('leave', [this.element, 
this.overed]);
+                       if (overed) this.fireEvent('enter', [this.element, 
overed]);
+                       this.overed = overed;
+               }
+       },
+
+       drag: function(event){
+               this.parent(event);
+               if (this.options.checkDroppables && this.droppables.length) 
this.checkDroppables();
+       },
+
+       stop: function(event){
+               this.checkDroppables();
+               this.fireEvent('drop', [this.element, this.overed, event]);
+               this.overed = null;
+               return this.parent(event);
+       }
+
+});
+
+Element.implement({
+
+       makeDraggable: function(options){
+               var drag = new Drag.Move(this, options);
+               this.store('dragger', drag);
+               return drag;
+       }
+
+});
+
+
+/*
+Script: Color.js
+       Class for creating and manipulating colors in JavaScript. Supports HSB 
-> RGB Conversions and vice versa.
+
+       License:
+               MIT-style license.
+
+       Authors:
+               Valerio Proietti
+*/
+
+var Color = new Native({
+
+       initialize: function(color, type){
+               if (arguments.length >= 3){
+                       type = 'rgb'; color = Array.slice(arguments, 0, 3);
+               } else if (typeof color == 'string'){
+                       if (color.match(/rgb/)) color = 
color.rgbToHex().hexToRgb(true);
+                       else if (color.match(/hsb/)) color = color.hsbToRgb();
+                       else color = color.hexToRgb(true);
+               }
+               type = type || 'rgb';
+               switch (type){
+                       case 'hsb':
+                               var old = color;
+                               color = color.hsbToRgb();
+                               color.hsb = old;
+                       break;
+                       case 'hex': color = color.hexToRgb(true); break;
+               }
+               color.rgb = color.slice(0, 3);
+               color.hsb = color.hsb || color.rgbToHsb();
+               color.hex = color.rgbToHex();
+               return $extend(color, this);
+       }
+
+});
+
+Color.implement({
+
+       mix: function(){
+               var colors = Array.slice(arguments);
+               var alpha = ($type(colors.getLast()) == 'number') ? 
colors.pop() : 50;
+               var rgb = this.slice();
+               colors.each(function(color){
+                       color = new Color(color);
+                       for (var i = 0; i < 3; i++) rgb[i] = Math.round((rgb[i] 
/ 100 * (100 - alpha)) + (color[i] / 100 * alpha));
+               });
+               return new Color(rgb, 'rgb');
+       },
+
+       invert: function(){
+               return new Color(this.map(function(value){
+                       return 255 - value;
+               }));
+       },
+
+       setHue: function(value){
+               return new Color([value, this.hsb[1], this.hsb[2]], 'hsb');
+       },
+
+       setSaturation: function(percent){
+               return new Color([this.hsb[0], percent, this.hsb[2]], 'hsb');
+       },
+
+       setBrightness: function(percent){
+               return new Color([this.hsb[0], this.hsb[1], percent], 'hsb');
+       }
+
+});
+
+var $RGB = function(r, g, b){
+       return new Color([r, g, b], 'rgb');
+};
+
+var $HSB = function(h, s, b){
+       return new Color([h, s, b], 'hsb');
+};
+
+var $HEX = function(hex){
+       return new Color(hex, 'hex');
+};
+
+Array.implement({
+
+       rgbToHsb: function(){
+               var red = this[0], green = this[1], blue = this[2];
+               var hue, saturation, brightness;
+               var max = Math.max(red, green, blue), min = Math.min(red, 
green, blue);
+               var delta = max - min;
+               brightness = max / 255;
+               saturation = (max != 0) ? delta / max : 0;
+               if (saturation == 0){
+                       hue = 0;
+               } else {
+                       var rr = (max - red) / delta;
+                       var gr = (max - green) / delta;
+                       var br = (max - blue) / delta;
+                       if (red == max) hue = br - gr;
+                       else if (green == max) hue = 2 + rr - br;
+                       else hue = 4 + gr - rr;
+                       hue /= 6;
+                       if (hue < 0) hue++;
+               }
+               return [Math.round(hue * 360), Math.round(saturation * 100), 
Math.round(brightness * 100)];
+       },
+
+       hsbToRgb: function(){
+               var br = Math.round(this[2] / 100 * 255);
+               if (this[1] == 0){
+                       return [br, br, br];
+               } else {
+                       var hue = this[0] % 360;
+                       var f = hue % 60;
+                       var p = Math.round((this[2] * (100 - this[1])) / 10000 
* 255);
+                       var q = Math.round((this[2] * (6000 - this[1] * f)) / 
600000 * 255);
+                       var t = Math.round((this[2] * (6000 - this[1] * (60 - 
f))) / 600000 * 255);
+                       switch (Math.floor(hue / 60)){
+                               case 0: return [br, t, p];
+                               case 1: return [q, br, p];
+                               case 2: return [p, br, t];
+                               case 3: return [p, q, br];
+                               case 4: return [t, p, br];
+                               case 5: return [br, p, q];
+                       }
+               }
+               return false;
+       }
+
+});
+
+String.implement({
+
+       rgbToHsb: function(){
+               var rgb = this.match(/\d{1,3}/g);
+               return (rgb) ? rgb.rgbToHsb() : null;
+       },
+
+       hsbToRgb: function(){
+               var hsb = this.match(/\d{1,3}/g);
+               return (hsb) ? hsb.hsbToRgb() : null;
+       }
+
+});
+
+
+/*
+Script: Hash.Cookie.js
+       Class for creating, reading, and deleting Cookies in JSON format.
+
+       License:
+               MIT-style license.
+
+       Authors:
+               Valerio Proietti
+               Aaron Newton
+*/
+
+Hash.Cookie = new Class({
+
+       Extends: Cookie,
+
+       options: {
+               autoSave: true
+       },
+
+       initialize: function(name, options){
+               this.parent(name, options);
+               this.load();
+       },
+
+       save: function(){
+               var value = JSON.encode(this.hash);
+               if (!value || value.length > 4096) return false; //cookie would 
be truncated!
+               if (value == '{}') this.dispose();
+               else this.write(value);
+               return true;
+       },
+
+       load: function(){
+               this.hash = new Hash(JSON.decode(this.read(), true));
+               return this;
+       }
+
+});
+
+Hash.each(Hash.prototype, function(method, name){
+       if (typeof method == 'function') Hash.Cookie.implement(name, function(){
+               var value = method.apply(this.hash, arguments);
+               if (this.options.autoSave) this.save();
+               return value;
+       });
+});
+
+/*
+Script: Tips.js
+       Class for creating nice tips that follow the mouse cursor when hovering 
an element.
+
+       License:
+               MIT-style license.
+
+       Authors:
+               Valerio Proietti
+               Christoph Pojer
+*/
+
+var Tips = new Class({
+
+       Implements: [Events, Options],
+
+       options: {
+               onShow: function(tip){
+                       tip.setStyle('visibility', 'visible');
+               },
+               onHide: function(tip){
+                       tip.setStyle('visibility', 'hidden');
+               },
+               title: 'title',
+               text: function(el){
+                       return el.get('rel') || el.get('href');
+               },
+               showDelay: 100,
+               hideDelay: 100,
+               className: null,
+               offset: {x: 16, y: 16},
+               fixed: false
+       },
+
+       initialize: function(){
+               var params = Array.link(arguments, {options: Object.type, 
elements: $defined});
+               if (params.options && params.options.offsets) 
params.options.offset = params.options.offsets;
+               this.setOptions(params.options);
+               this.container = new Element('div', {'class': 'tip'});
+               this.tip = this.getTip();
+
+               if (params.elements) this.attach(params.elements);
+       },
+
+       getTip: function(){
+               return new Element('div', {
+                       'class': this.options.className,
+                       styles: {
+                               visibility: 'hidden',
+                               display: 'none',
+                               position: 'absolute',
+                               top: 0,
+                               left: 0
+                       }
+               }).adopt(
+                       new Element('div', {'class': 'tip-top'}),
+                       this.container,
+                       new Element('div', {'class': 'tip-bottom'})
+               ).inject(document.body);
+       },
+
+       attach: function(elements){
+               var read = function(option, element){
+                       if (option == null) return '';
+                       return $type(option) == 'function' ? option(element) : 
element.get(option);
+               };
+               $$(elements).each(function(element){
+                       var title = read(this.options.title, element);
+                       element.erase('title').store('tip:native', 
title).retrieve('tip:title', title);
+                       element.retrieve('tip:text', read(this.options.text, 
element));
+
+                       var events = ['enter', 'leave'];
+                       if (!this.options.fixed) events.push('move');
+
+                       events.each(function(value){
+                               element.addEvent('mouse' + value, 
element.retrieve('tip:' + value, this['element' + 
value.capitalize()].bindWithEvent(this, element)));
+                       }, this);
+               }, this);
+
+               return this;
+       },
+
+       detach: function(elements){
+               $$(elements).each(function(element){
+                       ['enter', 'leave', 'move'].each(function(value){
+                               element.removeEvent('mouse' + value, 
element.retrieve('tip:' + value) || $empty);
+                       });
+
+                       
element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');
+
+                       if ($type(this.options.title) == 'string' && 
this.options.title == 'title'){
+                               var original = element.retrieve('tip:native');
+                               if (original) element.set('title', original);
+                       }
+               }, this);
+
+               return this;
+       },
+
+       elementEnter: function(event, element){
+               $A(this.container.childNodes).each(Element.dispose);
+
+               ['title', 'text'].each(function(value){
+                       var content = element.retrieve('tip:' + value);
+                       if (!content) return;
+
+                       this[value + 'Element'] = new Element('div', {'class': 
'tip-' + value}).inject(this.container);
+                       this.fill(this[value + 'Element'], content);
+               }, this);
+
+               this.timer = $clear(this.timer);
+               this.timer = this.show.delay(this.options.showDelay, this, 
element);
+               this.tip.setStyle('display', 'block');
+               this.position((!this.options.fixed) ? event : {page: 
element.getPosition()});
+       },
+
+       elementLeave: function(event, element){
+               $clear(this.timer);
+               this.tip.setStyle('display', 'none');
+               this.timer = this.hide.delay(this.options.hideDelay, this, 
element);
+       },
+
+       elementMove: function(event){
+               this.position(event);
+       },
+
+       position: function(event){
+               var size = window.getSize(), scroll = window.getScroll(),
+                       tip = {x: this.tip.offsetWidth, y: 
this.tip.offsetHeight},
+                       props = {x: 'left', y: 'top'},
+                       obj = {};
+
+               for (var z in props){
+                       obj[props[z]] = event.page[z] + this.options.offset[z];
+                       if ((obj[props[z]] + tip[z] - scroll[z]) > size[z]) 
obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
+               }
+
+               this.tip.setStyles(obj);
+       },
+
+       fill: function(element, contents){
+               if(typeof contents == 'string') element.set('html', contents);
+               else element.adopt(contents);
+       },
+
+       show: function(el){
+               this.fireEvent('show', [this.tip, el]);
+       },
+
+       hide: function(el){
+               this.fireEvent('hide', [this.tip, el]);
+       }
+
+});
\ No newline at end of file

Modified: incubator/jspwiki/trunk/src/WebContent/scripts/stripes-support.js
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/WebContent/scripts/stripes-support.js?rev=819135&r1=819134&r2=819135&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/WebContent/scripts/stripes-support.js (original)
+++ incubator/jspwiki/trunk/src/WebContent/scripts/stripes-support.js Sat Sep 
26 13:23:58 2009
@@ -1,4 +1,4 @@
-/*! 
+/*!
     JSPWiki - a JSP-based WikiWiki clone.
 
     Licensed to the Apache Software Foundation (ASF) under one
@@ -16,7 +16,7 @@
     "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.  
+    under the License.
 */
 
 /*
@@ -36,31 +36,34 @@
        Based on http://mootools.net/ v1.11
        *       Core, Class,  Native, Element(ex. Dimensions), Window,
        *       Effects(ex. Scroll), Drag(Base), Remote, Plugins(Hash.Cookie, 
Tips, Accordion)
-       
+
 */
 
 /*
 Class: Stripes
        The main javascript class to support basic jspwiki functions.
+
+       Fixme: update to mootool 1.2.3
 */
 var Stripes = {
-  executeEvent: function( form, event, divTarget ){
-    params = event + "=&" + $(form).toQueryString();
-    new Ajax(form.action, {
-      postBody: params,
-      method: 'post',
+       executeEvent: function( form, event, divTarget ){
+               params = event + "=&" + $(form).toQueryString();
+
+               new Request(form.action, {
+                       postBody: params,
+                       method: 'post',
                        onComplete: function(response){
-                         // Clear the results div
-                         $(divTarget).empty();
-        // Build new results if we got a response
-        if(response) var results = eval(response);
-        if(results){
-          var target = $(divTarget);
-          results.each(function(result,i) {
-            var p = new Element('p').setHTML(result).injectInside(divTarget);
-          });
-        }
-      }
-               }).request();
-  }
+                               // Clear the results div
+                               $(divTarget).empty();
+                               // Build new results if we got a response
+                               if(response) var results = eval(response);
+                               if(results){
+                                       var target = 
$(divTarget).addClass("warning");
+                                       results.each(function(result,i) {
+                                               var p = new 
Element('p').setHTML(result).injectInside(divTarget);
+                                       });
+                               }
+                       }
+               }).send();
+       }
 }


Reply via email to