]>
jfr.im git - irc/quakenet/qwebirc.git/blob - static/js/mootools-1.2.5.1-more.js
1 //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.
3 MooTools
. More
={ version : "1.2.5.1" , build : "254884f2b83651bf95260eed5c6cceb838e22d8e" }; Class
. Mutators
. Binds = function ( a
){ return a
;}; Class
. Mutators
. initialize = function ( a
){ return function (){$ splat ( this . Binds
). each ( function ( b
){ var c
= this [ b
];
4 if ( c
){ this [ b
]= c
. bind ( this );}}, this ); return a
. apply ( this , arguments
);};}; Element
. implement ({ measure : function ( e
){ var g = function ( h
){ return !!(! h
|| h
. offsetHeight
|| h
. offsetWidth
);
5 }; if ( g ( this )){ return e
. apply ( this );} var d
= this . getParent (), f
=[], b
=[]; while (! g ( d
)&& d
!= document
. body
){ b
. push ( d
. expose ()); d
= d
. getParent ();} var c
= this . expose ();
6 var a
= e
. apply ( this ); c (); b
. each ( function ( h
){ h ();}); return a
;}, expose : function (){ if ( this . getStyle ( "display" )!= "none" ){ return $ empty
;} var a
= this . style
. cssText
;
7 this . setStyles ({ display : "block" , position : "absolute" , visibility : "hidden" }); return function (){ this . style
. cssText
= a
;}. bind ( this );}, getDimensions : function ( a
){ a
=$ merge ({ computeSize : false }, a
);
8 var f
={}; var d = function ( g
, e
){ return ( e
. computeSize
)? g
. getComputedSize ( e
): g
. getSize ();}; var b
= this . getParent ( "body" ); if ( b
&& this . getStyle ( "display" )== "none" ){ f
= this . measure ( function (){ return d ( this , a
);
9 });} else { if ( b
){ try { f
= d ( this , a
);} catch ( c
){}} else { f
={ x : 0 , y : 0 };}} return $ chk ( f
. x
)?$ extend ( f
,{ width : f
. x
, height : f
. y
}):$ extend ( f
,{ x : f
. width
, y : f
. height
});}, getComputedSize : function ( a
){ if ( a
&& a
. plains
){ a
. planes
= a
. plains
;
10 } a
=$ merge ({ styles :[ "padding" , "border" ], planes :{ height :[ "top" , "bottom" ], width :[ "left" , "right" ]}, mode : "both" }, a
); var c
={ width : 0 , height : 0 }; switch ( a
. mode
){ case "vertical" : delete c
. width
;
11 delete a
. planes
. width
; break ; case "horizontal" : delete c
. height
; delete a
. planes
. height
; break ;} var b
=[];$ each ( a
. planes
, function ( f
, g
){ f
. each ( function ( h
){ a
. styles
. each ( function ( i
){ b
. push (( i
== "border" )? i
+ "-" + h
+ "-width" : i
+ "-" + h
);
12 });});}); var e
={}; b
. each ( function ( f
){ e
[ f
]= this . getComputedStyle ( f
);}, this ); var d
=[];$ each ( a
. planes
, function ( f
, g
){ var h
= g
. capitalize (); c
[ "total" + h
]= c
[ "computed" + h
]= 0 ;
13 f
. each ( function ( i
){ c
[ "computed" + i
. capitalize ()]= 0 ; b
. each ( function ( k
, j
){ if ( k
. test ( i
)){ e
[ k
]= e
[ k
]. toInt ()|| 0 ; c
[ "total" + h
]= c
[ "total" + h
]+ e
[ k
]; c
[ "computed" + i
. capitalize ()]= c
[ "computed" + i
. capitalize ()]+ e
[ k
];
14 } if ( k
. test ( i
)&& g
!= k
&&( k
. test ( "border" )|| k
. test ( "padding" ))&&! d
. contains ( k
)){ d
. push ( k
); c
[ "computed" + h
]= c
[ "computed" + h
]- e
[ k
];}});});});[ "Width" , "Height" ]. each ( function ( g
){ var f
= g
. toLowerCase ();
15 if (!$ chk ( c
[ f
])){ return ;} c
[ f
]= c
[ f
]+ this [ "offset" + g
]+ c
[ "computed" + g
]; c
[ "total" + g
]= c
[ f
]+ c
[ "total" + g
]; delete c
[ "computed" + g
];}, this ); return $ extend ( e
, c
);}});
16 var Drag
= new Class ({ Implements :[ Events
, Options
], options :{ snap : 6 , unit : "px" , grid : false , style : true , limit : false , handle : false , invert : false , preventDefault : false , stopPropagation : false , modifiers :{ x : "left" , y : "top" }}, initialize : function (){ var b
= Array
. link ( arguments
,{ options : Object
. type
, element :$ defined
});
17 this . element
= document
. id ( b
. element
); this . document
= this . element
. getDocument (); this . setOptions ( b
. options
||{}); var a
=$ type ( this . options
. handle
); this . handles
=(( a
== "array" || a
== "collection" )?$$( this . options
. handle
): document
. id ( this . options
. handle
))|| this . element
;
18 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 )};
19 this . attach ();}, attach : function (){ this . handles
. addEvent ( "mousedown" , this . bound
. start
); return this ;}, detach : function (){ this . handles
. removeEvent ( "mousedown" , this . bound
. start
);
20 return this ;}, start : function ( e
){ if ( e
. rightClick
){ return ;} if ( this . options
. preventDefault
){ e
. preventDefault ();} if ( this . options
. stopPropagation
){ e
. stopPropagation ();
21 } this . mouse
. start
= e
. page
; this . fireEvent ( "beforeStart" , this . element
); var a
= this . options
. limit
; this . limit
={ x :[], y :[]}; var d
= this . element
. getStyles ( "left" , "right" , "top" , "bottom" );
22 this . _invert
={ x : this . options
. modifiers
. x
== "left" && d
. left
== "auto" &&! isNaN ( d
. right
. toInt ())&&( this . options
. modifiers
. x
= "right" ), y : this . options
. modifiers
. y
== "top" && d
. top
== "auto" &&! isNaN ( d
. bottom
. toInt ())&&( this . options
. modifiers
. y
= "bottom" )};
23 var g
, f
; for ( g
in this . options
. modifiers
){ if (! this . options
. modifiers
[ g
]){ continue ;} var c
= this . element
. getStyle ( this . options
. modifiers
[ g
]); if ( c
&&! c
. match ( /px$/ )){ if (! f
){ f
= this . element
. getCoordinates ( this . element
. getOffsetParent ());
24 } c
= f
[ this . options
. modifiers
[ g
]];} if ( this . options
. style
){ this . value
. now
[ g
]=( c
|| 0 ). toInt ();} else { this . value
. now
[ g
]= this . element
[ this . options
. modifiers
[ g
]];
25 } if ( this . options
. invert
){ this . value
. now
[ g
]*=- 1 ;} if ( this . _invert
[ g
]){ this . value
. now
[ g
]*=- 1 ;} this . mouse
. pos
[ g
]= e
. page
[ g
]- this . value
. now
[ g
]; if ( a
&& a
[ g
]){ for ( var b
= 2 ;
26 b
--; b
){ if ($ chk ( a
[ g
][ b
])){ this . limit
[ g
][ b
]=$ lambda ( a
[ g
][ b
])();}}}} if ($ type ( this . options
. grid
)== "number" ){ this . options
. grid
={ x : this . options
. grid
, y : this . options
. grid
};
27 } this . document
. addEvents ({ mousemove : this . bound
. check
, mouseup : this . bound
. cancel
}); this . document
. addEvent ( this . selection
, this . bound
. eventStop
);}, check : function ( a
){ if ( this . options
. preventDefault
){ a
. preventDefault ();
28 } var b
= Math
. round ( Math
. sqrt ( Math
. pow ( a
. page
. x
- this . mouse
. start
. x
, 2 )+ Math
. pow ( a
. page
. y
- this . mouse
. start
. y
, 2 ))); if ( b
> this . options
. snap
){ this . cancel (); this . document
. addEvents ({ mousemove : this . bound
. drag
, mouseup : this . bound
. stop
});
29 this . fireEvent ( "start" ,[ this . element
, a
]). fireEvent ( "snap" , this . element
);}}, drag : function ( a
){ if ( this . options
. preventDefault
){ a
. preventDefault ();} this . mouse
. now
= a
. page
;
30 for ( var b
in this . options
. modifiers
){ if (! this . options
. modifiers
[ b
]){ continue ;} this . value
. now
[ b
]= this . mouse
. now
[ b
]- this . mouse
. pos
[ b
]; if ( this . options
. invert
){ this . value
. now
[ b
]*=- 1 ;
31 } if ( this . _invert
[ b
]){ this . value
. now
[ b
]*=- 1 ;} if ( this . options
. limit
&& this . limit
[ b
]){ if ($ chk ( this . limit
[ b
][ 1 ])&&( this . value
. now
[ b
]> this . limit
[ b
][ 1 ])){ this . value
. now
[ b
]= this . limit
[ b
][ 1 ];
32 } else { if ($ chk ( this . limit
[ b
][ 0 ])&&( this . value
. now
[ b
]< this . limit
[ b
][ 0 ])){ this . value
. now
[ b
]= this . limit
[ b
][ 0 ];}}} if ( this . options
. grid
[ b
]){ this . value
. now
[ b
]-=(( this . value
. now
[ b
]-( this . limit
[ b
][ 0 ]|| 0 ))% this . options
. grid
[ b
]);
33 } if ( this . options
. style
){ this . element
. setStyle ( this . options
. modifiers
[ b
], this . value
. now
[ b
]+ this . options
. unit
);} else { this . element
[ this . options
. modifiers
[ b
]]= this . value
. now
[ b
];
34 }} this . fireEvent ( "drag" ,[ this . element
, a
]);}, cancel : function ( a
){ this . document
. removeEvent ( "mousemove" , this . bound
. check
); this . document
. removeEvent ( "mouseup" , this . bound
. cancel
);
35 if ( a
){ this . document
. removeEvent ( this . selection
, this . bound
. eventStop
); this . fireEvent ( "cancel" , this . element
);}}, stop : function ( a
){ this . document
. removeEvent ( this . selection
, this . bound
. eventStop
);
36 this . document
. removeEvent ( "mousemove" , this . bound
. drag
); this . document
. removeEvent ( "mouseup" , this . bound
. stop
); if ( a
){ this . fireEvent ( "complete" ,[ this . element
, a
]);
37 }}}); Element
. implement ({ makeResizable : function ( a
){ var b
= new Drag ( this ,$ merge ({ modifiers :{ x : "width" , y : "height" }}, a
)); this . store ( "resizer" , b
); return b
. addEvent ( "drag" , function (){ this . fireEvent ( "resize" , b
);
38 }. bind ( this ));}}); var Slider
= new Class ({ Implements :[ Events
, Options
], Binds :[ "clickedElement" , "draggedKnob" , "scrolledElement" ], options :{ onTick : function ( a
){ if ( this . options
. snap
){ a
= this . toPosition ( this . step
);
39 } this . knob
. setStyle ( this . property
, a
);}, initialStep : 0 , snap : false , offset : 0 , range : false , wheel : false , steps : 100 , mode : "horizontal" }, initialize : function ( f
, a
, e
){ this . setOptions ( e
);
40 this . element
= document
. id ( f
); this . knob
= document
. id ( a
); this . previousChange
= this . previousEnd
= this . step
=- 1 ; var g
, b
={}, d
={ x : false , y : false }; switch ( this . options
. mode
){ case "vertical" : this . axis
= "y" ;
41 this . property
= "top" ; g
= "offsetHeight" ; break ; case "horizontal" : this . axis
= "x" ; this . property
= "left" ; g
= "offsetWidth" ;} this . full
= this . element
. measure ( function (){ this . half
= this . knob
[ g
]/ 2 ;
42 return this . element
[ g
]- this . knob
[ g
]+( this . options
. offset
* 2 );}. bind ( this )); this . setRange ( this . options
. range
); this . knob
. setStyle ( "position" , "relative" ). setStyle ( this . property
,- this . options
. offset
);
43 d
[ this . axis
]= this . property
; b
[ this . axis
]=[- this . options
. offset
, this . full
- this . options
. offset
]; var c
={ snap : 0 , limit : b
, modifiers : d
, onDrag : this . draggedKnob
, onStart : this . draggedKnob
, onBeforeStart :( function (){ this . isDragging
= true ;
44 }). bind ( this ), onCancel : function (){ this . isDragging
= false ;}. bind ( this ), onComplete : function (){ this . isDragging
= false ; this . draggedKnob (); this . end ();}. bind ( this )};
45 if ( this . options
. snap
){ c
. grid
= Math
. ceil ( this . stepWidth
); c
. limit
[ this . axis
][ 1 ]= this . full
;} this . drag
= new Drag ( this . knob
, c
); this . attach (); if ( this . options
. initialStep
!= null ){ this . set ( this . options
. initialStep
);
46 }}, attach : function (){ this . element
. addEvent ( "mousedown" , this . clickedElement
); if ( this . options
. wheel
){ this . element
. addEvent ( "mousewheel" , this . scrolledElement
);
47 } this . drag
. attach (); return this ;}, detach : function (){ this . element
. removeEvent ( "mousedown" , this . clickedElement
); this . element
. removeEvent ( "mousewheel" , this . scrolledElement
);
48 this . drag
. detach (); return this ;}, set : function ( a
){ if (!(( this . range
> 0 )^( a
< this . min
))){ a
= this . min
;} if (!(( this . range
> 0 )^( a
> this . max
))){ a
= this . max
;} this . step
= Math
. round ( a
);
49 this . checkStep (); this . fireEvent ( "tick" , this . toPosition ( this . step
)); this . end (); return this ;}, setRange : function ( a
, b
){ this . min
=$ pick ( a
[ 0 ], 0 ); this . max
=$ pick ( a
[ 1 ], this . options
. steps
);
50 this . range
= this . max
- this . min
; this . steps
= this . options
. steps
|| this . full
; this . stepSize
= Math
. abs ( this . range
) /this.steps;this.stepWidth=this.stepSize*this.full/ Math
. abs ( this . range
);
51 this . set ($ pick ( b
, this . step
). floor ( this . min
). max ( this . max
)); return this ;}, clickedElement : function ( c
){ if ( this . isDragging
|| c
. target
== this . knob
){ return ;} var b
= this . range
< 0 ?- 1 : 1 ;
52 var a
= c
. page
[ this . axis
]- this . element
. getPosition ()[ this . axis
]- this . half
; a
= a
. limit (- this . options
. offset
, this . full
- this . options
. offset
); this . step
= Math
. round ( this . min
+ b
* this . toStep ( a
));
53 this . checkStep (); this . fireEvent ( "tick" , a
); this . end ();}, scrolledElement : function ( a
){ var b
=( this . options
. mode
== "horizontal" )?( a
. wheel
< 0 ):( a
. wheel
> 0 ); this . set ( b
? this . step
- this . stepSize : this . step
+ this . stepSize
);
54 a
. stop ();}, draggedKnob : function (){ var b
= this . range
< 0 ?- 1 : 1 ; var a
= this . drag
. value
. now
[ this . axis
]; a
= a
. limit (- this . options
. offset
, this . full
- this . options
. offset
);
55 this . step
= Math
. round ( this . min
+ b
* this . toStep ( a
)); this . checkStep ();}, checkStep : function (){ if ( this . previousChange
!= this . step
){ this . previousChange
= this . step
;
56 this . fireEvent ( "change" , this . step
);}}, end : function (){ if ( this . previousEnd
!== this . step
){ this . previousEnd
= this . step
; this . fireEvent ( "complete" , this . step
+ "" );
57 }}, toStep : function ( a
){ var b
=( a
+ this . options
. offset
)* this . stepSize
/ this . full
* this . steps
; return this . options
. steps
? Math
. round ( b
-= b
% this . stepSize
): b
;}, toPosition : function ( a
){ return ( this . full
* Math
. abs ( this . min
- a
))/( this . steps
* this . stepSize
)- this . options
. offset
;
58 }}); var Color
= new Native ({ initialize : function ( b
, c
){ if ( arguments
. length
>= 3 ){ c
= "rgb" ; b
= Array
. slice ( arguments
, 0 , 3 );} else { if ( typeof b
== "string" ){ if ( b
. match ( /rgb/ )){ b
= b
. rgbToHex (). hexToRgb ( true );
59 } else { if ( b
. match ( /hsb/ )){ b
= b
. hsbToRgb ();} else { b
= b
. hexToRgb ( true );}}}} c
= c
|| "rgb" ; switch ( c
){ case "hsb" : var a
= b
; b
= b
. hsbToRgb (); b
. hsb
= a
; break ; case "hex" : b
= b
. hexToRgb ( true );
60 break ;} b
. rgb
= b
. slice ( 0 , 3 ); b
. hsb
= b
. hsb
|| b
. rgbToHsb (); b
. hex
= b
. rgbToHex (); return $ extend ( b
, this );}}); Color
. implement ({ mix : function (){ var a
= Array
. slice ( arguments
);
61 var c
=($ type ( a
. getLast ())== "number" )? a
. pop (): 50 ; var b
= this . slice (); a
. each ( function ( d
){ d
= new Color ( d
); for ( var e
= 0 ; e
< 3 ; e
++){ b
[ e
]= Math
. round (( b
[ e
] /100*(100-c))+(d[e]/ 100 * c
));
62 }}); return new Color ( b
, "rgb" );}, invert : function (){ return new Color ( this . map ( function ( a
){ return 255 - a
;}));}, setHue : function ( a
){ return new Color ([ a
, this . hsb
[ 1 ], this . hsb
[ 2 ]], "hsb" );
63 }, setSaturation : function ( a
){ return new Color ([ this . hsb
[ 0 ], a
, this . hsb
[ 2 ]], "hsb" );}, setBrightness : function ( a
){ return new Color ([ this . hsb
[ 0 ], this . hsb
[ 1 ], a
], "hsb" );
64 }}); var $ RGB = function ( d
, c
, a
){ return new Color ([ d
, c
, a
], "rgb" );}; var $ HSB = function ( d
, c
, a
){ return new Color ([ d
, c
, a
], "hsb" );}; var $ HEX = function ( a
){ return new Color ( a
, "hex" );
65 }; Array
. implement ({ rgbToHsb : function (){ var b
= this [ 0 ], c
= this [ 1 ], j
= this [ 2 ], g
= 0 ; var i
= Math
. max ( b
, c
, j
), e
= Math
. min ( b
, c
, j
); var k
= i
- e
; var h
= i
/255,f=(i!=0)?k/i : 0 ;
66 if ( f
!= 0 ){ var d
=( i
- b
)/ k
; var a
=( i
- c
)/ k
; var l
=( i
- j
) /k;if(b==i){g=l-a;}else{if(c==i){g=2+d-l;}else{g=4+a-d;}}g/ = 6 ; if ( g
< 0 ){ g
++;}} return [ Math
. round ( g
* 360 ), Math
. round ( f
* 100 ), Math
. round ( h
* 100 )];
67 }, hsbToRgb : function (){ var c
= Math
. round ( this [ 2 ]/ 100 * 255 ); if ( this [ 1 ]== 0 ){ return [ c
, c
, c
];} else { var a
= this [ 0 ]% 360 ; var e
= a
% 60 ; var g
= Math
. round (( this [ 2 ]*( 100 - this [ 1 ]))/ 10000 * 255 );
68 var d
= Math
. round (( this [ 2 ]*( 6000 - this [ 1 ]* e
))/ 600000 * 255 ); var b
= Math
. round (( this [ 2 ]*( 6000 - this [ 1 ]*( 60 - e
))) /600000*255);switch(Math.floor(a/ 60 )){ case 0 : return [ c
, b
, g
];
69 case 1 : return [ d
, c
, g
]; case 2 : return [ g
, c
, b
]; case 3 : return [ g
, d
, c
]; case 4 : return [ b
, g
, c
]; case 5 : return [ c
, g
, d
];}} return false ;}}); String
. implement ({ rgbToHsb : function (){ var a
= this . match ( /\d{1,3}/g );
70 return ( a
)? a
. rgbToHsb (): null ;}, hsbToRgb : function (){ var a
= this . match ( /\d{1,3}/g ); return ( a
)? a
. hsbToRgb (): null ;}}); Hash
. Cookie
= new Class ({ Extends : Cookie
, options :{ autoSave : true }, initialize : function ( b
, a
){ this . parent ( b
, a
);
71 this . load ();}, save : function (){ var a
= JSON
. encode ( this . hash
); if (! a
|| a
. length
> 4096 ){ return false ;} if ( a
== "{}" ){ this . dispose ();} else { this . write ( a
);} return true ;
72 }, load : function (){ this . hash
= new Hash ( JSON
. decode ( this . read (), true )); return this ;}}); Hash
. each ( Hash
. prototype , function ( b
, a
){ if ( typeof b
== "function" ){ Hash
. Cookie
. implement ( a
, function (){ var c
= b
. apply ( this . hash
, arguments
);
73 if ( this . options
. autoSave
){ this . save ();} return c
;});}});