annotate jquery-ui.js @ 0:c73753f1606f draft

Uploaded
author saskia-hiltemann
date Mon, 06 Oct 2014 08:13:54 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1 /*! jQuery UI - v1.10.4 - 2014-01-17
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2 * http://jqueryui.com
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3 * Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.slider.js, jquery.ui.sortable.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4 * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8 var uuid = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9 runiqueId = /^ui-id-\d+$/;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11 // $.ui might exist from components with no dependencies, e.g., $.ui.position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12 $.ui = $.ui || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14 $.extend( $.ui, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
16
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
17 keyCode: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
18 BACKSPACE: 8,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
19 COMMA: 188,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
20 DELETE: 46,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
21 DOWN: 40,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
22 END: 35,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
23 ENTER: 13,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
24 ESCAPE: 27,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
25 HOME: 36,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
26 LEFT: 37,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
27 NUMPAD_ADD: 107,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
28 NUMPAD_DECIMAL: 110,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
29 NUMPAD_DIVIDE: 111,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
30 NUMPAD_ENTER: 108,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
31 NUMPAD_MULTIPLY: 106,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
32 NUMPAD_SUBTRACT: 109,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
33 PAGE_DOWN: 34,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
34 PAGE_UP: 33,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
35 PERIOD: 190,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
36 RIGHT: 39,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
37 SPACE: 32,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
38 TAB: 9,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
39 UP: 38
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
40 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
41 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
42
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
43 // plugins
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
44 $.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
45 focus: (function( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
46 return function( delay, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
47 return typeof delay === "number" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
48 this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
49 var elem = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
50 setTimeout(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
51 $( elem ).focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
52 if ( fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
53 fn.call( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
54 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
55 }, delay );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
56 }) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
57 orig.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
58 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
59 })( $.fn.focus ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
60
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
61 scrollParent: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
62 var scrollParent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
63 if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
64 scrollParent = this.parents().filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
65 return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
66 }).eq(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
67 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
68 scrollParent = this.parents().filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
69 return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
70 }).eq(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
71 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
72
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
73 return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
74 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
75
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
76 zIndex: function( zIndex ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
77 if ( zIndex !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
78 return this.css( "zIndex", zIndex );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
79 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
80
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
81 if ( this.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
82 var elem = $( this[ 0 ] ), position, value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
83 while ( elem.length && elem[ 0 ] !== document ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
84 // Ignore z-index if position is set to a value where z-index is ignored by the browser
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
85 // This makes behavior of this function consistent across browsers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
86 // WebKit always returns auto if the element is positioned
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
87 position = elem.css( "position" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
88 if ( position === "absolute" || position === "relative" || position === "fixed" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
89 // IE returns 0 when zIndex is not specified
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
90 // other browsers return a string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
91 // we ignore the case of nested elements with an explicit value of 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
92 // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
93 value = parseInt( elem.css( "zIndex" ), 10 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
94 if ( !isNaN( value ) && value !== 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
95 return value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
96 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
97 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
98 elem = elem.parent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
99 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
100 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
101
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
102 return 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
103 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
104
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
105 uniqueId: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
106 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
107 if ( !this.id ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
108 this.id = "ui-id-" + (++uuid);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
109 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
110 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
111 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
112
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
113 removeUniqueId: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
114 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
115 if ( runiqueId.test( this.id ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
116 $( this ).removeAttr( "id" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
117 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
118 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
119 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
120 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
121
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
122 // selectors
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
123 function focusable( element, isTabIndexNotNaN ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
124 var map, mapName, img,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
125 nodeName = element.nodeName.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
126 if ( "area" === nodeName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
127 map = element.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
128 mapName = map.name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
129 if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
130 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
131 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
132 img = $( "img[usemap=#" + mapName + "]" )[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
133 return !!img && visible( img );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
134 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
135 return ( /input|select|textarea|button|object/.test( nodeName ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
136 !element.disabled :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
137 "a" === nodeName ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
138 element.href || isTabIndexNotNaN :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
139 isTabIndexNotNaN) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
140 // the element and all of its ancestors must be visible
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
141 visible( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
142 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
143
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
144 function visible( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
145 return $.expr.filters.visible( element ) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
146 !$( element ).parents().addBack().filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
147 return $.css( this, "visibility" ) === "hidden";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
148 }).length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
149 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
151 $.extend( $.expr[ ":" ], {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
152 data: $.expr.createPseudo ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
153 $.expr.createPseudo(function( dataName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
154 return function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
155 return !!$.data( elem, dataName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
156 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
157 }) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
158 // support: jQuery <1.8
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
159 function( elem, i, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
160 return !!$.data( elem, match[ 3 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
161 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
162
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
163 focusable: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
164 return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
165 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
166
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
167 tabbable: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
168 var tabIndex = $.attr( element, "tabindex" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
169 isTabIndexNaN = isNaN( tabIndex );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
170 return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
171 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
172 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
173
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
174 // support: jQuery <1.8
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
175 if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
176 $.each( [ "Width", "Height" ], function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
177 var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
178 type = name.toLowerCase(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
179 orig = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
180 innerWidth: $.fn.innerWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
181 innerHeight: $.fn.innerHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
182 outerWidth: $.fn.outerWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
183 outerHeight: $.fn.outerHeight
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
184 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
185
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
186 function reduce( elem, size, border, margin ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
187 $.each( side, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
188 size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
189 if ( border ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
190 size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
191 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
192 if ( margin ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
193 size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
194 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
195 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
196 return size;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
197 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
199 $.fn[ "inner" + name ] = function( size ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
200 if ( size === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
201 return orig[ "inner" + name ].call( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
202 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
203
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
204 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
205 $( this ).css( type, reduce( this, size ) + "px" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
206 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
207 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
208
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
209 $.fn[ "outer" + name] = function( size, margin ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
210 if ( typeof size !== "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
211 return orig[ "outer" + name ].call( this, size );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
212 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
213
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
214 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
215 $( this).css( type, reduce( this, size, true, margin ) + "px" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
216 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
217 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
218 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
219 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
220
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
221 // support: jQuery <1.8
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
222 if ( !$.fn.addBack ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
223 $.fn.addBack = function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
224 return this.add( selector == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
225 this.prevObject : this.prevObject.filter( selector )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
226 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
227 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
228 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
229
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
230 // support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
231 if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
232 $.fn.removeData = (function( removeData ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
233 return function( key ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
234 if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
235 return removeData.call( this, $.camelCase( key ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
236 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
237 return removeData.call( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
238 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
239 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
240 })( $.fn.removeData );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
241 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
242
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
243
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
244
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
245
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
246
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
247 // deprecated
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
248 $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
249
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
250 $.support.selectstart = "onselectstart" in document.createElement( "div" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
251 $.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
252 disableSelection: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
253 return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
254 ".ui-disableSelection", function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
255 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
256 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
257 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
258
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
259 enableSelection: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
260 return this.unbind( ".ui-disableSelection" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
261 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
262 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
263
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
264 $.extend( $.ui, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
265 // $.ui.plugin is deprecated. Use $.widget() extensions instead.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
266 plugin: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
267 add: function( module, option, set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
268 var i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
269 proto = $.ui[ module ].prototype;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
270 for ( i in set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
271 proto.plugins[ i ] = proto.plugins[ i ] || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
272 proto.plugins[ i ].push( [ option, set[ i ] ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
273 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
274 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
275 call: function( instance, name, args ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
276 var i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
277 set = instance.plugins[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
278 if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
279 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
280 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
281
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
282 for ( i = 0; i < set.length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
283 if ( instance.options[ set[ i ][ 0 ] ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
284 set[ i ][ 1 ].apply( instance.element, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
285 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
286 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
287 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
288 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
289
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
290 // only used by resizable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
291 hasScroll: function( el, a ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
292
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
293 //If overflow is hidden, the element might have extra content, but the user wants to hide it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
294 if ( $( el ).css( "overflow" ) === "hidden") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
295 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
296 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
297
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
298 var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
299 has = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
300
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
301 if ( el[ scroll ] > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
302 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
303 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
304
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
305 // TODO: determine which cases actually cause this to happen
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
306 // if the element doesn't have the scroll set, see if it's possible to
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
307 // set the scroll
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
308 el[ scroll ] = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
309 has = ( el[ scroll ] > 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
310 el[ scroll ] = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
311 return has;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
312 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
313 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
314
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
315 })( jQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
316 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
317
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
318 var uuid = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
319 slice = Array.prototype.slice,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
320 _cleanData = $.cleanData;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
321 $.cleanData = function( elems ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
322 for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
323 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
324 $( elem ).triggerHandler( "remove" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
325 // http://bugs.jquery.com/ticket/8235
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
326 } catch( e ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
327 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
328 _cleanData( elems );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
329 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
330
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
331 $.widget = function( name, base, prototype ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
332 var fullName, existingConstructor, constructor, basePrototype,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
333 // proxiedPrototype allows the provided prototype to remain unmodified
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
334 // so that it can be used as a mixin for multiple widgets (#8876)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
335 proxiedPrototype = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
336 namespace = name.split( "." )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
337
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
338 name = name.split( "." )[ 1 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
339 fullName = namespace + "-" + name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
341 if ( !prototype ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
342 prototype = base;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
343 base = $.Widget;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
344 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
345
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
346 // create selector for plugin
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
347 $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
348 return !!$.data( elem, fullName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
349 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
350
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
351 $[ namespace ] = $[ namespace ] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
352 existingConstructor = $[ namespace ][ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
353 constructor = $[ namespace ][ name ] = function( options, element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
354 // allow instantiation without "new" keyword
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
355 if ( !this._createWidget ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
356 return new constructor( options, element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
357 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
358
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
359 // allow instantiation without initializing for simple inheritance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
360 // must use "new" keyword (the code above always passes args)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
361 if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
362 this._createWidget( options, element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
363 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
364 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
365 // extend with the existing constructor to carry over any static properties
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
366 $.extend( constructor, existingConstructor, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
367 version: prototype.version,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
368 // copy the object used to create the prototype in case we need to
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
369 // redefine the widget later
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
370 _proto: $.extend( {}, prototype ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
371 // track widgets that inherit from this widget in case this widget is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
372 // redefined after a widget inherits from it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
373 _childConstructors: []
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
374 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
375
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
376 basePrototype = new base();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
377 // we need to make the options hash a property directly on the new instance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
378 // otherwise we'll modify the options hash on the prototype that we're
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
379 // inheriting from
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
380 basePrototype.options = $.widget.extend( {}, basePrototype.options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
381 $.each( prototype, function( prop, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
382 if ( !$.isFunction( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
383 proxiedPrototype[ prop ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
384 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
385 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
386 proxiedPrototype[ prop ] = (function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
387 var _super = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
388 return base.prototype[ prop ].apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
389 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
390 _superApply = function( args ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
391 return base.prototype[ prop ].apply( this, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
392 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
393 return function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
394 var __super = this._super,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
395 __superApply = this._superApply,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
396 returnValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
397
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
398 this._super = _super;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
399 this._superApply = _superApply;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
400
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
401 returnValue = value.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
402
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
403 this._super = __super;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
404 this._superApply = __superApply;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
405
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
406 return returnValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
407 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
408 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
409 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
410 constructor.prototype = $.widget.extend( basePrototype, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
411 // TODO: remove support for widgetEventPrefix
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
412 // always use the name + a colon as the prefix, e.g., draggable:start
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
413 // don't prefix for widgets that aren't DOM-based
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
414 widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
415 }, proxiedPrototype, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
416 constructor: constructor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
417 namespace: namespace,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
418 widgetName: name,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
419 widgetFullName: fullName
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
420 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
421
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
422 // If this widget is being redefined then we need to find all widgets that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
423 // are inheriting from it and redefine all of them so that they inherit from
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
424 // the new version of this widget. We're essentially trying to replace one
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
425 // level in the prototype chain.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
426 if ( existingConstructor ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
427 $.each( existingConstructor._childConstructors, function( i, child ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
428 var childPrototype = child.prototype;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
429
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
430 // redefine the child widget using the same prototype that was
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
431 // originally used, but inherit from the new version of the base
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
432 $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
433 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
434 // remove the list of existing child constructors from the old constructor
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
435 // so the old child constructors can be garbage collected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
436 delete existingConstructor._childConstructors;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
437 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
438 base._childConstructors.push( constructor );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
439 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
440
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
441 $.widget.bridge( name, constructor );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
442 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
443
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
444 $.widget.extend = function( target ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
445 var input = slice.call( arguments, 1 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
446 inputIndex = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
447 inputLength = input.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
448 key,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
449 value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
450 for ( ; inputIndex < inputLength; inputIndex++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
451 for ( key in input[ inputIndex ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
452 value = input[ inputIndex ][ key ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
453 if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
454 // Clone objects
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
455 if ( $.isPlainObject( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
456 target[ key ] = $.isPlainObject( target[ key ] ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
457 $.widget.extend( {}, target[ key ], value ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
458 // Don't extend strings, arrays, etc. with objects
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
459 $.widget.extend( {}, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
460 // Copy everything else by reference
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
461 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
462 target[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
463 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
464 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
465 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
466 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
467 return target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
468 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
469
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
470 $.widget.bridge = function( name, object ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
471 var fullName = object.prototype.widgetFullName || name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
472 $.fn[ name ] = function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
473 var isMethodCall = typeof options === "string",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
474 args = slice.call( arguments, 1 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
475 returnValue = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
476
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
477 // allow multiple hashes to be passed on init
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
478 options = !isMethodCall && args.length ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
479 $.widget.extend.apply( null, [ options ].concat(args) ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
480 options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
481
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
482 if ( isMethodCall ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
483 this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
484 var methodValue,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
485 instance = $.data( this, fullName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
486 if ( !instance ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
487 return $.error( "cannot call methods on " + name + " prior to initialization; " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
488 "attempted to call method '" + options + "'" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
489 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
490 if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
491 return $.error( "no such method '" + options + "' for " + name + " widget instance" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
492 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
493 methodValue = instance[ options ].apply( instance, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
494 if ( methodValue !== instance && methodValue !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
495 returnValue = methodValue && methodValue.jquery ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
496 returnValue.pushStack( methodValue.get() ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
497 methodValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
498 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
499 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
500 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
501 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
502 this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
503 var instance = $.data( this, fullName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
504 if ( instance ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
505 instance.option( options || {} )._init();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
506 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
507 $.data( this, fullName, new object( options, this ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
508 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
509 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
510 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
511
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
512 return returnValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
513 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
514 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
515
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
516 $.Widget = function( /* options, element */ ) {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
517 $.Widget._childConstructors = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
518
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
519 $.Widget.prototype = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
520 widgetName: "widget",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
521 widgetEventPrefix: "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
522 defaultElement: "<div>",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
523 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
524 disabled: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
525
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
526 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
527 create: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
528 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
529 _createWidget: function( options, element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
530 element = $( element || this.defaultElement || this )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
531 this.element = $( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
532 this.uuid = uuid++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
533 this.eventNamespace = "." + this.widgetName + this.uuid;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
534 this.options = $.widget.extend( {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
535 this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
536 this._getCreateOptions(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
537 options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
538
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
539 this.bindings = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
540 this.hoverable = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
541 this.focusable = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
542
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
543 if ( element !== this ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
544 $.data( element, this.widgetFullName, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
545 this._on( true, this.element, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
546 remove: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
547 if ( event.target === element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
548 this.destroy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
549 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
550 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
551 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
552 this.document = $( element.style ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
553 // element within the document
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
554 element.ownerDocument :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
555 // element is window or document
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
556 element.document || element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
557 this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
558 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
559
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
560 this._create();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
561 this._trigger( "create", null, this._getCreateEventData() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
562 this._init();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
563 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
564 _getCreateOptions: $.noop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
565 _getCreateEventData: $.noop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
566 _create: $.noop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
567 _init: $.noop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
568
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
569 destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
570 this._destroy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
571 // we can probably remove the unbind calls in 2.0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
572 // all event bindings should go through this._on()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
573 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
574 .unbind( this.eventNamespace )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
575 // 1.9 BC for #7810
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
576 // TODO remove dual storage
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
577 .removeData( this.widgetName )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
578 .removeData( this.widgetFullName )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
579 // support: jquery <1.6.3
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
580 // http://bugs.jquery.com/ticket/9413
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
581 .removeData( $.camelCase( this.widgetFullName ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
582 this.widget()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
583 .unbind( this.eventNamespace )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
584 .removeAttr( "aria-disabled" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
585 .removeClass(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
586 this.widgetFullName + "-disabled " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
587 "ui-state-disabled" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
589 // clean up events and states
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
590 this.bindings.unbind( this.eventNamespace );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
591 this.hoverable.removeClass( "ui-state-hover" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
592 this.focusable.removeClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
593 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
594 _destroy: $.noop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
596 widget: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
597 return this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
598 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
600 option: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
601 var options = key,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
602 parts,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
603 curOption,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
604 i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
605
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
606 if ( arguments.length === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
607 // don't return a reference to the internal hash
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
608 return $.widget.extend( {}, this.options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
609 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
610
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
611 if ( typeof key === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
612 // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
613 options = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
614 parts = key.split( "." );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
615 key = parts.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
616 if ( parts.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
617 curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
618 for ( i = 0; i < parts.length - 1; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
619 curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
620 curOption = curOption[ parts[ i ] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
621 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
622 key = parts.pop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
623 if ( arguments.length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
624 return curOption[ key ] === undefined ? null : curOption[ key ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
625 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
626 curOption[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
627 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
628 if ( arguments.length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
629 return this.options[ key ] === undefined ? null : this.options[ key ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
630 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
631 options[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
632 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
633 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
634
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
635 this._setOptions( options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
636
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
637 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
638 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
639 _setOptions: function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
640 var key;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
641
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
642 for ( key in options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
643 this._setOption( key, options[ key ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
644 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
645
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
646 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
647 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
648 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
649 this.options[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
650
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
651 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
652 this.widget()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
653 .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
654 .attr( "aria-disabled", value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
655 this.hoverable.removeClass( "ui-state-hover" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
656 this.focusable.removeClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
657 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
658
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
659 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
660 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
661
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
662 enable: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
663 return this._setOption( "disabled", false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
664 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
665 disable: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
666 return this._setOption( "disabled", true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
667 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
668
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
669 _on: function( suppressDisabledCheck, element, handlers ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
670 var delegateElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
671 instance = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
672
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
673 // no suppressDisabledCheck flag, shuffle arguments
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
674 if ( typeof suppressDisabledCheck !== "boolean" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
675 handlers = element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
676 element = suppressDisabledCheck;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
677 suppressDisabledCheck = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
678 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
679
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
680 // no element argument, shuffle and use this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
681 if ( !handlers ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
682 handlers = element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
683 element = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
684 delegateElement = this.widget();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
685 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
686 // accept selectors, DOM elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
687 element = delegateElement = $( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
688 this.bindings = this.bindings.add( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
689 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
690
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
691 $.each( handlers, function( event, handler ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
692 function handlerProxy() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
693 // allow widgets to customize the disabled handling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
694 // - disabled as an array instead of boolean
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
695 // - disabled class as method for disabling individual parts
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
696 if ( !suppressDisabledCheck &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
697 ( instance.options.disabled === true ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
698 $( this ).hasClass( "ui-state-disabled" ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
699 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
700 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
701 return ( typeof handler === "string" ? instance[ handler ] : handler )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
702 .apply( instance, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
703 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
705 // copy the guid so direct unbinding works
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
706 if ( typeof handler !== "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
707 handlerProxy.guid = handler.guid =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
708 handler.guid || handlerProxy.guid || $.guid++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
709 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
710
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
711 var match = event.match( /^(\w+)\s*(.*)$/ ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
712 eventName = match[1] + instance.eventNamespace,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
713 selector = match[2];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
714 if ( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
715 delegateElement.delegate( selector, eventName, handlerProxy );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
716 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
717 element.bind( eventName, handlerProxy );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
718 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
719 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
720 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
721
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
722 _off: function( element, eventName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
723 eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
724 element.unbind( eventName ).undelegate( eventName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
725 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
726
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
727 _delay: function( handler, delay ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
728 function handlerProxy() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
729 return ( typeof handler === "string" ? instance[ handler ] : handler )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
730 .apply( instance, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
731 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
732 var instance = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
733 return setTimeout( handlerProxy, delay || 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
734 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
735
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
736 _hoverable: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
737 this.hoverable = this.hoverable.add( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
738 this._on( element, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
739 mouseenter: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
740 $( event.currentTarget ).addClass( "ui-state-hover" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
741 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
742 mouseleave: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
743 $( event.currentTarget ).removeClass( "ui-state-hover" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
744 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
745 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
746 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
747
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
748 _focusable: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
749 this.focusable = this.focusable.add( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
750 this._on( element, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
751 focusin: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
752 $( event.currentTarget ).addClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
753 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
754 focusout: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
755 $( event.currentTarget ).removeClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
756 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
757 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
758 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
759
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
760 _trigger: function( type, event, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
761 var prop, orig,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
762 callback = this.options[ type ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
763
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
764 data = data || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
765 event = $.Event( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
766 event.type = ( type === this.widgetEventPrefix ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
767 type :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
768 this.widgetEventPrefix + type ).toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
769 // the original event may come from any element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
770 // so we need to reset the target on the new event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
771 event.target = this.element[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
772
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
773 // copy original event properties over to the new event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
774 orig = event.originalEvent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
775 if ( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
776 for ( prop in orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
777 if ( !( prop in event ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
778 event[ prop ] = orig[ prop ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
779 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
780 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
781 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
782
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
783 this.element.trigger( event, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
784 return !( $.isFunction( callback ) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
785 callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
786 event.isDefaultPrevented() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
787 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
788 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
789
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
790 $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
791 $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
792 if ( typeof options === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
793 options = { effect: options };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
794 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
795 var hasOptions,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
796 effectName = !options ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
797 method :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
798 options === true || typeof options === "number" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
799 defaultEffect :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
800 options.effect || defaultEffect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
801 options = options || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
802 if ( typeof options === "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
803 options = { duration: options };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
804 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
805 hasOptions = !$.isEmptyObject( options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
806 options.complete = callback;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
807 if ( options.delay ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
808 element.delay( options.delay );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
809 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
810 if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
811 element[ method ]( options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
812 } else if ( effectName !== method && element[ effectName ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
813 element[ effectName ]( options.duration, options.easing, callback );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
814 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
815 element.queue(function( next ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
816 $( this )[ method ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
817 if ( callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
818 callback.call( element[ 0 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
819 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
820 next();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
821 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
822 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
823 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
824 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
825
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
826 })( jQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
827 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
828
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
829 var mouseHandled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
830 $( document ).mouseup( function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
831 mouseHandled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
832 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
833
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
834 $.widget("ui.mouse", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
835 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
836 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
837 cancel: "input,textarea,button,select,option",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
838 distance: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
839 delay: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
840 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
841 _mouseInit: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
842 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
843
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
844 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
845 .bind("mousedown."+this.widgetName, function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
846 return that._mouseDown(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
847 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
848 .bind("click."+this.widgetName, function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
849 if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
850 $.removeData(event.target, that.widgetName + ".preventClickEvent");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
851 event.stopImmediatePropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
852 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
853 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
854 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
855
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
856 this.started = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
857 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
858
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
859 // TODO: make sure destroying one instance of mouse doesn't mess with
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
860 // other instances of mouse
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
861 _mouseDestroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
862 this.element.unbind("."+this.widgetName);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
863 if ( this._mouseMoveDelegate ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
864 $(document)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
865 .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
866 .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
867 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
868 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
869
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
870 _mouseDown: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
871 // don't let more than one widget handle mouseStart
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
872 if( mouseHandled ) { return; }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
873
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
874 // we may have missed mouseup (out of window)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
875 (this._mouseStarted && this._mouseUp(event));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
877 this._mouseDownEvent = event;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
878
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
879 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
880 btnIsLeft = (event.which === 1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
881 // event.target.nodeName works around a bug in IE 8 with
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
882 // disabled inputs (#7620)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
883 elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
884 if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
885 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
886 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
887
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
888 this.mouseDelayMet = !this.options.delay;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
889 if (!this.mouseDelayMet) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
890 this._mouseDelayTimer = setTimeout(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
891 that.mouseDelayMet = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
892 }, this.options.delay);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
893 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
894
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
895 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
896 this._mouseStarted = (this._mouseStart(event) !== false);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
897 if (!this._mouseStarted) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
898 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
899 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
900 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
901 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
902
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
903 // Click event may never have fired (Gecko & Opera)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
904 if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
905 $.removeData(event.target, this.widgetName + ".preventClickEvent");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
906 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
907
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
908 // these delegates are required to keep context
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
909 this._mouseMoveDelegate = function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
910 return that._mouseMove(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
911 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
912 this._mouseUpDelegate = function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
913 return that._mouseUp(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
914 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
915 $(document)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
916 .bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
917 .bind("mouseup."+this.widgetName, this._mouseUpDelegate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
918
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
919 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
920
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
921 mouseHandled = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
922 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
923 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
924
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
925 _mouseMove: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
926 // IE mouseup check - mouseup happened when mouse was out of window
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
927 if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
928 return this._mouseUp(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
929 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
930
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
931 if (this._mouseStarted) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
932 this._mouseDrag(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
933 return event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
934 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
935
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
936 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
937 this._mouseStarted =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
938 (this._mouseStart(this._mouseDownEvent, event) !== false);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
939 (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
940 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
941
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
942 return !this._mouseStarted;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
943 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
944
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
945 _mouseUp: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
946 $(document)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
947 .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
948 .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
949
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
950 if (this._mouseStarted) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
951 this._mouseStarted = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
952
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
953 if (event.target === this._mouseDownEvent.target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
954 $.data(event.target, this.widgetName + ".preventClickEvent", true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
955 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
957 this._mouseStop(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
958 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
959
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
960 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
961 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
962
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
963 _mouseDistanceMet: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
964 return (Math.max(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
965 Math.abs(this._mouseDownEvent.pageX - event.pageX),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
966 Math.abs(this._mouseDownEvent.pageY - event.pageY)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
967 ) >= this.options.distance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
968 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
969 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
970
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
971 _mouseDelayMet: function(/* event */) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
972 return this.mouseDelayMet;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
973 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
974
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
975 // These are placeholder methods, to be overriden by extending plugin
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
976 _mouseStart: function(/* event */) {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
977 _mouseDrag: function(/* event */) {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
978 _mouseStop: function(/* event */) {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
979 _mouseCapture: function(/* event */) { return true; }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
980 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
981
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
982 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
983 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
984
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
985 $.ui = $.ui || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
986
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
987 var cachedScrollbarWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
988 max = Math.max,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
989 abs = Math.abs,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
990 round = Math.round,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
991 rhorizontal = /left|center|right/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
992 rvertical = /top|center|bottom/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
993 roffset = /[\+\-]\d+(\.[\d]+)?%?/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
994 rposition = /^\w+/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
995 rpercent = /%$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
996 _position = $.fn.position;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
997
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
998 function getOffsets( offsets, width, height ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
999 return [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1000 parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1001 parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1002 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1003 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1004
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1005 function parseCss( element, property ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1006 return parseInt( $.css( element, property ), 10 ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1007 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1008
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1009 function getDimensions( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1010 var raw = elem[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1011 if ( raw.nodeType === 9 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1012 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1013 width: elem.width(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1014 height: elem.height(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1015 offset: { top: 0, left: 0 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1016 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1017 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1018 if ( $.isWindow( raw ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1019 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1020 width: elem.width(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1021 height: elem.height(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1022 offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1023 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1024 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1025 if ( raw.preventDefault ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1026 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1027 width: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1028 height: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1029 offset: { top: raw.pageY, left: raw.pageX }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1030 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1031 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1032 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1033 width: elem.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1034 height: elem.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1035 offset: elem.offset()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1036 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1037 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1038
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1039 $.position = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1040 scrollbarWidth: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1041 if ( cachedScrollbarWidth !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1042 return cachedScrollbarWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1043 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1044 var w1, w2,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1045 div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1046 innerDiv = div.children()[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1048 $( "body" ).append( div );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1049 w1 = innerDiv.offsetWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1050 div.css( "overflow", "scroll" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1051
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1052 w2 = innerDiv.offsetWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1053
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1054 if ( w1 === w2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1055 w2 = div[0].clientWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1056 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1057
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1058 div.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1059
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1060 return (cachedScrollbarWidth = w1 - w2);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1061 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1062 getScrollInfo: function( within ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1063 var overflowX = within.isWindow || within.isDocument ? "" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1064 within.element.css( "overflow-x" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1065 overflowY = within.isWindow || within.isDocument ? "" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1066 within.element.css( "overflow-y" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1067 hasOverflowX = overflowX === "scroll" ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1068 ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1069 hasOverflowY = overflowY === "scroll" ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1070 ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1071 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1072 width: hasOverflowY ? $.position.scrollbarWidth() : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1073 height: hasOverflowX ? $.position.scrollbarWidth() : 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1074 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1075 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1076 getWithinInfo: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1077 var withinElement = $( element || window ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1078 isWindow = $.isWindow( withinElement[0] ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1079 isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1080 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1081 element: withinElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1082 isWindow: isWindow,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1083 isDocument: isDocument,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1084 offset: withinElement.offset() || { left: 0, top: 0 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1085 scrollLeft: withinElement.scrollLeft(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1086 scrollTop: withinElement.scrollTop(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1087 width: isWindow ? withinElement.width() : withinElement.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1088 height: isWindow ? withinElement.height() : withinElement.outerHeight()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1089 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1090 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1091 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1092
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1093 $.fn.position = function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1094 if ( !options || !options.of ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1095 return _position.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1096 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1097
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1098 // make a copy, we don't want to modify arguments
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1099 options = $.extend( {}, options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1100
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1101 var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1102 target = $( options.of ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1103 within = $.position.getWithinInfo( options.within ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1104 scrollInfo = $.position.getScrollInfo( within ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1105 collision = ( options.collision || "flip" ).split( " " ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1106 offsets = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1107
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1108 dimensions = getDimensions( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1109 if ( target[0].preventDefault ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1110 // force left top to allow flipping
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1111 options.at = "left top";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1112 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1113 targetWidth = dimensions.width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1114 targetHeight = dimensions.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1115 targetOffset = dimensions.offset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1116 // clone to reuse original targetOffset later
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1117 basePosition = $.extend( {}, targetOffset );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1118
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1119 // force my and at to have valid horizontal and vertical positions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1120 // if a value is missing or invalid, it will be converted to center
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1121 $.each( [ "my", "at" ], function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1122 var pos = ( options[ this ] || "" ).split( " " ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1123 horizontalOffset,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1124 verticalOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1125
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1126 if ( pos.length === 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1127 pos = rhorizontal.test( pos[ 0 ] ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1128 pos.concat( [ "center" ] ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1129 rvertical.test( pos[ 0 ] ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1130 [ "center" ].concat( pos ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1131 [ "center", "center" ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1132 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1133 pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1134 pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1135
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1136 // calculate offsets
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1137 horizontalOffset = roffset.exec( pos[ 0 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1138 verticalOffset = roffset.exec( pos[ 1 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1139 offsets[ this ] = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1140 horizontalOffset ? horizontalOffset[ 0 ] : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1141 verticalOffset ? verticalOffset[ 0 ] : 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1142 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1143
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1144 // reduce to just the positions without the offsets
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1145 options[ this ] = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1146 rposition.exec( pos[ 0 ] )[ 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1147 rposition.exec( pos[ 1 ] )[ 0 ]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1148 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1149 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1151 // normalize collision option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1152 if ( collision.length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1153 collision[ 1 ] = collision[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1154 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1155
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1156 if ( options.at[ 0 ] === "right" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1157 basePosition.left += targetWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1158 } else if ( options.at[ 0 ] === "center" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1159 basePosition.left += targetWidth / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1160 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1161
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1162 if ( options.at[ 1 ] === "bottom" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1163 basePosition.top += targetHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1164 } else if ( options.at[ 1 ] === "center" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1165 basePosition.top += targetHeight / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1166 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1167
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1168 atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1169 basePosition.left += atOffset[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1170 basePosition.top += atOffset[ 1 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1171
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1172 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1173 var collisionPosition, using,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1174 elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1175 elemWidth = elem.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1176 elemHeight = elem.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1177 marginLeft = parseCss( this, "marginLeft" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1178 marginTop = parseCss( this, "marginTop" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1179 collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1180 collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1181 position = $.extend( {}, basePosition ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1182 myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1183
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1184 if ( options.my[ 0 ] === "right" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1185 position.left -= elemWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1186 } else if ( options.my[ 0 ] === "center" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1187 position.left -= elemWidth / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1188 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1189
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1190 if ( options.my[ 1 ] === "bottom" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1191 position.top -= elemHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1192 } else if ( options.my[ 1 ] === "center" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1193 position.top -= elemHeight / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1194 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1195
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1196 position.left += myOffset[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1197 position.top += myOffset[ 1 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1199 // if the browser doesn't support fractions, then round for consistent results
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1200 if ( !$.support.offsetFractions ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1201 position.left = round( position.left );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1202 position.top = round( position.top );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1203 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1204
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1205 collisionPosition = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1206 marginLeft: marginLeft,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1207 marginTop: marginTop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1208 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1209
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1210 $.each( [ "left", "top" ], function( i, dir ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1211 if ( $.ui.position[ collision[ i ] ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1212 $.ui.position[ collision[ i ] ][ dir ]( position, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1213 targetWidth: targetWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1214 targetHeight: targetHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1215 elemWidth: elemWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1216 elemHeight: elemHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1217 collisionPosition: collisionPosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1218 collisionWidth: collisionWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1219 collisionHeight: collisionHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1220 offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1221 my: options.my,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1222 at: options.at,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1223 within: within,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1224 elem : elem
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1225 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1226 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1227 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1228
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1229 if ( options.using ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1230 // adds feedback as second argument to using callback, if present
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1231 using = function( props ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1232 var left = targetOffset.left - position.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1233 right = left + targetWidth - elemWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1234 top = targetOffset.top - position.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1235 bottom = top + targetHeight - elemHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1236 feedback = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1237 target: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1238 element: target,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1239 left: targetOffset.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1240 top: targetOffset.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1241 width: targetWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1242 height: targetHeight
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1243 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1244 element: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1245 element: elem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1246 left: position.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1247 top: position.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1248 width: elemWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1249 height: elemHeight
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1250 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1251 horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1252 vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1253 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1254 if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1255 feedback.horizontal = "center";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1256 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1257 if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1258 feedback.vertical = "middle";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1259 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1260 if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1261 feedback.important = "horizontal";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1262 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1263 feedback.important = "vertical";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1264 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1265 options.using.call( this, props, feedback );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1266 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1267 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1268
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1269 elem.offset( $.extend( position, { using: using } ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1270 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1271 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1272
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1273 $.ui.position = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1274 fit: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1275 left: function( position, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1276 var within = data.within,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1277 withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1278 outerWidth = within.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1279 collisionPosLeft = position.left - data.collisionPosition.marginLeft,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1280 overLeft = withinOffset - collisionPosLeft,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1281 overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1282 newOverRight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1283
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1284 // element is wider than within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1285 if ( data.collisionWidth > outerWidth ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1286 // element is initially over the left side of within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1287 if ( overLeft > 0 && overRight <= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1288 newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1289 position.left += overLeft - newOverRight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1290 // element is initially over right side of within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1291 } else if ( overRight > 0 && overLeft <= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1292 position.left = withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1293 // element is initially over both left and right sides of within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1294 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1295 if ( overLeft > overRight ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1296 position.left = withinOffset + outerWidth - data.collisionWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1297 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1298 position.left = withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1299 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1300 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1301 // too far left -> align with left edge
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1302 } else if ( overLeft > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1303 position.left += overLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1304 // too far right -> align with right edge
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1305 } else if ( overRight > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1306 position.left -= overRight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1307 // adjust based on position and margin
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1308 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1309 position.left = max( position.left - collisionPosLeft, position.left );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1310 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1311 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1312 top: function( position, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1313 var within = data.within,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1314 withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1315 outerHeight = data.within.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1316 collisionPosTop = position.top - data.collisionPosition.marginTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1317 overTop = withinOffset - collisionPosTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1318 overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1319 newOverBottom;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1320
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1321 // element is taller than within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1322 if ( data.collisionHeight > outerHeight ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1323 // element is initially over the top of within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1324 if ( overTop > 0 && overBottom <= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1325 newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1326 position.top += overTop - newOverBottom;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1327 // element is initially over bottom of within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1328 } else if ( overBottom > 0 && overTop <= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1329 position.top = withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1330 // element is initially over both top and bottom of within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1331 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1332 if ( overTop > overBottom ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1333 position.top = withinOffset + outerHeight - data.collisionHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1334 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1335 position.top = withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1336 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1337 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1338 // too far up -> align with top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1339 } else if ( overTop > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1340 position.top += overTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1341 // too far down -> align with bottom edge
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1342 } else if ( overBottom > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1343 position.top -= overBottom;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1344 // adjust based on position and margin
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1345 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1346 position.top = max( position.top - collisionPosTop, position.top );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1347 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1348 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1349 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1350 flip: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1351 left: function( position, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1352 var within = data.within,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1353 withinOffset = within.offset.left + within.scrollLeft,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1354 outerWidth = within.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1355 offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1356 collisionPosLeft = position.left - data.collisionPosition.marginLeft,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1357 overLeft = collisionPosLeft - offsetLeft,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1358 overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1359 myOffset = data.my[ 0 ] === "left" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1360 -data.elemWidth :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1361 data.my[ 0 ] === "right" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1362 data.elemWidth :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1363 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1364 atOffset = data.at[ 0 ] === "left" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1365 data.targetWidth :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1366 data.at[ 0 ] === "right" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1367 -data.targetWidth :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1368 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1369 offset = -2 * data.offset[ 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1370 newOverRight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1371 newOverLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1372
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1373 if ( overLeft < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1374 newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1375 if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1376 position.left += myOffset + atOffset + offset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1377 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1378 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1379 else if ( overRight > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1380 newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1381 if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1382 position.left += myOffset + atOffset + offset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1383 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1384 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1385 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1386 top: function( position, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1387 var within = data.within,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1388 withinOffset = within.offset.top + within.scrollTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1389 outerHeight = within.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1390 offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1391 collisionPosTop = position.top - data.collisionPosition.marginTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1392 overTop = collisionPosTop - offsetTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1393 overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1394 top = data.my[ 1 ] === "top",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1395 myOffset = top ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1396 -data.elemHeight :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1397 data.my[ 1 ] === "bottom" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1398 data.elemHeight :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1399 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1400 atOffset = data.at[ 1 ] === "top" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1401 data.targetHeight :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1402 data.at[ 1 ] === "bottom" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1403 -data.targetHeight :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1404 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1405 offset = -2 * data.offset[ 1 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1406 newOverTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1407 newOverBottom;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1408 if ( overTop < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1409 newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1410 if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1411 position.top += myOffset + atOffset + offset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1412 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1413 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1414 else if ( overBottom > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1415 newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1416 if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1417 position.top += myOffset + atOffset + offset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1418 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1419 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1420 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1421 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1422 flipfit: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1423 left: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1424 $.ui.position.flip.left.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1425 $.ui.position.fit.left.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1426 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1427 top: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1428 $.ui.position.flip.top.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1429 $.ui.position.fit.top.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1430 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1431 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1432 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1433
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1434 // fraction support test
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1435 (function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1436 var testElement, testElementParent, testElementStyle, offsetLeft, i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1437 body = document.getElementsByTagName( "body" )[ 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1438 div = document.createElement( "div" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1439
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1440 //Create a "fake body" for testing based on method used in jQuery.support
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1441 testElement = document.createElement( body ? "div" : "body" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1442 testElementStyle = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1443 visibility: "hidden",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1444 width: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1445 height: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1446 border: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1447 margin: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1448 background: "none"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1449 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1450 if ( body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1451 $.extend( testElementStyle, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1452 position: "absolute",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1453 left: "-1000px",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1454 top: "-1000px"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1455 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1456 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1457 for ( i in testElementStyle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1458 testElement.style[ i ] = testElementStyle[ i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1459 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1460 testElement.appendChild( div );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1461 testElementParent = body || document.documentElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1462 testElementParent.insertBefore( testElement, testElementParent.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1463
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1464 div.style.cssText = "position: absolute; left: 10.7432222px;";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1465
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1466 offsetLeft = $( div ).offset().left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1467 $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1468
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1469 testElement.innerHTML = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1470 testElementParent.removeChild( testElement );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1471 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1472
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1473 }( jQuery ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1474 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1475
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1476 var uid = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1477 hideProps = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1478 showProps = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1479
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1480 hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1481 hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1482 showProps.height = showProps.paddingTop = showProps.paddingBottom =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1483 showProps.borderTopWidth = showProps.borderBottomWidth = "show";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1484
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1485 $.widget( "ui.accordion", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1486 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1487 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1488 active: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1489 animate: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1490 collapsible: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1491 event: "click",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1492 header: "> li > :first-child,> :not(li):even",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1493 heightStyle: "auto",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1494 icons: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1495 activeHeader: "ui-icon-triangle-1-s",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1496 header: "ui-icon-triangle-1-e"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1497 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1498
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1499 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1500 activate: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1501 beforeActivate: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1502 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1503
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1504 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1505 var options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1506 this.prevShow = this.prevHide = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1507 this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1508 // ARIA
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1509 .attr( "role", "tablist" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1510
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1511 // don't allow collapsible: false and active: false / null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1512 if ( !options.collapsible && (options.active === false || options.active == null) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1513 options.active = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1514 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1515
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1516 this._processPanels();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1517 // handle negative values
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1518 if ( options.active < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1519 options.active += this.headers.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1520 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1521 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1522 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1523
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1524 _getCreateEventData: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1525 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1526 header: this.active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1527 panel: !this.active.length ? $() : this.active.next(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1528 content: !this.active.length ? $() : this.active.next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1529 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1530 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1532 _createIcons: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1533 var icons = this.options.icons;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1534 if ( icons ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1535 $( "<span>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1536 .addClass( "ui-accordion-header-icon ui-icon " + icons.header )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1537 .prependTo( this.headers );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1538 this.active.children( ".ui-accordion-header-icon" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1539 .removeClass( icons.header )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1540 .addClass( icons.activeHeader );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1541 this.headers.addClass( "ui-accordion-icons" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1542 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1543 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1544
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1545 _destroyIcons: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1546 this.headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1547 .removeClass( "ui-accordion-icons" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1548 .children( ".ui-accordion-header-icon" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1549 .remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1550 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1551
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1552 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1553 var contents;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1554
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1555 // clean up main element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1556 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1557 .removeClass( "ui-accordion ui-widget ui-helper-reset" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1558 .removeAttr( "role" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1559
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1560 // clean up headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1561 this.headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1562 .removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1563 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1564 .removeAttr( "aria-expanded" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1565 .removeAttr( "aria-selected" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1566 .removeAttr( "aria-controls" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1567 .removeAttr( "tabIndex" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1568 .each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1569 if ( /^ui-accordion/.test( this.id ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1570 this.removeAttribute( "id" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1571 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1572 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1573 this._destroyIcons();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1574
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1575 // clean up content panels
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1576 contents = this.headers.next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1577 .css( "display", "" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1578 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1579 .removeAttr( "aria-hidden" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1580 .removeAttr( "aria-labelledby" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1581 .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1582 .each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1583 if ( /^ui-accordion/.test( this.id ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1584 this.removeAttribute( "id" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1585 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1586 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1587 if ( this.options.heightStyle !== "content" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1588 contents.css( "height", "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1589 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1590 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1591
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1592 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1593 if ( key === "active" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1594 // _activate() will handle invalid values and update this.options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1595 this._activate( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1596 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1597 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1598
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1599 if ( key === "event" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1600 if ( this.options.event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1601 this._off( this.headers, this.options.event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1602 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1603 this._setupEvents( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1604 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1605
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1606 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1607
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1608 // setting collapsible: false while collapsed; open first panel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1609 if ( key === "collapsible" && !value && this.options.active === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1610 this._activate( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1611 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1612
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1613 if ( key === "icons" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1614 this._destroyIcons();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1615 if ( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1616 this._createIcons();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1617 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1618 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1619
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1620 // #5332 - opacity doesn't cascade to positioned elements in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1621 // so we need to add the disabled class to the headers and panels
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1622 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1623 this.headers.add( this.headers.next() )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1624 .toggleClass( "ui-state-disabled", !!value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1625 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1626 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1627
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1628 _keydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1629 if ( event.altKey || event.ctrlKey ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1630 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1631 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1632
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1633 var keyCode = $.ui.keyCode,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1634 length = this.headers.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1635 currentIndex = this.headers.index( event.target ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1636 toFocus = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1637
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1638 switch ( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1639 case keyCode.RIGHT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1640 case keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1641 toFocus = this.headers[ ( currentIndex + 1 ) % length ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1642 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1643 case keyCode.LEFT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1644 case keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1645 toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1646 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1647 case keyCode.SPACE:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1648 case keyCode.ENTER:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1649 this._eventHandler( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1650 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1651 case keyCode.HOME:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1652 toFocus = this.headers[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1653 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1654 case keyCode.END:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1655 toFocus = this.headers[ length - 1 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1656 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1657 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1658
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1659 if ( toFocus ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1660 $( event.target ).attr( "tabIndex", -1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1661 $( toFocus ).attr( "tabIndex", 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1662 toFocus.focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1663 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1664 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1665 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1666
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1667 _panelKeyDown : function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1668 if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1669 $( event.currentTarget ).prev().focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1670 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1671 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1672
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1673 refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1674 var options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1675 this._processPanels();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1676
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1677 // was collapsed or no panel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1678 if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1679 options.active = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1680 this.active = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1681 // active false only when collapsible is true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1682 } else if ( options.active === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1683 this._activate( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1684 // was active, but active panel is gone
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1685 } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1686 // all remaining panel are disabled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1687 if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1688 options.active = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1689 this.active = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1690 // activate previous panel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1691 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1692 this._activate( Math.max( 0, options.active - 1 ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1693 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1694 // was active, active panel still exists
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1695 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1696 // make sure active index is correct
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1697 options.active = this.headers.index( this.active );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1698 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1699
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1700 this._destroyIcons();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1701
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1702 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1703 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1705 _processPanels: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1706 this.headers = this.element.find( this.options.header )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1707 .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1708
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1709 this.headers.next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1710 .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1711 .filter(":not(.ui-accordion-content-active)")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1712 .hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1713 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1714
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1715 _refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1716 var maxHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1717 options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1718 heightStyle = options.heightStyle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1719 parent = this.element.parent(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1720 accordionId = this.accordionId = "ui-accordion-" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1721 (this.element.attr( "id" ) || ++uid);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1722
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1723 this.active = this._findActive( options.active )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1724 .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1725 .removeClass( "ui-corner-all" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1726 this.active.next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1727 .addClass( "ui-accordion-content-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1728 .show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1729
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1730 this.headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1731 .attr( "role", "tab" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1732 .each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1733 var header = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1734 headerId = header.attr( "id" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1735 panel = header.next(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1736 panelId = panel.attr( "id" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1737 if ( !headerId ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1738 headerId = accordionId + "-header-" + i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1739 header.attr( "id", headerId );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1740 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1741 if ( !panelId ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1742 panelId = accordionId + "-panel-" + i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1743 panel.attr( "id", panelId );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1744 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1745 header.attr( "aria-controls", panelId );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1746 panel.attr( "aria-labelledby", headerId );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1747 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1748 .next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1749 .attr( "role", "tabpanel" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1750
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1751 this.headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1752 .not( this.active )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1753 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1754 "aria-selected": "false",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1755 "aria-expanded": "false",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1756 tabIndex: -1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1757 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1758 .next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1759 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1760 "aria-hidden": "true"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1761 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1762 .hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1763
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1764 // make sure at least one header is in the tab order
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1765 if ( !this.active.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1766 this.headers.eq( 0 ).attr( "tabIndex", 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1767 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1768 this.active.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1769 "aria-selected": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1770 "aria-expanded": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1771 tabIndex: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1772 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1773 .next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1774 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1775 "aria-hidden": "false"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1776 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1777 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1779 this._createIcons();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1780
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1781 this._setupEvents( options.event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1782
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1783 if ( heightStyle === "fill" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1784 maxHeight = parent.height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1785 this.element.siblings( ":visible" ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1786 var elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1787 position = elem.css( "position" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1788
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1789 if ( position === "absolute" || position === "fixed" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1790 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1791 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1792 maxHeight -= elem.outerHeight( true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1793 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1794
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1795 this.headers.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1796 maxHeight -= $( this ).outerHeight( true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1797 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1798
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1799 this.headers.next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1800 .each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1801 $( this ).height( Math.max( 0, maxHeight -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1802 $( this ).innerHeight() + $( this ).height() ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1803 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1804 .css( "overflow", "auto" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1805 } else if ( heightStyle === "auto" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1806 maxHeight = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1807 this.headers.next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1808 .each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1809 maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1810 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1811 .height( maxHeight );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1812 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1813 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1814
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1815 _activate: function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1816 var active = this._findActive( index )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1817
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1818 // trying to activate the already active panel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1819 if ( active === this.active[ 0 ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1820 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1821 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1822
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1823 // trying to collapse, simulate a click on the currently active header
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1824 active = active || this.active[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1825
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1826 this._eventHandler({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1827 target: active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1828 currentTarget: active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1829 preventDefault: $.noop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1830 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1831 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1832
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1833 _findActive: function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1834 return typeof selector === "number" ? this.headers.eq( selector ) : $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1835 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1836
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1837 _setupEvents: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1838 var events = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1839 keydown: "_keydown"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1840 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1841 if ( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1842 $.each( event.split(" "), function( index, eventName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1843 events[ eventName ] = "_eventHandler";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1844 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1845 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1846
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1847 this._off( this.headers.add( this.headers.next() ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1848 this._on( this.headers, events );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1849 this._on( this.headers.next(), { keydown: "_panelKeyDown" });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1850 this._hoverable( this.headers );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1851 this._focusable( this.headers );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1852 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1853
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1854 _eventHandler: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1855 var options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1856 active = this.active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1857 clicked = $( event.currentTarget ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1858 clickedIsActive = clicked[ 0 ] === active[ 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1859 collapsing = clickedIsActive && options.collapsible,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1860 toShow = collapsing ? $() : clicked.next(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1861 toHide = active.next(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1862 eventData = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1863 oldHeader: active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1864 oldPanel: toHide,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1865 newHeader: collapsing ? $() : clicked,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1866 newPanel: toShow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1867 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1868
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1869 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1870
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1871 if (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1872 // click on active header, but not collapsible
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1873 ( clickedIsActive && !options.collapsible ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1874 // allow canceling activation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1875 ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1876 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1877 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1878
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1879 options.active = collapsing ? false : this.headers.index( clicked );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1880
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1881 // when the call to ._toggle() comes after the class changes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1882 // it causes a very odd bug in IE 8 (see #6720)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1883 this.active = clickedIsActive ? $() : clicked;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1884 this._toggle( eventData );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1885
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1886 // switch classes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1887 // corner classes on the previously active header stay after the animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1888 active.removeClass( "ui-accordion-header-active ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1889 if ( options.icons ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1890 active.children( ".ui-accordion-header-icon" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1891 .removeClass( options.icons.activeHeader )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1892 .addClass( options.icons.header );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1893 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1894
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1895 if ( !clickedIsActive ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1896 clicked
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1897 .removeClass( "ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1898 .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1899 if ( options.icons ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1900 clicked.children( ".ui-accordion-header-icon" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1901 .removeClass( options.icons.header )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1902 .addClass( options.icons.activeHeader );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1903 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1904
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1905 clicked
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1906 .next()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1907 .addClass( "ui-accordion-content-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1908 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1909 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1910
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1911 _toggle: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1912 var toShow = data.newPanel,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1913 toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1914
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1915 // handle activating a panel during the animation for another activation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1916 this.prevShow.add( this.prevHide ).stop( true, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1917 this.prevShow = toShow;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1918 this.prevHide = toHide;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1919
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1920 if ( this.options.animate ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1921 this._animate( toShow, toHide, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1922 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1923 toHide.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1924 toShow.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1925 this._toggleComplete( data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1926 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1927
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1928 toHide.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1929 "aria-hidden": "true"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1930 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1931 toHide.prev().attr( "aria-selected", "false" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1932 // if we're switching panels, remove the old header from the tab order
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1933 // if we're opening from collapsed state, remove the previous header from the tab order
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1934 // if we're collapsing, then keep the collapsing header in the tab order
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1935 if ( toShow.length && toHide.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1936 toHide.prev().attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1937 "tabIndex": -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1938 "aria-expanded": "false"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1939 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1940 } else if ( toShow.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1941 this.headers.filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1942 return $( this ).attr( "tabIndex" ) === 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1943 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1944 .attr( "tabIndex", -1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1945 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1946
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1947 toShow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1948 .attr( "aria-hidden", "false" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1949 .prev()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1950 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1951 "aria-selected": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1952 tabIndex: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1953 "aria-expanded": "true"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1954 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1955 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1957 _animate: function( toShow, toHide, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1958 var total, easing, duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1959 that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1960 adjust = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1961 down = toShow.length &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1962 ( !toHide.length || ( toShow.index() < toHide.index() ) ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1963 animate = this.options.animate || {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1964 options = down && animate.down || animate,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1965 complete = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1966 that._toggleComplete( data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1967 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1968
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1969 if ( typeof options === "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1970 duration = options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1971 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1972 if ( typeof options === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1973 easing = options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1974 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1975 // fall back from options to animation in case of partial down settings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1976 easing = easing || options.easing || animate.easing;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1977 duration = duration || options.duration || animate.duration;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1978
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1979 if ( !toHide.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1980 return toShow.animate( showProps, duration, easing, complete );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1981 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1982 if ( !toShow.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1983 return toHide.animate( hideProps, duration, easing, complete );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1984 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1985
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1986 total = toShow.show().outerHeight();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1987 toHide.animate( hideProps, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1988 duration: duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1989 easing: easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1990 step: function( now, fx ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1991 fx.now = Math.round( now );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1992 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1993 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1994 toShow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1995 .hide()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1996 .animate( showProps, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1997 duration: duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1998 easing: easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1999 complete: complete,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2000 step: function( now, fx ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2001 fx.now = Math.round( now );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2002 if ( fx.prop !== "height" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2003 adjust += fx.now;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2004 } else if ( that.options.heightStyle !== "content" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2005 fx.now = Math.round( total - toHide.outerHeight() - adjust );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2006 adjust = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2007 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2008 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2009 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2010 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2011
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2012 _toggleComplete: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2013 var toHide = data.oldPanel;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2014
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2015 toHide
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2016 .removeClass( "ui-accordion-content-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2017 .prev()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2018 .removeClass( "ui-corner-top" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2019 .addClass( "ui-corner-all" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2020
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2021 // Work around for rendering bug in IE (#5421)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2022 if ( toHide.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2023 toHide.parent()[0].className = toHide.parent()[0].className;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2024 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2025 this._trigger( "activate", null, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2026 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2027 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2028
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2029 })( jQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2030 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2031
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2032 $.widget( "ui.autocomplete", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2033 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2034 defaultElement: "<input>",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2035 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2036 appendTo: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2037 autoFocus: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2038 delay: 300,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2039 minLength: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2040 position: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2041 my: "left top",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2042 at: "left bottom",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2043 collision: "none"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2044 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2045 source: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2046
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2047 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2048 change: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2049 close: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2050 focus: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2051 open: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2052 response: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2053 search: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2054 select: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2055 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2056
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2057 requestIndex: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2058 pending: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2059
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2060 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2061 // Some browsers only repeat keydown events, not keypress events,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2062 // so we use the suppressKeyPress flag to determine if we've already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2063 // handled the keydown event. #7269
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2064 // Unfortunately the code for & in keypress is the same as the up arrow,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2065 // so we use the suppressKeyPressRepeat flag to avoid handling keypress
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2066 // events when we know the keydown event was used to modify the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2067 // search term. #7799
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2068 var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2069 nodeName = this.element[0].nodeName.toLowerCase(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2070 isTextarea = nodeName === "textarea",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2071 isInput = nodeName === "input";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2072
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2073 this.isMultiLine =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2074 // Textareas are always multi-line
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2075 isTextarea ? true :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2076 // Inputs are always single-line, even if inside a contentEditable element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2077 // IE also treats inputs as contentEditable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2078 isInput ? false :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2079 // All other element types are determined by whether or not they're contentEditable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2080 this.element.prop( "isContentEditable" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2081
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2082 this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2083 this.isNewMenu = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2084
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2085 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2086 .addClass( "ui-autocomplete-input" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2087 .attr( "autocomplete", "off" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2088
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2089 this._on( this.element, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2090 keydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2091 if ( this.element.prop( "readOnly" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2092 suppressKeyPress = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2093 suppressInput = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2094 suppressKeyPressRepeat = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2095 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2096 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2097
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2098 suppressKeyPress = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2099 suppressInput = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2100 suppressKeyPressRepeat = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2101 var keyCode = $.ui.keyCode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2102 switch( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2103 case keyCode.PAGE_UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2104 suppressKeyPress = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2105 this._move( "previousPage", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2106 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2107 case keyCode.PAGE_DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2108 suppressKeyPress = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2109 this._move( "nextPage", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2110 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2111 case keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2112 suppressKeyPress = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2113 this._keyEvent( "previous", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2114 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2115 case keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2116 suppressKeyPress = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2117 this._keyEvent( "next", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2118 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2119 case keyCode.ENTER:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2120 case keyCode.NUMPAD_ENTER:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2121 // when menu is open and has focus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2122 if ( this.menu.active ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2123 // #6055 - Opera still allows the keypress to occur
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2124 // which causes forms to submit
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2125 suppressKeyPress = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2126 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2127 this.menu.select( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2128 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2129 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2130 case keyCode.TAB:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2131 if ( this.menu.active ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2132 this.menu.select( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2133 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2134 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2135 case keyCode.ESCAPE:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2136 if ( this.menu.element.is( ":visible" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2137 this._value( this.term );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2138 this.close( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2139 // Different browsers have different default behavior for escape
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2140 // Single press can mean undo or clear
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2141 // Double press in IE means clear the whole form
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2142 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2143 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2144 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2145 default:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2146 suppressKeyPressRepeat = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2147 // search timeout should be triggered before the input value is changed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2148 this._searchTimeout( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2149 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2150 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2151 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2152 keypress: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2153 if ( suppressKeyPress ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2154 suppressKeyPress = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2155 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2156 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2157 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2158 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2159 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2160 if ( suppressKeyPressRepeat ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2161 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2162 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2163
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2164 // replicate some key handlers to allow them to repeat in Firefox and Opera
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2165 var keyCode = $.ui.keyCode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2166 switch( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2167 case keyCode.PAGE_UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2168 this._move( "previousPage", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2169 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2170 case keyCode.PAGE_DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2171 this._move( "nextPage", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2172 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2173 case keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2174 this._keyEvent( "previous", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2175 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2176 case keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2177 this._keyEvent( "next", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2178 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2179 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2180 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2181 input: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2182 if ( suppressInput ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2183 suppressInput = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2184 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2185 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2186 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2187 this._searchTimeout( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2188 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2189 focus: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2190 this.selectedItem = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2191 this.previous = this._value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2192 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2193 blur: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2194 if ( this.cancelBlur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2195 delete this.cancelBlur;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2196 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2197 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2199 clearTimeout( this.searching );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2200 this.close( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2201 this._change( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2202 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2203 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2204
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2205 this._initSource();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2206 this.menu = $( "<ul>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2207 .addClass( "ui-autocomplete ui-front" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2208 .appendTo( this._appendTo() )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2209 .menu({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2210 // disable ARIA support, the live region takes care of that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2211 role: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2212 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2213 .hide()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2214 .data( "ui-menu" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2215
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2216 this._on( this.menu.element, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2217 mousedown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2218 // prevent moving focus out of the text field
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2219 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2220
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2221 // IE doesn't prevent moving focus even with event.preventDefault()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2222 // so we set a flag to know when we should ignore the blur event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2223 this.cancelBlur = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2224 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2225 delete this.cancelBlur;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2226 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2227
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2228 // clicking on the scrollbar causes focus to shift to the body
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2229 // but we can't detect a mouseup or a click immediately afterward
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2230 // so we have to track the next mousedown and close the menu if
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2231 // the user clicks somewhere outside of the autocomplete
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2232 var menuElement = this.menu.element[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2233 if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2234 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2235 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2236 this.document.one( "mousedown", function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2237 if ( event.target !== that.element[ 0 ] &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2238 event.target !== menuElement &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2239 !$.contains( menuElement, event.target ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2240 that.close();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2241 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2242 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2243 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2244 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2245 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2246 menufocus: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2247 // support: Firefox
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2248 // Prevent accidental activation of menu items in Firefox (#7024 #9118)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2249 if ( this.isNewMenu ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2250 this.isNewMenu = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2251 if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2252 this.menu.blur();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2253
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2254 this.document.one( "mousemove", function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2255 $( event.target ).trigger( event.originalEvent );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2256 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2257
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2258 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2259 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2260 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2261
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2262 var item = ui.item.data( "ui-autocomplete-item" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2263 if ( false !== this._trigger( "focus", event, { item: item } ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2264 // use value to match what will end up in the input, if it was a key event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2265 if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2266 this._value( item.value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2267 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2268 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2269 // Normally the input is populated with the item's value as the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2270 // menu is navigated, causing screen readers to notice a change and
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2271 // announce the item. Since the focus event was canceled, this doesn't
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2272 // happen, so we update the live region so that screen readers can
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2273 // still notice the change and announce it.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2274 this.liveRegion.text( item.value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2275 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2276 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2277 menuselect: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2278 var item = ui.item.data( "ui-autocomplete-item" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2279 previous = this.previous;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2280
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2281 // only trigger when focus was lost (click on menu)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2282 if ( this.element[0] !== this.document[0].activeElement ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2283 this.element.focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2284 this.previous = previous;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2285 // #6109 - IE triggers two focus events and the second
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2286 // is asynchronous, so we need to reset the previous
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2287 // term synchronously and asynchronously :-(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2288 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2289 this.previous = previous;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2290 this.selectedItem = item;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2291 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2292 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2293
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2294 if ( false !== this._trigger( "select", event, { item: item } ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2295 this._value( item.value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2296 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2297 // reset the term after the select event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2298 // this allows custom select handling to work properly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2299 this.term = this._value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2300
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2301 this.close( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2302 this.selectedItem = item;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2303 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2304 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2305
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2306 this.liveRegion = $( "<span>", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2307 role: "status",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2308 "aria-live": "polite"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2309 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2310 .addClass( "ui-helper-hidden-accessible" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2311 .insertBefore( this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2313 // turning off autocomplete prevents the browser from remembering the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2314 // value when navigating through history, so we re-enable autocomplete
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2315 // if the page is unloaded before the widget is destroyed. #7790
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2316 this._on( this.window, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2317 beforeunload: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2318 this.element.removeAttr( "autocomplete" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2319 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2320 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2321 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2322
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2323 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2324 clearTimeout( this.searching );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2325 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2326 .removeClass( "ui-autocomplete-input" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2327 .removeAttr( "autocomplete" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2328 this.menu.element.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2329 this.liveRegion.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2330 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2331
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2332 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2333 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2334 if ( key === "source" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2335 this._initSource();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2336 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2337 if ( key === "appendTo" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2338 this.menu.element.appendTo( this._appendTo() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2339 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2340 if ( key === "disabled" && value && this.xhr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2341 this.xhr.abort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2342 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2343 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2344
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2345 _appendTo: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2346 var element = this.options.appendTo;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2347
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2348 if ( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2349 element = element.jquery || element.nodeType ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2350 $( element ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2351 this.document.find( element ).eq( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2352 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2353
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2354 if ( !element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2355 element = this.element.closest( ".ui-front" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2356 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2357
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2358 if ( !element.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2359 element = this.document[0].body;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2360 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2361
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2362 return element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2363 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2364
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2365 _initSource: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2366 var array, url,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2367 that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2368 if ( $.isArray(this.options.source) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2369 array = this.options.source;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2370 this.source = function( request, response ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2371 response( $.ui.autocomplete.filter( array, request.term ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2372 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2373 } else if ( typeof this.options.source === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2374 url = this.options.source;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2375 this.source = function( request, response ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2376 if ( that.xhr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2377 that.xhr.abort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2378 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2379 that.xhr = $.ajax({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2380 url: url,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2381 data: request,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2382 dataType: "json",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2383 success: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2384 response( data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2385 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2386 error: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2387 response( [] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2388 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2389 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2390 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2391 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2392 this.source = this.options.source;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2393 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2394 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2395
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2396 _searchTimeout: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2397 clearTimeout( this.searching );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2398 this.searching = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2399 // only search if the value has changed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2400 if ( this.term !== this._value() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2401 this.selectedItem = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2402 this.search( null, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2403 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2404 }, this.options.delay );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2405 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2406
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2407 search: function( value, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2408 value = value != null ? value : this._value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2409
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2410 // always save the actual value, not the one passed as an argument
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2411 this.term = this._value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2412
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2413 if ( value.length < this.options.minLength ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2414 return this.close( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2415 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2416
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2417 if ( this._trigger( "search", event ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2418 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2419 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2420
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2421 return this._search( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2422 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2423
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2424 _search: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2425 this.pending++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2426 this.element.addClass( "ui-autocomplete-loading" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2427 this.cancelSearch = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2428
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2429 this.source( { term: value }, this._response() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2430 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2431
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2432 _response: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2433 var index = ++this.requestIndex;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2434
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2435 return $.proxy(function( content ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2436 if ( index === this.requestIndex ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2437 this.__response( content );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2438 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2439
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2440 this.pending--;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2441 if ( !this.pending ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2442 this.element.removeClass( "ui-autocomplete-loading" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2443 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2444 }, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2445 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2446
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2447 __response: function( content ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2448 if ( content ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2449 content = this._normalize( content );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2450 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2451 this._trigger( "response", null, { content: content } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2452 if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2453 this._suggest( content );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2454 this._trigger( "open" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2455 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2456 // use ._close() instead of .close() so we don't cancel future searches
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2457 this._close();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2458 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2459 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2460
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2461 close: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2462 this.cancelSearch = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2463 this._close( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2464 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2465
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2466 _close: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2467 if ( this.menu.element.is( ":visible" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2468 this.menu.element.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2469 this.menu.blur();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2470 this.isNewMenu = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2471 this._trigger( "close", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2472 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2473 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2474
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2475 _change: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2476 if ( this.previous !== this._value() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2477 this._trigger( "change", event, { item: this.selectedItem } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2478 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2479 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2480
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2481 _normalize: function( items ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2482 // assume all items have the right format when the first item is complete
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2483 if ( items.length && items[0].label && items[0].value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2484 return items;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2485 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2486 return $.map( items, function( item ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2487 if ( typeof item === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2488 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2489 label: item,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2490 value: item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2491 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2492 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2493 return $.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2494 label: item.label || item.value,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2495 value: item.value || item.label
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2496 }, item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2497 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2498 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2499
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2500 _suggest: function( items ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2501 var ul = this.menu.element.empty();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2502 this._renderMenu( ul, items );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2503 this.isNewMenu = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2504 this.menu.refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2505
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2506 // size and position menu
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2507 ul.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2508 this._resizeMenu();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2509 ul.position( $.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2510 of: this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2511 }, this.options.position ));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2513 if ( this.options.autoFocus ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2514 this.menu.next();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2515 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2516 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2517
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2518 _resizeMenu: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2519 var ul = this.menu.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2520 ul.outerWidth( Math.max(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2521 // Firefox wraps long text (possibly a rounding bug)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2522 // so we add 1px to avoid the wrapping (#7513)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2523 ul.width( "" ).outerWidth() + 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2524 this.element.outerWidth()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2525 ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2526 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2527
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2528 _renderMenu: function( ul, items ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2529 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2530 $.each( items, function( index, item ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2531 that._renderItemData( ul, item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2532 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2533 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2535 _renderItemData: function( ul, item ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2536 return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2537 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2538
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2539 _renderItem: function( ul, item ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2540 return $( "<li>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2541 .append( $( "<a>" ).text( item.label ) )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2542 .appendTo( ul );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2543 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2544
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2545 _move: function( direction, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2546 if ( !this.menu.element.is( ":visible" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2547 this.search( null, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2548 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2549 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2550 if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2551 this.menu.isLastItem() && /^next/.test( direction ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2552 this._value( this.term );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2553 this.menu.blur();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2554 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2555 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2556 this.menu[ direction ]( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2557 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2558
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2559 widget: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2560 return this.menu.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2561 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2562
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2563 _value: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2564 return this.valueMethod.apply( this.element, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2565 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2566
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2567 _keyEvent: function( keyEvent, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2568 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2569 this._move( keyEvent, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2570
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2571 // prevents moving cursor to beginning/end of the text field in some browsers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2572 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2573 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2574 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2575 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2576
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2577 $.extend( $.ui.autocomplete, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2578 escapeRegex: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2579 return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2580 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2581 filter: function(array, term) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2582 var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2583 return $.grep( array, function(value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2584 return matcher.test( value.label || value.value || value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2585 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2586 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2587 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2589
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2590 // live region extension, adding a `messages` option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2591 // NOTE: This is an experimental API. We are still investigating
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2592 // a full solution for string manipulation and internationalization.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2593 $.widget( "ui.autocomplete", $.ui.autocomplete, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2594 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2595 messages: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2596 noResults: "No search results.",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2597 results: function( amount ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2598 return amount + ( amount > 1 ? " results are" : " result is" ) +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2599 " available, use up and down arrow keys to navigate.";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2600 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2601 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2602 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2603
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2604 __response: function( content ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2605 var message;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2606 this._superApply( arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2607 if ( this.options.disabled || this.cancelSearch ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2608 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2609 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2610 if ( content && content.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2611 message = this.options.messages.results( content.length );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2612 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2613 message = this.options.messages.noResults;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2614 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2615 this.liveRegion.text( message );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2616 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2617 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2618
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2619 }( jQuery ));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2620 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2621
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2622 var lastActive,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2623 baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2624 typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2625 formResetHandler = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2626 var form = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2627 setTimeout(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2628 form.find( ":ui-button" ).button( "refresh" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2629 }, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2630 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2631 radioGroup = function( radio ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2632 var name = radio.name,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2633 form = radio.form,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2634 radios = $( [] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2635 if ( name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2636 name = name.replace( /'/g, "\\'" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2637 if ( form ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2638 radios = $( form ).find( "[name='" + name + "']" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2639 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2640 radios = $( "[name='" + name + "']", radio.ownerDocument )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2641 .filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2642 return !this.form;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2643 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2644 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2645 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2646 return radios;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2647 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2648
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2649 $.widget( "ui.button", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2650 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2651 defaultElement: "<button>",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2652 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2653 disabled: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2654 text: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2655 label: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2656 icons: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2657 primary: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2658 secondary: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2659 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2660 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2661 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2662 this.element.closest( "form" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2663 .unbind( "reset" + this.eventNamespace )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2664 .bind( "reset" + this.eventNamespace, formResetHandler );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2665
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2666 if ( typeof this.options.disabled !== "boolean" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2667 this.options.disabled = !!this.element.prop( "disabled" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2668 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2669 this.element.prop( "disabled", this.options.disabled );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2670 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2671
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2672 this._determineButtonType();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2673 this.hasTitle = !!this.buttonElement.attr( "title" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2674
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2675 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2676 options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2677 toggleButton = this.type === "checkbox" || this.type === "radio",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2678 activeClass = !toggleButton ? "ui-state-active" : "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2679
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2680 if ( options.label === null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2681 options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2682 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2683
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2684 this._hoverable( this.buttonElement );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2685
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2686 this.buttonElement
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2687 .addClass( baseClasses )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2688 .attr( "role", "button" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2689 .bind( "mouseenter" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2690 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2691 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2692 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2693 if ( this === lastActive ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2694 $( this ).addClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2695 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2696 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2697 .bind( "mouseleave" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2698 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2699 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2700 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2701 $( this ).removeClass( activeClass );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2702 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2703 .bind( "click" + this.eventNamespace, function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2704 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2705 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2706 event.stopImmediatePropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2707 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2708 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2709
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2710 // Can't use _focusable() because the element that receives focus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2711 // and the element that gets the ui-state-focus class are different
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2712 this._on({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2713 focus: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2714 this.buttonElement.addClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2715 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2716 blur: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2717 this.buttonElement.removeClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2718 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2719 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2720
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2721 if ( toggleButton ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2722 this.element.bind( "change" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2723 that.refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2724 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2725 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2726
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2727 if ( this.type === "checkbox" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2728 this.buttonElement.bind( "click" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2729 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2730 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2731 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2732 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2733 } else if ( this.type === "radio" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2734 this.buttonElement.bind( "click" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2735 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2736 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2737 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2738 $( this ).addClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2739 that.buttonElement.attr( "aria-pressed", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2740
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2741 var radio = that.element[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2742 radioGroup( radio )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2743 .not( radio )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2744 .map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2745 return $( this ).button( "widget" )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2746 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2747 .removeClass( "ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2748 .attr( "aria-pressed", "false" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2749 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2750 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2751 this.buttonElement
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2752 .bind( "mousedown" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2753 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2754 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2755 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2756 $( this ).addClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2757 lastActive = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2758 that.document.one( "mouseup", function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2759 lastActive = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2760 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2761 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2762 .bind( "mouseup" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2763 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2764 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2765 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2766 $( this ).removeClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2767 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2768 .bind( "keydown" + this.eventNamespace, function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2769 if ( options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2770 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2771 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2772 if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2773 $( this ).addClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2774 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2775 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2776 // see #8559, we bind to blur here in case the button element loses
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2777 // focus between keydown and keyup, it would be left in an "active" state
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2778 .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2779 $( this ).removeClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2780 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2781
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2782 if ( this.buttonElement.is("a") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2783 this.buttonElement.keyup(function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2784 if ( event.keyCode === $.ui.keyCode.SPACE ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2785 // TODO pass through original event correctly (just as 2nd argument doesn't work)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2786 $( this ).click();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2787 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2788 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2789 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2790 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2791
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2792 // TODO: pull out $.Widget's handling for the disabled option into
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2793 // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2794 // be overridden by individual plugins
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2795 this._setOption( "disabled", options.disabled );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2796 this._resetButton();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2797 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2798
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2799 _determineButtonType: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2800 var ancestor, labelSelector, checked;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2801
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2802 if ( this.element.is("[type=checkbox]") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2803 this.type = "checkbox";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2804 } else if ( this.element.is("[type=radio]") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2805 this.type = "radio";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2806 } else if ( this.element.is("input") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2807 this.type = "input";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2808 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2809 this.type = "button";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2810 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2811
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2812 if ( this.type === "checkbox" || this.type === "radio" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2813 // we don't search against the document in case the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2814 // is disconnected from the DOM
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2815 ancestor = this.element.parents().last();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2816 labelSelector = "label[for='" + this.element.attr("id") + "']";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2817 this.buttonElement = ancestor.find( labelSelector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2818 if ( !this.buttonElement.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2819 ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2820 this.buttonElement = ancestor.filter( labelSelector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2821 if ( !this.buttonElement.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2822 this.buttonElement = ancestor.find( labelSelector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2823 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2824 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2825 this.element.addClass( "ui-helper-hidden-accessible" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2826
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2827 checked = this.element.is( ":checked" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2828 if ( checked ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2829 this.buttonElement.addClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2830 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2831 this.buttonElement.prop( "aria-pressed", checked );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2832 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2833 this.buttonElement = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2834 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2835 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2836
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2837 widget: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2838 return this.buttonElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2839 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2840
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2841 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2842 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2843 .removeClass( "ui-helper-hidden-accessible" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2844 this.buttonElement
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2845 .removeClass( baseClasses + " ui-state-active " + typeClasses )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2846 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2847 .removeAttr( "aria-pressed" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2848 .html( this.buttonElement.find(".ui-button-text").html() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2849
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2850 if ( !this.hasTitle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2851 this.buttonElement.removeAttr( "title" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2852 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2853 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2854
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2855 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2856 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2857 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2858 this.element.prop( "disabled", !!value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2859 if ( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2860 this.buttonElement.removeClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2861 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2862 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2863 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2864 this._resetButton();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2865 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2866
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2867 refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2868 //See #8237 & #8828
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2869 var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2870
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2871 if ( isDisabled !== this.options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2872 this._setOption( "disabled", isDisabled );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2873 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2874 if ( this.type === "radio" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2875 radioGroup( this.element[0] ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2876 if ( $( this ).is( ":checked" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2877 $( this ).button( "widget" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2878 .addClass( "ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2879 .attr( "aria-pressed", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2880 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2881 $( this ).button( "widget" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2882 .removeClass( "ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2883 .attr( "aria-pressed", "false" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2884 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2885 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2886 } else if ( this.type === "checkbox" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2887 if ( this.element.is( ":checked" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2888 this.buttonElement
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2889 .addClass( "ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2890 .attr( "aria-pressed", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2891 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2892 this.buttonElement
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2893 .removeClass( "ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2894 .attr( "aria-pressed", "false" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2895 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2896 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2897 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2898
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2899 _resetButton: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2900 if ( this.type === "input" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2901 if ( this.options.label ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2902 this.element.val( this.options.label );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2903 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2904 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2905 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2906 var buttonElement = this.buttonElement.removeClass( typeClasses ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2907 buttonText = $( "<span></span>", this.document[0] )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2908 .addClass( "ui-button-text" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2909 .html( this.options.label )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2910 .appendTo( buttonElement.empty() )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2911 .text(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2912 icons = this.options.icons,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2913 multipleIcons = icons.primary && icons.secondary,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2914 buttonClasses = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2915
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2916 if ( icons.primary || icons.secondary ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2917 if ( this.options.text ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2918 buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2919 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2920
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2921 if ( icons.primary ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2922 buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2923 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2924
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2925 if ( icons.secondary ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2926 buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2927 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2928
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2929 if ( !this.options.text ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2930 buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2931
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2932 if ( !this.hasTitle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2933 buttonElement.attr( "title", $.trim( buttonText ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2934 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2935 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2936 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2937 buttonClasses.push( "ui-button-text-only" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2938 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2939 buttonElement.addClass( buttonClasses.join( " " ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2940 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2941 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2942
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2943 $.widget( "ui.buttonset", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2944 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2945 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2946 items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2947 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2948
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2949 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2950 this.element.addClass( "ui-buttonset" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2951 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2952
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2953 _init: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2954 this.refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2955 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2957 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2958 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2959 this.buttons.button( "option", key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2960 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2961
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2962 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2963 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2964
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2965 refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2966 var rtl = this.element.css( "direction" ) === "rtl";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2967
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2968 this.buttons = this.element.find( this.options.items )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2969 .filter( ":ui-button" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2970 .button( "refresh" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2971 .end()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2972 .not( ":ui-button" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2973 .button()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2974 .end()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2975 .map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2976 return $( this ).button( "widget" )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2977 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2978 .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2979 .filter( ":first" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2980 .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2981 .end()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2982 .filter( ":last" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2983 .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2984 .end()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2985 .end();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2986 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2987
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2988 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2989 this.element.removeClass( "ui-buttonset" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2990 this.buttons
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2991 .map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2992 return $( this ).button( "widget" )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2993 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2994 .removeClass( "ui-corner-left ui-corner-right" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2995 .end()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2996 .button( "destroy" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2997 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2998 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2999
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3000 }( jQuery ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3001 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3002
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3003 $.extend($.ui, { datepicker: { version: "1.10.4" } });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3004
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3005 var PROP_NAME = "datepicker",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3006 instActive;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3007
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3008 /* Date picker manager.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3009 Use the singleton instance of this class, $.datepicker, to interact with the date picker.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3010 Settings for (groups of) date pickers are maintained in an instance object,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3011 allowing multiple different settings on the same page. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3012
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3013 function Datepicker() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3014 this._curInst = null; // The current instance in use
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3015 this._keyEvent = false; // If the last event was a key event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3016 this._disabledInputs = []; // List of date picker inputs that have been disabled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3017 this._datepickerShowing = false; // True if the popup picker is showing , false if not
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3018 this._inDialog = false; // True if showing within a "dialog", false if not
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3019 this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3020 this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3021 this._appendClass = "ui-datepicker-append"; // The name of the append marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3022 this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3023 this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3024 this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3025 this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3026 this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3027 this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3028 this.regional = []; // Available regional settings, indexed by language code
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3029 this.regional[""] = { // Default regional settings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3030 closeText: "Done", // Display text for close link
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3031 prevText: "Prev", // Display text for previous month link
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3032 nextText: "Next", // Display text for next month link
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3033 currentText: "Today", // Display text for current month link
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3034 monthNames: ["January","February","March","April","May","June",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3035 "July","August","September","October","November","December"], // Names of months for drop-down and formatting
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3036 monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3037 dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3038 dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3039 dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3040 weekHeader: "Wk", // Column header for week of the year
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3041 dateFormat: "mm/dd/yy", // See format options on parseDate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3042 firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3043 isRTL: false, // True if right-to-left language, false if left-to-right
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3044 showMonthAfterYear: false, // True if the year select precedes month, false for month then year
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3045 yearSuffix: "" // Additional text to append to the year in the month headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3046 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3047 this._defaults = { // Global defaults for all the date picker instances
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3048 showOn: "focus", // "focus" for popup on focus,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3049 // "button" for trigger button, or "both" for either
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3050 showAnim: "fadeIn", // Name of jQuery animation for popup
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3051 showOptions: {}, // Options for enhanced animations
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3052 defaultDate: null, // Used when field is blank: actual date,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3053 // +/-number for offset from today, null for today
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3054 appendText: "", // Display text following the input box, e.g. showing the format
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3055 buttonText: "...", // Text for trigger button
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3056 buttonImage: "", // URL for trigger button image
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3057 buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3058 hideIfNoPrevNext: false, // True to hide next/previous month links
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3059 // if not applicable, false to just disable them
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3060 navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3061 gotoCurrent: false, // True if today link goes back to current selection instead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3062 changeMonth: false, // True if month can be selected directly, false if only prev/next
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3063 changeYear: false, // True if year can be selected directly, false if only prev/next
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3064 yearRange: "c-10:c+10", // Range of years to display in drop-down,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3065 // either relative to today's year (-nn:+nn), relative to currently displayed year
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3066 // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3067 showOtherMonths: false, // True to show dates in other months, false to leave blank
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3068 selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3069 showWeek: false, // True to show week of the year, false to not show it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3070 calculateWeek: this.iso8601Week, // How to calculate the week of the year,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3071 // takes a Date and returns the number of the week for it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3072 shortYearCutoff: "+10", // Short year values < this are in the current century,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3073 // > this are in the previous century,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3074 // string value starting with "+" for current year + value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3075 minDate: null, // The earliest selectable date, or null for no limit
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3076 maxDate: null, // The latest selectable date, or null for no limit
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3077 duration: "fast", // Duration of display/closure
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3078 beforeShowDay: null, // Function that takes a date and returns an array with
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3079 // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3080 // [2] = cell title (optional), e.g. $.datepicker.noWeekends
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3081 beforeShow: null, // Function that takes an input field and
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3082 // returns a set of custom settings for the date picker
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3083 onSelect: null, // Define a callback function when a date is selected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3084 onChangeMonthYear: null, // Define a callback function when the month or year is changed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3085 onClose: null, // Define a callback function when the datepicker is closed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3086 numberOfMonths: 1, // Number of months to show at a time
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3087 showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3088 stepMonths: 1, // Number of months to step back/forward
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3089 stepBigMonths: 12, // Number of months to step back/forward for the big links
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3090 altField: "", // Selector for an alternate field to store selected dates into
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3091 altFormat: "", // The date format to use for the alternate field
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3092 constrainInput: true, // The input is constrained by the current date format
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3093 showButtonPanel: false, // True to show button panel, false to not show it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3094 autoSize: false, // True to size the input for the date format, false to leave as is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3095 disabled: false // The initial disabled state
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3096 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3097 $.extend(this._defaults, this.regional[""]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3098 this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3099 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3100
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3101 $.extend(Datepicker.prototype, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3102 /* Class name added to elements to indicate already configured with a date picker. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3103 markerClassName: "hasDatepicker",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3104
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3105 //Keep track of the maximum number of rows displayed (see #7043)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3106 maxRows: 4,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3107
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3108 // TODO rename to "widget" when switching to widget factory
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3109 _widgetDatepicker: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3110 return this.dpDiv;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3111 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3112
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3113 /* Override the default settings for all instances of the date picker.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3114 * @param settings object - the new settings to use as defaults (anonymous object)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3115 * @return the manager object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3116 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3117 setDefaults: function(settings) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3118 extendRemove(this._defaults, settings || {});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3119 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3120 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3121
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3122 /* Attach the date picker to a jQuery selection.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3123 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3124 * @param settings object - the new settings to use for this date picker instance (anonymous)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3125 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3126 _attachDatepicker: function(target, settings) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3127 var nodeName, inline, inst;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3128 nodeName = target.nodeName.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3129 inline = (nodeName === "div" || nodeName === "span");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3130 if (!target.id) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3131 this.uuid += 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3132 target.id = "dp" + this.uuid;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3133 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3134 inst = this._newInst($(target), inline);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3135 inst.settings = $.extend({}, settings || {});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3136 if (nodeName === "input") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3137 this._connectDatepicker(target, inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3138 } else if (inline) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3139 this._inlineDatepicker(target, inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3140 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3141 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3142
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3143 /* Create a new instance object. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3144 _newInst: function(target, inline) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3145 var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3146 return {id: id, input: target, // associated target
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3147 selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3148 drawMonth: 0, drawYear: 0, // month being drawn
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3149 inline: inline, // is datepicker inline or not
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3150 dpDiv: (!inline ? this.dpDiv : // presentation div
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3151 bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3152 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3153
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3154 /* Attach the date picker to an input field. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3155 _connectDatepicker: function(target, inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3156 var input = $(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3157 inst.append = $([]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3158 inst.trigger = $([]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3159 if (input.hasClass(this.markerClassName)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3160 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3161 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3162 this._attachments(input, inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3163 input.addClass(this.markerClassName).keydown(this._doKeyDown).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3164 keypress(this._doKeyPress).keyup(this._doKeyUp);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3165 this._autoSize(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3166 $.data(target, PROP_NAME, inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3167 //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3168 if( inst.settings.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3169 this._disableDatepicker( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3170 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3171 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3172
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3173 /* Make attachments based on settings. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3174 _attachments: function(input, inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3175 var showOn, buttonText, buttonImage,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3176 appendText = this._get(inst, "appendText"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3177 isRTL = this._get(inst, "isRTL");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3178
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3179 if (inst.append) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3180 inst.append.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3181 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3182 if (appendText) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3183 inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3184 input[isRTL ? "before" : "after"](inst.append);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3185 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3186
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3187 input.unbind("focus", this._showDatepicker);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3188
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3189 if (inst.trigger) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3190 inst.trigger.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3191 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3192
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3193 showOn = this._get(inst, "showOn");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3194 if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3195 input.focus(this._showDatepicker);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3196 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3197 if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3198 buttonText = this._get(inst, "buttonText");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3199 buttonImage = this._get(inst, "buttonImage");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3200 inst.trigger = $(this._get(inst, "buttonImageOnly") ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3201 $("<img/>").addClass(this._triggerClass).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3202 attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3203 $("<button type='button'></button>").addClass(this._triggerClass).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3204 html(!buttonImage ? buttonText : $("<img/>").attr(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3205 { src:buttonImage, alt:buttonText, title:buttonText })));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3206 input[isRTL ? "before" : "after"](inst.trigger);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3207 inst.trigger.click(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3208 if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3209 $.datepicker._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3210 } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3211 $.datepicker._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3212 $.datepicker._showDatepicker(input[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3213 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3214 $.datepicker._showDatepicker(input[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3215 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3216 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3217 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3218 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3219 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3220
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3221 /* Apply the maximum length for the date format. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3222 _autoSize: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3223 if (this._get(inst, "autoSize") && !inst.inline) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3224 var findMax, max, maxI, i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3225 date = new Date(2009, 12 - 1, 20), // Ensure double digits
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3226 dateFormat = this._get(inst, "dateFormat");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3227
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3228 if (dateFormat.match(/[DM]/)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3229 findMax = function(names) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3230 max = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3231 maxI = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3232 for (i = 0; i < names.length; i++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3233 if (names[i].length > max) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3234 max = names[i].length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3235 maxI = i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3236 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3237 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3238 return maxI;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3239 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3240 date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3241 "monthNames" : "monthNamesShort"))));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3242 date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3243 "dayNames" : "dayNamesShort"))) + 20 - date.getDay());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3244 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3245 inst.input.attr("size", this._formatDate(inst, date).length);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3246 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3247 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3248
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3249 /* Attach an inline date picker to a div. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3250 _inlineDatepicker: function(target, inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3251 var divSpan = $(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3252 if (divSpan.hasClass(this.markerClassName)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3253 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3254 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3255 divSpan.addClass(this.markerClassName).append(inst.dpDiv);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3256 $.data(target, PROP_NAME, inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3257 this._setDate(inst, this._getDefaultDate(inst), true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3258 this._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3259 this._updateAlternate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3260 //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3261 if( inst.settings.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3262 this._disableDatepicker( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3263 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3264 // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3265 // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3266 inst.dpDiv.css( "display", "block" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3267 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3268
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3269 /* Pop-up the date picker in a "dialog" box.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3270 * @param input element - ignored
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3271 * @param date string or Date - the initial date to display
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3272 * @param onSelect function - the function to call when a date is selected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3273 * @param settings object - update the dialog date picker instance's settings (anonymous object)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3274 * @param pos int[2] - coordinates for the dialog's position within the screen or
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3275 * event - with x/y coordinates or
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3276 * leave empty for default (screen centre)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3277 * @return the manager object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3278 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3279 _dialogDatepicker: function(input, date, onSelect, settings, pos) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3280 var id, browserWidth, browserHeight, scrollX, scrollY,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3281 inst = this._dialogInst; // internal instance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3283 if (!inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3284 this.uuid += 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3285 id = "dp" + this.uuid;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3286 this._dialogInput = $("<input type='text' id='" + id +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3287 "' style='position: absolute; top: -100px; width: 0px;'/>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3288 this._dialogInput.keydown(this._doKeyDown);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3289 $("body").append(this._dialogInput);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3290 inst = this._dialogInst = this._newInst(this._dialogInput, false);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3291 inst.settings = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3292 $.data(this._dialogInput[0], PROP_NAME, inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3293 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3294 extendRemove(inst.settings, settings || {});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3295 date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3296 this._dialogInput.val(date);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3297
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3298 this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3299 if (!this._pos) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3300 browserWidth = document.documentElement.clientWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3301 browserHeight = document.documentElement.clientHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3302 scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3303 scrollY = document.documentElement.scrollTop || document.body.scrollTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3304 this._pos = // should use actual width/height below
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3305 [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3306 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3307
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3308 // move input on screen for focus, but hidden behind dialog
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3309 this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3310 inst.settings.onSelect = onSelect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3311 this._inDialog = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3312 this.dpDiv.addClass(this._dialogClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3313 this._showDatepicker(this._dialogInput[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3314 if ($.blockUI) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3315 $.blockUI(this.dpDiv);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3316 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3317 $.data(this._dialogInput[0], PROP_NAME, inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3318 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3319 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3320
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3321 /* Detach a datepicker from its control.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3322 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3323 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3324 _destroyDatepicker: function(target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3325 var nodeName,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3326 $target = $(target),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3327 inst = $.data(target, PROP_NAME);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3328
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3329 if (!$target.hasClass(this.markerClassName)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3330 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3331 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3332
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3333 nodeName = target.nodeName.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3334 $.removeData(target, PROP_NAME);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3335 if (nodeName === "input") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3336 inst.append.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3337 inst.trigger.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3338 $target.removeClass(this.markerClassName).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3339 unbind("focus", this._showDatepicker).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3340 unbind("keydown", this._doKeyDown).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3341 unbind("keypress", this._doKeyPress).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3342 unbind("keyup", this._doKeyUp);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3343 } else if (nodeName === "div" || nodeName === "span") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3344 $target.removeClass(this.markerClassName).empty();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3345 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3346 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3347
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3348 /* Enable the date picker to a jQuery selection.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3349 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3350 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3351 _enableDatepicker: function(target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3352 var nodeName, inline,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3353 $target = $(target),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3354 inst = $.data(target, PROP_NAME);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3355
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3356 if (!$target.hasClass(this.markerClassName)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3357 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3358 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3359
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3360 nodeName = target.nodeName.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3361 if (nodeName === "input") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3362 target.disabled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3363 inst.trigger.filter("button").
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3364 each(function() { this.disabled = false; }).end().
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3365 filter("img").css({opacity: "1.0", cursor: ""});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3366 } else if (nodeName === "div" || nodeName === "span") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3367 inline = $target.children("." + this._inlineClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3368 inline.children().removeClass("ui-state-disabled");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3369 inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3370 prop("disabled", false);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3371 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3372 this._disabledInputs = $.map(this._disabledInputs,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3373 function(value) { return (value === target ? null : value); }); // delete entry
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3374 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3375
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3376 /* Disable the date picker to a jQuery selection.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3377 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3378 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3379 _disableDatepicker: function(target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3380 var nodeName, inline,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3381 $target = $(target),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3382 inst = $.data(target, PROP_NAME);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3383
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3384 if (!$target.hasClass(this.markerClassName)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3385 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3386 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3387
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3388 nodeName = target.nodeName.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3389 if (nodeName === "input") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3390 target.disabled = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3391 inst.trigger.filter("button").
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3392 each(function() { this.disabled = true; }).end().
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3393 filter("img").css({opacity: "0.5", cursor: "default"});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3394 } else if (nodeName === "div" || nodeName === "span") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3395 inline = $target.children("." + this._inlineClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3396 inline.children().addClass("ui-state-disabled");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3397 inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3398 prop("disabled", true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3399 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3400 this._disabledInputs = $.map(this._disabledInputs,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3401 function(value) { return (value === target ? null : value); }); // delete entry
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3402 this._disabledInputs[this._disabledInputs.length] = target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3403 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3404
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3405 /* Is the first field in a jQuery collection disabled as a datepicker?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3406 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3407 * @return boolean - true if disabled, false if enabled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3408 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3409 _isDisabledDatepicker: function(target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3410 if (!target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3411 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3412 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3413 for (var i = 0; i < this._disabledInputs.length; i++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3414 if (this._disabledInputs[i] === target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3415 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3416 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3417 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3418 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3419 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3420
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3421 /* Retrieve the instance data for the target control.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3422 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3423 * @return object - the associated instance data
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3424 * @throws error if a jQuery problem getting data
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3425 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3426 _getInst: function(target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3427 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3428 return $.data(target, PROP_NAME);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3429 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3430 catch (err) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3431 throw "Missing instance data for this datepicker";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3432 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3433 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3434
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3435 /* Update or retrieve the settings for a date picker attached to an input field or division.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3436 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3437 * @param name object - the new settings to update or
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3438 * string - the name of the setting to change or retrieve,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3439 * when retrieving also "all" for all instance settings or
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3440 * "defaults" for all global defaults
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3441 * @param value any - the new value for the setting
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3442 * (omit if above is an object or to retrieve a value)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3443 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3444 _optionDatepicker: function(target, name, value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3445 var settings, date, minDate, maxDate,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3446 inst = this._getInst(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3447
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3448 if (arguments.length === 2 && typeof name === "string") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3449 return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3450 (inst ? (name === "all" ? $.extend({}, inst.settings) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3451 this._get(inst, name)) : null));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3452 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3453
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3454 settings = name || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3455 if (typeof name === "string") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3456 settings = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3457 settings[name] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3458 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3459
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3460 if (inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3461 if (this._curInst === inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3462 this._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3463 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3464
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3465 date = this._getDateDatepicker(target, true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3466 minDate = this._getMinMaxDate(inst, "min");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3467 maxDate = this._getMinMaxDate(inst, "max");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3468 extendRemove(inst.settings, settings);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3469 // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3470 if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3471 inst.settings.minDate = this._formatDate(inst, minDate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3472 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3473 if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3474 inst.settings.maxDate = this._formatDate(inst, maxDate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3475 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3476 if ( "disabled" in settings ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3477 if ( settings.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3478 this._disableDatepicker(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3479 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3480 this._enableDatepicker(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3481 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3482 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3483 this._attachments($(target), inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3484 this._autoSize(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3485 this._setDate(inst, date);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3486 this._updateAlternate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3487 this._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3488 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3489 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3490
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3491 // change method deprecated
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3492 _changeDatepicker: function(target, name, value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3493 this._optionDatepicker(target, name, value);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3494 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3495
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3496 /* Redraw the date picker attached to an input field or division.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3497 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3498 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3499 _refreshDatepicker: function(target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3500 var inst = this._getInst(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3501 if (inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3502 this._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3503 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3504 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3505
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3506 /* Set the dates for a jQuery selection.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3507 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3508 * @param date Date - the new date
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3509 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3510 _setDateDatepicker: function(target, date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3511 var inst = this._getInst(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3512 if (inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3513 this._setDate(inst, date);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3514 this._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3515 this._updateAlternate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3516 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3517 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3518
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3519 /* Get the date(s) for the first entry in a jQuery selection.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3520 * @param target element - the target input field or division or span
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3521 * @param noDefault boolean - true if no default date is to be used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3522 * @return Date - the current date
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3523 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3524 _getDateDatepicker: function(target, noDefault) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3525 var inst = this._getInst(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3526 if (inst && !inst.inline) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3527 this._setDateFromField(inst, noDefault);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3528 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3529 return (inst ? this._getDate(inst) : null);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3530 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3532 /* Handle keystrokes. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3533 _doKeyDown: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3534 var onSelect, dateStr, sel,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3535 inst = $.datepicker._getInst(event.target),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3536 handled = true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3537 isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3538
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3539 inst._keyEvent = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3540 if ($.datepicker._datepickerShowing) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3541 switch (event.keyCode) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3542 case 9: $.datepicker._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3543 handled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3544 break; // hide on tab out
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3545 case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3546 $.datepicker._currentClass + ")", inst.dpDiv);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3547 if (sel[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3548 $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3549 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3550
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3551 onSelect = $.datepicker._get(inst, "onSelect");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3552 if (onSelect) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3553 dateStr = $.datepicker._formatDate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3554
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3555 // trigger custom callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3556 onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3557 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3558 $.datepicker._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3559 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3560
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3561 return false; // don't submit the form
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3562 case 27: $.datepicker._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3563 break; // hide on escape
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3564 case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3565 -$.datepicker._get(inst, "stepBigMonths") :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3566 -$.datepicker._get(inst, "stepMonths")), "M");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3567 break; // previous month/year on page up/+ ctrl
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3568 case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3569 +$.datepicker._get(inst, "stepBigMonths") :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3570 +$.datepicker._get(inst, "stepMonths")), "M");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3571 break; // next month/year on page down/+ ctrl
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3572 case 35: if (event.ctrlKey || event.metaKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3573 $.datepicker._clearDate(event.target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3574 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3575 handled = event.ctrlKey || event.metaKey;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3576 break; // clear on ctrl or command +end
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3577 case 36: if (event.ctrlKey || event.metaKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3578 $.datepicker._gotoToday(event.target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3579 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3580 handled = event.ctrlKey || event.metaKey;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3581 break; // current on ctrl or command +home
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3582 case 37: if (event.ctrlKey || event.metaKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3583 $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3584 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3585 handled = event.ctrlKey || event.metaKey;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3586 // -1 day on ctrl or command +left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3587 if (event.originalEvent.altKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3588 $.datepicker._adjustDate(event.target, (event.ctrlKey ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3589 -$.datepicker._get(inst, "stepBigMonths") :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3590 -$.datepicker._get(inst, "stepMonths")), "M");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3591 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3592 // next month/year on alt +left on Mac
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3593 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3594 case 38: if (event.ctrlKey || event.metaKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3595 $.datepicker._adjustDate(event.target, -7, "D");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3596 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3597 handled = event.ctrlKey || event.metaKey;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3598 break; // -1 week on ctrl or command +up
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3599 case 39: if (event.ctrlKey || event.metaKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3600 $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3601 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3602 handled = event.ctrlKey || event.metaKey;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3603 // +1 day on ctrl or command +right
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3604 if (event.originalEvent.altKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3605 $.datepicker._adjustDate(event.target, (event.ctrlKey ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3606 +$.datepicker._get(inst, "stepBigMonths") :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3607 +$.datepicker._get(inst, "stepMonths")), "M");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3608 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3609 // next month/year on alt +right
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3610 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3611 case 40: if (event.ctrlKey || event.metaKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3612 $.datepicker._adjustDate(event.target, +7, "D");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3613 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3614 handled = event.ctrlKey || event.metaKey;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3615 break; // +1 week on ctrl or command +down
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3616 default: handled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3617 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3618 } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3619 $.datepicker._showDatepicker(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3620 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3621 handled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3622 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3623
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3624 if (handled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3625 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3626 event.stopPropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3627 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3628 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3629
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3630 /* Filter entered characters - based on date format. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3631 _doKeyPress: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3632 var chars, chr,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3633 inst = $.datepicker._getInst(event.target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3634
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3635 if ($.datepicker._get(inst, "constrainInput")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3636 chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3637 chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3638 return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3639 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3640 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3641
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3642 /* Synchronise manual entry and field/alternate field. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3643 _doKeyUp: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3644 var date,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3645 inst = $.datepicker._getInst(event.target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3646
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3647 if (inst.input.val() !== inst.lastVal) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3648 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3649 date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3650 (inst.input ? inst.input.val() : null),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3651 $.datepicker._getFormatConfig(inst));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3652
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3653 if (date) { // only if valid
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3654 $.datepicker._setDateFromField(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3655 $.datepicker._updateAlternate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3656 $.datepicker._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3657 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3658 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3659 catch (err) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3660 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3661 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3662 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3663 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3664
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3665 /* Pop-up the date picker for a given input field.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3666 * If false returned from beforeShow event handler do not show.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3667 * @param input element - the input field attached to the date picker or
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3668 * event - if triggered by focus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3669 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3670 _showDatepicker: function(input) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3671 input = input.target || input;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3672 if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3673 input = $("input", input.parentNode)[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3674 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3675
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3676 if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3677 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3678 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3679
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3680 var inst, beforeShow, beforeShowSettings, isFixed,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3681 offset, showAnim, duration;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3682
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3683 inst = $.datepicker._getInst(input);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3684 if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3685 $.datepicker._curInst.dpDiv.stop(true, true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3686 if ( inst && $.datepicker._datepickerShowing ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3687 $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3688 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3689 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3690
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3691 beforeShow = $.datepicker._get(inst, "beforeShow");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3692 beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3693 if(beforeShowSettings === false){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3694 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3695 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3696 extendRemove(inst.settings, beforeShowSettings);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3697
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3698 inst.lastVal = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3699 $.datepicker._lastInput = input;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3700 $.datepicker._setDateFromField(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3701
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3702 if ($.datepicker._inDialog) { // hide cursor
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3703 input.value = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3704 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3705 if (!$.datepicker._pos) { // position below input
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3706 $.datepicker._pos = $.datepicker._findPos(input);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3707 $.datepicker._pos[1] += input.offsetHeight; // add the height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3708 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3709
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3710 isFixed = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3711 $(input).parents().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3712 isFixed |= $(this).css("position") === "fixed";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3713 return !isFixed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3714 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3715
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3716 offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3717 $.datepicker._pos = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3718 //to avoid flashes on Firefox
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3719 inst.dpDiv.empty();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3720 // determine sizing offscreen
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3721 inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3722 $.datepicker._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3723 // fix width for dynamic number of date pickers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3724 // and adjust position before showing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3725 offset = $.datepicker._checkOffset(inst, offset, isFixed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3726 inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3727 "static" : (isFixed ? "fixed" : "absolute")), display: "none",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3728 left: offset.left + "px", top: offset.top + "px"});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3729
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3730 if (!inst.inline) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3731 showAnim = $.datepicker._get(inst, "showAnim");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3732 duration = $.datepicker._get(inst, "duration");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3733 inst.dpDiv.zIndex($(input).zIndex()+1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3734 $.datepicker._datepickerShowing = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3735
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3736 if ( $.effects && $.effects.effect[ showAnim ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3737 inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3738 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3739 inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3740 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3741
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3742 if ( $.datepicker._shouldFocusInput( inst ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3743 inst.input.focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3744 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3745
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3746 $.datepicker._curInst = inst;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3747 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3748 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3749
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3750 /* Generate the date picker content. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3751 _updateDatepicker: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3752 this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3753 instActive = inst; // for delegate hover events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3754 inst.dpDiv.empty().append(this._generateHTML(inst));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3755 this._attachHandlers(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3756 inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3757
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3758 var origyearshtml,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3759 numMonths = this._getNumberOfMonths(inst),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3760 cols = numMonths[1],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3761 width = 17;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3762
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3763 inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3764 if (cols > 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3765 inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3766 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3767 inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3768 "Class"]("ui-datepicker-multi");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3769 inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3770 "Class"]("ui-datepicker-rtl");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3771
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3772 if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3773 inst.input.focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3774 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3775
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3776 // deffered render of the years select (to avoid flashes on Firefox)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3777 if( inst.yearshtml ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3778 origyearshtml = inst.yearshtml;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3779 setTimeout(function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3780 //assure that inst.yearshtml didn't change.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3781 if( origyearshtml === inst.yearshtml && inst.yearshtml ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3782 inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3783 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3784 origyearshtml = inst.yearshtml = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3785 }, 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3786 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3787 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3788
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3789 // #6694 - don't focus the input if it's already focused
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3790 // this breaks the change event in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3791 // Support: IE and jQuery <1.9
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3792 _shouldFocusInput: function( inst ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3793 return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3794 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3796 /* Check positioning to remain on screen. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3797 _checkOffset: function(inst, offset, isFixed) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3798 var dpWidth = inst.dpDiv.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3799 dpHeight = inst.dpDiv.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3800 inputWidth = inst.input ? inst.input.outerWidth() : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3801 inputHeight = inst.input ? inst.input.outerHeight() : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3802 viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3803 viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3804
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3805 offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3806 offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3807 offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3808
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3809 // now check if datepicker is showing outside window viewport - move to a better place if so.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3810 offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3811 Math.abs(offset.left + dpWidth - viewWidth) : 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3812 offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3813 Math.abs(dpHeight + inputHeight) : 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3814
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3815 return offset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3816 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3817
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3818 /* Find an object's position on the screen. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3819 _findPos: function(obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3820 var position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3821 inst = this._getInst(obj),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3822 isRTL = this._get(inst, "isRTL");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3824 while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3825 obj = obj[isRTL ? "previousSibling" : "nextSibling"];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3826 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3827
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3828 position = $(obj).offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3829 return [position.left, position.top];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3830 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3831
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3832 /* Hide the date picker from view.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3833 * @param input element - the input field attached to the date picker
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3834 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3835 _hideDatepicker: function(input) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3836 var showAnim, duration, postProcess, onClose,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3837 inst = this._curInst;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3838
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3839 if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3840 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3841 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3842
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3843 if (this._datepickerShowing) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3844 showAnim = this._get(inst, "showAnim");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3845 duration = this._get(inst, "duration");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3846 postProcess = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3847 $.datepicker._tidyDialog(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3848 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3849
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3850 // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3851 if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3852 inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3853 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3854 inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3855 (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3856 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3857
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3858 if (!showAnim) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3859 postProcess();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3860 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3861 this._datepickerShowing = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3862
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3863 onClose = this._get(inst, "onClose");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3864 if (onClose) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3865 onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3866 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3867
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3868 this._lastInput = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3869 if (this._inDialog) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3870 this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3871 if ($.blockUI) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3872 $.unblockUI();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3873 $("body").append(this.dpDiv);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3874 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3875 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3876 this._inDialog = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3877 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3878 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3879
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3880 /* Tidy up after a dialog display. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3881 _tidyDialog: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3882 inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3883 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3884
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3885 /* Close date picker if clicked elsewhere. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3886 _checkExternalClick: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3887 if (!$.datepicker._curInst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3888 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3889 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3890
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3891 var $target = $(event.target),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3892 inst = $.datepicker._getInst($target[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3893
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3894 if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3895 $target.parents("#" + $.datepicker._mainDivId).length === 0 &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3896 !$target.hasClass($.datepicker.markerClassName) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3897 !$target.closest("." + $.datepicker._triggerClass).length &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3898 $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3899 ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3900 $.datepicker._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3901 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3902 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3903
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3904 /* Adjust one of the date sub-fields. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3905 _adjustDate: function(id, offset, period) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3906 var target = $(id),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3907 inst = this._getInst(target[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3908
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3909 if (this._isDisabledDatepicker(target[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3910 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3911 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3912 this._adjustInstDate(inst, offset +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3913 (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3914 period);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3915 this._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3916 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3917
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3918 /* Action for current link. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3919 _gotoToday: function(id) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3920 var date,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3921 target = $(id),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3922 inst = this._getInst(target[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3923
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3924 if (this._get(inst, "gotoCurrent") && inst.currentDay) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3925 inst.selectedDay = inst.currentDay;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3926 inst.drawMonth = inst.selectedMonth = inst.currentMonth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3927 inst.drawYear = inst.selectedYear = inst.currentYear;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3928 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3929 date = new Date();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3930 inst.selectedDay = date.getDate();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3931 inst.drawMonth = inst.selectedMonth = date.getMonth();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3932 inst.drawYear = inst.selectedYear = date.getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3933 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3934 this._notifyChange(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3935 this._adjustDate(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3936 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3937
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3938 /* Action for selecting a new month/year. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3939 _selectMonthYear: function(id, select, period) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3940 var target = $(id),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3941 inst = this._getInst(target[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3942
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3943 inst["selected" + (period === "M" ? "Month" : "Year")] =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3944 inst["draw" + (period === "M" ? "Month" : "Year")] =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3945 parseInt(select.options[select.selectedIndex].value,10);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3946
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3947 this._notifyChange(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3948 this._adjustDate(target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3949 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3950
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3951 /* Action for selecting a day. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3952 _selectDay: function(id, month, year, td) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3953 var inst,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3954 target = $(id);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3955
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3956 if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3957 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3958 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3959
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3960 inst = this._getInst(target[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3961 inst.selectedDay = inst.currentDay = $("a", td).html();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3962 inst.selectedMonth = inst.currentMonth = month;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3963 inst.selectedYear = inst.currentYear = year;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3964 this._selectDate(id, this._formatDate(inst,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3965 inst.currentDay, inst.currentMonth, inst.currentYear));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3966 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3967
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3968 /* Erase the input field and hide the date picker. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3969 _clearDate: function(id) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3970 var target = $(id);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3971 this._selectDate(target, "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3972 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3973
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3974 /* Update the input field with the selected date. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3975 _selectDate: function(id, dateStr) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3976 var onSelect,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3977 target = $(id),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3978 inst = this._getInst(target[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3979
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3980 dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3981 if (inst.input) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3982 inst.input.val(dateStr);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3983 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3984 this._updateAlternate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3985
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3986 onSelect = this._get(inst, "onSelect");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3987 if (onSelect) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3988 onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3989 } else if (inst.input) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3990 inst.input.trigger("change"); // fire the change event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3991 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3992
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3993 if (inst.inline){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3994 this._updateDatepicker(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3995 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3996 this._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3997 this._lastInput = inst.input[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3998 if (typeof(inst.input[0]) !== "object") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3999 inst.input.focus(); // restore focus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4000 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4001 this._lastInput = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4002 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4003 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4004
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4005 /* Update any alternate field to synchronise with the main field. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4006 _updateAlternate: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4007 var altFormat, date, dateStr,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4008 altField = this._get(inst, "altField");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4009
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4010 if (altField) { // update alternate field too
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4011 altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4012 date = this._getDate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4013 dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4014 $(altField).each(function() { $(this).val(dateStr); });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4015 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4016 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4017
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4018 /* Set as beforeShowDay function to prevent selection of weekends.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4019 * @param date Date - the date to customise
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4020 * @return [boolean, string] - is this date selectable?, what is its CSS class?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4021 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4022 noWeekends: function(date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4023 var day = date.getDay();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4024 return [(day > 0 && day < 6), ""];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4025 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4026
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4027 /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4028 * @param date Date - the date to get the week for
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4029 * @return number - the number of the week within the year that contains this date
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4030 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4031 iso8601Week: function(date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4032 var time,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4033 checkDate = new Date(date.getTime());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4034
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4035 // Find Thursday of this week starting on Monday
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4036 checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4037
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4038 time = checkDate.getTime();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4039 checkDate.setMonth(0); // Compare with Jan 1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4040 checkDate.setDate(1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4041 return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4042 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4043
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4044 /* Parse a string value into a date object.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4045 * See formatDate below for the possible formats.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4046 *
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4047 * @param format string - the expected format of the date
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4048 * @param value string - the date in the above format
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4049 * @param settings Object - attributes include:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4050 * shortYearCutoff number - the cutoff year for determining the century (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4051 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4052 * dayNames string[7] - names of the days from Sunday (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4053 * monthNamesShort string[12] - abbreviated names of the months (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4054 * monthNames string[12] - names of the months (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4055 * @return Date - the extracted date value or null if value is blank
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4056 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4057 parseDate: function (format, value, settings) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4058 if (format == null || value == null) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4059 throw "Invalid arguments";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4060 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4061
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4062 value = (typeof value === "object" ? value.toString() : value + "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4063 if (value === "") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4064 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4065 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4066
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4067 var iFormat, dim, extra,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4068 iValue = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4069 shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4070 shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4071 new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4072 dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4073 dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4074 monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4075 monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4076 year = -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4077 month = -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4078 day = -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4079 doy = -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4080 literal = false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4081 date,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4082 // Check whether a format character is doubled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4083 lookAhead = function(match) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4084 var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4085 if (matches) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4086 iFormat++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4087 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4088 return matches;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4089 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4090 // Extract a number from the string value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4091 getNumber = function(match) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4092 var isDoubled = lookAhead(match),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4093 size = (match === "@" ? 14 : (match === "!" ? 20 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4094 (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4095 digits = new RegExp("^\\d{1," + size + "}"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4096 num = value.substring(iValue).match(digits);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4097 if (!num) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4098 throw "Missing number at position " + iValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4099 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4100 iValue += num[0].length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4101 return parseInt(num[0], 10);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4102 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4103 // Extract a name from the string value and convert to an index
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4104 getName = function(match, shortNames, longNames) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4105 var index = -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4106 names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4107 return [ [k, v] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4108 }).sort(function (a, b) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4109 return -(a[1].length - b[1].length);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4110 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4111
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4112 $.each(names, function (i, pair) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4113 var name = pair[1];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4114 if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4115 index = pair[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4116 iValue += name.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4117 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4118 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4119 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4120 if (index !== -1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4121 return index + 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4122 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4123 throw "Unknown name at position " + iValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4124 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4125 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4126 // Confirm that a literal character matches the string value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4127 checkLiteral = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4128 if (value.charAt(iValue) !== format.charAt(iFormat)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4129 throw "Unexpected literal at position " + iValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4130 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4131 iValue++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4132 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4134 for (iFormat = 0; iFormat < format.length; iFormat++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4135 if (literal) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4136 if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4137 literal = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4138 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4139 checkLiteral();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4140 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4141 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4142 switch (format.charAt(iFormat)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4143 case "d":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4144 day = getNumber("d");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4145 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4146 case "D":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4147 getName("D", dayNamesShort, dayNames);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4148 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4149 case "o":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4150 doy = getNumber("o");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4151 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4152 case "m":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4153 month = getNumber("m");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4154 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4155 case "M":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4156 month = getName("M", monthNamesShort, monthNames);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4157 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4158 case "y":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4159 year = getNumber("y");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4160 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4161 case "@":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4162 date = new Date(getNumber("@"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4163 year = date.getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4164 month = date.getMonth() + 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4165 day = date.getDate();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4166 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4167 case "!":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4168 date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4169 year = date.getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4170 month = date.getMonth() + 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4171 day = date.getDate();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4172 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4173 case "'":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4174 if (lookAhead("'")){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4175 checkLiteral();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4176 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4177 literal = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4178 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4179 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4180 default:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4181 checkLiteral();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4182 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4183 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4184 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4185
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4186 if (iValue < value.length){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4187 extra = value.substr(iValue);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4188 if (!/^\s+/.test(extra)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4189 throw "Extra/unparsed characters found in date: " + extra;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4190 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4191 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4192
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4193 if (year === -1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4194 year = new Date().getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4195 } else if (year < 100) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4196 year += new Date().getFullYear() - new Date().getFullYear() % 100 +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4197 (year <= shortYearCutoff ? 0 : -100);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4198 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4199
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4200 if (doy > -1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4201 month = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4202 day = doy;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4203 do {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4204 dim = this._getDaysInMonth(year, month - 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4205 if (day <= dim) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4206 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4207 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4208 month++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4209 day -= dim;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4210 } while (true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4211 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4212
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4213 date = this._daylightSavingAdjust(new Date(year, month - 1, day));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4214 if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4215 throw "Invalid date"; // E.g. 31/02/00
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4216 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4217 return date;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4218 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4219
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4220 /* Standard date formats. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4221 ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4222 COOKIE: "D, dd M yy",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4223 ISO_8601: "yy-mm-dd",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4224 RFC_822: "D, d M y",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4225 RFC_850: "DD, dd-M-y",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4226 RFC_1036: "D, d M y",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4227 RFC_1123: "D, d M yy",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4228 RFC_2822: "D, d M yy",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4229 RSS: "D, d M y", // RFC 822
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4230 TICKS: "!",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4231 TIMESTAMP: "@",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4232 W3C: "yy-mm-dd", // ISO 8601
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4233
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4234 _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4235 Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4236
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4237 /* Format a date object into a string value.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4238 * The format can be combinations of the following:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4239 * d - day of month (no leading zero)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4240 * dd - day of month (two digit)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4241 * o - day of year (no leading zeros)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4242 * oo - day of year (three digit)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4243 * D - day name short
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4244 * DD - day name long
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4245 * m - month of year (no leading zero)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4246 * mm - month of year (two digit)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4247 * M - month name short
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4248 * MM - month name long
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4249 * y - year (two digit)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4250 * yy - year (four digit)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4251 * @ - Unix timestamp (ms since 01/01/1970)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4252 * ! - Windows ticks (100ns since 01/01/0001)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4253 * "..." - literal text
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4254 * '' - single quote
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4255 *
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4256 * @param format string - the desired format of the date
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4257 * @param date Date - the date value to format
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4258 * @param settings Object - attributes include:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4259 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4260 * dayNames string[7] - names of the days from Sunday (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4261 * monthNamesShort string[12] - abbreviated names of the months (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4262 * monthNames string[12] - names of the months (optional)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4263 * @return string - the date in the above format
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4264 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4265 formatDate: function (format, date, settings) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4266 if (!date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4267 return "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4268 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4269
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4270 var iFormat,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4271 dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4272 dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4273 monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4274 monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4275 // Check whether a format character is doubled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4276 lookAhead = function(match) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4277 var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4278 if (matches) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4279 iFormat++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4280 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4281 return matches;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4282 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4283 // Format a number, with leading zero if necessary
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4284 formatNumber = function(match, value, len) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4285 var num = "" + value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4286 if (lookAhead(match)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4287 while (num.length < len) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4288 num = "0" + num;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4289 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4290 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4291 return num;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4292 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4293 // Format a name, short or long as requested
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4294 formatName = function(match, value, shortNames, longNames) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4295 return (lookAhead(match) ? longNames[value] : shortNames[value]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4296 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4297 output = "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4298 literal = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4299
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4300 if (date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4301 for (iFormat = 0; iFormat < format.length; iFormat++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4302 if (literal) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4303 if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4304 literal = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4305 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4306 output += format.charAt(iFormat);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4307 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4308 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4309 switch (format.charAt(iFormat)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4310 case "d":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4311 output += formatNumber("d", date.getDate(), 2);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4312 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4313 case "D":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4314 output += formatName("D", date.getDay(), dayNamesShort, dayNames);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4315 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4316 case "o":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4317 output += formatNumber("o",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4318 Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4319 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4320 case "m":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4321 output += formatNumber("m", date.getMonth() + 1, 2);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4322 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4323 case "M":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4324 output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4325 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4326 case "y":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4327 output += (lookAhead("y") ? date.getFullYear() :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4328 (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4329 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4330 case "@":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4331 output += date.getTime();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4332 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4333 case "!":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4334 output += date.getTime() * 10000 + this._ticksTo1970;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4335 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4336 case "'":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4337 if (lookAhead("'")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4338 output += "'";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4339 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4340 literal = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4341 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4342 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4343 default:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4344 output += format.charAt(iFormat);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4345 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4346 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4347 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4348 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4349 return output;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4350 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4351
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4352 /* Extract all possible characters from the date format. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4353 _possibleChars: function (format) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4354 var iFormat,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4355 chars = "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4356 literal = false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4357 // Check whether a format character is doubled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4358 lookAhead = function(match) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4359 var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4360 if (matches) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4361 iFormat++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4362 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4363 return matches;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4364 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4365
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4366 for (iFormat = 0; iFormat < format.length; iFormat++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4367 if (literal) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4368 if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4369 literal = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4370 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4371 chars += format.charAt(iFormat);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4372 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4373 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4374 switch (format.charAt(iFormat)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4375 case "d": case "m": case "y": case "@":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4376 chars += "0123456789";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4377 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4378 case "D": case "M":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4379 return null; // Accept anything
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4380 case "'":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4381 if (lookAhead("'")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4382 chars += "'";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4383 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4384 literal = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4385 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4386 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4387 default:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4388 chars += format.charAt(iFormat);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4389 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4390 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4391 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4392 return chars;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4393 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4394
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4395 /* Get a setting value, defaulting if necessary. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4396 _get: function(inst, name) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4397 return inst.settings[name] !== undefined ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4398 inst.settings[name] : this._defaults[name];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4399 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4400
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4401 /* Parse existing date and initialise date picker. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4402 _setDateFromField: function(inst, noDefault) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4403 if (inst.input.val() === inst.lastVal) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4404 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4405 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4406
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4407 var dateFormat = this._get(inst, "dateFormat"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4408 dates = inst.lastVal = inst.input ? inst.input.val() : null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4409 defaultDate = this._getDefaultDate(inst),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4410 date = defaultDate,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4411 settings = this._getFormatConfig(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4412
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4413 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4414 date = this.parseDate(dateFormat, dates, settings) || defaultDate;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4415 } catch (event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4416 dates = (noDefault ? "" : dates);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4417 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4418 inst.selectedDay = date.getDate();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4419 inst.drawMonth = inst.selectedMonth = date.getMonth();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4420 inst.drawYear = inst.selectedYear = date.getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4421 inst.currentDay = (dates ? date.getDate() : 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4422 inst.currentMonth = (dates ? date.getMonth() : 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4423 inst.currentYear = (dates ? date.getFullYear() : 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4424 this._adjustInstDate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4425 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4426
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4427 /* Retrieve the default date shown on opening. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4428 _getDefaultDate: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4429 return this._restrictMinMax(inst,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4430 this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4431 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4432
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4433 /* A date may be specified as an exact value or a relative one. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4434 _determineDate: function(inst, date, defaultDate) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4435 var offsetNumeric = function(offset) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4436 var date = new Date();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4437 date.setDate(date.getDate() + offset);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4438 return date;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4439 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4440 offsetString = function(offset) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4441 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4442 return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4443 offset, $.datepicker._getFormatConfig(inst));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4444 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4445 catch (e) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4446 // Ignore
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4447 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4448
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4449 var date = (offset.toLowerCase().match(/^c/) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4450 $.datepicker._getDate(inst) : null) || new Date(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4451 year = date.getFullYear(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4452 month = date.getMonth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4453 day = date.getDate(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4454 pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4455 matches = pattern.exec(offset);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4456
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4457 while (matches) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4458 switch (matches[2] || "d") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4459 case "d" : case "D" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4460 day += parseInt(matches[1],10); break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4461 case "w" : case "W" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4462 day += parseInt(matches[1],10) * 7; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4463 case "m" : case "M" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4464 month += parseInt(matches[1],10);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4465 day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4466 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4467 case "y": case "Y" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4468 year += parseInt(matches[1],10);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4469 day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4470 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4471 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4472 matches = pattern.exec(offset);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4473 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4474 return new Date(year, month, day);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4475 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4476 newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4477 (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4478
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4479 newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4480 if (newDate) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4481 newDate.setHours(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4482 newDate.setMinutes(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4483 newDate.setSeconds(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4484 newDate.setMilliseconds(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4485 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4486 return this._daylightSavingAdjust(newDate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4487 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4488
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4489 /* Handle switch to/from daylight saving.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4490 * Hours may be non-zero on daylight saving cut-over:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4491 * > 12 when midnight changeover, but then cannot generate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4492 * midnight datetime, so jump to 1AM, otherwise reset.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4493 * @param date (Date) the date to check
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4494 * @return (Date) the corrected date
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4495 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4496 _daylightSavingAdjust: function(date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4497 if (!date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4498 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4499 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4500 date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4501 return date;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4502 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4503
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4504 /* Set the date(s) directly. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4505 _setDate: function(inst, date, noChange) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4506 var clear = !date,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4507 origMonth = inst.selectedMonth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4508 origYear = inst.selectedYear,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4509 newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4510
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4511 inst.selectedDay = inst.currentDay = newDate.getDate();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4512 inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4513 inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4514 if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4515 this._notifyChange(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4516 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4517 this._adjustInstDate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4518 if (inst.input) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4519 inst.input.val(clear ? "" : this._formatDate(inst));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4520 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4521 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4522
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4523 /* Retrieve the date(s) directly. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4524 _getDate: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4525 var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4526 this._daylightSavingAdjust(new Date(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4527 inst.currentYear, inst.currentMonth, inst.currentDay)));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4528 return startDate;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4529 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4530
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4531 /* Attach the onxxx handlers. These are declared statically so
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4532 * they work with static code transformers like Caja.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4533 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4534 _attachHandlers: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4535 var stepMonths = this._get(inst, "stepMonths"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4536 id = "#" + inst.id.replace( /\\\\/g, "\\" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4537 inst.dpDiv.find("[data-handler]").map(function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4538 var handler = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4539 prev: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4540 $.datepicker._adjustDate(id, -stepMonths, "M");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4541 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4542 next: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4543 $.datepicker._adjustDate(id, +stepMonths, "M");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4544 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4545 hide: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4546 $.datepicker._hideDatepicker();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4547 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4548 today: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4549 $.datepicker._gotoToday(id);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4550 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4551 selectDay: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4552 $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4553 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4554 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4555 selectMonth: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4556 $.datepicker._selectMonthYear(id, this, "M");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4557 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4558 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4559 selectYear: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4560 $.datepicker._selectMonthYear(id, this, "Y");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4561 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4562 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4563 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4564 $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4565 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4566 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4567
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4568 /* Generate the HTML for the current state of the date picker. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4569 _generateHTML: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4570 var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4571 controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4572 monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4573 selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4574 cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4575 printDate, dRow, tbody, daySettings, otherMonth, unselectable,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4576 tempDate = new Date(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4577 today = this._daylightSavingAdjust(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4578 new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4579 isRTL = this._get(inst, "isRTL"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4580 showButtonPanel = this._get(inst, "showButtonPanel"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4581 hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4582 navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4583 numMonths = this._getNumberOfMonths(inst),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4584 showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4585 stepMonths = this._get(inst, "stepMonths"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4586 isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4587 currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4588 new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4589 minDate = this._getMinMaxDate(inst, "min"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4590 maxDate = this._getMinMaxDate(inst, "max"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4591 drawMonth = inst.drawMonth - showCurrentAtPos,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4592 drawYear = inst.drawYear;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4593
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4594 if (drawMonth < 0) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4595 drawMonth += 12;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4596 drawYear--;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4597 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4598 if (maxDate) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4599 maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4600 maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4601 maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4602 while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4603 drawMonth--;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4604 if (drawMonth < 0) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4605 drawMonth = 11;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4606 drawYear--;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4607 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4608 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4609 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4610 inst.drawMonth = drawMonth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4611 inst.drawYear = drawYear;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4612
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4613 prevText = this._get(inst, "prevText");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4614 prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4615 this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4616 this._getFormatConfig(inst)));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4617
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4618 prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4619 "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4620 " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4621 (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4622
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4623 nextText = this._get(inst, "nextText");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4624 nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4625 this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4626 this._getFormatConfig(inst)));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4627
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4628 next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4629 "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4630 " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4631 (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4632
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4633 currentText = this._get(inst, "currentText");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4634 gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4635 currentText = (!navigationAsDateFormat ? currentText :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4636 this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4637
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4638 controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4639 this._get(inst, "closeText") + "</button>" : "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4640
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4641 buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4642 (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4643 ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4644
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4645 firstDay = parseInt(this._get(inst, "firstDay"),10);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4646 firstDay = (isNaN(firstDay) ? 0 : firstDay);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4647
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4648 showWeek = this._get(inst, "showWeek");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4649 dayNames = this._get(inst, "dayNames");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4650 dayNamesMin = this._get(inst, "dayNamesMin");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4651 monthNames = this._get(inst, "monthNames");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4652 monthNamesShort = this._get(inst, "monthNamesShort");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4653 beforeShowDay = this._get(inst, "beforeShowDay");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4654 showOtherMonths = this._get(inst, "showOtherMonths");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4655 selectOtherMonths = this._get(inst, "selectOtherMonths");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4656 defaultDate = this._getDefaultDate(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4657 html = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4658 dow;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4659 for (row = 0; row < numMonths[0]; row++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4660 group = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4661 this.maxRows = 4;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4662 for (col = 0; col < numMonths[1]; col++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4663 selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4664 cornerClass = " ui-corner-all";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4665 calender = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4666 if (isMultiMonth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4667 calender += "<div class='ui-datepicker-group";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4668 if (numMonths[1] > 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4669 switch (col) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4670 case 0: calender += " ui-datepicker-group-first";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4671 cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4672 case numMonths[1]-1: calender += " ui-datepicker-group-last";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4673 cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4674 default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4675 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4676 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4677 calender += "'>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4678 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4679 calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4680 (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4681 (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4682 this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4683 row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4684 "</div><table class='ui-datepicker-calendar'><thead>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4685 "<tr>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4686 thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4687 for (dow = 0; dow < 7; dow++) { // days of the week
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4688 day = (dow + firstDay) % 7;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4689 thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4690 "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4691 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4692 calender += thead + "</tr></thead><tbody>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4693 daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4694 if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4695 inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4696 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4697 leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4698 curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4699 numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4700 this.maxRows = numRows;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4701 printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4702 for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4703 calender += "<tr>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4704 tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4705 this._get(inst, "calculateWeek")(printDate) + "</td>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4706 for (dow = 0; dow < 7; dow++) { // create date picker days
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4707 daySettings = (beforeShowDay ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4708 beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4709 otherMonth = (printDate.getMonth() !== drawMonth);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4710 unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4711 (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4712 tbody += "<td class='" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4713 ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4714 (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4715 ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4716 (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4717 // or defaultDate is current printedDate and defaultDate is selectedDate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4718 " " + this._dayOverClass : "") + // highlight selected day
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4719 (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4720 (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4721 (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4722 (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4723 ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4724 (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4725 (otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4726 (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4727 (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4728 (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4729 (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4730 "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4731 printDate.setDate(printDate.getDate() + 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4732 printDate = this._daylightSavingAdjust(printDate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4733 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4734 calender += tbody + "</tr>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4735 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4736 drawMonth++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4737 if (drawMonth > 11) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4738 drawMonth = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4739 drawYear++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4740 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4741 calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4742 ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4743 group += calender;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4744 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4745 html += group;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4746 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4747 html += buttonPanel;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4748 inst._keyEvent = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4749 return html;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4750 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4751
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4752 /* Generate the month and year header. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4753 _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4754 secondary, monthNames, monthNamesShort) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4755
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4756 var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4757 changeMonth = this._get(inst, "changeMonth"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4758 changeYear = this._get(inst, "changeYear"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4759 showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4760 html = "<div class='ui-datepicker-title'>",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4761 monthHtml = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4762
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4763 // month selection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4764 if (secondary || !changeMonth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4765 monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4766 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4767 inMinYear = (minDate && minDate.getFullYear() === drawYear);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4768 inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4769 monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4770 for ( month = 0; month < 12; month++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4771 if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4772 monthHtml += "<option value='" + month + "'" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4773 (month === drawMonth ? " selected='selected'" : "") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4774 ">" + monthNamesShort[month] + "</option>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4775 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4776 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4777 monthHtml += "</select>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4778 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4779
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4780 if (!showMonthAfterYear) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4781 html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4782 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4783
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4784 // year selection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4785 if ( !inst.yearshtml ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4786 inst.yearshtml = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4787 if (secondary || !changeYear) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4788 html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4789 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4790 // determine range of years to display
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4791 years = this._get(inst, "yearRange").split(":");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4792 thisYear = new Date().getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4793 determineYear = function(value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4794 var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4795 (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4796 parseInt(value, 10)));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4797 return (isNaN(year) ? thisYear : year);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4798 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4799 year = determineYear(years[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4800 endYear = Math.max(year, determineYear(years[1] || ""));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4801 year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4802 endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4803 inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4804 for (; year <= endYear; year++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4805 inst.yearshtml += "<option value='" + year + "'" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4806 (year === drawYear ? " selected='selected'" : "") +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4807 ">" + year + "</option>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4808 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4809 inst.yearshtml += "</select>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4810
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4811 html += inst.yearshtml;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4812 inst.yearshtml = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4813 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4814 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4815
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4816 html += this._get(inst, "yearSuffix");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4817 if (showMonthAfterYear) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4818 html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4819 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4820 html += "</div>"; // Close datepicker_header
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4821 return html;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4822 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4824 /* Adjust one of the date sub-fields. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4825 _adjustInstDate: function(inst, offset, period) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4826 var year = inst.drawYear + (period === "Y" ? offset : 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4827 month = inst.drawMonth + (period === "M" ? offset : 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4828 day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4829 date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4830
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4831 inst.selectedDay = date.getDate();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4832 inst.drawMonth = inst.selectedMonth = date.getMonth();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4833 inst.drawYear = inst.selectedYear = date.getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4834 if (period === "M" || period === "Y") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4835 this._notifyChange(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4836 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4837 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4838
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4839 /* Ensure a date is within any min/max bounds. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4840 _restrictMinMax: function(inst, date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4841 var minDate = this._getMinMaxDate(inst, "min"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4842 maxDate = this._getMinMaxDate(inst, "max"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4843 newDate = (minDate && date < minDate ? minDate : date);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4844 return (maxDate && newDate > maxDate ? maxDate : newDate);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4845 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4846
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4847 /* Notify change of month/year. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4848 _notifyChange: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4849 var onChange = this._get(inst, "onChangeMonthYear");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4850 if (onChange) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4851 onChange.apply((inst.input ? inst.input[0] : null),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4852 [inst.selectedYear, inst.selectedMonth + 1, inst]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4853 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4854 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4855
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4856 /* Determine the number of months to show. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4857 _getNumberOfMonths: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4858 var numMonths = this._get(inst, "numberOfMonths");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4859 return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4860 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4861
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4862 /* Determine the current maximum date - ensure no time components are set. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4863 _getMinMaxDate: function(inst, minMax) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4864 return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4865 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4866
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4867 /* Find the number of days in a given month. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4868 _getDaysInMonth: function(year, month) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4869 return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4870 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4871
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4872 /* Find the day of the week of the first of a month. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4873 _getFirstDayOfMonth: function(year, month) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4874 return new Date(year, month, 1).getDay();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4875 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4877 /* Determines if we should allow a "next/prev" month display change. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4878 _canAdjustMonth: function(inst, offset, curYear, curMonth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4879 var numMonths = this._getNumberOfMonths(inst),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4880 date = this._daylightSavingAdjust(new Date(curYear,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4881 curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4882
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4883 if (offset < 0) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4884 date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4885 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4886 return this._isInRange(inst, date);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4887 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4888
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4889 /* Is the given date in the accepted range? */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4890 _isInRange: function(inst, date) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4891 var yearSplit, currentYear,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4892 minDate = this._getMinMaxDate(inst, "min"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4893 maxDate = this._getMinMaxDate(inst, "max"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4894 minYear = null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4895 maxYear = null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4896 years = this._get(inst, "yearRange");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4897 if (years){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4898 yearSplit = years.split(":");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4899 currentYear = new Date().getFullYear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4900 minYear = parseInt(yearSplit[0], 10);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4901 maxYear = parseInt(yearSplit[1], 10);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4902 if ( yearSplit[0].match(/[+\-].*/) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4903 minYear += currentYear;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4904 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4905 if ( yearSplit[1].match(/[+\-].*/) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4906 maxYear += currentYear;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4907 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4908 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4909
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4910 return ((!minDate || date.getTime() >= minDate.getTime()) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4911 (!maxDate || date.getTime() <= maxDate.getTime()) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4912 (!minYear || date.getFullYear() >= minYear) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4913 (!maxYear || date.getFullYear() <= maxYear));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4914 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4915
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4916 /* Provide the configuration settings for formatting/parsing. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4917 _getFormatConfig: function(inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4918 var shortYearCutoff = this._get(inst, "shortYearCutoff");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4919 shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4920 new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4921 return {shortYearCutoff: shortYearCutoff,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4922 dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4923 monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4924 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4925
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4926 /* Format the given date for display. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4927 _formatDate: function(inst, day, month, year) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4928 if (!day) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4929 inst.currentDay = inst.selectedDay;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4930 inst.currentMonth = inst.selectedMonth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4931 inst.currentYear = inst.selectedYear;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4932 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4933 var date = (day ? (typeof day === "object" ? day :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4934 this._daylightSavingAdjust(new Date(year, month, day))) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4935 this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4936 return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4937 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4938 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4939
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4940 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4941 * Bind hover events for datepicker elements.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4942 * Done via delegate so the binding only occurs once in the lifetime of the parent div.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4943 * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4944 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4945 function bindHover(dpDiv) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4946 var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4947 return dpDiv.delegate(selector, "mouseout", function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4948 $(this).removeClass("ui-state-hover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4949 if (this.className.indexOf("ui-datepicker-prev") !== -1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4950 $(this).removeClass("ui-datepicker-prev-hover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4951 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4952 if (this.className.indexOf("ui-datepicker-next") !== -1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4953 $(this).removeClass("ui-datepicker-next-hover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4954 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4955 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4956 .delegate(selector, "mouseover", function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4957 if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4958 $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4959 $(this).addClass("ui-state-hover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4960 if (this.className.indexOf("ui-datepicker-prev") !== -1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4961 $(this).addClass("ui-datepicker-prev-hover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4962 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4963 if (this.className.indexOf("ui-datepicker-next") !== -1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4964 $(this).addClass("ui-datepicker-next-hover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4965 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4966 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4967 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4968 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4969
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4970 /* jQuery extend now ignores nulls! */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4971 function extendRemove(target, props) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4972 $.extend(target, props);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4973 for (var name in props) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4974 if (props[name] == null) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4975 target[name] = props[name];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4976 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4977 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4978 return target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4979 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4980
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4981 /* Invoke the datepicker functionality.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4982 @param options string - a command, optionally followed by additional parameters or
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4983 Object - settings for attaching new datepicker functionality
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4984 @return jQuery object */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4985 $.fn.datepicker = function(options){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4986
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4987 /* Verify an empty collection wasn't passed - Fixes #6976 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4988 if ( !this.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4989 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4990 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4991
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4992 /* Initialise the date picker. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4993 if (!$.datepicker.initialized) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4994 $(document).mousedown($.datepicker._checkExternalClick);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4995 $.datepicker.initialized = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4996 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4997
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4998 /* Append datepicker main container to body if not exist. */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4999 if ($("#"+$.datepicker._mainDivId).length === 0) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5000 $("body").append($.datepicker.dpDiv);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5001 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5002
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5003 var otherArgs = Array.prototype.slice.call(arguments, 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5004 if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5005 return $.datepicker["_" + options + "Datepicker"].
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5006 apply($.datepicker, [this[0]].concat(otherArgs));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5007 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5008 if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5009 return $.datepicker["_" + options + "Datepicker"].
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5010 apply($.datepicker, [this[0]].concat(otherArgs));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5011 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5012 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5013 typeof options === "string" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5014 $.datepicker["_" + options + "Datepicker"].
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5015 apply($.datepicker, [this].concat(otherArgs)) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5016 $.datepicker._attachDatepicker(this, options);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5017 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5018 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5019
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5020 $.datepicker = new Datepicker(); // singleton instance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5021 $.datepicker.initialized = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5022 $.datepicker.uuid = new Date().getTime();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5023 $.datepicker.version = "1.10.4";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5024
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5025 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5026 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5027
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5028 var sizeRelatedOptions = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5029 buttons: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5030 height: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5031 maxHeight: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5032 maxWidth: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5033 minHeight: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5034 minWidth: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5035 width: true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5036 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5037 resizableRelatedOptions = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5038 maxHeight: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5039 maxWidth: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5040 minHeight: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5041 minWidth: true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5042 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5043
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5044 $.widget( "ui.dialog", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5045 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5046 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5047 appendTo: "body",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5048 autoOpen: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5049 buttons: [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5050 closeOnEscape: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5051 closeText: "close",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5052 dialogClass: "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5053 draggable: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5054 hide: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5055 height: "auto",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5056 maxHeight: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5057 maxWidth: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5058 minHeight: 150,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5059 minWidth: 150,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5060 modal: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5061 position: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5062 my: "center",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5063 at: "center",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5064 of: window,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5065 collision: "fit",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5066 // Ensure the titlebar is always visible
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5067 using: function( pos ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5068 var topOffset = $( this ).css( pos ).offset().top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5069 if ( topOffset < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5070 $( this ).css( "top", pos.top - topOffset );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5071 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5072 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5073 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5074 resizable: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5075 show: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5076 title: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5077 width: 300,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5078
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5079 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5080 beforeClose: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5081 close: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5082 drag: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5083 dragStart: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5084 dragStop: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5085 focus: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5086 open: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5087 resize: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5088 resizeStart: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5089 resizeStop: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5090 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5091
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5092 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5093 this.originalCss = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5094 display: this.element[0].style.display,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5095 width: this.element[0].style.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5096 minHeight: this.element[0].style.minHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5097 maxHeight: this.element[0].style.maxHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5098 height: this.element[0].style.height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5099 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5100 this.originalPosition = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5101 parent: this.element.parent(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5102 index: this.element.parent().children().index( this.element )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5103 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5104 this.originalTitle = this.element.attr("title");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5105 this.options.title = this.options.title || this.originalTitle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5106
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5107 this._createWrapper();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5108
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5109 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5110 .show()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5111 .removeAttr("title")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5112 .addClass("ui-dialog-content ui-widget-content")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5113 .appendTo( this.uiDialog );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5114
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5115 this._createTitlebar();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5116 this._createButtonPane();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5117
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5118 if ( this.options.draggable && $.fn.draggable ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5119 this._makeDraggable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5120 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5121 if ( this.options.resizable && $.fn.resizable ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5122 this._makeResizable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5123 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5124
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5125 this._isOpen = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5126 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5127
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5128 _init: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5129 if ( this.options.autoOpen ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5130 this.open();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5131 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5132 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5134 _appendTo: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5135 var element = this.options.appendTo;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5136 if ( element && (element.jquery || element.nodeType) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5137 return $( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5138 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5139 return this.document.find( element || "body" ).eq( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5140 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5141
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5142 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5143 var next,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5144 originalPosition = this.originalPosition;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5145
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5146 this._destroyOverlay();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5147
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5148 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5149 .removeUniqueId()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5150 .removeClass("ui-dialog-content ui-widget-content")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5151 .css( this.originalCss )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5152 // Without detaching first, the following becomes really slow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5153 .detach();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5154
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5155 this.uiDialog.stop( true, true ).remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5156
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5157 if ( this.originalTitle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5158 this.element.attr( "title", this.originalTitle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5159 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5160
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5161 next = originalPosition.parent.children().eq( originalPosition.index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5162 // Don't try to place the dialog next to itself (#8613)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5163 if ( next.length && next[0] !== this.element[0] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5164 next.before( this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5165 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5166 originalPosition.parent.append( this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5167 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5168 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5169
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5170 widget: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5171 return this.uiDialog;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5172 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5173
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5174 disable: $.noop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5175 enable: $.noop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5176
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5177 close: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5178 var activeElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5179 that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5180
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5181 if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5182 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5183 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5184
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5185 this._isOpen = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5186 this._destroyOverlay();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5187
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5188 if ( !this.opener.filter(":focusable").focus().length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5189
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5190 // support: IE9
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5191 // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5192 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5193 activeElement = this.document[ 0 ].activeElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5194
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5195 // Support: IE9, IE10
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5196 // If the <body> is blurred, IE will switch windows, see #4520
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5197 if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5199 // Hiding a focused element doesn't trigger blur in WebKit
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5200 // so in case we have nothing to focus on, explicitly blur the active element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5201 // https://bugs.webkit.org/show_bug.cgi?id=47182
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5202 $( activeElement ).blur();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5203 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5204 } catch ( error ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5205 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5206
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5207 this._hide( this.uiDialog, this.options.hide, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5208 that._trigger( "close", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5209 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5210 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5211
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5212 isOpen: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5213 return this._isOpen;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5214 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5215
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5216 moveToTop: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5217 this._moveToTop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5218 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5219
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5220 _moveToTop: function( event, silent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5221 var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5222 if ( moved && !silent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5223 this._trigger( "focus", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5224 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5225 return moved;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5226 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5227
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5228 open: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5229 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5230 if ( this._isOpen ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5231 if ( this._moveToTop() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5232 this._focusTabbable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5233 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5234 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5235 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5236
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5237 this._isOpen = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5238 this.opener = $( this.document[0].activeElement );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5239
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5240 this._size();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5241 this._position();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5242 this._createOverlay();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5243 this._moveToTop( null, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5244 this._show( this.uiDialog, this.options.show, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5245 that._focusTabbable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5246 that._trigger("focus");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5247 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5248
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5249 this._trigger("open");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5250 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5251
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5252 _focusTabbable: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5253 // Set focus to the first match:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5254 // 1. First element inside the dialog matching [autofocus]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5255 // 2. Tabbable element inside the content element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5256 // 3. Tabbable element inside the buttonpane
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5257 // 4. The close button
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5258 // 5. The dialog itself
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5259 var hasFocus = this.element.find("[autofocus]");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5260 if ( !hasFocus.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5261 hasFocus = this.element.find(":tabbable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5262 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5263 if ( !hasFocus.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5264 hasFocus = this.uiDialogButtonPane.find(":tabbable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5265 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5266 if ( !hasFocus.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5267 hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5268 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5269 if ( !hasFocus.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5270 hasFocus = this.uiDialog;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5271 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5272 hasFocus.eq( 0 ).focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5273 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5274
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5275 _keepFocus: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5276 function checkFocus() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5277 var activeElement = this.document[0].activeElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5278 isActive = this.uiDialog[0] === activeElement ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5279 $.contains( this.uiDialog[0], activeElement );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5280 if ( !isActive ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5281 this._focusTabbable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5282 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5283 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5284 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5285 checkFocus.call( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5286 // support: IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5287 // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5288 // so we check again later
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5289 this._delay( checkFocus );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5290 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5291
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5292 _createWrapper: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5293 this.uiDialog = $("<div>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5294 .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5295 this.options.dialogClass )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5296 .hide()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5297 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5298 // Setting tabIndex makes the div focusable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5299 tabIndex: -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5300 role: "dialog"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5301 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5302 .appendTo( this._appendTo() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5303
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5304 this._on( this.uiDialog, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5305 keydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5306 if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5307 event.keyCode === $.ui.keyCode.ESCAPE ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5308 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5309 this.close( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5310 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5311 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5313 // prevent tabbing out of dialogs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5314 if ( event.keyCode !== $.ui.keyCode.TAB ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5315 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5316 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5317 var tabbables = this.uiDialog.find(":tabbable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5318 first = tabbables.filter(":first"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5319 last = tabbables.filter(":last");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5320
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5321 if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5322 first.focus( 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5323 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5324 } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5325 last.focus( 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5326 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5327 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5328 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5329 mousedown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5330 if ( this._moveToTop( event ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5331 this._focusTabbable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5332 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5333 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5334 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5335
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5336 // We assume that any existing aria-describedby attribute means
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5337 // that the dialog content is marked up properly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5338 // otherwise we brute force the content as the description
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5339 if ( !this.element.find("[aria-describedby]").length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5340 this.uiDialog.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5341 "aria-describedby": this.element.uniqueId().attr("id")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5342 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5343 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5344 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5345
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5346 _createTitlebar: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5347 var uiDialogTitle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5348
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5349 this.uiDialogTitlebar = $("<div>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5350 .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5351 .prependTo( this.uiDialog );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5352 this._on( this.uiDialogTitlebar, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5353 mousedown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5354 // Don't prevent click on close button (#8838)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5355 // Focusing a dialog that is partially scrolled out of view
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5356 // causes the browser to scroll it into view, preventing the click event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5357 if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5358 // Dialog isn't getting focus when dragging (#8063)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5359 this.uiDialog.focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5360 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5361 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5362 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5364 // support: IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5365 // Use type="button" to prevent enter keypresses in textboxes from closing the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5366 // dialog in IE (#9312)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5367 this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5368 .button({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5369 label: this.options.closeText,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5370 icons: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5371 primary: "ui-icon-closethick"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5372 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5373 text: false
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5374 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5375 .addClass("ui-dialog-titlebar-close")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5376 .appendTo( this.uiDialogTitlebar );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5377 this._on( this.uiDialogTitlebarClose, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5378 click: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5379 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5380 this.close( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5381 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5382 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5383
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5384 uiDialogTitle = $("<span>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5385 .uniqueId()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5386 .addClass("ui-dialog-title")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5387 .prependTo( this.uiDialogTitlebar );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5388 this._title( uiDialogTitle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5389
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5390 this.uiDialog.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5391 "aria-labelledby": uiDialogTitle.attr("id")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5392 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5393 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5394
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5395 _title: function( title ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5396 if ( !this.options.title ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5397 title.html("&#160;");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5398 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5399 title.text( this.options.title );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5400 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5401
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5402 _createButtonPane: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5403 this.uiDialogButtonPane = $("<div>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5404 .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5405
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5406 this.uiButtonSet = $("<div>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5407 .addClass("ui-dialog-buttonset")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5408 .appendTo( this.uiDialogButtonPane );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5409
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5410 this._createButtons();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5411 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5412
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5413 _createButtons: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5414 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5415 buttons = this.options.buttons;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5416
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5417 // if we already have a button pane, remove it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5418 this.uiDialogButtonPane.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5419 this.uiButtonSet.empty();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5420
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5421 if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5422 this.uiDialog.removeClass("ui-dialog-buttons");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5423 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5424 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5425
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5426 $.each( buttons, function( name, props ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5427 var click, buttonOptions;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5428 props = $.isFunction( props ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5429 { click: props, text: name } :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5430 props;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5431 // Default to a non-submitting button
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5432 props = $.extend( { type: "button" }, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5433 // Change the context for the click callback to be the main element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5434 click = props.click;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5435 props.click = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5436 click.apply( that.element[0], arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5437 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5438 buttonOptions = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5439 icons: props.icons,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5440 text: props.showText
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5441 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5442 delete props.icons;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5443 delete props.showText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5444 $( "<button></button>", props )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5445 .button( buttonOptions )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5446 .appendTo( that.uiButtonSet );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5447 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5448 this.uiDialog.addClass("ui-dialog-buttons");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5449 this.uiDialogButtonPane.appendTo( this.uiDialog );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5450 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5451
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5452 _makeDraggable: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5453 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5454 options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5455
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5456 function filteredUi( ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5457 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5458 position: ui.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5459 offset: ui.offset
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5460 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5461 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5462
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5463 this.uiDialog.draggable({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5464 cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5465 handle: ".ui-dialog-titlebar",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5466 containment: "document",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5467 start: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5468 $( this ).addClass("ui-dialog-dragging");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5469 that._blockFrames();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5470 that._trigger( "dragStart", event, filteredUi( ui ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5471 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5472 drag: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5473 that._trigger( "drag", event, filteredUi( ui ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5474 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5475 stop: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5476 options.position = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5477 ui.position.left - that.document.scrollLeft(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5478 ui.position.top - that.document.scrollTop()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5479 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5480 $( this ).removeClass("ui-dialog-dragging");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5481 that._unblockFrames();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5482 that._trigger( "dragStop", event, filteredUi( ui ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5483 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5484 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5485 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5486
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5487 _makeResizable: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5488 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5489 options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5490 handles = options.resizable,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5491 // .ui-resizable has position: relative defined in the stylesheet
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5492 // but dialogs have to use absolute or fixed positioning
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5493 position = this.uiDialog.css("position"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5494 resizeHandles = typeof handles === "string" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5495 handles :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5496 "n,e,s,w,se,sw,ne,nw";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5497
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5498 function filteredUi( ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5499 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5500 originalPosition: ui.originalPosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5501 originalSize: ui.originalSize,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5502 position: ui.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5503 size: ui.size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5504 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5505 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5506
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5507 this.uiDialog.resizable({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5508 cancel: ".ui-dialog-content",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5509 containment: "document",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5510 alsoResize: this.element,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5511 maxWidth: options.maxWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5512 maxHeight: options.maxHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5513 minWidth: options.minWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5514 minHeight: this._minHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5515 handles: resizeHandles,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5516 start: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5517 $( this ).addClass("ui-dialog-resizing");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5518 that._blockFrames();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5519 that._trigger( "resizeStart", event, filteredUi( ui ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5520 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5521 resize: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5522 that._trigger( "resize", event, filteredUi( ui ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5523 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5524 stop: function( event, ui ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5525 options.height = $( this ).height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5526 options.width = $( this ).width();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5527 $( this ).removeClass("ui-dialog-resizing");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5528 that._unblockFrames();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5529 that._trigger( "resizeStop", event, filteredUi( ui ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5530 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5531 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5532 .css( "position", position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5533 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5535 _minHeight: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5536 var options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5537
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5538 return options.height === "auto" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5539 options.minHeight :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5540 Math.min( options.minHeight, options.height );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5541 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5542
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5543 _position: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5544 // Need to show the dialog to get the actual offset in the position plugin
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5545 var isVisible = this.uiDialog.is(":visible");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5546 if ( !isVisible ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5547 this.uiDialog.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5548 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5549 this.uiDialog.position( this.options.position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5550 if ( !isVisible ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5551 this.uiDialog.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5552 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5553 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5554
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5555 _setOptions: function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5556 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5557 resize = false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5558 resizableOptions = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5559
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5560 $.each( options, function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5561 that._setOption( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5562
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5563 if ( key in sizeRelatedOptions ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5564 resize = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5565 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5566 if ( key in resizableRelatedOptions ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5567 resizableOptions[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5568 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5569 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5570
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5571 if ( resize ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5572 this._size();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5573 this._position();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5574 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5575 if ( this.uiDialog.is(":data(ui-resizable)") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5576 this.uiDialog.resizable( "option", resizableOptions );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5577 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5578 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5579
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5580 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5581 var isDraggable, isResizable,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5582 uiDialog = this.uiDialog;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5583
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5584 if ( key === "dialogClass" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5585 uiDialog
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5586 .removeClass( this.options.dialogClass )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5587 .addClass( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5588 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5589
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5590 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5591 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5592 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5593
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5594 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5596 if ( key === "appendTo" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5597 this.uiDialog.appendTo( this._appendTo() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5598 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5600 if ( key === "buttons" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5601 this._createButtons();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5602 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5603
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5604 if ( key === "closeText" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5605 this.uiDialogTitlebarClose.button({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5606 // Ensure that we always pass a string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5607 label: "" + value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5608 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5609 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5610
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5611 if ( key === "draggable" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5612 isDraggable = uiDialog.is(":data(ui-draggable)");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5613 if ( isDraggable && !value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5614 uiDialog.draggable("destroy");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5615 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5616
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5617 if ( !isDraggable && value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5618 this._makeDraggable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5619 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5620 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5621
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5622 if ( key === "position" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5623 this._position();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5624 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5625
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5626 if ( key === "resizable" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5627 // currently resizable, becoming non-resizable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5628 isResizable = uiDialog.is(":data(ui-resizable)");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5629 if ( isResizable && !value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5630 uiDialog.resizable("destroy");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5631 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5632
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5633 // currently resizable, changing handles
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5634 if ( isResizable && typeof value === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5635 uiDialog.resizable( "option", "handles", value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5636 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5637
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5638 // currently non-resizable, becoming resizable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5639 if ( !isResizable && value !== false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5640 this._makeResizable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5641 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5642 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5643
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5644 if ( key === "title" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5645 this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5646 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5647 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5648
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5649 _size: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5650 // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5651 // divs will both have width and height set, so we need to reset them
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5652 var nonContentHeight, minContentHeight, maxContentHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5653 options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5654
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5655 // Reset content sizing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5656 this.element.show().css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5657 width: "auto",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5658 minHeight: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5659 maxHeight: "none",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5660 height: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5661 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5662
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5663 if ( options.minWidth > options.width ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5664 options.width = options.minWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5665 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5666
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5667 // reset wrapper sizing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5668 // determine the height of all the non-content elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5669 nonContentHeight = this.uiDialog.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5670 height: "auto",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5671 width: options.width
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5672 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5673 .outerHeight();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5674 minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5675 maxContentHeight = typeof options.maxHeight === "number" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5676 Math.max( 0, options.maxHeight - nonContentHeight ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5677 "none";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5678
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5679 if ( options.height === "auto" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5680 this.element.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5681 minHeight: minContentHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5682 maxHeight: maxContentHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5683 height: "auto"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5684 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5685 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5686 this.element.height( Math.max( 0, options.height - nonContentHeight ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5687 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5688
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5689 if (this.uiDialog.is(":data(ui-resizable)") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5690 this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5691 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5692 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5693
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5694 _blockFrames: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5695 this.iframeBlocks = this.document.find( "iframe" ).map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5696 var iframe = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5697
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5698 return $( "<div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5699 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5700 position: "absolute",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5701 width: iframe.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5702 height: iframe.outerHeight()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5703 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5704 .appendTo( iframe.parent() )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5705 .offset( iframe.offset() )[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5706 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5707 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5708
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5709 _unblockFrames: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5710 if ( this.iframeBlocks ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5711 this.iframeBlocks.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5712 delete this.iframeBlocks;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5713 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5714 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5715
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5716 _allowInteraction: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5717 if ( $( event.target ).closest(".ui-dialog").length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5718 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5719 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5720
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5721 // TODO: Remove hack when datepicker implements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5722 // the .ui-front logic (#8989)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5723 return !!$( event.target ).closest(".ui-datepicker").length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5724 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5725
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5726 _createOverlay: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5727 if ( !this.options.modal ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5728 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5729 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5730
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5731 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5732 widgetFullName = this.widgetFullName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5733 if ( !$.ui.dialog.overlayInstances ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5734 // Prevent use of anchors and inputs.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5735 // We use a delay in case the overlay is created from an
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5736 // event that we're going to be cancelling. (#2804)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5737 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5738 // Handle .dialog().dialog("close") (#4065)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5739 if ( $.ui.dialog.overlayInstances ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5740 this.document.bind( "focusin.dialog", function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5741 if ( !that._allowInteraction( event ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5742 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5743 $(".ui-dialog:visible:last .ui-dialog-content")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5744 .data( widgetFullName )._focusTabbable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5745 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5746 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5747 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5748 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5749 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5750
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5751 this.overlay = $("<div>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5752 .addClass("ui-widget-overlay ui-front")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5753 .appendTo( this._appendTo() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5754 this._on( this.overlay, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5755 mousedown: "_keepFocus"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5756 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5757 $.ui.dialog.overlayInstances++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5758 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5759
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5760 _destroyOverlay: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5761 if ( !this.options.modal ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5762 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5763 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5764
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5765 if ( this.overlay ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5766 $.ui.dialog.overlayInstances--;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5767
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5768 if ( !$.ui.dialog.overlayInstances ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5769 this.document.unbind( "focusin.dialog" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5770 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5771 this.overlay.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5772 this.overlay = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5773 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5774 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5775 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5776
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5777 $.ui.dialog.overlayInstances = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5779 // DEPRECATED
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5780 if ( $.uiBackCompat !== false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5781 // position option with array notation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5782 // just override with old implementation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5783 $.widget( "ui.dialog", $.ui.dialog, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5784 _position: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5785 var position = this.options.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5786 myAt = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5787 offset = [ 0, 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5788 isVisible;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5789
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5790 if ( position ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5791 if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5792 myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5793 if ( myAt.length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5794 myAt[1] = myAt[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5795 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5796
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5797 $.each( [ "left", "top" ], function( i, offsetPosition ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5798 if ( +myAt[ i ] === myAt[ i ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5799 offset[ i ] = myAt[ i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5800 myAt[ i ] = offsetPosition;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5801 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5802 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5803
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5804 position = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5805 my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5806 myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5807 at: myAt.join(" ")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5808 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5809 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5810
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5811 position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5812 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5813 position = $.ui.dialog.prototype.options.position;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5814 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5815
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5816 // need to show the dialog to get the actual offset in the position plugin
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5817 isVisible = this.uiDialog.is(":visible");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5818 if ( !isVisible ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5819 this.uiDialog.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5820 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5821 this.uiDialog.position( position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5822 if ( !isVisible ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5823 this.uiDialog.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5824 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5825 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5826 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5827 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5828
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5829 }( jQuery ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5830 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5831
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5832 $.widget("ui.draggable", $.ui.mouse, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5833 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5834 widgetEventPrefix: "drag",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5835 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5836 addClasses: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5837 appendTo: "parent",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5838 axis: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5839 connectToSortable: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5840 containment: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5841 cursor: "auto",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5842 cursorAt: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5843 grid: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5844 handle: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5845 helper: "original",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5846 iframeFix: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5847 opacity: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5848 refreshPositions: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5849 revert: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5850 revertDuration: 500,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5851 scope: "default",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5852 scroll: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5853 scrollSensitivity: 20,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5854 scrollSpeed: 20,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5855 snap: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5856 snapMode: "both",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5857 snapTolerance: 20,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5858 stack: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5859 zIndex: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5860
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5861 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5862 drag: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5863 start: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5864 stop: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5865 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5866 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5867
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5868 if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5869 this.element[0].style.position = "relative";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5870 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5871 if (this.options.addClasses){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5872 this.element.addClass("ui-draggable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5873 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5874 if (this.options.disabled){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5875 this.element.addClass("ui-draggable-disabled");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5876 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5877
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5878 this._mouseInit();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5879
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5880 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5881
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5882 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5883 this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5884 this._mouseDestroy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5885 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5886
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5887 _mouseCapture: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5888
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5889 var o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5890
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5891 // among others, prevent a drag on a resizable-handle
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5892 if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5893 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5894 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5895
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5896 //Quit if we're not on a valid handle
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5897 this.handle = this._getHandle(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5898 if (!this.handle) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5899 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5900 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5901
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5902 $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5903 $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5904 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5905 width: this.offsetWidth+"px", height: this.offsetHeight+"px",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5906 position: "absolute", opacity: "0.001", zIndex: 1000
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5907 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5908 .css($(this).offset())
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5909 .appendTo("body");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5910 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5911
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5912 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5913
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5914 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5915
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5916 _mouseStart: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5917
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5918 var o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5919
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5920 //Create and append the visible helper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5921 this.helper = this._createHelper(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5922
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5923 this.helper.addClass("ui-draggable-dragging");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5924
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5925 //Cache the helper size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5926 this._cacheHelperProportions();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5927
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5928 //If ddmanager is used for droppables, set the global draggable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5929 if($.ui.ddmanager) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5930 $.ui.ddmanager.current = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5931 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5932
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5933 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5934 * - Position generation -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5935 * This block generates everything position related - it's the core of draggables.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5936 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5937
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5938 //Cache the margins of the original element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5939 this._cacheMargins();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5940
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5941 //Store the helper's css position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5942 this.cssPosition = this.helper.css( "position" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5943 this.scrollParent = this.helper.scrollParent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5944 this.offsetParent = this.helper.offsetParent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5945 this.offsetParentCssPosition = this.offsetParent.css( "position" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5946
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5947 //The element's absolute position on the page minus margins
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5948 this.offset = this.positionAbs = this.element.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5949 this.offset = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5950 top: this.offset.top - this.margins.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5951 left: this.offset.left - this.margins.left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5952 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5953
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5954 //Reset scroll cache
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5955 this.offset.scroll = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5957 $.extend(this.offset, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5958 click: { //Where the click happened, relative to the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5959 left: event.pageX - this.offset.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5960 top: event.pageY - this.offset.top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5961 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5962 parent: this._getParentOffset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5963 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5964 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5965
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5966 //Generate the original position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5967 this.originalPosition = this.position = this._generatePosition(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5968 this.originalPageX = event.pageX;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5969 this.originalPageY = event.pageY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5970
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5971 //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5972 (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5973
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5974 //Set a containment if given in the options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5975 this._setContainment();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5976
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5977 //Trigger event + callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5978 if(this._trigger("start", event) === false) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5979 this._clear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5980 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5981 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5982
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5983 //Recache the helper size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5984 this._cacheHelperProportions();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5985
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5986 //Prepare the droppable offsets
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5987 if ($.ui.ddmanager && !o.dropBehaviour) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5988 $.ui.ddmanager.prepareOffsets(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5989 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5990
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5991
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5992 this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5993
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5994 //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5995 if ( $.ui.ddmanager ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5996 $.ui.ddmanager.dragStart(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5997 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5998
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5999 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6000 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6001
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6002 _mouseDrag: function(event, noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6003 // reset any necessary cached properties (see #5009)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6004 if ( this.offsetParentCssPosition === "fixed" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6005 this.offset.parent = this._getParentOffset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6006 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6007
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6008 //Compute the helpers position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6009 this.position = this._generatePosition(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6010 this.positionAbs = this._convertPositionTo("absolute");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6011
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6012 //Call plugins and callbacks and use the resulting position if something is returned
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6013 if (!noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6014 var ui = this._uiHash();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6015 if(this._trigger("drag", event, ui) === false) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6016 this._mouseUp({});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6017 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6018 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6019 this.position = ui.position;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6020 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6022 if(!this.options.axis || this.options.axis !== "y") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6023 this.helper[0].style.left = this.position.left+"px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6024 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6025 if(!this.options.axis || this.options.axis !== "x") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6026 this.helper[0].style.top = this.position.top+"px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6027 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6028 if($.ui.ddmanager) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6029 $.ui.ddmanager.drag(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6030 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6031
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6032 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6033 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6034
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6035 _mouseStop: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6036
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6037 //If we are using droppables, inform the manager about the drop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6038 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6039 dropped = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6040 if ($.ui.ddmanager && !this.options.dropBehaviour) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6041 dropped = $.ui.ddmanager.drop(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6042 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6043
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6044 //if a drop comes from outside (a sortable)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6045 if(this.dropped) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6046 dropped = this.dropped;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6047 this.dropped = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6048 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6049
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6050 //if the original element is no longer in the DOM don't bother to continue (see #8269)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6051 if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6052 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6053 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6054
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6055 if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6056 $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6057 if(that._trigger("stop", event) !== false) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6058 that._clear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6059 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6060 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6061 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6062 if(this._trigger("stop", event) !== false) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6063 this._clear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6064 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6065 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6066
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6067 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6068 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6069
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6070 _mouseUp: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6071 //Remove frame helpers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6072 $("div.ui-draggable-iframeFix").each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6073 this.parentNode.removeChild(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6074 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6075
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6076 //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6077 if( $.ui.ddmanager ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6078 $.ui.ddmanager.dragStop(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6079 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6080
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6081 return $.ui.mouse.prototype._mouseUp.call(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6082 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6083
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6084 cancel: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6085
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6086 if(this.helper.is(".ui-draggable-dragging")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6087 this._mouseUp({});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6088 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6089 this._clear();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6090 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6091
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6092 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6093
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6094 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6095
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6096 _getHandle: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6097 return this.options.handle ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6098 !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6099 true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6100 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6101
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6102 _createHelper: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6103
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6104 var o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6105 helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6106
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6107 if(!helper.parents("body").length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6108 helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6109 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6110
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6111 if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6112 helper.css("position", "absolute");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6113 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6114
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6115 return helper;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6116
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6117 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6118
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6119 _adjustOffsetFromHelper: function(obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6120 if (typeof obj === "string") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6121 obj = obj.split(" ");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6122 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6123 if ($.isArray(obj)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6124 obj = {left: +obj[0], top: +obj[1] || 0};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6125 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6126 if ("left" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6127 this.offset.click.left = obj.left + this.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6128 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6129 if ("right" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6130 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6131 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6132 if ("top" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6133 this.offset.click.top = obj.top + this.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6134 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6135 if ("bottom" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6136 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6137 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6138 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6139
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6140 _getParentOffset: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6141
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6142 //Get the offsetParent and cache its position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6143 var po = this.offsetParent.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6144
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6145 // This is a special case where we need to modify a offset calculated on start, since the following happened:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6146 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6147 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6148 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6149 if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6150 po.left += this.scrollParent.scrollLeft();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6151 po.top += this.scrollParent.scrollTop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6152 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6153
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6154 //This needs to be actually done for all browsers, since pageX/pageY includes this information
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6155 //Ugly IE fix
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6156 if((this.offsetParent[0] === document.body) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6157 (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6158 po = { top: 0, left: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6159 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6160
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6161 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6162 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6163 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6164 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6165
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6166 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6167
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6168 _getRelativeOffset: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6169
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6170 if(this.cssPosition === "relative") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6171 var p = this.element.position();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6172 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6173 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6174 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6175 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6176 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6177 return { top: 0, left: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6178 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6179
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6180 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6181
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6182 _cacheMargins: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6183 this.margins = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6184 left: (parseInt(this.element.css("marginLeft"),10) || 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6185 top: (parseInt(this.element.css("marginTop"),10) || 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6186 right: (parseInt(this.element.css("marginRight"),10) || 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6187 bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6188 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6189 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6190
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6191 _cacheHelperProportions: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6192 this.helperProportions = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6193 width: this.helper.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6194 height: this.helper.outerHeight()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6195 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6196 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6197
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6198 _setContainment: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6199
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6200 var over, c, ce,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6201 o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6202
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6203 if ( !o.containment ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6204 this.containment = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6205 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6206 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6207
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6208 if ( o.containment === "window" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6209 this.containment = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6210 $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6211 $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6212 $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6213 $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6214 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6215 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6216 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6217
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6218 if ( o.containment === "document") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6219 this.containment = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6220 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6221 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6222 $( document ).width() - this.helperProportions.width - this.margins.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6223 ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6224 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6225 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6226 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6227
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6228 if ( o.containment.constructor === Array ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6229 this.containment = o.containment;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6230 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6231 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6232
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6233 if ( o.containment === "parent" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6234 o.containment = this.helper[ 0 ].parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6235 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6236
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6237 c = $( o.containment );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6238 ce = c[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6239
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6240 if( !ce ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6241 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6242 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6243
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6244 over = c.css( "overflow" ) !== "hidden";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6245
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6246 this.containment = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6247 ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6248 ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6249 ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6250 ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top - this.margins.bottom
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6251 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6252 this.relative_container = c;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6253 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6254
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6255 _convertPositionTo: function(d, pos) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6256
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6257 if(!pos) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6258 pos = this.position;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6259 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6260
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6261 var mod = d === "absolute" ? 1 : -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6262 scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6263
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6264 //Cache the scroll
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6265 if (!this.offset.scroll) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6266 this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6267 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6268
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6269 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6270 top: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6271 pos.top + // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6272 this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6273 this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6274 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6275 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6276 left: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6277 pos.left + // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6278 this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6279 this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6280 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6281 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6282 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6283
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6284 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6285
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6286 _generatePosition: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6287
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6288 var containment, co, top, left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6289 o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6290 scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6291 pageX = event.pageX,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6292 pageY = event.pageY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6293
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6294 //Cache the scroll
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6295 if (!this.offset.scroll) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6296 this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6297 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6298
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6299 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6300 * - Position constraining -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6301 * Constrain the position to a mix of grid, containment.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6302 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6303
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6304 // If we are not dragging yet, we won't check for options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6305 if ( this.originalPosition ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6306 if ( this.containment ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6307 if ( this.relative_container ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6308 co = this.relative_container.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6309 containment = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6310 this.containment[ 0 ] + co.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6311 this.containment[ 1 ] + co.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6312 this.containment[ 2 ] + co.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6313 this.containment[ 3 ] + co.top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6314 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6315 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6316 else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6317 containment = this.containment;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6318 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6319
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6320 if(event.pageX - this.offset.click.left < containment[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6321 pageX = containment[0] + this.offset.click.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6322 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6323 if(event.pageY - this.offset.click.top < containment[1]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6324 pageY = containment[1] + this.offset.click.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6325 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6326 if(event.pageX - this.offset.click.left > containment[2]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6327 pageX = containment[2] + this.offset.click.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6328 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6329 if(event.pageY - this.offset.click.top > containment[3]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6330 pageY = containment[3] + this.offset.click.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6331 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6332 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6333
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6334 if(o.grid) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6335 //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6336 top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6337 pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6338
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6339 left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6340 pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6341 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6342
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6343 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6344
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6345 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6346 top: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6347 pageY - // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6348 this.offset.click.top - // Click offset (relative to the element)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6349 this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6350 this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6351 ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6352 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6353 left: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6354 pageX - // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6355 this.offset.click.left - // Click offset (relative to the element)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6356 this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6357 this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6358 ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6359 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6360 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6361
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6362 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6364 _clear: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6365 this.helper.removeClass("ui-draggable-dragging");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6366 if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6367 this.helper.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6368 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6369 this.helper = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6370 this.cancelHelperRemoval = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6371 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6372
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6373 // From now on bulk stuff - mainly helpers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6374
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6375 _trigger: function(type, event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6376 ui = ui || this._uiHash();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6377 $.ui.plugin.call(this, type, [event, ui]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6378 //The absolute position has to be recalculated after plugins
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6379 if(type === "drag") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6380 this.positionAbs = this._convertPositionTo("absolute");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6381 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6382 return $.Widget.prototype._trigger.call(this, type, event, ui);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6383 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6384
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6385 plugins: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6386
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6387 _uiHash: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6388 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6389 helper: this.helper,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6390 position: this.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6391 originalPosition: this.originalPosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6392 offset: this.positionAbs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6393 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6394 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6395
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6396 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6397
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6398 $.ui.plugin.add("draggable", "connectToSortable", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6399 start: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6400
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6401 var inst = $(this).data("ui-draggable"), o = inst.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6402 uiSortable = $.extend({}, ui, { item: inst.element });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6403 inst.sortables = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6404 $(o.connectToSortable).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6405 var sortable = $.data(this, "ui-sortable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6406 if (sortable && !sortable.options.disabled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6407 inst.sortables.push({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6408 instance: sortable,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6409 shouldRevert: sortable.options.revert
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6410 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6411 sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6412 sortable._trigger("activate", event, uiSortable);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6413 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6414 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6415
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6416 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6417 stop: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6418
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6419 //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6420 var inst = $(this).data("ui-draggable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6421 uiSortable = $.extend({}, ui, { item: inst.element });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6422
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6423 $.each(inst.sortables, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6424 if(this.instance.isOver) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6425
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6426 this.instance.isOver = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6427
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6428 inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6429 this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6430
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6431 //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6432 if(this.shouldRevert) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6433 this.instance.options.revert = this.shouldRevert;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6434 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6435
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6436 //Trigger the stop of the sortable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6437 this.instance._mouseStop(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6438
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6439 this.instance.options.helper = this.instance.options._helper;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6440
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6441 //If the helper has been the original item, restore properties in the sortable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6442 if(inst.options.helper === "original") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6443 this.instance.currentItem.css({ top: "auto", left: "auto" });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6444 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6445
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6446 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6447 this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6448 this.instance._trigger("deactivate", event, uiSortable);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6449 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6450
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6451 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6452
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6453 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6454 drag: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6455
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6456 var inst = $(this).data("ui-draggable"), that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6457
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6458 $.each(inst.sortables, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6459
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6460 var innermostIntersecting = false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6461 thisSortable = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6462
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6463 //Copy over some variables to allow calling the sortable's native _intersectsWith
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6464 this.instance.positionAbs = inst.positionAbs;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6465 this.instance.helperProportions = inst.helperProportions;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6466 this.instance.offset.click = inst.offset.click;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6467
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6468 if(this.instance._intersectsWith(this.instance.containerCache)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6469 innermostIntersecting = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6470 $.each(inst.sortables, function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6471 this.instance.positionAbs = inst.positionAbs;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6472 this.instance.helperProportions = inst.helperProportions;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6473 this.instance.offset.click = inst.offset.click;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6474 if (this !== thisSortable &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6475 this.instance._intersectsWith(this.instance.containerCache) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6476 $.contains(thisSortable.instance.element[0], this.instance.element[0])
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6477 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6478 innermostIntersecting = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6479 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6480 return innermostIntersecting;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6481 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6482 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6483
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6484
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6485 if(innermostIntersecting) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6486 //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6487 if(!this.instance.isOver) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6488
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6489 this.instance.isOver = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6490 //Now we fake the start of dragging for the sortable instance,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6491 //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6492 //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6493 this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6494 this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6495 this.instance.options.helper = function() { return ui.helper[0]; };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6496
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6497 event.target = this.instance.currentItem[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6498 this.instance._mouseCapture(event, true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6499 this.instance._mouseStart(event, true, true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6500
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6501 //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6502 this.instance.offset.click.top = inst.offset.click.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6503 this.instance.offset.click.left = inst.offset.click.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6504 this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6505 this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6506
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6507 inst._trigger("toSortable", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6508 inst.dropped = this.instance.element; //draggable revert needs that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6509 //hack so receive/update callbacks work (mostly)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6510 inst.currentItem = inst.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6511 this.instance.fromOutside = inst;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6513 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6514
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6515 //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6516 if(this.instance.currentItem) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6517 this.instance._mouseDrag(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6518 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6519
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6520 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6521
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6522 //If it doesn't intersect with the sortable, and it intersected before,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6523 //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6524 if(this.instance.isOver) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6525
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6526 this.instance.isOver = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6527 this.instance.cancelHelperRemoval = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6528
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6529 //Prevent reverting on this forced stop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6530 this.instance.options.revert = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6532 // The out event needs to be triggered independently
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6533 this.instance._trigger("out", event, this.instance._uiHash(this.instance));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6535 this.instance._mouseStop(event, true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6536 this.instance.options.helper = this.instance.options._helper;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6537
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6538 //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6539 this.instance.currentItem.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6540 if(this.instance.placeholder) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6541 this.instance.placeholder.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6542 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6543
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6544 inst._trigger("fromSortable", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6545 inst.dropped = false; //draggable revert needs that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6546 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6547
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6548 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6549
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6550 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6551
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6552 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6553 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6554
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6555 $.ui.plugin.add("draggable", "cursor", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6556 start: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6557 var t = $("body"), o = $(this).data("ui-draggable").options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6558 if (t.css("cursor")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6559 o._cursor = t.css("cursor");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6560 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6561 t.css("cursor", o.cursor);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6562 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6563 stop: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6564 var o = $(this).data("ui-draggable").options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6565 if (o._cursor) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6566 $("body").css("cursor", o._cursor);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6567 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6568 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6569 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6570
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6571 $.ui.plugin.add("draggable", "opacity", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6572 start: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6573 var t = $(ui.helper), o = $(this).data("ui-draggable").options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6574 if(t.css("opacity")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6575 o._opacity = t.css("opacity");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6576 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6577 t.css("opacity", o.opacity);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6578 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6579 stop: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6580 var o = $(this).data("ui-draggable").options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6581 if(o._opacity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6582 $(ui.helper).css("opacity", o._opacity);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6583 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6584 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6585 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6586
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6587 $.ui.plugin.add("draggable", "scroll", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6588 start: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6589 var i = $(this).data("ui-draggable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6590 if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6591 i.overflowOffset = i.scrollParent.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6592 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6593 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6594 drag: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6596 var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6597
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6598 if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6600 if(!o.axis || o.axis !== "x") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6601 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6602 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6603 } else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6604 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6605 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6606 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6607
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6608 if(!o.axis || o.axis !== "y") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6609 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6610 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6611 } else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6612 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6613 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6614 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6615
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6616 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6617
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6618 if(!o.axis || o.axis !== "x") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6619 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6620 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6621 } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6622 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6623 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6624 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6625
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6626 if(!o.axis || o.axis !== "y") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6627 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6628 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6629 } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6630 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6631 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6632 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6633
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6634 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6635
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6636 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6637 $.ui.ddmanager.prepareOffsets(i, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6638 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6639
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6640 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6641 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6642
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6643 $.ui.plugin.add("draggable", "snap", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6644 start: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6645
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6646 var i = $(this).data("ui-draggable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6647 o = i.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6648
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6649 i.snapElements = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6650
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6651 $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6652 var $t = $(this),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6653 $o = $t.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6654 if(this !== i.element[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6655 i.snapElements.push({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6656 item: this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6657 width: $t.outerWidth(), height: $t.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6658 top: $o.top, left: $o.left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6659 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6660 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6661 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6662
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6663 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6664 drag: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6665
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6666 var ts, bs, ls, rs, l, r, t, b, i, first,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6667 inst = $(this).data("ui-draggable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6668 o = inst.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6669 d = o.snapTolerance,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6670 x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6671 y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6672
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6673 for (i = inst.snapElements.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6674
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6675 l = inst.snapElements[i].left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6676 r = l + inst.snapElements[i].width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6677 t = inst.snapElements[i].top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6678 b = t + inst.snapElements[i].height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6679
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6680 if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6681 if(inst.snapElements[i].snapping) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6682 (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6683 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6684 inst.snapElements[i].snapping = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6685 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6686 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6687
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6688 if(o.snapMode !== "inner") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6689 ts = Math.abs(t - y2) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6690 bs = Math.abs(b - y1) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6691 ls = Math.abs(l - x2) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6692 rs = Math.abs(r - x1) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6693 if(ts) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6694 ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6695 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6696 if(bs) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6697 ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6698 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6699 if(ls) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6700 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6701 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6702 if(rs) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6703 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6704 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6705 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6706
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6707 first = (ts || bs || ls || rs);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6708
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6709 if(o.snapMode !== "outer") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6710 ts = Math.abs(t - y1) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6711 bs = Math.abs(b - y2) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6712 ls = Math.abs(l - x1) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6713 rs = Math.abs(r - x2) <= d;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6714 if(ts) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6715 ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6716 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6717 if(bs) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6718 ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6719 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6720 if(ls) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6721 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6722 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6723 if(rs) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6724 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6725 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6726 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6727
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6728 if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6729 (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6730 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6731 inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6732
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6733 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6734
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6735 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6736 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6737
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6738 $.ui.plugin.add("draggable", "stack", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6739 start: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6740 var min,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6741 o = this.data("ui-draggable").options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6742 group = $.makeArray($(o.stack)).sort(function(a,b) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6743 return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6744 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6745
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6746 if (!group.length) { return; }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6747
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6748 min = parseInt($(group[0]).css("zIndex"), 10) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6749 $(group).each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6750 $(this).css("zIndex", min + i);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6751 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6752 this.css("zIndex", (min + group.length));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6753 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6754 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6755
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6756 $.ui.plugin.add("draggable", "zIndex", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6757 start: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6758 var t = $(ui.helper), o = $(this).data("ui-draggable").options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6759 if(t.css("zIndex")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6760 o._zIndex = t.css("zIndex");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6761 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6762 t.css("zIndex", o.zIndex);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6763 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6764 stop: function(event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6765 var o = $(this).data("ui-draggable").options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6766 if(o._zIndex) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6767 $(ui.helper).css("zIndex", o._zIndex);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6768 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6769 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6770 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6771
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6772 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6773 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6774
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6775 function isOverAxis( x, reference, size ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6776 return ( x > reference ) && ( x < ( reference + size ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6777 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6779 $.widget("ui.droppable", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6780 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6781 widgetEventPrefix: "drop",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6782 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6783 accept: "*",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6784 activeClass: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6785 addClasses: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6786 greedy: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6787 hoverClass: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6788 scope: "default",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6789 tolerance: "intersect",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6790
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6791 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6792 activate: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6793 deactivate: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6794 drop: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6795 out: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6796 over: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6797 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6798 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6799
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6800 var proportions,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6801 o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6802 accept = o.accept;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6803
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6804 this.isover = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6805 this.isout = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6806
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6807 this.accept = $.isFunction(accept) ? accept : function(d) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6808 return d.is(accept);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6809 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6810
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6811 this.proportions = function( /* valueToWrite */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6812 if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6813 // Store the droppable's proportions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6814 proportions = arguments[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6815 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6816 // Retrieve or derive the droppable's proportions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6817 return proportions ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6818 proportions :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6819 proportions = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6820 width: this.element[ 0 ].offsetWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6821 height: this.element[ 0 ].offsetHeight
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6822 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6823 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6824 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6825
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6826 // Add the reference and positions to the manager
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6827 $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6828 $.ui.ddmanager.droppables[o.scope].push(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6829
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6830 (o.addClasses && this.element.addClass("ui-droppable"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6831
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6832 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6833
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6834 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6835 var i = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6836 drop = $.ui.ddmanager.droppables[this.options.scope];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6837
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6838 for ( ; i < drop.length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6839 if ( drop[i] === this ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6840 drop.splice(i, 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6841 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6842 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6843
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6844 this.element.removeClass("ui-droppable ui-droppable-disabled");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6845 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6846
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6847 _setOption: function(key, value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6848
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6849 if(key === "accept") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6850 this.accept = $.isFunction(value) ? value : function(d) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6851 return d.is(value);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6852 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6853 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6854 $.Widget.prototype._setOption.apply(this, arguments);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6855 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6856
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6857 _activate: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6858 var draggable = $.ui.ddmanager.current;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6859 if(this.options.activeClass) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6860 this.element.addClass(this.options.activeClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6861 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6862 if(draggable){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6863 this._trigger("activate", event, this.ui(draggable));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6864 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6865 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6866
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6867 _deactivate: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6868 var draggable = $.ui.ddmanager.current;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6869 if(this.options.activeClass) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6870 this.element.removeClass(this.options.activeClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6871 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6872 if(draggable){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6873 this._trigger("deactivate", event, this.ui(draggable));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6874 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6875 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6877 _over: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6878
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6879 var draggable = $.ui.ddmanager.current;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6880
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6881 // Bail if draggable and droppable are same element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6882 if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6883 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6884 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6885
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6886 if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6887 if(this.options.hoverClass) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6888 this.element.addClass(this.options.hoverClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6889 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6890 this._trigger("over", event, this.ui(draggable));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6891 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6892
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6893 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6894
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6895 _out: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6896
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6897 var draggable = $.ui.ddmanager.current;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6898
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6899 // Bail if draggable and droppable are same element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6900 if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6901 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6902 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6903
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6904 if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6905 if(this.options.hoverClass) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6906 this.element.removeClass(this.options.hoverClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6907 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6908 this._trigger("out", event, this.ui(draggable));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6909 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6910
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6911 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6912
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6913 _drop: function(event,custom) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6914
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6915 var draggable = custom || $.ui.ddmanager.current,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6916 childrenIntersection = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6917
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6918 // Bail if draggable and droppable are same element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6919 if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6920 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6921 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6922
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6923 this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6924 var inst = $.data(this, "ui-droppable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6925 if(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6926 inst.options.greedy &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6927 !inst.options.disabled &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6928 inst.options.scope === draggable.options.scope &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6929 inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6930 $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6931 ) { childrenIntersection = true; return false; }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6932 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6933 if(childrenIntersection) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6934 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6935 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6936
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6937 if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6938 if(this.options.activeClass) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6939 this.element.removeClass(this.options.activeClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6940 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6941 if(this.options.hoverClass) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6942 this.element.removeClass(this.options.hoverClass);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6943 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6944 this._trigger("drop", event, this.ui(draggable));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6945 return this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6946 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6947
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6948 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6949
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6950 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6951
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6952 ui: function(c) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6953 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6954 draggable: (c.currentItem || c.element),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6955 helper: c.helper,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6956 position: c.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6957 offset: c.positionAbs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6958 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6959 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6960
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6961 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6962
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6963 $.ui.intersect = function(draggable, droppable, toleranceMode) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6964
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6965 if (!droppable.offset) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6966 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6967 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6968
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6969 var draggableLeft, draggableTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6970 x1 = (draggable.positionAbs || draggable.position.absolute).left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6971 y1 = (draggable.positionAbs || draggable.position.absolute).top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6972 x2 = x1 + draggable.helperProportions.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6973 y2 = y1 + draggable.helperProportions.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6974 l = droppable.offset.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6975 t = droppable.offset.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6976 r = l + droppable.proportions().width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6977 b = t + droppable.proportions().height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6978
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6979 switch (toleranceMode) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6980 case "fit":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6981 return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6982 case "intersect":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6983 return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6984 x2 - (draggable.helperProportions.width / 2) < r && // Left Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6985 t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6986 y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6987 case "pointer":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6988 draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6989 draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6990 return isOverAxis( draggableTop, t, droppable.proportions().height ) && isOverAxis( draggableLeft, l, droppable.proportions().width );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6991 case "touch":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6992 return (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6993 (y1 >= t && y1 <= b) || // Top edge touching
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6994 (y2 >= t && y2 <= b) || // Bottom edge touching
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6995 (y1 < t && y2 > b) // Surrounded vertically
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6996 ) && (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6997 (x1 >= l && x1 <= r) || // Left edge touching
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6998 (x2 >= l && x2 <= r) || // Right edge touching
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6999 (x1 < l && x2 > r) // Surrounded horizontally
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7000 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7001 default:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7002 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7003 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7004
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7005 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7006
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7007 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7008 This manager tracks offsets of draggables and droppables
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7009 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7010 $.ui.ddmanager = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7011 current: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7012 droppables: { "default": [] },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7013 prepareOffsets: function(t, event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7014
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7015 var i, j,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7016 m = $.ui.ddmanager.droppables[t.options.scope] || [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7017 type = event ? event.type : null, // workaround for #2317
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7018 list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7019
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7020 droppablesLoop: for (i = 0; i < m.length; i++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7022 //No disabled and non-accepted
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7023 if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7024 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7025 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7026
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7027 // Filter out elements in the current dragged item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7028 for (j=0; j < list.length; j++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7029 if(list[j] === m[i].element[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7030 m[i].proportions().height = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7031 continue droppablesLoop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7032 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7033 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7034
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7035 m[i].visible = m[i].element.css("display") !== "none";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7036 if(!m[i].visible) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7037 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7038 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7039
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7040 //Activate the droppable if used directly from draggables
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7041 if(type === "mousedown") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7042 m[i]._activate.call(m[i], event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7043 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7044
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7045 m[ i ].offset = m[ i ].element.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7046 m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7048 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7049
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7050 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7051 drop: function(draggable, event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7052
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7053 var dropped = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7054 // Create a copy of the droppables in case the list changes during the drop (#9116)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7055 $.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7056
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7057 if(!this.options) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7058 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7059 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7060 if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7061 dropped = this._drop.call(this, event) || dropped;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7062 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7063
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7064 if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7065 this.isout = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7066 this.isover = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7067 this._deactivate.call(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7068 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7069
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7070 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7071 return dropped;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7072
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7073 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7074 dragStart: function( draggable, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7075 //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7076 draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7077 if( !draggable.options.refreshPositions ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7078 $.ui.ddmanager.prepareOffsets( draggable, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7079 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7080 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7081 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7082 drag: function(draggable, event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7083
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7084 //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7085 if(draggable.options.refreshPositions) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7086 $.ui.ddmanager.prepareOffsets(draggable, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7087 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7088
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7089 //Run through all droppables and check their positions based on specific tolerance options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7090 $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7091
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7092 if(this.options.disabled || this.greedyChild || !this.visible) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7093 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7094 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7095
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7096 var parentInstance, scope, parent,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7097 intersects = $.ui.intersect(draggable, this, this.options.tolerance),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7098 c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7099 if(!c) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7100 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7101 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7102
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7103 if (this.options.greedy) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7104 // find droppable parents with same scope
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7105 scope = this.options.scope;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7106 parent = this.element.parents(":data(ui-droppable)").filter(function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7107 return $.data(this, "ui-droppable").options.scope === scope;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7108 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7109
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7110 if (parent.length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7111 parentInstance = $.data(parent[0], "ui-droppable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7112 parentInstance.greedyChild = (c === "isover");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7113 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7114 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7115
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7116 // we just moved into a greedy child
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7117 if (parentInstance && c === "isover") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7118 parentInstance.isover = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7119 parentInstance.isout = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7120 parentInstance._out.call(parentInstance, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7121 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7122
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7123 this[c] = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7124 this[c === "isout" ? "isover" : "isout"] = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7125 this[c === "isover" ? "_over" : "_out"].call(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7126
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7127 // we just moved out of a greedy child
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7128 if (parentInstance && c === "isout") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7129 parentInstance.isout = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7130 parentInstance.isover = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7131 parentInstance._over.call(parentInstance, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7132 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7133 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7134
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7135 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7136 dragStop: function( draggable, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7137 draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7138 //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7139 if( !draggable.options.refreshPositions ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7140 $.ui.ddmanager.prepareOffsets( draggable, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7141 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7142 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7143 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7144
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7145 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7146 (function($, undefined) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7147
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7148 var dataSpace = "ui-effects-";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7149
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7150 $.effects = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7151 effect: {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7152 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7153
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7154 /*!
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7155 * jQuery Color Animations v2.1.2
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7156 * https://github.com/jquery/jquery-color
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7157 *
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7158 * Copyright 2013 jQuery Foundation and other contributors
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7159 * Released under the MIT license.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7160 * http://jquery.org/license
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7161 *
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7162 * Date: Wed Jan 16 08:47:09 2013 -0600
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7163 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7164 (function( jQuery, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7165
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7166 var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7167
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7168 // plusequals test for += 100 -= 100
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7169 rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7170 // a set of RE's that can match strings and generate color tuples.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7171 stringParsers = [{
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7172 re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7173 parse: function( execResult ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7174 return [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7175 execResult[ 1 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7176 execResult[ 2 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7177 execResult[ 3 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7178 execResult[ 4 ]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7179 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7180 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7181 }, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7182 re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7183 parse: function( execResult ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7184 return [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7185 execResult[ 1 ] * 2.55,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7186 execResult[ 2 ] * 2.55,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7187 execResult[ 3 ] * 2.55,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7188 execResult[ 4 ]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7189 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7190 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7191 }, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7192 // this regex ignores A-F because it's compared against an already lowercased string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7193 re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7194 parse: function( execResult ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7195 return [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7196 parseInt( execResult[ 1 ], 16 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7197 parseInt( execResult[ 2 ], 16 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7198 parseInt( execResult[ 3 ], 16 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7199 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7200 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7201 }, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7202 // this regex ignores A-F because it's compared against an already lowercased string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7203 re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7204 parse: function( execResult ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7205 return [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7206 parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7207 parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7208 parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7209 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7210 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7211 }, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7212 re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7213 space: "hsla",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7214 parse: function( execResult ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7215 return [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7216 execResult[ 1 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7217 execResult[ 2 ] / 100,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7218 execResult[ 3 ] / 100,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7219 execResult[ 4 ]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7220 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7221 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7222 }],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7223
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7224 // jQuery.Color( )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7225 color = jQuery.Color = function( color, green, blue, alpha ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7226 return new jQuery.Color.fn.parse( color, green, blue, alpha );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7227 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7228 spaces = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7229 rgba: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7230 props: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7231 red: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7232 idx: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7233 type: "byte"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7234 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7235 green: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7236 idx: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7237 type: "byte"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7238 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7239 blue: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7240 idx: 2,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7241 type: "byte"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7242 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7243 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7244 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7245
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7246 hsla: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7247 props: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7248 hue: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7249 idx: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7250 type: "degrees"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7251 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7252 saturation: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7253 idx: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7254 type: "percent"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7255 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7256 lightness: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7257 idx: 2,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7258 type: "percent"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7259 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7260 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7261 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7262 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7263 propTypes = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7264 "byte": {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7265 floor: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7266 max: 255
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7267 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7268 "percent": {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7269 max: 1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7270 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7271 "degrees": {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7272 mod: 360,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7273 floor: true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7274 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7275 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7276 support = color.support = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7277
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7278 // element for support tests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7279 supportElem = jQuery( "<p>" )[ 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7280
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7281 // colors = jQuery.Color.names
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7282 colors,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7283
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7284 // local aliases of functions called often
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7285 each = jQuery.each;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7286
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7287 // determine rgba support immediately
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7288 supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7289 support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7290
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7291 // define cache name and alpha properties
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7292 // for rgba and hsla spaces
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7293 each( spaces, function( spaceName, space ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7294 space.cache = "_" + spaceName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7295 space.props.alpha = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7296 idx: 3,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7297 type: "percent",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7298 def: 1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7299 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7300 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7301
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7302 function clamp( value, prop, allowEmpty ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7303 var type = propTypes[ prop.type ] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7304
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7305 if ( value == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7306 return (allowEmpty || !prop.def) ? null : prop.def;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7307 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7308
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7309 // ~~ is an short way of doing floor for positive numbers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7310 value = type.floor ? ~~value : parseFloat( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7311
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7312 // IE will pass in empty strings as value for alpha,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7313 // which will hit this case
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7314 if ( isNaN( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7315 return prop.def;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7316 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7317
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7318 if ( type.mod ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7319 // we add mod before modding to make sure that negatives values
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7320 // get converted properly: -10 -> 350
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7321 return (value + type.mod) % type.mod;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7322 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7323
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7324 // for now all property types without mod have min and max
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7325 return 0 > value ? 0 : type.max < value ? type.max : value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7326 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7327
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7328 function stringParse( string ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7329 var inst = color(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7330 rgba = inst._rgba = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7331
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7332 string = string.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7333
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7334 each( stringParsers, function( i, parser ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7335 var parsed,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7336 match = parser.re.exec( string ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7337 values = match && parser.parse( match ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7338 spaceName = parser.space || "rgba";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7339
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7340 if ( values ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7341 parsed = inst[ spaceName ]( values );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7342
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7343 // if this was an rgba parse the assignment might happen twice
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7344 // oh well....
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7345 inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7346 rgba = inst._rgba = parsed._rgba;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7347
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7348 // exit each( stringParsers ) here because we matched
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7349 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7350 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7351 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7352
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7353 // Found a stringParser that handled it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7354 if ( rgba.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7355
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7356 // if this came from a parsed string, force "transparent" when alpha is 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7357 // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7358 if ( rgba.join() === "0,0,0,0" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7359 jQuery.extend( rgba, colors.transparent );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7360 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7361 return inst;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7362 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7364 // named colors
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7365 return colors[ string ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7366 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7367
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7368 color.fn = jQuery.extend( color.prototype, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7369 parse: function( red, green, blue, alpha ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7370 if ( red === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7371 this._rgba = [ null, null, null, null ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7372 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7373 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7374 if ( red.jquery || red.nodeType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7375 red = jQuery( red ).css( green );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7376 green = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7377 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7378
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7379 var inst = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7380 type = jQuery.type( red ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7381 rgba = this._rgba = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7382
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7383 // more than 1 argument specified - assume ( red, green, blue, alpha )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7384 if ( green !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7385 red = [ red, green, blue, alpha ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7386 type = "array";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7387 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7388
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7389 if ( type === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7390 return this.parse( stringParse( red ) || colors._default );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7391 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7392
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7393 if ( type === "array" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7394 each( spaces.rgba.props, function( key, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7395 rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7396 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7397 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7398 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7399
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7400 if ( type === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7401 if ( red instanceof color ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7402 each( spaces, function( spaceName, space ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7403 if ( red[ space.cache ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7404 inst[ space.cache ] = red[ space.cache ].slice();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7405 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7406 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7407 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7408 each( spaces, function( spaceName, space ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7409 var cache = space.cache;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7410 each( space.props, function( key, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7411
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7412 // if the cache doesn't exist, and we know how to convert
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7413 if ( !inst[ cache ] && space.to ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7414
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7415 // if the value was null, we don't need to copy it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7416 // if the key was alpha, we don't need to copy it either
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7417 if ( key === "alpha" || red[ key ] == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7418 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7419 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7420 inst[ cache ] = space.to( inst._rgba );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7421 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7422
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7423 // this is the only case where we allow nulls for ALL properties.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7424 // call clamp with alwaysAllowEmpty
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7425 inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7426 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7427
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7428 // everything defined but alpha?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7429 if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7430 // use the default of 1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7431 inst[ cache ][ 3 ] = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7432 if ( space.from ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7433 inst._rgba = space.from( inst[ cache ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7434 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7435 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7436 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7437 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7438 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7439 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7440 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7441 is: function( compare ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7442 var is = color( compare ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7443 same = true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7444 inst = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7445
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7446 each( spaces, function( _, space ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7447 var localCache,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7448 isCache = is[ space.cache ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7449 if (isCache) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7450 localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7451 each( space.props, function( _, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7452 if ( isCache[ prop.idx ] != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7453 same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7454 return same;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7455 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7456 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7457 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7458 return same;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7459 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7460 return same;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7461 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7462 _space: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7463 var used = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7464 inst = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7465 each( spaces, function( spaceName, space ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7466 if ( inst[ space.cache ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7467 used.push( spaceName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7468 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7469 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7470 return used.pop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7471 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7472 transition: function( other, distance ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7473 var end = color( other ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7474 spaceName = end._space(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7475 space = spaces[ spaceName ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7476 startColor = this.alpha() === 0 ? color( "transparent" ) : this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7477 start = startColor[ space.cache ] || space.to( startColor._rgba ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7478 result = start.slice();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7479
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7480 end = end[ space.cache ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7481 each( space.props, function( key, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7482 var index = prop.idx,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7483 startValue = start[ index ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7484 endValue = end[ index ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7485 type = propTypes[ prop.type ] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7486
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7487 // if null, don't override start value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7488 if ( endValue === null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7489 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7490 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7491 // if null - use end
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7492 if ( startValue === null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7493 result[ index ] = endValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7494 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7495 if ( type.mod ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7496 if ( endValue - startValue > type.mod / 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7497 startValue += type.mod;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7498 } else if ( startValue - endValue > type.mod / 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7499 startValue -= type.mod;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7500 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7501 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7502 result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7503 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7504 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7505 return this[ spaceName ]( result );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7506 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7507 blend: function( opaque ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7508 // if we are already opaque - return ourself
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7509 if ( this._rgba[ 3 ] === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7510 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7511 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7513 var rgb = this._rgba.slice(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7514 a = rgb.pop(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7515 blend = color( opaque )._rgba;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7516
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7517 return color( jQuery.map( rgb, function( v, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7518 return ( 1 - a ) * blend[ i ] + a * v;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7519 }));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7520 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7521 toRgbaString: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7522 var prefix = "rgba(",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7523 rgba = jQuery.map( this._rgba, function( v, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7524 return v == null ? ( i > 2 ? 1 : 0 ) : v;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7525 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7526
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7527 if ( rgba[ 3 ] === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7528 rgba.pop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7529 prefix = "rgb(";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7530 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7532 return prefix + rgba.join() + ")";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7533 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7534 toHslaString: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7535 var prefix = "hsla(",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7536 hsla = jQuery.map( this.hsla(), function( v, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7537 if ( v == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7538 v = i > 2 ? 1 : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7539 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7540
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7541 // catch 1 and 2
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7542 if ( i && i < 3 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7543 v = Math.round( v * 100 ) + "%";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7544 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7545 return v;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7546 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7547
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7548 if ( hsla[ 3 ] === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7549 hsla.pop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7550 prefix = "hsl(";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7551 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7552 return prefix + hsla.join() + ")";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7553 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7554 toHexString: function( includeAlpha ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7555 var rgba = this._rgba.slice(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7556 alpha = rgba.pop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7557
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7558 if ( includeAlpha ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7559 rgba.push( ~~( alpha * 255 ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7560 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7561
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7562 return "#" + jQuery.map( rgba, function( v ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7563
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7564 // default to 0 when nulls exist
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7565 v = ( v || 0 ).toString( 16 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7566 return v.length === 1 ? "0" + v : v;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7567 }).join("");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7568 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7569 toString: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7570 return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7571 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7572 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7573 color.fn.parse.prototype = color.fn;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7574
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7575 // hsla conversions adapted from:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7576 // https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7577
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7578 function hue2rgb( p, q, h ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7579 h = ( h + 1 ) % 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7580 if ( h * 6 < 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7581 return p + (q - p) * h * 6;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7582 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7583 if ( h * 2 < 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7584 return q;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7585 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7586 if ( h * 3 < 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7587 return p + (q - p) * ((2/3) - h) * 6;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7588 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7589 return p;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7590 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7591
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7592 spaces.hsla.to = function ( rgba ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7593 if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7594 return [ null, null, null, rgba[ 3 ] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7595 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7596 var r = rgba[ 0 ] / 255,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7597 g = rgba[ 1 ] / 255,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7598 b = rgba[ 2 ] / 255,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7599 a = rgba[ 3 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7600 max = Math.max( r, g, b ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7601 min = Math.min( r, g, b ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7602 diff = max - min,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7603 add = max + min,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7604 l = add * 0.5,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7605 h, s;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7606
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7607 if ( min === max ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7608 h = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7609 } else if ( r === max ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7610 h = ( 60 * ( g - b ) / diff ) + 360;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7611 } else if ( g === max ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7612 h = ( 60 * ( b - r ) / diff ) + 120;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7613 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7614 h = ( 60 * ( r - g ) / diff ) + 240;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7615 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7616
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7617 // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7618 // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7619 if ( diff === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7620 s = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7621 } else if ( l <= 0.5 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7622 s = diff / add;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7623 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7624 s = diff / ( 2 - add );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7625 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7626 return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7627 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7628
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7629 spaces.hsla.from = function ( hsla ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7630 if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7631 return [ null, null, null, hsla[ 3 ] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7632 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7633 var h = hsla[ 0 ] / 360,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7634 s = hsla[ 1 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7635 l = hsla[ 2 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7636 a = hsla[ 3 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7637 q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7638 p = 2 * l - q;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7639
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7640 return [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7641 Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7642 Math.round( hue2rgb( p, q, h ) * 255 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7643 Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7644 a
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7645 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7646 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7647
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7648
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7649 each( spaces, function( spaceName, space ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7650 var props = space.props,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7651 cache = space.cache,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7652 to = space.to,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7653 from = space.from;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7654
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7655 // makes rgba() and hsla()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7656 color.fn[ spaceName ] = function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7657
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7658 // generate a cache for this space if it doesn't exist
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7659 if ( to && !this[ cache ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7660 this[ cache ] = to( this._rgba );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7661 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7662 if ( value === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7663 return this[ cache ].slice();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7664 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7665
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7666 var ret,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7667 type = jQuery.type( value ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7668 arr = ( type === "array" || type === "object" ) ? value : arguments,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7669 local = this[ cache ].slice();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7670
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7671 each( props, function( key, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7672 var val = arr[ type === "object" ? key : prop.idx ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7673 if ( val == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7674 val = local[ prop.idx ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7675 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7676 local[ prop.idx ] = clamp( val, prop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7677 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7678
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7679 if ( from ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7680 ret = color( from( local ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7681 ret[ cache ] = local;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7682 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7683 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7684 return color( local );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7685 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7686 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7687
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7688 // makes red() green() blue() alpha() hue() saturation() lightness()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7689 each( props, function( key, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7690 // alpha is included in more than one space
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7691 if ( color.fn[ key ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7692 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7693 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7694 color.fn[ key ] = function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7695 var vtype = jQuery.type( value ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7696 fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7697 local = this[ fn ](),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7698 cur = local[ prop.idx ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7699 match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7700
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7701 if ( vtype === "undefined" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7702 return cur;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7703 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7705 if ( vtype === "function" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7706 value = value.call( this, cur );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7707 vtype = jQuery.type( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7708 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7709 if ( value == null && prop.empty ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7710 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7711 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7712 if ( vtype === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7713 match = rplusequals.exec( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7714 if ( match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7715 value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7716 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7717 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7718 local[ prop.idx ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7719 return this[ fn ]( local );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7720 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7721 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7722 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7723
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7724 // add cssHook and .fx.step function for each named hook.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7725 // accept a space separated string of properties
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7726 color.hook = function( hook ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7727 var hooks = hook.split( " " );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7728 each( hooks, function( i, hook ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7729 jQuery.cssHooks[ hook ] = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7730 set: function( elem, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7731 var parsed, curElem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7732 backgroundColor = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7733
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7734 if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7735 value = color( parsed || value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7736 if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7737 curElem = hook === "backgroundColor" ? elem.parentNode : elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7738 while (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7739 (backgroundColor === "" || backgroundColor === "transparent") &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7740 curElem && curElem.style
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7741 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7742 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7743 backgroundColor = jQuery.css( curElem, "backgroundColor" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7744 curElem = curElem.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7745 } catch ( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7746 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7747 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7748
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7749 value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7750 backgroundColor :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7751 "_default" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7752 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7753
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7754 value = value.toRgbaString();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7755 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7756 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7757 elem.style[ hook ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7758 } catch( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7759 // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7760 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7761 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7762 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7763 jQuery.fx.step[ hook ] = function( fx ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7764 if ( !fx.colorInit ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7765 fx.start = color( fx.elem, hook );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7766 fx.end = color( fx.end );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7767 fx.colorInit = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7768 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7769 jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7770 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7771 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7772
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7773 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7774
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7775 color.hook( stepHooks );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7776
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7777 jQuery.cssHooks.borderColor = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7778 expand: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7779 var expanded = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7780
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7781 each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7782 expanded[ "border" + part + "Color" ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7783 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7784 return expanded;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7785 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7786 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7787
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7788 // Basic color names only.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7789 // Usage of any of the other color names requires adding yourself or including
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7790 // jquery.color.svg-names.js.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7791 colors = jQuery.Color.names = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7792 // 4.1. Basic color keywords
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7793 aqua: "#00ffff",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7794 black: "#000000",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7795 blue: "#0000ff",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7796 fuchsia: "#ff00ff",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7797 gray: "#808080",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7798 green: "#008000",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7799 lime: "#00ff00",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7800 maroon: "#800000",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7801 navy: "#000080",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7802 olive: "#808000",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7803 purple: "#800080",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7804 red: "#ff0000",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7805 silver: "#c0c0c0",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7806 teal: "#008080",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7807 white: "#ffffff",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7808 yellow: "#ffff00",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7809
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7810 // 4.2.3. "transparent" color keyword
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7811 transparent: [ null, null, null, 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7812
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7813 _default: "#ffffff"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7814 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7815
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7816 })( jQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7817
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7818
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7819 /******************************************************************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7820 /****************************** CLASS ANIMATIONS ******************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7821 /******************************************************************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7822 (function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7824 var classAnimationActions = [ "add", "remove", "toggle" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7825 shorthandStyles = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7826 border: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7827 borderBottom: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7828 borderColor: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7829 borderLeft: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7830 borderRight: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7831 borderTop: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7832 borderWidth: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7833 margin: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7834 padding: 1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7835 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7836
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7837 $.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7838 $.fx.step[ prop ] = function( fx ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7839 if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7840 jQuery.style( fx.elem, prop, fx.end );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7841 fx.setAttr = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7842 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7843 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7844 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7845
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7846 function getElementStyles( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7847 var key, len,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7848 style = elem.ownerDocument.defaultView ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7849 elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7850 elem.currentStyle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7851 styles = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7852
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7853 if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7854 len = style.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7855 while ( len-- ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7856 key = style[ len ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7857 if ( typeof style[ key ] === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7858 styles[ $.camelCase( key ) ] = style[ key ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7859 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7860 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7861 // support: Opera, IE <9
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7862 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7863 for ( key in style ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7864 if ( typeof style[ key ] === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7865 styles[ key ] = style[ key ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7866 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7867 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7868 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7869
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7870 return styles;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7871 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7872
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7873
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7874 function styleDifference( oldStyle, newStyle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7875 var diff = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7876 name, value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7877
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7878 for ( name in newStyle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7879 value = newStyle[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7880 if ( oldStyle[ name ] !== value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7881 if ( !shorthandStyles[ name ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7882 if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7883 diff[ name ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7884 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7885 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7886 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7887 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7888
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7889 return diff;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7890 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7891
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7892 // support: jQuery <1.8
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7893 if ( !$.fn.addBack ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7894 $.fn.addBack = function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7895 return this.add( selector == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7896 this.prevObject : this.prevObject.filter( selector )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7897 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7898 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7899 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7900
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7901 $.effects.animateClass = function( value, duration, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7902 var o = $.speed( duration, easing, callback );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7903
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7904 return this.queue( function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7905 var animated = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7906 baseClass = animated.attr( "class" ) || "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7907 applyClassChange,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7908 allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7909
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7910 // map the animated objects to store the original styles.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7911 allAnimations = allAnimations.map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7912 var el = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7913 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7914 el: el,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7915 start: getElementStyles( this )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7916 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7917 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7918
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7919 // apply class change
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7920 applyClassChange = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7921 $.each( classAnimationActions, function(i, action) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7922 if ( value[ action ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7923 animated[ action + "Class" ]( value[ action ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7924 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7925 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7926 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7927 applyClassChange();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7928
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7929 // map all animated objects again - calculate new styles and diff
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7930 allAnimations = allAnimations.map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7931 this.end = getElementStyles( this.el[ 0 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7932 this.diff = styleDifference( this.start, this.end );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7933 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7934 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7935
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7936 // apply original class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7937 animated.attr( "class", baseClass );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7938
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7939 // map all animated objects again - this time collecting a promise
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7940 allAnimations = allAnimations.map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7941 var styleInfo = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7942 dfd = $.Deferred(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7943 opts = $.extend({}, o, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7944 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7945 complete: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7946 dfd.resolve( styleInfo );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7947 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7948 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7949
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7950 this.el.animate( this.diff, opts );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7951 return dfd.promise();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7952 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7953
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7954 // once all animations have completed:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7955 $.when.apply( $, allAnimations.get() ).done(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7957 // set the final class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7958 applyClassChange();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7959
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7960 // for each animated element,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7961 // clear all css properties that were animated
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7962 $.each( arguments, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7963 var el = this.el;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7964 $.each( this.diff, function(key) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7965 el.css( key, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7966 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7967 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7968
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7969 // this is guarnteed to be there if you use jQuery.speed()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7970 // it also handles dequeuing the next anim...
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7971 o.complete.call( animated[ 0 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7972 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7973 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7974 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7975
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7976 $.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7977 addClass: (function( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7978 return function( classNames, speed, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7979 return speed ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7980 $.effects.animateClass.call( this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7981 { add: classNames }, speed, easing, callback ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7982 orig.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7983 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7984 })( $.fn.addClass ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7985
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7986 removeClass: (function( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7987 return function( classNames, speed, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7988 return arguments.length > 1 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7989 $.effects.animateClass.call( this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7990 { remove: classNames }, speed, easing, callback ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7991 orig.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7992 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7993 })( $.fn.removeClass ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7994
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7995 toggleClass: (function( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7996 return function( classNames, force, speed, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7997 if ( typeof force === "boolean" || force === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7998 if ( !speed ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7999 // without speed parameter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8000 return orig.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8001 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8002 return $.effects.animateClass.call( this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8003 (force ? { add: classNames } : { remove: classNames }),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8004 speed, easing, callback );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8005 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8006 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8007 // without force parameter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8008 return $.effects.animateClass.call( this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8009 { toggle: classNames }, force, speed, easing );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8010 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8011 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8012 })( $.fn.toggleClass ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8013
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8014 switchClass: function( remove, add, speed, easing, callback) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8015 return $.effects.animateClass.call( this, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8016 add: add,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8017 remove: remove
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8018 }, speed, easing, callback );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8019 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8020 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8022 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8023
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8024 /******************************************************************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8025 /*********************************** EFFECTS **********************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8026 /******************************************************************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8027
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8028 (function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8029
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8030 $.extend( $.effects, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8031 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8032
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8033 // Saves a set of properties in a data storage
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8034 save: function( element, set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8035 for( var i=0; i < set.length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8036 if ( set[ i ] !== null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8037 element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8038 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8039 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8040 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8041
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8042 // Restores a set of previously saved properties from a data storage
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8043 restore: function( element, set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8044 var val, i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8045 for( i=0; i < set.length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8046 if ( set[ i ] !== null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8047 val = element.data( dataSpace + set[ i ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8048 // support: jQuery 1.6.2
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8049 // http://bugs.jquery.com/ticket/9917
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8050 // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8051 // We can't differentiate between "" and 0 here, so we just assume
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8052 // empty string since it's likely to be a more common value...
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8053 if ( val === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8054 val = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8055 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8056 element.css( set[ i ], val );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8057 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8058 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8059 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8060
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8061 setMode: function( el, mode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8062 if (mode === "toggle") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8063 mode = el.is( ":hidden" ) ? "show" : "hide";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8064 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8065 return mode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8066 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8067
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8068 // Translates a [top,left] array into a baseline value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8069 // this should be a little more flexible in the future to handle a string & hash
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8070 getBaseline: function( origin, original ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8071 var y, x;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8072 switch ( origin[ 0 ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8073 case "top": y = 0; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8074 case "middle": y = 0.5; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8075 case "bottom": y = 1; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8076 default: y = origin[ 0 ] / original.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8077 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8078 switch ( origin[ 1 ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8079 case "left": x = 0; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8080 case "center": x = 0.5; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8081 case "right": x = 1; break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8082 default: x = origin[ 1 ] / original.width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8083 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8084 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8085 x: x,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8086 y: y
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8087 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8088 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8089
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8090 // Wraps the element around a wrapper that copies position properties
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8091 createWrapper: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8092
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8093 // if the element is already wrapped, return it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8094 if ( element.parent().is( ".ui-effects-wrapper" )) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8095 return element.parent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8096 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8097
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8098 // wrap the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8099 var props = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8100 width: element.outerWidth(true),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8101 height: element.outerHeight(true),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8102 "float": element.css( "float" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8103 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8104 wrapper = $( "<div></div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8105 .addClass( "ui-effects-wrapper" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8106 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8107 fontSize: "100%",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8108 background: "transparent",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8109 border: "none",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8110 margin: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8111 padding: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8112 }),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8113 // Store the size in case width/height are defined in % - Fixes #5245
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8114 size = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8115 width: element.width(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8116 height: element.height()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8117 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8118 active = document.activeElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8119
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8120 // support: Firefox
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8121 // Firefox incorrectly exposes anonymous content
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8122 // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8123 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8124 active.id;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8125 } catch( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8126 active = document.body;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8127 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8128
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8129 element.wrap( wrapper );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8130
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8131 // Fixes #7595 - Elements lose focus when wrapped.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8132 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8133 $( active ).focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8134 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8135
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8136 wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8137
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8138 // transfer positioning properties to the wrapper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8139 if ( element.css( "position" ) === "static" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8140 wrapper.css({ position: "relative" });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8141 element.css({ position: "relative" });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8142 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8143 $.extend( props, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8144 position: element.css( "position" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8145 zIndex: element.css( "z-index" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8146 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8147 $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8148 props[ pos ] = element.css( pos );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8149 if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8150 props[ pos ] = "auto";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8151 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8152 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8153 element.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8154 position: "relative",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8155 top: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8156 left: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8157 right: "auto",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8158 bottom: "auto"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8159 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8160 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8161 element.css(size);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8162
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8163 return wrapper.css( props ).show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8164 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8165
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8166 removeWrapper: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8167 var active = document.activeElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8168
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8169 if ( element.parent().is( ".ui-effects-wrapper" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8170 element.parent().replaceWith( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8171
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8172 // Fixes #7595 - Elements lose focus when wrapped.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8173 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8174 $( active ).focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8175 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8176 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8177
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8178
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8179 return element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8180 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8181
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8182 setTransition: function( element, list, factor, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8183 value = value || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8184 $.each( list, function( i, x ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8185 var unit = element.cssUnit( x );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8186 if ( unit[ 0 ] > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8187 value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8188 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8189 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8190 return value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8191 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8192 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8193
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8194 // return an effect options object for the given parameters:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8195 function _normalizeArguments( effect, options, speed, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8196
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8197 // allow passing all options as the first parameter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8198 if ( $.isPlainObject( effect ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8199 options = effect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8200 effect = effect.effect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8201 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8202
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8203 // convert to an object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8204 effect = { effect: effect };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8205
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8206 // catch (effect, null, ...)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8207 if ( options == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8208 options = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8209 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8210
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8211 // catch (effect, callback)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8212 if ( $.isFunction( options ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8213 callback = options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8214 speed = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8215 options = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8216 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8217
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8218 // catch (effect, speed, ?)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8219 if ( typeof options === "number" || $.fx.speeds[ options ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8220 callback = speed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8221 speed = options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8222 options = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8223 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8224
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8225 // catch (effect, options, callback)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8226 if ( $.isFunction( speed ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8227 callback = speed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8228 speed = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8229 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8230
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8231 // add options to effect
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8232 if ( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8233 $.extend( effect, options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8234 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8235
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8236 speed = speed || options.duration;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8237 effect.duration = $.fx.off ? 0 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8238 typeof speed === "number" ? speed :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8239 speed in $.fx.speeds ? $.fx.speeds[ speed ] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8240 $.fx.speeds._default;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8241
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8242 effect.complete = callback || options.complete;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8243
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8244 return effect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8245 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8246
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8247 function standardAnimationOption( option ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8248 // Valid standard speeds (nothing, number, named speed)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8249 if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8250 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8251 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8252
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8253 // Invalid strings - treat as "normal" speed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8254 if ( typeof option === "string" && !$.effects.effect[ option ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8255 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8256 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8257
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8258 // Complete callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8259 if ( $.isFunction( option ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8260 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8261 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8262
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8263 // Options hash (but not naming an effect)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8264 if ( typeof option === "object" && !option.effect ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8265 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8266 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8267
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8268 // Didn't match any standard API
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8269 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8270 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8271
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8272 $.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8273 effect: function( /* effect, options, speed, callback */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8274 var args = _normalizeArguments.apply( this, arguments ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8275 mode = args.mode,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8276 queue = args.queue,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8277 effectMethod = $.effects.effect[ args.effect ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8278
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8279 if ( $.fx.off || !effectMethod ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8280 // delegate to the original method (e.g., .show()) if possible
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8281 if ( mode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8282 return this[ mode ]( args.duration, args.complete );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8283 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8284 return this.each( function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8285 if ( args.complete ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8286 args.complete.call( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8287 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8288 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8289 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8290 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8291
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8292 function run( next ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8293 var elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8294 complete = args.complete,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8295 mode = args.mode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8296
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8297 function done() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8298 if ( $.isFunction( complete ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8299 complete.call( elem[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8300 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8301 if ( $.isFunction( next ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8302 next();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8303 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8304 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8305
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8306 // If the element already has the correct final state, delegate to
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8307 // the core methods so the internal tracking of "olddisplay" works.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8308 if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8309 elem[ mode ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8310 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8311 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8312 effectMethod.call( elem[0], args, done );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8313 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8314 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8315
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8316 return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8317 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8318
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8319 show: (function( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8320 return function( option ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8321 if ( standardAnimationOption( option ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8322 return orig.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8323 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8324 var args = _normalizeArguments.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8325 args.mode = "show";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8326 return this.effect.call( this, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8327 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8328 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8329 })( $.fn.show ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8330
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8331 hide: (function( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8332 return function( option ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8333 if ( standardAnimationOption( option ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8334 return orig.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8335 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8336 var args = _normalizeArguments.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8337 args.mode = "hide";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8338 return this.effect.call( this, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8339 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8340 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8341 })( $.fn.hide ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8342
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8343 toggle: (function( orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8344 return function( option ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8345 if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8346 return orig.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8347 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8348 var args = _normalizeArguments.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8349 args.mode = "toggle";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8350 return this.effect.call( this, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8351 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8352 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8353 })( $.fn.toggle ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8354
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8355 // helper functions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8356 cssUnit: function(key) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8357 var style = this.css( key ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8358 val = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8359
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8360 $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8361 if ( style.indexOf( unit ) > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8362 val = [ parseFloat( style ), unit ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8363 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8364 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8365 return val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8366 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8367 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8368
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8369 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8370
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8371 /******************************************************************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8372 /*********************************** EASING ***********************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8373 /******************************************************************************/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8374
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8375 (function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8376
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8377 // based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8378
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8379 var baseEasings = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8380
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8381 $.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8382 baseEasings[ name ] = function( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8383 return Math.pow( p, i + 2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8384 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8385 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8386
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8387 $.extend( baseEasings, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8388 Sine: function ( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8389 return 1 - Math.cos( p * Math.PI / 2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8390 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8391 Circ: function ( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8392 return 1 - Math.sqrt( 1 - p * p );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8393 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8394 Elastic: function( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8395 return p === 0 || p === 1 ? p :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8396 -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8397 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8398 Back: function( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8399 return p * p * ( 3 * p - 2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8400 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8401 Bounce: function ( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8402 var pow2,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8403 bounce = 4;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8404
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8405 while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8406 return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8407 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8408 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8409
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8410 $.each( baseEasings, function( name, easeIn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8411 $.easing[ "easeIn" + name ] = easeIn;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8412 $.easing[ "easeOut" + name ] = function( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8413 return 1 - easeIn( 1 - p );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8414 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8415 $.easing[ "easeInOut" + name ] = function( p ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8416 return p < 0.5 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8417 easeIn( p * 2 ) / 2 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8418 1 - easeIn( p * -2 + 2 ) / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8419 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8420 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8421
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8422 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8423
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8424 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8425 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8426
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8427 var rvertical = /up|down|vertical/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8428 rpositivemotion = /up|left|vertical|horizontal/;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8429
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8430 $.effects.effect.blind = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8431 // Create element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8432 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8433 props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8434 mode = $.effects.setMode( el, o.mode || "hide" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8435 direction = o.direction || "up",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8436 vertical = rvertical.test( direction ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8437 ref = vertical ? "height" : "width",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8438 ref2 = vertical ? "top" : "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8439 motion = rpositivemotion.test( direction ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8440 animation = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8441 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8442 wrapper, distance, margin;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8443
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8444 // if already wrapped, the wrapper's properties are my property. #6245
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8445 if ( el.parent().is( ".ui-effects-wrapper" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8446 $.effects.save( el.parent(), props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8447 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8448 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8449 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8450 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8451 wrapper = $.effects.createWrapper( el ).css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8452 overflow: "hidden"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8453 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8454
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8455 distance = wrapper[ ref ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8456 margin = parseFloat( wrapper.css( ref2 ) ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8457
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8458 animation[ ref ] = show ? distance : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8459 if ( !motion ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8460 el
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8461 .css( vertical ? "bottom" : "right", 0 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8462 .css( vertical ? "top" : "left", "auto" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8463 .css({ position: "absolute" });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8464
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8465 animation[ ref2 ] = show ? margin : distance + margin;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8466 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8467
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8468 // start at 0 if we are showing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8469 if ( show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8470 wrapper.css( ref, 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8471 if ( ! motion ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8472 wrapper.css( ref2, margin + distance );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8473 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8474 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8475
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8476 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8477 wrapper.animate( animation, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8478 duration: o.duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8479 easing: o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8480 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8481 complete: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8482 if ( mode === "hide" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8483 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8484 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8485 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8486 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8487 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8488 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8489 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8490
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8491 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8492
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8493 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8494 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8495
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8496 $.effects.effect.bounce = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8497 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8498 props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8499
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8500 // defaults:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8501 mode = $.effects.setMode( el, o.mode || "effect" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8502 hide = mode === "hide",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8503 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8504 direction = o.direction || "up",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8505 distance = o.distance,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8506 times = o.times || 5,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8507
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8508 // number of internal animations
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8509 anims = times * 2 + ( show || hide ? 1 : 0 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8510 speed = o.duration / anims,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8511 easing = o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8513 // utility:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8514 ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8515 motion = ( direction === "up" || direction === "left" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8516 i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8517 upAnim,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8518 downAnim,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8519
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8520 // we will need to re-assemble the queue to stack our animations in place
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8521 queue = el.queue(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8522 queuelen = queue.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8523
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8524 // Avoid touching opacity to prevent clearType and PNG issues in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8525 if ( show || hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8526 props.push( "opacity" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8527 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8528
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8529 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8530 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8531 $.effects.createWrapper( el ); // Create Wrapper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8532
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8533 // default distance for the BIGGEST bounce is the outer Distance / 3
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8534 if ( !distance ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8535 distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8536 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8537
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8538 if ( show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8539 downAnim = { opacity: 1 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8540 downAnim[ ref ] = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8541
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8542 // if we are showing, force opacity 0 and set the initial position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8543 // then do the "first" animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8544 el.css( "opacity", 0 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8545 .css( ref, motion ? -distance * 2 : distance * 2 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8546 .animate( downAnim, speed, easing );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8547 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8548
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8549 // start at the smallest distance if we are hiding
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8550 if ( hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8551 distance = distance / Math.pow( 2, times - 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8552 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8553
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8554 downAnim = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8555 downAnim[ ref ] = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8556 // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8557 for ( i = 0; i < times; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8558 upAnim = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8559 upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8560
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8561 el.animate( upAnim, speed, easing )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8562 .animate( downAnim, speed, easing );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8563
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8564 distance = hide ? distance * 2 : distance / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8565 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8566
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8567 // Last Bounce when Hiding
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8568 if ( hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8569 upAnim = { opacity: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8570 upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8571
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8572 el.animate( upAnim, speed, easing );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8573 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8574
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8575 el.queue(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8576 if ( hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8577 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8578 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8579 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8580 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8581 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8582 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8583
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8584 // inject all the animations we just queued to be first in line (after "inprogress")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8585 if ( queuelen > 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8586 queue.splice.apply( queue,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8587 [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8588 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8589 el.dequeue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8590
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8591 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8592
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8593 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8594 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8596 $.effects.effect.clip = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8597 // Create element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8598 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8599 props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8600 mode = $.effects.setMode( el, o.mode || "hide" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8601 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8602 direction = o.direction || "vertical",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8603 vert = direction === "vertical",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8604 size = vert ? "height" : "width",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8605 position = vert ? "top" : "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8606 animation = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8607 wrapper, animate, distance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8608
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8609 // Save & Show
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8610 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8611 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8612
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8613 // Create Wrapper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8614 wrapper = $.effects.createWrapper( el ).css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8615 overflow: "hidden"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8616 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8617 animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8618 distance = animate[ size ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8619
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8620 // Shift
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8621 if ( show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8622 animate.css( size, 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8623 animate.css( position, distance / 2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8624 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8625
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8626 // Create Animation Object:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8627 animation[ size ] = show ? distance : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8628 animation[ position ] = show ? 0 : distance / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8629
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8630 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8631 animate.animate( animation, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8632 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8633 duration: o.duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8634 easing: o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8635 complete: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8636 if ( !show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8637 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8638 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8639 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8640 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8641 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8642 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8643 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8644
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8645 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8646
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8647 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8648 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8649
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8650 $.effects.effect.drop = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8651
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8652 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8653 props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8654 mode = $.effects.setMode( el, o.mode || "hide" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8655 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8656 direction = o.direction || "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8657 ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8658 motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8659 animation = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8660 opacity: show ? 1 : 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8661 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8662 distance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8663
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8664 // Adjust
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8665 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8666 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8667 $.effects.createWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8668
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8669 distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8670
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8671 if ( show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8672 el
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8673 .css( "opacity", 0 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8674 .css( ref, motion === "pos" ? -distance : distance );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8675 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8676
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8677 // Animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8678 animation[ ref ] = ( show ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8679 ( motion === "pos" ? "+=" : "-=" ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8680 ( motion === "pos" ? "-=" : "+=" ) ) +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8681 distance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8682
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8683 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8684 el.animate( animation, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8685 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8686 duration: o.duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8687 easing: o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8688 complete: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8689 if ( mode === "hide" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8690 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8691 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8692 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8693 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8694 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8695 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8696 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8697 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8698
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8699 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8700 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8701
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8702 $.effects.effect.explode = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8703
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8704 var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8705 cells = rows,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8706 el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8707 mode = $.effects.setMode( el, o.mode || "hide" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8708 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8709
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8710 // show and then visibility:hidden the element before calculating offset
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8711 offset = el.show().css( "visibility", "hidden" ).offset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8712
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8713 // width and height of a piece
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8714 width = Math.ceil( el.outerWidth() / cells ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8715 height = Math.ceil( el.outerHeight() / rows ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8716 pieces = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8717
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8718 // loop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8719 i, j, left, top, mx, my;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8720
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8721 // children animate complete:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8722 function childComplete() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8723 pieces.push( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8724 if ( pieces.length === rows * cells ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8725 animComplete();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8726 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8727 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8728
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8729 // clone the element for each row and cell.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8730 for( i = 0; i < rows ; i++ ) { // ===>
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8731 top = offset.top + i * height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8732 my = i - ( rows - 1 ) / 2 ;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8733
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8734 for( j = 0; j < cells ; j++ ) { // |||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8735 left = offset.left + j * width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8736 mx = j - ( cells - 1 ) / 2 ;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8737
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8738 // Create a clone of the now hidden main element that will be absolute positioned
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8739 // within a wrapper div off the -left and -top equal to size of our pieces
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8740 el
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8741 .clone()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8742 .appendTo( "body" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8743 .wrap( "<div></div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8744 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8745 position: "absolute",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8746 visibility: "visible",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8747 left: -j * width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8748 top: -i * height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8749 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8750
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8751 // select the wrapper - make it overflow: hidden and absolute positioned based on
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8752 // where the original was located +left and +top equal to the size of pieces
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8753 .parent()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8754 .addClass( "ui-effects-explode" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8755 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8756 position: "absolute",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8757 overflow: "hidden",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8758 width: width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8759 height: height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8760 left: left + ( show ? mx * width : 0 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8761 top: top + ( show ? my * height : 0 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8762 opacity: show ? 0 : 1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8763 }).animate({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8764 left: left + ( show ? 0 : mx * width ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8765 top: top + ( show ? 0 : my * height ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8766 opacity: show ? 1 : 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8767 }, o.duration || 500, o.easing, childComplete );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8768 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8769 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8770
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8771 function animComplete() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8772 el.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8773 visibility: "visible"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8774 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8775 $( pieces ).remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8776 if ( !show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8777 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8778 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8779 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8780 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8781 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8782
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8783 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8784 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8785
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8786 $.effects.effect.fade = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8787 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8788 mode = $.effects.setMode( el, o.mode || "toggle" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8789
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8790 el.animate({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8791 opacity: mode
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8792 }, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8793 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8794 duration: o.duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8795 easing: o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8796 complete: done
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8797 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8798 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8799
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8800 })( jQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8801 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8802
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8803 $.effects.effect.fold = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8804
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8805 // Create element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8806 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8807 props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8808 mode = $.effects.setMode( el, o.mode || "hide" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8809 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8810 hide = mode === "hide",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8811 size = o.size || 15,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8812 percent = /([0-9]+)%/.exec( size ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8813 horizFirst = !!o.horizFirst,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8814 widthFirst = show !== horizFirst,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8815 ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8816 duration = o.duration / 2,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8817 wrapper, distance,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8818 animation1 = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8819 animation2 = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8820
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8821 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8822 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8824 // Create Wrapper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8825 wrapper = $.effects.createWrapper( el ).css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8826 overflow: "hidden"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8827 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8828 distance = widthFirst ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8829 [ wrapper.width(), wrapper.height() ] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8830 [ wrapper.height(), wrapper.width() ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8831
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8832 if ( percent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8833 size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8834 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8835 if ( show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8836 wrapper.css( horizFirst ? {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8837 height: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8838 width: size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8839 } : {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8840 height: size,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8841 width: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8842 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8843 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8844
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8845 // Animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8846 animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8847 animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8848
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8849 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8850 wrapper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8851 .animate( animation1, duration, o.easing )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8852 .animate( animation2, duration, o.easing, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8853 if ( hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8854 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8855 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8856 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8857 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8858 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8859 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8860
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8861 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8862
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8863 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8864 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8865
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8866 $.effects.effect.highlight = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8867 var elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8868 props = [ "backgroundImage", "backgroundColor", "opacity" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8869 mode = $.effects.setMode( elem, o.mode || "show" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8870 animation = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8871 backgroundColor: elem.css( "backgroundColor" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8872 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8873
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8874 if (mode === "hide") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8875 animation.opacity = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8876 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8877
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8878 $.effects.save( elem, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8879
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8880 elem
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8881 .show()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8882 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8883 backgroundImage: "none",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8884 backgroundColor: o.color || "#ffff99"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8885 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8886 .animate( animation, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8887 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8888 duration: o.duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8889 easing: o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8890 complete: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8891 if ( mode === "hide" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8892 elem.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8893 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8894 $.effects.restore( elem, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8895 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8896 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8897 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8898 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8899
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8900 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8901 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8902
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8903 $.effects.effect.pulsate = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8904 var elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8905 mode = $.effects.setMode( elem, o.mode || "show" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8906 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8907 hide = mode === "hide",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8908 showhide = ( show || mode === "hide" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8909
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8910 // showing or hiding leaves of the "last" animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8911 anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8912 duration = o.duration / anims,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8913 animateTo = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8914 queue = elem.queue(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8915 queuelen = queue.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8916 i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8917
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8918 if ( show || !elem.is(":visible")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8919 elem.css( "opacity", 0 ).show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8920 animateTo = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8921 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8922
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8923 // anims - 1 opacity "toggles"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8924 for ( i = 1; i < anims; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8925 elem.animate({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8926 opacity: animateTo
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8927 }, duration, o.easing );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8928 animateTo = 1 - animateTo;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8929 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8930
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8931 elem.animate({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8932 opacity: animateTo
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8933 }, duration, o.easing);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8934
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8935 elem.queue(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8936 if ( hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8937 elem.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8938 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8939 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8940 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8941
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8942 // We just queued up "anims" animations, we need to put them next in the queue
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8943 if ( queuelen > 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8944 queue.splice.apply( queue,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8945 [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8946 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8947 elem.dequeue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8948 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8949
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8950 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8951 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8952
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8953 $.effects.effect.puff = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8954 var elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8955 mode = $.effects.setMode( elem, o.mode || "hide" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8956 hide = mode === "hide",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8957 percent = parseInt( o.percent, 10 ) || 150,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8958 factor = percent / 100,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8959 original = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8960 height: elem.height(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8961 width: elem.width(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8962 outerHeight: elem.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8963 outerWidth: elem.outerWidth()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8964 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8965
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8966 $.extend( o, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8967 effect: "scale",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8968 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8969 fade: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8970 mode: mode,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8971 complete: done,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8972 percent: hide ? percent : 100,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8973 from: hide ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8974 original :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8975 {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8976 height: original.height * factor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8977 width: original.width * factor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8978 outerHeight: original.outerHeight * factor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8979 outerWidth: original.outerWidth * factor
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8980 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8981 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8982
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8983 elem.effect( o );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8984 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8985
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8986 $.effects.effect.scale = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8987
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8988 // Create element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8989 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8990 options = $.extend( true, {}, o ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8991 mode = $.effects.setMode( el, o.mode || "effect" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8992 percent = parseInt( o.percent, 10 ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8993 ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8994 direction = o.direction || "both",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8995 origin = o.origin,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8996 original = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8997 height: el.height(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8998 width: el.width(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8999 outerHeight: el.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9000 outerWidth: el.outerWidth()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9001 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9002 factor = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9003 y: direction !== "horizontal" ? (percent / 100) : 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9004 x: direction !== "vertical" ? (percent / 100) : 1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9005 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9006
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9007 // We are going to pass this effect to the size effect:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9008 options.effect = "size";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9009 options.queue = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9010 options.complete = done;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9011
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9012 // Set default origin and restore for show/hide
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9013 if ( mode !== "effect" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9014 options.origin = origin || ["middle","center"];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9015 options.restore = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9016 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9017
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9018 options.from = o.from || ( mode === "show" ? {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9019 height: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9020 width: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9021 outerHeight: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9022 outerWidth: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9023 } : original );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9024 options.to = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9025 height: original.height * factor.y,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9026 width: original.width * factor.x,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9027 outerHeight: original.outerHeight * factor.y,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9028 outerWidth: original.outerWidth * factor.x
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9029 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9030
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9031 // Fade option to support puff
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9032 if ( options.fade ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9033 if ( mode === "show" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9034 options.from.opacity = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9035 options.to.opacity = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9036 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9037 if ( mode === "hide" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9038 options.from.opacity = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9039 options.to.opacity = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9040 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9041 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9042
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9043 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9044 el.effect( options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9045
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9046 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9048 $.effects.effect.size = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9049
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9050 // Create element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9051 var original, baseline, factor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9052 el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9053 props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9054
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9055 // Always restore
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9056 props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9057
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9058 // Copy for children
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9059 props2 = [ "width", "height", "overflow" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9060 cProps = [ "fontSize" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9061 vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9062 hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9063
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9064 // Set options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9065 mode = $.effects.setMode( el, o.mode || "effect" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9066 restore = o.restore || mode !== "effect",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9067 scale = o.scale || "both",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9068 origin = o.origin || [ "middle", "center" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9069 position = el.css( "position" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9070 props = restore ? props0 : props1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9071 zero = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9072 height: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9073 width: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9074 outerHeight: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9075 outerWidth: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9076 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9077
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9078 if ( mode === "show" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9079 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9080 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9081 original = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9082 height: el.height(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9083 width: el.width(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9084 outerHeight: el.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9085 outerWidth: el.outerWidth()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9086 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9087
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9088 if ( o.mode === "toggle" && mode === "show" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9089 el.from = o.to || zero;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9090 el.to = o.from || original;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9091 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9092 el.from = o.from || ( mode === "show" ? zero : original );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9093 el.to = o.to || ( mode === "hide" ? zero : original );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9094 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9095
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9096 // Set scaling factor
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9097 factor = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9098 from: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9099 y: el.from.height / original.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9100 x: el.from.width / original.width
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9101 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9102 to: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9103 y: el.to.height / original.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9104 x: el.to.width / original.width
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9105 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9106 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9107
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9108 // Scale the css box
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9109 if ( scale === "box" || scale === "both" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9110
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9111 // Vertical props scaling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9112 if ( factor.from.y !== factor.to.y ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9113 props = props.concat( vProps );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9114 el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9115 el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9116 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9117
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9118 // Horizontal props scaling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9119 if ( factor.from.x !== factor.to.x ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9120 props = props.concat( hProps );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9121 el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9122 el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9123 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9124 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9125
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9126 // Scale the content
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9127 if ( scale === "content" || scale === "both" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9128
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9129 // Vertical props scaling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9130 if ( factor.from.y !== factor.to.y ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9131 props = props.concat( cProps ).concat( props2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9132 el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9133 el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9134 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9135 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9136
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9137 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9138 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9139 $.effects.createWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9140 el.css( "overflow", "hidden" ).css( el.from );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9141
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9142 // Adjust
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9143 if (origin) { // Calculate baseline shifts
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9144 baseline = $.effects.getBaseline( origin, original );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9145 el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9146 el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9147 el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9148 el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9149 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9150 el.css( el.from ); // set top & left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9151
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9152 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9153 if ( scale === "content" || scale === "both" ) { // Scale the children
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9154
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9155 // Add margins/font-size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9156 vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9157 hProps = hProps.concat([ "marginLeft", "marginRight" ]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9158 props2 = props0.concat(vProps).concat(hProps);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9159
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9160 el.find( "*[width]" ).each( function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9161 var child = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9162 c_original = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9163 height: child.height(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9164 width: child.width(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9165 outerHeight: child.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9166 outerWidth: child.outerWidth()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9167 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9168 if (restore) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9169 $.effects.save(child, props2);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9170 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9171
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9172 child.from = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9173 height: c_original.height * factor.from.y,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9174 width: c_original.width * factor.from.x,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9175 outerHeight: c_original.outerHeight * factor.from.y,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9176 outerWidth: c_original.outerWidth * factor.from.x
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9177 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9178 child.to = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9179 height: c_original.height * factor.to.y,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9180 width: c_original.width * factor.to.x,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9181 outerHeight: c_original.height * factor.to.y,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9182 outerWidth: c_original.width * factor.to.x
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9183 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9184
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9185 // Vertical props scaling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9186 if ( factor.from.y !== factor.to.y ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9187 child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9188 child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9189 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9190
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9191 // Horizontal props scaling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9192 if ( factor.from.x !== factor.to.x ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9193 child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9194 child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9195 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9196
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9197 // Animate children
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9198 child.css( child.from );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9199 child.animate( child.to, o.duration, o.easing, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9200
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9201 // Restore children
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9202 if ( restore ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9203 $.effects.restore( child, props2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9204 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9205 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9206 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9207 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9208
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9209 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9210 el.animate( el.to, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9211 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9212 duration: o.duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9213 easing: o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9214 complete: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9215 if ( el.to.opacity === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9216 el.css( "opacity", el.from.opacity );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9217 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9218 if( mode === "hide" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9219 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9220 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9221 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9222 if ( !restore ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9223
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9224 // we need to calculate our new positioning based on the scaling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9225 if ( position === "static" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9226 el.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9227 position: "relative",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9228 top: el.to.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9229 left: el.to.left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9230 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9231 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9232 $.each([ "top", "left" ], function( idx, pos ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9233 el.css( pos, function( _, str ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9234 var val = parseInt( str, 10 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9235 toRef = idx ? el.to.left : el.to.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9236
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9237 // if original was "auto", recalculate the new value from wrapper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9238 if ( str === "auto" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9239 return toRef + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9240 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9241
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9242 return val + toRef + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9243 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9244 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9245 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9246 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9247
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9248 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9249 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9250 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9251 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9252
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9253 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9254
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9255 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9256 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9257
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9258 $.effects.effect.shake = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9259
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9260 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9261 props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9262 mode = $.effects.setMode( el, o.mode || "effect" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9263 direction = o.direction || "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9264 distance = o.distance || 20,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9265 times = o.times || 3,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9266 anims = times * 2 + 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9267 speed = Math.round(o.duration/anims),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9268 ref = (direction === "up" || direction === "down") ? "top" : "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9269 positiveMotion = (direction === "up" || direction === "left"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9270 animation = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9271 animation1 = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9272 animation2 = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9273 i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9274
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9275 // we will need to re-assemble the queue to stack our animations in place
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9276 queue = el.queue(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9277 queuelen = queue.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9278
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9279 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9280 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9281 $.effects.createWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9283 // Animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9284 animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9285 animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9286 animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9287
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9288 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9289 el.animate( animation, speed, o.easing );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9290
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9291 // Shakes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9292 for ( i = 1; i < times; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9293 el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9294 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9295 el
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9296 .animate( animation1, speed, o.easing )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9297 .animate( animation, speed / 2, o.easing )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9298 .queue(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9299 if ( mode === "hide" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9300 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9301 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9302 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9303 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9304 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9305 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9306
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9307 // inject all the animations we just queued to be first in line (after "inprogress")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9308 if ( queuelen > 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9309 queue.splice.apply( queue,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9310 [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9311 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9312 el.dequeue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9313
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9314 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9315
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9316 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9317 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9318
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9319 $.effects.effect.slide = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9320
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9321 // Create element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9322 var el = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9323 props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9324 mode = $.effects.setMode( el, o.mode || "show" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9325 show = mode === "show",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9326 direction = o.direction || "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9327 ref = (direction === "up" || direction === "down") ? "top" : "left",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9328 positiveMotion = (direction === "up" || direction === "left"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9329 distance,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9330 animation = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9331
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9332 // Adjust
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9333 $.effects.save( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9334 el.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9335 distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9336
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9337 $.effects.createWrapper( el ).css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9338 overflow: "hidden"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9339 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9341 if ( show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9342 el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9343 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9344
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9345 // Animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9346 animation[ ref ] = ( show ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9347 ( positiveMotion ? "+=" : "-=") :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9348 ( positiveMotion ? "-=" : "+=")) +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9349 distance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9350
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9351 // Animate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9352 el.animate( animation, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9353 queue: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9354 duration: o.duration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9355 easing: o.easing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9356 complete: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9357 if ( mode === "hide" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9358 el.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9359 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9360 $.effects.restore( el, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9361 $.effects.removeWrapper( el );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9362 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9363 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9364 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9365 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9366
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9367 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9368 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9369
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9370 $.effects.effect.transfer = function( o, done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9371 var elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9372 target = $( o.to ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9373 targetFixed = target.css( "position" ) === "fixed",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9374 body = $("body"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9375 fixTop = targetFixed ? body.scrollTop() : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9376 fixLeft = targetFixed ? body.scrollLeft() : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9377 endPosition = target.offset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9378 animation = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9379 top: endPosition.top - fixTop ,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9380 left: endPosition.left - fixLeft ,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9381 height: target.innerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9382 width: target.innerWidth()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9383 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9384 startPosition = elem.offset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9385 transfer = $( "<div class='ui-effects-transfer'></div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9386 .appendTo( document.body )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9387 .addClass( o.className )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9388 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9389 top: startPosition.top - fixTop ,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9390 left: startPosition.left - fixLeft ,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9391 height: elem.innerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9392 width: elem.innerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9393 position: targetFixed ? "fixed" : "absolute"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9394 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9395 .animate( animation, o.duration, o.easing, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9396 transfer.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9397 done();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9398 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9399 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9400
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9401 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9402 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9403
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9404 $.widget( "ui.menu", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9405 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9406 defaultElement: "<ul>",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9407 delay: 300,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9408 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9409 icons: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9410 submenu: "ui-icon-carat-1-e"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9411 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9412 menus: "ul",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9413 position: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9414 my: "left top",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9415 at: "right top"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9416 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9417 role: "menu",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9418
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9419 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9420 blur: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9421 focus: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9422 select: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9423 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9424
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9425 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9426 this.activeMenu = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9427 // flag used to prevent firing of the click handler
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9428 // as the event bubbles up through nested menus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9429 this.mouseHandled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9430 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9431 .uniqueId()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9432 .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9433 .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9434 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9435 role: this.options.role,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9436 tabIndex: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9437 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9438 // need to catch all clicks on disabled menu
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9439 // not possible through _on
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9440 .bind( "click" + this.eventNamespace, $.proxy(function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9441 if ( this.options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9442 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9443 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9444 }, this ));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9445
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9446 if ( this.options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9447 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9448 .addClass( "ui-state-disabled" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9449 .attr( "aria-disabled", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9450 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9451
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9452 this._on({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9453 // Prevent focus from sticking to links inside menu after clicking
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9454 // them (focus should always stay on UL during navigation).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9455 "mousedown .ui-menu-item > a": function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9456 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9457 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9458 "click .ui-state-disabled > a": function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9459 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9460 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9461 "click .ui-menu-item:has(a)": function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9462 var target = $( event.target ).closest( ".ui-menu-item" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9463 if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9464 this.select( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9465
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9466 // Only set the mouseHandled flag if the event will bubble, see #9469.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9467 if ( !event.isPropagationStopped() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9468 this.mouseHandled = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9469 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9470
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9471 // Open submenu on click
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9472 if ( target.has( ".ui-menu" ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9473 this.expand( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9474 } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9475
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9476 // Redirect focus to the menu
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9477 this.element.trigger( "focus", [ true ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9478
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9479 // If the active item is on the top level, let it stay active.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9480 // Otherwise, blur the active item since it is no longer visible.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9481 if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9482 clearTimeout( this.timer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9483 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9484 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9485 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9486 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9487 "mouseenter .ui-menu-item": function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9488 var target = $( event.currentTarget );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9489 // Remove ui-state-active class from siblings of the newly focused menu item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9490 // to avoid a jump caused by adjacent elements both having a class with a border
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9491 target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9492 this.focus( event, target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9493 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9494 mouseleave: "collapseAll",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9495 "mouseleave .ui-menu": "collapseAll",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9496 focus: function( event, keepActiveItem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9497 // If there's already an active item, keep it active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9498 // If not, activate the first item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9499 var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9500
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9501 if ( !keepActiveItem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9502 this.focus( event, item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9503 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9504 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9505 blur: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9506 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9507 if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9508 this.collapseAll( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9509 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9510 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9511 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9512 keydown: "_keydown"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9513 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9514
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9515 this.refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9516
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9517 // Clicks outside of a menu collapse any open menus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9518 this._on( this.document, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9519 click: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9520 if ( !$( event.target ).closest( ".ui-menu" ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9521 this.collapseAll( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9522 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9523
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9524 // Reset the mouseHandled flag
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9525 this.mouseHandled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9526 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9527 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9528 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9529
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9530 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9531 // Destroy (sub)menus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9532 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9533 .removeAttr( "aria-activedescendant" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9534 .find( ".ui-menu" ).addBack()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9535 .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9536 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9537 .removeAttr( "tabIndex" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9538 .removeAttr( "aria-labelledby" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9539 .removeAttr( "aria-expanded" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9540 .removeAttr( "aria-hidden" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9541 .removeAttr( "aria-disabled" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9542 .removeUniqueId()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9543 .show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9544
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9545 // Destroy menu items
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9546 this.element.find( ".ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9547 .removeClass( "ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9548 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9549 .removeAttr( "aria-disabled" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9550 .children( "a" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9551 .removeUniqueId()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9552 .removeClass( "ui-corner-all ui-state-hover" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9553 .removeAttr( "tabIndex" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9554 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9555 .removeAttr( "aria-haspopup" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9556 .children().each( function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9557 var elem = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9558 if ( elem.data( "ui-menu-submenu-carat" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9559 elem.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9560 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9561 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9562
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9563 // Destroy menu dividers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9564 this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9565 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9566
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9567 _keydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9568 var match, prev, character, skip, regex,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9569 preventDefault = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9570
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9571 function escape( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9572 return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9573 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9574
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9575 switch ( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9576 case $.ui.keyCode.PAGE_UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9577 this.previousPage( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9578 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9579 case $.ui.keyCode.PAGE_DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9580 this.nextPage( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9581 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9582 case $.ui.keyCode.HOME:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9583 this._move( "first", "first", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9584 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9585 case $.ui.keyCode.END:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9586 this._move( "last", "last", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9587 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9588 case $.ui.keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9589 this.previous( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9590 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9591 case $.ui.keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9592 this.next( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9593 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9594 case $.ui.keyCode.LEFT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9595 this.collapse( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9596 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9597 case $.ui.keyCode.RIGHT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9598 if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9599 this.expand( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9600 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9601 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9602 case $.ui.keyCode.ENTER:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9603 case $.ui.keyCode.SPACE:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9604 this._activate( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9605 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9606 case $.ui.keyCode.ESCAPE:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9607 this.collapse( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9608 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9609 default:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9610 preventDefault = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9611 prev = this.previousFilter || "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9612 character = String.fromCharCode( event.keyCode );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9613 skip = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9614
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9615 clearTimeout( this.filterTimer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9616
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9617 if ( character === prev ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9618 skip = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9619 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9620 character = prev + character;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9621 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9622
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9623 regex = new RegExp( "^" + escape( character ), "i" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9624 match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9625 return regex.test( $( this ).children( "a" ).text() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9626 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9627 match = skip && match.index( this.active.next() ) !== -1 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9628 this.active.nextAll( ".ui-menu-item" ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9629 match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9630
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9631 // If no matches on the current filter, reset to the last character pressed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9632 // to move down the menu to the first item that starts with that character
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9633 if ( !match.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9634 character = String.fromCharCode( event.keyCode );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9635 regex = new RegExp( "^" + escape( character ), "i" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9636 match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9637 return regex.test( $( this ).children( "a" ).text() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9638 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9639 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9640
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9641 if ( match.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9642 this.focus( event, match );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9643 if ( match.length > 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9644 this.previousFilter = character;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9645 this.filterTimer = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9646 delete this.previousFilter;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9647 }, 1000 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9648 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9649 delete this.previousFilter;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9650 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9651 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9652 delete this.previousFilter;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9653 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9654 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9655
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9656 if ( preventDefault ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9657 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9658 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9659 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9660
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9661 _activate: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9662 if ( !this.active.is( ".ui-state-disabled" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9663 if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9664 this.expand( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9665 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9666 this.select( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9667 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9668 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9669 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9670
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9671 refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9672 var menus,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9673 icon = this.options.icons.submenu,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9674 submenus = this.element.find( this.options.menus );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9675
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9676 this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9677
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9678 // Initialize nested menus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9679 submenus.filter( ":not(.ui-menu)" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9680 .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9681 .hide()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9682 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9683 role: this.options.role,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9684 "aria-hidden": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9685 "aria-expanded": "false"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9686 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9687 .each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9688 var menu = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9689 item = menu.prev( "a" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9690 submenuCarat = $( "<span>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9691 .addClass( "ui-menu-icon ui-icon " + icon )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9692 .data( "ui-menu-submenu-carat", true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9693
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9694 item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9695 .attr( "aria-haspopup", "true" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9696 .prepend( submenuCarat );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9697 menu.attr( "aria-labelledby", item.attr( "id" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9698 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9699
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9700 menus = submenus.add( this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9701
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9702 // Don't refresh list items that are already adapted
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9703 menus.children( ":not(.ui-menu-item):has(a)" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9704 .addClass( "ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9705 .attr( "role", "presentation" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9706 .children( "a" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9707 .uniqueId()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9708 .addClass( "ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9709 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9710 tabIndex: -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9711 role: this._itemRole()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9712 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9713
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9714 // Initialize unlinked menu-items containing spaces and/or dashes only as dividers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9715 menus.children( ":not(.ui-menu-item)" ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9716 var item = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9717 // hyphen, em dash, en dash
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9718 if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9719 item.addClass( "ui-widget-content ui-menu-divider" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9720 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9721 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9722
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9723 // Add aria-disabled attribute to any disabled menu item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9724 menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9725
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9726 // If the active item has been removed, blur the menu
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9727 if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9728 this.blur();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9729 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9730 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9731
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9732 _itemRole: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9733 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9734 menu: "menuitem",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9735 listbox: "option"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9736 }[ this.options.role ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9737 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9738
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9739 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9740 if ( key === "icons" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9741 this.element.find( ".ui-menu-icon" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9742 .removeClass( this.options.icons.submenu )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9743 .addClass( value.submenu );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9744 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9745 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9746 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9747
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9748 focus: function( event, item ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9749 var nested, focused;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9750 this.blur( event, event && event.type === "focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9751
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9752 this._scrollIntoView( item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9753
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9754 this.active = item.first();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9755 focused = this.active.children( "a" ).addClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9756 // Only update aria-activedescendant if there's a role
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9757 // otherwise we assume focus is managed elsewhere
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9758 if ( this.options.role ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9759 this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9760 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9761
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9762 // Highlight active parent menu item, if any
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9763 this.active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9764 .parent()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9765 .closest( ".ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9766 .children( "a:first" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9767 .addClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9768
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9769 if ( event && event.type === "keydown" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9770 this._close();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9771 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9772 this.timer = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9773 this._close();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9774 }, this.delay );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9775 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9776
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9777 nested = item.children( ".ui-menu" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9778 if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9779 this._startOpening(nested);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9780 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9781 this.activeMenu = item.parent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9782
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9783 this._trigger( "focus", event, { item: item } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9784 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9785
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9786 _scrollIntoView: function( item ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9787 var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9788 if ( this._hasScroll() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9789 borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9790 paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9791 offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9792 scroll = this.activeMenu.scrollTop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9793 elementHeight = this.activeMenu.height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9794 itemHeight = item.height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9796 if ( offset < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9797 this.activeMenu.scrollTop( scroll + offset );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9798 } else if ( offset + itemHeight > elementHeight ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9799 this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9800 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9801 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9802 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9803
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9804 blur: function( event, fromFocus ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9805 if ( !fromFocus ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9806 clearTimeout( this.timer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9807 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9808
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9809 if ( !this.active ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9810 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9811 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9812
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9813 this.active.children( "a" ).removeClass( "ui-state-focus" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9814 this.active = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9815
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9816 this._trigger( "blur", event, { item: this.active } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9817 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9818
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9819 _startOpening: function( submenu ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9820 clearTimeout( this.timer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9821
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9822 // Don't open if already open fixes a Firefox bug that caused a .5 pixel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9823 // shift in the submenu position when mousing over the carat icon
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9824 if ( submenu.attr( "aria-hidden" ) !== "true" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9825 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9826 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9827
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9828 this.timer = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9829 this._close();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9830 this._open( submenu );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9831 }, this.delay );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9832 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9833
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9834 _open: function( submenu ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9835 var position = $.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9836 of: this.active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9837 }, this.options.position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9838
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9839 clearTimeout( this.timer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9840 this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9841 .hide()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9842 .attr( "aria-hidden", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9843
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9844 submenu
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9845 .show()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9846 .removeAttr( "aria-hidden" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9847 .attr( "aria-expanded", "true" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9848 .position( position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9849 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9850
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9851 collapseAll: function( event, all ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9852 clearTimeout( this.timer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9853 this.timer = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9854 // If we were passed an event, look for the submenu that contains the event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9855 var currentMenu = all ? this.element :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9856 $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9857
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9858 // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9859 if ( !currentMenu.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9860 currentMenu = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9861 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9862
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9863 this._close( currentMenu );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9864
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9865 this.blur( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9866 this.activeMenu = currentMenu;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9867 }, this.delay );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9868 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9869
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9870 // With no arguments, closes the currently active menu - if nothing is active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9871 // it closes all menus. If passed an argument, it will search for menus BELOW
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9872 _close: function( startMenu ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9873 if ( !startMenu ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9874 startMenu = this.active ? this.active.parent() : this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9875 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9877 startMenu
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9878 .find( ".ui-menu" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9879 .hide()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9880 .attr( "aria-hidden", "true" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9881 .attr( "aria-expanded", "false" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9882 .end()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9883 .find( "a.ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9884 .removeClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9885 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9886
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9887 collapse: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9888 var newItem = this.active &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9889 this.active.parent().closest( ".ui-menu-item", this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9890 if ( newItem && newItem.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9891 this._close();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9892 this.focus( event, newItem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9893 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9894 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9895
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9896 expand: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9897 var newItem = this.active &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9898 this.active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9899 .children( ".ui-menu " )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9900 .children( ".ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9901 .first();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9902
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9903 if ( newItem && newItem.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9904 this._open( newItem.parent() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9905
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9906 // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9907 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9908 this.focus( event, newItem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9909 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9910 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9911 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9912
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9913 next: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9914 this._move( "next", "first", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9915 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9916
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9917 previous: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9918 this._move( "prev", "last", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9919 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9920
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9921 isFirstItem: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9922 return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9923 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9924
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9925 isLastItem: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9926 return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9927 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9928
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9929 _move: function( direction, filter, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9930 var next;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9931 if ( this.active ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9932 if ( direction === "first" || direction === "last" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9933 next = this.active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9934 [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9935 .eq( -1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9936 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9937 next = this.active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9938 [ direction + "All" ]( ".ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9939 .eq( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9940 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9941 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9942 if ( !next || !next.length || !this.active ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9943 next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9944 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9945
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9946 this.focus( event, next );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9947 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9948
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9949 nextPage: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9950 var item, base, height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9951
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9952 if ( !this.active ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9953 this.next( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9954 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9955 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9956 if ( this.isLastItem() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9957 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9958 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9959 if ( this._hasScroll() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9960 base = this.active.offset().top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9961 height = this.element.height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9962 this.active.nextAll( ".ui-menu-item" ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9963 item = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9964 return item.offset().top - base - height < 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9965 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9966
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9967 this.focus( event, item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9968 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9969 this.focus( event, this.activeMenu.children( ".ui-menu-item" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9970 [ !this.active ? "first" : "last" ]() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9971 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9972 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9973
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9974 previousPage: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9975 var item, base, height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9976 if ( !this.active ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9977 this.next( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9978 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9979 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9980 if ( this.isFirstItem() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9981 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9982 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9983 if ( this._hasScroll() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9984 base = this.active.offset().top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9985 height = this.element.height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9986 this.active.prevAll( ".ui-menu-item" ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9987 item = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9988 return item.offset().top - base + height > 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9989 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9990
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9991 this.focus( event, item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9992 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9993 this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9994 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9995 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9996
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9997 _hasScroll: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9998 return this.element.outerHeight() < this.element.prop( "scrollHeight" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9999 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10000
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10001 select: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10002 // TODO: It should never be possible to not have an active item at this
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10003 // point, but the tests don't trigger mouseenter before click.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10004 this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10005 var ui = { item: this.active };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10006 if ( !this.active.has( ".ui-menu" ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10007 this.collapseAll( event, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10008 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10009 this._trigger( "select", event, ui );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10010 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10011 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10012
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10013 }( jQuery ));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10014 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10015
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10016 $.widget( "ui.progressbar", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10017 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10018 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10019 max: 100,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10020 value: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10022 change: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10023 complete: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10024 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10025
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10026 min: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10027
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10028 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10029 // Constrain initial value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10030 this.oldValue = this.options.value = this._constrainedValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10031
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10032 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10033 .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10034 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10035 // Only set static values, aria-valuenow and aria-valuemax are
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10036 // set inside _refreshValue()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10037 role: "progressbar",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10038 "aria-valuemin": this.min
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10039 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10040
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10041 this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10042 .appendTo( this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10043
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10044 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10045 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10046
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10047 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10048 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10049 .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10050 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10051 .removeAttr( "aria-valuemin" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10052 .removeAttr( "aria-valuemax" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10053 .removeAttr( "aria-valuenow" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10054
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10055 this.valueDiv.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10056 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10057
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10058 value: function( newValue ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10059 if ( newValue === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10060 return this.options.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10061 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10062
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10063 this.options.value = this._constrainedValue( newValue );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10064 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10065 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10066
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10067 _constrainedValue: function( newValue ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10068 if ( newValue === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10069 newValue = this.options.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10070 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10071
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10072 this.indeterminate = newValue === false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10073
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10074 // sanitize value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10075 if ( typeof newValue !== "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10076 newValue = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10077 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10078
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10079 return this.indeterminate ? false :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10080 Math.min( this.options.max, Math.max( this.min, newValue ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10081 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10082
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10083 _setOptions: function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10084 // Ensure "value" option is set after other values (like max)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10085 var value = options.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10086 delete options.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10087
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10088 this._super( options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10089
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10090 this.options.value = this._constrainedValue( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10091 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10092 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10093
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10094 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10095 if ( key === "max" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10096 // Don't allow a max less than min
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10097 value = Math.max( this.min, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10098 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10099
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10100 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10101 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10102
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10103 _percentage: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10104 return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10105 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10106
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10107 _refreshValue: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10108 var value = this.options.value,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10109 percentage = this._percentage();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10110
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10111 this.valueDiv
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10112 .toggle( this.indeterminate || value > this.min )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10113 .toggleClass( "ui-corner-right", value === this.options.max )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10114 .width( percentage.toFixed(0) + "%" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10115
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10116 this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10117
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10118 if ( this.indeterminate ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10119 this.element.removeAttr( "aria-valuenow" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10120 if ( !this.overlayDiv ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10121 this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10122 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10123 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10124 this.element.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10125 "aria-valuemax": this.options.max,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10126 "aria-valuenow": value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10127 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10128 if ( this.overlayDiv ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10129 this.overlayDiv.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10130 this.overlayDiv = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10131 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10132 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10134 if ( this.oldValue !== value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10135 this.oldValue = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10136 this._trigger( "change" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10137 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10138 if ( value === this.options.max ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10139 this._trigger( "complete" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10140 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10141 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10142 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10143
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10144 })( jQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10145 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10146
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10147 function num(v) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10148 return parseInt(v, 10) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10149 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10151 function isNumber(value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10152 return !isNaN(parseInt(value, 10));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10153 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10154
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10155 $.widget("ui.resizable", $.ui.mouse, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10156 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10157 widgetEventPrefix: "resize",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10158 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10159 alsoResize: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10160 animate: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10161 animateDuration: "slow",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10162 animateEasing: "swing",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10163 aspectRatio: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10164 autoHide: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10165 containment: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10166 ghost: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10167 grid: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10168 handles: "e,s,se",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10169 helper: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10170 maxHeight: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10171 maxWidth: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10172 minHeight: 10,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10173 minWidth: 10,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10174 // See #7960
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10175 zIndex: 90,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10176
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10177 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10178 resize: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10179 start: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10180 stop: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10181 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10182 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10183
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10184 var n, i, handle, axis, hname,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10185 that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10186 o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10187 this.element.addClass("ui-resizable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10188
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10189 $.extend(this, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10190 _aspectRatio: !!(o.aspectRatio),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10191 aspectRatio: o.aspectRatio,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10192 originalElement: this.element,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10193 _proportionallyResizeElements: [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10194 _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10195 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10196
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10197 //Wrap the element if it cannot hold child nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10198 if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10199
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10200 //Create a wrapper element and set the wrapper to the new current internal element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10201 this.element.wrap(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10202 $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10203 position: this.element.css("position"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10204 width: this.element.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10205 height: this.element.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10206 top: this.element.css("top"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10207 left: this.element.css("left")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10208 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10209 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10210
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10211 //Overwrite the original this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10212 this.element = this.element.parent().data(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10213 "ui-resizable", this.element.data("ui-resizable")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10214 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10215
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10216 this.elementIsWrapper = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10217
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10218 //Move margins to the wrapper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10219 this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10220 this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10221
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10222 //Prevent Safari textarea resize
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10223 this.originalResizeStyle = this.originalElement.css("resize");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10224 this.originalElement.css("resize", "none");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10225
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10226 //Push the actual element to our proportionallyResize internal array
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10227 this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10228
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10229 // avoid IE jump (hard set the margin)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10230 this.originalElement.css({ margin: this.originalElement.css("margin") });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10231
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10232 // fix handlers offset
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10233 this._proportionallyResize();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10234
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10235 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10236
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10237 this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10238 if(this.handles.constructor === String) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10239
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10240 if ( this.handles === "all") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10241 this.handles = "n,e,s,w,se,sw,ne,nw";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10242 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10243
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10244 n = this.handles.split(",");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10245 this.handles = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10246
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10247 for(i = 0; i < n.length; i++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10248
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10249 handle = $.trim(n[i]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10250 hname = "ui-resizable-"+handle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10251 axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10252
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10253 // Apply zIndex to all handles - see #7960
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10254 axis.css({ zIndex: o.zIndex });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10255
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10256 //TODO : What's going on here?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10257 if ("se" === handle) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10258 axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10259 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10260
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10261 //Insert into internal handles object and append to element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10262 this.handles[handle] = ".ui-resizable-"+handle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10263 this.element.append(axis);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10264 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10265
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10266 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10267
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10268 this._renderAxis = function(target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10269
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10270 var i, axis, padPos, padWrapper;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10271
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10272 target = target || this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10273
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10274 for(i in this.handles) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10276 if(this.handles[i].constructor === String) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10277 this.handles[i] = $(this.handles[i], this.element).show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10278 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10279
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10280 //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10281 if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10283 axis = $(this.handles[i], this.element);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10284
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10285 //Checking the correct pad and border
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10286 padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10287
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10288 //The padding type i have to apply...
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10289 padPos = [ "padding",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10290 /ne|nw|n/.test(i) ? "Top" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10291 /se|sw|s/.test(i) ? "Bottom" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10292 /^e$/.test(i) ? "Right" : "Left" ].join("");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10293
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10294 target.css(padPos, padWrapper);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10295
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10296 this._proportionallyResize();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10297
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10298 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10299
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10300 //TODO: What's that good for? There's not anything to be executed left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10301 if(!$(this.handles[i]).length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10302 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10303 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10304 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10305 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10306
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10307 //TODO: make renderAxis a prototype function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10308 this._renderAxis(this.element);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10309
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10310 this._handles = $(".ui-resizable-handle", this.element)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10311 .disableSelection();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10313 //Matching axis name
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10314 this._handles.mouseover(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10315 if (!that.resizing) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10316 if (this.className) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10317 axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10318 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10319 //Axis, default = se
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10320 that.axis = axis && axis[1] ? axis[1] : "se";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10321 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10322 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10323
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10324 //If we want to auto hide the elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10325 if (o.autoHide) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10326 this._handles.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10327 $(this.element)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10328 .addClass("ui-resizable-autohide")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10329 .mouseenter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10330 if (o.disabled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10331 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10332 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10333 $(this).removeClass("ui-resizable-autohide");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10334 that._handles.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10335 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10336 .mouseleave(function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10337 if (o.disabled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10338 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10339 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10340 if (!that.resizing) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10341 $(this).addClass("ui-resizable-autohide");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10342 that._handles.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10343 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10344 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10345 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10346
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10347 //Initialize the mouse interaction
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10348 this._mouseInit();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10349
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10350 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10351
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10352 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10353
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10354 this._mouseDestroy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10355
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10356 var wrapper,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10357 _destroy = function(exp) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10358 $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10359 .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10360 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10361
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10362 //TODO: Unwrap at same DOM position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10363 if (this.elementIsWrapper) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10364 _destroy(this.element);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10365 wrapper = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10366 this.originalElement.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10367 position: wrapper.css("position"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10368 width: wrapper.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10369 height: wrapper.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10370 top: wrapper.css("top"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10371 left: wrapper.css("left")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10372 }).insertAfter( wrapper );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10373 wrapper.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10374 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10375
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10376 this.originalElement.css("resize", this.originalResizeStyle);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10377 _destroy(this.originalElement);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10378
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10379 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10380 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10381
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10382 _mouseCapture: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10383 var i, handle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10384 capture = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10385
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10386 for (i in this.handles) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10387 handle = $(this.handles[i])[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10388 if (handle === event.target || $.contains(handle, event.target)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10389 capture = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10390 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10391 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10392
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10393 return !this.options.disabled && capture;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10394 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10395
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10396 _mouseStart: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10397
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10398 var curleft, curtop, cursor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10399 o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10400 iniPos = this.element.position(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10401 el = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10402
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10403 this.resizing = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10404
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10405 // bugfix for http://dev.jquery.com/ticket/1749
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10406 if ( (/absolute/).test( el.css("position") ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10407 el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10408 } else if (el.is(".ui-draggable")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10409 el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10410 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10411
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10412 this._renderProxy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10413
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10414 curleft = num(this.helper.css("left"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10415 curtop = num(this.helper.css("top"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10416
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10417 if (o.containment) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10418 curleft += $(o.containment).scrollLeft() || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10419 curtop += $(o.containment).scrollTop() || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10420 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10421
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10422 //Store needed variables
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10423 this.offset = this.helper.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10424 this.position = { left: curleft, top: curtop };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10425 this.size = this._helper ? { width: this.helper.width(), height: this.helper.height() } : { width: el.width(), height: el.height() };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10426 this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10427 this.originalPosition = { left: curleft, top: curtop };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10428 this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10429 this.originalMousePosition = { left: event.pageX, top: event.pageY };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10430
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10431 //Aspect Ratio
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10432 this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10433
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10434 cursor = $(".ui-resizable-" + this.axis).css("cursor");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10435 $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10436
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10437 el.addClass("ui-resizable-resizing");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10438 this._propagate("start", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10439 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10440 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10441
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10442 _mouseDrag: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10443
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10444 //Increase performance, avoid regex
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10445 var data,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10446 el = this.helper, props = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10447 smp = this.originalMousePosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10448 a = this.axis,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10449 prevTop = this.position.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10450 prevLeft = this.position.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10451 prevWidth = this.size.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10452 prevHeight = this.size.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10453 dx = (event.pageX-smp.left)||0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10454 dy = (event.pageY-smp.top)||0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10455 trigger = this._change[a];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10456
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10457 if (!trigger) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10458 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10459 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10460
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10461 // Calculate the attrs that will be change
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10462 data = trigger.apply(this, [event, dx, dy]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10463
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10464 // Put this in the mouseDrag handler since the user can start pressing shift while resizing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10465 this._updateVirtualBoundaries(event.shiftKey);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10466 if (this._aspectRatio || event.shiftKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10467 data = this._updateRatio(data, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10468 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10469
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10470 data = this._respectSize(data, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10471
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10472 this._updateCache(data);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10473
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10474 // plugins callbacks need to be called first
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10475 this._propagate("resize", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10476
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10477 if (this.position.top !== prevTop) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10478 props.top = this.position.top + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10479 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10480 if (this.position.left !== prevLeft) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10481 props.left = this.position.left + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10482 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10483 if (this.size.width !== prevWidth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10484 props.width = this.size.width + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10485 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10486 if (this.size.height !== prevHeight) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10487 props.height = this.size.height + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10488 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10489 el.css(props);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10490
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10491 if (!this._helper && this._proportionallyResizeElements.length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10492 this._proportionallyResize();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10493 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10494
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10495 // Call the user callback if the element was resized
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10496 if ( ! $.isEmptyObject(props) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10497 this._trigger("resize", event, this.ui());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10498 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10499
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10500 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10501 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10502
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10503 _mouseStop: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10504
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10505 this.resizing = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10506 var pr, ista, soffseth, soffsetw, s, left, top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10507 o = this.options, that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10508
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10509 if(this._helper) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10510
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10511 pr = this._proportionallyResizeElements;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10512 ista = pr.length && (/textarea/i).test(pr[0].nodeName);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10513 soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10514 soffsetw = ista ? 0 : that.sizeDiff.width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10515
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10516 s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10517 left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10518 top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10519
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10520 if (!o.animate) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10521 this.element.css($.extend(s, { top: top, left: left }));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10522 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10523
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10524 that.helper.height(that.size.height);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10525 that.helper.width(that.size.width);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10526
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10527 if (this._helper && !o.animate) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10528 this._proportionallyResize();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10529 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10530 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10532 $("body").css("cursor", "auto");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10533
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10534 this.element.removeClass("ui-resizable-resizing");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10535
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10536 this._propagate("stop", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10537
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10538 if (this._helper) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10539 this.helper.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10540 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10541
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10542 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10543
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10544 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10545
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10546 _updateVirtualBoundaries: function(forceAspectRatio) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10547 var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10548 o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10549
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10550 b = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10551 minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10552 maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10553 minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10554 maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10555 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10556
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10557 if(this._aspectRatio || forceAspectRatio) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10558 // We want to create an enclosing box whose aspect ration is the requested one
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10559 // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10560 pMinWidth = b.minHeight * this.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10561 pMinHeight = b.minWidth / this.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10562 pMaxWidth = b.maxHeight * this.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10563 pMaxHeight = b.maxWidth / this.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10564
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10565 if(pMinWidth > b.minWidth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10566 b.minWidth = pMinWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10567 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10568 if(pMinHeight > b.minHeight) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10569 b.minHeight = pMinHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10570 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10571 if(pMaxWidth < b.maxWidth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10572 b.maxWidth = pMaxWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10573 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10574 if(pMaxHeight < b.maxHeight) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10575 b.maxHeight = pMaxHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10576 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10577 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10578 this._vBoundaries = b;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10579 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10580
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10581 _updateCache: function(data) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10582 this.offset = this.helper.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10583 if (isNumber(data.left)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10584 this.position.left = data.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10585 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10586 if (isNumber(data.top)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10587 this.position.top = data.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10588 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10589 if (isNumber(data.height)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10590 this.size.height = data.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10591 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10592 if (isNumber(data.width)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10593 this.size.width = data.width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10594 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10595 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10596
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10597 _updateRatio: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10598
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10599 var cpos = this.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10600 csize = this.size,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10601 a = this.axis;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10602
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10603 if (isNumber(data.height)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10604 data.width = (data.height * this.aspectRatio);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10605 } else if (isNumber(data.width)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10606 data.height = (data.width / this.aspectRatio);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10607 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10608
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10609 if (a === "sw") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10610 data.left = cpos.left + (csize.width - data.width);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10611 data.top = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10612 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10613 if (a === "nw") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10614 data.top = cpos.top + (csize.height - data.height);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10615 data.left = cpos.left + (csize.width - data.width);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10616 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10617
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10618 return data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10619 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10620
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10621 _respectSize: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10622
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10623 var o = this._vBoundaries,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10624 a = this.axis,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10625 ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10626 isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10627 dw = this.originalPosition.left + this.originalSize.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10628 dh = this.position.top + this.size.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10629 cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10630 if (isminw) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10631 data.width = o.minWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10632 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10633 if (isminh) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10634 data.height = o.minHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10635 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10636 if (ismaxw) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10637 data.width = o.maxWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10638 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10639 if (ismaxh) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10640 data.height = o.maxHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10641 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10642
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10643 if (isminw && cw) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10644 data.left = dw - o.minWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10645 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10646 if (ismaxw && cw) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10647 data.left = dw - o.maxWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10648 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10649 if (isminh && ch) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10650 data.top = dh - o.minHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10651 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10652 if (ismaxh && ch) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10653 data.top = dh - o.maxHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10654 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10655
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10656 // fixing jump error on top/left - bug #2330
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10657 if (!data.width && !data.height && !data.left && data.top) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10658 data.top = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10659 } else if (!data.width && !data.height && !data.top && data.left) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10660 data.left = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10661 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10662
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10663 return data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10664 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10665
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10666 _proportionallyResize: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10667
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10668 if (!this._proportionallyResizeElements.length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10669 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10670 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10671
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10672 var i, j, borders, paddings, prel,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10673 element = this.helper || this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10674
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10675 for ( i=0; i < this._proportionallyResizeElements.length; i++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10676
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10677 prel = this._proportionallyResizeElements[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10678
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10679 if (!this.borderDif) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10680 this.borderDif = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10681 borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10682 paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10683
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10684 for ( j = 0; j < borders.length; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10685 this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10686 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10687 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10688
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10689 prel.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10690 height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10691 width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10692 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10693
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10694 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10695
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10696 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10697
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10698 _renderProxy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10699
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10700 var el = this.element, o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10701 this.elementOffset = el.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10702
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10703 if(this._helper) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10705 this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10706
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10707 this.helper.addClass(this._helper).css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10708 width: this.element.outerWidth() - 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10709 height: this.element.outerHeight() - 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10710 position: "absolute",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10711 left: this.elementOffset.left +"px",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10712 top: this.elementOffset.top +"px",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10713 zIndex: ++o.zIndex //TODO: Don't modify option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10714 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10715
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10716 this.helper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10717 .appendTo("body")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10718 .disableSelection();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10719
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10720 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10721 this.helper = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10722 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10723
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10724 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10725
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10726 _change: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10727 e: function(event, dx) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10728 return { width: this.originalSize.width + dx };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10729 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10730 w: function(event, dx) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10731 var cs = this.originalSize, sp = this.originalPosition;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10732 return { left: sp.left + dx, width: cs.width - dx };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10733 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10734 n: function(event, dx, dy) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10735 var cs = this.originalSize, sp = this.originalPosition;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10736 return { top: sp.top + dy, height: cs.height - dy };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10737 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10738 s: function(event, dx, dy) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10739 return { height: this.originalSize.height + dy };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10740 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10741 se: function(event, dx, dy) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10742 return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10743 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10744 sw: function(event, dx, dy) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10745 return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10746 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10747 ne: function(event, dx, dy) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10748 return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10749 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10750 nw: function(event, dx, dy) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10751 return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10752 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10753 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10754
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10755 _propagate: function(n, event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10756 $.ui.plugin.call(this, n, [event, this.ui()]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10757 (n !== "resize" && this._trigger(n, event, this.ui()));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10758 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10759
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10760 plugins: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10761
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10762 ui: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10763 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10764 originalElement: this.originalElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10765 element: this.element,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10766 helper: this.helper,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10767 position: this.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10768 size: this.size,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10769 originalSize: this.originalSize,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10770 originalPosition: this.originalPosition
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10771 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10772 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10773
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10774 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10775
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10776 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10777 * Resizable Extensions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10778 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10779
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10780 $.ui.plugin.add("resizable", "animate", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10781
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10782 stop: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10783 var that = $(this).data("ui-resizable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10784 o = that.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10785 pr = that._proportionallyResizeElements,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10786 ista = pr.length && (/textarea/i).test(pr[0].nodeName),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10787 soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10788 soffsetw = ista ? 0 : that.sizeDiff.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10789 style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10790 left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10791 top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10792
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10793 that.element.animate(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10794 $.extend(style, top && left ? { top: top, left: left } : {}), {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10795 duration: o.animateDuration,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10796 easing: o.animateEasing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10797 step: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10798
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10799 var data = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10800 width: parseInt(that.element.css("width"), 10),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10801 height: parseInt(that.element.css("height"), 10),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10802 top: parseInt(that.element.css("top"), 10),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10803 left: parseInt(that.element.css("left"), 10)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10804 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10805
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10806 if (pr && pr.length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10807 $(pr[0]).css({ width: data.width, height: data.height });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10808 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10809
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10810 // propagating resize, and updating values for each animation step
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10811 that._updateCache(data);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10812 that._propagate("resize", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10813
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10814 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10815 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10816 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10817 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10818
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10819 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10820
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10821 $.ui.plugin.add("resizable", "containment", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10822
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10823 start: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10824 var element, p, co, ch, cw, width, height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10825 that = $(this).data("ui-resizable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10826 o = that.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10827 el = that.element,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10828 oc = o.containment,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10829 ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10830
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10831 if (!ce) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10832 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10833 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10834
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10835 that.containerElement = $(ce);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10836
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10837 if (/document/.test(oc) || oc === document) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10838 that.containerOffset = { left: 0, top: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10839 that.containerPosition = { left: 0, top: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10840
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10841 that.parentData = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10842 element: $(document), left: 0, top: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10843 width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10844 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10845 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10846
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10847 // i'm a node, so compute top, left, right, bottom
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10848 else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10849 element = $(ce);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10850 p = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10851 $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10852
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10853 that.containerOffset = element.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10854 that.containerPosition = element.position();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10855 that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10856
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10857 co = that.containerOffset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10858 ch = that.containerSize.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10859 cw = that.containerSize.width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10860 width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10861 height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10862
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10863 that.parentData = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10864 element: ce, left: co.left, top: co.top, width: width, height: height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10865 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10866 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10867 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10868
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10869 resize: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10870 var woset, hoset, isParent, isOffsetRelative,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10871 that = $(this).data("ui-resizable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10872 o = that.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10873 co = that.containerOffset, cp = that.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10874 pRatio = that._aspectRatio || event.shiftKey,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10875 cop = { top:0, left:0 }, ce = that.containerElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10877 if (ce[0] !== document && (/static/).test(ce.css("position"))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10878 cop = co;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10879 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10880
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10881 if (cp.left < (that._helper ? co.left : 0)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10882 that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10883 if (pRatio) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10884 that.size.height = that.size.width / that.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10885 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10886 that.position.left = o.helper ? co.left : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10887 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10888
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10889 if (cp.top < (that._helper ? co.top : 0)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10890 that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10891 if (pRatio) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10892 that.size.width = that.size.height * that.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10893 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10894 that.position.top = that._helper ? co.top : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10895 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10896
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10897 that.offset.left = that.parentData.left+that.position.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10898 that.offset.top = that.parentData.top+that.position.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10899
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10900 woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10901 hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10902
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10903 isParent = that.containerElement.get(0) === that.element.parent().get(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10904 isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10905
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10906 if ( isParent && isOffsetRelative ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10907 woset -= Math.abs( that.parentData.left );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10908 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10909
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10910 if (woset + that.size.width >= that.parentData.width) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10911 that.size.width = that.parentData.width - woset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10912 if (pRatio) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10913 that.size.height = that.size.width / that.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10914 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10915 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10916
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10917 if (hoset + that.size.height >= that.parentData.height) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10918 that.size.height = that.parentData.height - hoset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10919 if (pRatio) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10920 that.size.width = that.size.height * that.aspectRatio;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10921 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10922 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10923 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10924
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10925 stop: function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10926 var that = $(this).data("ui-resizable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10927 o = that.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10928 co = that.containerOffset,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10929 cop = that.containerPosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10930 ce = that.containerElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10931 helper = $(that.helper),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10932 ho = helper.offset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10933 w = helper.outerWidth() - that.sizeDiff.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10934 h = helper.outerHeight() - that.sizeDiff.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10935
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10936 if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10937 $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10938 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10939
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10940 if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10941 $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10942 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10943
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10944 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10945 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10946
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10947 $.ui.plugin.add("resizable", "alsoResize", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10948
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10949 start: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10950 var that = $(this).data("ui-resizable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10951 o = that.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10952 _store = function (exp) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10953 $(exp).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10954 var el = $(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10955 el.data("ui-resizable-alsoresize", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10956 width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10957 left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10958 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10959 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10960 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10961
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10962 if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10963 if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10964 else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10965 }else{
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10966 _store(o.alsoResize);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10967 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10968 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10969
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10970 resize: function (event, ui) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10971 var that = $(this).data("ui-resizable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10972 o = that.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10973 os = that.originalSize,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10974 op = that.originalPosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10975 delta = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10976 height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10977 top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10978 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10979
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10980 _alsoResize = function (exp, c) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10981 $(exp).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10982 var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10983 css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10984
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10985 $.each(css, function (i, prop) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10986 var sum = (start[prop]||0) + (delta[prop]||0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10987 if (sum && sum >= 0) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10988 style[prop] = sum || null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10989 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10990 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10991
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10992 el.css(style);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10993 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10994 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10995
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10996 if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10997 $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10998 }else{
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10999 _alsoResize(o.alsoResize);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11000 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11001 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11002
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11003 stop: function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11004 $(this).removeData("resizable-alsoresize");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11005 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11006 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11007
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11008 $.ui.plugin.add("resizable", "ghost", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11009
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11010 start: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11011
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11012 var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11013
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11014 that.ghost = that.originalElement.clone();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11015 that.ghost
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11016 .css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11017 .addClass("ui-resizable-ghost")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11018 .addClass(typeof o.ghost === "string" ? o.ghost : "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11019
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11020 that.ghost.appendTo(that.helper);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11022 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11023
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11024 resize: function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11025 var that = $(this).data("ui-resizable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11026 if (that.ghost) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11027 that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11028 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11029 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11030
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11031 stop: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11032 var that = $(this).data("ui-resizable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11033 if (that.ghost && that.helper) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11034 that.helper.get(0).removeChild(that.ghost.get(0));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11035 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11036 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11037
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11038 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11039
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11040 $.ui.plugin.add("resizable", "grid", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11041
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11042 resize: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11043 var that = $(this).data("ui-resizable"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11044 o = that.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11045 cs = that.size,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11046 os = that.originalSize,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11047 op = that.originalPosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11048 a = that.axis,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11049 grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11050 gridX = (grid[0]||1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11051 gridY = (grid[1]||1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11052 ox = Math.round((cs.width - os.width) / gridX) * gridX,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11053 oy = Math.round((cs.height - os.height) / gridY) * gridY,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11054 newWidth = os.width + ox,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11055 newHeight = os.height + oy,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11056 isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11057 isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11058 isMinWidth = o.minWidth && (o.minWidth > newWidth),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11059 isMinHeight = o.minHeight && (o.minHeight > newHeight);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11060
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11061 o.grid = grid;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11062
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11063 if (isMinWidth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11064 newWidth = newWidth + gridX;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11065 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11066 if (isMinHeight) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11067 newHeight = newHeight + gridY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11068 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11069 if (isMaxWidth) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11070 newWidth = newWidth - gridX;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11071 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11072 if (isMaxHeight) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11073 newHeight = newHeight - gridY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11074 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11075
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11076 if (/^(se|s|e)$/.test(a)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11077 that.size.width = newWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11078 that.size.height = newHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11079 } else if (/^(ne)$/.test(a)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11080 that.size.width = newWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11081 that.size.height = newHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11082 that.position.top = op.top - oy;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11083 } else if (/^(sw)$/.test(a)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11084 that.size.width = newWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11085 that.size.height = newHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11086 that.position.left = op.left - ox;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11087 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11088 if ( newHeight - gridY > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11089 that.size.height = newHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11090 that.position.top = op.top - oy;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11091 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11092 that.size.height = gridY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11093 that.position.top = op.top + os.height - gridY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11094 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11095 if ( newWidth - gridX > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11096 that.size.width = newWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11097 that.position.left = op.left - ox;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11098 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11099 that.size.width = gridX;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11100 that.position.left = op.left + os.width - gridX;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11101 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11102 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11103 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11104
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11105 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11106
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11107 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11108 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11109
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11110 $.widget("ui.selectable", $.ui.mouse, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11111 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11112 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11113 appendTo: "body",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11114 autoRefresh: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11115 distance: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11116 filter: "*",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11117 tolerance: "touch",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11118
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11119 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11120 selected: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11121 selecting: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11122 start: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11123 stop: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11124 unselected: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11125 unselecting: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11126 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11127 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11128 var selectees,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11129 that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11130
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11131 this.element.addClass("ui-selectable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11132
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11133 this.dragged = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11134
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11135 // cache selectee children based on filter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11136 this.refresh = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11137 selectees = $(that.options.filter, that.element[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11138 selectees.addClass("ui-selectee");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11139 selectees.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11140 var $this = $(this),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11141 pos = $this.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11142 $.data(this, "selectable-item", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11143 element: this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11144 $element: $this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11145 left: pos.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11146 top: pos.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11147 right: pos.left + $this.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11148 bottom: pos.top + $this.outerHeight(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11149 startselected: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11150 selected: $this.hasClass("ui-selected"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11151 selecting: $this.hasClass("ui-selecting"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11152 unselecting: $this.hasClass("ui-unselecting")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11153 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11154 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11155 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11156 this.refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11157
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11158 this.selectees = selectees.addClass("ui-selectee");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11159
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11160 this._mouseInit();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11161
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11162 this.helper = $("<div class='ui-selectable-helper'></div>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11163 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11164
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11165 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11166 this.selectees
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11167 .removeClass("ui-selectee")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11168 .removeData("selectable-item");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11169 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11170 .removeClass("ui-selectable ui-selectable-disabled");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11171 this._mouseDestroy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11172 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11173
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11174 _mouseStart: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11175 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11176 options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11177
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11178 this.opos = [event.pageX, event.pageY];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11179
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11180 if (this.options.disabled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11181 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11182 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11183
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11184 this.selectees = $(options.filter, this.element[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11185
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11186 this._trigger("start", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11187
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11188 $(options.appendTo).append(this.helper);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11189 // position helper (lasso)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11190 this.helper.css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11191 "left": event.pageX,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11192 "top": event.pageY,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11193 "width": 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11194 "height": 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11195 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11196
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11197 if (options.autoRefresh) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11198 this.refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11199 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11200
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11201 this.selectees.filter(".ui-selected").each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11202 var selectee = $.data(this, "selectable-item");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11203 selectee.startselected = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11204 if (!event.metaKey && !event.ctrlKey) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11205 selectee.$element.removeClass("ui-selected");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11206 selectee.selected = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11207 selectee.$element.addClass("ui-unselecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11208 selectee.unselecting = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11209 // selectable UNSELECTING callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11210 that._trigger("unselecting", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11211 unselecting: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11212 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11213 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11214 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11215
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11216 $(event.target).parents().addBack().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11217 var doSelect,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11218 selectee = $.data(this, "selectable-item");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11219 if (selectee) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11220 doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11221 selectee.$element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11222 .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11223 .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11224 selectee.unselecting = !doSelect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11225 selectee.selecting = doSelect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11226 selectee.selected = doSelect;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11227 // selectable (UN)SELECTING callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11228 if (doSelect) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11229 that._trigger("selecting", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11230 selecting: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11231 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11232 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11233 that._trigger("unselecting", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11234 unselecting: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11235 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11236 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11237 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11238 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11239 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11240
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11241 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11242
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11243 _mouseDrag: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11244
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11245 this.dragged = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11246
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11247 if (this.options.disabled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11248 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11249 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11250
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11251 var tmp,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11252 that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11253 options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11254 x1 = this.opos[0],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11255 y1 = this.opos[1],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11256 x2 = event.pageX,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11257 y2 = event.pageY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11258
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11259 if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11260 if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11261 this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11262
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11263 this.selectees.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11264 var selectee = $.data(this, "selectable-item"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11265 hit = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11266
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11267 //prevent helper from being selected if appendTo: selectable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11268 if (!selectee || selectee.element === that.element[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11269 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11270 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11271
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11272 if (options.tolerance === "touch") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11273 hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11274 } else if (options.tolerance === "fit") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11275 hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11276 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11277
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11278 if (hit) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11279 // SELECT
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11280 if (selectee.selected) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11281 selectee.$element.removeClass("ui-selected");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11282 selectee.selected = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11283 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11284 if (selectee.unselecting) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11285 selectee.$element.removeClass("ui-unselecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11286 selectee.unselecting = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11287 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11288 if (!selectee.selecting) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11289 selectee.$element.addClass("ui-selecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11290 selectee.selecting = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11291 // selectable SELECTING callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11292 that._trigger("selecting", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11293 selecting: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11294 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11295 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11296 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11297 // UNSELECT
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11298 if (selectee.selecting) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11299 if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11300 selectee.$element.removeClass("ui-selecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11301 selectee.selecting = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11302 selectee.$element.addClass("ui-selected");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11303 selectee.selected = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11304 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11305 selectee.$element.removeClass("ui-selecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11306 selectee.selecting = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11307 if (selectee.startselected) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11308 selectee.$element.addClass("ui-unselecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11309 selectee.unselecting = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11310 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11311 // selectable UNSELECTING callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11312 that._trigger("unselecting", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11313 unselecting: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11314 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11315 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11316 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11317 if (selectee.selected) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11318 if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11319 selectee.$element.removeClass("ui-selected");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11320 selectee.selected = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11321
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11322 selectee.$element.addClass("ui-unselecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11323 selectee.unselecting = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11324 // selectable UNSELECTING callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11325 that._trigger("unselecting", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11326 unselecting: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11327 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11328 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11329 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11330 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11331 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11332
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11333 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11334 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11335
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11336 _mouseStop: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11337 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11338
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11339 this.dragged = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11341 $(".ui-unselecting", this.element[0]).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11342 var selectee = $.data(this, "selectable-item");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11343 selectee.$element.removeClass("ui-unselecting");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11344 selectee.unselecting = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11345 selectee.startselected = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11346 that._trigger("unselected", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11347 unselected: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11348 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11349 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11350 $(".ui-selecting", this.element[0]).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11351 var selectee = $.data(this, "selectable-item");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11352 selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11353 selectee.selecting = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11354 selectee.selected = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11355 selectee.startselected = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11356 that._trigger("selected", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11357 selected: selectee.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11358 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11359 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11360 this._trigger("stop", event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11361
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11362 this.helper.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11364 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11365 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11366
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11367 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11368
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11369 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11370 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11371
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11372 // number of pages in a slider
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11373 // (how many times can you page up/down to go through the whole range)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11374 var numPages = 5;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11375
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11376 $.widget( "ui.slider", $.ui.mouse, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11377 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11378 widgetEventPrefix: "slide",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11379
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11380 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11381 animate: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11382 distance: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11383 max: 100,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11384 min: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11385 orientation: "horizontal",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11386 range: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11387 step: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11388 value: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11389 values: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11390
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11391 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11392 change: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11393 slide: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11394 start: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11395 stop: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11396 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11397
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11398 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11399 this._keySliding = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11400 this._mouseSliding = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11401 this._animateOff = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11402 this._handleIndex = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11403 this._detectOrientation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11404 this._mouseInit();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11405
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11406 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11407 .addClass( "ui-slider" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11408 " ui-slider-" + this.orientation +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11409 " ui-widget" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11410 " ui-widget-content" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11411 " ui-corner-all");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11412
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11413 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11414 this._setOption( "disabled", this.options.disabled );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11415
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11416 this._animateOff = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11417 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11418
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11419 _refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11420 this._createRange();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11421 this._createHandles();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11422 this._setupEvents();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11423 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11424 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11425
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11426 _createHandles: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11427 var i, handleCount,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11428 options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11429 existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11430 handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11431 handles = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11432
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11433 handleCount = ( options.values && options.values.length ) || 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11434
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11435 if ( existingHandles.length > handleCount ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11436 existingHandles.slice( handleCount ).remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11437 existingHandles = existingHandles.slice( 0, handleCount );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11438 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11439
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11440 for ( i = existingHandles.length; i < handleCount; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11441 handles.push( handle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11442 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11443
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11444 this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11445
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11446 this.handle = this.handles.eq( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11447
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11448 this.handles.each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11449 $( this ).data( "ui-slider-handle-index", i );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11450 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11451 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11452
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11453 _createRange: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11454 var options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11455 classes = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11456
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11457 if ( options.range ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11458 if ( options.range === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11459 if ( !options.values ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11460 options.values = [ this._valueMin(), this._valueMin() ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11461 } else if ( options.values.length && options.values.length !== 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11462 options.values = [ options.values[0], options.values[0] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11463 } else if ( $.isArray( options.values ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11464 options.values = options.values.slice(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11465 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11466 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11467
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11468 if ( !this.range || !this.range.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11469 this.range = $( "<div></div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11470 .appendTo( this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11471
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11472 classes = "ui-slider-range" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11473 // note: this isn't the most fittingly semantic framework class for this element,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11474 // but worked best visually with a variety of themes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11475 " ui-widget-header ui-corner-all";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11476 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11477 this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11478 // Handle range switching from true to min/max
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11479 .css({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11480 "left": "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11481 "bottom": ""
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11482 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11483 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11484
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11485 this.range.addClass( classes +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11486 ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11487 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11488 if ( this.range ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11489 this.range.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11490 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11491 this.range = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11492 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11493 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11494
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11495 _setupEvents: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11496 var elements = this.handles.add( this.range ).filter( "a" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11497 this._off( elements );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11498 this._on( elements, this._handleEvents );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11499 this._hoverable( elements );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11500 this._focusable( elements );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11501 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11502
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11503 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11504 this.handles.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11505 if ( this.range ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11506 this.range.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11507 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11508
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11509 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11510 .removeClass( "ui-slider" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11511 " ui-slider-horizontal" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11512 " ui-slider-vertical" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11513 " ui-widget" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11514 " ui-widget-content" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11515 " ui-corner-all" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11516
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11517 this._mouseDestroy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11518 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11519
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11520 _mouseCapture: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11521 var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11522 that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11523 o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11524
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11525 if ( o.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11526 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11527 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11528
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11529 this.elementSize = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11530 width: this.element.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11531 height: this.element.outerHeight()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11532 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11533 this.elementOffset = this.element.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11535 position = { x: event.pageX, y: event.pageY };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11536 normValue = this._normValueFromMouse( position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11537 distance = this._valueMax() - this._valueMin() + 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11538 this.handles.each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11539 var thisDistance = Math.abs( normValue - that.values(i) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11540 if (( distance > thisDistance ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11541 ( distance === thisDistance &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11542 (i === that._lastChangedValue || that.values(i) === o.min ))) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11543 distance = thisDistance;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11544 closestHandle = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11545 index = i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11546 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11547 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11548
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11549 allowed = this._start( event, index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11550 if ( allowed === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11551 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11552 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11553 this._mouseSliding = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11554
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11555 this._handleIndex = index;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11556
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11557 closestHandle
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11558 .addClass( "ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11559 .focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11560
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11561 offset = closestHandle.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11562 mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11563 this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11564 left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11565 top: event.pageY - offset.top -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11566 ( closestHandle.height() / 2 ) -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11567 ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11568 ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11569 ( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11570 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11571
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11572 if ( !this.handles.hasClass( "ui-state-hover" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11573 this._slide( event, index, normValue );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11574 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11575 this._animateOff = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11576 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11577 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11578
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11579 _mouseStart: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11580 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11581 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11582
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11583 _mouseDrag: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11584 var position = { x: event.pageX, y: event.pageY },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11585 normValue = this._normValueFromMouse( position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11586
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11587 this._slide( event, this._handleIndex, normValue );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11589 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11590 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11591
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11592 _mouseStop: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11593 this.handles.removeClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11594 this._mouseSliding = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11596 this._stop( event, this._handleIndex );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11597 this._change( event, this._handleIndex );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11598
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11599 this._handleIndex = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11600 this._clickOffset = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11601 this._animateOff = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11602
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11603 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11604 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11605
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11606 _detectOrientation: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11607 this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11608 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11609
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11610 _normValueFromMouse: function( position ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11611 var pixelTotal,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11612 pixelMouse,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11613 percentMouse,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11614 valueTotal,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11615 valueMouse;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11616
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11617 if ( this.orientation === "horizontal" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11618 pixelTotal = this.elementSize.width;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11619 pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11620 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11621 pixelTotal = this.elementSize.height;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11622 pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11623 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11624
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11625 percentMouse = ( pixelMouse / pixelTotal );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11626 if ( percentMouse > 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11627 percentMouse = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11628 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11629 if ( percentMouse < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11630 percentMouse = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11631 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11632 if ( this.orientation === "vertical" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11633 percentMouse = 1 - percentMouse;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11634 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11635
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11636 valueTotal = this._valueMax() - this._valueMin();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11637 valueMouse = this._valueMin() + percentMouse * valueTotal;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11638
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11639 return this._trimAlignValue( valueMouse );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11640 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11641
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11642 _start: function( event, index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11643 var uiHash = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11644 handle: this.handles[ index ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11645 value: this.value()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11646 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11647 if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11648 uiHash.value = this.values( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11649 uiHash.values = this.values();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11650 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11651 return this._trigger( "start", event, uiHash );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11652 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11653
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11654 _slide: function( event, index, newVal ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11655 var otherVal,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11656 newValues,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11657 allowed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11658
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11659 if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11660 otherVal = this.values( index ? 0 : 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11661
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11662 if ( ( this.options.values.length === 2 && this.options.range === true ) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11663 ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11664 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11665 newVal = otherVal;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11666 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11667
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11668 if ( newVal !== this.values( index ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11669 newValues = this.values();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11670 newValues[ index ] = newVal;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11671 // A slide can be canceled by returning false from the slide callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11672 allowed = this._trigger( "slide", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11673 handle: this.handles[ index ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11674 value: newVal,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11675 values: newValues
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11676 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11677 otherVal = this.values( index ? 0 : 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11678 if ( allowed !== false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11679 this.values( index, newVal );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11680 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11681 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11682 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11683 if ( newVal !== this.value() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11684 // A slide can be canceled by returning false from the slide callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11685 allowed = this._trigger( "slide", event, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11686 handle: this.handles[ index ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11687 value: newVal
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11688 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11689 if ( allowed !== false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11690 this.value( newVal );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11691 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11692 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11693 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11694 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11695
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11696 _stop: function( event, index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11697 var uiHash = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11698 handle: this.handles[ index ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11699 value: this.value()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11700 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11701 if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11702 uiHash.value = this.values( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11703 uiHash.values = this.values();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11704 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11705
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11706 this._trigger( "stop", event, uiHash );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11707 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11708
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11709 _change: function( event, index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11710 if ( !this._keySliding && !this._mouseSliding ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11711 var uiHash = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11712 handle: this.handles[ index ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11713 value: this.value()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11714 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11715 if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11716 uiHash.value = this.values( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11717 uiHash.values = this.values();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11718 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11719
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11720 //store the last changed value index for reference when handles overlap
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11721 this._lastChangedValue = index;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11722
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11723 this._trigger( "change", event, uiHash );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11724 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11725 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11726
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11727 value: function( newValue ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11728 if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11729 this.options.value = this._trimAlignValue( newValue );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11730 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11731 this._change( null, 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11732 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11733 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11734
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11735 return this._value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11736 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11737
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11738 values: function( index, newValue ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11739 var vals,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11740 newValues,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11741 i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11742
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11743 if ( arguments.length > 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11744 this.options.values[ index ] = this._trimAlignValue( newValue );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11745 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11746 this._change( null, index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11747 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11748 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11749
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11750 if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11751 if ( $.isArray( arguments[ 0 ] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11752 vals = this.options.values;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11753 newValues = arguments[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11754 for ( i = 0; i < vals.length; i += 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11755 vals[ i ] = this._trimAlignValue( newValues[ i ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11756 this._change( null, i );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11757 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11758 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11759 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11760 if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11761 return this._values( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11762 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11763 return this.value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11764 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11765 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11766 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11767 return this._values();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11768 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11769 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11770
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11771 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11772 var i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11773 valsLength = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11774
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11775 if ( key === "range" && this.options.range === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11776 if ( value === "min" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11777 this.options.value = this._values( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11778 this.options.values = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11779 } else if ( value === "max" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11780 this.options.value = this._values( this.options.values.length-1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11781 this.options.values = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11782 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11783 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11784
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11785 if ( $.isArray( this.options.values ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11786 valsLength = this.options.values.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11787 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11788
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11789 $.Widget.prototype._setOption.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11790
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11791 switch ( key ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11792 case "orientation":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11793 this._detectOrientation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11794 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11795 .removeClass( "ui-slider-horizontal ui-slider-vertical" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11796 .addClass( "ui-slider-" + this.orientation );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11797 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11798 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11799 case "value":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11800 this._animateOff = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11801 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11802 this._change( null, 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11803 this._animateOff = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11804 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11805 case "values":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11806 this._animateOff = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11807 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11808 for ( i = 0; i < valsLength; i += 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11809 this._change( null, i );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11810 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11811 this._animateOff = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11812 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11813 case "min":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11814 case "max":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11815 this._animateOff = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11816 this._refreshValue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11817 this._animateOff = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11818 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11819 case "range":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11820 this._animateOff = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11821 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11822 this._animateOff = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11823 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11824 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11825 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11826
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11827 //internal value getter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11828 // _value() returns value trimmed by min and max, aligned by step
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11829 _value: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11830 var val = this.options.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11831 val = this._trimAlignValue( val );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11832
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11833 return val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11834 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11835
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11836 //internal values getter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11837 // _values() returns array of values trimmed by min and max, aligned by step
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11838 // _values( index ) returns single value trimmed by min and max, aligned by step
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11839 _values: function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11840 var val,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11841 vals,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11842 i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11843
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11844 if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11845 val = this.options.values[ index ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11846 val = this._trimAlignValue( val );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11847
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11848 return val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11849 } else if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11850 // .slice() creates a copy of the array
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11851 // this copy gets trimmed by min and max and then returned
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11852 vals = this.options.values.slice();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11853 for ( i = 0; i < vals.length; i+= 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11854 vals[ i ] = this._trimAlignValue( vals[ i ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11855 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11856
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11857 return vals;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11858 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11859 return [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11860 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11861 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11862
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11863 // returns the step-aligned value that val is closest to, between (inclusive) min and max
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11864 _trimAlignValue: function( val ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11865 if ( val <= this._valueMin() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11866 return this._valueMin();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11867 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11868 if ( val >= this._valueMax() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11869 return this._valueMax();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11870 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11871 var step = ( this.options.step > 0 ) ? this.options.step : 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11872 valModStep = (val - this._valueMin()) % step,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11873 alignValue = val - valModStep;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11874
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11875 if ( Math.abs(valModStep) * 2 >= step ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11876 alignValue += ( valModStep > 0 ) ? step : ( -step );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11877 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11878
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11879 // Since JavaScript has problems with large floats, round
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11880 // the final value to 5 digits after the decimal point (see #4124)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11881 return parseFloat( alignValue.toFixed(5) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11882 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11883
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11884 _valueMin: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11885 return this.options.min;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11886 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11887
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11888 _valueMax: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11889 return this.options.max;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11890 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11891
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11892 _refreshValue: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11893 var lastValPercent, valPercent, value, valueMin, valueMax,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11894 oRange = this.options.range,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11895 o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11896 that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11897 animate = ( !this._animateOff ) ? o.animate : false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11898 _set = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11899
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11900 if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11901 this.handles.each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11902 valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11903 _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11904 $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11905 if ( that.options.range === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11906 if ( that.orientation === "horizontal" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11907 if ( i === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11908 that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11909 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11910 if ( i === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11911 that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11912 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11913 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11914 if ( i === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11915 that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11916 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11917 if ( i === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11918 that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11919 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11920 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11921 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11922 lastValPercent = valPercent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11923 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11924 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11925 value = this.value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11926 valueMin = this._valueMin();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11927 valueMax = this._valueMax();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11928 valPercent = ( valueMax !== valueMin ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11929 ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11930 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11931 _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11932 this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11933
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11934 if ( oRange === "min" && this.orientation === "horizontal" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11935 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11936 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11937 if ( oRange === "max" && this.orientation === "horizontal" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11938 this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11939 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11940 if ( oRange === "min" && this.orientation === "vertical" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11941 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11942 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11943 if ( oRange === "max" && this.orientation === "vertical" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11944 this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11945 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11946 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11947 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11948
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11949 _handleEvents: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11950 keydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11951 var allowed, curVal, newVal, step,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11952 index = $( event.target ).data( "ui-slider-handle-index" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11953
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11954 switch ( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11955 case $.ui.keyCode.HOME:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11956 case $.ui.keyCode.END:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11957 case $.ui.keyCode.PAGE_UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11958 case $.ui.keyCode.PAGE_DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11959 case $.ui.keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11960 case $.ui.keyCode.RIGHT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11961 case $.ui.keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11962 case $.ui.keyCode.LEFT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11963 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11964 if ( !this._keySliding ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11965 this._keySliding = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11966 $( event.target ).addClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11967 allowed = this._start( event, index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11968 if ( allowed === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11969 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11970 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11971 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11972 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11973 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11974
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11975 step = this.options.step;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11976 if ( this.options.values && this.options.values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11977 curVal = newVal = this.values( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11978 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11979 curVal = newVal = this.value();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11980 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11981
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11982 switch ( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11983 case $.ui.keyCode.HOME:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11984 newVal = this._valueMin();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11985 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11986 case $.ui.keyCode.END:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11987 newVal = this._valueMax();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11988 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11989 case $.ui.keyCode.PAGE_UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11990 newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11991 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11992 case $.ui.keyCode.PAGE_DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11993 newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11994 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11995 case $.ui.keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11996 case $.ui.keyCode.RIGHT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11997 if ( curVal === this._valueMax() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11998 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11999 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12000 newVal = this._trimAlignValue( curVal + step );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12001 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12002 case $.ui.keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12003 case $.ui.keyCode.LEFT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12004 if ( curVal === this._valueMin() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12005 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12006 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12007 newVal = this._trimAlignValue( curVal - step );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12008 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12009 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12010
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12011 this._slide( event, index, newVal );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12012 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12013 click: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12014 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12015 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12016 keyup: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12017 var index = $( event.target ).data( "ui-slider-handle-index" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12018
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12019 if ( this._keySliding ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12020 this._keySliding = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12021 this._stop( event, index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12022 this._change( event, index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12023 $( event.target ).removeClass( "ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12024 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12025 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12026 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12027
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12028 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12029
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12030 }(jQuery));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12031 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12032
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12033 function isOverAxis( x, reference, size ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12034 return ( x > reference ) && ( x < ( reference + size ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12035 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12036
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12037 function isFloating(item) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12038 return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12039 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12040
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12041 $.widget("ui.sortable", $.ui.mouse, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12042 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12043 widgetEventPrefix: "sort",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12044 ready: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12045 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12046 appendTo: "parent",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12047 axis: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12048 connectWith: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12049 containment: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12050 cursor: "auto",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12051 cursorAt: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12052 dropOnEmpty: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12053 forcePlaceholderSize: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12054 forceHelperSize: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12055 grid: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12056 handle: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12057 helper: "original",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12058 items: "> *",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12059 opacity: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12060 placeholder: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12061 revert: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12062 scroll: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12063 scrollSensitivity: 20,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12064 scrollSpeed: 20,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12065 scope: "default",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12066 tolerance: "intersect",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12067 zIndex: 1000,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12068
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12069 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12070 activate: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12071 beforeStop: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12072 change: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12073 deactivate: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12074 out: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12075 over: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12076 receive: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12077 remove: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12078 sort: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12079 start: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12080 stop: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12081 update: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12082 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12083 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12084
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12085 var o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12086 this.containerCache = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12087 this.element.addClass("ui-sortable");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12088
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12089 //Get the items
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12090 this.refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12091
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12092 //Let's determine if the items are being displayed horizontally
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12093 this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12094
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12095 //Let's determine the parent's offset
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12096 this.offset = this.element.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12097
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12098 //Initialize mouse events for interaction
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12099 this._mouseInit();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12100
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12101 //We're ready to go
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12102 this.ready = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12103
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12104 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12105
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12106 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12107 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12108 .removeClass("ui-sortable ui-sortable-disabled");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12109 this._mouseDestroy();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12110
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12111 for ( var i = this.items.length - 1; i >= 0; i-- ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12112 this.items[i].item.removeData(this.widgetName + "-item");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12113 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12114
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12115 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12116 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12117
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12118 _setOption: function(key, value){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12119 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12120 this.options[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12121
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12122 this.widget().toggleClass( "ui-sortable-disabled", !!value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12123 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12124 // Don't call widget base _setOption for disable as it adds ui-state-disabled class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12125 $.Widget.prototype._setOption.apply(this, arguments);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12126 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12127 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12128
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12129 _mouseCapture: function(event, overrideHandle) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12130 var currentItem = null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12131 validHandle = false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12132 that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12134 if (this.reverting) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12135 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12136 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12137
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12138 if(this.options.disabled || this.options.type === "static") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12139 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12140 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12141
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12142 //We have to refresh the items data once first
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12143 this._refreshItems(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12144
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12145 //Find out if the clicked node (or one of its parents) is a actual item in this.items
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12146 $(event.target).parents().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12147 if($.data(this, that.widgetName + "-item") === that) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12148 currentItem = $(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12149 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12150 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12151 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12152 if($.data(event.target, that.widgetName + "-item") === that) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12153 currentItem = $(event.target);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12154 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12155
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12156 if(!currentItem) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12157 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12158 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12159 if(this.options.handle && !overrideHandle) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12160 $(this.options.handle, currentItem).find("*").addBack().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12161 if(this === event.target) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12162 validHandle = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12163 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12164 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12165 if(!validHandle) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12166 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12167 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12168 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12169
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12170 this.currentItem = currentItem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12171 this._removeCurrentsFromItems();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12172 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12173
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12174 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12175
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12176 _mouseStart: function(event, overrideHandle, noActivation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12177
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12178 var i, body,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12179 o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12180
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12181 this.currentContainer = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12182
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12183 //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12184 this.refreshPositions();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12185
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12186 //Create and append the visible helper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12187 this.helper = this._createHelper(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12188
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12189 //Cache the helper size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12190 this._cacheHelperProportions();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12191
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12192 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12193 * - Position generation -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12194 * This block generates everything position related - it's the core of draggables.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12195 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12196
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12197 //Cache the margins of the original element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12198 this._cacheMargins();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12199
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12200 //Get the next scrolling parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12201 this.scrollParent = this.helper.scrollParent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12202
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12203 //The element's absolute position on the page minus margins
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12204 this.offset = this.currentItem.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12205 this.offset = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12206 top: this.offset.top - this.margins.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12207 left: this.offset.left - this.margins.left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12208 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12209
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12210 $.extend(this.offset, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12211 click: { //Where the click happened, relative to the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12212 left: event.pageX - this.offset.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12213 top: event.pageY - this.offset.top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12214 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12215 parent: this._getParentOffset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12216 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12217 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12218
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12219 // Only after we got the offset, we can change the helper's position to absolute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12220 // TODO: Still need to figure out a way to make relative sorting possible
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12221 this.helper.css("position", "absolute");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12222 this.cssPosition = this.helper.css("position");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12223
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12224 //Generate the original position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12225 this.originalPosition = this._generatePosition(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12226 this.originalPageX = event.pageX;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12227 this.originalPageY = event.pageY;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12228
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12229 //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12230 (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12231
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12232 //Cache the former DOM position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12233 this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12234
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12235 //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12236 if(this.helper[0] !== this.currentItem[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12237 this.currentItem.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12238 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12239
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12240 //Create the placeholder
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12241 this._createPlaceholder();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12242
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12243 //Set a containment if given in the options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12244 if(o.containment) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12245 this._setContainment();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12246 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12247
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12248 if( o.cursor && o.cursor !== "auto" ) { // cursor option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12249 body = this.document.find( "body" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12250
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12251 // support: IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12252 this.storedCursor = body.css( "cursor" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12253 body.css( "cursor", o.cursor );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12254
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12255 this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12256 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12257
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12258 if(o.opacity) { // opacity option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12259 if (this.helper.css("opacity")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12260 this._storedOpacity = this.helper.css("opacity");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12261 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12262 this.helper.css("opacity", o.opacity);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12263 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12264
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12265 if(o.zIndex) { // zIndex option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12266 if (this.helper.css("zIndex")) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12267 this._storedZIndex = this.helper.css("zIndex");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12268 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12269 this.helper.css("zIndex", o.zIndex);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12270 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12271
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12272 //Prepare scrolling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12273 if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12274 this.overflowOffset = this.scrollParent.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12275 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12276
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12277 //Call callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12278 this._trigger("start", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12279
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12280 //Recache the helper size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12281 if(!this._preserveHelperProportions) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12282 this._cacheHelperProportions();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12283 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12284
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12285
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12286 //Post "activate" events to possible containers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12287 if( !noActivation ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12288 for ( i = this.containers.length - 1; i >= 0; i-- ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12289 this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12290 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12291 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12292
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12293 //Prepare possible droppables
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12294 if($.ui.ddmanager) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12295 $.ui.ddmanager.current = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12296 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12297
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12298 if ($.ui.ddmanager && !o.dropBehaviour) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12299 $.ui.ddmanager.prepareOffsets(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12300 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12301
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12302 this.dragging = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12303
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12304 this.helper.addClass("ui-sortable-helper");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12305 this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12306 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12307
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12308 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12309
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12310 _mouseDrag: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12311 var i, item, itemElement, intersection,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12312 o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12313 scrolled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12314
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12315 //Compute the helpers position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12316 this.position = this._generatePosition(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12317 this.positionAbs = this._convertPositionTo("absolute");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12318
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12319 if (!this.lastPositionAbs) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12320 this.lastPositionAbs = this.positionAbs;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12321 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12322
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12323 //Do scrolling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12324 if(this.options.scroll) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12325 if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12326
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12327 if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12328 this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12329 } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12330 this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12331 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12332
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12333 if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12334 this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12335 } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12336 this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12337 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12338
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12339 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12341 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12342 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12343 } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12344 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12345 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12346
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12347 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12348 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12349 } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12350 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12351 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12352
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12353 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12354
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12355 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12356 $.ui.ddmanager.prepareOffsets(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12357 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12358 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12359
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12360 //Regenerate the absolute position used for position checks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12361 this.positionAbs = this._convertPositionTo("absolute");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12362
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12363 //Set the helper position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12364 if(!this.options.axis || this.options.axis !== "y") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12365 this.helper[0].style.left = this.position.left+"px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12366 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12367 if(!this.options.axis || this.options.axis !== "x") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12368 this.helper[0].style.top = this.position.top+"px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12369 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12370
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12371 //Rearrange
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12372 for (i = this.items.length - 1; i >= 0; i--) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12373
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12374 //Cache variables and intersection, continue if no intersection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12375 item = this.items[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12376 itemElement = item.item[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12377 intersection = this._intersectsWithPointer(item);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12378 if (!intersection) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12379 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12380 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12381
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12382 // Only put the placeholder inside the current Container, skip all
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12383 // items from other containers. This works because when moving
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12384 // an item from one container to another the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12385 // currentContainer is switched before the placeholder is moved.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12386 //
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12387 // Without this, moving items in "sub-sortables" can cause
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12388 // the placeholder to jitter beetween the outer and inner container.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12389 if (item.instance !== this.currentContainer) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12390 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12391 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12392
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12393 // cannot intersect with itself
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12394 // no useless actions that have been done before
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12395 // no action if the item moved is the parent of the item checked
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12396 if (itemElement !== this.currentItem[0] &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12397 this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12398 !$.contains(this.placeholder[0], itemElement) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12399 (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12400 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12401
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12402 this.direction = intersection === 1 ? "down" : "up";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12403
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12404 if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12405 this._rearrange(event, item);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12406 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12407 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12408 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12409
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12410 this._trigger("change", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12411 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12412 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12413 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12414
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12415 //Post events to containers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12416 this._contactContainers(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12417
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12418 //Interconnect with droppables
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12419 if($.ui.ddmanager) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12420 $.ui.ddmanager.drag(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12421 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12422
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12423 //Call callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12424 this._trigger("sort", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12425
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12426 this.lastPositionAbs = this.positionAbs;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12427 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12428
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12429 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12430
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12431 _mouseStop: function(event, noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12432
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12433 if(!event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12434 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12435 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12436
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12437 //If we are using droppables, inform the manager about the drop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12438 if ($.ui.ddmanager && !this.options.dropBehaviour) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12439 $.ui.ddmanager.drop(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12440 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12441
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12442 if(this.options.revert) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12443 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12444 cur = this.placeholder.offset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12445 axis = this.options.axis,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12446 animation = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12447
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12448 if ( !axis || axis === "x" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12449 animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12450 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12451 if ( !axis || axis === "y" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12452 animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12453 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12454 this.reverting = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12455 $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12456 that._clear(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12457 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12458 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12459 this._clear(event, noPropagation);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12460 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12461
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12462 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12463
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12464 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12465
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12466 cancel: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12467
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12468 if(this.dragging) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12469
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12470 this._mouseUp({ target: null });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12471
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12472 if(this.options.helper === "original") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12473 this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12474 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12475 this.currentItem.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12476 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12477
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12478 //Post deactivating events to containers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12479 for (var i = this.containers.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12480 this.containers[i]._trigger("deactivate", null, this._uiHash(this));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12481 if(this.containers[i].containerCache.over) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12482 this.containers[i]._trigger("out", null, this._uiHash(this));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12483 this.containers[i].containerCache.over = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12484 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12485 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12486
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12487 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12488
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12489 if (this.placeholder) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12490 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12491 if(this.placeholder[0].parentNode) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12492 this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12493 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12494 if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12495 this.helper.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12496 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12497
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12498 $.extend(this, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12499 helper: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12500 dragging: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12501 reverting: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12502 _noFinalSort: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12503 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12504
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12505 if(this.domPosition.prev) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12506 $(this.domPosition.prev).after(this.currentItem);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12507 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12508 $(this.domPosition.parent).prepend(this.currentItem);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12509 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12510 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12511
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12512 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12513
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12514 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12515
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12516 serialize: function(o) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12517
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12518 var items = this._getItemsAsjQuery(o && o.connected),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12519 str = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12520 o = o || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12521
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12522 $(items).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12523 var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12524 if (res) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12525 str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12526 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12527 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12528
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12529 if(!str.length && o.key) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12530 str.push(o.key + "=");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12531 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12532
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12533 return str.join("&");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12535 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12536
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12537 toArray: function(o) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12538
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12539 var items = this._getItemsAsjQuery(o && o.connected),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12540 ret = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12541
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12542 o = o || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12543
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12544 items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12545 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12546
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12547 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12548
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12549 /* Be careful with the following core functions */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12550 _intersectsWith: function(item) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12551
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12552 var x1 = this.positionAbs.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12553 x2 = x1 + this.helperProportions.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12554 y1 = this.positionAbs.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12555 y2 = y1 + this.helperProportions.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12556 l = item.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12557 r = l + item.width,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12558 t = item.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12559 b = t + item.height,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12560 dyClick = this.offset.click.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12561 dxClick = this.offset.click.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12562 isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12563 isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12564 isOverElement = isOverElementHeight && isOverElementWidth;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12565
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12566 if ( this.options.tolerance === "pointer" ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12567 this.options.forcePointerForContainers ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12568 (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12569 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12570 return isOverElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12571 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12572
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12573 return (l < x1 + (this.helperProportions.width / 2) && // Right Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12574 x2 - (this.helperProportions.width / 2) < r && // Left Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12575 t < y1 + (this.helperProportions.height / 2) && // Bottom Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12576 y2 - (this.helperProportions.height / 2) < b ); // Top Half
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12577
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12578 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12579 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12580
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12581 _intersectsWithPointer: function(item) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12582
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12583 var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12584 isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12585 isOverElement = isOverElementHeight && isOverElementWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12586 verticalDirection = this._getDragVerticalDirection(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12587 horizontalDirection = this._getDragHorizontalDirection();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12589 if (!isOverElement) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12590 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12591 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12592
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12593 return this.floating ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12594 ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12595 : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12596
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12597 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12598
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12599 _intersectsWithSides: function(item) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12600
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12601 var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12602 isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12603 verticalDirection = this._getDragVerticalDirection(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12604 horizontalDirection = this._getDragHorizontalDirection();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12605
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12606 if (this.floating && horizontalDirection) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12607 return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12608 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12609 return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12610 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12611
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12612 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12613
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12614 _getDragVerticalDirection: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12615 var delta = this.positionAbs.top - this.lastPositionAbs.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12616 return delta !== 0 && (delta > 0 ? "down" : "up");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12617 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12618
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12619 _getDragHorizontalDirection: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12620 var delta = this.positionAbs.left - this.lastPositionAbs.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12621 return delta !== 0 && (delta > 0 ? "right" : "left");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12622 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12623
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12624 refresh: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12625 this._refreshItems(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12626 this.refreshPositions();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12627 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12628 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12629
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12630 _connectWith: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12631 var options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12632 return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12633 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12634
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12635 _getItemsAsjQuery: function(connected) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12636
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12637 var i, j, cur, inst,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12638 items = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12639 queries = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12640 connectWith = this._connectWith();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12641
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12642 if(connectWith && connected) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12643 for (i = connectWith.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12644 cur = $(connectWith[i]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12645 for ( j = cur.length - 1; j >= 0; j--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12646 inst = $.data(cur[j], this.widgetFullName);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12647 if(inst && inst !== this && !inst.options.disabled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12648 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12649 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12650 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12651 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12652 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12653
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12654 queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12655
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12656 function addItems() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12657 items.push( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12658 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12659 for (i = queries.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12660 queries[i][0].each( addItems );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12661 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12662
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12663 return $(items);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12664
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12665 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12666
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12667 _removeCurrentsFromItems: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12668
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12669 var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12670
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12671 this.items = $.grep(this.items, function (item) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12672 for (var j=0; j < list.length; j++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12673 if(list[j] === item.item[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12674 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12675 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12676 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12677 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12678 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12679
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12680 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12681
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12682 _refreshItems: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12683
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12684 this.items = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12685 this.containers = [this];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12686
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12687 var i, j, cur, inst, targetData, _queries, item, queriesLength,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12688 items = this.items,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12689 queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12690 connectWith = this._connectWith();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12691
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12692 if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12693 for (i = connectWith.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12694 cur = $(connectWith[i]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12695 for (j = cur.length - 1; j >= 0; j--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12696 inst = $.data(cur[j], this.widgetFullName);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12697 if(inst && inst !== this && !inst.options.disabled) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12698 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12699 this.containers.push(inst);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12700 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12701 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12702 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12703 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12705 for (i = queries.length - 1; i >= 0; i--) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12706 targetData = queries[i][1];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12707 _queries = queries[i][0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12708
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12709 for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12710 item = $(_queries[j]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12711
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12712 item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12713
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12714 items.push({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12715 item: item,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12716 instance: targetData,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12717 width: 0, height: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12718 left: 0, top: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12719 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12720 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12721 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12722
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12723 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12724
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12725 refreshPositions: function(fast) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12726
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12727 //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12728 if(this.offsetParent && this.helper) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12729 this.offset.parent = this._getParentOffset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12730 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12731
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12732 var i, item, t, p;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12733
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12734 for (i = this.items.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12735 item = this.items[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12736
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12737 //We ignore calculating positions of all connected containers when we're not over them
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12738 if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12739 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12740 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12741
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12742 t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12743
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12744 if (!fast) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12745 item.width = t.outerWidth();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12746 item.height = t.outerHeight();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12747 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12748
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12749 p = t.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12750 item.left = p.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12751 item.top = p.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12752 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12753
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12754 if(this.options.custom && this.options.custom.refreshContainers) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12755 this.options.custom.refreshContainers.call(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12756 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12757 for (i = this.containers.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12758 p = this.containers[i].element.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12759 this.containers[i].containerCache.left = p.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12760 this.containers[i].containerCache.top = p.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12761 this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12762 this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12763 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12764 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12765
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12766 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12767 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12768
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12769 _createPlaceholder: function(that) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12770 that = that || this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12771 var className,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12772 o = that.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12773
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12774 if(!o.placeholder || o.placeholder.constructor === String) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12775 className = o.placeholder;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12776 o.placeholder = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12777 element: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12779 var nodeName = that.currentItem[0].nodeName.toLowerCase(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12780 element = $( "<" + nodeName + ">", that.document[0] )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12781 .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12782 .removeClass("ui-sortable-helper");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12783
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12784 if ( nodeName === "tr" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12785 that.currentItem.children().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12786 $( "<td>&#160;</td>", that.document[0] )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12787 .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12788 .appendTo( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12789 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12790 } else if ( nodeName === "img" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12791 element.attr( "src", that.currentItem.attr( "src" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12792 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12793
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12794 if ( !className ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12795 element.css( "visibility", "hidden" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12796 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12797
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12798 return element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12799 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12800 update: function(container, p) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12801
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12802 // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12803 // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12804 if(className && !o.forcePlaceholderSize) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12805 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12806 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12807
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12808 //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12809 if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12810 if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12811 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12812 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12813 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12814
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12815 //Create the placeholder
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12816 that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12817
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12818 //Append it after the actual current item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12819 that.currentItem.after(that.placeholder);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12820
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12821 //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12822 o.placeholder.update(that, that.placeholder);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12824 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12825
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12826 _contactContainers: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12827 var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12828 innermostContainer = null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12829 innermostIndex = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12830
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12831 // get innermost container that intersects with item
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12832 for (i = this.containers.length - 1; i >= 0; i--) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12833
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12834 // never consider a container that's located within the item itself
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12835 if($.contains(this.currentItem[0], this.containers[i].element[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12836 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12837 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12838
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12839 if(this._intersectsWith(this.containers[i].containerCache)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12840
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12841 // if we've already found a container and it's more "inner" than this, then continue
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12842 if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12843 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12844 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12845
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12846 innermostContainer = this.containers[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12847 innermostIndex = i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12848
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12849 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12850 // container doesn't intersect. trigger "out" event if necessary
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12851 if(this.containers[i].containerCache.over) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12852 this.containers[i]._trigger("out", event, this._uiHash(this));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12853 this.containers[i].containerCache.over = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12854 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12855 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12856
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12857 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12858
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12859 // if no intersecting containers found, return
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12860 if(!innermostContainer) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12861 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12862 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12863
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12864 // move the item into the container if it's not there already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12865 if(this.containers.length === 1) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12866 if (!this.containers[innermostIndex].containerCache.over) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12867 this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12868 this.containers[innermostIndex].containerCache.over = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12869 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12870 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12871
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12872 //When entering a new container, we will find the item with the least distance and append our item near it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12873 dist = 10000;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12874 itemWithLeastDistance = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12875 floating = innermostContainer.floating || isFloating(this.currentItem);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12876 posProperty = floating ? "left" : "top";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12877 sizeProperty = floating ? "width" : "height";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12878 base = this.positionAbs[posProperty] + this.offset.click[posProperty];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12879 for (j = this.items.length - 1; j >= 0; j--) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12880 if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12881 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12882 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12883 if(this.items[j].item[0] === this.currentItem[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12884 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12885 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12886 if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12887 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12888 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12889 cur = this.items[j].item.offset()[posProperty];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12890 nearBottom = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12891 if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12892 nearBottom = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12893 cur += this.items[j][sizeProperty];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12894 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12895
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12896 if(Math.abs(cur - base) < dist) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12897 dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12898 this.direction = nearBottom ? "up": "down";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12899 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12900 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12901
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12902 //Check if dropOnEmpty is enabled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12903 if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12904 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12905 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12906
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12907 if(this.currentContainer === this.containers[innermostIndex]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12908 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12909 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12910
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12911 itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12912 this._trigger("change", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12913 this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12914 this.currentContainer = this.containers[innermostIndex];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12915
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12916 //Update the placeholder
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12917 this.options.placeholder.update(this.currentContainer, this.placeholder);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12918
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12919 this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12920 this.containers[innermostIndex].containerCache.over = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12921 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12922
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12923
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12924 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12925
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12926 _createHelper: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12927
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12928 var o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12929 helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12930
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12931 //Add the helper to the DOM if that didn't happen already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12932 if(!helper.parents("body").length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12933 $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12934 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12935
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12936 if(helper[0] === this.currentItem[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12937 this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12938 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12939
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12940 if(!helper[0].style.width || o.forceHelperSize) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12941 helper.width(this.currentItem.width());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12942 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12943 if(!helper[0].style.height || o.forceHelperSize) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12944 helper.height(this.currentItem.height());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12945 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12946
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12947 return helper;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12948
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12949 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12950
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12951 _adjustOffsetFromHelper: function(obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12952 if (typeof obj === "string") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12953 obj = obj.split(" ");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12954 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12955 if ($.isArray(obj)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12956 obj = {left: +obj[0], top: +obj[1] || 0};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12957 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12958 if ("left" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12959 this.offset.click.left = obj.left + this.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12960 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12961 if ("right" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12962 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12963 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12964 if ("top" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12965 this.offset.click.top = obj.top + this.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12966 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12967 if ("bottom" in obj) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12968 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12969 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12970 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12971
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12972 _getParentOffset: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12973
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12974
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12975 //Get the offsetParent and cache its position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12976 this.offsetParent = this.helper.offsetParent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12977 var po = this.offsetParent.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12978
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12979 // This is a special case where we need to modify a offset calculated on start, since the following happened:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12980 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12981 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12982 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12983 if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12984 po.left += this.scrollParent.scrollLeft();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12985 po.top += this.scrollParent.scrollTop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12986 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12987
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12988 // This needs to be actually done for all browsers, since pageX/pageY includes this information
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12989 // with an ugly IE fix
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12990 if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12991 po = { top: 0, left: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12992 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12993
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12994 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12995 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12996 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12997 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12998
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12999 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13000
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13001 _getRelativeOffset: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13002
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13003 if(this.cssPosition === "relative") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13004 var p = this.currentItem.position();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13005 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13006 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13007 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13008 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13009 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13010 return { top: 0, left: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13011 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13012
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13013 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13014
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13015 _cacheMargins: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13016 this.margins = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13017 left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13018 top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13019 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13020 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13022 _cacheHelperProportions: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13023 this.helperProportions = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13024 width: this.helper.outerWidth(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13025 height: this.helper.outerHeight()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13026 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13027 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13028
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13029 _setContainment: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13030
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13031 var ce, co, over,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13032 o = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13033 if(o.containment === "parent") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13034 o.containment = this.helper[0].parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13035 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13036 if(o.containment === "document" || o.containment === "window") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13037 this.containment = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13038 0 - this.offset.relative.left - this.offset.parent.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13039 0 - this.offset.relative.top - this.offset.parent.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13040 $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13041 ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13042 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13043 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13044
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13045 if(!(/^(document|window|parent)$/).test(o.containment)) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13046 ce = $(o.containment)[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13047 co = $(o.containment).offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13048 over = ($(ce).css("overflow") !== "hidden");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13049
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13050 this.containment = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13051 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13052 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13053 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13054 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13055 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13056 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13057
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13058 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13059
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13060 _convertPositionTo: function(d, pos) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13061
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13062 if(!pos) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13063 pos = this.position;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13064 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13065 var mod = d === "absolute" ? 1 : -1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13066 scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13067 scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13068
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13069 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13070 top: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13071 pos.top + // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13072 this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13073 this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13074 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13075 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13076 left: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13077 pos.left + // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13078 this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13079 this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13080 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13081 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13082 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13083
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13084 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13085
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13086 _generatePosition: function(event) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13087
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13088 var top, left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13089 o = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13090 pageX = event.pageX,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13091 pageY = event.pageY,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13092 scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13093
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13094 // This is another very weird special case that only happens for relative elements:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13095 // 1. If the css position is relative
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13096 // 2. and the scroll parent is the document or similar to the offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13097 // we have to refresh the relative offset during the scroll so there are no jumps
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13098 if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13099 this.offset.relative = this._getRelativeOffset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13100 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13101
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13102 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13103 * - Position constraining -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13104 * Constrain the position to a mix of grid, containment.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13105 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13106
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13107 if(this.originalPosition) { //If we are not dragging yet, we won't check for options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13108
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13109 if(this.containment) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13110 if(event.pageX - this.offset.click.left < this.containment[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13111 pageX = this.containment[0] + this.offset.click.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13112 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13113 if(event.pageY - this.offset.click.top < this.containment[1]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13114 pageY = this.containment[1] + this.offset.click.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13115 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13116 if(event.pageX - this.offset.click.left > this.containment[2]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13117 pageX = this.containment[2] + this.offset.click.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13118 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13119 if(event.pageY - this.offset.click.top > this.containment[3]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13120 pageY = this.containment[3] + this.offset.click.top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13121 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13122 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13123
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13124 if(o.grid) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13125 top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13126 pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13127
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13128 left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13129 pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13130 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13131
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13132 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13134 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13135 top: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13136 pageY - // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13137 this.offset.click.top - // Click offset (relative to the element)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13138 this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13139 this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13140 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13141 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13142 left: (
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13143 pageX - // The absolute mouse position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13144 this.offset.click.left - // Click offset (relative to the element)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13145 this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13146 this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13147 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13148 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13149 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13151 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13152
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13153 _rearrange: function(event, i, a, hardRefresh) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13154
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13155 a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13156
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13157 //Various things done here to improve the performance:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13158 // 1. we create a setTimeout, that calls refreshPositions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13159 // 2. on the instance, we have a counter variable, that get's higher after every append
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13160 // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13161 // 4. this lets only the last addition to the timeout stack through
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13162 this.counter = this.counter ? ++this.counter : 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13163 var counter = this.counter;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13164
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13165 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13166 if(counter === this.counter) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13167 this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13168 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13169 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13170
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13171 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13172
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13173 _clear: function(event, noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13174
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13175 this.reverting = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13176 // We delay all events that have to be triggered to after the point where the placeholder has been removed and
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13177 // everything else normalized again
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13178 var i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13179 delayedTriggers = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13180
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13181 // We first have to update the dom position of the actual currentItem
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13182 // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13183 if(!this._noFinalSort && this.currentItem.parent().length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13184 this.placeholder.before(this.currentItem);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13185 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13186 this._noFinalSort = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13187
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13188 if(this.helper[0] === this.currentItem[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13189 for(i in this._storedCSS) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13190 if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13191 this._storedCSS[i] = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13192 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13193 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13194 this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13195 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13196 this.currentItem.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13197 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13199 if(this.fromOutside && !noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13200 delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13201 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13202 if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13203 delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13204 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13205
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13206 // Check if the items Container has Changed and trigger appropriate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13207 // events.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13208 if (this !== this.currentContainer) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13209 if(!noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13210 delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13211 delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13212 delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13213 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13214 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13215
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13216
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13217 //Post events to containers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13218 function delayEvent( type, instance, container ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13219 return function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13220 container._trigger( type, event, instance._uiHash( instance ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13221 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13222 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13223 for (i = this.containers.length - 1; i >= 0; i--){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13224 if (!noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13225 delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13226 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13227 if(this.containers[i].containerCache.over) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13228 delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13229 this.containers[i].containerCache.over = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13230 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13231 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13232
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13233 //Do what was originally in plugins
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13234 if ( this.storedCursor ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13235 this.document.find( "body" ).css( "cursor", this.storedCursor );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13236 this.storedStylesheet.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13237 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13238 if(this._storedOpacity) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13239 this.helper.css("opacity", this._storedOpacity);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13240 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13241 if(this._storedZIndex) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13242 this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13243 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13244
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13245 this.dragging = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13246 if(this.cancelHelperRemoval) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13247 if(!noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13248 this._trigger("beforeStop", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13249 for (i=0; i < delayedTriggers.length; i++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13250 delayedTriggers[i].call(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13251 } //Trigger all delayed events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13252 this._trigger("stop", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13253 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13254
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13255 this.fromOutside = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13256 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13257 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13258
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13259 if(!noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13260 this._trigger("beforeStop", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13261 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13262
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13263 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13264 this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13265
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13266 if(this.helper[0] !== this.currentItem[0]) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13267 this.helper.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13268 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13269 this.helper = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13270
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13271 if(!noPropagation) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13272 for (i=0; i < delayedTriggers.length; i++) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13273 delayedTriggers[i].call(this, event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13274 } //Trigger all delayed events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13275 this._trigger("stop", event, this._uiHash());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13276 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13277
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13278 this.fromOutside = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13279 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13280
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13281 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13283 _trigger: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13284 if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13285 this.cancel();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13286 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13287 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13288
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13289 _uiHash: function(_inst) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13290 var inst = _inst || this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13291 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13292 helper: inst.helper,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13293 placeholder: inst.placeholder || $([]),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13294 position: inst.position,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13295 originalPosition: inst.originalPosition,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13296 offset: inst.positionAbs,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13297 item: inst.currentItem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13298 sender: _inst ? _inst.element : null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13299 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13300 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13301
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13302 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13303
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13304 })(jQuery);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13305 (function( $ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13306
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13307 function modifier( fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13308 return function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13309 var previous = this.element.val();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13310 fn.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13311 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13312 if ( previous !== this.element.val() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13313 this._trigger( "change" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13314 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13315 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13316 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13317
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13318 $.widget( "ui.spinner", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13319 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13320 defaultElement: "<input>",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13321 widgetEventPrefix: "spin",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13322 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13323 culture: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13324 icons: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13325 down: "ui-icon-triangle-1-s",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13326 up: "ui-icon-triangle-1-n"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13327 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13328 incremental: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13329 max: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13330 min: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13331 numberFormat: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13332 page: 10,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13333 step: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13334
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13335 change: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13336 spin: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13337 start: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13338 stop: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13339 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13341 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13342 // handle string values that need to be parsed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13343 this._setOption( "max", this.options.max );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13344 this._setOption( "min", this.options.min );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13345 this._setOption( "step", this.options.step );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13346
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13347 // Only format if there is a value, prevents the field from being marked
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13348 // as invalid in Firefox, see #9573.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13349 if ( this.value() !== "" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13350 // Format the value, but don't constrain.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13351 this._value( this.element.val(), true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13352 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13353
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13354 this._draw();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13355 this._on( this._events );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13356 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13357
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13358 // turning off autocomplete prevents the browser from remembering the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13359 // value when navigating through history, so we re-enable autocomplete
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13360 // if the page is unloaded before the widget is destroyed. #7790
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13361 this._on( this.window, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13362 beforeunload: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13363 this.element.removeAttr( "autocomplete" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13364 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13365 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13366 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13367
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13368 _getCreateOptions: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13369 var options = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13370 element = this.element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13371
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13372 $.each( [ "min", "max", "step" ], function( i, option ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13373 var value = element.attr( option );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13374 if ( value !== undefined && value.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13375 options[ option ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13376 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13377 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13378
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13379 return options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13380 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13381
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13382 _events: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13383 keydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13384 if ( this._start( event ) && this._keydown( event ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13385 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13386 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13387 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13388 keyup: "_stop",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13389 focus: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13390 this.previous = this.element.val();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13391 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13392 blur: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13393 if ( this.cancelBlur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13394 delete this.cancelBlur;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13395 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13396 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13397
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13398 this._stop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13399 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13400 if ( this.previous !== this.element.val() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13401 this._trigger( "change", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13402 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13403 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13404 mousewheel: function( event, delta ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13405 if ( !delta ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13406 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13407 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13408 if ( !this.spinning && !this._start( event ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13409 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13410 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13411
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13412 this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13413 clearTimeout( this.mousewheelTimer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13414 this.mousewheelTimer = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13415 if ( this.spinning ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13416 this._stop( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13417 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13418 }, 100 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13419 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13420 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13421 "mousedown .ui-spinner-button": function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13422 var previous;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13423
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13424 // We never want the buttons to have focus; whenever the user is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13425 // interacting with the spinner, the focus should be on the input.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13426 // If the input is focused then this.previous is properly set from
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13427 // when the input first received focus. If the input is not focused
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13428 // then we need to set this.previous based on the value before spinning.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13429 previous = this.element[0] === this.document[0].activeElement ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13430 this.previous : this.element.val();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13431 function checkFocus() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13432 var isActive = this.element[0] === this.document[0].activeElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13433 if ( !isActive ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13434 this.element.focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13435 this.previous = previous;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13436 // support: IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13437 // IE sets focus asynchronously, so we need to check if focus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13438 // moved off of the input because the user clicked on the button.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13439 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13440 this.previous = previous;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13441 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13442 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13443 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13444
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13445 // ensure focus is on (or stays on) the text field
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13446 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13447 checkFocus.call( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13448
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13449 // support: IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13450 // IE doesn't prevent moving focus even with event.preventDefault()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13451 // so we set a flag to know when we should ignore the blur event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13452 // and check (again) if focus moved off of the input.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13453 this.cancelBlur = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13454 this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13455 delete this.cancelBlur;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13456 checkFocus.call( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13457 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13458
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13459 if ( this._start( event ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13460 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13461 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13462
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13463 this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13464 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13465 "mouseup .ui-spinner-button": "_stop",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13466 "mouseenter .ui-spinner-button": function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13467 // button will add ui-state-active if mouse was down while mouseleave and kept down
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13468 if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13469 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13470 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13471
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13472 if ( this._start( event ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13473 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13474 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13475 this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13476 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13477 // TODO: do we really want to consider this a stop?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13478 // shouldn't we just stop the repeater and wait until mouseup before
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13479 // we trigger the stop event?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13480 "mouseleave .ui-spinner-button": "_stop"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13481 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13482
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13483 _draw: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13484 var uiSpinner = this.uiSpinner = this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13485 .addClass( "ui-spinner-input" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13486 .attr( "autocomplete", "off" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13487 .wrap( this._uiSpinnerHtml() )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13488 .parent()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13489 // add buttons
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13490 .append( this._buttonHtml() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13491
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13492 this.element.attr( "role", "spinbutton" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13493
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13494 // button bindings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13495 this.buttons = uiSpinner.find( ".ui-spinner-button" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13496 .attr( "tabIndex", -1 )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13497 .button()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13498 .removeClass( "ui-corner-all" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13499
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13500 // IE 6 doesn't understand height: 50% for the buttons
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13501 // unless the wrapper has an explicit height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13502 if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13503 uiSpinner.height() > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13504 uiSpinner.height( uiSpinner.height() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13505 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13506
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13507 // disable spinner if element was already disabled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13508 if ( this.options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13509 this.disable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13510 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13511 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13513 _keydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13514 var options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13515 keyCode = $.ui.keyCode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13516
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13517 switch ( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13518 case keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13519 this._repeat( null, 1, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13520 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13521 case keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13522 this._repeat( null, -1, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13523 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13524 case keyCode.PAGE_UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13525 this._repeat( null, options.page, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13526 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13527 case keyCode.PAGE_DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13528 this._repeat( null, -options.page, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13529 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13530 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13532 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13533 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13535 _uiSpinnerHtml: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13536 return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13537 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13538
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13539 _buttonHtml: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13540 return "" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13541 "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13542 "<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13543 "</a>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13544 "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13545 "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13546 "</a>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13547 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13548
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13549 _start: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13550 if ( !this.spinning && this._trigger( "start", event ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13551 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13552 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13553
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13554 if ( !this.counter ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13555 this.counter = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13556 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13557 this.spinning = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13558 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13559 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13560
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13561 _repeat: function( i, steps, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13562 i = i || 500;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13563
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13564 clearTimeout( this.timer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13565 this.timer = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13566 this._repeat( 40, steps, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13567 }, i );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13568
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13569 this._spin( steps * this.options.step, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13570 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13571
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13572 _spin: function( step, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13573 var value = this.value() || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13574
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13575 if ( !this.counter ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13576 this.counter = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13577 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13578
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13579 value = this._adjustValue( value + step * this._increment( this.counter ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13580
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13581 if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13582 this._value( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13583 this.counter++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13584 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13585 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13586
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13587 _increment: function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13588 var incremental = this.options.incremental;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13589
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13590 if ( incremental ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13591 return $.isFunction( incremental ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13592 incremental( i ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13593 Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13594 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13596 return 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13597 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13598
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13599 _precision: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13600 var precision = this._precisionOf( this.options.step );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13601 if ( this.options.min !== null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13602 precision = Math.max( precision, this._precisionOf( this.options.min ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13603 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13604 return precision;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13605 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13606
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13607 _precisionOf: function( num ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13608 var str = num.toString(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13609 decimal = str.indexOf( "." );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13610 return decimal === -1 ? 0 : str.length - decimal - 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13611 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13612
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13613 _adjustValue: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13614 var base, aboveMin,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13615 options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13616
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13617 // make sure we're at a valid step
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13618 // - find out where we are relative to the base (min or 0)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13619 base = options.min !== null ? options.min : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13620 aboveMin = value - base;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13621 // - round to the nearest step
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13622 aboveMin = Math.round(aboveMin / options.step) * options.step;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13623 // - rounding is based on 0, so adjust back to our base
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13624 value = base + aboveMin;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13625
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13626 // fix precision from bad JS floating point math
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13627 value = parseFloat( value.toFixed( this._precision() ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13628
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13629 // clamp the value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13630 if ( options.max !== null && value > options.max) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13631 return options.max;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13632 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13633 if ( options.min !== null && value < options.min ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13634 return options.min;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13635 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13636
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13637 return value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13638 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13639
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13640 _stop: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13641 if ( !this.spinning ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13642 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13643 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13644
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13645 clearTimeout( this.timer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13646 clearTimeout( this.mousewheelTimer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13647 this.counter = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13648 this.spinning = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13649 this._trigger( "stop", event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13650 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13651
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13652 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13653 if ( key === "culture" || key === "numberFormat" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13654 var prevValue = this._parse( this.element.val() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13655 this.options[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13656 this.element.val( this._format( prevValue ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13657 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13658 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13659
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13660 if ( key === "max" || key === "min" || key === "step" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13661 if ( typeof value === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13662 value = this._parse( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13663 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13664 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13665 if ( key === "icons" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13666 this.buttons.first().find( ".ui-icon" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13667 .removeClass( this.options.icons.up )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13668 .addClass( value.up );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13669 this.buttons.last().find( ".ui-icon" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13670 .removeClass( this.options.icons.down )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13671 .addClass( value.down );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13672 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13673
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13674 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13675
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13676 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13677 if ( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13678 this.element.prop( "disabled", true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13679 this.buttons.button( "disable" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13680 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13681 this.element.prop( "disabled", false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13682 this.buttons.button( "enable" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13683 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13684 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13685 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13686
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13687 _setOptions: modifier(function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13688 this._super( options );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13689 this._value( this.element.val() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13690 }),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13691
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13692 _parse: function( val ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13693 if ( typeof val === "string" && val !== "" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13694 val = window.Globalize && this.options.numberFormat ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13695 Globalize.parseFloat( val, 10, this.options.culture ) : +val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13696 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13697 return val === "" || isNaN( val ) ? null : val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13698 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13699
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13700 _format: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13701 if ( value === "" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13702 return "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13703 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13704 return window.Globalize && this.options.numberFormat ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13705 Globalize.format( value, this.options.numberFormat, this.options.culture ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13706 value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13707 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13708
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13709 _refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13710 this.element.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13711 "aria-valuemin": this.options.min,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13712 "aria-valuemax": this.options.max,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13713 // TODO: what should we do with values that can't be parsed?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13714 "aria-valuenow": this._parse( this.element.val() )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13715 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13716 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13717
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13718 // update the value without triggering change
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13719 _value: function( value, allowAny ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13720 var parsed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13721 if ( value !== "" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13722 parsed = this._parse( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13723 if ( parsed !== null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13724 if ( !allowAny ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13725 parsed = this._adjustValue( parsed );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13726 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13727 value = this._format( parsed );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13728 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13729 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13730 this.element.val( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13731 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13732 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13733
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13734 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13735 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13736 .removeClass( "ui-spinner-input" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13737 .prop( "disabled", false )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13738 .removeAttr( "autocomplete" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13739 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13740 .removeAttr( "aria-valuemin" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13741 .removeAttr( "aria-valuemax" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13742 .removeAttr( "aria-valuenow" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13743 this.uiSpinner.replaceWith( this.element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13744 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13745
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13746 stepUp: modifier(function( steps ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13747 this._stepUp( steps );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13748 }),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13749 _stepUp: function( steps ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13750 if ( this._start() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13751 this._spin( (steps || 1) * this.options.step );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13752 this._stop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13753 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13754 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13755
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13756 stepDown: modifier(function( steps ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13757 this._stepDown( steps );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13758 }),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13759 _stepDown: function( steps ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13760 if ( this._start() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13761 this._spin( (steps || 1) * -this.options.step );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13762 this._stop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13763 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13764 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13765
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13766 pageUp: modifier(function( pages ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13767 this._stepUp( (pages || 1) * this.options.page );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13768 }),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13769
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13770 pageDown: modifier(function( pages ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13771 this._stepDown( (pages || 1) * this.options.page );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13772 }),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13773
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13774 value: function( newVal ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13775 if ( !arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13776 return this._parse( this.element.val() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13777 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13778 modifier( this._value ).call( this, newVal );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13779 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13780
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13781 widget: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13782 return this.uiSpinner;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13783 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13784 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13785
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13786 }( jQuery ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13787 (function( $, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13788
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13789 var tabId = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13790 rhash = /#.*$/;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13791
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13792 function getNextTabId() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13793 return ++tabId;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13794 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13796 function isLocal( anchor ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13797 // support: IE7
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13798 // IE7 doesn't normalize the href property when set via script (#9317)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13799 anchor = anchor.cloneNode( false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13800
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13801 return anchor.hash.length > 1 &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13802 decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13803 decodeURIComponent( location.href.replace( rhash, "" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13804 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13805
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13806 $.widget( "ui.tabs", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13807 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13808 delay: 300,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13809 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13810 active: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13811 collapsible: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13812 event: "click",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13813 heightStyle: "content",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13814 hide: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13815 show: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13816
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13817 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13818 activate: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13819 beforeActivate: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13820 beforeLoad: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13821 load: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13822 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13824 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13825 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13826 options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13827
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13828 this.running = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13829
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13830 this.element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13831 .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13832 .toggleClass( "ui-tabs-collapsible", options.collapsible )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13833 // Prevent users from focusing disabled tabs via click
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13834 .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13835 if ( $( this ).is( ".ui-state-disabled" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13836 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13837 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13838 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13839 // support: IE <9
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13840 // Preventing the default action in mousedown doesn't prevent IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13841 // from focusing the element, so if the anchor gets focused, blur.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13842 // We don't have to worry about focusing the previously focused
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13843 // element since clicking on a non-focusable element should focus
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13844 // the body anyway.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13845 .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13846 if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13847 this.blur();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13848 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13849 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13850
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13851 this._processTabs();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13852 options.active = this._initialActive();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13853
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13854 // Take disabling tabs via class attribute from HTML
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13855 // into account and update option properly.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13856 if ( $.isArray( options.disabled ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13857 options.disabled = $.unique( options.disabled.concat(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13858 $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13859 return that.tabs.index( li );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13860 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13861 ) ).sort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13862 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13863
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13864 // check for length avoids error when initializing empty list
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13865 if ( this.options.active !== false && this.anchors.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13866 this.active = this._findActive( options.active );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13867 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13868 this.active = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13869 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13870
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13871 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13872
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13873 if ( this.active.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13874 this.load( options.active );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13875 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13876 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13877
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13878 _initialActive: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13879 var active = this.options.active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13880 collapsible = this.options.collapsible,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13881 locationHash = location.hash.substring( 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13882
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13883 if ( active === null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13884 // check the fragment identifier in the URL
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13885 if ( locationHash ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13886 this.tabs.each(function( i, tab ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13887 if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13888 active = i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13889 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13890 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13891 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13892 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13893
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13894 // check for a tab marked active via a class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13895 if ( active === null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13896 active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13897 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13898
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13899 // no active tab, set to false
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13900 if ( active === null || active === -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13901 active = this.tabs.length ? 0 : false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13902 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13903 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13904
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13905 // handle numbers: negative, out of range
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13906 if ( active !== false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13907 active = this.tabs.index( this.tabs.eq( active ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13908 if ( active === -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13909 active = collapsible ? false : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13910 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13911 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13912
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13913 // don't allow collapsible: false and active: false
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13914 if ( !collapsible && active === false && this.anchors.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13915 active = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13916 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13917
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13918 return active;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13919 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13920
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13921 _getCreateEventData: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13922 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13923 tab: this.active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13924 panel: !this.active.length ? $() : this._getPanelForTab( this.active )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13925 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13926 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13927
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13928 _tabKeydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13929 var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13930 selectedIndex = this.tabs.index( focusedTab ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13931 goingForward = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13932
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13933 if ( this._handlePageNav( event ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13934 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13935 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13936
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13937 switch ( event.keyCode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13938 case $.ui.keyCode.RIGHT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13939 case $.ui.keyCode.DOWN:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13940 selectedIndex++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13941 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13942 case $.ui.keyCode.UP:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13943 case $.ui.keyCode.LEFT:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13944 goingForward = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13945 selectedIndex--;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13946 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13947 case $.ui.keyCode.END:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13948 selectedIndex = this.anchors.length - 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13949 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13950 case $.ui.keyCode.HOME:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13951 selectedIndex = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13952 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13953 case $.ui.keyCode.SPACE:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13954 // Activate only, no collapsing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13955 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13956 clearTimeout( this.activating );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13957 this._activate( selectedIndex );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13958 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13959 case $.ui.keyCode.ENTER:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13960 // Toggle (cancel delayed activation, allow collapsing)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13961 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13962 clearTimeout( this.activating );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13963 // Determine if we should collapse or activate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13964 this._activate( selectedIndex === this.options.active ? false : selectedIndex );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13965 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13966 default:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13967 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13968 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13969
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13970 // Focus the appropriate tab, based on which key was pressed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13971 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13972 clearTimeout( this.activating );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13973 selectedIndex = this._focusNextTab( selectedIndex, goingForward );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13974
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13975 // Navigating with control key will prevent automatic activation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13976 if ( !event.ctrlKey ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13977 // Update aria-selected immediately so that AT think the tab is already selected.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13978 // Otherwise AT may confuse the user by stating that they need to activate the tab,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13979 // but the tab will already be activated by the time the announcement finishes.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13980 focusedTab.attr( "aria-selected", "false" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13981 this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13982
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13983 this.activating = this._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13984 this.option( "active", selectedIndex );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13985 }, this.delay );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13986 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13987 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13988
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13989 _panelKeydown: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13990 if ( this._handlePageNav( event ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13991 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13992 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13993
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13994 // Ctrl+up moves focus to the current tab
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13995 if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13996 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13997 this.active.focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13998 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13999 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14000
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14001 // Alt+page up/down moves focus to the previous/next tab (and activates)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14002 _handlePageNav: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14003 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14004 this._activate( this._focusNextTab( this.options.active - 1, false ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14005 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14006 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14007 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14008 this._activate( this._focusNextTab( this.options.active + 1, true ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14009 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14010 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14011 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14012
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14013 _findNextTab: function( index, goingForward ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14014 var lastTabIndex = this.tabs.length - 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14015
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14016 function constrain() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14017 if ( index > lastTabIndex ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14018 index = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14019 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14020 if ( index < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14021 index = lastTabIndex;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14022 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14023 return index;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14024 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14025
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14026 while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14027 index = goingForward ? index + 1 : index - 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14028 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14029
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14030 return index;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14031 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14032
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14033 _focusNextTab: function( index, goingForward ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14034 index = this._findNextTab( index, goingForward );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14035 this.tabs.eq( index ).focus();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14036 return index;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14037 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14038
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14039 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14040 if ( key === "active" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14041 // _activate() will handle invalid values and update this.options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14042 this._activate( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14043 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14044 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14045
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14046 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14047 // don't use the widget factory's disabled handling
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14048 this._setupDisabled( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14049 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14050 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14051
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14052 this._super( key, value);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14053
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14054 if ( key === "collapsible" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14055 this.element.toggleClass( "ui-tabs-collapsible", value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14056 // Setting collapsible: false while collapsed; open first panel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14057 if ( !value && this.options.active === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14058 this._activate( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14059 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14060 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14061
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14062 if ( key === "event" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14063 this._setupEvents( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14064 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14065
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14066 if ( key === "heightStyle" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14067 this._setupHeightStyle( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14068 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14069 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14070
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14071 _tabId: function( tab ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14072 return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14073 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14074
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14075 _sanitizeSelector: function( hash ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14076 return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14077 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14078
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14079 refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14080 var options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14081 lis = this.tablist.children( ":has(a[href])" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14082
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14083 // get disabled tabs from class attribute from HTML
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14084 // this will get converted to a boolean if needed in _refresh()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14085 options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14086 return lis.index( tab );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14087 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14088
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14089 this._processTabs();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14090
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14091 // was collapsed or no tabs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14092 if ( options.active === false || !this.anchors.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14093 options.active = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14094 this.active = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14095 // was active, but active tab is gone
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14096 } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14097 // all remaining tabs are disabled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14098 if ( this.tabs.length === options.disabled.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14099 options.active = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14100 this.active = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14101 // activate previous tab
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14102 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14103 this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14104 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14105 // was active, active tab still exists
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14106 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14107 // make sure active index is correct
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14108 options.active = this.tabs.index( this.active );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14109 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14110
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14111 this._refresh();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14112 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14113
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14114 _refresh: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14115 this._setupDisabled( this.options.disabled );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14116 this._setupEvents( this.options.event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14117 this._setupHeightStyle( this.options.heightStyle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14118
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14119 this.tabs.not( this.active ).attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14120 "aria-selected": "false",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14121 tabIndex: -1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14122 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14123 this.panels.not( this._getPanelForTab( this.active ) )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14124 .hide()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14125 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14126 "aria-expanded": "false",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14127 "aria-hidden": "true"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14128 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14129
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14130 // Make sure one tab is in the tab order
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14131 if ( !this.active.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14132 this.tabs.eq( 0 ).attr( "tabIndex", 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14133 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14134 this.active
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14135 .addClass( "ui-tabs-active ui-state-active" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14136 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14137 "aria-selected": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14138 tabIndex: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14139 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14140 this._getPanelForTab( this.active )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14141 .show()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14142 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14143 "aria-expanded": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14144 "aria-hidden": "false"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14145 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14146 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14147 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14148
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14149 _processTabs: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14150 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14151
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14152 this.tablist = this._getList()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14153 .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14154 .attr( "role", "tablist" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14155
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14156 this.tabs = this.tablist.find( "> li:has(a[href])" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14157 .addClass( "ui-state-default ui-corner-top" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14158 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14159 role: "tab",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14160 tabIndex: -1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14161 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14162
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14163 this.anchors = this.tabs.map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14164 return $( "a", this )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14165 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14166 .addClass( "ui-tabs-anchor" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14167 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14168 role: "presentation",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14169 tabIndex: -1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14170 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14171
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14172 this.panels = $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14173
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14174 this.anchors.each(function( i, anchor ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14175 var selector, panel, panelId,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14176 anchorId = $( anchor ).uniqueId().attr( "id" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14177 tab = $( anchor ).closest( "li" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14178 originalAriaControls = tab.attr( "aria-controls" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14179
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14180 // inline tab
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14181 if ( isLocal( anchor ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14182 selector = anchor.hash;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14183 panel = that.element.find( that._sanitizeSelector( selector ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14184 // remote tab
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14185 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14186 panelId = that._tabId( tab );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14187 selector = "#" + panelId;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14188 panel = that.element.find( selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14189 if ( !panel.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14190 panel = that._createPanel( panelId );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14191 panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14192 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14193 panel.attr( "aria-live", "polite" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14194 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14195
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14196 if ( panel.length) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14197 that.panels = that.panels.add( panel );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14198 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14199 if ( originalAriaControls ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14200 tab.data( "ui-tabs-aria-controls", originalAriaControls );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14201 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14202 tab.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14203 "aria-controls": selector.substring( 1 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14204 "aria-labelledby": anchorId
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14205 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14206 panel.attr( "aria-labelledby", anchorId );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14207 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14208
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14209 this.panels
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14210 .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14211 .attr( "role", "tabpanel" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14212 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14213
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14214 // allow overriding how to find the list for rare usage scenarios (#7715)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14215 _getList: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14216 return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14217 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14218
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14219 _createPanel: function( id ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14220 return $( "<div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14221 .attr( "id", id )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14222 .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14223 .data( "ui-tabs-destroy", true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14224 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14225
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14226 _setupDisabled: function( disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14227 if ( $.isArray( disabled ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14228 if ( !disabled.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14229 disabled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14230 } else if ( disabled.length === this.anchors.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14231 disabled = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14232 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14233 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14234
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14235 // disable tabs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14236 for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14237 if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14238 $( li )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14239 .addClass( "ui-state-disabled" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14240 .attr( "aria-disabled", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14241 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14242 $( li )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14243 .removeClass( "ui-state-disabled" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14244 .removeAttr( "aria-disabled" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14245 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14246 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14247
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14248 this.options.disabled = disabled;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14249 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14250
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14251 _setupEvents: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14252 var events = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14253 click: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14254 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14255 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14256 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14257 if ( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14258 $.each( event.split(" "), function( index, eventName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14259 events[ eventName ] = "_eventHandler";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14260 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14261 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14262
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14263 this._off( this.anchors.add( this.tabs ).add( this.panels ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14264 this._on( this.anchors, events );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14265 this._on( this.tabs, { keydown: "_tabKeydown" } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14266 this._on( this.panels, { keydown: "_panelKeydown" } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14267
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14268 this._focusable( this.tabs );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14269 this._hoverable( this.tabs );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14270 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14271
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14272 _setupHeightStyle: function( heightStyle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14273 var maxHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14274 parent = this.element.parent();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14276 if ( heightStyle === "fill" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14277 maxHeight = parent.height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14278 maxHeight -= this.element.outerHeight() - this.element.height();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14279
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14280 this.element.siblings( ":visible" ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14281 var elem = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14282 position = elem.css( "position" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14283
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14284 if ( position === "absolute" || position === "fixed" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14285 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14286 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14287 maxHeight -= elem.outerHeight( true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14288 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14289
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14290 this.element.children().not( this.panels ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14291 maxHeight -= $( this ).outerHeight( true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14292 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14293
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14294 this.panels.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14295 $( this ).height( Math.max( 0, maxHeight -
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14296 $( this ).innerHeight() + $( this ).height() ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14297 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14298 .css( "overflow", "auto" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14299 } else if ( heightStyle === "auto" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14300 maxHeight = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14301 this.panels.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14302 maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14303 }).height( maxHeight );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14304 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14305 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14306
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14307 _eventHandler: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14308 var options = this.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14309 active = this.active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14310 anchor = $( event.currentTarget ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14311 tab = anchor.closest( "li" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14312 clickedIsActive = tab[ 0 ] === active[ 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14313 collapsing = clickedIsActive && options.collapsible,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14314 toShow = collapsing ? $() : this._getPanelForTab( tab ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14315 toHide = !active.length ? $() : this._getPanelForTab( active ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14316 eventData = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14317 oldTab: active,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14318 oldPanel: toHide,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14319 newTab: collapsing ? $() : tab,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14320 newPanel: toShow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14321 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14322
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14323 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14324
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14325 if ( tab.hasClass( "ui-state-disabled" ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14326 // tab is already loading
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14327 tab.hasClass( "ui-tabs-loading" ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14328 // can't switch durning an animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14329 this.running ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14330 // click on active header, but not collapsible
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14331 ( clickedIsActive && !options.collapsible ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14332 // allow canceling activation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14333 ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14334 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14335 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14336
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14337 options.active = collapsing ? false : this.tabs.index( tab );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14338
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14339 this.active = clickedIsActive ? $() : tab;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14340 if ( this.xhr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14341 this.xhr.abort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14342 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14343
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14344 if ( !toHide.length && !toShow.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14345 $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14346 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14347
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14348 if ( toShow.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14349 this.load( this.tabs.index( tab ), event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14350 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14351 this._toggle( event, eventData );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14352 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14353
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14354 // handles show/hide for selecting tabs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14355 _toggle: function( event, eventData ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14356 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14357 toShow = eventData.newPanel,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14358 toHide = eventData.oldPanel;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14359
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14360 this.running = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14361
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14362 function complete() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14363 that.running = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14364 that._trigger( "activate", event, eventData );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14365 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14366
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14367 function show() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14368 eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14369
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14370 if ( toShow.length && that.options.show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14371 that._show( toShow, that.options.show, complete );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14372 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14373 toShow.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14374 complete();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14375 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14376 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14377
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14378 // start out by hiding, then showing, then completing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14379 if ( toHide.length && this.options.hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14380 this._hide( toHide, this.options.hide, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14381 eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14382 show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14383 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14384 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14385 eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14386 toHide.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14387 show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14388 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14389
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14390 toHide.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14391 "aria-expanded": "false",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14392 "aria-hidden": "true"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14393 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14394 eventData.oldTab.attr( "aria-selected", "false" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14395 // If we're switching tabs, remove the old tab from the tab order.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14396 // If we're opening from collapsed state, remove the previous tab from the tab order.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14397 // If we're collapsing, then keep the collapsing tab in the tab order.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14398 if ( toShow.length && toHide.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14399 eventData.oldTab.attr( "tabIndex", -1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14400 } else if ( toShow.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14401 this.tabs.filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14402 return $( this ).attr( "tabIndex" ) === 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14403 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14404 .attr( "tabIndex", -1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14405 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14406
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14407 toShow.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14408 "aria-expanded": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14409 "aria-hidden": "false"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14410 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14411 eventData.newTab.attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14412 "aria-selected": "true",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14413 tabIndex: 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14414 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14415 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14416
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14417 _activate: function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14418 var anchor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14419 active = this._findActive( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14420
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14421 // trying to activate the already active panel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14422 if ( active[ 0 ] === this.active[ 0 ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14423 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14424 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14425
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14426 // trying to collapse, simulate a click on the current active header
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14427 if ( !active.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14428 active = this.active;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14429 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14430
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14431 anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14432 this._eventHandler({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14433 target: anchor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14434 currentTarget: anchor,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14435 preventDefault: $.noop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14436 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14437 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14438
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14439 _findActive: function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14440 return index === false ? $() : this.tabs.eq( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14441 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14442
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14443 _getIndex: function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14444 // meta-function to give users option to provide a href string instead of a numerical index.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14445 if ( typeof index === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14446 index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14447 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14448
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14449 return index;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14450 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14451
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14452 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14453 if ( this.xhr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14454 this.xhr.abort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14455 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14456
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14457 this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14458
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14459 this.tablist
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14460 .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14461 .removeAttr( "role" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14462
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14463 this.anchors
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14464 .removeClass( "ui-tabs-anchor" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14465 .removeAttr( "role" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14466 .removeAttr( "tabIndex" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14467 .removeUniqueId();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14468
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14469 this.tabs.add( this.panels ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14470 if ( $.data( this, "ui-tabs-destroy" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14471 $( this ).remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14472 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14473 $( this )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14474 .removeClass( "ui-state-default ui-state-active ui-state-disabled " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14475 "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14476 .removeAttr( "tabIndex" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14477 .removeAttr( "aria-live" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14478 .removeAttr( "aria-busy" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14479 .removeAttr( "aria-selected" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14480 .removeAttr( "aria-labelledby" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14481 .removeAttr( "aria-hidden" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14482 .removeAttr( "aria-expanded" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14483 .removeAttr( "role" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14484 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14485 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14486
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14487 this.tabs.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14488 var li = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14489 prev = li.data( "ui-tabs-aria-controls" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14490 if ( prev ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14491 li
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14492 .attr( "aria-controls", prev )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14493 .removeData( "ui-tabs-aria-controls" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14494 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14495 li.removeAttr( "aria-controls" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14496 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14497 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14498
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14499 this.panels.show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14500
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14501 if ( this.options.heightStyle !== "content" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14502 this.panels.css( "height", "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14503 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14504 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14505
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14506 enable: function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14507 var disabled = this.options.disabled;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14508 if ( disabled === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14509 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14510 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14511
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14512 if ( index === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14513 disabled = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14514 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14515 index = this._getIndex( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14516 if ( $.isArray( disabled ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14517 disabled = $.map( disabled, function( num ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14518 return num !== index ? num : null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14519 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14520 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14521 disabled = $.map( this.tabs, function( li, num ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14522 return num !== index ? num : null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14523 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14524 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14525 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14526 this._setupDisabled( disabled );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14527 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14528
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14529 disable: function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14530 var disabled = this.options.disabled;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14531 if ( disabled === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14532 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14533 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14535 if ( index === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14536 disabled = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14537 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14538 index = this._getIndex( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14539 if ( $.inArray( index, disabled ) !== -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14540 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14541 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14542 if ( $.isArray( disabled ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14543 disabled = $.merge( [ index ], disabled ).sort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14544 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14545 disabled = [ index ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14546 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14547 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14548 this._setupDisabled( disabled );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14549 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14550
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14551 load: function( index, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14552 index = this._getIndex( index );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14553 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14554 tab = this.tabs.eq( index ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14555 anchor = tab.find( ".ui-tabs-anchor" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14556 panel = this._getPanelForTab( tab ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14557 eventData = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14558 tab: tab,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14559 panel: panel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14560 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14561
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14562 // not remote
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14563 if ( isLocal( anchor[ 0 ] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14564 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14565 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14566
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14567 this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14568
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14569 // support: jQuery <1.8
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14570 // jQuery <1.8 returns false if the request is canceled in beforeSend,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14571 // but as of 1.8, $.ajax() always returns a jqXHR object.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14572 if ( this.xhr && this.xhr.statusText !== "canceled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14573 tab.addClass( "ui-tabs-loading" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14574 panel.attr( "aria-busy", "true" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14575
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14576 this.xhr
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14577 .success(function( response ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14578 // support: jQuery <1.8
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14579 // http://bugs.jquery.com/ticket/11778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14580 setTimeout(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14581 panel.html( response );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14582 that._trigger( "load", event, eventData );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14583 }, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14584 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14585 .complete(function( jqXHR, status ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14586 // support: jQuery <1.8
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14587 // http://bugs.jquery.com/ticket/11778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14588 setTimeout(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14589 if ( status === "abort" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14590 that.panels.stop( false, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14591 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14592
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14593 tab.removeClass( "ui-tabs-loading" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14594 panel.removeAttr( "aria-busy" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14596 if ( jqXHR === that.xhr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14597 delete that.xhr;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14598 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14599 }, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14600 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14601 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14602 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14603
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14604 _ajaxSettings: function( anchor, event, eventData ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14605 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14606 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14607 url: anchor.attr( "href" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14608 beforeSend: function( jqXHR, settings ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14609 return that._trigger( "beforeLoad", event,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14610 $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14611 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14612 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14613 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14614
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14615 _getPanelForTab: function( tab ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14616 var id = $( tab ).attr( "aria-controls" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14617 return this.element.find( this._sanitizeSelector( "#" + id ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14618 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14619 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14620
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14621 })( jQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14622 (function( $ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14623
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14624 var increments = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14625
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14626 function addDescribedBy( elem, id ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14627 var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14628 describedby.push( id );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14629 elem
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14630 .data( "ui-tooltip-id", id )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14631 .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14632 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14633
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14634 function removeDescribedBy( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14635 var id = elem.data( "ui-tooltip-id" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14636 describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14637 index = $.inArray( id, describedby );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14638 if ( index !== -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14639 describedby.splice( index, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14640 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14641
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14642 elem.removeData( "ui-tooltip-id" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14643 describedby = $.trim( describedby.join( " " ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14644 if ( describedby ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14645 elem.attr( "aria-describedby", describedby );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14646 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14647 elem.removeAttr( "aria-describedby" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14648 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14649 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14650
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14651 $.widget( "ui.tooltip", {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14652 version: "1.10.4",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14653 options: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14654 content: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14655 // support: IE<9, Opera in jQuery <1.7
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14656 // .text() can't accept undefined, so coerce to a string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14657 var title = $( this ).attr( "title" ) || "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14658 // Escape title, since we're going from an attribute to raw HTML
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14659 return $( "<a>" ).text( title ).html();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14660 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14661 hide: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14662 // Disabled elements have inconsistent behavior across browsers (#8661)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14663 items: "[title]:not([disabled])",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14664 position: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14665 my: "left top+15",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14666 at: "left bottom",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14667 collision: "flipfit flip"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14668 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14669 show: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14670 tooltipClass: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14671 track: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14672
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14673 // callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14674 close: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14675 open: null
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14676 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14677
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14678 _create: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14679 this._on({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14680 mouseover: "open",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14681 focusin: "open"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14682 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14683
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14684 // IDs of generated tooltips, needed for destroy
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14685 this.tooltips = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14686 // IDs of parent tooltips where we removed the title attribute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14687 this.parents = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14688
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14689 if ( this.options.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14690 this._disable();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14691 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14692 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14693
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14694 _setOption: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14695 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14696
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14697 if ( key === "disabled" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14698 this[ value ? "_disable" : "_enable" ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14699 this.options[ key ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14700 // disable element style changes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14701 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14702 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14703
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14704 this._super( key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14705
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14706 if ( key === "content" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14707 $.each( this.tooltips, function( id, element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14708 that._updateContent( element );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14709 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14710 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14711 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14712
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14713 _disable: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14714 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14715
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14716 // close open tooltips
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14717 $.each( this.tooltips, function( id, element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14718 var event = $.Event( "blur" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14719 event.target = event.currentTarget = element[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14720 that.close( event, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14721 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14722
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14723 // remove title attributes to prevent native tooltips
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14724 this.element.find( this.options.items ).addBack().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14725 var element = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14726 if ( element.is( "[title]" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14727 element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14728 .data( "ui-tooltip-title", element.attr( "title" ) )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14729 .attr( "title", "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14730 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14731 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14732 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14733
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14734 _enable: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14735 // restore title attributes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14736 this.element.find( this.options.items ).addBack().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14737 var element = $( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14738 if ( element.data( "ui-tooltip-title" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14739 element.attr( "title", element.data( "ui-tooltip-title" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14740 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14741 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14742 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14743
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14744 open: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14745 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14746 target = $( event ? event.target : this.element )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14747 // we need closest here due to mouseover bubbling,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14748 // but always pointing at the same event target
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14749 .closest( this.options.items );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14750
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14751 // No element to show a tooltip for or the tooltip is already open
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14752 if ( !target.length || target.data( "ui-tooltip-id" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14753 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14754 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14755
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14756 if ( target.attr( "title" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14757 target.data( "ui-tooltip-title", target.attr( "title" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14758 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14759
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14760 target.data( "ui-tooltip-open", true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14761
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14762 // kill parent tooltips, custom or native, for hover
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14763 if ( event && event.type === "mouseover" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14764 target.parents().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14765 var parent = $( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14766 blurEvent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14767 if ( parent.data( "ui-tooltip-open" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14768 blurEvent = $.Event( "blur" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14769 blurEvent.target = blurEvent.currentTarget = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14770 that.close( blurEvent, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14771 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14772 if ( parent.attr( "title" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14773 parent.uniqueId();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14774 that.parents[ this.id ] = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14775 element: this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14776 title: parent.attr( "title" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14777 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14778 parent.attr( "title", "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14779 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14780 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14781 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14782
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14783 this._updateContent( target, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14784 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14785
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14786 _updateContent: function( target, event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14787 var content,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14788 contentOption = this.options.content,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14789 that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14790 eventType = event ? event.type : null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14791
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14792 if ( typeof contentOption === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14793 return this._open( event, target, contentOption );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14794 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14796 content = contentOption.call( target[0], function( response ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14797 // ignore async response if tooltip was closed already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14798 if ( !target.data( "ui-tooltip-open" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14799 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14800 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14801 // IE may instantly serve a cached response for ajax requests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14802 // delay this call to _open so the other call to _open runs first
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14803 that._delay(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14804 // jQuery creates a special event for focusin when it doesn't
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14805 // exist natively. To improve performance, the native event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14806 // object is reused and the type is changed. Therefore, we can't
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14807 // rely on the type being correct after the event finished
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14808 // bubbling, so we set it back to the previous value. (#8740)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14809 if ( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14810 event.type = eventType;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14811 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14812 this._open( event, target, response );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14813 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14814 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14815 if ( content ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14816 this._open( event, target, content );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14817 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14818 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14819
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14820 _open: function( event, target, content ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14821 var tooltip, events, delayedShow,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14822 positionOption = $.extend( {}, this.options.position );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14824 if ( !content ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14825 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14826 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14827
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14828 // Content can be updated multiple times. If the tooltip already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14829 // exists, then just update the content and bail.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14830 tooltip = this._find( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14831 if ( tooltip.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14832 tooltip.find( ".ui-tooltip-content" ).html( content );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14833 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14834 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14835
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14836 // if we have a title, clear it to prevent the native tooltip
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14837 // we have to check first to avoid defining a title if none exists
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14838 // (we don't want to cause an element to start matching [title])
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14839 //
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14840 // We use removeAttr only for key events, to allow IE to export the correct
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14841 // accessible attributes. For mouse events, set to empty string to avoid
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14842 // native tooltip showing up (happens only when removing inside mouseover).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14843 if ( target.is( "[title]" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14844 if ( event && event.type === "mouseover" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14845 target.attr( "title", "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14846 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14847 target.removeAttr( "title" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14848 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14849 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14850
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14851 tooltip = this._tooltip( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14852 addDescribedBy( target, tooltip.attr( "id" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14853 tooltip.find( ".ui-tooltip-content" ).html( content );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14854
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14855 function position( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14856 positionOption.of = event;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14857 if ( tooltip.is( ":hidden" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14858 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14859 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14860 tooltip.position( positionOption );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14861 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14862 if ( this.options.track && event && /^mouse/.test( event.type ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14863 this._on( this.document, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14864 mousemove: position
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14865 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14866 // trigger once to override element-relative positioning
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14867 position( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14868 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14869 tooltip.position( $.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14870 of: target
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14871 }, this.options.position ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14872 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14873
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14874 tooltip.hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14875
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14876 this._show( tooltip, this.options.show );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14877 // Handle tracking tooltips that are shown with a delay (#8644). As soon
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14878 // as the tooltip is visible, position the tooltip using the most recent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14879 // event.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14880 if ( this.options.show && this.options.show.delay ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14881 delayedShow = this.delayedShow = setInterval(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14882 if ( tooltip.is( ":visible" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14883 position( positionOption.of );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14884 clearInterval( delayedShow );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14885 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14886 }, $.fx.interval );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14887 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14888
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14889 this._trigger( "open", event, { tooltip: tooltip } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14890
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14891 events = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14892 keyup: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14893 if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14894 var fakeEvent = $.Event(event);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14895 fakeEvent.currentTarget = target[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14896 this.close( fakeEvent, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14897 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14898 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14899 remove: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14900 this._removeTooltip( tooltip );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14901 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14902 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14903 if ( !event || event.type === "mouseover" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14904 events.mouseleave = "close";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14905 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14906 if ( !event || event.type === "focusin" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14907 events.focusout = "close";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14908 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14909 this._on( true, target, events );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14910 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14911
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14912 close: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14913 var that = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14914 target = $( event ? event.currentTarget : this.element ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14915 tooltip = this._find( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14916
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14917 // disabling closes the tooltip, so we need to track when we're closing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14918 // to avoid an infinite loop in case the tooltip becomes disabled on close
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14919 if ( this.closing ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14920 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14921 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14922
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14923 // Clear the interval for delayed tracking tooltips
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14924 clearInterval( this.delayedShow );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14925
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14926 // only set title if we had one before (see comment in _open())
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14927 if ( target.data( "ui-tooltip-title" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14928 target.attr( "title", target.data( "ui-tooltip-title" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14929 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14930
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14931 removeDescribedBy( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14932
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14933 tooltip.stop( true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14934 this._hide( tooltip, this.options.hide, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14935 that._removeTooltip( $( this ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14936 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14937
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14938 target.removeData( "ui-tooltip-open" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14939 this._off( target, "mouseleave focusout keyup" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14940 // Remove 'remove' binding only on delegated targets
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14941 if ( target[0] !== this.element[0] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14942 this._off( target, "remove" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14943 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14944 this._off( this.document, "mousemove" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14945
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14946 if ( event && event.type === "mouseleave" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14947 $.each( this.parents, function( id, parent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14948 $( parent.element ).attr( "title", parent.title );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14949 delete that.parents[ id ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14950 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14951 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14952
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14953 this.closing = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14954 this._trigger( "close", event, { tooltip: tooltip } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14955 this.closing = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14956 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14957
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14958 _tooltip: function( element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14959 var id = "ui-tooltip-" + increments++,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14960 tooltip = $( "<div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14961 .attr({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14962 id: id,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14963 role: "tooltip"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14964 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14965 .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14966 ( this.options.tooltipClass || "" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14967 $( "<div>" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14968 .addClass( "ui-tooltip-content" )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14969 .appendTo( tooltip );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14970 tooltip.appendTo( this.document[0].body );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14971 this.tooltips[ id ] = element;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14972 return tooltip;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14973 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14974
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14975 _find: function( target ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14976 var id = target.data( "ui-tooltip-id" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14977 return id ? $( "#" + id ) : $();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14978 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14979
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14980 _removeTooltip: function( tooltip ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14981 tooltip.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14982 delete this.tooltips[ tooltip.attr( "id" ) ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14983 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14984
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14985 _destroy: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14986 var that = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14987
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14988 // close open tooltips
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14989 $.each( this.tooltips, function( id, element ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14990 // Delegate to close method to handle common cleanup
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14991 var event = $.Event( "blur" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14992 event.target = event.currentTarget = element[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14993 that.close( event, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14994
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14995 // Remove immediately; destroying an open tooltip doesn't use the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14996 // hide animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14997 $( "#" + id ).remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14998
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14999 // Restore the title
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15000 if ( element.data( "ui-tooltip-title" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15001 element.attr( "title", element.data( "ui-tooltip-title" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15002 element.removeData( "ui-tooltip-title" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15003 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15004 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15005 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15006 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15007
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15008 }( jQuery ) );