Changeset 5015
- Timestamp:
- 09/05/06 10:42:41 (2 years ago)
- Files:
-
- trunk/actionpack/CHANGELOG (modified) (1 diff)
- trunk/actionpack/lib/action_view/helpers/javascripts/controls.js (modified) (4 diffs)
- trunk/actionpack/lib/action_view/helpers/javascripts/dragdrop.js (modified) (20 diffs)
- trunk/actionpack/lib/action_view/helpers/javascripts/effects.js (modified) (10 diffs)
- trunk/railties/CHANGELOG (modified) (1 diff)
- trunk/railties/html/javascripts/controls.js (modified) (4 diffs)
- trunk/railties/html/javascripts/dragdrop.js (modified) (20 diffs)
- trunk/railties/html/javascripts/effects.js (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/actionpack/CHANGELOG
r5012 r5015 1 1 *SVN* 2 3 * Update to script.aculo.us 1.6.3 [Thomas Fuchs] 2 4 3 5 * Update to Prototype 1.5.0_rc1 [sam] trunk/actionpack/lib/action_view/helpers/javascripts/controls.js
r4766 r5015 49 49 this.entryCount = 0; 50 50 51 if (this.setOptions)51 if(this.setOptions) 52 52 this.setOptions(options); 53 53 else … … 59 59 this.options.minChars = this.options.minChars || 1; 60 60 this.options.onShow = this.options.onShow || 61 function(element, update){ 62 if(!update.style.position || update.style.position=='absolute') { 63 update.style.position = 'absolute'; 64 Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight}); 65 } 66 Effect.Appear(update,{duration:0.15}); 67 }; 61 function(element, update){ 62 if(!update.style.position || update.style.position=='absolute') { 63 update.style.position = 'absolute'; 64 Position.clone(element, update, { 65 setHeight: false, 66 offsetTop: element.offsetHeight 67 }); 68 } 69 Effect.Appear(update,{duration:0.15}); 70 }; 68 71 this.options.onHide = this.options.onHide || 69 function(element, update){ new Effect.Fade(update,{duration:0.15}) };70 71 if (typeof(this.options.tokens) == 'string')72 function(element, update){ new Effect.Fade(update,{duration:0.15}) }; 73 74 if(typeof(this.options.tokens) == 'string') 72 75 this.options.tokens = new Array(this.options.tokens); 73 76 … … 275 278 276 279 this.stopIndicator(); 277 278 280 this.index = 0; 279 this.render(); 281 282 if(this.entryCount==1 && this.options.autoSelect) { 283 this.selectEntry(); 284 this.hide(); 285 } else { 286 this.render(); 287 } 280 288 } 281 289 }, … … 779 787 optionTag = document.createElement("option"); 780 788 optionTag.value = (e instanceof Array) ? e[0] : e; 789 if((typeof this.options.value == 'undefined') && 790 ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true; 781 791 if(this.options.value==optionTag.value) optionTag.selected = true; 782 792 optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e)); trunk/actionpack/lib/action_view/helpers/javascripts/dragdrop.js
r4766 r5015 149 149 150 150 activate: function(draggable) { 151 window.focus(); // allows keypress events if window isn't currently focused, fails for Safari 152 this.activeDraggable = draggable; 151 if(draggable.options.delay) { 152 this._timeout = setTimeout(function() { 153 Draggables._timeout = null; 154 window.focus(); 155 Draggables.activeDraggable = draggable; 156 }.bind(this), draggable.options.delay); 157 } else { 158 window.focus(); // allows keypress events if window isn't currently focused, fails for Safari 159 this.activeDraggable = draggable; 160 } 153 161 }, 154 162 … … 164 172 if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; 165 173 this._lastPointer = pointer; 174 166 175 this.activeDraggable.updateDrag(event, pointer); 167 176 }, 168 177 169 178 endDrag: function(event) { 179 if(this._timeout) { 180 clearTimeout(this._timeout); 181 this._timeout = null; 182 } 170 183 if(!this.activeDraggable) return; 171 184 this._lastPointer = null; … … 194 207 if(o[eventName]) o[eventName](eventName, draggable, event); 195 208 }); 209 if(draggable.options[eventName]) draggable.options[eventName](draggable, event); 196 210 }, 197 211 … … 208 222 209 223 var Draggable = Class.create(); 210 Draggable._revertCache = {};211 224 Draggable._dragging = {}; 212 225 213 226 Draggable.prototype = { 214 227 initialize: function(element) { 215 var options = Object.extend({228 var defaults = { 216 229 handle: false, 217 starteffect: function(element) {218 element._opacity = Element.getOpacity(element);219 Draggable._dragging[element] = true;220 new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});221 },222 230 reverteffect: function(element, top_offset, left_offset) { 223 231 var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; 224 Draggable._revertCache[element] = 225 new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, 226 queue: {scope:'_draggable', position:'end'} 227 }); 232 new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, 233 queue: {scope:'_draggable', position:'end'} 234 }); 228 235 }, 229 236 endeffect: function(element) { … … 231 238 new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 232 239 queue: {scope:'_draggable', position:'end'}, 233 afterFinish: function(){ Draggable._dragging[element] = false } 240 afterFinish: function(){ 241 Draggable._dragging[element] = false 242 } 234 243 }); 235 244 }, … … 239 248 scrollSensitivity: 20, 240 249 scrollSpeed: 15, 241 snap: false // false, or xy or [x,y] or function(x,y){ return [x,y] } 242 }, arguments[1] || {}); 250 snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] } 251 delay: 0 252 }; 253 254 if(arguments[1] && typeof arguments[1].endeffect == 'undefined') 255 Object.extend(defaults, { 256 starteffect: function(element) { 257 element._opacity = Element.getOpacity(element); 258 Draggable._dragging[element] = true; 259 new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 260 } 261 }); 262 263 var options = Object.extend(defaults, arguments[1] || {}); 243 264 244 265 this.element = $(element); … … 251 272 if(!this.handle) this.handle = this.element; 252 273 253 if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) 274 if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { 254 275 options.scroll = $(options.scroll); 276 this._isScrollChild = Element.childOf(this.element, options.scroll); 277 } 255 278 256 279 Element.makePositioned(this.element); // fix IE … … 278 301 279 302 initDrag: function(event) { 280 if(typeof Draggable._dragging[this.element] != undefined&&303 if(typeof Draggable._dragging[this.element] != 'undefined' && 281 304 Draggable._dragging[this.element]) return; 282 305 if(Event.isLeftClick(event)) { … … 290 313 src.tagName=='TEXTAREA')) return; 291 314 292 if(Draggable._revertCache[this.element]) {293 Draggable._revertCache[this.element].cancel();294 Draggable._revertCache[this.element] = null;295 }296 297 315 var pointer = [Event.pointerX(event), Event.pointerY(event)]; 298 316 var pos = Position.cumulativeOffset(this.element); … … 330 348 331 349 Draggables.notify('onStart', this, event); 350 332 351 if(this.options.starteffect) this.options.starteffect(this.element); 333 352 }, … … 338 357 Droppables.show(pointer, this.element); 339 358 Draggables.notify('onDrag', this, event); 359 340 360 this.draw(pointer); 341 361 if(this.options.change) this.options.change(this); … … 351 371 p[0] += this.options.scroll.scrollLeft; 352 372 p[1] += this.options.scroll.scrollTop; 373 374 p[0] += (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0); 375 p[1] += (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); 376 353 377 p.push(p[0]+this.options.scroll.offsetWidth); 354 378 p.push(p[1]+this.options.scroll.offsetHeight); … … 396 420 if(this.options.endeffect) 397 421 this.options.endeffect(this.element); 398 422 399 423 Draggables.deactivate(this); 400 424 Droppables.reset(); … … 416 440 draw: function(point) { 417 441 var pos = Position.cumulativeOffset(this.element); 442 if(this.options.ghosting) { 443 var r = Position.realOffset(this.element); 444 window.status = r.inspect(); 445 pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; 446 } 447 418 448 var d = this.currentDelta(); 419 449 pos[0] -= d[0]; pos[1] -= d[1]; 420 450 421 if(this.options.scroll && (this.options.scroll != window )) {451 if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { 422 452 pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; 423 453 pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; … … 446 476 if((!this.options.constraint) || (this.options.constraint=='vertical')) 447 477 style.top = p[1] + "px"; 478 448 479 if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering 449 480 }, … … 483 514 Droppables.show(Draggables._lastPointer, this.element); 484 515 Draggables.notify('onDrag', this); 485 Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); 486 Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; 487 Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; 488 if (Draggables._lastScrollPointer[0] < 0) 489 Draggables._lastScrollPointer[0] = 0; 490 if (Draggables._lastScrollPointer[1] < 0) 491 Draggables._lastScrollPointer[1] = 0; 492 this.draw(Draggables._lastScrollPointer); 516 if (this._isScrollChild) { 517 Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); 518 Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; 519 Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; 520 if (Draggables._lastScrollPointer[0] < 0) 521 Draggables._lastScrollPointer[0] = 0; 522 if (Draggables._lastScrollPointer[1] < 0) 523 Draggables._lastScrollPointer[1] = 0; 524 this.draw(Draggables._lastScrollPointer); 525 } 493 526 494 527 if(this.options.change) this.options.change(this); … … 542 575 543 576 var Sortable = { 577 SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, 578 544 579 sortables: {}, 545 580 … … 582 617 handle: false, // or a CSS class 583 618 only: false, 619 delay: 0, 584 620 hoverclass: null, 585 621 ghosting: false, … … 587 623 scrollSensitivity: 20, 588 624 scrollSpeed: 15, 589 format: /^[^_]*_(.*)$/,625 format: this.SERIALIZE_RULE, 590 626 onChange: Prototype.emptyFunction, 591 627 onUpdate: Prototype.emptyFunction … … 601 637 scrollSpeed: options.scrollSpeed, 602 638 scrollSensitivity: options.scrollSensitivity, 639 delay: options.delay, 603 640 ghosting: options.ghosting, 604 641 constraint: options.constraint, trunk/actionpack/lib/action_view/helpers/javascripts/effects.js
r4766 r5015 60 60 Element.setStyle(element, { opacity: 61 61 (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 62 0.999999 : null});63 if(/MSIE/.test(navigator.userAgent) )62 0.999999 : 1.0 }); 63 if(/MSIE/.test(navigator.userAgent) && !window.opera) 64 64 Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')}); 65 65 } else { 66 66 if(value < 0.00001) value = 0; 67 67 Element.setStyle(element, {opacity: value}); 68 if(/MSIE/.test(navigator.userAgent) )68 if(/MSIE/.test(navigator.userAgent) && !window.opera) 69 69 Element.setStyle(element, 70 70 { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') + … … 105 105 106 106 var Effect = { 107 _elementDoesNotExistError: { 108 name: 'ElementDoesNotExistError', 109 message: 'The specified DOM element does not exist, but is required for this effect to operate' 110 }, 107 111 tagifyText: function(element) { 108 112 if(typeof Builder == 'undefined') … … 110 114 111 115 var tagifyStyle = 'position:relative'; 112 if(/MSIE/.test(navigator.userAgent) ) tagifyStyle += ';zoom:1';116 if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1'; 113 117 element = $(element); 114 118 $A(element.childNodes).each( function(child) { … … 355 359 initialize: function(element) { 356 360 this.element = $(element); 361 if(!this.element) throw(Effect._elementDoesNotExistError); 357 362 // make this work on IE on elements without 'layout' 358 if(/MSIE/.test(navigator.userAgent) && (!this.element.currentStyle.hasLayout))363 if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) 359 364 this.element.setStyle({zoom: 1}); 360 365 var options = Object.extend({ … … 373 378 initialize: function(element) { 374 379 this.element = $(element); 380 if(!this.element) throw(Effect._elementDoesNotExistError); 375 381 var options = Object.extend({ 376 382 x: 0, … … 411 417 Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { 412 418 initialize: function(element, percent) { 413 this.element = $(element) 419 this.element = $(element); 420 if(!this.element) throw(Effect._elementDoesNotExistError); 414 421 var options = Object.extend({ 415 422 scaleX: true, … … 486 493 initialize: function(element) { 487 494 this.element = $(element); 495 if(!this.element) throw(Effect._elementDoesNotExistError); 488 496 var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); 489 497 this.start(options); … … 574 582 Effect.Puff = function(element) { 575 583 element = $(element); 576 var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position') }; 584 var oldStyle = { 585 opacity: element.getInlineOpacity(), 586 position: element.getStyle('position'), 587 top: element.style.top, 588 left: element.style.left, 589 width: element.style.width, 590 height: element.style.height 591 }; 577 592 return new Effect.Parallel( 578 593 [ new Effect.Scale(element, 200, … … 581 596 Object.extend({ duration: 1.0, 582 597 beforeSetupInternal: function(effect) { 583 effect.effects[0].element.setStyle({position: 'absolute'}); }, 598 Position.absolutize(effect.effects[0].element) 599 }, 584 600 afterFinishInternal: function(effect) { 585 601 effect.effects[0].element.hide(); … … 720 736 effect.element.undoClipping(); 721 737 // IE will crash if child is undoPositioned first 722 if(/MSIE/.test(navigator.userAgent) ){738 if(/MSIE/.test(navigator.userAgent) && !window.opera){ 723 739 effect.element.undoPositioned(); 724 740 effect.element.firstChild.undoPositioned(); trunk/railties/CHANGELOG
r5012 r5015 1 1 *SVN* 2 3 * Update to script.aculo.us 1.6.3 [Thomas Fuchs] 2 4 3 5 * Update to Prototype 1.5.0_rc1 [sam] trunk/railties/html/javascripts/controls.js
r4766 r5015 49 49 this.entryCount = 0; 50 50 51 if (this.setOptions)51 if(this.setOptions) 52 52 this.setOptions(options); 53 53 else … … 59 59 this.options.minChars = this.options.minChars || 1; 60 60 this.options.onShow = this.options.onShow || 61 function(element, update){ 62 if(!update.style.position || update.style.position=='absolute') { 63 update.style.position = 'absolute'; 64 Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight}); 65 } 66 Effect.Appear(update,{duration:0.15}); 67 }; 61 function(element, update){ 62 if(!update.style.position || update.style.position=='absolute') { 63 update.style.position = 'absolute'; 64 Position.clone(element, update, { 65 setHeight: false, 66 offsetTop: element.offsetHeight 67 }); 68 } 69 Effect.Appear(update,{duration:0.15}); 70 }; 68 71 this.options.onHide = this.options.onHide || 69 function(element, update){ new Effect.Fade(update,{duration:0.15}) };70 71 if (typeof(this.options.tokens) == 'string')72 function(element, update){ new Effect.Fade(update,{duration:0.15}) }; 73 74 if(typeof(this.options.tokens) == 'string') 72 75 this.options.tokens = new Array(this.options.tokens); 73 76 … … 275 278 276 279 this.stopIndicator(); 277 278 280 this.index = 0; 279 this.render(); 281 282 if(this.entryCount==1 && this.options.autoSelect) { 283 this.selectEntry(); 284 this.hide(); 285 } else { 286 this.render(); 287 } 280 288 } 281 289 }, … … 779 787 optionTag = document.createElement("option"); 780 788 optionTag.value = (e instanceof Array) ? e[0] : e; 789 if((typeof this.options.value == 'undefined') && 790 ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true; 781 791 if(this.options.value==optionTag.value) optionTag.selected = true; 782 792 optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e)); trunk/railties/html/javascripts/dragdrop.js
r4766 r5015 149 149 150 150 activate: function(draggable) { 151 window.focus(); // allows keypress events if window isn't currently focused, fails for Safari 152 this.activeDraggable = draggable; 151 if(draggable.options.delay) { 152 this._timeout = setTimeout(function() { 153 Draggables._timeout = null; 154 window.focus(); 155 Draggables.activeDraggable = draggable; 156 }.bind(this), draggable.options.delay); 157 } else { 158 window.focus(); // allows keypress events if window isn't currently focused, fails for Safari 159 this.activeDraggable = draggable; 160 } 153 161 }, 154 162 … … 164 172 if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; 165 173 this._lastPointer = pointer; 174 166 175 this.activeDraggable.updateDrag(event, pointer); 167 176 }, 168 177 169 178 endDrag: function(event) { 179 if(this._timeout) { 180 clearTimeout(this._timeout); 181 this._timeout = null; 182 } 170 183 if(!this.activeDraggable) return; 171 184 this._lastPointer = null; … … 194 207 if(o[eventName]) o[eventName](eventName, draggable, event); 195 208 }); 209 if(draggable.options[eventName]) draggable.options[eventName](draggable, event); 196 210 }, 197 211 … … 208 222 209 223 var Draggable = Class.create(); 210 Draggable._revertCache = {};211 224 Draggable._dragging = {}; 212 225 213 226 Draggable.prototype = { 214 227 initialize: function(element) { 215 var options = Object.extend({228 var defaults = { 216 229 handle: false, 217 starteffect: function(element) {218 element._opacity = Element.getOpacity(element);219 Draggable._dragging[element] = true;220 new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});221 },222 230 reverteffect: function(element, top_offset, left_offset) { 223 231 var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; 224 Draggable._revertCache[element] = 225 new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, 226 queue: {scope:'_draggable', position:'end'} 227 }); 232 new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, 233 queue: {scope:'_draggable', position:'end'} 234 }); 228 235 }, 229 236 endeffect: function(element) { … … 231 238 new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 232 239 queue: {scope:'_draggable', position:'end'}, 233 afterFinish: function(){ Draggable._dragging[element] = false } 240 afterFinish: function(){ 241 Draggable._dragging[element] = false 242 } 234 243 }); 235 244 }, … … 239 248 scrollSensitivity: 20, 240 249 scrollSpeed: 15, 241 snap: false // false, or xy or [x,y] or function(x,y){ return [x,y] } 242 }, arguments[1] || {}); 250 snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] } 251 delay: 0 252 }; 253 254 if(arguments[1] && typeof arguments[1].endeffect == 'undefined') 255 Object.extend(defaults, { 256 starteffect: function(element) { 257 element._opacity = Element.getOpacity(element); 258 Draggable._dragging[element] = true; 259 new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 260 } 261 }); 262 263 var options = Object.extend(defaults, arguments[1] || {}); 243 264 244 265 this.element = $(element); … … 251 272 if(!this.handle) this.handle = this.element; 252 273 253 if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) 274 if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { 254 275 options.scroll = $(options.scroll); 276 this._isScrollChild = Element.childOf(this.element, options.scroll); 277 } 255 278 256 279 Element.makePositioned(this.element); // fix IE … … 278 301 279 302 initDrag: function(event) { 280 if(typeof Draggable._dragging[this.element] != undefined&&303 if(typeof Draggable._dragging[this.element] != 'undefined' && 281 304 Draggable._dragging[this.element]) return; 282 305 if(Event.isLeftClick(event)) { … … 290 313 src.tagName=='TEXTAREA')) return; 291 314 292 if(Draggable._revertCache[this.element]) {293 Draggable._revertCache[this.element].cancel();294 Draggable._revertCache[this.element] = null;295 }296 297 315 var pointer = [Event.pointerX(event), Event.pointerY(event)]; 298 316 var pos = Position.cumulativeOffset(this.element); … … 330 348 331 349 Draggables.notify('onStart', this, event); 350 332 351 if(this.options.starteffect) this.options.starteffect(this.element); 333 352 }, … … 338 357 Droppables.show(pointer, this.element); 339 358 Draggables.notify('onDrag', this, event); 359 340 360 this.draw(pointer); 341 361 if(this.options.change) this.options.change(this); … … 351 371 p[0] += this.options.scroll.scrollLeft; 352 372 p[1] += this.options.scroll.scrollTop; 373 374 p[0] += (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0); 375 p[1] += (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); 376 353 377 p.push(p[0]+this.options.scroll.offsetWidth); 354 378 p.push(p[1]+this.options.scroll.offsetHeight); … … 396 420 if(this.options.endeffect) 397 421 this.options.endeffect(this.element); 398 422 399 423 Draggables.deactivate(this); 400 424 Droppables.reset(); … … 416 440 draw: function(point) { 417 441 var pos = Position.cumulativeOffset(this.element); 442 if(this.options.ghosting) { 443 var r = Position.realOffset(this.element); 444 window.status = r.inspect(); 445 pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; 446 } 447 418 448 var d = this.currentDelta(); 419 449 pos[0] -= d[0]; pos[1] -= d[1]; 420 450 421 if(this.options.scroll && (this.options.scroll != window )) {451 if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { 422 452 pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; 423 453 pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; … … 446 476 if((!this.options.constraint) || (this.options.constraint=='vertical')) 447 477 style.top = p[1] + "px"; 478 448 479 if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering 449 480 }, … … 483 514 Droppables.show(Draggables._lastPointer, this.element); 484 515 Draggables.notify('onDrag', this); 485 Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); 486 Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; 487 Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; 488 if (Draggables._lastScrollPointer[0] < 0) 489 Draggables._lastScrollPointer[0] = 0; 490 if (Draggables._lastScrollPointer[1] < 0) 491 Draggables._lastScrollPointer[1] = 0; 492 this.draw(Draggables._lastScrollPointer); 516 if (this._isScrollChild) { 517 Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); 518 Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; 519 Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; 520 if (Draggables._lastScrollPointer[0] < 0) 521 Draggables._lastScrollPointer[0] = 0; 522 if (Draggables._lastScrollPointer[1] < 0) 523 Draggables._lastScrollPointer[1] = 0; 524 this.draw(Draggables._lastScrollPointer); 525 } 493 526 494 527 if(this.options.change) this.options.change(this); … … 542 575 543 576 var Sortable = { 577 SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, 578 544 579 sortables: {}, 545 580 … … 582 617 handle: false, // or a CSS class 583 618 only: false, 619 delay: 0, 584 620 hoverclass: null, 585 621 ghosting: false, … … 587 623 scrollSensitivity: 20, 588 624 scrollSpeed: 15, 589 format: /^[^_]*_(.*)$/,625 format: this.SERIALIZE_RULE, 590 626 onChange: Prototype.emptyFunction, 591 627 onUpdate: Prototype.emptyFunction … … 601 637 scrollSpeed: options.scrollSpeed, 602 638 scrollSensitivity: options.scrollSensitivity, 639 delay: options.delay, 603 640 ghosting: options.ghosting, 604 641 constraint: options.constraint, trunk/railties/html/javascripts/effects.js
r4766 r5015 60 60 Element.setStyle(element, { opacity: 61 61 (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 62 0.999999 : null});63 if(/MSIE/.test(navigator.userAgent) )62 0.999999 : 1.0 }); 63 if(/MSIE/.test(navigator.userAgent) && !window.opera) 64 64 Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')}); 65 65 } else { 66 66 if(value < 0.00001) value = 0; 67 67 Element.setStyle(element, {opacity: value}); 68 if(/MSIE/.test(navigator.userAgent) )68 if(/MSIE/.test(navigator.userAgent) && !window.opera) 69 69 Element.setStyle(element, 70 70 { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') + … … 105 105 106 106 var Effect = { 107 _elementDoesNotExistError: { 108 name: 'ElementDoesNotExistError', 109 message: 'The specified DOM element does not exist, but is required for this effect to operate' 110 }, 107 111 tagifyText: function(element) { 108 112 if(typeof Builder == 'undefined') … … 110 114 111 115 var tagifyStyle = 'position:relative'; 112 if(/MSIE/.test(navigator.userAgent) ) tagifyStyle += ';zoom:1';116 if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1'; 113 117 element = $(element); 114 118 $A(element.childNodes).each( function(child) { … … 355 359 initialize: function(element) { 356 360 this.element = $(element); 361 if(!this.element) throw(Effect._elementDoesNotExistError); 357 362 // make this work on IE on elements without 'layout' 358 if(/MSIE/.test(navigator.userAgent) && (!this.element.currentStyle.hasLayout))363 if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) 359 364 this.element.setStyle({zoom: 1}); 360 365 var options = Object.extend({ … … 373 378 initialize: function(element) { 374 379 this.element = $(element); 380 if(!this.element) throw(Effect._elementDoesNotExistError); 375 381 var options = Object.extend({ 376 382 x: 0, … … 411 417 Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { 412 418 initialize: function(element, percent) { 413 this.element = $(element) 419 this.element = $(element); 420 if(!this.element) throw(Effect._elementDoesNotExistError); 414 421 var options = Object.extend({ 415 422 scaleX: true, … … 486 493 initialize: function(element) { 487 494 this.element = $(element); 495 if(!this.element) throw(Effect._elementDoesNotExistError); 488 496 var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); 489 497 this.start(options); … … 574 582 Effect.Puff = function(element) { 575 583 element = $(element); 576 var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position') }; 584 var oldStyle = { 585 opacity: element.getInlineOpacity(), 586 position: element.getStyle('position'), 587 top: element.style.top, 588 left: element.style.left, 589 width: element.style.width, 590 height: element.style.height 591 }; 577 592 return new Effect.Parallel( 578 593 [ new Effect.Scale(element, 200, … … 581 596 Object.extend({ duration: 1.0, 582 597 beforeSetupInternal: function(effect) { 583 effect.effects[0].element.setStyle({position: 'absolute'}); }, 598 Position.absolutize(effect.effects[0].element) 599 }, 584 600 afterFinishInternal: function(effect) { 585 601 effect.effects[0].element.hide(); … … 720 736 effect.element.undoClipping(); 721 737 // IE will crash if child is undoPositioned first 722 if(/MSIE/.test(navigator.userAgent) ){738 if(/MSIE/.test(navigator.userAgent) && !window.opera){ 723 739 effect.element.undoPositioned(); 724 740 effect.element.firstChild.undoPositioned();